大家再用ADC时,会不会出现这样的问题,就是程序一直死在等待ADC采样结束这个位置(就是while这个地方), 导致不能获得ADC的值?
具体初始化如下:
void Adc_Configration(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC); //使能ADC时钟
SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); // 设置 ADC 采样速率
//ADCSequenceDisable(ADC0_BASE, 0); // 配置前先禁止采样序列
ADCSequenceConfigure(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);
ADCSequenceStepConfigure(ADC_BASE, 0, 0, ADC_CTL_TS | ADC_CTL_END | ADC_CTL_IE);
ADCSequenceEnable(ADC_BASE, 0); // 使能采样序列
ADCIntClear(ADC_BASE, 0);
ADCIntEnable(ADC_BASE, 0); // 使能 ADC 中断
IntEnable(INT_ADC0); // 使能 ADC 采样序列中断
IntMasterEnable(); // 使能处理器中断
}
unsigned long adcSample(void)
{
unsigned long ulValue;
ADCProcessorTrigger(ADC_BASE, 0); // 处理器触发采样序列
while(!ADCIntStatus(ADC_BASE, 0, false))
{
}
ADCSequenceDataGet(ADC_BASE, 0, &ulValue); // 读取 ADC 转换结果
}
此帖出自
小平头技术问答
只要正常触发了 ADC 采样。转换完成后 ADCIntStatus 返回值就应该是非零的。
图中是我仿真时的截图,好像ADC的时钟只有0.5M,原因是不是就是这里呢
设置成这样时:SysCtlClockSet(SYSCTL_SYSDIV_10|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_6MHZ);
接上硬件仿真,发现程序死在了
SysCtlClockSet(unsigned long ulConfig)函数的
HWREG(SYSCTL_RCC) = ulRCC;地方
还有就是用软件做ADC仿真是不是不可以啊,我用上面的设置,软件仿真虽然ADC频率是16M,但是还是死在了ADC采样的地方。
哥们,问题解决了吗???多半是LM3S没有采到样,只能在那循环。
一周热门 更多>