2012-07-12 49 views
2

對於ARM Cortex-M3(例如恩智浦LPC1788),爲什麼有人使用中斷置位寄存器或中斷清除掛起寄存器?ARM Cortex-M3中斷掛起示例

有人可以提供一個簡單的,使用這些寄存器規範的例子嗎?

+0

到目前爲止您嘗試了什麼?你看過ARM的中斷控制器文檔了嗎? – 2012-07-23 13:59:07

+0

@dwelch是的,我一直在閱讀用戶手冊。我正在使用NVIC和各種中斷清除寄存器。我想知道是否有設置掛起和清除掛起寄存器的共同用法。 – 2012-07-23 14:11:44

回答

3

我能想到的唯一用例是從高優先級的IRQHandler觸發一個低優先級軟件刪除 - 就像GPIO中斷處理程序一樣。

通常情況下,您會爲此使用PendSV,但是當您有多個任務或優先級別時,可以使用任何未使用的外設異常向量。在使用退出休眠功能的程序中可能很有用 - μC只能在異常處理程序中運行。

// Example for LPC17xx 
void ETHERNET_Handler (void) 
{ 
    // toggle LED on P0.4 
    LPC_GPIO0->FIODIR0 ^= (1<<4); 
} 

void main(void) 
{ 
    // set Ethernet IRQ to loewst Priority 
    NVIC_SetPriority(ENET_IRQn,31); 
    NVIC_EnableIRQ(ENET_IRQn); 
    NVIC_SetPendingIRQ(ENET_IRQn); // trigger Ethernet IRQ Handler 
    // ... 
    while (1); 

}