历史上的今天

今天是:2024年10月25日(星期五)

正在发生

2021年10月25日 | 【ARM学习笔记】ARM中断嵌套模式理解

发布者:备战 来源: eefocus关键字:ARM 手机看文章 扫描二维码
随时随地手机看文章

之前一直是做DSP,DSP上有中断嵌套,为了保证在多中断的情况下终端不丢失,在读取完硬件数据后会重新开启中断。因此想当然的以为ARM架构也存在这样一种根据优先级的抢占机制。但是事实上不是的,ARM架构中只有FIQ模式才能打断IRQ中断模式。而内核中,为了防止中断丢失直接在SVC模式下执行中断服务程序。


以下是来自韦东山老师的一盘文章:


几天前一个学生问我ARM中断嵌套的问题,我才发现原来在我心中理所当然的事对学生来说理解实属不易。


ARM有七种模式,我们这里只讨论SVC、IRQ和FIQ模式。


我们可以假设ARM核心有两根中断引脚(实际上是看不见的),一根叫 irq pin, 一根叫fiq pin。在ARM的cpsr中,有一个I位和一个F位,分别用来禁止IRQ和FIQ。


先不说中断控制器,只说ARM核心。正常情况下,ARM核都只是机械地随着pc的指示去做事情,当CPSR中的I和F位为1时,IRQ和FIQ全部处于禁止状态。无论你在irq pin和fiq pin上面发什么样的中断信号,ARM不会理你,你根本不能打断它,因为它“耳聋”,"眼瞎"了。


当I位和F位为0时,irq pin上有中断信号过来时,就会打断arm的当前工作,并且切换到IRQ模式下,跳到相应的异常向量表(vector)位置去执行代码。这个过程是自动的,但是返回到被中断打断的地方就得您亲自动手。


当你跳到异常向量表,处于IRQ的模式的时候,此时如果irq pin上面又来中断信号,此时ARM是不会理你的,irq pin就像秘书,ARM核心就像老板,老板本来在做事,然后来了一个客户,秘书打断它,让客户进去。而此时再来一个客户,要么秘书不断去敲门问,要么客户走人。老板第一个客户没有会见完,不会理你。


但是有一种情况例外,当ARM处在IRQ模式,这个时候fiq pin来了一个中断信号,fiq pin是什么?快速中断,好比公安局的来查刑事案件,才不管老板是不是在会见客户,直接打断,进入到fiq模式,跳到相应的fiq的异常向量表处去执行代码。那如果当ARM处理FIQ模式,fiq pin又来中断信号,也就是又一批公安来了,那没戏,都是执法人员,你打不断我。如果此时irq pin来了呢?来了也不理,正在办案,还敢来妨碍公务。


所以得出一个结论: IRQ模式只能被FIQ模式打断,FIQ模式下谁也打不断。


在打不断的情况下,irq pin 或fiq pin随便你怎么发中断信号,都是白发。


所以除了fiq能打断irq以外,根本没有所谓中断嵌套的情况。


但是再怎么说irq pin 和fiq pin加起来也就2根引脚,这么多中断源,怎么办呢?不可能谁来了都直接敲门吧。


接下来该说谁来给irq pin或者 fiq pin发信号。从上文可以看到,可能是老板客户,也可能是公安。在ARM中,这个事情由中断控制器管理。


拿最简单的2410/2440的中断控制器举例,中断控制器加一个子中断控制器,还有一个外部中断控制器管理了50多个中断资源,说穿了有50多个脚。这些脚除了外部中断都是规定了功能的,比如WDT、LCD、DMA等,这个功能不能改,因为2410/2440内部硬件连线已经决定了。


当WDT和DMA中断都到来时,会被送到SRCPND寄存器中,两个中断都在里面,到底把哪一个送给ARM呢?这个时候先看INTMOD,也就是中断模式寄存器:哪个中断被设置成快速中断,哪个就被送上去;如果两个都被设置为快速中断呢?这不可能,因为同一时间只能有一个中断可以被设成快速中断。所以,如果有快速中断,这个时候直接给fiq pin发中断信号,打断ARM。


要是没有快速中断呢,这个时候就看INTMSK,看WDT和DMA有没有被屏蔽,如果DMA在INTMSK被屏蔽,只有WDT继续向上送,如果都没有屏蔽,那么他们两个同时进入优先级寄存器PRIORITY,在这里根据优先级设置,一定会分出一个高一个低的优先级出来,优先级高的那个被送到INTPND寄存器,所以INTPND随时随地有且只有一个中断在里面。只要INTPND里面有中断,irq pin就不会一直不断给ARM发中断信号,当第一次发的时候,中断了ARM,这个时候ARM进入相应的异常向量并处于IRQ模式。


此时,INTPND仍然不断的通过irq pin向ARM发中断信号,但是此时ARM已经处于IRQ模式,不会理睬你。当你中断处理完,要退出IRQ模式,这个时候要小心,如果退出IRQ模式之前不清除INTPND里面的中断位,刚退出IRQ模式,又会被中断,因为INTPND一直在发中断信号。所以在退出IRQ模式前一定要清除INTPND里面的中断位。


光清除INTPND里面的位还不行,因为SRCPND里面WDT和DMA的中断在,当你刚清除完INTPND,结果SRCPND里面又选了一个中断出来送到INTPND里面。所以正确的处理方法是退出IRQ模式之前,先清除SRCPND里相应的中断位,再清除INTPND里相应的位。请注意,SRCPND里面可能有多个位,所以清除你已处理过的中断就行,而INTPND里面只可能有一位,直接清掉即可。


再说说Linux的情况。Linux不用FIQ,只用到了IRQ。但是我们有时候一个中断需要处理很长时间,我们需要占用IRQ模式那么长的时间吗?不需要,linux在IRQ模式下只是简单的记录是什么中断,马上切换回SVC模式,换句话说,linux的中断处理都是在SVC模式下处理的。


那么中断号是怎么来的呢?它在ARM上固定死了,相应的中断号只有一个办法得到:查询irqs.h 。先用一个中断号注册一个中断处理程序,当中断发生的时候,Linux怎么知道是我这个中断号发生的中断呢?在处理中断的时候,先读取INTPND,根据需要再读取EINTPEND或SUBSRCPND计算出一个中断号,相应的处理算法在get_irq_nr_base这个宏中。irqs.h中的中断号就是根据这个算法把每个中断号算出来的。

关键字:ARM 引用地址:【ARM学习笔记】ARM中断嵌套模式理解

上一篇:S3C2440上MMC/SD卡驱动分析(二)
下一篇:uCOS-II的中断-ARM7实现中断嵌套的方法探究

推荐阅读

据韩媒的消息显示,如果三星能够成功量产QD-OLED基板,那么三星将会在2020年将目前三星显示八代L8-1面板线转为QD-OLED生产线。据估计,三星对QD-OLED基板生产的投资金额或将超过88亿美元。如果三星真的将在QD-OLED领域进行投资,那么超过600亿的资金也是一笔相当大的支出了。但对此,三星显示显然也比较有信心。  从名称来看,它由两部分组成,分别是前...
1,实物照片 2,Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件) 元件清单:1. AT89C522. 40P底座3. 8P底座4. 5MM LED*2(红色、绿色)5. 3MM LED(黄色)6. 12M晶振7. 30P瓷片电容*28. 10uf电解电容9. 10K电阻*210. 1K电阻*511. 16P液晶底座12. 103电位器*213. ...
今年下半年,一加唯一旗舰一加8T上市开卖,起售价3399元(8GB+128GB)。一加8T开卖后,一加将精力专注到新旗舰的开发上,那就是明年要发布的一加9系列。10月22日消息,据Android Central报道,一加9系列预计会提前发布,代号“Lemonade”,中文含义是“柠檬味汽水”。Android Central得到的消息是一加9系列新品发布会将于3月中旬举行,比往年一加旗舰发...
近年来,AIoT技术不断积累与升级,加之海内外多因素驱动,处于不同发展水平的领域和行业交替式地不断推进AIoT产业链逐渐完善和发展成熟,带动了全球AIoT行业整体呈现爆发式增长态势。尤其是在疫情冲击期间,除了在线办公外,全球还出现了云上课、云卖房、云卖车、云养殖等方式的改变,让更多人意识到AIoT的重要性,这也加快推动进入了“云时代”。解决互联...

史海拾趣

问答坊 | AI 解惑

长期供应示波器TDS794D/TDS684A/HP54810A

一、 综合测试仪 R&S CMU200(可测GSM900/1800);Agilent8960 E5515B(可测GSM900/1800/1900/GPRS);Agilnet8960 E5515C(OPT:002、003,可测GSM、CDMA);R&S CMD55(可测900/1800);R&S CMD60(DECT测试仪);MT8801B(PHS测试仪); ...…

查看全部问答∨

【藏书阁】滤波器设计示例(利用Matlab)

1、Matlab 设计 IIR 基本示例.........................................................................................................1 (1)直接设计数字滤波器....................................................................... ...…

查看全部问答∨

wince串口驱动接收不稳定问题

我现在的2440的串口驱动有这么一个问题,在低波特率(9600)的时候,接收数据正常。在高波特率(57600)的时候就就异常,比如正常的数据应该是AB,实际上接收到的是0FFFFFFAB,就是前面多了0FFFFFF。我怀疑是串口接收部分的寄存器配置不对,但是一 ...…

查看全部问答∨

流明学习笔记之五也谈#include

这个#include以经是天天见了,但学习LM3S8962开发板,不得不说下,要不程序没法进行下去。基础没搞懂是吧,你后来都白搭   我是用开发板光盘上地库,这是个前提哈,因为你这个如果同我地不一样我的程序下进你的板子会编译不了地   ...…

查看全部问答∨

STM32USBSPEAKER例程的问题

STM32 USB SPEAKER例程的问题 在UM0424的usb speaker程序里面,speaker作为一个OUT端点,数据是从pc发到stm32,stm32是作为接收数据的, 资料中说:“同一寄存器中的DTOG_RX位用来标识接收同步端点,DTOG_TX位用来标识发送同步端” 但是 ...…

查看全部问答∨

数控电压源的设计

输出电压 0~9.9V,步进电压值 0.1V,输出纹波电压≤10mv,输出电流 5A。 请各位大虾帮忙一下 。。 最好完整的有电路图。…

查看全部问答∨

IHS:仿冒IC让上千亿美元市场蒙受风险

本帖最后由 jameswangsynnex 于 2015-3-3 20:03 编辑 根据市场研究机构 IHS iSuppli 的最新调查,有五种最常见的仿冒半导体元件,每年会为营收规模高达1,690亿美元的全球电子产业供应链带来潜在风险;这五种元件包括类比IC、微处理器、记忆体、可 ...…

查看全部问答∨

F28027驱动LCD12864的问题,请教大家,很急的

现在用F28027驱动12864,按照时序进行编程,实在找不到问题,但是就是不能显示,求大家帮帮忙看一下,谢谢了 #include<DSP28x_Project.h> #define CS GpioDataRegs.GPADAT.bit.GPIO5 #define SID GpioDataRegs.GPADAT.bit.GPIO6 #define ...…

查看全部问答∨

偏置电压怎么设置

请问一下,怎么设计偏置电压,这个我们的要求是偏置电压要达到0到3v,可调…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved