中断全攻略:单片机优先级与 NVIC 详解(超形象解释)

目录

中断

中断基本概念

中断优先级概念

单片机中断表示与处理流程

NVIC内部结构图

抢占优先级与中断嵌套

子优先级与中断排队

练习题


中断

中断基本概念

中断的定义:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行。单板机应对突发事件的方式。以人在生活中如图书馆读书时拍蚊子、操场跑步时系鞋带、玩游戏时取快递等例子,说明人处理突发事件是暂停手中工作去处理,处理完再回头做原工作,单片机处理中断方式与之相同。

中断的优先级 :当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源。

中断的嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。

  • 常规程序:一般在main方法的while循环里的代码,会循环往复执行。

  • 中断响应函数:编程人员提前准备的一段代码,中断发生时单片机自动调用,对中断进行处理,每发生一次中断调用一次。

  • 串口控制板载LED实例

  • 程序设想:使用单板机串口连接电脑,通过电脑串口调试助手控制最小系统板上板载LED闪灯速度,发送0则慢闪,发送1则正常闪,发送2则快闪。

  • 分开编程:闪灯程序在main方法while循环里,先点亮LED延迟、再熄灭LED延迟实现闪烁;串口数据接收程序在main方法while循环里,先查RSNE标志位,标志位为1时从接收数据寄存器读出数据并根据数据改变LED闪动速度。

  • 合并问题:直接将两段程序合并在main方法while循环里不能正常执行,因闪灯时不能及时接收串口数据,会造成数据丢失。例如电脑发送五个字节数据,若不及时读取,后发送的数据会覆盖前面的数据。

  • 中断解决:利用unit模块内部结构框图中RNE标注位产生中断,当RSNE标志位从0变1即接收数据寄存器有数据时产生中断。将闪灯程序写在main方法while循环里,串口接收数据代码写在中断响应函数里,有中断时及时读取处理数据,使程序执行更合理 。

生活中的举例:

常规程序:一般在main方法的while循环里的代码,会循环往复执行。

中断响应函数:编程人员提前准备的一段代码,中断发生时单片机自动调用,对中断进行处理,每发生一次中断调用一次。

  • 串口控制板载LED实例

    • 程序设想:使用单板机串口连接电脑,通过电脑串口调试助手控制最小系统板上板载LED闪灯速度,发送0则慢闪,发送1则正常闪,发送2则快闪。

    • 合并编程:直接将两段程序合并在main方法while循环里不能正常执行,因闪灯时不能及时接收串口数据,会造成数据丢失。例如电脑发送五个字节数据,若不及时读取,后发送的数据会覆盖前面的数据。

    • 中断解决:利用UART模块内部结构框图中RNE标注位产生中断,当RSNE标志位从0变1即接收数据寄存器有数据时产生中断。将闪灯程序写在main方法while循环里,串口接收数据代码写在中断响应函数里,有中断时及时读取处理数据,使程序执行更合理 。
    • UART模块:

      只有RxNE数据位为1的时候,就说明数据接收寄存器中有数据,这时候才可以进行读取数据。

中断优先级概念

  • 生活例子引入:以大夫看门诊为例,第一个例子中病人 3 比病人 2 急,先看病人 3;第二个例子中急诊病人 5 打断给病人 4 看病的过程,先看病人 5。说明突发事件有轻重缓急。

  • 概念定义:中断优先级是用数字形式表示的中断的紧急程度。

单片机中断表示与处理流程

  • 中断结构框图:由片上外设、NVIC、中断时序图和中断向量表组成。

  • 片上外设:芯片内部模块,如 GPIO、USART 等模块,每个模块可产生一个或多个中断。

  • 中断产生与管理:片上外设产生中断,NVIC 负责管理中断(管理员),根据优先级排队,CPU 从中断向量表找中断响应函数执行。

  • 优先级表示:NVIC 模块中用四个比特位表示中断优先级,中间竖线分组,有分组 0 - 4 五个选项,不同分组抢占优先级和子优先级分配不同。

UART模块

NVIC内部结构图

有4个bit位用来记录优先级的高低,有中断优先级分组,这个线可以左右移动,进行抢占优先级和子优先级的划分,可以分为5组,如图所示。

假设中断都为1011,采用这几种中断分组时:

分组0: 抢占优先级 0 ,子优先级 11

分组1: 抢占优先级 1 ,子优先级 3

分组2: 抢占优先级 2 ,子优先级 3

分组3: 抢占优先级 5 ,子优先级 1

分组4: 抢占优先级 11 ,子优先级 0

抢占优先级的越小,优先级越高,如果抢占优先级高于正在执行的抢占优先级,就会形成嵌套中断,

如果抢占优先级的等级相同,就比较4bit位的二进制,优先级数字越小,优先级越高,如果优先级数字相同,就是先来后到。

抢占优先级与中断嵌套

  • 中断嵌套概念:当前正在执行的中断被更高优先级的中断打断。

  • 发生条件:新中断的抢占优先级比正在执行的中断的抢占优先级更高时发生中断嵌套。

  • 示例说明:以中断优先级分组 2 为例,有四个中断,通过比较抢占优先级判断是否发生中断嵌套。

采用分组二,进行分析

(1)中断1和中断2的抢占优先级相同,不会形成优先级嵌套。

(2)中断3抢占优先级高于中断1的抢占优先级,会形成优先级嵌套,先执行中断3然后再执行中断1。

(3)中断1抢占优先级高于中断4的抢占优先级,不会形成优先级嵌套,等中断1执行完之后再执行中断4。

子优先级与中断排队

  • 中断排队概念:当几个中断优先级相仿时,等待前一个中断执行完成,再处理新中断。

  • 排队原则:新中断抢占优先级不高于原中断则不形成嵌套;多个中断时,优先级高的排在前面;优先级相同时,按先来后到原则排队。

  • 举例:以高铁检票为例,说明排队过程。

练习题

  • 题目设定:选定中断优先级分组 2,执行常规程序时来了中断一,后续又有多个中断。

  • 分析过程:分析各中断是否形成嵌套及排队顺序,得出完整波形图。

相关推荐
森焱森17 分钟前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
白鱼不小白21 分钟前
stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
stm32·单片机·嵌入式硬件
S,D1 小时前
MCU引脚的漏电流、灌电流、拉电流区别是什么
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·硬件工程
芯岭技术4 小时前
PY32F002A单片机 低成本控制器解决方案,提供多种封装
单片机·嵌入式硬件
youmdt4 小时前
Arduino IDE ESP8266连接0.96寸SSD1306 IIC单色屏显示北京时间
单片机·嵌入式硬件
嘿·嘘5 小时前
第七章 STM32内部FLASH读写
stm32·单片机·嵌入式硬件
Meraki.Zhang5 小时前
【STM32实践篇】:I2C驱动编写
stm32·单片机·iic·驱动·i2c
几个几个n7 小时前
STM32-第二节-GPIO输入(按键,传感器)
单片机·嵌入式硬件
Despacito0o10 小时前
ESP32-s3摄像头驱动开发实战:从零搭建实时图像显示系统
人工智能·驱动开发·嵌入式硬件·音视频·嵌入式实时数据库
门思科技10 小时前
设计可靠 LoRaWAN 设备时需要考虑的关键能力
运维·服务器·网络·嵌入式硬件·物联网