在 MDK 内,与NVIC 相关的寄存器,MDK 为其定义了如下的结构体:
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[15];
} NVIC_TypeDef;
STM32 的中断在这些寄存器的控制下有序的执行的。只有了解这些中断寄存器,才能了解STM32 的中断。下面简要介绍这几个寄存器:
ISER[2]:ISER 全称是:Interrupt Set-Enable Registers,这是一个中断使能寄存器组。上面说了 STM32F103 的可屏蔽中断只有 60 个,这里用了 2 个 32 位的寄存器,总共可以表示 64 个中断。 而 STM32F103 只用了其中的前 60 位。 ISER[0]的 bit0~bit31 分别对应中断 0~31。 ISER[1]的 bit0~27 对应中断 32~59;这样总共 60 个中断就分别对应上了。你要使能某个中断,必须设置相应的 ISER 位为 1,使该中断被使能(这里仅仅是使能,还要配合中断分组、屏蔽、IO 口映射等设置才算是一个完整的中断设置)。具体每一位对应哪个中断,请参考 stm32f10x_nvic..h 里面的第 36 行处。
ICER[2]:全称是:Interrupt Clear-Enable Registers,是一个中断除能寄存器组。该寄存器组与 ISER 的作用恰好相反,是用来清除某个中断的使能的。其对应位的功能&#x