一直不明白NVIC->IP[x]该怎样设置

2019-07-20 01:03发布

如题:小弟看到USART的时候,例程里面是这样设置的:

SCB‐>AIRCR = 0x05FA0000 | 0x0400;

NVIC‐>IP[39] = 0xf0; //最低抢占优先级,最低响应优先级 1111

我就不明白为什么要这样设置,或者说这样设置抢占优先级与响应优先级是怎样分配的.第一句知道怎么回事,但是第二句就不会了,希望大家帮小弟解决~

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
正点原子
1楼-- · 2019-07-20 04:15
 精彩回答 2  元偷偷看……
正点原子
2楼-- · 2019-07-20 08:16
那就好说了,.看我们代码注释:
4,的话,说明4个位全是抢占优先级,不存在子优先级.
[mw_shl_code=c,true]//设置NVIC //NVIC_PreemptionPriority:抢占优先级 //NVIC_SubPriority :响应优先级 //NVIC_Channel :中断编号 //NVIC_Group :中断分组 0~4 //注意优先级不能超过设定的组的范围!否则会有意想不到的错误 //组划分: //组0:0位抢占优先级,4位响应优先级 //组1:1位抢占优先级,3位响应优先级 //组2:2位抢占优先级,2位响应优先级 //组3:3位抢占优先级,1位响应优先级 //组4:4位抢占优先级,0位响应优先级 //NVIC_SubPriority和NVIC_PreemptionPriority的原则是,数值越小,越优先 void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group) { u32 temp; MY_NVIC_PriorityGroupConfig(NVIC_Group);//设置分组 temp=NVIC_PreemptionPriority<<(4-NVIC_Group); temp|=NVIC_SubPriority&(0x0f>>NVIC_Group); temp&=0xf; //取低四位 NVIC->ISER[NVIC_Channel/32]|=(1<<NVIC_Channel%32);//使能中断位(要清除的话,相反操作就OK) NVIC->IP[NVIC_Channel]|=temp<<4; //设置响应优先级和抢断优先级 } [/mw_shl_code]
xuande
3楼-- · 2019-07-20 10:12

给你传本书,看 167 页,Interrupt Priority Registers 的描述。
这一部分,在STM32的手册上根本没有。



玉洋子
4楼-- · 2019-07-20 14:07
 精彩回答 2  元偷偷看……
玉洋子
5楼-- · 2019-07-20 18:21
回复【4楼】正点原子:
---------------------------------
原子哥,楼上的理解对吗?
正点原子
6楼-- · 2019-07-20 19:05
 精彩回答 2  元偷偷看……

一周热门 更多>