嵌套的向量式中斷控制器(NVIC)


幾個基本概念:
1.ARM cortex_m3 內核支持 256 個中斷(16 個內核+240 外部)和可編程 256 級中斷優先級的設置,與其相關的中斷控制和中斷優先級控制寄存器(NVIC、SYSTICK 等)也都屬於cortex_m3 內核的部分。其中,STM32 目前支持的中斷共為 84 個(16 個內核+68 個外部) ,和 16 級可編程中斷優先級的設置(僅使用中斷優先級設置 8bit 中的高 4 位) 。
 
2.嵌套向量中斷控制器( NVIC ) 和處理器核的接口緊密相連,可以實現低延遲的中斷處理和高效地處理晚到的中斷。
 
3.NVIC 共支持 1 至 240 個外部中斷輸入(通常外部中斷寫作 IRQs) 。具體的數值由芯片廠商在設計芯片時決定。此外,NVIC 還支持一個“永垂不朽”的不可屏蔽中斷(NMI)輸入。NMI 的實際功能亦由芯片制造商決定。在某些情況下,NMI 無法由外部中斷源控制。
 
4. NVIC 的訪問地址是 0xE000_E000。 所有 NVIC 的中斷控制/狀態寄存器都只能在特權級下訪問。  不過有一個例外——軟件觸發中斷寄存器可以在用戶級下訪問以產生軟件中斷。 所有的中斷控制/狀態寄存器均可按字/半字/字節的方式訪問。 此外, 有幾個中斷屏蔽寄存器也與中斷控制密切相關,它們屬於“特殊功能寄存器” ,只能通過 MRS/MSR及 CPS 來訪問。
 
5.每個外部中斷都在 NVIC 的下列寄存器中“掛號” :
  • 使能與除能寄存器
  • 懸起與“解懸”寄存器
  • 優先級寄存器
  • 活動狀態寄存器、另外,下列寄存器也對中斷處理有重大影響
  • 異常掩蔽寄存器(PRIMASK, FAULTMASK 以及 BASEPRI)
  • 向量表偏移量寄存器
  • 軟件觸發中斷寄存器
  • 優先級分組位段
 
對於中斷優先級分組
中斷優先級控制位還必須分成 2 組看:從高位開始,前面是定義搶先式優先級的位,后面用於定義子優先級。4bit 的分組組合可以有以下幾種形式:
在一個系統/工程中,通常只使用上面 5 種分配情況的一種,具體采用哪一種,需要在初始化時寫入到一個 32 位寄存器 AIRC(Application Interrupt and Reset Control Register)的第[10:8]這 3 個位中。這 3 個 bit 位有專門的稱呼:PRIGROUP(具體寫操作后面介紹) 。比如你將 0x05(即上表中的編號)寫到 AIRC 的[10:8]中,那么也就規定了你的系統中只有 4 個搶先式優先級,相同的搶先式優先級下還可以有 4 個不同級別的子優先級。
 
PS:對這4位進行分組,根據“分步用乘法”的規律,不管怎樣(2^2 * 2^2 = 4 * 4 = 16 或者2^^4 = 16等)都是滿足16位優先級的說法。
 
如:
中斷分組設置函數
        在 sys.c 里面只有一個函數就是 void NVIC_Configuration()中斷配置函數,在這個函數里面我們只調用了固件庫的中斷分組配置函數,這只整個系統的中斷分組為組別 2.這個函數在系統初始化的時候調用即可,並且永遠只需要調用一次。
void NVIC_Configuration(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置 NVIC 中斷分組 2:2 位搶占//優先級,2 位響應優先級
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM