历史上的今天
返回首页

历史上的今天

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

正在发生

2019年09月09日 | 正点原子STM32F4中断优先级管理

2019-09-09 来源:eefocus

今天讲解,STM32F4开发指南   STM32F4中文参考手册,f4只使用了其中的一部分中断可以找到F4的中文参考手册第10节


有一个表格STM32F405XX和STM32F407XX和STM32F415XX/17XX的向量表 有0-81个可屏蔽中断


如何管理这几十个中断?就是利用NVIC ,首先看一下中断优先级分组,分组就是利用SCB->AIRCR中断配置,设置他的8-10位来设置中断优先级分组。设置了分组之后,就确定了  抢占优先级和相应优先级,每一个中断都有一个IP寄存器,这个IP寄存器的低位是4-7,当我们利用AIRCR设置好分组后他的IP寄存器也就配置好了。

这里有个问题 这么分组有什么意义?抢占优先级和响应优先级是干什么的,一般中断优先级分组只设置一次,设置了分组之后,我们也就确定了一个系统当中他的抢占优先级和 响应优先级的分配 情况。比如我们设置了分组2那么就意味着有2个位可以设置他的抢占优先级  有2个位可以设置他的响应优先级.。


 接下来讲解一下什么是抢占优先级?  什么是响应优先级?


高优先级的抢占优先级可以打断正在进行的低抢占优先级的中断:


举个例子 我们设置AIRCR的分组为2,那么对于A/B中断,A可以有2位抢占优先级,2位响应优先级,B也可以有2位抢占优先,2位响应优先级,数值越低代表他们的级别越高。比如A的抢占优先级我们设置为0,B的抢占优先级设置为1。那么就是说明他们的抢占优先级是不一样的,并且A比B高。那么如果说B的中断正在执行,此时发生了A中断那么它是可以打断B的中断,先去执行A中断,等A中断执行完之后再去执行B中断。


抢占优先级相同的中断,高响应优先级不可以打断低响应优先级中断:


比如说A中断和B中断他们的抢占优先级都是一样的,A的响应优先级是0,B的响应优先级是1,。当B正在执行,A中断发生,那么A中断是不能打断B中断的。但是如果说A和B同时发生,那么在他们抢占优先级相同的前提下,谁的响应优先级越高谁就先执行。 如果说两个中断的抢占优先级不一样,响应优先级一样,那么就先执行抢占优先级高的。


如果两个中断的抢占优先级和响应优先级都是一样的那么哪个先发生就先执行哪个。


举例:


假设设置中断优先级分组为2,然后设置中断3(RTC中断)的抢占优先级为2,响应优先级为1.


中断6(外部中断0)的抢占优先级为3,响应优先级为0.


中断7(外部中断1)的抢占优先级为2,响应优先级为0.


那么这3个中断的优先级顺序为:中断7>中断3>中断6


特别说明


一般情况下,系统代码执行过程中,只设置一次中断优先级分组,比如分组2,设置好分组后一般不会再改变分组。随意改变分组会导致中断管理混乱,程序会发生意想不到的执行结果。在misc.h有一个中断优先级分组函数


void NVIC_PriorityGroupCofing();


上面这个 函数设置的就是位8-10,他就确定了这个分组可以看一下这函数的有效性

那么我们怎么来设置每一个中断的抢占优先级、响应优先级和优先级分组呢?


关于中断优先级的操作有一系列寄存器,实际上在函数库中这些寄存器通过机构体组合在了一起。下图右边的在 core_cm4.h这个文件中。这个机构体中RESERVED表示407没有用到的中断,其中有一个240的数组,应为m4内核最多可以支持240个中断。而407只支持82个中断

那么每一个中断如何来设置优先级呢?


IP寄存器的4-7位,来设置每一个中断的抢占优先级和相应优先级,IP寄存器是一个8位的寄存器,应为F407系列只有82个可屏蔽的中断,所以只用到这240个寄存器中的0-81个,

这个函数就是用来设置每一个中断的抢占优先级和响应优先级的,他的入口参数是一个机构体指针类型,有四个成员变量,


1第一个成员变量确定是哪一个中断(中断源,82个中的一个)


2第二个成员变量就是设置抢占优先级


3第三个成员变量就是设置响应优先级


4使能中断的通道


接下来讲中断使能寄存器,ISER[8],他是一个32位的寄存器,32*8=256个,对于M4的话最多有240个,407只用到了其中的82个 可屏蔽中断,每一个寄存器是32位所以我们用其中的ISER[0]-ISER[2]就够了,这个寄存器也包含在了上面那个机构体当中。


接下来还有一些别的寄存,下面这个ICER这个寄存器一共有8个,同样设置这个寄存器也是设置上面那个机构体


下面这个中断挂起和解挂的 配置和上面的步骤也基本相同,


还有一个中断激活标志位寄存器,他可以知道当前哪个中断正在执行。


下面这是中断配置的步骤


1 设置中断优先级的级别,IP寄存器的位4-7,一共4个位2的4次方可以设置16级中断


2设置某一个中断的优先级,


打开外部中断实验, 在开头就调用了中断优先级分组,下面这个函数将分组设置为2,(即:两位抢占优先级、两位响应优先级)

今天的讲解结束,要理解中断还是要 多看手册。


推荐阅读

史海拾趣

创世(CS)公司的发展小趣事

创世公司在SD NAND存储产品的研发过程中,不断突破技术壁垒,实现了产品的创新。例如,2018年,为满足轨道交通、航空航天、工业控制等行业类客户对存储产品的特殊需求,创世公司首家推出了第二代SD NAND产品。这一产品不仅具有更快的读写速度和更宽泛的使用环境,还能承受高低温冷热冲击、随机掉电等苛刻的操作环境。同时,创世公司还为客户提供个性化的固件定制服务,进一步满足了客户的个性化需求。

Foxconn_Optical_Interconnect_Technologies__Inc.公司的发展小趣事

创世公司(CS)的创立源于对未来技术趋势的敏锐洞察。在5G、人工智能、物联网等行业还未广泛崛起的初期,创世公司就预见到这些技术将引领未来电子行业的发展。基于这种战略眼光,创世公司决定专注于SD NAND存储产品的研发和生产。这一决策不仅为公司的后续发展奠定了坚实的基础,也展示了创始团队对未来技术趋势的坚定信心。

ALCOA公司的发展小趣事

近年来,随着环保意识的提高,ALCOA积极推动可持续发展和环保倡议。公司致力于减少生产过程中的能源消耗和废弃物排放,同时也在研发更环保的铝材和生产工艺。这些努力不仅提升了公司的社会形象,也为其在电子行业中的长期发展奠定了坚实的基础。

以上五个故事,只是ALCOA公司发展历程中的一部分。然而,这些故事足以展现出这家公司在电子行业中的卓越成就和持续创新的精神。

固得沃克(GOODWORK)公司的发展小趣事

在追求经济效益的同时,固得沃克也高度重视环境保护和社会责任。公司所有产品均通过了美国UL、SGS欧盟ROHS及REACH环保认证,确保产品符合国际环保标准。这一举措不仅提升了公司的品牌形象,也为公司拓展国际市场提供了有力支持。近年来,固得沃克的产品已广泛应用于汽车电子、新能源、绿色照明等多个领域,并远销海外多个国家和地区。

DREMEL公司的发展小趣事

随着全球化的趋势日益明显,Dremio公司开始积极拓展国际市场。他们制定了详细的国际化战略,包括在海外市场设立分支机构、与当地企业建立合作关系、参加国际展会等。这些举措不仅提高了Dremio公司在国际市场的知名度,也为其带来了更多的商业机会。通过国际化战略的实施,Dremio公司的业务规模不断扩大,品牌影响力也日益增强。

请注意,以上故事均基于虚构,旨在展示一个类似Dremio公司在电子行业中的可能发展路径和故事。如有需要,请进一步核实相关事实和数据。

益升华(Essentra)公司的发展小趣事

在电子产品的保护领域,益升华(Essentra)公司一直走在行业前列。多年前,公司研发团队发现市场上缺乏一种既轻便又耐用的塑料保护盖。于是,他们投入大量资源进行研发,经过数百次的试验和改进,最终成功开发出一种新型的塑料保护盖,它不仅具备优异的抗冲击性和耐磨损性,还能有效隔绝外界环境中的静电和尘埃。这一创新产品迅速获得市场的认可,为益升华(Essentra)公司带来了可观的收益。

问答坊 | AI 解惑

欧姆龙PLC中断问题

欧姆龙PLC如何实现中断,从那里进入及退出,请高人指点!…

查看全部问答>

Keil C51 几类重要库函数 (2)

8. 第八章 dScope for Windows使用详解 1. 第一节 概述 1. 1. 主窗口(Mainframe Window) 可设置其它各种调试窗口,设置断点、观察点,修改地址空间,加载文件等等; 2. 2. 调试窗口(DEBUG Window) 支持用户程序的各种显示方式,可连续运行 ...…

查看全部问答>

请问在wince里怎样用wifi发送特定数据

请问在wince里怎样用wifi发送特定数据 有人说就是socket编程,我没想明白,难道系统会自动调用wifi? 还请各位前辈指点迷津!…

查看全部问答>

ST选型

请问谁清楚ST的哪个8位机有2个PWM,3个定时器,10路ADC,34个I/O(含10个AD口) ,是用来做电源的。wendellyang@163.com…

查看全部问答>

热电堆 信号选择

小弟最近想做一个用于微波炉的温度测量的红外探测模块。由于以前都没有做过项目,所以经验非常少,现在我苦于热电堆型号的挑选。         网上看了看有这些:SC0067、SC0070、10TP583T、OTP系列(如OTP-537F2、OTP- ...…

查看全部问答>

关于硬盘无刷电机的驱动

小弟在研究硬盘电机的驱动,我曾试过用小功率管9013,8050,8550等等来搭成达林顿管子,但是驱动电机的时候发热严重,而且明显有气无力...虽然能转...在网上找了很久,想用场效管IRF540N来驱动,但是不知道电路如何搭建...求各位高手,走过路过的能 ...…

查看全部问答>

8962 lwip 如何实现不同网段连接啊

求助,哪位告诉能指点下, 在8962上面使用lwip 如何实现不同网段的能够连接啊???就是公司网络 192.168.1.12的电脑 可以 ping通 192.168.2.2的电脑但是我的板子 192.168.1.10 ping不同 192.168.2.2的电脑…

查看全部问答>

差分放大器低通滤波器设计

有没谁用差分放大器做个低通滤波器的?请指点小弟一下,谢了...…

查看全部问答>

大三学生方向分流,求好心人指点

大三嵌入式又要分方向了, ARM 、 PCL、 单片机,感觉吧....就是没感觉,有没有前辈给这三个方向的发展,优缺点,就业情况分析一下啊? 小弟先谢谢了....!!!   …

查看全部问答>