今天学习了中断(以STM32为例)
1.中断优先级:抢占优先级(组优先级)、响应优先级(子优先级)
抢占优先级:可以被中断嵌套。也就是在一个中断发生的时候,另一个抢占优先级比此中断级别高的中断可以打断正在进行的中断,直到更高优先级的中断执行完毕之后,才会返回来继续执行这个被打断的中断
响应优先级:不可以被中断嵌套。也就是说在多个中断同时发生的时候,只能够优先相应较高优先级的中断,并且如果在中断过程中有更高优先级中断发生的时候,正在进行的中断也不能够被打断。
2.NVIC:Nested vectored interrupt controller :可嵌套向量中断控制器
82个可屏蔽中断 ##不包括内核的16个中断
16个可编程优先级 ##适用于全部中断
低延迟异常和中断处理
电源管理控制
系统控制寄存器的实现
NVIC与处理器内核接口紧密耦合, 实现了高效快速的中断响应。所有的中断,包括内核异常都被 NVIC 所管理.
3.中断向量表
中断向量表在STM32F4XX启动文件里面就可以看出来
4.EXTI(External interrupt/event controller) 外部中断/事件控制器
在每个中断/事件线都有独立的触发和屏蔽功能
每个中断线有专用的状态标志位
可产生高达 23 个软件事件/中断请求
以比APB2时钟周期更短的脉冲宽度检测外部信号
5.中断与事件配置
(1) 硬件中断选择
配置 23 中断线的屏蔽位 (EXTI_IMR)
配置中断线的触发选择位 (EXTI_RTSR and EXTI_FTSR)
配置控制 NVIC IRQ 通道的使能与屏蔽位来使来自 23 线的一个中断可以被正确的应答,NVIC IRQ 被映射到外部中断控制器(EXTI)
(2)硬件事件选择
配置 23 事件线的屏蔽位 (EXTI_EMR)
配置事件线的触发选择位 (EXTI_RTSR and EXTI_FTSR)
(3)软件 中断/事件 选择
23 线可以被配置为软件 中断/事件 线。下面的操作步骤可以产生一个软件中断.
配置 23 事件/中断 线的屏蔽位 (EXTI_IMR, EXTI_EMR)
设置软件中断寄存器的应答位 (EXTI_SWIER)
6.外部 中断/事件 映射
STM32F407ZG 的 140 个 GPIO 引脚都与一个外部中断线相连
上述一共用到了16根 EXTI 线,其余 7 根 EXTI 线的连接使用如下:
EXTI 16 连接到 PVD 输出(PVD:掉电检测)
EXTI 17 连接到 RTC Alarm 事件
EXTI 18 连接到 USB OTG FS Wakeup 事件
EXTI 19 连接到 Ethernet Wakeup 事件
EXTI 20 连接到 USB OTG HS (configured in FS) Wakeup 事件
EXTI 21 连接到 RTC Tamper and TimeStamp 事件
EXTI 22 连接到 RTC Wakeup 事件