STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”“副优先级”“从优先级”“子优先级”,每个中断源都需要被指定这两种优先级。
抢占优先级高的中断可以打断抢占优先级低的中断(中断的嵌套),子优先级不具备这个能力。但若抢占优先级相同的两个中断同时挂起时,会先响应子优先级高的中断。
Cortex-M3在实现这两种优先级时,提供一种分组机制来分配抢占优先级和子优先级的数量。在STM32F1中指定中断优先级的寄存器位有4位,这4个寄存器位的分组方式如下所述。
第0组:所有4位用于指定响应优先级。
第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级。
第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级。
第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级。
第4组:所有4位用于指定抢占式优先级。
抢占式优先级与响应优先级分配如表4.2所示。
表4.2 抢占式优先级与响应优先级分配表(www.daowen.com)
注意:不同组但级别相同的抢占式优先级,优先顺序是组别号越低的优先级越高。
常用的NVIC库函数如表4.3所示。
表4.3 常用的NVIC库函数
NVIC初始化结构体为NVIC_InitTypeDef,NVIC_InitTypeDef结构体成员用于设置外部中断优先级参数,并由外部中断初始化配置函数NVIC_Init()调用。这些设定参数将会设置外设相应的寄存器,达到配置外部中断优先级的目的。初始化结构体定义在misc.h文件中,初始化库函数定义在misc.c文件中,编程时我们可以参考这两个文件的注释及《STM32固件库使用手册》来使用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。