
按勘误表所述进行了修改仍会导致CMPSS11误触发

CMPSS的滤波器是大于50ns的
当然,ADC预充电的解决方法本质上是在转换“问题”AGPIO通道之前,对连接已知电源轨的通道进行一次临时转换。目的是让ADC采样/保持电容从接近预期电压的位置开始工作,从而大幅降低共享AGPIO节点上的电荷反冲。
一个简单示例如下:
选择 ADC_SOC_NUMBER0 = 预充电通道(ADC 输入物理连接至 3.3V)
选择 ADC_SOC_NUMBER1 = 受影响通道(待采样的 AGPIO 模拟引脚)
假设为每个通道分配两个中断:
ADC_setInterruptSource(ADCA_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER0); ADC_enableInterrupt(ADCA_BASE, ADC_INT_NUMBER1); ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1); ADC_setInterruptSource(ADCA_BASE, ADC_INT_NUMBER2, ADC_SOC_NUMBER1); ADC_enableInterrupt(ADCA_BASE, ADC_INT_NUMBER2); ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER2);
那么当我们想要读取时
static inline uint16_t read_withh_precondition(void)
{
uint16_t dummy, value;
ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
ADC_forceSOC(ADCA_BASE, ADC_SOC_NUMBER0);
while(!ADC_getInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1)) { }
ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
dummy = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER0);
然后立即采样目标通道:
ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER2);
ADC_forceSOC(ADCA_BASE, TARGET_SOC);
while(!ADC_getInterruptStatus(ADCA_BASE, ADC_INT_NUMBER2)) { }
ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER2);
value = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER0);
return value;
}