中断:在主程序运行过程中,出现了特定事件,使得CPU暂停当前正在运行的程序,转而去处理这个事件,等这个事件处理完成之后,CPU再回到刚才被打断的位置继续处理,这就是中断。
中断源:打断CPU执行的特定事件
断点:被中断源打断的位置
中断处理程序:c处理特定事件的过程
中断嵌套:正在执行中断程序的时候,这个时候有可能被另外一个中断源给中断,CPU转而去执行另外一个中断源的中断处理程序
中断源可以是外部的,也可以是内部的。外部的叫外部中断源,内部的叫内部中断源(有时候也叫异常)。
中断优先级:中断B能否打断中断A,要看他们的优先级,优先级高的可以打断优先级低的,优先级低的无法打断优先级高的。
*一般(内部中断大于外部中断)
STM32的中断
Cortext-M3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。
一般情况下,芯片厂商会对Cortex-M3的中断进行裁剪。
STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。
STM32F103系列70个中断(咱们目前使用的芯片)有10个内核中断和60个可编程的外部中断。
中断体系架构:
NVIC嵌套向量中断控制器
NVIC(Nested vectored interrupt controller嵌套向量中断控制器)和处理器核的接口紧密相连,可以实现低延迟和高效的中断处理。嵌套向量中断控制器管理着包括内核异常、外部中断等所有中断
每一个外部中断都可以被使能或者禁止,并且可以被设置为挂起状态或者清除状态。处理器的中断可以是电平形式,也可以是脉冲形式的,这样中断控制器就可以处理任何中断源。
16个IO的中断与PVD(电源电压检测)、RTC(实时时钟)、USB、以太网检测这20个外部中断会通过EXTI来控制,然后交给NVIC。其他中断都是直接交给NVIC来处理。
中断优先级:
NVIC用4个位来控制优先级,值小的优先级高。把优先级分为两种:抢占优先级和响应优先级。
规则:
优先级值越小,优先级越高
不设置优先级,则默认优先级为0
先比较抢占优先级。抢占优先级高的可以打断抢占优先级低的。
抢占优先级一样,再比较响应优先级。但是响应优先级不会导致中断嵌套。
抢占优先级一样的同时挂起,则优先处理响应抢占优先级高的。
挂起的优先级(抢占和响应)都一样,则查找中断向量表,值小的先响应。
VIC对优先级分了5组,在程序中先对中断进行分组,而且分组只能分一次,若多次分,只有最后一次生效。
分组 | 抢占优先级 | 响应优先级 |
0 | 4位 取值范围:0-15 | 0位 取值范围:0 |
1 | 3位 取值范围:0-7 | 1位 取值范围:0-1 |
2 | 2位 取值范围:0-3 | 2位 取值范围:0-3 |
3 | 1位 取值范围:0-1 | 3位 取值范围:0-7 |
4 | 0位 取值范围:0 | 4位 取值范围:0-15 |
外部中断控制(EXTI):