STM32 中斷學(xué)習(xí)Interrupt/Evens
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1、NVIC的優(yōu)先級(jí)概念
占先式優(yōu)先級(jí) (pre-emption priority):
高占先式優(yōu)先級(jí)的中斷事件會(huì)打斷當(dāng)前的主程序/中斷程序運(yùn)行— —搶斷式優(yōu)先響應(yīng),俗稱(chēng)中斷嵌套。
副優(yōu)先級(jí)(subpriority):
在占先式優(yōu)先級(jí)相同的情況下,高副優(yōu)先級(jí)的中斷優(yōu)先被響應(yīng);
在占先式優(yōu)先級(jí)相同的情況下,如果有低副優(yōu)先級(jí)中斷正在執(zhí)行, 高副優(yōu)先級(jí)的中斷要等待已被響應(yīng)的低副優(yōu)先級(jí)中斷執(zhí)行結(jié)束后才 能得到響應(yīng)——非搶斷式響應(yīng)(不能嵌套)。
2、判斷中斷是否會(huì)被響應(yīng)的依據(jù)
首先是占先式優(yōu)先級(jí),其次是副優(yōu)先級(jí);
占先式優(yōu)先級(jí)決定是否會(huì)有中斷嵌套;
Reset、NMI、Hard Fault 優(yōu)先級(jí)為負(fù)(高于普通中斷優(yōu)先級(jí))且不可調(diào)整。
3、STM32中用到的Cortex-M3寄存器說(shuō)明
在STM32中用到了Cortex-M3定義的三組寄存器,有關(guān)這三組寄存器的說(shuō)明不在STM32的技術(shù)手冊(cè)中,需要參考ARM公司發(fā)布的Cortex-M3 Technical Reference Manual (r2p0)。
在STM32的固件庫(kù)中定義了三個(gè)結(jié)構(gòu)體與這三個(gè)寄存器組相對(duì)應(yīng),這三個(gè)結(jié)構(gòu)體與ARM手冊(cè)中寄存器的對(duì)應(yīng)關(guān)系如下:
1)、NVIC寄存器組
STM32的固件庫(kù)中有如下定義:
typedef struct
{
vu32 ISER[2];
u32 RESERVED0[30];
vu32 ICER[2];
u32 RSERVED1[30];
vu32 ISPR[2];
u32 RESERVED2[30];
vu32 ICPR[2];
u32 RESERVED3[30];
vu32 IABR[2];
u32 RESERVED4[62];
vu32 IPR[11];
} NVIC_TypeDef;
它們對(duì)應(yīng)ARM手冊(cè)中的名稱(chēng)為
ISER = Interrupt Set-Enable Registers
ICER = Interrupt Clear-Enable Registers
ISPR = Interrupt Set-Pending Register
ICPR = Interrupt Clear-Pending Register
IABR = Active Bit Register
IPR = Interrupt Priority Registers
每個(gè)寄存器有240位,以Interrupt Set-Enable Registers說(shuō)明,ISER[0]對(duì)應(yīng)中斷源0~31,ISER[1]對(duì)應(yīng)中斷源32~63,STM32只有60個(gè)中斷源,所以沒(méi)有ISER[2:7]。
參考STM32技術(shù)參考手冊(cè)中的中斷向量表,中斷源的位置為:
位置0 - WWDG = Window Watchdog interrupt
位置1 - PVD = PVD through EXTI Line detection interrupt
位置2 - TAMPER = Tamper interrupt
......
位置58 - DMA2_Channel3 = DMA2 Channel3 global interrupt
位置59 - DMA2_Channel4_5 = DMA2 Channel4 and DMA2 Channel5 global interrupts
2)、系統(tǒng)控制寄存器組
STM32的固件庫(kù)中有如下定義:
typedef struct
{
vuc32 CPUID;
vu32 ICSR;
vu32 VTOR;
vu32 AIRCR;
vu32 SCR;
vu32 CCR;
vu32 SHPR[3];
vu32 SHCSR;
vu32 CFSR;
vu32 HFSR;
vu32 DFSR;
vu32 MMFAR;
vu32 BFAR;
vu32 AFSR;
} SCB_TypeDef; /* System Control Block Structure */
它們對(duì)應(yīng)ARM手冊(cè)中的名稱(chēng)為
CPUID = CPUID Base Register
ICSR = Interrupt Control State Register
VTOR = Vector Table Offset Register
AIRCR = Application Interrupt/Reset Control Register
SCR = System Control Register
CCR = Configuration Control Register
SHPR = System Handlers Priority Register
SHCSR = System Handler Control and State Register
CFSR = Configurable Fault Status Registers
HFSR = Hard Fault Status Register
DFSR = Debug Fault Status Register
MMFAR = Mem Manage Address Register
BFAR = Bus Fault Address Register
AFSR = Auxiliary Fault Status Register
3)、系統(tǒng)時(shí)鐘寄存器組
STM32的固件庫(kù)中有如下定義:
typedef struct
{
vu32 CTRL;
vu32 LOAD;
vu32 VAL;
vuc32 CALIB;
} SysTick_TypeDef;
它們對(duì)應(yīng)ARM手冊(cè)中的名稱(chēng)為
CTRL = SysTick Control and Status Register
LOAD = SysTick Reload Value Register
VAL = SysTick Current Value Register
CALIB = SysTick Calibration Value Register