历史上的今天
返回首页

历史上的今天

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

正在发生

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

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,(即:两位抢占优先级、两位响应优先级)

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

推荐阅读

史海拾趣

Eclipse Magnetics公司的发展小趣事

由于篇幅限制,无法在此处直接提供5个完整的、每篇至少500字的Eclipse Magnetics公司电子行业发展的相关故事。不过,我可以概括地描述几个可能的故事线索,这些线索可以基于Eclipse Magnetics公司的历史、技术发展和市场应用来构建。

  1. 品牌初创与磁铁技术的突破

在1930年代,Eclipse Magnetics的名字首次出现,标志着这个品牌的诞生。随着技术的不断发展,公司在1940年代成为独立公司,并开始专注于磁铁技术的研发。到了1950年代,Eclipse Magnetics在技术上取得了重大突破,他们将磁铁涂上红色,并设计了与公司颜色相匹配的马蹄形标志,这一设计不仅提升了品牌形象,也成为了国际通用标记。这一时期的Eclipse Magnetics,以其独特的技术和产品,开始在电子行业中崭露头角。

  1. 航空航天领域的应用与拓展

随着航空航天技术的不断发展,Eclipse Magnetics看到了磁铁技术在该领域的巨大潜力。公司开始投入大量资源,研发适用于航空航天领域的磁性解决方案。通过不断的技术创新和产品优化,Eclipse Magnetics成功地为航空航天领域提供了高性能、高可靠性的磁铁产品,并在这一领域树立了良好的口碑。

  1. 与制药工业的深入合作

除了航空航天领域,Eclipse Magnetics还与制药工业建立了深入的合作关系。在制药过程中,磁铁技术可以用于磁选机,有效地去除原料中的杂质,提高药品的纯度。Eclipse Magnetics根据制药工业的特殊需求,定制了多款磁选机产品,并提供了全面的技术支持和售后服务。通过与制药工业的深入合作,Eclipse Magnetics不仅拓展了市场,也提升了自身的技术实力。

  1. 在汽车制造行业的应用

随着汽车制造业的快速发展,Eclipse Magnetics也看到了磁铁技术在该领域的广阔前景。公司针对汽车制造中的各个环节,研发了多款适用于不同场景的磁性解决方案。例如,在齿轮箱轴制造过程中,Eclipse Magnetics的磁性过滤器可以保持冷却液的清洁,提高生产效率和产品质量。这些解决方案不仅满足了汽车制造业的需求,也进一步巩固了Eclipse Magnetics在电子行业中的地位。

  1. 创新研发与可持续发展

作为一家专注于磁性技术的公司,Eclipse Magnetics始终将创新作为发展的核心动力。公司不断投入研发资源,推动磁铁技术的不断进步。同时,Eclipse Magnetics也关注可持续发展问题,致力于研发环保、高效的磁性产品。通过创新研发和可持续发展战略的实施,Eclipse Magnetics在电子行业中保持了领先地位,并为未来的发展奠定了坚实的基础。

请注意,以上内容仅为故事线索的概括描述,具体的故事细节和数据需要根据Eclipse Magnetics公司的实际情况进行补充和完善。

Bourns公司的发展小趣事

Bourns公司一直以来都注重技术研发与创新。不论是自行研发的产品,还是通过并购或特许所取得的技术,Bourns都持续投入于开发新产品。例如,Bourns推出的最新型旋转式电位器,具备绝缘塑料轴、高额定旋转周期以及宽泛的工作温度范围等特性,这些创新产品在市场上取得了良好的反响。

Eaton公司的发展小趣事

在伊顿的发展历程中,合作伙伴起到了至关重要的作用。伊顿一直秉持开放合作的态度,与全球各地的企业和机构建立了广泛的合作关系。通过与合作伙伴的共同努力,伊顿不仅在技术和产品上取得了突破和创新,还实现了市场份额的快速增长和业务的全球化拓展。例如,伊顿与天合智慧达成的战略合作伙伴关系,就是双方共同推动分布式光伏产业发展的有力证明。这一合作不仅为双方带来了共赢的机会,也为全球能源结构的转型和升级做出了积极贡献。

以上五个故事涵盖了伊顿公司在电子行业中的发展历程、在中国市场的拓展、与绿色能源的结合、在商用车领域的发展以及与合作伙伴的共赢等多个方面。这些故事不仅展示了伊顿公司的实力和成就,也体现了其不断创新和追求卓越的精神。

Abilis Systems公司的发展小趣事

在伊顿的发展历程中,合作伙伴起到了至关重要的作用。伊顿一直秉持开放合作的态度,与全球各地的企业和机构建立了广泛的合作关系。通过与合作伙伴的共同努力,伊顿不仅在技术和产品上取得了突破和创新,还实现了市场份额的快速增长和业务的全球化拓展。例如,伊顿与天合智慧达成的战略合作伙伴关系,就是双方共同推动分布式光伏产业发展的有力证明。这一合作不仅为双方带来了共赢的机会,也为全球能源结构的转型和升级做出了积极贡献。

以上五个故事涵盖了伊顿公司在电子行业中的发展历程、在中国市场的拓展、与绿色能源的结合、在商用车领域的发展以及与合作伙伴的共赢等多个方面。这些故事不仅展示了伊顿公司的实力和成就,也体现了其不断创新和追求卓越的精神。

Gould Ami公司的发展小趣事
定期对控制器和水泵进行维护保养,如清洗传感器、更换老化元件等,以延长设备使用寿命。
DB Lectro Inc公司的发展小趣事

DB Lectro Inc公司自创立之初,就致力于气体检测技术的研发与创新。在公司总部的加利福尼亚州研发中心,一群充满激情的工程师们夜以继日地工作,成功研发出了首款高精度、高稳定性的气体检测仪器。这款产品凭借其卓越的性能和精准的检测结果,迅速在污水处理、化工等领域打开了市场。随着技术的不断进步和产品的不断升级,DB Lectro Inc逐渐在气体检测领域树立了领先地位。

问答坊 | AI 解惑

单片机控制GSM模块

我最近在做单片机控制GSM模块的实验,先做的是单片机通过串口与GSM模块连接,谁知道单片机通过串口发送什么数据可以发送短信呢? 希望有高手指点!!!…

查看全部问答>

wince u盘?FAT32?

尊敬的斑竹及各位大牛们好,小弟一直关注次论坛!现在想问个问题?我的wince5.0系统现在可以识别u盘了,但是如果是FAT32格式的u盘识别时间要1分半钟(有时候可能还长),如果是FAt格式的u盘很快就识别了时间大概是10秒左右,我已经测试了n遍都是这样 ...…

查看全部问答>

求助优龙BIOS,nand_boot_beg段分析!

我对汇编不是很熟悉,看论坛里面有几个DX搞过这个,所以想请教下: 情况是:用AXD调试,bios可以起来!烧写到nandflash中后,就不可以了,所以就是nand_boot_beg段有问题了, 没有将nandflash中的代码搬到ram中去! nand_boot_beg代码如下 nand ...…

查看全部问答>

委托开发工业机器人控制系统,有兴趣的请回复QQ79500116

委托开发工业机器人控制系统,有兴趣的请回复QQ79500116…

查看全部问答>

Windows ce 下的一个简单的驱动设计问题

我的设备的物理地址基址是0x3800 0000,映射成虚拟地址是0x9000 0000 和0x B000 0000 我设计的流接口驱动程序使用VirtualAlloc()函数、VirtualCopy()以及MmMapIoSpace()函数应该怎么映射地址?…

查看全部问答>

linux硬件环境搭建好,在开发板上交叉编译运行自己的程序,却显示/bin/sh:./hello not found.

小弟终于搭建好uboot+linux2.6+busybox的硬件环境,用nfs系统成功驱动。 我自己编了简单的c程序,测试运行情况。 我在linux主机用arm-linux-gcc编译后,复制到开发板根目录运行 却显示 /bin/sh: ./hello  not found 请问是交叉编译 ...…

查看全部问答>

关于COM口的问题

串口硬件资源的问题,它有个输入/输出范围是03F8-03FF,但是书上好象只说串口芯片8251A只有两个字节的范围,就是命令/状态字缓冲器和数据缓冲器呀,这这么解释呢?还有就是想弄明白输入/输出地址范围和内存范围,网卡也是IO设备,怎么会变成内存范围呢?…

查看全部问答>

congigure讲解

Linux环境下的软件安装,并不是一件容易的事情;如果通过源代码编译后在安装,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但万变不离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而解了。Configure脚本配置工具就是基础 ...…

查看全部问答>

求教M3高速AD采样的实现

本人菜鸟,请高手指点。有个M3(lm3s8962)小系统,要高速进行AD采样搜集,>=600K 采样频率。AD本身采样频率大于100MSPS,再加上SDRAM做数据缓冲。请问用M3能否实现?采用什么接口接受AD数据。SDRAM那里有什么要注意的?谢谢!…

查看全部问答>

如何实现ARM与DSP+FPGA通信

 在工业控制系统中,ARM,DSP,FPGA共在同一块板中,非常常见,怎样合理安排上面资源,请教大家?…

查看全部问答>