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.

[参考译文] TMS320F2.8069万:嵌套中断的IER配置

Guru**** 2577385 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/644600/tms320f28069-ier-configuration-for-nested-interrupts

部件号:TMS320F2.8069万

您好,Champs:

如果启用了两个中断  (在不同的PIE组中),则在配置嵌套中断时(可以先为较高优先级的中断ISR提供服务):

如果使用和指令在低优先级中断ISR中启用高优先级中断,则不会始终优先处理该中断,

如果直接设置了IER对应位,则可以先成功地为其提供服务。

请帮助您了解为什么没有设置高优先级中断IER位? 谢谢!

此致,

Linda

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

    您好,Linda:

    您能否提供代码(工作代码和非工作代码)的快照。

    此致,

    Vivek Singh

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

    琳达

               您的问题不清楚。 您能否以具体的中断作为示例来重述您的问题? 此外,是否存在断言中断的实例? 您是否仔细阅读了SPRUH18G中的1.7 部分? 它提供了有关进行中断所需满足的条件的良好信息。

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

    您好,Linda:

    您是否能够解决此问题?

    Vivek Singh

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

    我收到了您的代码,并进行了一些调试。 在我看来,较低优先级的中断有时会中断较高优先级的中断。 我仍在努力弄清楚IT部门何时能够做到这一点。

    但是,这也说明了当直接分配掩码时,AND运算不起作用的原因。 该分配重新启用在输入ISR时已禁用的较高级别组。 它类似于在执行IER&=0x3;之前执行IER|=0x1;。

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

    您好,Whitney,

    感谢你的帮助。

    如F2806x手册中所述,当进入ISR时,将清除相应的IER位,即不清除其它IER位,是否正确?

    因此,指令应该是正常的,因为当进入低优先级中断ISR时,仍保留较高优先级的中断IER。

    您会建议您这样做吗? 谢谢!

    此致,

    Linda

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

    这通常是正确的,但应用程序中出现的情况似乎是偶尔输入高优先级中断(清除其IER位), 然后,它被低优先级中断中断中断(低优先级IER被清除,高优先级IER位仍被清除)。 这就是为什么需要重新启用较高优先级的IER。

    我仍然不知道为什么优先级较低的中断首先会中断较高的中断。 我将继续研究,看看是否可以找到问题根源的解决方法,而不是上述解决方法。

    Whitney

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

    我想我明白了。 您不需要在ISR结束时恢复IER。 发生中断时,硬件已备份并恢复IER。 当您通过高优先级ISR中的软件执行此操作,并且低优先级ISR的标志处于待处理状态时,会导致执行低优先级ISR。 由于它是嵌套的,因此高优先级ISR的IER仍为0,因此在低优先级ISR完成之前无法运行。

    因此,基本上,删除IER_OLD,事情就会按预期开始工作。

    Whitney