蓝桥杯【物联网】零基础到国奖之路:六. 中断
第一节 中断理论
举个例子:工作时电话响了,这时你会把手里的工作停下来,然后接电话,电话里的人安排你做一件事,这时你需要立刻去做,当你做完后继续之前被打断的工作,这个过程叫一次中断。
计算机系统中,中断指计算机CPU获知某些事,暂停正在执行的程序,转而去执行处理该事件的程序,当这段程序执行完后再执行之前的程序。整个过程称为中断处理,简称中断,而引起这一过程的事件称为中断事件。中断是计算机实现并发执行的关键,也是操作系统工作的根本。中断能提高CPU的效率,同时能对突发事件做出实时处理。实现程序的并行化,实现嵌入式系统进程之间的切换。
1,中断的作用
(1)速度匹配,提高机器系统效率。
(2)分时操作,维持系统可靠正常工作。
(3)实时响应,满足实时处理要求。
(4)提供故障现场处理手段,可靠性高。
2,中断和异常
Cortex M0+内核包含了中断系统框架。
CPU内核中断和核外外设中断。
内核中断也叫异常,异常通常是微处理器内部发生的,大多是软件引起的,比如非法指令,地址访问越界。
中断是微处理器外部发送的,一般是硬件引起的比如GPIO引脚电平变化,定时器溢出,串口接收中断等。中断指系统停止当前正在运行的程序和其他服务,可能接收了比自身优先级高的请求,或者人为设置中断,中断属于正常现象。
Reset,NMI,HardFault(硬件异常)的优先级固定为负的(最高)。剩下的都是可以通过修改NVIC寄存器调整优先级(不能为负)。NVIC作为内核里的外设,也是通过存储器映射的方式访问。
3,NVIC中断控制器
内核中有专门管理中断的外设NVIC(嵌套向量中断控制器),通过优先级控制中断的嵌套和调度来管理;NVIC是总的中断控制器,无论内核异常
还是外设的外部中断,都由NVIC统一管理。NVIC收到外设的中断请求,将其中断请求发送给内核,内核收到NVIC中断通知后,判断此时哪个中断发生,然后查找FLASH中断向量表去获得相应的中断处理函数。
(1)支持嵌套和向量中断;
(2)自动保存和恢复处理器状态;
(3)动态改变优先级;
(4)简化的和确定的中断时间;
(5)响应速度提高;
(6)标准化,统一管理。
4,中断的分类
中断按事件来源分类,可分为外部中断和内部中断。中断事件来源于内核内部称为内部中断,内核外部称为外部中断。进一步细分,外部中断可分为可屏蔽中断和不可屏蔽中断两种。内部中断按事件是否正常来划分可分为软中断和异常两种。外部中断又称硬件中断。计算机外部设备都能产生中断。
内部中断来自内核内部,软中断由软件主动发起的中断,常用于系统调用,任务切换等;异常则是指令执行期间CPU内部产生错误引起的。异常和不可屏蔽中断区别在于不可屏蔽中断发生的事件会导致处理器无法运行(断电、电池故障),而异常是直接影响系统正常运行的中断。
5,中断管理机制
(1)中断向量
CPU随时可能检测到中断信息,执行中断处理程序,中断处理程序必须一直存储在内存的某段空间中,中断处理程序在内存中的入口地址叫中断向量;要确定中断处理程序的入口地址,处理器利用了一种向量表机制;即中断向量,必须存储在对应的中断向量表表项中。使用向量表处理中断,处理器会从存储器的向量表中,自动定位中断的程序入口。从发生中断到中断的处理中间的时间被缩减。
(2)中断优先级
通过优先级配置寄存器进行配置,可编程优先级的实际数量由芯片设计厂商决定。
优先级数值越小,优先级越高。
抢占优先级,指打断其他中断的属性,因为具有这个属性会出现嵌套中断,等同于单片机中的常规中断。假设有两中断先后触发,在执行的中断抢占优先级如果没有后触发的中断抢占优先级更高,就先处理抢占优先级高的中断,抢占优先级高的可以打断抢占优先级低的中断。
响应优先级也叫亚优先级或子优先级,响应属性则应用在抢占属性相同的情况下,当两个中断向量的抢占优先级相同,如果两个中断同时抵达,先处理响应优先级高的中断。
高抢占优先级中断可在具有低抢占优先级的中断处理过程中被响应,即中断嵌套,或者高抢占式优先级中断可以嵌套在低抢占优先级的中断中。当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果在处理另外一个中断,这个后到来的中断要等前一个中断处理完后再处理。如果同时到达,则中断控制器根据响应优先级高低来决定处理哪个。如果两个优先级都相同,则根据中断向量表中的排位顺序决定先处理哪个,中断向量表排在前面的中断优先级高。
总结:抢占式优先级>响应式优先级>中断表中的排位顺序。
(3)中断嵌套
只有抢占式优先级能嵌套
(4)中断处理流程
概括为三步:进入中断、中断处理、退出中断。
进入中断:
(1)中断源发出请求,硬件判断处理器是否允许中断及该中断是否被屏蔽,若允许则当前运行的程序被打断;
(2)处理器将各寄存器压入堆栈保存,主要是PC,xPSR,RO-R3,R12,LR寄存器;
(3)根据中断向量号,到中断向量表找到中断服务程序的入口地址跳转执行。
中断处理:
(1)执行中断服务函数;
(2)遵守中断优先级和中断嵌套的执行规则。
退出中断:
(1)将保存在堆栈中的现场信息弹出到原来的寄存器中;
(2)返回被原先被中断的程序处继续执行
第二节 GPIO中断
1,CubeMX配置
2,添加中断代码
实现功能,按一次按键LED灯状态翻转一次。