除了一个外,有没有办法禁用所有来自Cortex M3 MCU的irq?
我的问题是,我有一个系统运行多种不同优先级的irq,我想禁用所有irq,除了一个处于特定状态的irq。
我知道我可以通过使用“\uu disable\u irq()”指令禁用所有irq,但是如果我以前没有调用“\uu enable\u irq()”的话,在调用此指令后我无法启用一个irq。
谢谢你的帮助,
当做
最佳答案
使用BASEPRI
寄存器禁用指定优先级以下的所有中断。
这是一个核心寄存器,如Cortex-M3 Programming Manual所述。
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/