STM32處理器的中斷技術(shù)_第1頁
STM32處理器的中斷技術(shù)_第2頁
STM32處理器的中斷技術(shù)_第3頁
STM32處理器的中斷技術(shù)_第4頁
STM32處理器的中斷技術(shù)_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

STM32處理器的中斷技術(shù)5.1STM32中斷通道的管理 5.2STM32中斷優(yōu)先級的設(shè)置5.3STM32外部中斷/事件控制器5.4STM32中斷編程實例

5.1STM32中斷通道的管理

中斷通道是處理中斷的通道,每個中斷通道對應(yīng)唯一的中斷向量和唯一的中斷服務(wù)程序,但一個中斷通道可具有多個可以引起中斷的中斷源,這些中斷源都能通過對應(yīng)的“中斷通道”向內(nèi)核(CPU)申請中斷。

STM32系統(tǒng)的嵌套向量中斷控制器和處理器,支持15個異常中斷向量和240個外部中斷通道,有256級中斷優(yōu)先級。而STM32的中斷系統(tǒng)并沒有使用內(nèi)核(CM3)的NVIC全部功能,除15個CM3異常外,STM32F103系列具有60個中斷通道,而STM32F107系列具有68個中斷通道,中斷優(yōu)先級有16級。在STM32系列控制器中,STM32F103xxx處理器的15個異常中斷向量見表5.1,68個中斷通道向量見表5.2所示。

5.2STM32中斷優(yōu)先級的設(shè)置

1.嵌套設(shè)定規(guī)則

STM32中有兩個優(yōu)先級的概念,即占先優(yōu)先級(PreemptionPriority)和副優(yōu)先級(Subpriority)。STM32規(guī)定的嵌套規(guī)則如下:

(1)高占先優(yōu)先級的中斷可以打斷低占先優(yōu)先級的中斷服務(wù),從而構(gòu)成中斷嵌套。相同占先優(yōu)先級的中斷之間不能構(gòu)成中斷嵌套,即當(dāng)一個中斷到來時,如果STM32正在處理另一個同占先優(yōu)先級的中斷,這個后來的中斷就要等到前一個中斷處理完后才能被執(zhí)行。

(2)副優(yōu)先級不可以中斷嵌套,但占先優(yōu)先級相同但副優(yōu)先級不同的多個中斷同時申請服務(wù)時,STM32首先響應(yīng)副優(yōu)先級高的中斷。

(3)當(dāng)相同占先優(yōu)先級和相同副優(yōu)先級的中斷同時申請服務(wù)時,STM32首先響應(yīng)中斷通道所對應(yīng)的中斷向量地址低(中斷號小)的那個中斷。

(4)需要說明的是,中斷優(yōu)先級的概念是針對“中斷通道”的。當(dāng)中斷通道的優(yōu)先級確定后,該中斷通道對應(yīng)的所有中斷源都享有相同的中斷優(yōu)先級。至于該中斷通道對應(yīng)的多個中斷源的執(zhí)行順序,則取決于用戶的中斷服務(wù)程序。

(5)?STM32目前支持的中斷共有83個,分別為15個內(nèi)核異常和68個外部中斷通道。CM3為每個中斷通道都配備了8位中斷優(yōu)先級控制字IP_n,這8位可以有8種分配方式,即:

①所有8位用于指定的副優(yōu)先級。

②最高1位用于指定的占先優(yōu)先級,最低7位用于指定的副優(yōu)先級。

③最高2位用于指定的占先優(yōu)先級,最低6位用于指定的副優(yōu)先級。

④最高3位用于指定的占先優(yōu)先級,最低5位用于指定的副優(yōu)先級。

⑤最高4位用于指定的占先優(yōu)先級,最低4位用于指定的副優(yōu)先級。

⑥最高5位用于指定的占先優(yōu)先級,最低3位用于指定的副優(yōu)先級。

⑦最髙6位用于指定的占先優(yōu)先級,最低2位用于指定的副優(yōu)先級。

⑧最高7位用于指定的占先優(yōu)先級,最低1位用于指定的副優(yōu)先級。

(6)為了簡化中斷優(yōu)先級的設(shè)置,在Cortex_M3中只使用了8位中的高4位。這4位被分成2組(占先優(yōu)先級和副優(yōu)先級),從高位開始,前面是定義占先優(yōu)先級的位,后面是用于定義副優(yōu)先級的位。4位中斷優(yōu)先級控制位分組方式如表5.3所示。

在程序設(shè)計中,通常只使用表5.3中5種分配情況中的一種。也就是說對于0組,所有的4位都用于副優(yōu)先級(可以是0~15);對于1組,最高1位用于占先優(yōu)先級(可以是0~1),最低3位用于副優(yōu)先級(可以是0~7);對于2組,最高2位用于占先優(yōu)先級(可以是0~3),最低2位用于副優(yōu)先級(可以是0~3);對于3組,最高3位用于占先優(yōu)先級(可以是0~7),最低1位用于副優(yōu)先級(可以是0~1);對于4組,所有4位都用于占先優(yōu)先級(可以是0~15)。

上述分組在STM32固件庫misc.h中,設(shè)置數(shù)據(jù)寫入到AIRCR的[10:8]寄存器內(nèi),其宏定義如下:

#defineNVIC_PriorityGroup_0((u32)0x700)//0組定義

#defineNVIC_PriorityGroup_1((u32)0x600)//1組定義

#defineNVIC_PriorityGroup_2((u32)0x500)//2組定義

#defineNVIC_PriorityGroup_3((u32)0x400)//3組定義

#defineNVIC_PriorityGroup_4((u32)0x300)//4組定義

在編程時可以調(diào)用3.18.1中的NVIC_PriorityGroupConfig()優(yōu)先級設(shè)置函數(shù)和NVIC_Init(&NVIC_InitStructure)初始化函數(shù)。函數(shù)中的分組選項為:

NVIC_PriorityGroup_0(選擇為第0組);

NVIC_PriorityGroup_1(選擇為第1組);

NVIC_PriorityGroup_2(選擇為第2組);

NVIC_PriorityGroup_3(選擇為第3組);

NVIC_PriorityGroup_4(選擇為第4組)。

5.3STM32外部中斷/事件控制器

外部中斷/事件控制器(EXTI)由19個產(chǎn)生事件/中斷要求的邊沿檢測器組成。每個輸入線可以獨(dú)立地配置輸入類型(脈沖或掛起)和對應(yīng)的觸發(fā)事件(上升沿或下降沿或雙邊沿都觸發(fā))。每個輸入線都可以被獨(dú)立地屏蔽,掛起寄存器保持著狀態(tài)線的中斷要求。

5.3.1EXTI硬件結(jié)構(gòu)

STM32的外部中斷/事件控制器對應(yīng)19個中斷通道,其中16個中斷通道EXTI0~EXTI15對應(yīng)GPIOx_Pin0~GPIOx_Pin15,另外3個是EXTI16連接PVD輸出(表5.2中第1號中斷)、EXTI17連接到RTC鬧鐘事件(表5.2中第41號中斷)和EXTI18連接到USB喚醒事件(表5.2中第42號中斷)。EXTI硬件結(jié)構(gòu)如圖5.1所示。圖5.1STM32EXTI硬件結(jié)構(gòu)圖

在圖5.1中,外部信號從編號①的芯片引腳進(jìn)入,經(jīng)過編號②的邊沿檢測電路,通過編號③的或門進(jìn)入中斷(請求掛起寄存器),最后經(jīng)過編號④的與門輸出到NVIC中斷控制器。在這個通道上有4個控制部分。

(1)圖中②處,外部的信號首先經(jīng)過邊沿檢測電路,這個邊沿檢測電路受上升沿或下降沿選擇寄存器控制,用戶可以使用這兩個寄存器控制需要產(chǎn)生中斷的邊沿。因為選擇上升沿或下降沿分別受2個寄存器控制,所以用戶可以同時選擇上升沿或下降沿。

(2)編號③的或門一個輸入是邊沿檢測電路處理的外部中斷信號,另一個輸入是“軟件中斷事件寄存器”,從這里可以看出,軟件可以優(yōu)先于外部信號請求一個中斷或事件,即當(dāng)“軟件中斷事件寄存器”的對應(yīng)位為“1”時,不管外部信號如何,編號③的或門都會輸出有效信號。

(3)中斷或事件請求信號經(jīng)過編號③的或門后,進(jìn)入請求掛起寄存器,請求掛起寄存器中記錄了外部信號的電平變化。

(4)外部請求信號最后經(jīng)過編號④的與門,向NVIC中斷控制器發(fā)出一個中斷請求,如果中斷屏蔽寄存器的對應(yīng)位為“0”,則該請求信號不能傳輸?shù)脚c門的另一端,實現(xiàn)了中斷的屏蔽。

(5)如果用戶希望產(chǎn)生“事件”,則必須先配置并完成對事件線的使能操作。通過設(shè)置兩個觸發(fā)寄存器來完成對邊沿檢測的配置,同時在事件屏蔽寄存器的相應(yīng)位寫“1”以允許事件請求操作。當(dāng)事件線上發(fā)生了對應(yīng)的邊沿信號時,系統(tǒng)將產(chǎn)生一個事件請求脈沖,對應(yīng)的掛起位并不會被置“1”。

在圖5.1上部的APB總線和外設(shè)模塊接口是每一個功能模塊都有的部分,CPU通過這樣的接口訪問各個功能模塊。

1.硬件中斷的配置

用戶可以通過下面的步驟來配置多個線路作為中斷源,具體操作如下:

(1)在EXTI_IMR寄存器中配置多個線路中斷的屏蔽位。

(2)在EXTI_RTSR寄存器和EXTI_FTSR寄存器中配置所選擇中斷線的觸發(fā)選擇位。

(3)配置對應(yīng)到外部中斷控制器EXTI的NVIC中斷通道的使能和屏蔽位,使得多個中斷線中的請求可以被及時響應(yīng)。

2.硬件事件的配置

對于系統(tǒng)中的事件處理,用戶可以通過以下幾個步驟來實現(xiàn)對硬件事件參數(shù)的配置:

(1)通過EXTI_EMR寄存器配置多個事件線的屏蔽位。

(2)通過EXTI_RTSR寄存器和EXTI_FTSR寄存器配置事件線的觸發(fā)選擇器。

3.軟件中斷/事件的配置

對于系統(tǒng)中的軟件中斷/事件處理,用戶可以通過以下幾個步驟來實現(xiàn)對軟件中斷/事件的配置:

(1)通過EXTI_EMR寄存器和EXTI_IMR寄存器配置多個中斷/事件線的屏蔽位。

(2)通過EXTI_SWIER寄存器配置軟件中斷寄存器的請求位。

4.外部中斷/事件線路映射

圖5.2列出了外部中斷與通用I/O口之間的硬件連接。用戶可以通過AFIO_EXTICRx配置GPIO端口上的外部中斷/事件。其中,16個外部中斷(引腳)連接對應(yīng)EXTI0~EXTI15,另外3個外部中斷/事件控制器的連接如下:

(1)?EXTI線16連接到PVD輸出。

(2)?EXTI線17連接到RTC鬧鐘事件。

(3)?EXTI線18連接到USB喚醒事件。圖5.2外部中斷I/O映射

對于STM32F103來說,每個中斷通道對應(yīng)5個中斷源,每個中斷源的選擇由AFIO_EXTICRx(x:1~3)寄存器決定。

AFIO_EXTICR1中的EXTI0[3:0]的含義為:0000——PA[0]引腳;0001——PB[0]引腳;0010——PC[0]引腳;0011——PD[0]引腳;0100——PE[0]引腳。EXTI1[3:0]的含義為:

0000——PA[1]引腳;0001——PB[1]引腳;0010——PC[1]引腳;0011——PD[1]引腳;0100——PE[1]引腳。以此類推。

對于某一中斷線,如中斷線0,PA[0]、PB[0]、PC[0]、PD[0]和PE[0]均可映射為中斷線0;當(dāng)某一GPIO引腳(如PB[0])映射為中斷線0時,PA[0]、PC[0]、PD[0]和PE[0]就不能再映射成中斷引腳。5.3.2EXTI的寄存器

EXTI寄存器不可以位尋址,在使用STM32處理器的外部中斷前,必須通過EXTI相應(yīng)的寄存器對其各個參數(shù)進(jìn)行配置。需要注意的是,使用者在設(shè)置寄存器的過程中,必須采用字(32bit)的方式對其進(jìn)行操作。

1.中斷屏蔽寄存器

在STM32系列處理器中,中斷屏蔽寄存器EXTI_IMR主要用于設(shè)置中斷線上的中斷屏蔽操作。由于STM32系列處理器是32位的內(nèi)核,因此中斷屏蔽寄存器的寬度也為32位,其寄存器各位定義如表5.4所示。

從表5.6可以看出,下降沿觸發(fā)選擇寄存器EXTI_FTSR中,位[31:20]是系統(tǒng)保留位,且必須始終保持為復(fù)位狀態(tài);位[19:0]用于設(shè)置對應(yīng)中斷線上的觸發(fā)方式。TRx表示中斷線x上的下降沿觸發(fā)事件配置。若TRx=0,則表示禁止輸入線x上的下降沿中斷或事件的觸發(fā);若TRx=1,則表示允許輸入線x上的下降沿中斷或事件的觸發(fā)。

由于外部喚醒線同樣也是邊沿觸發(fā)的,所以在這些信號線上也不能出現(xiàn)毛刺信號。另外,用戶在對下降沿觸發(fā)選擇寄存器EXTI_FTSR進(jìn)行寫操作的時候,外部中斷線上的下降沿觸發(fā)信號不能被識別,掛起位也不會被置位。在同一個中斷線上,用戶也可以同時將其設(shè)置為上升沿觸發(fā)和下降沿觸發(fā),即任何一個邊沿都可以觸發(fā)系統(tǒng)的外部中斷。

5.4STM32中斷編程實例

1.中斷編程機(jī)制

中斷服務(wù)程序全部保存在stm32f10x_it.c文件中。在該文件中,每個中斷函數(shù)都是空的。如果要編寫相關(guān)中斷函數(shù),只要找到相關(guān)部分填入相應(yīng)代碼即可。因為每個xx_IRQHandler()與startup_stm32f10x_xx.s中的中斷向量表(見表5.2)中名稱一致,所以,只要是有中斷源被觸發(fā)而被響應(yīng),硬件就會自動跳到固定地址的硬件中斷向量表中,無須人為操作(即編程)就能通過硬件自身的總線來讀取向量,然后找到xX_IRQHandler()程序入口地址,放到PC進(jìn)行跳轉(zhuǎn),這是STM32的硬件機(jī)制。

表5.2中,中斷向量表地址為相對地址,如果存放在RAM中,其起始地址為0x20000000。如果存放在Flash中,其起始地址為0x08000000。在misc.h文件中有如下說明:

#defineNVIC_VectTab_RAM((uint32_t)0x20000000)

#defineNVIC_VectTab_FLASH ((uint32_t)0x0800

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論