![Stm32中斷優(yōu)先級相關概念與使用筆記共6資料_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/16/3b6e5a25-f6f6-4851-bbc6-9779976132a4/3b6e5a25-f6f6-4851-bbc6-9779976132a41.gif)
![Stm32中斷優(yōu)先級相關概念與使用筆記共6資料_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/16/3b6e5a25-f6f6-4851-bbc6-9779976132a4/3b6e5a25-f6f6-4851-bbc6-9779976132a42.gif)
![Stm32中斷優(yōu)先級相關概念與使用筆記共6資料_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/16/3b6e5a25-f6f6-4851-bbc6-9779976132a4/3b6e5a25-f6f6-4851-bbc6-9779976132a43.gif)
![Stm32中斷優(yōu)先級相關概念與使用筆記共6資料_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/16/3b6e5a25-f6f6-4851-bbc6-9779976132a4/3b6e5a25-f6f6-4851-bbc6-9779976132a44.gif)
![Stm32中斷優(yōu)先級相關概念與使用筆記共6資料_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/16/3b6e5a25-f6f6-4851-bbc6-9779976132a4/3b6e5a25-f6f6-4851-bbc6-9779976132a45.gif)
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、Stm32 中斷優(yōu)先級相關概念與使用筆記一、基本概念1.ARMcortex_m3內(nèi)核支持256個中斷(16個內(nèi)核+240外部)和可編程256級中斷優(yōu)先級的設置,與中斷控制核中斷優(yōu)先級控制的寄存器(NVIC、SYSTICK等)屬于cortex_m3內(nèi)核的部分。STM32采用了cortex_m3內(nèi)核,所以這些部分仍舊保留使用,但并不是完全使用的,只是使用了一部分。2.STM32目前支持的中斷共為84個(16個內(nèi)核+68個外部),和16級可編程中斷優(yōu)先級的設置(僅使用中斷優(yōu)先級設置8bit中的高4位,見后面解釋)。參考最新101xx-107xxSTM32Referencemanual,RM0008。
2、以下主要對外部中斷進行說明。3.68個外部中斷(通道)在STM32中已經(jīng)固定的分配給相應的外部設備,每個中斷通道都具備自己的中斷優(yōu)先級控制字節(jié)PRI_n(8位,但在STM32中只有高4位有效),每4個通道的8位中斷優(yōu)先級控制字(PRI_n)構成一個32位的優(yōu)先級寄存器(PriorityRegisterPriorityRegister)o o68個通道的優(yōu)先級寄存器至少有是17個32位的寄存器,它們是NVIC寄存器的一部分。4.這4bit的中斷優(yōu)先級控制位還要分成2組看,從高位開始,前面的定義搶先式優(yōu)先級,后面為子優(yōu)先級。4bit的組合可以有以下幾種形式:編號分配情況70:4無搶先式優(yōu)先級,16
3、個子優(yōu)先級61:32個搶先式優(yōu)先級,8個子優(yōu)先級52:24個搶先式優(yōu)先級,4個子優(yōu)先級43:18個搶先式優(yōu)先級,2個子優(yōu)先級3/2/1/04:016個搶先式優(yōu)先級,無子優(yōu)先級5.在一個系統(tǒng)中,通常只使用上面5種分配情況的一種,具體采用哪一種,需要在初始化時寫入到一個32位寄存器AIRC(ApplicationInterruptandResetControlRegister)的第10:8這2個位中。這3個bit位有專門的稱呼:PRIGROUPPRIGROUP(具體寫操作后面介紹)。比如你將0 x05(上表的編號)寫到AIRC的10:8中,那么也就規(guī)定了你的系統(tǒng)中只有4個搶先式優(yōu)先級,相同的搶先式
4、優(yōu)先級下還可以有4個不同級別的子優(yōu)先級。6.AIRC中PRIGROUP的值規(guī)定了設置和確定每個外部中斷通道優(yōu)先級的格式。 例如, 在上面將0 x05寫入了AIRC中PRIGROUP,也就規(guī)定了當前系統(tǒng)中只能有4個搶先式優(yōu)先級,相同的搶先式優(yōu)先級下還可以有4個不同級別的子優(yōu)先級,他們分別為:位7:6位5:4位3:00010號搶先優(yōu)先級000號子優(yōu)先級無效011號搶先優(yōu)先級011號子優(yōu)先級無效103號搶先優(yōu)先級102號子優(yōu)先級無效113號搶先優(yōu)先級113號子優(yōu)先級無效7.如果在你的系統(tǒng)中使用了TIME2(中斷通道28)和EXTI0(中斷通道6)兩個中斷,而TIME2中斷必須優(yōu)先響應,而且當系統(tǒng)在執(zhí)
5、行EXIT0中斷服務時也必須打斷(搶先、嵌套),就必須設置TIME2的搶先優(yōu)先級比EXTI0的搶先優(yōu)先級要高(數(shù)目小)。假定EXTI0位2號搶先優(yōu)先級,那么TIME2就必須設置成0或1號搶先優(yōu)先級。這些工作需要在AIRC中PRIGROUP后進行設置。8.具體優(yōu)先級的確定和嵌套規(guī)則。ARMcortex_m3(STM32)規(guī)定a/只能高搶先優(yōu)先級的中斷可以打斷低搶先優(yōu)先級的中斷服務,構成中斷嵌套。b/當2(n)個相同搶先優(yōu)先級的中斷出現(xiàn),它們之間不能構成中斷嵌套,但STM32首先響應子優(yōu)先級高的中斷。c/當2(n)個相同搶先優(yōu)先級和相同子優(yōu)先級的中斷出現(xiàn),STM32首先響應在該中斷通道向量地址低的
6、中斷(ROM0008,表52)。具體一點:0號搶先優(yōu)先級的中斷,可以打斷任何中斷搶先優(yōu)先級為非0號的中斷;1號搶先優(yōu)先級的中斷,可以打斷任何中斷搶先優(yōu)先級為2、3、4號的中斷;.構成中斷嵌套。如果兩個中斷的搶先優(yōu)先級相同,誰先出現(xiàn),就先響應誰,不構成嵌套。如果一起出現(xiàn)(或掛在那里等待),就看它們2個誰的子優(yōu)先級高了,如果子優(yōu)先級也相同,就看它們的中斷向量位置了。9.上電RESET后,AIRC中PRIGROUP10:8,因此此時系統(tǒng)使用16個搶先優(yōu)先級,無子優(yōu)先級。另外由于所有外部中斷通道的優(yōu)先級控制字PRI_n也都是0,所以根據(jù)上面的定義可以得出,此時68個外部中斷通道的搶先優(yōu)先級都是0號,沒
7、有子優(yōu)先級的區(qū)分。故此時不會發(fā)生任何的中斷嵌套行為,誰也不能打斷當前正在執(zhí)行的中斷服務。當多個中斷出現(xiàn)后,則看它們的中斷向量地址:地址越低,中斷級別越高,STM32優(yōu)先響應。注意:此時內(nèi)部中斷的搶先優(yōu)先級也都是0號,由于它們的中斷向量地址比外部中斷向量地址都低,所以它們的優(yōu)先級比外部中斷高,但如果此時正在執(zhí)行一個外部中斷服務,它們也必須排隊等待,只是可以插隊,當正在執(zhí)行的中斷完成后,它們可以優(yōu)先得到執(zhí)行。了解以上基本概念還是不夠的,還要了解具體中斷的控制有那些途徑,中斷服務程序如何正確的編寫。下面的描述主要以TIME2通道為例。二、中斷控制1.對于STM32講,外部中斷通道位置28(35號優(yōu)先
8、級)是給外部設備TIME2的,但TIME2本身能夠引起中斷的中斷源或事件有好多個,比如更新事件(上溢/下溢)、輸入捕獲、輸出匹配、DMA申請等。(題外話:就一個通用定時計數(shù)器,比8位控制器中TIME要復雜多了。學過AVR的,可能對輸入捕獲、輸出匹配等還有概念,如果你學的標準架構的MCS-51,那么上手32位控制困難就更多了。所以我一直推薦學習8位應該認真從AVR開始,盡管51有很大的市場,價格也相對便宜些,但從發(fā)展的眼光,從后續(xù)掌握32位的使用,AVR是比較好的選擇。)所有TIME2的中斷事件都是通過一個TIME2的中斷通道向STM32內(nèi)核提出申請的, 那么STM32中如何處理和控制TIME2
9、和它眾多的、不同的、中斷申請呢?2.cortex_m3內(nèi)核對于每一個外部中斷通道都有相應的控制字和控制位,用于單獨的和總的控制該中斷通道。它們包括有:中斷優(yōu)先級控制字:PRI_n(上面提到的)中斷允許設置位:在ISER寄存器中中斷允許清除位:在ICER寄存器中中斷懸掛Pending(排隊等待)位置位:在ISPR寄存器中(類似于置中斷通道標志位)中斷懸掛Pending(排隊等待)位清除:在ICPR寄存器中(用于清除中斷通道標志位)正在被服務的中斷(Active)標志位:在IABR寄存器中,(只讀,可以知道當前內(nèi)核正在處理哪個中斷通道)因此,與TIME2中斷通道相關的,在NVIC中有13個bits
10、,它們是PRI_28,8個bits(只用高4位);中斷通道允許,中斷通道清除(相當禁止),中斷通道Pending置位(我的理解是中斷請求發(fā)生了,但當前有其它中斷服務在執(zhí)行,你的中斷級別又不能打斷別人,所以Pending等待,這個應該由硬件置位的),中斷Pending位清除(可以通過軟件將本次中斷請求且尚處在Pending狀態(tài),取消掉),正在被服務的中斷(Active)標志位,各1個bit。上面的控制字和控制位都是在NVIC中的寄存器組中,可惜的是在STM32中竟然不給出任何的解釋和說明。3.作為外圍設備TIME2本身也包括更具體的,管理自己不同中斷的中斷控制器(位),它們主要是各個不同類型中斷
11、的允許控制位,和各自相應中斷標志位。(這個STM32的手冊中有詳細的說明了)4.在弄清楚2、3兩點的基礎上,我們可以看看TIME2的中斷過程,以及如何控制的了。a/初始化過程設置AIRC中PRIGROUP的值,規(guī)定系統(tǒng)中的搶先優(yōu)先級和子優(yōu)先級的個數(shù)(在4個bits中占用的位數(shù))設置TIME2本身的寄存器,允許相應的中斷,如允許UIE(TIME2_DIER的第0位)設置TIME2中斷通道的搶先優(yōu)先級和子優(yōu)先級(PRI_28,在NVIC寄存器組中)設置允許TIME2中斷通道。在NVIC寄存器組的ISER寄存器中的一位。b/中斷響應過程當TIME2的UIE條件成立(更新,上溢或下溢),硬件將TIME
12、2本身寄存器中UIE中斷標志置位,然后通過TIME2中斷通道向內(nèi)核申請中斷。此時硬件將TIME2的Pending標志置位,相當與中斷通道標志置位,表示TIME2有中斷申請。如果當前有中斷在處理,TIME2的中斷級別不高,那么就保持Pending,當然軟件可以通過寫ICPR寄存器中相應的位把本次中斷清除掉。當內(nèi)核有空,開始響應TIME2的中斷,進入TIME2的中斷服務。此時硬件將IABR寄存器中相應的標志位置位,表示TIME2中斷正在被處理。同時硬件清除TIME2的Pending標志位。c/執(zhí)行TIME2的中斷服務程序所有TIME2的中斷事件,都是在一個TIME2中斷服務程序中完成的,所以進入中
13、斷程序后,中斷程序需要首先判斷是哪個TIME2的具體事件的中斷,然后轉(zhuǎn)移到相應的服務代碼段去。注意不要忘了把該具體中斷事件的中斷標志位清除掉,硬件是不會自動清除TIME2寄存器中具體的中斷標志位的。d/中斷返回執(zhí)行完中斷服務后,中斷返回過程,在這個過程中需要:硬件將IABR寄存器中相應的標志位清另,表示該中斷處理完成如果TIME2本身還有中斷標志位置位,表示TIME2還有中斷在申請,則重新將TIME2的Pending標志置為1,等待再次進入TIME2的中斷服務。注意:以上中斷過程在ARMCortex-M3權威指南中有詳細描述,并配合時序圖說明,可以參考。如果以上明白了,那么可以在ST提供的函數(shù)
14、庫的幫助下,正確的設置和使用STM32的中斷系統(tǒng)了。如果你要了解更深入的東西,或者直接對寄存器操作,還要繼續(xù)望下看。三、深入NVIC1.看看Cortex-M3中定義與NVIC相關的寄存器有那些SysTickControlandStatusRegisterRead/write0 xE000E010SysTickReloadValueRegisterRead/write0 xE000E014SysTickCurrentValueRegisterRead/writeclear0 xE000E018SysTickCalibrationValueRegisterRead-only0 xE000E01CI
15、rq0to31SetEnableRegisterRead/write0 xE000E100Irq224to239SetEnableRegisterRead/write0XE000E11CIrq0to31ClearEnableRegisterRead/write0XE000E180Irq224to239ClearEnableRegisterRead/write0XE000E19CIrq0to31SetPendingRegisterRead/write0XE000E200Irq224to239SetPendingRegisterRead/write0XE000E21CIrq0to31ClearPe
16、ndingRegisterRead/write0XE000E280Irq224to239ClearPendingRegisterRead/write0XE000E29CIrq0to31ActiveBitRegisterRead-only0XE000E300Irq224to239ActiveBitRegisterRead-only0XE000E31CIrq0to3PriorityRegisterRead/write0XE000E400Irq224to239PriorityRegisterRead/write0XE000E4ECCPUIDBaseRegisterRead-only0XE000ED0
17、0InterruptControlStateRegisterRead/writeorread-only0XE000ED04VectorTableOffsetRegisterRead/write0XE000ED08ApplicationInterrupt/ResetControlRegisterRead/write0XE000ED0CSystemControlRegisterRead/write0XE000ED10ConfigurationControlRegisterRead/write0XE000ED14SystemHandlers4-7PriorityRegisterRead/write0
18、XE000ED18SystemHandlers8-11PriorityRegisterRead/write0XE000ED1CSystemHandlers12-15PriorityRegisterRead/write0XE000ED202.Stm32中用了那些下面是從ST公司提供的函數(shù)庫的頭文件得到的,庫是V3.1.0/*memorymappingstructforNestedVectoredInterruptController(NVIC)*/*!InterruptSetEnableRegister*/*!InterruptClearEnableRegister*/*!InterruptSe
19、tPendingRegister*/*!InterruptClearPendingRegister*/*!InterruptActivebitRegister*/*!InterruptPriorityRegister,8Bitwide*/*!SoftwareTriggerInterruptRegister*/NVIC_Type;a/寄存器ISER、ICER、ISPR、ICPR、IABR在STM32中都使用的8個(實際3個就夠了,后面的將來還要擴充?)。這些32位的寄存器中每一位對應了一個中斷通道相應的標o比如地址在0XE000E100的ISER0這個32位的寄存器,第0位是中斷通道0的允許位,
20、第2位是中斷通道1的允許標志第32位是中斷通道31的允許位;接下來地址在0XE000E104的ISER1則是中斷通道32-63的允許位。ICER、ISPR、ICPR、IABR的結構typedefstruct_IOuint32_tISER8;uint32_tRESERVED024;_IOuint32_tICER8;uint32_tRSERVED124;_IOuint32_tISPR8;uint32_tRESERVED224;_IOuint32_tICPR8;uint32_tRESERVED324;_IOuint32_tIABR8;uint32_tRESERVED456;_IOuint8_tIP2
21、40;uint32_tRESERVED5644;_Ouint32_tSTIR;相同,只是含義不同。注意是對這些寄存器的操作:寫1表示置位或清除,寫0無任何影響。例如:對0XE000E100的ISER0的第0位寫1,表示允許中斷通道0中斷;但對0XE000E100的ISER0的第0位寫0,則沒有任何作用,該位保持不變。如果要禁止中斷通道0的中斷響應,那么就必須:對0XE000E180的ICER0的第0位寫1,表示禁止中斷通道0的中斷;對0XE000E180的ICER0的第0位寫0,也是不起任何作用的。b/IP240用于定義240個外部中斷通道的優(yōu)先級,每1個字節(jié)對應一個通道。4個通道的IP口構成
22、一個32位的寄存器。在STM32中最多有68個外部中斷通道,每個IP口的1個字節(jié)中只使用高4位(見前面介紹)。IP口的結構如下:31:2827:2423:2019:1615:1211:87:43:0E000E400PIR_3PIR_2PIR_1PIR_0每8 8位的高4 4位有效,灰色位表示無效E000E404PIR_7PIR_6PIR_5PIR_4c/在ST公司提供的函數(shù)庫的頭文件中另一個數(shù)據(jù)結構中,還有一個寄存器需要關注/*memorymappingstructforSystemControlBlock*/*!CPUIDBaseRegister*/*!InterruptControlSta
23、teRegister*/*!VectorTableOffsetRegister*/*!ApplicationInterrupt/ResetControlRegister*/*!SystemControlRegister*/*!ConfigurationControlRegister*/*!SystemHandlersPriorityRegisters(4-7,8-11,/*!SystemHandlerControlandStateRegister*/*!ConfigurableFaultStatusRegister*/*!HardFaultStatusRegister*/*!DebugFaul
24、tStatusRegister*/*!MemManageAddressRegister*/*!BusFaultAddressRegister*/*!AuxiliaryFaultStatusRegister*/*!ProcessorFeatureRegister*/*!DebugFeatureRegister*/*!AuxiliaryFeatureRegister*/*!MemoryModelFeatureRegister*/*!ISAFeatureRegister*/SCB_Type;它就是地址在0 xE000ED0C的32位寄存器AIRCR(ApplicationInterrupt/Rese
25、tControlRegister) ,該寄存器的10:83位就是PRIGROUP的定義位值,它規(guī)定了系統(tǒng)中有多少個搶先級中斷和子優(yōu)先級中斷。而STM32只使用高4位bits,起可能的值如下(來自ST的函數(shù)庫頭文件中的定義)(uint32_t)0 x700)/*!0bitsforpre-emptionprioritytypedefstruct_Iuint32_tCPUID;_IOuint32_tICSR;_IOuint32_tVTOR;_IOuint32_tAIRCR;_IOuint32_tSCR;_IOuint32_tCCR;_IOuint8_tSHP12;12-15)*/_IOuint32_tSHCSR;_IOuint32_tCFSR;_IOuint32_tHFSR;_IOuint32_tDFSR;_IOuint32_tMMFAR;_IOuint32_tBFAR;_IOuint32_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版九年級數(shù)學上冊21.2.4《因式分解法》聽評課記錄
- 人教版歷史八年級上冊(2017年新編)《第6課戊戌變法》(聽課評課記錄)
- 蘇科版數(shù)學八年級上冊聽評課記錄《4-3實數(shù)(1)》
- 新版華東師大版八年級數(shù)學下冊《18.1平行四邊形的性質(zhì)2》聽評課記錄
- 蘇科版數(shù)學七年級下冊聽評課記錄12.2證明1
- 人教版部編歷史七年級上冊《第12課 漢武帝鞏固大一統(tǒng)王朝》聽課評課記錄2
- 2022版新課標七年級上冊道德與法治第五課交友的智慧第二課時網(wǎng)上交友新時空聽課評課記錄
- 創(chuàng)業(yè)糕點店創(chuàng)業(yè)計劃書
- 專利技術許可證合同范本
- 廠房出租安全生產(chǎn)管理協(xié)議書范本
- 分享二手房中介公司的薪酬獎勵制度
- 安徽省2022年中考道德與法治真題試卷(含答案)
- GB 4793-2024測量、控制和實驗室用電氣設備安全技術規(guī)范
- 項目人員管理方案
- 重大火災隱患判定方法
- 挖掘機售后保養(yǎng)及維修服務協(xié)議(2024版)
- 2024年電工(高級技師)考前必刷必練題庫500題(含真題、必會題)
- 2024年全國各地中考語文試題匯編:名著閱讀
- 公司組織架構與管理體系制度
- 2024-2030年中國涂碳箔行業(yè)現(xiàn)狀調(diào)查與投資策略分析研究報告
- 2024-2030年中國派對用品行業(yè)供需規(guī)模調(diào)研及發(fā)展趨勢預測研究報告
評論
0/150
提交評論