十三、中断原理介绍
中断基础知识
什么是中断
灵活的使用系统中断可以大大提高单片机对随机事件的实时处理能力,进而提高单片机的工作效率。那什么是中断呢?这里举一个例子,比如我们正在敲代码,突然有一个电话打过来,这时我们停止敲代码转而去接电话,然后在电话聊完事情之后继续敲代码。这里面的电话就相当于一个中断,打断我们当前做的事情,接电话聊事情就相当于中断需要去执行的事情,也就是中断服务程序。
外部中断
EXTI(中断/事件控制器)包括 23 个相互独立的边沿检测电路并且能够向处理器内核产生中断请求或唤醒事件。EXTI 有三种触发类型:上升沿触发、下降沿触发和任意沿触发。EXTI 中的每一个边沿检测电路都可以独立配置和屏蔽。每一个中断都有 4 位中断优先级配置位,可提供 16 个中断优先等级。
中断触发源
- STM32F407 的 23 个外部中断为:
- EXTI 线 0~15:对应外部 IO 口的输入中断。
- EXTI 线 16:连接到 PVD 输出。
- EXTI 线 17:连接到 RTC 闹钟事件。
- EXTI 线 18:连接到 USB OTG FS 唤醒事件。
- EXTI 线 19:连接到以太网唤醒事件。
- EXTI 线 20:连接到 USB OTG HS(在 FS 中配置)唤醒事件。
- EXTI 线 21:连接到 RTC 入侵和时间戳事件。
- EXTI 线 22:连接到 RTC 唤醒事件。
中断事件
除了中断,EXTI 还可以向处理器提供事件信号。芯片内部有一个唤醒中断控制器(WIC),用户可以让处理器和 NVIC 进入功耗极低的省电模式,由 WIC 来识别中断和事件以及判断优先级。当某些预期的事件发生时,EXTI 能唤醒处理器及整个系统。
中断优先级
每一个中断都有 4 位可配置的优先级位,可以通过分组设置抢占优先级和响应优先级的位数。
所有可编程的中断都需要指定抢占优先级和响应优先级,抢占优先级决定是否可以产生中断嵌套,响应优先级决定中断响应顺序,若两种优先级一样则看中断在中断向量表中的位置,位置越靠前越先响应。抢占优先级高(值小)的中断可以中断抢占优先级低(值大)的中断处理函数。当两个中断的抢占优先级相同时,即这两个中断没有嵌套关系,当一个中断到来后,若此时 CPU 正在处理另一个中断,则后到来的中断就要等前一个中断处理函数处理完毕后才能被处理,当两个中断同时到达,则中断控制器会根据它们的响应优先级决定先处理哪个。
通常中断优先级分组只设置一次,它针对的是系统中所有的中断。后续设置某个中断的中断优先级时,只需要设置在这个分组内的抢占优先级和响应优先级。