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

发布于:2025-05-21 ⋅ 阅读:(19) ⋅ 点赞:(0)

目录

中断

中断基本概念

中断优先级概念

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

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,执行常规程序时来了中断一,后续又有多个中断。

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

 


网站公告

今日签到

点亮在社区的每一天
去签到