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.

[参考译文] MCU-PLUS-SDK AM243X-EVM:禁用所有中断、但让特定中断处于活动状态

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1385767/mcu-plus-sdk-am243x-disabling-all-interrupts-but-letting-a-specific-interrupt-active

器件型号:MCU-PLUS-SDK AM243X

工具与软件:

您好!

我们需要能够停用所有其他中断、但只让一个中断有效。

很遗憾,调用 Hwip_disable (),然后调用 Hwip_enableInt (interruptNumber)不起作用。 我已经检查过、它们的工作方式不同。 当 HwiP_enableInt 直接使用 VIM 时、HwiP_disable 通过 CPSR 寄存器禁用中断。 不幸的是、这有点误导、因为人们可能会认为他们正在一起工作。

那么、我们如何实现这一点呢? 最好不要在 SDK 中为它修改任何内容。

背景:

要重新启动器件时、我们将关闭所有驱动程序、还需要手动驱动闪存的 RESET 引脚。 由于存在时序控制、我们将使用 ClockP_usleep ()函数获取 µs μ s 的确切等待时间以继续操作。 遗憾的是、我们正在使用一些第三方库、这些库还会启动某些实体、这些实体将触发一些中断、而它们在例程中将访问资源。 它们无法正确关闭、因为这不是由它们实现的。 因此、我们需要禁用中断、否则我们可能会获得数据中止、因为它们尝试访问已关闭的资源。 但是、当中断被禁用时、ClockP_usleep-function 有时不起作用、因为它需要 SysTick (在本例中为 HWTIMER8)才能正确计算。

此致

Felix

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

    Felix、您好!

    感谢您的提问。

    我们需要能够停用所有其他中断、但只允许激活一个中断。

    遗憾的是、没有这样的 API  会禁用除一个中断外的所有中断有效。

    如果您要禁用所有中断并仅让一个中断处于活动状态、则必须使用 hwiP_disableInt (intrNum) API 并在要禁用的每个中断的自变量中传递中断号。

    请参阅  HW_INTERRUPTS 。  

    此致、

    Tushar