This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28377S:中断例程函数在频繁溢出中断时可以#39;t 执行。

Guru**** 2455560 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/815555/tms320f28377s-interrupt-routine-function-can-t-be-executed-when-interrupt-overflow-frequently

器件型号:TMS320F28377S


我 发现、当中断溢出频繁发生时、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 中断例程。

我想知道这一问题的根本原因是什么、以及如何避免这一问题的发生。

谢谢。

 

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    开启连续模式(ADCINTSEL1N2.INT1CONT = 1)将允许再次设置 IFR 标志、即使 ADCINTFLG 位仍然被置位、这样即使在过流的情况下也将保持中断来。 否则、默认行为是在 ADCINTFLG 能够被清零之前不会生成更多的中断。

    惠特尼