向量中斷控制器,簡稱nvic。nvic的暫存器以儲存器對映的方式來訪問,除了包含控制暫存器和中斷處理的控制邏輯之外,nvic還包含了mpu、systick定時器以及除錯控制相關的暫存器。nvic共支援1至240個外部中斷輸入(通常外部中斷寫作irqs)。此外,nvic還支援乙個「永垂不朽」的不可遮蔽中斷(nmi)輸入。nvic的訪問位址0xe000_e000。所有nvic的中斷控制/狀態暫存器都只能在特權級下訪問。不過有乙個例外——軟體觸發中斷暫存器可以在使用者級下訪問以產生軟體中斷。所有的中斷控制/狀態暫存器均可按字/半字/位元組的方式訪問。此外,還有幾個中斷掩蔽暫存器也與中斷控制密切相關,即「特殊功能暫存器」,只能通過mrs/msr及cps來訪問。
1、中斷的使能和除能:使用各自的暫存器來控制,使能,setena的位置「1」;除能,clrena位置「1」。
2、中斷的懸起與解懸:setpend和clrpend
3、優先順序(pri):每個外部中斷都有乙個對應的優先順序暫存器,每個暫存器占用8位,但是cm3允許在最「粗線條」的情況下,只使用最高3位。可以按位元組訪問,當然也可以按半字/字來訪問。
4、活動狀態(active):每個外部中斷都有乙個活動狀態位。在處理器執行了其isr的第一條指令後,它的活動位就被置1,並且直到isr返回時才硬體清零。由於支援巢狀,允許高優先順序異常搶占某個isr。然而,哪怕中斷被搶占,其活動狀態也依然為1(請仔細琢磨前文講到的「直到isr返回時才清零)。唯讀
5、特殊功能暫存器primask與faultmask
primask用於除能在nmi和硬fault之外的所有異常,它有效地把當前優先順序改為0(可程式設計優先順序中的最高優先順序)。該暫存器可以通過mrs和msr以下例方式訪問:
1. 關中斷
mov r0, #1
msr primask, r0
2. 開中斷
mov r0, #0
msr primask, r0
此外,還可以通過cps指令快速完成上述功能:
cpsid i ;關中斷
cpsie i ;開中斷
faultmask更絕,它把當前優先順序改為-1。這麼一來,連硬fault都被掩蔽了。使用方案與primask的相似。但要注意的是,faultmask會在異常退出時自動清零。
6、其它異常的配置暫存器
7、中斷系統設定全過程的演示
1. 當系統啟動後,先設定優先順序組暫存器。預設情況下使用組0(7位搶占優先順序,1位亞優先順序)。
2. 如果需要重定位向量表,先把硬fault和nmi服務例程的入口位址寫到新表項所在的位址中。
3. 配置向量表偏移量暫存器,使之指向新的向量表(如果有重定位的話)
4. 為該中斷建立中斷向量。因為向量表可能已經重定位了,保險起見需要先讀取向量表偏移量暫存器的值,再根據該中斷在表中的位置,計算出對應的表項,再把服務例程的入口位址填寫進去。如果一直使用rom中的向量表,則無需此步驟。
5. 為該中斷設定優先順序。
6. 使能該中斷
巢狀向量中斷控制器(NVIC)詳解
在平時的工作中,我們經常會遇到這樣的情況 有人來找你做一些事情,而且這些事情要比手頭的工作更重要。那現在就需要停下手中的工作,先去完成突然到來的這部分工作。這樣的情況也類似於圖論中的關鍵路徑中,突然在當前事件之前插入了乙個新的事件,那我們不得不先去完成之前的那個任務,才能繼續完成後面的工作。上述情況...
巢狀的向量式中斷控制器 NVIC
幾個基本概念 1.arm cortex m3 核心支援 256 個中斷 16 個核心 240 外部 和可程式設計 256 級中斷優先順序的設定,與其相關的中斷控制和中斷優先順序控制暫存器 nvic systick 等 也都屬於cortex m3 核心的部分。其中,stm32 目前支援的中斷共為 84...
例項理解stm32的中斷控制NVIC
最近在專案中處理多個中斷事件的時候遇到了一些問題,後來發現是因為自己沒有對 nvic 的知識理解透徹,導致配置 nvic 的時候出現了問題,在網上學習的過程中發現不少文章都是介紹nvic的配置,並沒有深入介紹nvic。這裡就自己對於nvic學習後的理解做乙個分析總結。nvic,全稱為nest vec...