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