nvic的全稱是nested vectoredinterrupt controller,即巢狀向量中斷控制器。
對於m3和m4核心的mcu,每個中斷的優先順序都是用暫存器中的8位來設定的。8位的話就可以設定2^8 =256級中斷,實際中用不了這麼多,所以晶元廠商根據自己生產的晶元做出了調整。比如st的stm32f1xx和f4xx只使用了這個8位中的高四位[7:4],低四位取零,這樣2^4=16,只能表示16級中斷巢狀。
對於這個nvic,有個重要的知識點就是優先順序分組,搶占優先順序和子優先順序,下面就以stm32為例進行介紹,stm32f1xx和f4xx都是只使用了這個8位暫存器的高四位[7:4]。
具有高搶占式優先順序的中斷可以在具有低搶占式優先順序的中斷服務程式執行過程中被響應,即中斷巢狀,或者說高搶占式優先順序的中斷可以搶占低搶占式優先順序的中斷的執行。在搶占式優先順序相同的情況下,有幾個子優先順序不同的中斷同時到來,那麼高子優先順序的中斷優先被響應。
在搶占式優先順序相同的情況下,如果有低子優先順序中斷正在執行,高子優先順序的中斷要等待已被響應的低子優先順序中斷執行結束後才能得到響應,即子優先順序不支援中斷巢狀。reset、nmi、hard fault 優先順序為負數,高於普通中斷優先順序,且優先順序不可配置。
對於初學者還有乙個比較糾結的問題就是系統中斷(比如:pendsv,svc,systick)是不是一定比外部中斷(比如spi,usart)要高,答案:不是的,它們是在同乙個nvic下面設定的。
stm32學習筆記 NVIC
這部分講的很好。misc.件其實就是stm32f10x nvic.h,nvic的主要操作都在其中,還包括systick的選擇源操作。core cm3檔案裡面是核心外設,當然包括nvic,l裡面包含nvic的暫存器操作。高達81個中斷,實際上是67stm外設中斷 60個settable,由庫函式int...
stm32之NVIC的使用
nvic nested vectored interrupt controller 巢狀向量中斷控制器 nvic主要用於對一些中斷的處理,在stm32中,中斷服務程式統一放在乙個 stm32f10x it.c檔案裡,這個檔案裡開始只放了一些系統異常的介面,如果我們要寫一些自己的普通的中斷函式,就要自...
STM32學習筆記 五 NVIC
三 中斷程式設計 f407在核心水平上搭載了乙個異常響應系統,支援為數眾多的系統異常和中斷,其中系統異常有10個,中斷有82個。nvic是巢狀向量中斷控制器,控制著整個晶元中斷相關的功能,它跟核心緊密耦合,是核心裡面的乙個外設。在配置中斷的時候一般只用iser icer和ip這三個暫存器,iser用...