NVIC中断优先级一、简介: CM4内核可以支持256个中断,包括16个内核中断和240个外部中断,256级的可编程中断设置。对于STM32F4没有用到CM4内核的所有东西,只是用到了一部分,对于STM32F40和41系列共有92个中断,其中有10个内核中断和82个可屏蔽中断,常用的为82个可屏蔽中断。 二、相关寄存器: ISER[8]—中断使能寄存器组,用来使能中断,每一位控制一个中断,由于上面已经说明了控制82个可屏蔽的中断,因此利用ISER[0~2]这三个32位寄存器就够了。一下的几个寄存器同理。 ICER[8]—中断除能寄存器组,用来消除中断。 ISPR[8]—中断挂起控制寄存器组,用来挂起中断。 ICPR[8]—中断解挂控制寄存器组,用来解除挂起。 IABR[8]—中断激活标志寄存器组,对应位如果为1则表示中断正在被执行。 IP[240]—中断优先级控制寄存器组,它是用来设置中断优先级的。我们只用到了IP[0]~IP[81],每个寄存器只用到了高4位,这4位又用来设置抢占优先级和响应优先级(有关抢占优先级和响应优先级后面会介绍到),而对于抢占优先级和响应优先级各占多少位则由AIRCR寄存器控制,相关设置如下图所示: 关于抢占优先级和响应优先级的理解,可以将它们简单的理解为两个级别,抢占优先级的级别要比响应优先级的级别高,简单的理解为一个为长辈的一个为晚辈的,晚辈要让着长辈,因此抢占优先级的中断可以打断响应优先级的中断,而同级别的中断就得有个先来后到的了,先来的先执行。 三、相关库函数应用 1、中断优先级分组函数:void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup),用来设置设置中断优先级的分组,就是设置AIRCR寄存器的值。 2、中断初始化:NVIC_Init(),用来设置一个中断的相关参数,包括中断通道、抢占优先级、响应优先级、通道使能。
|