历史上的今天
返回首页

历史上的今天

今天是: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<else NVIC->ISER[1]|=1<<(NVIC_Channel-32);    

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.抢占优先级相同时,响应优先的执行顺序看谁先触发。

推荐阅读

史海拾趣

D+H Mechatronic AG公司的发展小趣事

随着市场竞争的加剧,D+H Mechatronic AG开始调整其市场布局策略。公司根据市场需求和产品特点,有针对性地开拓新的市场领域。同时,公司还加强了与客户的沟通和合作,深入了解客户需求并提供定制化的解决方案。这些举措使公司在激烈的市场竞争中保持了稳定的增长态势,并逐步巩固了其在电子行业中的地位。

光磊(GL)公司的发展小趣事

随着市场竞争的加剧,D+H Mechatronic AG开始调整其市场布局策略。公司根据市场需求和产品特点,有针对性地开拓新的市场领域。同时,公司还加强了与客户的沟通和合作,深入了解客户需求并提供定制化的解决方案。这些举措使公司在激烈的市场竞争中保持了稳定的增长态势,并逐步巩固了其在电子行业中的地位。

Dalian Dlicap Corporation公司的发展小趣事

面对激烈的市场竞争和行业变革,达利凯普积极推进数字化转型和产业升级。公司引入了先进的生产设备和管理系统,实现了生产过程的自动化和智能化。同时,公司还加大了对新材料、新工艺的研发力度,不断提升产品的性能和品质。这些举措使达利凯普在激烈的市场竞争中保持了领先地位,也为公司的持续发展奠定了坚实基础。

EZchip Technologies Ltd公司的发展小趣事

作为一家领先的电子企业,EZchip深知自己在推动社会进步和可持续发展方面所肩负的责任。因此,公司一直致力于环境保护、社会公益和可持续发展等方面的工作。EZchip通过采用环保材料和节能技术降低生产过程中的能耗和排放;积极参与社会公益活动回馈社会;同时注重企业的可持续发展规划和管理模式的创新。这些举措不仅体现了公司的社会责任感和担当精神也为企业赢得了良好的社会声誉和品牌形象。

Ethertronics公司的发展小趣事

随着技术的不断成熟和市场的认可,EZchip开始寻求更广阔的市场空间。公司通过与全球知名通信设备制造商建立合作关系,将其产品应用于各类网络设备和解决方案中。同时,EZchip还积极参与国际标准制定和行业交流活动,不断提升品牌影响力。通过市场拓展和合作,EZchip的产品逐渐覆盖了全球多个国家和地区,成为了网络通信行业的重要参与者。

Cooper Industries公司的发展小趣事

早在2007年,Cooper Industries就展现出其全球扩张的雄心。同年10月8日,该公司与宁波知名企业耐吉科技股份有限公司共同注资3000万美元,成立了库柏耐吉(宁波)电气有限公司。这一合资公司的成立,不仅加强了Cooper在中国市场的地位,也为其全球业务布局增添了重要一环。库柏耐吉(宁波)电气有限公司地处浙江省慈溪市,工业园占地400余亩,位于世界最长跨海大桥——杭州湾跨海大桥的南岸桥头堡区域,其优越的地理位置为公司的发展提供了有力支持。

问答坊 | AI 解惑

你最喜爱那家公司的FPGA芯片?

你最喜爱那家公司的FPGA芯片?…

查看全部问答>

如何解决PostMessage不能传指针的问题

在网上有看到用SendMessage和WM_COPYDATA消息来解决,可是,需要传比较大量的数据。用这个不可靠。请问要怎么才能解决这个问题呢~~~ …

查看全部问答>

USB 驱动开发QQ群55695217

USB 驱动开发,DDK驱动开发,Driver studio 驱动开发,欢迎大家来讨论…

查看全部问答>

仿真器设置问题

各位高手大家好:     本人最近遇到一个奇怪的问题,我现在用的仿真器是JDT-698H,软件是KEIL UVISON2,硬件是一个主板带一个显示板,主板发送数据给控制显示板的单片机,然后显示板的单片机通过164控制LED显示,主板发送数据时用的是P1 ...…

查看全部问答>

想做嵌入式驱动开发 想学点硬件方面 要学哪些?

我一直在做linux编程  内核开发 对硬件不了解,考虑到要做驱动开发方面的想学点,至少能看懂datasheet 但不知道从哪里入手?要看些什么书?单片机什么的要学吗?…

查看全部问答>

周立功移植的UCOS 2.52用在TI的8962上怎么改啊?

我拿周立功移植的UCOS 2.52用在TI的8962上,周立功的有两个例程一个是控制LED灯和控制蜂鸣器。可是我把它直接烧到TI的8962板上,没有实现功能, 请问高手我应该修改那些地方?…

查看全部问答>

初学者申请试用LM3S8962 评估套件

申请LM3s8962评估套件进行更深一层的学习 希望能得到这个机会…

查看全部问答>

【设计工具】利用FPGA实现原型板原理图的验证

首次流片成功取决于整个系统硬件和相关软件的验证,有些公司提供的快速原型生成平台具有许多调试功能,但这些平台的价格非常高,因此最流行的做法是根据DUT和具体应用设计复合FPGA板,验证这些板的原理图通常是很麻烦的,本文提出一种利用FPGA实现 ...…

查看全部问答>

CCS与目标板的连接问题

我第一次做完了跑马灯的实验,我重新做第二个实验,发现给DSP板子上电后还运行的是第一次下载到里边的是实验,想CCS和板子连接重新做第二个实验,但是连接不上,怎么让板子停止以前的实验,我又做其他实验?求高手指点…

查看全部问答>