除了一个外,有没有办法禁用所有来自Cortex M3 MCU的irq?
我的问题是,我有一个系统运行多种不同优先级的irq,我想禁用所有irq,除了一个处于特定状态的irq。
我知道我可以通过使用“\uu disable\u irq()”指令禁用所有irq,但是如果我以前没有调用“\uu enable\u irq()”的话,在调用此指令后我无法启用一个irq。
谢谢你的帮助,
当做

最佳答案

使用BASEPRI寄存器禁用指定优先级以下的所有中断。
这是一个核心寄存器,如Cortex-M3 Programming Manual所述。
c - 在STM32上禁用IRQ-LMLPHP
CMSIS提供__get_BASEPRI()__set_BASEPRI()函数来操纵其值。
注意,使用位7-4时,优先级值必须左移4要禁用优先级为1或更低的所有中断,请使用

__set_BASEPRI(1 << 4);

若要全部启用,请将其设置为0
__set_BASEPRI(0);

当然,您应该相应地设置中断优先级,确保没有其他中断具有优先级0。

关于c - 在STM32上禁用IRQ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49135275/

10-12 01:56