




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、STM32中斷管理函數(shù)CM3 內(nèi)核支持256 個(gè)中斷,其中包含了16 個(gè)內(nèi)核中斷和240 個(gè)外部中斷,并且具有256級(jí)的可編程中斷設(shè)置。但STM32 并沒有使用CM3 內(nèi)核的全部東西,而是只用了它的一部分。STM32 有76 個(gè)中斷,包括16 個(gè)內(nèi)核中斷和60 個(gè)可屏蔽中斷,具有16 級(jí)可編程的中斷優(yōu)先級(jí)。而我們常用的就是這60 個(gè)可屏蔽中斷,所以我們就只針對(duì)這60 個(gè)可屏蔽中斷進(jìn)行介紹。在 MDK 內(nèi),與NVIC 相關(guān)的寄存器,MDK 為其定義了如下的結(jié)構(gòu)體:typedef structvu32 ISER2;u32 RESERVED030;vu32 ICER2;u32 RSERVED130;
2、vu32 ISPR2;u32 RESERVED230;vu32 ICPR2;u32 RESERVED330;vu32 IABR2;u32 RESERVED462;vu32 IPR15; NVIC_TypeDef;STM32 的中斷在這些寄存器的控制下有序的執(zhí)行的。了解這些中斷寄存器,你才能方便的使用STM32 的中斷。下面重點(diǎn)介紹這幾個(gè)寄存器:ISER2:ISER 全稱是:Interrupt Set-Enable Registers,這是一個(gè)中斷使能寄存器組。上面說了STM32 的可屏蔽中斷只有60 個(gè),這里用了2 個(gè)32 位的寄存器,總共可以表示64 個(gè)中斷。而STM32 只用了其中的前60
3、 位。ISER0的bit0bit31 分別對(duì)應(yīng)中斷031。ISER1的bit027對(duì)應(yīng)中斷3259;這樣總共60 個(gè)中斷就分別對(duì)應(yīng)上了。你要使能某個(gè)中斷,必須設(shè)置相應(yīng)的ISER位為1,使該中斷被使能(這里僅僅是使能,還要配合中斷分組、屏蔽、IO 口映射等設(shè)置才算是一個(gè)完整的中斷設(shè)置)。具體每一位對(duì)應(yīng)哪個(gè)中斷,請(qǐng)參考stm32f10x_nvic.h 里面的第36 行處。ICER2:全稱是:Interrupt Clear-Enable Registers,是一個(gè)中斷除能寄存器組。該寄存器組與ISER 的作用恰好相反,是用來清除某個(gè)中斷的使能的。其對(duì)應(yīng)位的功能,也和ICER 一樣。這里要專門設(shè)置一個(gè)
4、ICER 來清除中斷位,而不是向ISER 寫0 來清除,是因?yàn)镹VIC 的這些寄存器都是寫1 有效的,寫0 是無效的。具體為什么這么設(shè)計(jì),請(qǐng)看CM3 權(quán)威指南第125 頁,NVIC 概覽一章。ISPR2:全稱是:Interrupt Set-Pending Registers,是一個(gè)中斷掛起控制寄存器組。每個(gè)位對(duì)應(yīng)的中斷和ISER 是一樣的。通過置1,可以將正在進(jìn)行的中斷掛起,而執(zhí)行同級(jí)或更高級(jí)別的中斷。寫0 是無效的。ICPR2:全稱是:Interrupt Clear-Pending Registers,是一個(gè)中斷解掛控制寄存器組。其作用與ISPR 相反,對(duì)應(yīng)位也和ISER 是一樣的。通過設(shè)置
5、1,可以將掛起的中斷接掛。寫0 無效。IABR2:全稱是:Active Bit Registers,是一個(gè)中斷激活標(biāo)志位寄存器組。對(duì)應(yīng)位所代表的中斷和ISER 一樣,如果為1,則表示該位所對(duì)應(yīng)的中斷正在被執(zhí)行。這是一個(gè)只讀寄存器,通過它可以知道當(dāng)前在執(zhí)行的中斷是哪一個(gè)。在中斷執(zhí)行完了由硬件自動(dòng)清零。IPR15:全稱是:Interrupt Priority Registers,是一個(gè)中斷優(yōu)先級(jí)控制的寄存器組。這個(gè)寄存器組相當(dāng)重要!STM32 的中斷分組與這個(gè)寄存器組密切相關(guān)。IPR 寄存器組由15 個(gè)32bit 的寄存器組成,每個(gè)可屏蔽中斷占用8bit,這樣總共可以表示15*4=60 個(gè)可屏蔽中
6、斷。剛好和STM32 的可屏蔽中斷數(shù)相等。IPR0的3124,2316,158,70分別對(duì)應(yīng)中中斷30,依次類推,總共對(duì)應(yīng)60 個(gè)外部中斷。而每個(gè)可屏蔽中斷占用的8bit 并沒有全部使用,而是只用了高4 位。這4 位,又分為搶占優(yōu)先級(jí)和子優(yōu)先級(jí)。搶占優(yōu)先級(jí)在前,子優(yōu)先級(jí)在后。而這兩個(gè)優(yōu)先級(jí)各占幾個(gè)位又要根據(jù)SCB-AIRCR 中中斷分組的設(shè)置來決定。這里簡(jiǎn)單介紹一下 STM32 的中斷分組:STM32 將中斷分為5 個(gè)組,組04。該分組的設(shè)置是由SCB-AIRCR 寄存器的bit108 來定義的。具體的分配關(guān)系如下表所示:通過這個(gè)表,我們就可以清楚的看到組 04 對(duì)應(yīng)的配置關(guān)系,例如組設(shè)置為3
7、,那么此時(shí)所有的60 個(gè)中斷,每個(gè)中斷的中斷優(yōu)先寄存器的高四位中的最高3 位是搶占優(yōu)先級(jí),低1 位是響應(yīng)優(yōu)先級(jí)。每個(gè)中斷,你可以設(shè)置搶占優(yōu)先級(jí)為07,響應(yīng)優(yōu)先級(jí)為1 或0。搶占優(yōu)先級(jí)的級(jí)別高于響應(yīng)優(yōu)先級(jí)。而數(shù)值越小所代表的優(yōu)先級(jí)就越高。結(jié)合實(shí)例說明一下:假定設(shè)置中斷優(yōu)先級(jí)組為2,然后設(shè)置中斷3(RTC 中斷)的搶占優(yōu)先級(jí)為3,響應(yīng)優(yōu)先級(jí)為1。中斷6(外部中斷0)的搶占優(yōu)先級(jí)為4,響應(yīng)優(yōu)先級(jí)為0。中斷7(外部中斷1)的搶占優(yōu)先級(jí)為3,響應(yīng)優(yōu)先級(jí)為0。那么這3 個(gè)中斷的優(yōu)先級(jí)順序?yàn)椋褐袛?中斷3中斷6。這里需要注意 2 點(diǎn):如果兩個(gè)中斷的響應(yīng)優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)都是一樣的話,則看哪個(gè)中斷先發(fā)生就先執(zhí)
8、行。高優(yōu)先級(jí)的搶占優(yōu)先級(jí)是可以打斷正在進(jìn)行的低搶占優(yōu)先級(jí)中斷的。而搶占優(yōu)先級(jí)相同的中斷,高優(yōu)先級(jí)的響應(yīng)優(yōu)先級(jí)不可以打斷低響應(yīng)優(yōu)先級(jí)的中斷。上面例子中的中斷3 和中斷7都可以打斷中斷6 的中斷。而中斷7 和中斷3 卻不可以相互打斷!通過以上介紹,我們熟悉了 STM32 中斷設(shè)置的大致過程。接下來我們介紹如何使用函數(shù)實(shí)現(xiàn)以上中斷設(shè)置,使得我們以后的中斷設(shè)置簡(jiǎn)單化。第一個(gè)介紹的是NVIC 的分組函數(shù)MY_NVIC_PriorityGroupConfig,該函數(shù)的參數(shù)NVIC_Group 為要設(shè)置的分組號(hào),可選范圍為04,總共5 組。如果參數(shù)非法,將可能導(dǎo)致不可預(yù)料的結(jié)果。MY_NVIC_Priori
9、tyGroupConfig 函數(shù)代碼如下:/設(shè)置NVIC 分組/NVIC_Group:NVIC 分組 04 總共5 組void MY_NVIC_PriorityGroupConfig(u8 NVIC_Group)u32 temp,temp1;temp1=(NVIC_Group)&0x07;/取后三位temp1AIRCR; /讀取先前的設(shè)置temp&=0X0000F8FF; /清空先前分組temp|=0X05FA0000; /寫入鑰匙temp|=temp1;SCB-AIRCR=temp; /設(shè)置分組通過前面的介紹,我們知道STM32 的5 個(gè)分組是通過設(shè)置SCB-AIRCR 的BIT10:8來實(shí)
10、現(xiàn)的,而通過2.7.2.1 的介紹我們知道SCB-AIRCR 的修改需要通過在高16 位寫入0X05FA 這個(gè)密鑰才能修改的,故在設(shè)置AIRCR 之前,應(yīng)該把密鑰加入到要寫入的內(nèi)容的高16 位,以保證能正常的寫入AIRCR。在修改AIRCR 的時(shí)候,我們一般采用讀-改-寫的步驟,來實(shí)現(xiàn)不改變AIRCR 原來的其他設(shè)置。以上就是MY_NVIC_PriorityGroupConfig 函數(shù)設(shè)置中斷優(yōu)先級(jí)分組的思路。第 二 個(gè) 函 數(shù) 是NVIC 設(shè)置函數(shù)MY_NVIC_Init , 該函數(shù)有4 個(gè)參數(shù), 分別為:NVIC_PreemptionPriority 、NVIC_SubPriority 、
11、NVIC_Channel 、NVIC_Group 。第一個(gè)參數(shù)NVIC_PreemptionPriority 為中斷搶占優(yōu)先級(jí)數(shù)值,第二個(gè)參數(shù)NVIC_SubPriority 為中斷子優(yōu)先級(jí)數(shù)值,前兩個(gè)參數(shù)的值必須在規(guī)定范圍內(nèi),否則也可能產(chǎn)生意想不到的錯(cuò)誤。第三個(gè)參數(shù)NVIC_Channel 為中斷的編號(hào)(范圍為059),最后一個(gè)參數(shù)NVIC_Group 為中斷分組設(shè)置(范圍為04)。該函數(shù)代碼如下:/設(shè)置NVIC/NVIC_PreemptionPriority:搶占優(yōu)先級(jí)/NVIC_SubPriority :響應(yīng)優(yōu)先級(jí)/NVIC_Channel :中斷編號(hào)/NVIC_Group :中斷分組
12、04/注意優(yōu)先級(jí)不能超過設(shè)定的組的范圍!否則會(huì)有意想不到的錯(cuò)誤/組劃分:/組0:0 位搶占優(yōu)先級(jí),4 位響應(yīng)優(yōu)先級(jí)/組1:1 位搶占優(yōu)先級(jí),3 位響應(yīng)優(yōu)先級(jí)/組2:2 位搶占優(yōu)先級(jí),2 位響應(yīng)優(yōu)先級(jí)/組3:3 位搶占優(yōu)先級(jí),1 位響應(yīng)優(yōu)先級(jí)/組4:4 位搶占優(yōu)先級(jí),0 位響應(yīng)優(yōu)先級(jí)/NVIC_SubPriority 和NVIC_PreemptionPriority 的原則是,數(shù)值越小,越優(yōu)先void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)u32 temp
13、;u8 IPRADDR=NVIC_Channel/4; /每組只能存4 個(gè),得到組地址u8 IPROFFSET=NVIC_Channel%4;/在組內(nèi)的偏移IPROFFSET=IPROFFSET*8+4; /得到偏移的確切位置MY_NVIC_PriorityGroupConfig(NVIC_Group);/設(shè)置分組temp=NVIC_PreemptionPriorityNVIC_Group);temp&=0xf;/取低四位if(NVIC_ChannelISER0|=1ISER1|=1IPRIPRADDR|=tempAPB2ENR|=0x01;/使能io 復(fù)用時(shí)鐘AFIO-EXTICREXTADDR|=GPIOxIMR|=1EMR|=1FTSR|=1RTSR|=1BITx;/line BITx 上事件上升降沿觸發(fā)Ex_NVIC_Config 完全是按照我們之前的分析來編寫的,首先根據(jù)GPIOx 的位得到中斷寄存器組的編號(hào),即EXTICR 的編號(hào)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 臨床醫(yī)學(xué)技士試題及答案
- 掌握2024年紡織品檢驗(yàn)員試題及答案
- 全面了解紡織工程師考試內(nèi)容試題及答案
- 國(guó)際商業(yè)美術(shù)設(shè)計(jì)師行業(yè)前景展望試題及答案
- 全球市場(chǎng)中的設(shè)計(jì)策略適應(yīng)性試題及答案
- 護(hù)士類考試試題及答案
- 教師體罰測(cè)試題及答案
- 外傷固定考試題及答案
- 電梯管理員試題及答案
- 煙葉種植面試題及答案
- 全屋硬裝 工具-版本信息 v2-2021041課件講解
- 東華全民健康信息平臺(tái)建設(shè)方案
- 少先隊(duì)隊(duì)員知識(shí)考核試題參考(有答案)
- 煤礦排矸場(chǎng)、矸石山生態(tài)環(huán)境治理工程施工組織設(shè)計(jì)
- 《論教育》主要篇目課件
- 10t橋式起重機(jī)安裝方案
- 消防查驗(yàn)合同范例
- 園丁與木匠讀書分享
- 1例腦出血術(shù)后并顱內(nèi)感染患者的個(gè)案護(hù)理
- 2024年重慶市普通高中學(xué)業(yè)水平選擇性考試高考模擬調(diào)研卷(一)化學(xué)試題(含答案解析)
- 《發(fā)酵工程原理及技術(shù)》期末試題C及答案
評(píng)論
0/150
提交評(píng)論