STM32 NVIC嵌套向量中斷控制器函數(shù)分析
IMR:中斷屏蔽寄存器Interrupt Mask Register 32位寄存器前19位有效
EMR: 事件屏蔽寄存器Eventmaskregister 32位寄存器前19位有效
RTST: 上升沿觸發(fā)選擇寄存器Rising edge trigger select register
FTSR:下降沿觸發(fā)選擇寄存器Falling edge trigger select register
SWIER:軟件中斷事件寄存器Software interrupt event register
PR: 掛起寄存器Pending Register
I/O口復(fù)用里的配置寄存器EXTICR 每個(gè)I/O口可以配置成中斷輸入
STM32 任何一個(gè)IO口都可以配置成中斷輸入口,但是IO口的數(shù)目遠(yuǎn)大于中斷線數(shù)(16個(gè))。于是STM32就這樣設(shè)計(jì),GPIOA~GPIOG的[15:0]分別對(duì)應(yīng)中斷線15~0。這樣每個(gè)中斷線對(duì)應(yīng)了最多7個(gè)IO口,以線0為例:它對(duì)應(yīng)了GPIOA.0、PIOB.0、GPIOC.0、GPIOD.0、 GPIOE.0、GPIOF.0、GPIOG.0。而中斷線每次只能連接到1個(gè)IO口上,這樣就需要EXTICR來決定對(duì)應(yīng)的中斷線配置到哪個(gè)GPIO上了。
EXTICR在AFIO的結(jié)構(gòu)體中定義如下
typedef struct
{
vu32 EVCR;
vu32 MAPR;
vu32 EXTICR[4];
} AFIO_TypeDef;EXTIRC寄存器總共4個(gè),因?yàn)榫幾g器的寄存器都是從0號(hào)開始的,所以EXTICR[0]---EXTICR[3]對(duì)應(yīng)
<
外部中斷配置函數(shù):
void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM)
{
u8 EXTADDR;
u8 EXTOFFSET;
EXTADDR=BITx/4; //得到中斷寄存器組編號(hào)
EXTOFFSET=(BITx%4)*4; //得到偏移量 具體哪個(gè)I/O口進(jìn)行設(shè)置
RCC->APB2ENR|=0x01; //使能復(fù)用I/O口
AFIO->EXTICR[EXTADDR]|=GPIOx<
注:
TRIM為觸發(fā)方式選擇變量; 0x01下降沿觸發(fā) 0x02 上升沿觸發(fā) 0x03任意電平觸發(fā).
評(píng)論