历史上的今天
返回首页

历史上的今天

今天是:2024年10月21日(星期一)

正在发生

2018年10月21日 | STM32学习之:NVIC的初步理解

2018-10-21 来源:eefocus

1  对NVIC的理解

      CM3支持硬件中断嵌套,分为抢占式优先级和亚优先级,使用规则主要有,抢占优先级高级别的可以打断低级别的,同一级别的抢占优先级同时发生时,亚当优先级高的先发生中断,若是相同,则按硬件排列顺序发生。若是有一个亚优先级正在执行中断,同一级别的其它亚优先级发生时,则先挂起,等此中断执行完再执行!

     从库函数中找到优先级分组模式:

#define NVIC_PriorityGroup_0         ((uint32_t)0x700) /* 0 bits for pre-emption priority

                                                          4 bits for subpriority */

#define NVIC_PriorityGroup_1         ((uint32_t)0x600) /* 1 bits for pre-emption priority

                                                          3 bits for subpriority */

#define NVIC_PriorityGroup_2         ((uint32_t)0x500) /* 2 bits for pre-emption priority

                                                          2 bits for subpriority */

#define NVIC_PriorityGroup_3         ((uint32_t)0x400) /* 3 bits for pre-emption priority

                                                          1 bits for subpriority */

#define NVIC_PriorityGroup_4         ((uint32_t)0x300) /* 4 bits for pre-emption priority

                                                          0 bits for subpriority */

从中可以看出第一组只有一个级别,16个亚优先级,我可以这样理解,若是分配成这个组里,不能发生嵌套中断,同时发生中断时,亚优先级高的先发生,若有中断执行时,必须等中断执行完才能执行下一个中断。最后一组正好相反,有15个级别,若是执行一个中断,可以最多嵌套15个中断执行一个中断。看下面的例子:

  NVIC_InitTypeDef    NVIC_InitStructure;  //定义中断初始化类型结构体变量

  

   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);   //配置优先级分组1 2个两个抢占优先级 8个亚优先级

  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //开口外部中断0

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//配置0号抢占式优先级  

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//亚优先级配置为0号

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道

  NVIC_Init(&NVIC_InitStructure);     //对外部中断0进行初始化配置


  NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //开口外部中断5到9

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//配置1号抢占式优先级  

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//亚优先级配置为1号

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道

  NVIC_Init(&NVIC_InitStructure);     //对外部中断0进行初始化配置


  NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn; //ADC1中断

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//配置1号抢占式优先级  

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//亚优先级配置为1号

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道

  NVIC_Init(&NVIC_InitStructure);     //对外部中断0进行初始化配置


从上面的配置来看,外部中断0的优先级最高,可以打断ADC和外部5到9的中断,也就说可以嵌套发生,当ADC中断和外部5到9中断同时发生时,它们的抢占优先级别相同,亚优先级别也相同,因为ADC1硬件排在更靠前,则先发生ADC中断,若是两者任何一个中断正在执行,则等此中断执行完,再去执行另一个中断。


推荐阅读

史海拾趣

Aimtec公司的发展小趣事

作为一家注重品质的企业,Aimtec公司深知质量管理体系的重要性。因此,公司投入大量资源,建立了完善的质量管理体系,并通过了ISO 9001:2015等国际质量管理体系认证。这些认证不仅证明了Aimtec公司在质量管理方面的实力,也为公司的业务拓展提供了有力的保障。通过持续的质量改进和创新,Aimtec的产品在行业中赢得了良好的口碑。

安纳森(AnaSem)公司的发展小趣事

在电子行业中,晶振模组是众多电子设备不可或缺的核心组件。安纳森(AnaSem)公司自创立之初,便致力于研发创新的晶振模组技术。面对市场上多数厂家仍依赖传统晶体制作方法的现状,安纳森凭借其深厚的研发实力和前瞻性的技术视野,成功研发出以单体式集成电路为核心的晶振模组制作技术。这一技术的突破不仅大幅提升了晶振模组的性能与稳定性,更使得安纳森在激烈的市场竞争中脱颖而出,迅速占据了行业的一席之地。

Densitron公司的发展小趣事

在电子行业的激烈竞争中,Densitron公司始终坚持技术创新作为发展的核心动力。早期,公司投入大量研发资源,成功开发出一种新型的铟锡氧化物(ITO)材料,这种材料在触摸屏领域具有出色的性能,使得公司的产品在市场上脱颖而出。随着技术的不断升级,Densitron公司又相继推出了一系列创新产品,不仅满足了客户日益增长的需求,也推动了整个行业的进步。

Blue Sky Research公司的发展小趣事

为了进一步提升竞争力,Blue Sky Research开始寻求产业链整合的机会。公司与上下游企业建立紧密的合作关系,共同推动激光技术产业的发展。通过整合产业链资源,Blue Sky Research实现了从原材料采购到产品销售的全流程控制,提高了生产效率和产品质量。同时,公司还积极参与行业标准的制定和推广,推动整个行业的健康发展。

HOPERF公司的发展小趣事

成立于1998年的HOPERF,最初是一家专注于无线射频技术的小型创业公司。在那个通信技术日新月异的时代,公司创始人凭借敏锐的市场洞察力和对技术的执着追求,带领团队开始了自主研发之路。初期,HOPERF在无线射频领域不断突破,成功研发出多款具有自主知识产权的射频芯片,为公司的后续发展奠定了坚实的基础。这些技术创新不仅提升了产品的性能,还大大降低了成本,使得HOPERF在竞争激烈的市场中逐渐站稳脚跟。

ACP Optoelectronic Technology Co Ltd公司的发展小趣事

在发展过程中,ACP Optoelectronic Technology Co Ltd注重品牌建设和形象提升。公司加强品牌宣传和推广力度,通过媒体广告、网络宣传等多种方式提升品牌知名度和美誉度。同时,公司也注重客户服务和售后支持,以优质的产品和服务赢得客户的信任和支持。这些举措不仅提升了ACP Optoelectronic Technology Co Ltd的品牌形象,也为其长期发展奠定了坚实基础。


请注意,以上故事仅为虚构,旨在展示电子行业企业可能的发展路径和趋势。实际上,每个企业的发展历程都是独一无二的,受到市场环境、技术创新、管理决策等多种因素的影响。如需了解ACP Optoelectronic Technology Co Ltd的真实发展故事,建议查阅相关新闻报道或公司资料。

问答坊 | AI 解惑

C类高频电子线路授课教案.doc--功率放大器-

C类高频电子线路授课教案.doc--功率放大器 --EDN电子设计技术…

查看全部问答>

请问各位,哪里有便宜的以太网控制芯片?

我在网上查,最便宜的 RTL8019AS也要12RMB/个 我现在做的一个小东西需要一个以太网控制器加RJ45口,订货量可以非常大,10K - 100K,但是成本非常关键,如果太贵,项目肯定被踢掉了 另外也问了dm9000, 比realtek得还要贵 我的要求很简单,就是支 ...…

查看全部问答>

protel99se鼠标增强器出现问题

大家好:我的protel99se的鼠标增强器出现了点小问题 同样的增强器版本(第三版),同样的设置(开机自动运行),在别人的机子上都是好好的 在我的笔记本就是开机时会自动弹出一个类似于记事本的 protel99seMex.ini文件里面的内容显示如下: [All ...…

查看全部问答>

当PDEVICE_OBJECT指针失效时怎么办?

问题是这样的: 我写的一个文件系统驱动,需要存储系统中所有硬盘设备的对象指针(PDEVICE_OBJECT),正常情况下,我使用这些指针是没有问题的。 但是,当系统移除某个硬盘设备(如usb设备或san的硬盘)后,我驱动中对应的PDEVICE_OBJECT指针所指 ...…

查看全部问答>

寻找在上海的比较好的嵌入式培训机构!! 大家多给些建议

寻找在上海的比较好的嵌入式培训机构!!   大家多给些建议…

查看全部问答>

自己编写第三方TSP,数据传输用,做过的兄弟给点思路!!!!

急啊,现在完全都没有思路,这个好像和电话TSP不一样,那位兄弟做过的指点一下啊!!!…

查看全部问答>

STM32的PWM输出

) 初始化函数定义: void TIM_Configuration(void);    //定义TIM初始化函数 d) 初始化函数调用: TIM_Configuration();    //TIM初始化函数调用 e) 初始化函数,不同于前面模块,TIM的初始化分为两部分——基本初始 ...…

查看全部问答>

modelsim 仿真verilog时,报Missing instance name,什么原因?

用modelsim仿真verilog时,建2个.v文件nand_2.v和test_for_nand.v,编译通过,对test_for_nand.v仿真时,报错:# ** Error: F:/Modelsim/Nand/test_for_nand.v(16): Missing instance name in instantiation of \'nand_2\'.# Optimization failed# ...…

查看全部问答>

cadence问题三则?

一、cadence原理图设计中的端口有什么作用?端口号相同是否表示这两个端互连?端口与端口互连是否可以用网络标号? 二、网络标号有什么作用?总线上加网络标号有什么意义?总线和总线相连是否可以用网络标号? 三、上图中的TP6是什么符号?代表什 ...…

查看全部问答>

江苏省电子设计大赛

明天江苏省的电子设计大赛就要正式拉开帷幕了,我们将在这个没有硝烟的战场上奋战3夜4天,希望一切都好,不要有意外的发生。我们不奢求拿一等奖或者说是拿到多么好的名次,我们只希望我们这一个多月的付出(特别是XW的付出)能够得到一点点回报,让 ...…

查看全部问答>