STM32 中斷學習Interrupt/Evens
1、NVIC的優(yōu)先級概念
占先式優(yōu)先級 (pre-emption priority):
高占先式優(yōu)先級的中斷事件會打斷當前的主程序/中斷程序運行— —搶斷式優(yōu)先響應,俗稱中斷嵌套。
副優(yōu)先級(subpriority):
在占先式優(yōu)先級相同的情況下,高副優(yōu)先級的中斷優(yōu)先被響應;
在占先式優(yōu)先級相同的情況下,如果有低副優(yōu)先級中斷正在執(zhí)行, 高副優(yōu)先級的中斷要等待已被響應的低副優(yōu)先級中斷執(zhí)行結束后才 能得到響應——非搶斷式響應(不能嵌套)。
2、判斷中斷是否會被響應的依據
首先是占先式優(yōu)先級,其次是副優(yōu)先級;
占先式優(yōu)先級決定是否會有中斷嵌套;
Reset、NMI、Hard Fault 優(yōu)先級為負(高于普通中斷優(yōu)先級)且不可調整。
3、STM32中用到的Cortex-M3寄存器說明
在STM32中用到了Cortex-M3定義的三組寄存器,有關這三組寄存器的說明不在STM32的技術手冊中,需要參考ARM公司發(fā)布的Cortex-M3 Technical Reference Manual (r2p0)。
在STM32的固件庫中定義了三個結構體與這三個寄存器組相對應,這三個結構體與ARM手冊中寄存器的對應關系如下:
1)、NVIC寄存器組
STM32的固件庫中有如下定義:
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;
它們對應ARM手冊中的名稱為
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
每個寄存器有240位,以Interrupt Set-Enable Registers說明,ISER[0]對應中斷源0~31,ISER[1]對應中斷源32~63,STM32只有60個中斷源,所以沒有ISER[2:7]。
參考STM32技術參考手冊中的中斷向量表,中斷源的位置為:
位置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)、系統控制寄存器組
STM32的固件庫中有如下定義:
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 */
它們對應ARM手冊中的名稱為
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)、系統時鐘寄存器組
STM32的固件庫中有如下定義:
typedef struct
{
vu32 CTRL;
vu32 LOAD;
vu32 VAL;
vuc32 CALIB;
} SysTick_TypeDef;
它們對應ARM手冊中的名稱為
CTRL = SysTick Control and Status Register
LOAD = SysTick Reload Value Register
VAL = SysTick Current Value Register
CALIB = SysTick Calibration Value Register