2015-12-15 72 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)))); 
} 
相關問題