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.

[参考译文] TMS320F280049:如何在不丢失的情况下禁用单个中断

Guru**** 2482105 points
Other Parts Discussed in Thread: TMS320F280049

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1450810/tms320f280049-how-to-disable-individual-interrupts-without-loss

器件型号:TMS320F280049

工具与软件:

您好!
我将使用 TMS320F280049、需要对 driverlib 的 disable_interrupt ()例程进行一些说明

此例程用于禁用中断控制器中的单个中断源。

为此、该例程会执行以下步骤:

1) 1)全局禁用中断
2) 2)将用于中断的 PIEIER 位清零
3)等待5个周期、以确保任何传播的中断都已到达
CPU IFR 寄存器
4) 4)清除中断的 PIE 组的 CPU IFR 位
5) 5)清除中断的 PIE 组的 PIEACK 位
6) 6)全局启用中断

我想知道这个过程、特别是步骤4和5、是否会导致同一组的其它中断的丢失。

例如、在我的工程中、我同时使用 SCIA_RX 和 SCIB_RX 中断、它们位于同一组(第9组)中。
有时我必须在短时间内仅禁用中断 SCIB_RX、而不会丢失中断 SCIA_RX、是否可以放心地使用例程 DISABLE_INTERRUPT ()?
此外、如果我禁用 SCIB_RX、我是否会面临丢失一个风险?

得出结论:
我需要在不丢失任何中断的情况下禁用中断 SCIB_RX (无论是 SCIA_RX 还是 SCIB_RX)。 disable_interrupt()例程是否适合此用途? 或者是否应使用其他程序?

提前感谢

Massimo Ceschi

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

    尊敬的 Massimo:

    在哪里调用 Interrupt_disable() driverlib 函数?

    如果调用该函数来禁用该中断的 ISR 内的中断、您应该不会看到任何中断丢失。 这是因为、如果在 ISR 内部调用它、组 IFR 将由当前 ISR 的中断进行标记。 并且、由于您是在之后关闭 ACK、任何其他已标记的 PIEIFR 将能够在之后传播到 ePIE (并且不会丢失)。

    另请记住、如果 SCI 模块发生溢出、禁用 SCI RX 中断将导致丢失该 SCI 模块上接收到的数据(CPU 无法足够快地从 FIFO 读取进入的数据)。

    此致、

    Delaney