十四、中断原理介绍
1. 什么是中断
灵活的使用系统中断可以大大提高单片机对随机事件的实时处理能力,进而提高单片机的工作效率。那什么是中断呢?这里举一个例子,比如我们正在敲代码,突然有一个电话打过来,这时我们停止敲代码转而去接电话,然后在电话聊完事情之后继续敲代码。这里面的电话就相当于一个中断,打断我们当前做的事情,接电话聊事情就相当于中断需要去执行的事情,也就是中断服务程序。
2. 外部中断
EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断MCU主程序,使CPU执行EXTI对应的中断程序。
- 支持的触发方式:上升沿/下降沿/双边沿(上升沿或下降沿)/软件(/代码)触发
- 支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断
- 通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒
- 触发响应方式:中断响应/事件响应
3. 中断触发源
STM32F103 的 19 个外部中断
- EXTI线 0~15:对应外部 IO 口的输入中断。
- EXTI线 16 连接到PVD输出
- EXTI线 17 连接到RTC闹钟事件
- EXTI线 18 连接到USB唤醒事件
- EXTI线 19 连接到以太网唤醒事件(只适用于互联型产品)
通过AFIO_EXTICRx配置GPIO线上的外部中断/事件,必须先使能AFIO时钟。
4. 中断事件
除了中断,EXTI还可以向处理器提供事件信号。芯片内部有一个唤醒中断控制器(WIC),用户可以让处理器和NVIC进入功耗极低的省电模式,由WIC来识别中断和事件以及判断优先级。当某些预期的事件发生时,EXTI能唤醒处理器及整个系统。
5. 中断优先级
每一个中断都有4位可配置的优先级位,可以通过分组设置抢占优先级和响应优先级的位数。
所有可编程的中断都需要指定抢占优先级和响应优先级,抢占优先级决定是否可以产生中断嵌套,响应优先级决定中断响应顺序,若两种优先级一样则看中断在中断向量表中的位置,位置越靠前越先响应。抢占优先级高(值小)的中断可以中断抢占优先级低(值大)的中断处理函数。当两个中断的抢占优先级相同时,即这两个中断没有嵌套关系,当一个中断到来后,若此时CPU正在处理另一个中断,则后到来的中断就要等前一个中断处理函数处理完毕后才能被处理,当两个中断同时到达,则中断控制器会根据它们的响应优先级决定先处理哪个。
通常中断优先级分组只设置一次,它针对的是系统中所有的中断。后续设置某个中断的中断优先级时,只需要设置在这个分组内的抢占优先级和响应优先级。