3.1 STM32F103中斷概述
Cortex-M3內(nèi)核支持256個中斷,其中包含了16個內(nèi)核中斷和240個外部中斷,并且具有256級的可編程中斷設(shè)置。但STM32并沒有使用Cortex-M3內(nèi)核的全部東西,而是只用了它的一部分。STM32有84個中斷,包括16個內(nèi)核中斷和68個可屏蔽中斷,具有16級可編程的中斷優(yōu)先級。而我們常用的就是這68個可屏蔽中斷,但是STM32的68個可屏蔽中斷,在STM32F103ZET6中只有60個。
3.2 STM32F103中斷優(yōu)先級
3.2.1 優(yōu)先級結(jié)構(gòu)
STM32F103的中斷分為搶占優(yōu)先級和響應(yīng)優(yōu)先級兩種,這兩種優(yōu)先級的順序是搶占優(yōu)先級高于響應(yīng)優(yōu)先級,假設(shè)存在兩個事件,那就會存在以下幾種可能:
(1)情況1:事件1和事件2的搶占優(yōu)先級都是1,事件1的響應(yīng)優(yōu)先級為1,事件2的響應(yīng)優(yōu)先級為2,那么事件1和事件2同時發(fā)生的時候,CPU優(yōu)先處理事件1,然后處理事件2;
(2)情況2:事件1和事件2的響應(yīng)優(yōu)先級都是1,事件1的搶占優(yōu)先級為2,事件2的搶占優(yōu)先級為1,那么,事件1和事件2同時發(fā)生的時候,CPU優(yōu)先處理事件2,然后處理事件1;
(3)情況3:事件1的響應(yīng)優(yōu)先級為1,事件2的響應(yīng)優(yōu)先級為2,事件1的搶占優(yōu)先級為2,事件2的搶占優(yōu)先級為1,當(dāng)事件1和事件2同時發(fā)生的時候,CPU優(yōu)先處理事件2,然后處理事件1;
通過上面兩種情況,我們可以發(fā)現(xiàn),當(dāng)搶占優(yōu)先級一致,誰的響應(yīng)優(yōu)先級的數(shù)小,誰的優(yōu)先級就高,中斷同時發(fā)生的時候CPU就先處理誰;如果搶占優(yōu)先級不一樣,那么無所謂響應(yīng)優(yōu)先級,誰的搶占優(yōu)先級數(shù)小,優(yōu)先級就高,中斷同時發(fā)生的時候CPU就先處理誰。
STM32F103的搶占優(yōu)先級和響應(yīng)優(yōu)先級各有4級,即0~3,根據(jù)乘法原理,也從側(cè)面反映了16級可編程的中斷優(yōu)先級,并且搶占優(yōu)先級和響應(yīng)優(yōu)先級的數(shù)量是可以設(shè)置的,通過中斷分組來配置,中斷分組和優(yōu)先級數(shù)量的對應(yīng)如下表所示。
組 | 搶占優(yōu)先級數(shù)量 | 響應(yīng)優(yōu)先級處理 |
---|---|---|
0 | 0 | 4 |
1 | 1 | 3 |
2 | 2 | 2 |
3 | 3 | 1 |
4 | 4 | 0 |
3.2.2 相關(guān)寄存器
(1) 中斷應(yīng)用和復(fù)位控制寄存器 :AIRCR
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
KEY[15:0] | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
END | - | GROUP[2:0] | - | REQ | ACT | RST |
Bit 31~Bit 16:激活代碼,寫入0x05FA激活寄存器
Bit 15:指示數(shù)據(jù)的字節(jié)序(這只能在重置后更改)
0:表示小尾數(shù)
1:表示大字節(jié)序
Bit 10~Bit 8:中斷優(yōu)先級分組
Bit 2:請求芯片控制邏輯產(chǎn)生復(fù)位
Bit 1:清除所有活動狀態(tài)信息中的異常
Bit 0:重置Cortex-M3處理器(調(diào)試邏輯除外)
(2) 中斷使能寄存器組 :ISER
在STM32中,ISER寄存器一共有3個,ISER[0]的0到31位對應(yīng)中斷031,ISER[1]的0到31位對應(yīng)中斷3263,ISER[2]的0到3對應(yīng)中斷64~67,如果需要使能某個中斷,必須設(shè)置對應(yīng)的ISER位為1,要清除的話可以設(shè)置ICER寄存器組對應(yīng)位為1,或者對ISER寫0,但是對于ICER寄存器組寫0是不起作用的。
(3) 中斷優(yōu)先級控制寄存器組 :IP
對于STM32,優(yōu)先級控制寄存器IP一共有68個,對應(yīng)著68個中斷,每個寄存器的結(jié)構(gòu)都是相同的,如下圖所示。
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
PrePriority[1:0] | SubPriority[1:0] | - |
Bit 7~Bit 6:搶占優(yōu)先級
Bit 5~Bit 4:響應(yīng)優(yōu)先級
3.2.3 中斷優(yōu)先級配置函數(shù)
/***************************************************
Name :NVIC_Init
Function :設(shè)置NVIC
Parameter :
PrePriority :搶占優(yōu)先級
SubPriority :響應(yīng)優(yōu)先級
Channel :中斷編號
Group :中斷分組 0~4
Return :None
***************************************************/
void NVIC_Init( u8 PrePriority, u8 SubPriority, u8 Channel, u8 Group )
{
u32 temp, temp1 ;
//設(shè)置分組
temp1 = ( ~Group )&0x07 ; //取后三位
temp1 <<= 8 ;
temp = SCB->AIRCR ; //讀取先前的設(shè)置
temp &= 0x0000F8FF ; //清空先前分組
temp |= 0x05FA0000 ; //寫入鑰匙
temp |= temp1 ;
SCB->AIRCR = temp ; //設(shè)置分組
//設(shè)置優(yōu)先級
temp = ( u32 )PrePriority<<( 4-Group ) ;
temp |= SubPriority&( 0x0f>>Group ) ;
temp &= 0x0F ; //取低四位
NVIC->ISER[ Channel/32 ] |= ( 1< NVIC->IP[ Channel ] |= temp<<4 ; //設(shè)置響應(yīng)優(yōu)先級和搶斷優(yōu)先級 } 外部中斷/事件控制器由連接線設(shè)備中的多達(dá)20個邊緣檢測器或其他設(shè)備中的19個邊緣檢測器組成,用于生成事件/中斷請求。每條輸入線可以獨立配置以選擇類型(事件或中斷)和相應(yīng)的觸發(fā)事件(上升或下降或兩者)。每條線也可以獨立屏蔽。 對于STM32來說,每一個端口都可以配置為外部中斷,根據(jù)中斷信號的類型都可以單獨配置上升沿觸發(fā)或者下降沿觸發(fā),中斷服務(wù)函數(shù)相互獨立。 (1) 中斷屏蔽寄存器 :IMR Bit 19~Bit 0:線x上的中斷請求配置位 0:禁止輸入線x上的中斷請求 1:允許輸入線x上的中斷請求 (2) 上升沿觸發(fā)選擇寄存器 :RTSR Bit 19~Bit 0:線x上的上升沿觸發(fā)事件配置位 0:禁止輸入線x上的上升沿觸發(fā) 1:允許輸入線x上的上升沿觸發(fā) (3) 下降沿觸發(fā)選擇寄存器 :FTSR Bit 19~Bit 0:線x上的下降沿觸發(fā)事件配置位 0:禁止輸入線x上的下降沿觸發(fā) 1:允許輸入線x上的下降沿觸發(fā)3.3 外部中斷EXIT結(jié)構(gòu)
3.3.1 EXIT概述
3.3.2 EXIT相關(guān)寄存器
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
-
M19
M18
M17
M16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
M15
M14
M13
M12
M11
M10
M9
M8
M7
M6
M5
M4
M3
M2
M1
M0
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
-
R19
R18
R17
R16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
R15
R14
R13
R12
R11
R10
R9
R8
R7
R6
R5
R4
R3
R2
R1
R0
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
-
F19
F18
F17
F16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
F15
F14
F13
F12
F11
F10
F9
F8
F7
F6
F5
F4
F3
F2
F1
F0
-
STM32
+關(guān)注
關(guān)注
2293文章
11031瀏覽量
364706 -
中斷
+關(guān)注
關(guān)注
5文章
905瀏覽量
42782 -
Cortex-M
+關(guān)注
關(guān)注
2文章
231瀏覽量
30378
發(fā)布評論請先 登錄
STM32單片機學(xué)習(xí)筆記(8):外部中斷

STM32學(xué)習(xí)筆記14:基本問題,來討論一下軟件架構(gòu)
STM32學(xué)習(xí)筆記(初學(xué)者快速入門)
STM32學(xué)習(xí)記錄之中斷是什么
stm32學(xué)習(xí)之中斷事件
CubeMX入門STM32 HAL庫的學(xué)習(xí)筆記
STM32入門學(xué)習(xí)筆記 精選資料分享
STM32各模塊學(xué)習(xí)筆記
stm32之中斷與外部中斷

STM32學(xué)習(xí)筆記--中斷系統(tǒng)

STM32學(xué)習(xí)筆記(五)---NVIC

STM32入門學(xué)習(xí)筆記之中斷架構(gòu)(下)

評論