對(duì)于?STM32?講(還是以Timer2例),外部中斷通道位置?28(35?號(hào)優(yōu)先級(jí))是給外部設(shè)備?TIME2?的,但?TIME2本身能夠引起中斷的中斷源或事件有好多個(gè),比如更新事件(上溢/下溢)?、輸入捕獲、輸出匹配、DMA?申請(qǐng)等。所有TIME2?的中斷事件都是通過一個(gè)?TIME2?的中斷通道向?STM32?內(nèi)核提出中斷申請(qǐng),那么?STM32?中如何處理和控制?TIME2?和它眾多的、不同的、中斷申請(qǐng)呢? ? ? ? 1.因?yàn)閏ortex_m3?內(nèi)核對(duì)于每一個(gè)外部中斷通道都有相應(yīng)的控制字和控制位,用于單獨(dú)的和總的控制該中斷通道。它們包括有: 中斷優(yōu)先級(jí)控制字:PRI_n(前面有提到過) 中斷允許設(shè)置位:在?ISER?寄存器中 中斷允許清除位:在?ICER?寄存器中 中斷懸掛?Pending(排隊(duì)等待)位置位:在?ISPR?寄存器中(類似于置中斷通道標(biāo)志位) 中斷懸掛?Pending(排隊(duì)等待)位清除:在?ICPR?寄存器中(用于清除中斷通道標(biāo)志位) 正在被服務(wù)(活動(dòng))的中斷(Active)標(biāo)志位:在?IABR?寄存器中,?(只讀,可以知道當(dāng)前內(nèi)核正在處理哪個(gè)中斷通道) ? ? ?2.作為外圍設(shè)備?TIME2?本身也包括更具體的,管理自己不同中斷的中斷控制器(位)?,它們主要是自身各個(gè)不同類型中斷的允許控制位,?和各自相應(yīng)的中斷標(biāo)志位?(STM32?的手冊(cè)中有詳細(xì)的說明)?。 ? ? ? ? ??理解上面兩點(diǎn)之后,我們可以全程、全面和綜合的來了解?TIME2?的中斷過程,以及如何控制的。 ? ? ? ? ?①初始化過程
首先要設(shè)置寄存器?AIRC?中?PRIGROUP?的值,?規(guī)定系統(tǒng)中的搶先優(yōu)先級(jí)和子優(yōu)先級(jí)的個(gè)數(shù)(在?4?個(gè)?bits?中占用的位數(shù))?; 設(shè)置?TIME2?本身的寄存器,允許相應(yīng)的中斷,如允許?UIE(TIME2_DIER?的第[0]位) 設(shè)置?TIME2?中斷通道的搶先優(yōu)先級(jí)和子優(yōu)先級(jí)(IP[28],在?NVIC?寄存器組中) 設(shè)置允許?TIME2?中斷通道。在?NVIC?寄存器組的?ISER?寄存器中的一位。
?
? ? ? ? ?②中斷響應(yīng)過程
當(dāng)?TIME2?的?UIE?條件成立(更新,上溢或下溢)?,硬件將?TIME2?本身寄存器中?UIE?中斷標(biāo)志置位,然后通過?TIME2?中斷通道向內(nèi)核申請(qǐng)中斷服務(wù)。 此時(shí)內(nèi)核硬件將?TIME2?中斷通道的?Pending?標(biāo)志置位(相當(dāng)與中斷通道標(biāo)志置位)?,表示?TIME2?有中斷申請(qǐng)。 如果當(dāng)前有中斷在處理,TIME2?的中斷級(jí)別不夠高,那么就保持?Pending?標(biāo)志,當(dāng)然用戶可以在軟件中通過寫?ICPR?寄存器中相應(yīng)的位把本次中斷清除掉。 當(dāng)內(nèi)核有空,開始響應(yīng)?TIME2?的中斷,進(jìn)入?TIME2?的中斷服務(wù)。此時(shí)硬件將?IABR?寄存器中相應(yīng)的標(biāo)志位置位,?表示?TIME2?中斷正在被處理。?同時(shí)硬件清除?TIME2?的?Pending?標(biāo)志位。
? ③ 執(zhí)行?TIME2?的中斷服務(wù)程序 所有?TIME2?的中斷事件,?都是在一個(gè)?TIME2?中斷服務(wù)程序中完成的,?所以進(jìn)入中斷程序后,?中斷程序需要首先判斷是哪個(gè)?TIME2?的具體事件的中斷,?然后轉(zhuǎn)移到相應(yīng)的服務(wù)代碼段去。 注意不要忘了把該具體中斷事件的中斷標(biāo)志位清除掉,?硬件是不會(huì)自動(dòng)清除?TIME2?寄存器中具體的中斷標(biāo)志位的。 如果?TIME2?本身的中斷事件多于?2?個(gè),?那么它們服務(wù)的先后次序就由用戶編寫的中斷服務(wù)決定了。換句話說,對(duì)于?TIME2?本身的多個(gè)中斷的優(yōu)先級(jí),系統(tǒng)是不能設(shè)置的。所以用戶在編寫服務(wù)程序時(shí),應(yīng)該根據(jù)實(shí)際的情況和要求,通過軟件的方式,將重要的中斷優(yōu)先處理掉。 當(dāng)然你也可以每次中斷服務(wù)只處理其中的一個(gè),然后再次進(jìn)入中斷,處理下一個(gè)。 ? ④中斷返回 內(nèi)核執(zhí)行完中斷服務(wù)后,便進(jìn)入中斷返回過程,在這個(gè)過程中需要:
硬件將?IABR?寄存器中相應(yīng)的標(biāo)志位清另,表示該中斷處理完成如果?TIME2?本身還有中斷標(biāo)志位置位,表示?TIME2?還有中斷在申請(qǐng),則重新將?TIME2的?Pending?標(biāo)志置為?1,等待再次進(jìn)入?TIME2?的中斷服務(wù)。 以上中斷過程在《ARM?Cortex-M3?權(quán)威指南》中有詳細(xì)描述,并配合時(shí)序圖說明,可以參考。 然后,就可以在?ST?提供的函數(shù)庫的幫助下,正確的設(shè)置和使用?STM32?的中斷系統(tǒng)了。 ?