NVIC EXTI PRIPHER
完成一次完整的中断请求并响应需要三/四种外设来共同完成
例如 将GPIO作为中断的处理流程
一个GPIO正在工作
1. GPIO初始化。包括外设时钟,管脚,速度,模式等。
某一时间点 GPIO发生变化(可能是电平由高到低或由低到高) 需要请求一次中断
2. 将GPIO脚连接到EXTI line。这是通过写AFIO下的EXTICR寄存器实现的。
(一共有20条EXTI通道几乎全部可由AFIO来配置 如GPIOA PIN_0 配置到EXTI0,另外也有几个需要外设本身来配置)
EXTI获取到外设的请求 同意开放此条线路 并开始为此次中断设置详细表单 如:
…是上升沿还是下降沿产生中断
…是产生中断还是产生时间
…是否同意该次请求
3. EXTI初始化,使能该条EXTI line,并做上升下降沿设置。通过写EXTI下IMR, EMR, PTSR, FTSR实现。
EXTI表单填写完毕 提交给NVIC NVIC对此次中断设置优先级 并且签名同意ISR做出相应处理
4. NVIC初始化。包括优先级的计算和使能。
ISR收到NVIC的命令 开始执行
当中断到来,ISR做相应处理后:
回归原来的状态,结束本次中断/事件
1. 清除GPIO寄存器中的信号量。
2. 清除EXTI上的信号量。
整个过程可以类比为公司上下级之间的一个流程:
一个小职工在工作期间想到了一些想法需要其他职工或高层去执行
所以他向CEO提出自己的想法,CEO会询问他想法的细节然后填写好请求表单
如果CEO同意那么他就会告知最高领导人
最高领导人会为这个想法设置优先级并且让目标职工开始执行
在STM32CUBEMAX中配置中断的过程:
1 将GPIO设置为GPIO_EXTI
2 设置中断触发条件
3 配置NVIC 配置优先级 使能中断
4 编写中断服务函数