我刚刚调过一段程序,发现一个问题,详情大神帮忙解疑:
我在配置LM3S8962的ADC中断时,发现:
char ADC_EndFlag=false;
触发ADC后,我在主函数中用以下这么一句等待采样完成
while(!ADC_EndFlag);
其中ADC_EndFlag在ADC中断函数内更改;
可是,发现单片机会一直死在while(!ADC_EndFlag);
而我断点硬件仿真,发现中断函数已经进入,而且ADC_EndFlag在:
//adc采样序列3的中断
void ADC_Sequenece_3_ISR(void)
{
unsigned long ulStatus;
ulStatus=ADCIntStatus(ADC_BASE,3,true);
ADCIntClear(ADC_BASE,3);
if(ulStatus!=0)
{
ADC_EndFlag=true;
}
}中被置1;可是程序还是是死在while(!ADC_EndFlag);中。
当我做以下更改:
for( i=0;i<60000;i++);
while(!ADC_EndFlag);
即在其前面加一个延时,程序就可以正常运行了。这是为什么啊?难道,中断中改过的状态更新不上?