在 STM32 上禁用 IRQ

Disable IRQ on STM32

有什么方法可以禁用来自 Cortex M3 MCU 的所有 irq,除了一个吗?

我的问题是我有一个系统 运行 几种具有不同优先级的 irq,我想禁用除处于特定状态的 irq 之外的所有 irq。

我知道我可以通过使用“__disable_irq()”指令来禁用所有 irq,但如果我没有调用“__enable_irq()”,则在调用该指令后我无法启用一个 irq "之前。

感谢您的帮助,

此致

除了禁用所有您不想要的已启用中断之外,没有。

__disable_irq() 实现为 CPSID I,它关闭所有可以设置优先级的异常(那些在 NVIC 中配置的),它通过更改 PRIMASK 寄存器来实现CPU 内(设置位 0)。没有办法告诉它只启用特定的中断。

使用BASEPRI寄存器禁用所有低于指定优先级的中断。

这是一个核心寄存器,在Cortex-M3 Programming Manual中有描述。

CMSIS 提供 __get_BASEPRI()__set_BASEPRI() 函数来操纵其值。

请注意,使用了位 7-4,优先级值必须左移 4。要禁用所有优先级为 1 或更低的中断,请使用

__set_BASEPRI(1 << 4);

要全部启用,请将其设置为 0

__set_BASEPRI(0);

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