Crotex-M3中断优先级分组
中断简介
中断是微控制器一个很常见的特性,中断由硬件产生,当中断产生以后CPU就会中断当前的流程转而去处理中断事务,Crotex-M3内核的MCU提供了一个用于中断管理的嵌套向量NVIC。
中断类型
Cortex‐M3 在内核水平上搭载了一个中断响应系统, 支持为数众多的系统异常和外部中
断。其中,编号为 1-15 的对应系统异常,大于等于 16 的则全是外部中断,支持240个IRQ(中断请求)。除了个别异常的优先级被定死外, 其它异常的优先级都是可编程的。
系统异常清单如下
外部中断清单如下
优先级分组定义
当多个中断来临时,处理器根据优先级来决定处理哪一个,优先级高的中断(优先级编号小)肯定时首先得到响应,优先级高的中断可以抢占优先级低的中断。
Cortex‐M3具有三个固定优先级,比如复位、NMI(不可屏蔽中断)、HardFault,这些优先级都是负数,优先级最高。还有256个可编程的优先级,最多128个抢占等级,但实际的优先级数量由生产厂商决定,STM32就只有16优先级。
STM32选用4位优先级表达式,如下表:
STM32根据抢占优先级数量,分为5组,分组情况如下:
NVIC_PriorityGroup_0:
包含4位亚优先级。
NVIC_PriorityGroup_1:
包含3位亚优先级,1位抢占优先级
NVIC_PriorityGroup_2:
包含2位亚优先级,2位抢占优先级
NVIC_PriorityGroup_3:
包含1位亚优先级,3位抢占优先级
NVIC_PriorityGroup_4:
包含4位抢占优先级
STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作’亚优先级’或’副优先级’,每个中断源都需要被指定这两种优先级。
具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套在低抢占式优先级的中断中。
当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。
总结:抢占式优先级>响应优先级>中断表中的排位顺序。