05 中断
中断向量表 NVIC中断控制器 中断优先级
up的视频讲解: https://space.bilibili.com/1455872040
1 🌟中断简介

什么是中断呢?举一个生活中的例子:小时候放学回家 计划表上安排的是先写完作业然后吃饭,但今天写到一半的时候 你妈妈突然叫你吃饭了,很显然你会放下手上的作业 跑去吃饭 吃完饭你又会 回来 把剩下的作业接着写完
吃饭这件事并不是按我们计划安排好的进行,而是由吃饭这件事 主动打断 我们 ,让我们放下手上的作业 转而去处理吃饭这件更紧急的事情
这就是一个 中断的过程
2 🎛️NVIC中断控制器

NVIC(Nested Vectored Interrupt Controller): 嵌套向量中断控制器, 它就是整个中断的控制中心
-
芯片中的这些外设都会通过 专属的中断线连接NVIC
-
NVIC对每个中断线都有具体的
IRQ编号,当这些外设向NVIC发出中断请求的时候,NVIC首先会先对中断使能 以及 中断优先级进行判定 -
当决定打断CPU后 NVIC会把这个IRQ编号给到CPU,然后CPU就会去一个叫
中断向量表的地方,根据这个IRQ编号找到对应的向量 -
然后CPU拿到中断处理函数的地址 就会把它交给PC寄存器,接着PC指针就根据这个地址 找到中断处理函数的程序,然后 CPU就跳转过去处理中断函数里的指令
-
中断向量表里的向量也就是一个存储空间的地址 这个存储空间里存放的是中断处理函数的地址 -
所以说 我们在编译程序的时候,编译器就会把 中断处理函数的地址 放到这个向量对应的存储空间里面
3 📊中断优先级

STM32中断优先级基本概念:
-
抢占优先级(Preemption)
高抢占优先级可以打断正在执行的低抢占优先级中断,实现中断嵌套
-
响应优先级(Subpriority)
抢占优先级相同时,响应优先级高的先执行;不能互相打断
-
自然优先级
由芯片硬件固定,对应中断向量表中的中断号(IRQn),编号越小优先级越高,软件不可改
-
优先级数值规则 无论抢占还是响应,数值越小,优先级越高(0 最高)
-
同级仲裁规则 抢占优先级、响应优先级都相同时,自然优先级越高,先执行
4 4️⃣中断处理四步

- 中断请求
- 外设(按键、定时器、串口、ADC 等)满足触发条件后,向 NVIC 发送中断请求信号
- 中断响应
-
暂停当前正在执行的主程序
-
把当前寄存器、程序地址等现场数据
压栈保存 -
按照NVIC向量表地址, 跳转到对应中断的入口地址
- 中断处理
- CPU 执行专门用来处理该事件的代码,这段代码叫做中断服务函数。
- 中断返回
-
中断任务执行完毕后
-
将之前保存的寄存器、断点地址
出栈恢复 -
CPU 回到被打断的主程序位置,继续往下执行
-
中断(Interrupt):
-
中断是CPU打断开正在执行的程序, 去执行中断程序
-
进入NVIC,有相应的中断服务函数,需要CPU处理
-
-
事件(Event)
-
事件不强制打断CPU的运行, 只发出通知信号,一般用于外设之间的配合
-
不进入NVIC,仅用内部硬件自动控制,TIM,DMA,ADC等
-
✅中断配置的三个检查点
先有外设事件,再使能外设的中断请求,最后在NVIC允许该IRQ进入CPU。只设置优先级不会自动开启中断,只有NVIC开了、外设未开也不会进入回调。
优先级数值越小,通常越紧急;抢占优先级决定能否打断正在运行的中断,子优先级用于同抢占级的挂起请求排序。分组应在工程中统一,不能每初始化一个模块就换一套。
中断中只做必要工作,例如读取数据、清标志、登记事件。串口打印、屏幕刷新和长延时交回主循环。用计数器观察进入次数,比在回调里反复打印更不容易改变时序。