历史上的今天
返回首页

历史上的今天

今天是:2025年06月08日(星期日)

正在发生

2021年06月08日 | 51单片机中断优先级及中断嵌套

2021-06-08 来源:eefocus

在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述就容易明白了。实际上很多人都是混淆了优先级的含义,所以才觉得糊里糊涂。


中断的优先级有两个:查询优先级和执行优先级。


什么是查询优级呢?我们从datasheet或书上看到的默认(IP寄存器不做设置,上电复位后为00H)的优先级:


外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断


或 int0,timer0,int1,timer1,serial port 或 INT0、T0、INT1、T1、UART


或 PX0>PT0>PX1>PT1>PS>......


其实都是查询优级。首先查询优先级是不可以更改和设置的。这是一个中断优先权排队的问题。是指多个中断源同时产生中断信号时,中断仲裁器选择对哪个中断源优先处理的顺序。而这与是否发生中断服务程序的嵌套毫不相干。当CPU查询各个中断标志位的时候,会依照上述5个查询优先级顺序依次查询,当数个中断同时请求的时候,会优先查询到高优查询先级的中断标志位,但并不代表高查询优先级的中断可以打断已经并且正在执行的低查询优先级的中断服务。


例如:当计数器0中断和外部中断1(按查询优先级,计数器0中断>外部中断1)同时到达时,会进入计时器0的中断服务函数;但是在外部中断1的中断服务函数正在服务的情况下,这时候任何中断都是打断不了它的,包括逻辑优先级比它高的外部中断0计数器0中断。


而中断的执行优先级就是你对IP寄存器的设置了。在2个优先级的情况下,某位为1,则相应的中断源为高优先级;为0,则为低优先级。


关于中断的优先级有三条原则:


1、CPU同时接收到几个中断时,首先响应优先级最高的中断请求;


2、正在进行的中断过程不能被新的同级或低行优优先级的中断请求所中断;


3、正在进行的低行优优先级中断服务,能被高行优优先级中断请求中断;


若:同一执行优先级中的中断申请不止一个时,则有一个中断优先权排队问题。同一执行优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,优先权自高到低的顺序即:


外部中断0>定时/计数0>外部中断1>定时/计数1>串行接口


例如:设置IP = 0x10,即设置串口中断为最高优先级,则串口中断可以打断任何其他的中断服务函数实现嵌套,且只有串口中断能打断其他中断的服务函数。若串口中断没有触发,则其他几个中断之间还是保持逻辑优先级,相互之间无法嵌套。


关于中断嵌套。可以这样说,当一个中断正在执行的时候,如果事先设置了中断优先级寄存器IP,那么当一个更高优先级的中断到来的时候会发生中断嵌套,如果没有设置则不会发生任何嵌套;如果有同一个优先级的中断触发,它并不是在“不断的申请”,而是将它相应的中断标志位置即IE寄存器的某位置位,当CPU执行完当前中断之后,按照查询优先级重新去查询各个中断标志位,进入相应中断。


要记住,没有设置IP时,单片机会按照查询优先级(或都说逻辑优先级)来排队进入服务。如果要想让某个中断优先响应, 则要设置IP,更改执行优先级(或者说物理优先级)。要注意的是,当设置了IP后,当低执行优先级中断在运行时,如果有高执行优先级的中断产生,则会嵌套调用进入高执行优先级的中断。如果你是用C语言写的程序,并在中断服务时 using 了寄存组,要注意,两个不同执行优先级的中断服务程序不要 using 同一组寄存器。


看两个问题,如下:


1 在各个中断都是低优先级的时候,如果定时器0的溢出进入中断。在这个中断处理的过程中,外部中断0也被触发了,那么是不是要发生中断嵌套?


2 如果定时器0发生中断的时候,进入中断处理程序,这个时候外部中断1条件触发条件满足了。因为定时器0自然优先级比外部中断1高,那么定时器0的中断处理程序继续执行。假设定时器中断处理程序执行的过程中,外部中断1的触发。条件消失了,那么等定时器0的中断处理完后,程序还是会进入外部中断1处理程序吗?


答案1:在IP事先设置了外部中断0的优先级的情况下,CUP会中止定时器0的中断服务,进入外部中断0服务程序,执行完以后再回到定时器0中断服务程序。否则不会。


答案2:肯定会进入中断的;外部中断1的触发条件满足后会置位外部1的中断标志,即使后来外部中断1的触发条件消失了,也不会清除已置位的中断标志,所以等定时器0的中断处理完后,程序判断外部中断的中断标志为1后依然会进入外部中断1处理程序的,只有在外部中断1处理程序中执行reti指令才会硬件清除外部中断1的中断标志(这也正是为什么中断返回使用reti指令而不可以用ret替换的原因)...

推荐阅读

史海拾趣

ARCOL公司的发展小趣事

品质是ARCOL公司的核心竞争力。公司始终坚持以质量为核心,建立了严格的质量管理体系。从原材料的采购到产品的出厂,每一个环节都经过严格把关,确保产品的质量和性能达到最高标准。同时,ARCOL还注重品牌建设,通过不断提升产品质量和服务水平,树立了良好的企业形象和口碑。

Danaher Corporation公司的发展小趣事

随着全球化趋势的加强,丹纳赫集团开始积极拓展国际市场。通过在全球各地设立研发中心、生产基地和销售网络,丹纳赫集团成功地将产品和服务推向了全球市场。同时,丹纳赫集团还加强了与国际知名企业的合作,共同开发新技术和产品,进一步巩固了其在电子行业中的领先地位。

以上五个故事梗概概述了丹纳赫集团在电子行业中的发展历程和关键节点。如需更详细的信息和故事背景,建议查阅丹纳赫集团的官方资料或相关新闻报道。

Filtran Ltd公司的发展小趣事

Filtran Ltd成立于2000年代初,初期专注于滤波器技术的研发。在无线通信领域,滤波器是确保信号纯净度的关键组件。公司研发团队经过数年不懈努力,成功研发出一种新型高性能陶瓷滤波器,该滤波器不仅体积更小,而且能在更宽的频率范围内保持优异的性能。这一创新技术迅速吸引了手机制造商的注意,Filtran Ltd迅速成为多家国际手机品牌的核心供应商,市场份额显著提升。

BREL International Components公司的发展小趣事

BREL International Components公司深知合作共赢的重要性。公司积极与上下游企业建立紧密的合作关系,共同开发新产品、拓展新市场。通过与供应商的深度合作,BREL确保了原材料的稳定供应和成本控制;通过与客户的紧密沟通,BREL及时了解市场需求,调整产品策略。此外,BREL还积极参与行业交流和合作,与同行共同推动电子行业的发展。

GS Technology公司的发展小趣事
如心电图机、脑电图机等,用于显示生物电信号。
HEIMANN公司的发展小趣事
三极管作为电子开关或放大器,能够控制电流的流动。在放大状态下,三极管的基极电流对集电极电流有控制作用,实现信号的放大。

问答坊 | AI 解惑

足球机器人系统

足球机器人系统  …

查看全部问答>

200M电脑笔记本的虚拟示波器 DSO-5200 USB

流线型设计,体积小巧, USB2.0接口,免电源,与台式示波器类似界面,易于上手. 更适合于笔记本电脑,生产线维修调整,便于出差使用。 小的尺寸(mm):190(L)x100(W)x35(H) ,便于携带. .高刷新率, 高采样率,200MS/s实时采样,50GS/s等效采样. ...…

查看全部问答>

数字电子课件

本帖最后由 paulhyde 于 2014-9-15 09:24 编辑 值得保存的数字电子课件  …

查看全部问答>

DPO技术

泰克发明了数字荧光示波器(DPO),帮助电子设计人员更加可靠、以更高的精度捕获和分析复杂的信号细节。自1998年推出以来,DPO不断发展,并被尊称为示波器结构和性能的重大突破。由于泰克最新推出的DPO7000系列仪器,数字荧光示波器的性能又向前迈进 ...…

查看全部问答>

零起点学习STM32F107开发( 教程 + 资料下载)

STM32是ST公司推出的基于ARM公司的Cotex-M3内核的单片机,该单片机具有较大的存储空间、高速的内核以及种类齐全的外设。您的行业不管是消费电子,还是工业控制,STM32都是您明智的选择。 为了让大家的学习更加快捷、更有效率,飞嵌电子将推出系列 ...…

查看全部问答>

S3C2440A+SDRAM自刷新问题

  使用4.2升级到5.0的BSP,在CPU睡眠后(大概20ma电流),如果睡几十秒,然后唤醒则没有问题,若睡过一分钟后唤醒,屏幕能够显示出来但是冻住了,按键,触摸屏都无响应。   目前怀疑是SDRAM自刷新没有生效,睡的时间过长,则S ...…

查看全部问答>

有没有人能讲讲USB HID使用的中断传输是一个什么过程呢?

USB HID使用的中断传输好像是要PC先发IN令牌,,然后设备响应,传回数据,是不是PC每调用一次ReadFile()函数就发一次IN令牌呢? 同时在设备的端点描述符里面有一个bInterval项,说是轮询间隔,那到底主机发IN令牌是受ReadFile控制还是按照bInter ...…

查看全部问答>

WinCE display driver怎样支持4bpp?

想写一个支持4bpp灰度的基于GPE的display driver要怎么做?怎么让OS知道我支持哪16种颜色? 是不是要创建一个调色板,我需要算出这16种灰度颜色对应的RGB值,然后放在调色板里么?还是只要设置成4bpp,OS就默认是灰度颜色?谢谢~~…

查看全部问答>

PC机与单片机通讯程序

我知道很多人已经提了类似的问题,我是一名新手,我想问一下有没有高手能让我看一下完整的代码,我希望单片机端用的是C51语言,然后PC机一端用的是VB.我正在做一个毕业设计,要求用PC把要输出的汉字传送给单片机,单片机控制液晶模块输出.谢谢了!…

查看全部问答>

霍尔传感器3144

本帖最后由 paulhyde 于 2014-9-15 04:21 编辑 在网上说可以用来做位置检测模块,哪位大侠指点下哈~~  …

查看全部问答>