EXTI和NVIC初探

NVIC

Nested vectored interrupt controller。嵌套向量中断控制器。它是STM32 core peripherals的其中之一,其余为system timer, system control block和memory protect unit。

从NVIC的vector table中看出,NVIC type按照优先级从高到低的顺序,可以分为Reset, NonMaskable Interrupt(NMI), Hard Fault, Memory management fault, Usage Fault, ..., SysTick, Interrupt(IRQ)。整理表格如下。

由此可见,EXTI是NVIC中的一个成员。NVIC中,IRQ分为level-sensitive和pulse两种。前者的中断需要相应外设来取消,因此外设可以控制处理器重复执行相应的ISR;后者由处理器时钟的上升沿同步采集,因此需要外设将中断保持至少一个时钟周期。对于软硬件控制中断挂起和取消中断信号的条件等,参见 4.3.9 Level-sensitive and pulse interrupts。

寄存器

NVIC IRQ的主要寄存器为set enable, clear enable, set pending, clear pending, active bit,每种均有三个元素,分别控制第0~31,32~63,64~67号IRQ;以及设置优先级和软件中断的寄存器。

 

EXTI

EXTI可以检测20个事件或中断,对应关系如下所示。

寄存器

EXTI的寄存器主要有:interrupt mask, event mask, rising trigger selection, falling trigger selection, software interrupt event, pending。通过对EXTI寄存器的操作,可实现 硬件/软件 中断/事件 的设置,分别需要改写的寄存器参见 9.2.4 Function description。

 

将GPIO作为中断的处理流程

1. GPIO初始化。包括外设时钟,管脚,速度,模式等。

2. 将GPIO脚连接到EXTI line。这是通过写AFIO下的EXTICR寄存器实现的。

3. EXTI初始化,使能该条EXTI line,并做上升下降沿设置。通过写EXTI下IMR, EMR, PTSR, FTSR实现。

4. NVIC初始化。包括优先级的计算和使能。

当中断到来,ISR做相应处理后:

1. 清除GPIO寄存器中的信号量。

2. 清除EXTI上的信号量。

你可能感兴趣的:(stm32)