uint32_t Buffer[1];
/*延时1ms*/
void delay_Nms(int n)
{
int k = 0;
for(k = n;k > 0;k--)
SysCtlDelay(SysCtlClockGet() / 3000);
}
void InitADC()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC1);
delay_Nms(1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
delay_Nms(1);
GPIOPinTypeADC(GPIO_PORTD_BASE,GPIO_PIN_2);
delay_Nms(1);
ADCSequenceConfigure(ADC1_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);
delay_Nms(1);
ADCSequenceStepConfigure(ADC1_BASE, 3, 0, ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END);
delay_Nms(1);
ADCReferenceSet(ADC1_BASE, ADC_REF_INT);
delay_Nms(1);
ADCIntEnable(ADC1_BASE,3);
delay_Nms(1);
IntEnable(INT_ADC1SS3_TM4C123);
delay_Nms(1);
IntMasterEnable();
delay_Nms(1);
ADCIntClear(ADC1_BASE,3);
delay_Nms(1);
ADCSequenceEnable(ADC1_BASE,3);
delay_Nms(1);
}
void main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_10 |SYSCTL_USE_PLL |SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);delay_Nms(1);
InitADC();
while(1)
{
ADCProcessorTrigger(ADC1_BASE, 3);
while(!ADCIntStatus(ADC1_BASE, 3, false))
{
}
ADCIntClear(ADC1_BASE, 3);
ADCSequenceUnderflowClear(ADC1_BASE,3);
ADCSequenceDataGet(ADC1_BASE, 3, Buffer);
}
}
这样配置后在PD2和GND间加上直流模拟电压,单步调试,却发现无论加不加电压\无论加的电压有何变化,FIFO中读到的值都一直在300(十进制)左右徘徊,
感觉就像是这个待转换的电压完全没有加到ADC上一样,而检测到的看起来像是噪声一样.
于是我在观察列表里查看了Buffer的值和几个寄存器,
发现从头至尾这个信道的UnderFlow标志和InterruptMask标志都是1,
而且,虽然我设置了Vref为内部的3V参考电压,但是这个ADC_CTL_VREF寄存器也是始终显示的0-....请问这些寄存器的值是说明我配置出错了吗?
新学M4,请多指教,求专家~
