历史上的今天
今天是:2024年12月09日(星期一)
2021年12月09日 | stm32NVIC中断优先管理
2021-12-09 来源:eefocus
这里简单介绍一下STM32的中断分组:STM32 将中断分为5个组,组为0~4,最多设置16个中断优先级。该分组的设置是由SCB->AIRCR寄存器的bit10~8,来定义的,具体分配关系表如下:

第0组 :所有4位用于指定响应优先级
第1组:最高1位用于指定抢占优先级,最低3位用于指定响应优先级
第2组:最高2位用于指定抢占优先级,最低两位用于指定响应优先级
第3组:最高3位用于指定抢占优先级,最低1位用于指定响应优先级
第4组:所有4位用于指定抢占优先级
通过这个表,我们就可以清楚的看到组0~4对应的配置关系,例如组设置3,那么此时所有的60个中断,每个中断的中断优先级寄存器的高4位中的最高3位
是抢占优先级,低1位是响应优先级,每个中断,你可以设置抢占优先级为0~7,响应优先级为1或0,抢占优先级别高于响应优先级,数值越小代表优先级越高,
而强占优先级相同时不可以打断低响应优先级的中断,
void MY_NVIC_PriorityGroupConfig(u8 NVIC_Group) //设置分组
{
u32 temp,temp1;
temp1=(~NVIC_Group)&0x07;//取后三位
temp1<<=8;
temp=SCB->AIRCR; //读取先前的设置
temp&=0X0000F8FF; //清空先前分组
temp|=0X05FA0000; //写入钥匙
temp|=temp1;
SCB->AIRCR=temp; //设置分组
}
/设置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;
u8 IPRADDR=NVIC_Channel/4; //每组只能存4个,得到组地址
u8 IPROFFSET=NVIC_Channel%4;//在组内的偏移
IPROFFSET=IPROFFSET*8+4; //得到偏移的确切位置
MY_NVIC_PriorityGroupConfig(NVIC_Group);//设置分组
temp=NVIC_PreemptionPriority<<(4-NVIC_Group);
temp|=NVIC_SubPriority&(0x0f>>NVIC_Group);
temp&=0xf;//取低四位
if(NVIC_Channel<32)NVIC->ISER[0]|=1< NVIC->IPR[IPRADDR]|=temp< MY_NVIC_Init(2,3,EXTI0_IRQChannel,2); //抢占2,子优先级3,组2 MY_NVIC_Init(2,2,EXTI2_IRQChannel,2);//抢占2,子优先级2,组2 MY_NVIC_Init(2,1,EXTI3_IRQChannel,2);//抢占2,子优先级1,组2 MY_NVIC_Init(2,0,EXTI4_IRQChannel,2);//抢占2,子优先级0,组2 总之, 可以归纳为几点: 1.每次程序运行时,只能设置一组中断,但可以设置多个中断 2.抢占优先可以实现中断嵌套,响应优先级不能实现中断嵌套,高抢占优先级可以打断低抢占优先级,响应优先级之间不能打断, 3.抢占优先级相同时,响应优先的执行顺序看谁先触发。
上一篇:UCOSIII简介于移植
史海拾趣
|
在网上有看到用SendMessage和WM_COPYDATA消息来解决,可是,需要传比较大量的数据。用这个不可靠。请问要怎么才能解决这个问题呢~~~ … 查看全部问答> |
|
我一直在做linux编程 内核开发 对硬件不了解,考虑到要做驱动开发方面的想学点,至少能看懂datasheet 但不知道从哪里入手?要看些什么书?单片机什么的要学吗?… 查看全部问答> |
|
周立功移植的UCOS 2.52用在TI的8962上怎么改啊? 我拿周立功移植的UCOS 2.52用在TI的8962上,周立功的有两个例程一个是控制LED灯和控制蜂鸣器。可是我把它直接烧到TI的8962板上,没有实现功能, 请问高手我应该修改那些地方?… 查看全部问答> |
|
首次流片成功取决于整个系统硬件和相关软件的验证,有些公司提供的快速原型生成平台具有许多调试功能,但这些平台的价格非常高,因此最流行的做法是根据DUT和具体应用设计复合FPGA板,验证这些板的原理图通常是很麻烦的,本文提出一种利用FPGA实现 ...… 查看全部问答> |
|
我第一次做完了跑马灯的实验,我重新做第二个实验,发现给DSP板子上电后还运行的是第一次下载到里边的是实验,想CCS和板子连接重新做第二个实验,但是连接不上,怎么让板子停止以前的实验,我又做其他实验?求高手指点… 查看全部问答> |




