STM32中断相关知识总结
一:中断是什么?
中断是指处理器运行过程中,出现某些意外情况,CPU能自动停止正在运行的程序并转入处理新情况的程序(中断服务函数),处理完毕后又返回原被暂停的程序继续运行。
CM3和CM7 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256级的可编程中断设置。但 STM32 并没有使用 CM3或CM7 内核的全部东西,而是只用了它的一部分。STM32F1系列有 84 个中断,包括 16 个内核中断和 68 个可屏蔽中断,STM32F767xx总共有118个中断,包括10个内核中断和108个可屏蔽中断,他们都具有16级可编程的中断优先级。我们经常使用的一般是它们的可屏蔽中断。
二:什么是可屏蔽中断和不可屏蔽中断?
1:可由程序控制其屏蔽的中断称为可屏蔽中断。
2:不能由程序控制其屏蔽,处理机一定要立即处理的中断称为非屏蔽中断或不可屏蔽中断。
不可屏蔽中断主要用于断电、电源故障等必须立即处理的情况
三:内核中断和外部中断
STM32的内核中断
STM32的外部中断
四:什么是中断优先级
在实际系统中,常常遇到多个中断源同时请求中断的情况,这时CPU必须确定首先为哪一个中断源服务,以及服务的次序。解决的方法是中断优先排队,即根据中断源请求的轻重缓急,排好中断处理的优先次序即优先级( Priority ),又称优先权,先响应优先级最高的中断请求。另外,当CPU正在处理某一中断时,要能响应另一个优先级更高的中断请求,而屏蔽掉同级或较低级的中断请求,形成中断嵌套。优先级的数值越小,则优先级越高。CM3 支持中断嵌套,使得高优先级异常会抢占(preempt)低优先级异常。
CM3 支持 3 个固定的高优先级和多达 256 级的可编程优先级,为了使抢占机能变得更可控,CM3 还把 256 级优先级按位分成高低两段,分别是抢占优先级和亚优先级,使得其最多支持 128级抢占,因为至少有一个位代表亚优先级。但是,绝大多数 CM3 芯片都会精简设计,以致实际上支持的优先级数会更少,如 8 级,16 级,32 级等。它们在设计时会裁掉表达优先级的几个低端有效位,以达到减少优先级数的目的。
NVIC 中有一个寄存器是“应用程序中断及复位控制寄存器”(ARICR),它里面有一个位段名为“优先级组”。该位段的值对每一个优先级可配置的异常都有影响——把其优先级分为个位段:MSB 所在的位段(左边的)对应抢占优先级,而 LSB 所在的位段(右边的)对应亚优先级,如表 7-4 所示
实际在使用