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

下載本文檔

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

文檔簡介

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

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

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

4、先級(jí)沖突處理:1. 具有高搶占式優(yōu)先級(jí)的中斷可以在具有低搶占式優(yōu)先級(jí)的中斷處理過程中被響應(yīng),即中斷的嵌套,或者說高搶占式優(yōu)先級(jí)的中斷可以嵌套低搶占式優(yōu)先級(jí)的中斷。2. 當(dāng)兩個(gè)中斷源的搶占式優(yōu)先級(jí)相同時(shí),這兩個(gè)中斷將沒有嵌套關(guān)系,當(dāng)一個(gè)中斷到來后,如果正在處理另一個(gè)中斷,這個(gè)后到來的中斷就要等到前一個(gè)中斷處理完之后才能被處理。3. 如果這兩個(gè)中斷同時(shí)到達(dá),則中斷控制器根據(jù)他們的優(yōu)先級(jí)高低來決定先處理哪一個(gè);如果他們的搶占式優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)都相等,則根據(jù)他們在中斷表中的排位順序決定先處理哪一個(gè)。配置優(yōu)先級(jí)我們僅需做以下工作: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)先級(jí)分組/設(shè)置中斷搶占優(yōu)先級(jí)級(jí)別/ 設(shè)置中斷響應(yīng)優(yōu)先級(jí)級(jí)別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)先級(jí)別或響應(yīng)優(yōu)先級(jí)別超出了選定的優(yōu)先級(jí)分組所限定的范圍, 將可 能得到意想不到的結(jié)果。2 數(shù)值越小,優(yōu)先級(jí)級(jí)別越高。中斷相關(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(中斷活動(dòng)標(biāo)志位,查看該位可以知道系統(tǒng)當(dāng)前正在處理哪個(gè)中斷通道)uint32_tRESERVED456;_IO uint8_tIP240; Interrupt Priority Register (8Bit wide)(中斷優(yōu)先級(jí)寄存器)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)先級(jí)分組)_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)先級(jí)來允許或者禁止中斷的。 PRIMASK 位: 只允許 NMI 和 hard fault 異常,其他中斷都被屏蔽(當(dāng)前CPU 優(yōu)先級(jí) =0 )FAULTMASK 位:只允許 NMI ,其他所有中斷都被屏蔽(當(dāng)前CPU 優(yōu)先級(jí) = -1)在 STM32 固件庫中( stm32f10x_nvic.h 和 stm32f10x_nvic.c )定義了四個(gè)函數(shù)用來操作 PRIMASK 位 和 FAULTMASK 位,作用是改變 CPU

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

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

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

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

17、入 TIME2 的中斷服務(wù)。最后注意不要忘了 : 在中斷服務(wù)程序中把該具體中斷事件的中斷標(biāo)志位(UIE )清除掉,因?yàn)橛布遣粫?huì)自動(dòng)清除 TIME2 寄存器中具體的中斷標(biāo)志位的 。STM32 的外部中斷對(duì)于互聯(lián)型產(chǎn)品, 外部中斷 / 事件控制器由 20 個(gè)產(chǎn)生事件 /中斷請求的邊沿檢測器組成, 對(duì)于其他產(chǎn)品, 則有 19 個(gè)能產(chǎn)生事件 / 中斷請求的邊沿檢測器。EXTI 控制器的主要特性如下:1 每個(gè)中斷 / 事件都有獨(dú)立的觸發(fā)和屏蔽2 每個(gè)中斷線都有專用的狀態(tài)位3 支持多達(dá) 20 個(gè)軟件的中斷 / 事件請求4 檢測脈沖寬度低于 APB2 時(shí)鐘寬度的外部信號(hào)。參見數(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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論