stm32 SCB->AIRCR 寄存器和中断优先级寄存器使用理解

参考:

Cortex M3权威指南(中文).pdf

STM32F4xx中文参考手册.pdf

STM32F4开发指南-寄存器版本_V1.1.pdf

https://blog.csdn.net/rng_uzi_/article/details/90762767

记住:抢占和响应的值越小级别越高。

首先stm32的中断有240个,中断优先级分两级抢占和响应。两种级别,规则如下,需要记住

高抢占可以打断低抢占

高响应不能打断低响应(同一抢占级,处理内部的优先级)

中断7:抢占:2响应:0

中断3:抢占:2响应:1

同抢占级别,同时发生中断,响应级别的高先执行,(不是打断)

中断6:抢占:3:响应0

上面例子中的中断 3 和中断 7 都可以打断中断 6 的中断。而中断 7 和中断 3 却不可以相互
打断!

 

设置抢占和响应级别

 

 SCB->AIRCR 寄存器和IP寄存器

首先两者联系,SCB->AIRCR 寄存器的10:8位bit,决定了,IP寄存器4:7bit的高四位的抢占与响应位的分配

读一读关于IP寄存器的描述,子优先级就是响应优先级

 

那么SCB->AIRCR 寄存器的10:8位bit怎么决定这个分配呢?

AIRCR 寄存器的10:8位,设置几位抢占,几位响应。举例如下

AIRCR寄存器8:10与IP寄存器4:7
 AIRCR寄存器8:10IP寄存器4:7 
0111抢占:0bit,响应:4bit 
1110抢占:1bit,响应:3bit 
2101抢占:2bit,响应:2bit 
3100抢占:3bit,响应:1bit 
4011抢占:4bit,响应:0bit 

 怎么理解这个表呢?

AIRCR寄存器8:10是111,表示7,即ip寄存器的第四位到第七位为止是响应级(从0开始),本来就ip寄存器的4:7bit,那4,5,6,7bit,都表示响应级。

AIRCR寄存器8:10是100,表示4,ip寄存器的第四位到第四位表示响应级。即一位表示响应级

实例代码  0x05FA0000 看上面图片表D13

 

  SCB->AIRCR = 0x05FA0000 | 0x400;  //  04h=0100b  中断优先级分组 抢占:响应=3:1

 

那么最多就是0:15级抢占,就是15个中断可相互打断,即011,没有响应级  ,4组

如果全是响应,那么哪个高,那个先发生,先执行哪个。即111,第七位以内都是响应级,4:7bit都表示,0组

举例:这是正点原子外部中断实验的优先级设置代码,两位的优先级,4,5,即101,第五位以内都是响应级

	MY_NVIC_Init(3,2,EXTI2_IRQn,2);		//抢占3,子优先级2,组2
	MY_NVIC_Init(2,2,EXTI3_IRQn,2);		//抢占2,子优先级2,组2	   
	MY_NVIC_Init(1,2,EXTI4_IRQn,2);		//抢占1,子优先级2,组2	   
	MY_NVIC_Init(0,2,EXTI0_IRQn,2);		//抢占0,子优先级2,组2	

这里设置为组2,即:AIRCR寄存器的8:10bit,101。则IP寄存器4:7bit,第6,7bit为设置抢占优先级,4,5bit设置响应优先级

那么就是,4级抢断,4种响应。所以所有中断的级别都没有超过2^2=4。只有0,1,2,3级。

 

应用:

  SCB->AIRCR = 0x05FA0000 | 0x400;  //中断优先级分组 抢占:响应=3:1

8,9,10bit,为100,ip寄存器高四位的4位是响应,5,6,7位是抢占

ip寄存器,8bit寄存器,只用了高四位,111抢占,1响应。

2^3=8级抢断,2级响应
    
  NVIC->IP[39] = 0xf0; //最低抢占优先级,最低响应优先级1111

39号中断,最高级中断,没有中断的能打断。

参考手册表49,查相应中断的位置。


 NVIC->ISER[1] |= (1<<(39-32)); //使能中断线39,也就是usart3中断

256个中断,每个ISER,32位寄存器,控制32个中断。需要8个ISER,即ISER[8]寄存器组。

39号中断,在ISER[1],32,33,34,335,36,37,38,39。第七位置一

39-32=7

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大U

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值