2015-12-15 32 views
0

函数NVIC_EnableIRQ和NVIC_DisableIRQ用于在给定的IRQ编号上启用和禁用中断。为什么没有函数来获取该IRQ的当前启用/禁用状态?为什么CMSIS不提供读取IRQ启用/禁用状态的功能?

用例是在继续之前需要禁用模块中断(IRQ)的典型功能。功能完成后,它将再次启用IRQ。但要确定需要先读取在调用函数时是否启用了IRQ。

鉴于该功能不是由CMSIS提供的,那么我假设我的上面的用例有点不对。但我不知道如何。

任何提示?

感谢

(CMSIS使用4.1)

回答

0

我觉得你的使用情况可能是有意义的一些情况。

您必须创建函数来自己读取IRQ的启用状态。

您只需确保在读取启用状态和实际禁用之间没有中断更改启用状态。在这种情况下,您最终会在执行功能后设置错误的启用状态。

您可以使用__disable_irq();在全球范围内禁止所有IRQ(凯尔语法):

bool isEnabled; 
__disable_irq(); 
isEnabled = ReadIrqEnabledState(irqNr); 
__enable_irq(); 

yourFunction(); 

if(isEnabled) 
    NVIC_EnableIrq(irqNr); 
else 
    NVIC_DisableIrq(irqNr); 
0

您可以使用此功能。它工作正常...

inline bool IsIRQEnabled (IRQn_Type IRQn) 
{ 
    return (0 != (NVIC->ISER[(uint32_t)((int32_t)IRQn) >> 5] & (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)))); 
} 
相关问题