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.

[参考译文] TMS320F28388D:中断嵌套:按照优先级执行嵌套中断。

Guru**** 2581675 points
Other Parts Discussed in Thread: TMS320F28388D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1205919/tms320f28388d-interrupt-nesting-execution-of-nested-interrupts-as-per-priority

器件型号:TMS320F28388D

您好、ti.

我在应用中使用的是 TMS320F28388D 控制器。

我正在使用来自 PIE 组1的3个中断、即 ADCA1、ADCB1和 TIMER0。 两个中断的时序

ADCA1--25微秒

ADCB1--200微秒

TIMER0 -1毫秒

我将通过使用以下代码段来启用组1的 ADCB1和 TIMER0中断内部的嵌套中断。

ISR 函数{


IER |= 0x01;
IER &= 0x01;
PieCtrlRegs.PIEACK.all = 0x0001;
ASM (" NOP");
EINT;

//ISR 代码执行

Dint;

}

现在、在测试中、我观察到 ADCB1中断已被 TIMER0中断抢先、即使 ADCB1的优先级高于 TIMER0。

您能否检查一下这个情况、请尽快告诉我。

谢谢你。

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

    尊敬的 Sakare:

    感谢您的提问。 则可能无法创建目标配置 两者可兼得 ADCB1和 TIMER0、那么此处的问题实际上是最后发生的事件、将是要执行的事件。 基本上、对于所示的代码、两个中断都允许组1中的任何其他中断本身。 对于您的代码、可能发生的情况是:

    ADCB1进入 ISR。

    ADCB1立即允许组1中的所有内容中断它。

    TIMER0现在发生了、因为我们已经在 ADCB1 (并为其提供服务)、所以 PIE 允许它完全访问。

      

      

    所以、这个情况下的解决方案是防止 ADCB1内优先级较低的组1中的任何事情发生。 因此、基本而言、您还需要修改 PIEIER、而不仅仅是 IER。 并对其进行设置、以便只允许发生高于 ADCB1的中断。

    可表示为:

    PieCtrlRegs.PIEIER1.all && 0x0001//通过调整 PIEIER1来设置组优先级,以允许 INT1.1中断当前 ISR 
    PieCtrlRegs.PIEACK.all = 0xFFFF//启用 PIE 中断 

    此致、

    Vince

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

    您好、Vince。

    感谢您的快速响应。

    无论你说什么、我都尝试了解决方案、工作正常。