STM32中断系统
中断是处理器处理外部突发事件的一个重要技术。它能使处理器在运行过程中对外部事件发出的中断请求及时地进行处理,处理完成后又立即返回断点,继续进行处理器原来的工作。引起中断的原因或者说发出中断请求的来源叫做中断源。最常见的一类中断是外部中断。
外部中断一般是由计算机外设发出的中断请指求,如:键盘中断、打印机中断、定时器中断等。外部中断是可以屏蔽的中断,也就是说,利用中断控制器可以屏蔽这些外部设备的中断请求。
1NVIC内嵌向量中断控制器
NVIC(Nested Vectored Interrupt Controller)称之为“内嵌向量中断控制器”,提供中断控制器,用于总体管理异常。NVIC和处理器内核紧密相连。
NVIC中断控制器的作用:
1.支持中断嵌套
2.支持向量中断
3.自动保存和恢复处理器状态
4.动态改变优先级
5.简化的和确定的中断时间
6.屏蔽中断
中断控制框架
在处理器中,中断是一个过程,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中止当前程序的执行,转而去为处理紧急的事件,待处理完毕后再返回被打断的程序处继续往下执行。
中断在计算机多任务处理,尤其是实时系统中尤为重要。比如uCOS,FreeRTOS等。
中断能提高CPU的执行效率,同时能对突发事件做出实时处理。
实现程序的并行化,实现嵌入式系统中的进程切换。
中断优先级
优先级分组由内核SCB的应用程序及复位中断控制器AIRCR寄存器的PRIGROUP[10:8]位决定。
Cortex-M4总共分为5组:
优先级分组一般只设置一次(防止优先级混乱),多次设置以最后一次为准
在 NVIC 有一个专门的寄存器:中断优先级寄存器 NVIC_IPRx(在Cortex-M4中,x=0...240)用来配置外部中断的优先级, IPR 宽度为 8bits,原则上每个外部中断可配置的优先级为 0~255,数值越小,优先级越高。但是绝大多数 CM4 芯片都会精简设计,以致实际上支持的优先级数减少,在 Cortex-M4中,只使用了高 4bit,如下所示:
其中优先级,又被分组成抢占优先级(Pre)和响应优先级(Sub),值越小优先级越高。
1.高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断。
2.抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。
3.抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。
4.抢占优先级和响应优先级相同时,自然优先级(中断向量表序号)越高的先执行。
中断嵌套
STM32中断有两个优先级,抢占式优先级和响应优先级。高抢占式优先级的中断可以在低抢占式优先级中断的处理过程中被响应,这被称为中断嵌套。
上图中,B中断的抢占式优先级更高,因此它可以嵌套在A中断中执行。A 中断必须等待 B 中断的执行完成才能继续执行。优先级值越小表示优先级别越高。