您好!
我使用 ADC 序列发生器来监控电路板上的7个电源电压。
这是初始化 ADC 及其序列发生器的代码。
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
while (!(SysCtlPeripheralReady (SYSCTL_Periph_ADC0))); //等待外设就绪
MAP_GPIOPinTypeADC (GPIO_PORTD_BASE、GPIO_PIN_0); //1V
MAP_GPIOPinTypeADC (GPIO_PORTD_BASE、GPIO_PIN_1); //1.2V
MAP_GPIOPinTypeADC (GPIO_PORTD_BASE、GPIO_PIN_2); //1.5V
MAP_GPIOPinTypeADC (GPIO_PORTD_BASE、GPIO_PIN_3); //1.8V
MAP_GPIOPinTypeADC (GPIO_PORTD_BASE、GPIO_PIN_4); //2.5V
MAP_GPIOPinTypeADC (GPIO_PORTD_BASE、GPIO_PIN_5); /3.3V (通过 DIO2电阻器)
MAP_GPIOPinTypeADC (GPIO_PORTD_BASE、GPIO_PIN_6); /5V (通过 DIO2电阻器)
ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PIOSC | ADC_CLOCK_RATE_FULL、1); //两个 ADC 的时钟
ADCReferenceSet (ADC0_BASE、ADC_REF_INT); //VDDA = 3.3V
ADCSequenceDisable (ADC0_BASE、0); //禁用序列、然后再更改它
ADCSequenceConfigure (ADC0_BASE、0、ADC_TRIGGER_PROCESSOR、0); //选择处理器(软件)触发器
ADCSequenceStepConfigure (ADC0_BASE、0、0、ADC_CTL_CH15);
ADCSequenceStepConfigure (ADC0_BASE、0、1、ADC_CTL_CH14);
ADCSequenceStepConfigure (ADC0_BASE、0、2、ADC_CTL_CH13);
ADCSequenceStepConfigure (ADC0_BASE、0、3、ADC_CTL_CH12);
ADCSequenceStepConfigure (ADC0_BASE、0、4、ADC_CTL_CH7);
ADCSequenceStepConfigure (ADC0_BASE、0、5、ADC_CTL_CH6);
ADCSequenceStepConfigure (ADC0_BASE、0、6、ADC_CTL_CH5);
ADCSequenceStepConfigure (ADC0_BASE、0、7、ADC_CTL_CH5 | ADC_CTL_END);
ADCIntClear (ADC0_BASE、0); //清除中断状态标志
ADCSequenceEnable (ADC0_BASE、0); //使能序列
序列发生器在应用程序中每秒触发一次、如下所示...
uint32_t ADC0_RAW[8];
ADCProcessorTrigger (ADC0_BASE、0); //触发
while (ADCIntStatus (ADC0_BASE、0、false) //等待完成
{
}
ADCIntClear (ADC0_BASE、0); //清除 ADC 中断标志
ADCSequenceDataGet (ADC0_BASE、0、ADC0_RAW); //读取 ADC 值
在大多数情况下、这种方法效果非常好。
但是、有时序列会导致通道错误、通道0获取通道1输入、通道1获取通道2等 我可以在调试器中看到这种情况。 一旦处于此状态、它将保持此状态、直到复位(我认为)。 这当然会使电源监控完全无用!
是否有人遇到过此问题、是否有解决方法或解决方法?
谢谢、
Richard