3.1 STM32F103中斷概述
Cortex-M3內(nèi)核支持256個(gè)中斷,其中包含了16個(gè)內(nèi)核中斷和240個(gè)外部中斷,并且具有256級(jí)的可編程中斷設(shè)置。但STM32并沒(méi)有使用Cortex-M3內(nèi)核的全部東西,而是只用了它的一部分。STM32有84個(gè)中斷,包括16個(gè)內(nèi)核中斷和68個(gè)可屏蔽中斷,具有16級(jí)可編程的中斷優(yōu)先級(jí)。而我們常用的就是這68個(gè)可屏蔽中斷,但是STM32的68個(gè)可屏蔽中斷,在STM32F103ZET6中只有60個(gè)。
3.2 STM32F103中斷優(yōu)先級(jí)
3.2.1 優(yōu)先級(jí)結(jié)構(gòu)
STM32F103的中斷分為搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)兩種,這兩種優(yōu)先級(jí)的順序是搶占優(yōu)先級(jí)高于響應(yīng)優(yōu)先級(jí),假設(shè)存在兩個(gè)事件,那就會(huì)存在以下幾種可能:
(1)情況1:事件1和事件2的搶占優(yōu)先級(jí)都是1,事件1的響應(yīng)優(yōu)先級(jí)為1,事件2的響應(yīng)優(yōu)先級(jí)為2,那么事件1和事件2同時(shí)發(fā)生的時(shí)候,CPU優(yōu)先處理事件1,然后處理事件2;
(2)情況2:事件1和事件2的響應(yīng)優(yōu)先級(jí)都是1,事件1的搶占優(yōu)先級(jí)為2,事件2的搶占優(yōu)先級(jí)為1,那么,事件1和事件2同時(shí)發(fā)生的時(shí)候,CPU優(yōu)先處理事件2,然后處理事件1;
(3)情況3:事件1的響應(yīng)優(yōu)先級(jí)為1,事件2的響應(yīng)優(yōu)先級(jí)為2,事件1的搶占優(yōu)先級(jí)為2,事件2的搶占優(yōu)先級(jí)為1,當(dāng)事件1和事件2同時(shí)發(fā)生的時(shí)候,CPU優(yōu)先處理事件2,然后處理事件1;
通過(guò)上面兩種情況,我們可以發(fā)現(xiàn),當(dāng)搶占優(yōu)先級(jí)一致,誰(shuí)的響應(yīng)優(yōu)先級(jí)的數(shù)小,誰(shuí)的優(yōu)先級(jí)就高,中斷同時(shí)發(fā)生的時(shí)候CPU就先處理誰(shuí);如果搶占優(yōu)先級(jí)不一樣,那么無(wú)所謂響應(yīng)優(yōu)先級(jí),誰(shuí)的搶占優(yōu)先級(jí)數(shù)小,優(yōu)先級(jí)就高,中斷同時(shí)發(fā)生的時(shí)候CPU就先處理誰(shuí)。
STM32F103的搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)各有4級(jí),即0~3,根據(jù)乘法原理,也從側(cè)面反映了16級(jí)可編程的中斷優(yōu)先級(jí),并且搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)的數(shù)量是可以設(shè)置的,通過(guò)中斷分組來(lái)配置,中斷分組和優(yōu)先級(jí)數(shù)量的對(duì)應(yīng)如下表所示。
組 | 搶占優(yōu)先級(jí)數(shù)量 | 響應(yīng)優(yōu)先級(jí)處理 |
---|---|---|
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:激活代碼,寫(xiě)入0x05FA激活寄存器
Bit 15:指示數(shù)據(jù)的字節(jié)序(這只能在重置后更改)
0:表示小尾數(shù)
1:表示大字節(jié)序
Bit 10~Bit 8:中斷優(yōu)先級(jí)分組
Bit 2:請(qǐng)求芯片控制邏輯產(chǎn)生復(fù)位
Bit 1:清除所有活動(dòng)狀態(tài)信息中的異常
Bit 0:重置Cortex-M3處理器(調(diào)試邏輯除外)
(2) 中斷使能寄存器組 :ISER
在STM32中,ISER寄存器一共有3個(gè),ISER[0]的0到31位對(duì)應(yīng)中斷031,ISER[1]的0到31位對(duì)應(yīng)中斷3263,ISER[2]的0到3對(duì)應(yīng)中斷64~67,如果需要使能某個(gè)中斷,必須設(shè)置對(duì)應(yīng)的ISER位為1,要清除的話可以設(shè)置ICER寄存器組對(duì)應(yīng)位為1,或者對(duì)ISER寫(xiě)0,但是對(duì)于ICER寄存器組寫(xiě)0是不起作用的。
(3) 中斷優(yōu)先級(jí)控制寄存器組 :IP
對(duì)于STM32,優(yōu)先級(jí)控制寄存器IP一共有68個(gè),對(duì)應(yīng)著68個(gè)中斷,每個(gè)寄存器的結(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)先級(jí)
Bit 5~Bit 4:響應(yīng)優(yōu)先級(jí)
3.2.3 中斷優(yōu)先級(jí)配置函數(shù)
/***************************************************
Name :NVIC_Init
Function :設(shè)置NVIC
Parameter :
PrePriority :搶占優(yōu)先級(jí)
SubPriority :響應(yīng)優(yōu)先級(jí)
Channel :中斷編號(hào)
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 ; //寫(xiě)入鑰匙
temp |= temp1 ;
SCB->AIRCR = temp ; //設(shè)置分組
//設(shè)置優(yōu)先級(jí)
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)先級(jí)和搶斷優(yōu)先級(jí) } 外部中斷/事件控制器由連接線設(shè)備中的多達(dá)20個(gè)邊緣檢測(cè)器或其他設(shè)備中的19個(gè)邊緣檢測(cè)器組成,用于生成事件/中斷請(qǐng)求。每條輸入線可以獨(dú)立配置以選擇類(lèi)型(事件或中斷)和相應(yīng)的觸發(fā)事件(上升或下降或兩者)。每條線也可以獨(dú)立屏蔽。 對(duì)于STM32來(lái)說(shuō),每一個(gè)端口都可以配置為外部中斷,根據(jù)中斷信號(hào)的類(lèi)型都可以單獨(dú)配置上升沿觸發(fā)或者下降沿觸發(fā),中斷服務(wù)函數(shù)相互獨(dú)立。 (1) 中斷屏蔽寄存器 :IMR Bit 19~Bit 0:線x上的中斷請(qǐng)求配置位 0:禁止輸入線x上的中斷請(qǐng)求 1:允許輸入線x上的中斷請(qǐng)求 (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)注
2270文章
10904瀏覽量
356367 -
中斷
+關(guān)注
關(guān)注
5文章
899瀏覽量
41529 -
Cortex-M
+關(guān)注
關(guān)注
2文章
229瀏覽量
29777
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論