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