我 发现、当中断溢出频繁发生时、ADC 中断例程函数有时无法执行。
测试结果如下所示。
(__LW_AT__1)、
_interrupt void Adca1_ISR (void)
{
uitest[0]= AdcaRegs.ADCINTFlG.bit.ADCINT1;
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1=1;
uitest[1]= AdcaRegs.ADCINTFlG.bit.ADCINT1;
uitest[2]= PieCtrlRegs.PIEIFR1.bit.INTx1;
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;
if ( AdcaRegs.ADCINTFlG.bit.ADCINT1 = 1
&PieCtrlRegs.PIEIFR1.bit.INTx1 ==0 )
{
uitest[3] = EPwm1Regs.TBCTR;
}
Task_RealTime();
}
(__LW_AT__2)、
_interrupt void Adca1_ISR (void)
{
Task_RealTime();
uitest[0]= AdcaRegs.ADCINTFlG.bit.ADCINT1;
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1=1;
uitest[1]= AdcaRegs.ADCINTFlG.bit.ADCINT1;
uitest[2]= PieCtrlRegs.PIEIFR1.bit.INTx1;
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;
if ( AdcaRegs.ADCINTFlG.bit.ADCINT1 = 1
&PieCtrlRegs.PIEIFR1.bit.INTx1 ==0 )
{
uitest[3] = EPwm1Regs.TBCTR;
}
}
两个中断例程函数的测试结果相同、当无法执行中断例程函数时、我们始终可以看到 uitest[0]= 1、uitest[1]= 1、uitest[2]= 0。
应该是在清除该中断标志期间设置新的 ADC 中断标志、然后发生一些情况会导致 PIEIFR 寄存器中相应的中断标志位未设置。 则无法执行 ADC 中断例程。
我想知道这一问题的根本原因是什么、以及如何避免这一问题的发生。
谢谢。