1.STM32_中斷入門資料_第1頁
1.STM32_中斷入門資料_第2頁
1.STM32_中斷入門資料_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、STM32中斷系統(tǒng)中斷的定義:指當(dāng)岀現(xiàn)需要時,CPU暫時停止當(dāng)前程序的執(zhí)行轉(zhuǎn)而執(zhí)行處理新情況的程序和執(zhí)行過程。即在程序運行過程中,系統(tǒng)出現(xiàn)了一個必須由CPU立即處理的情況,此時, CPU暫時中止程序的執(zhí)行轉(zhuǎn)而處理這個新的情況的過程就叫做中斷。概述ARM Cortex-m3 內(nèi)核支持256個“中斷通道”(16個內(nèi)核+240個外部)和 可編程256級(8位)中斷優(yōu)先級設(shè)置。STM32采用Cortex-m3內(nèi)核,但是 STM32并沒有使用 Cortex-m3的全部資源。STM32目前支持84個“中斷通道”(16個內(nèi)核+68個外部)和 可編程16級(8位中的高4位)中斷優(yōu)先級設(shè)置。注意:STM32的外

2、部中斷通道已經(jīng)固定分配給相應(yīng)的外設(shè),具體參考手冊上的中斷向量表。中斷源:觸發(fā)中斷的信號。中斷通道:中斷通道是中斷源向內(nèi)核申請中斷的入口。中斷通道給中斷源提供一個向內(nèi)核申請中斷的 入口,中斷源通過中斷通道向內(nèi)核提岀中斷申請。(由上可知,中斷通道一般是指中斷向量表的入口地址)應(yīng)多個一個中斷通道可以對中斷源,也可只對應(yīng)一個。有的內(nèi)置外設(shè)對應(yīng)多個中斷通道,有的只對應(yīng)一個。中斷優(yōu)先級是針對中斷通道的。(參考“參考手冊”中斷向量表)P.130STM32優(yōu)先級中斷優(yōu)先級是針對“中斷通道”的(即中斷向量表),而不是針對中斷源的。STM32中斷優(yōu)先級:STM32的中斷通道可以被配置為響應(yīng)式優(yōu)先級 或搶占式優(yōu)先級

3、。搶占式優(yōu)先級:搶占式優(yōu)先級高的中斷會打斷當(dāng)前的主程序或者中斷程序運行(中斷嵌套)。對應(yīng)每一個中斷通道,Cortex-m3內(nèi)核提供了一個 8位的寄存器IPx(但是只是用高四位),來確定該中斷通道的搶占式優(yōu)先級和響應(yīng)式優(yōu)先級。在一個stm32系統(tǒng)中,優(yōu)先級的分組只有以下5種情況,具體采用哪一種,需要在初始化時寫入到一個 32 位寄存器 AIRC (Application Interrupt and Reset Register )NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);/設(shè)置優(yōu)先級分組,下圖應(yīng)該出錯,因為使用的是高四位,而下圖使用的低四位 優(yōu)

4、先級沖突處理:1. 具有高搶占式優(yōu)先級的中斷可以在具有低搶占式優(yōu)先級的中斷處理過程中被響應(yīng),即中斷的嵌套,或者說高搶占式優(yōu)先級的中斷可以嵌套低搶占式優(yōu)先級的中斷。2. 當(dāng)兩個中斷源的搶占式優(yōu)先級相同時,這兩個中斷將沒有嵌套關(guān)系,當(dāng)一個中斷到來后,如果正在處理另一個中斷,這個后到來的中斷就要等到前一個中斷處理完之后才能被處理。3. 如果這兩個中斷同時到達,則中斷控制器根據(jù)他們的優(yōu)先級高低來決定先處理哪一個;如果他們的搶占式優(yōu)先級和響應(yīng)優(yōu)先級都相等,則根據(jù)他們在中斷表中的排位順序決定先處理哪一個。配置優(yōu)先級我們僅需做以下工作:typedef structuint8_tNVIC_IRQChannel

5、uint8_tNVIC_IRQChannelPreemptionPriority;uint8_tNVIC_IRQChannelSubPriority;FunctionalState NVICnitTypeDef;NVIC_IRQChannelCmd;void NVIC_TIM2_config(void)NVIC_InitTypeDef NVIC_initstructure;/設(shè)置優(yōu)先級分組/設(shè)置中斷搶占優(yōu)先級級別/ 設(shè)置中斷響應(yīng)優(yōu)先級級別NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);NVIC_initstructure.NVIC_IRQChann

6、el=TIM2_IRQn; NVIC_initstructure.NVIC_IRQChannelCmd=ENABLE;NVIC_initstructure.NVIC_IRQChannelPreemptionPriority=0; NVIC_initstructure.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_initstructure);注意:1 如果指定的搶占式優(yōu)先級別或響應(yīng)優(yōu)先級別超出了選定的優(yōu)先級分組所限定的范圍, 將可 能得到意想不到的結(jié)果。2 數(shù)值越小,優(yōu)先級級別越高。中斷相關(guān)寄存器與中斷控制相關(guān)的寄存器:嵌套向量中斷結(jié)構(gòu)體:t

7、ypedef struct_IOuint32_tISER8;Interrupt Set Enable Register (中斷通道使能)uint32_tRESERVED024;_IOuint32_tICER8;Interrupt Clear Enable Register(中斷通道除能)uint32_tRSERVED124;_IOuint32_tISPR8;Interrupt Set Pending Register(中斷通道懸掛置位)uint32_tRESERVED224;_IOuint32_tICPR8;Interrupt Clear Pending Register(中斷通道懸掛清除)u

8、int32_tRESERVED324;_IOuint32_tIABR8;Interrupt Active bit Register(中斷活動標(biāo)志位,查看該位可以知道系統(tǒng)當(dāng)前正在處理哪個中斷通道)uint32_tRESERVED456;_IO uint8_tIP240; Interrupt Priority Register (8Bit wide)(中斷優(yōu)先級寄存器)uint32_tRESERVED5644;_O uint32_tSTIRSoftware Trigger Interrupt Register(軟件觸發(fā)中斷寄存器) NVIC_Type;系統(tǒng)控制塊結(jié)構(gòu)體:typedef struct

9、_I uint32_t CPUID;_IO uint32_t ICSR;_IO uint32_t VTOR;_IO uint32_t AIRCR;Application Interrupt / Reset Control Register (設(shè)置優(yōu)先級分組)_IO uint32_t SCR;_IO uint32_t CCR;_IO uint8_tSHP12;_IO uint32_t SHCSR;_IO uint32_t CFSR;_IO uint32_t HFSR;_IO uint32_t DFSR;_IO uint32_t MMFAR;_IO uint32_t BFAR;_IO uint32

10、_t AFSR;_I uint32_t PFR2;_I uint32_t DFR;_I uint32_t ADR;_I uint32_t MMFR4;_I uint32_t ISAR5; SCB_Type; 配置這些內(nèi)核寄存器只需做如下工作: typedef structuint8_tNVIC_IRQChanneluint8_tNVIC_IRQChannelPreemptionPriority;uint8_tNVIC_IRQChannelSubPriority;FunctionalState NVIC_IRQChannelCmd; NVIC_InitTypeDef;void NVIC_TIM2

11、_config(void)NVIC_InitTypeDef NVIC_initstructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_initstructure.NVIC_IRQChannel=TIM2_IRQn;/ 選擇通道 NVIC_initstructure.NVIC_IRQChannelCmd=ENABLE;/ 使能通道 NVIC_initstructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_initstructure.NVIC_IRQChannelSubPriorit

12、y=1; NVIC_Init(&NVIC_initstructure);STM32 總中斷的開和關(guān) : STM32/Cortex-m3 是通過改變 CPU 當(dāng)前優(yōu)先級來允許或者禁止中斷的。 PRIMASK 位: 只允許 NMI 和 hard fault 異常,其他中斷都被屏蔽(當(dāng)前CPU 優(yōu)先級 =0 )FAULTMASK 位:只允許 NMI ,其他所有中斷都被屏蔽(當(dāng)前CPU 優(yōu)先級 = -1)在 STM32 固件庫中( stm32f10x_nvic.h 和 stm32f10x_nvic.c )定義了四個函數(shù)用來操作 PRIMASK 位 和 FAULTMASK 位,作用是改變 CPU

13、 當(dāng)前優(yōu)先級,從而達到控制所有中斷目的:下面兩個函數(shù)等效于關(guān)閉總中斷 :void NVIC_SETPRIMASK(void);下面兩個函數(shù)等效于開啟總中斷 :void NVIC_SETFAULTMASK(void); void NVIC_RESETPRIMASK(void);void NVIC_RESETFAULTMASK(void);中斷程序編寫中斷控制過程(一個例子) :1 初始化:a 首先要設(shè)置寄存器 AIRC中 PRIGROUP的值, 規(guī)定系統(tǒng)中的搶先優(yōu)先級和響應(yīng)優(yōu)先級各自的位數(shù) (在 4 個 bits 中占用的位數(shù)) ;b 設(shè)置 TIME2 本身的寄存器,允許相應(yīng)的中斷,如允許 UI

14、E ( TIME2_DIER 的第 0 位)c 設(shè)置 TIME2 中斷通道的搶先優(yōu)先級和子優(yōu)先級( IP28 ,在 NVIC 寄存器組中)d 設(shè)置允許 TIME2 中斷通道。 (在 NVIC 寄存器組的 ISER 寄存器中的一位)2 中斷響應(yīng)過程a 當(dāng) TIME2 的 UIE 條件成立(更新、上溢或下溢) ,硬件將 TIME2 本身寄存器中 UIE 中斷標(biāo) 志置位 ,然后通過 TIME2 中斷通道向內(nèi)核申請中斷服務(wù)。b 此時內(nèi)核硬件將 TIME2 中斷通道的 Pending 標(biāo)志置位( 相當(dāng)與中斷申請標(biāo)志置位 ) ,表示 TIME2 有中斷申請。 如果當(dāng)前有中斷在處理, TIME2 的中斷級別

15、不夠高,那么就保持 Pending 標(biāo) 志,當(dāng)然用戶可以在軟件中通過寫 ICPR 寄存器中相應(yīng)的位把本次中斷清除掉。c 當(dāng)內(nèi)核有空,開始響應(yīng) TIME2 的中斷,進入 TIME2 的中斷服務(wù)。 此時硬件將 IABR 寄存器中 相應(yīng)的標(biāo)志位置位,表示 TIME2 中斷正在被處理(同時硬件清除 TIME2 的 Pending 標(biāo)志位) 。3 執(zhí)行中斷服務(wù)程序 ( 一個中斷通道只對應(yīng)一個中斷服務(wù)程序)a 所有 TIME2 的中斷事件,都是在一個 TIME2 中斷服務(wù)程序中完成的,所以進入中斷程序后,中 斷程序需要首先判斷是哪個 TIME2 的具體事件的中斷,然后轉(zhuǎn)移到相應(yīng)的服務(wù)代碼段去。B 在中斷服

16、務(wù)程序中把該具體中斷事件的中斷標(biāo)志位( UIE )清除掉, 因為硬件是不會自動清除TIME2寄存器中具體的中斷標(biāo)志位的 。c 如果 TIME2 本身的中斷事件多于 2 個,那么它們服務(wù)的先后次序就由用戶編寫的中斷服務(wù)決定了。d 當(dāng)然你也可以每次中斷服務(wù)只處理其中的一個,然后再次進入中斷,處理下一個。4 中斷返回內(nèi)核執(zhí)行完中斷服務(wù)后,便進入中斷返回過程,在這個過程中需要:a 硬件將 IABR 寄存器中相應(yīng)的標(biāo)志位清0 ,表示該中斷處理完成。如果 TIME2 本身還有中斷標(biāo)志位置位( UIE ),表示 TIME2 還有中斷在申請,則重新將 TIME2 的 Pending 標(biāo)志置為 1,等待 再次進

17、入 TIME2 的中斷服務(wù)。最后注意不要忘了 : 在中斷服務(wù)程序中把該具體中斷事件的中斷標(biāo)志位(UIE )清除掉,因為硬件是不會自動清除 TIME2 寄存器中具體的中斷標(biāo)志位的 。STM32 的外部中斷對于互聯(lián)型產(chǎn)品, 外部中斷 / 事件控制器由 20 個產(chǎn)生事件 /中斷請求的邊沿檢測器組成, 對于其他產(chǎn)品, 則有 19 個能產(chǎn)生事件 / 中斷請求的邊沿檢測器。EXTI 控制器的主要特性如下:1 每個中斷 / 事件都有獨立的觸發(fā)和屏蔽2 每個中斷線都有專用的狀態(tài)位3 支持多達 20 個軟件的中斷 / 事件請求4 檢測脈沖寬度低于 APB2 時鐘寬度的外部信號。參見數(shù)據(jù)手冊中電氣特性部分的相關(guān)參數(shù)。 與外部中斷相關(guān)寄

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論