历史上的今天
返回首页

历史上的今天

今天是:2025年04月22日(星期二)

正在发生

2020年04月22日 | 可能是最通俗易懂的方式讲解ARM中断原理以及中断嵌套

2020-04-22 来源:eefocus

几天前一个学生问我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中的中断号就是根据这个算法把每个中断号算出来的。

推荐阅读

史海拾趣

B&B Electronics Manufacturing Company公司的发展小趣事

随着科技的不断进步,B&B公司意识到,要在竞争激烈的电子行业中立足,必须不断进行技术革新和产品升级。因此,公司加大了在研发上的投入,推出了一系列具有创新性的产品,如智能无线M2M和物联网连接解决方案。这些产品不仅提升了数据传输的效率和稳定性,也为客户提供了更加便捷和高效的解决方案。

Carling Technologies公司的发展小趣事

Carling Technologies于1920年创立,早期专注于电气和电子开关以及组件的制造。凭借创始人的远见卓识和团队的努力,公司逐渐在行业中崭露头角。在创立初期,Carling Technologies就以其高质量的产品和创新的设计赢得了客户的信赖。通过不断的研发和技术升级,公司逐渐在电气和电子开关领域建立了自己的地位。

Cressall Power Resistors公司的发展小趣事

在电子行业的早期,Cressall Power Resistors公司以其对电阻技术的深入研究而脱颖而出。公司研发团队通过不懈的努力,成功开发出一种新型的功率电阻器,具有更高的耐热性、更低的电阻值变化率以及更长的使用寿命。这一技术突破迅速得到了市场的认可,公司因此获得了大量的订单,业绩迅速增长。随着技术的不断完善和产品的持续升级,Cressall逐渐在功率电阻器市场树立了技术领先的地位。

Cynergy 3公司的发展小趣事

为了进一步扩大市场份额,Cynergy 3制定了国际化发展战略。公司积极参加国际展会和会议,与全球各地的客户和合作伙伴建立联系。同时,Cynergy 3还在全球范围内设立了多个分支机构和服务中心,以便更好地为客户提供服务。这些努力使得Cynergy 3的产品逐渐进入了国际市场,并赢得了众多国际客户的青睐。

Highland Electronics Co Ltd公司的发展小趣事

在追求技术创新和商业成功的同时,High Tech Chips Inc还积极践行环保和可持续发展理念。公司致力于开发绿色、低碳的芯片产品和技术解决方案,减少生产过程中的能源消耗和环境污染。同时,公司还积极参与社会公益活动,支持教育、环保等领域的项目发展。这些举措不仅提升了公司的社会形象和品牌价值,也为公司的长远发展注入了新的动力。

请注意,以上故事均为虚构内容,旨在展示电子行业高科技芯片公司可能的发展路径和策略。在实际情况中,不同公司的发展故事会因其独特的背景、资源和市场环境而有所不同。

Elektron公司的发展小趣事

Elektron公司一直注重技术研发和创新投入,致力于在行业中保持领先地位。公司不断推出具有创新性和领先性的产品,如高性能的电池充电器、先进的焊接和切割设备等。这些产品的推出不仅提高了公司的市场竞争力,也推动了整个行业的发展和进步。同时,Elektron还积极参与行业标准的制定和推广工作,为行业的健康发展做出了重要贡献。

问答坊 | AI 解惑

关于嵌入式系统--献给热爱此道的初学者们

如何学习嵌入式系统(基于ARM平台) 前言    网上看到众多网友都问了关于嵌入式系统方面的很多问题,很多都可在这里找到答案,希望我的这篇文章能给他们以启发。也请大家不要轻易转载。 一、嵌入式系统的概念     &n ...…

查看全部问答>

Linux V0.11 源程序

能把Linux V0.11移到AT89S52上吗? 本来我有一份Linux V0.11完全注解,想一起打包发过来但我没找到.…

查看全部问答>

热招进行中- LSI 上海研发中心

Please submit your Resume to China.Recruiting@lsi.com 1)  Analog Design Engineer                               D ...…

查看全部问答>

GPRS问题

GPRS通信: S3C2410+ucos-ii操作系统+lwip协议,实现通过GPRS网络将数据传送到远程控制终端,请问由于我要将数据通过GPRS模块MC35I上传到GPRS网络,在经过INTERNET网传输到远程主机,那么我还需要初始化网卡CS8900A吗?…

查看全部问答>

3D电视:赤裸的商业利益诉求?

本帖最后由 jameswangsynnex 于 2015-3-3 20:03 编辑 几年来,我已经从一个技术至上主义者变成技术节制主义者。面对最近轮番炒作的3D电影、3D电视时,我没有任何激动。虽然调研机构DisplaySearch说,2008年3D电视出货70 万台,10年后是这样的:3D ...…

查看全部问答>

新手求助,用画刷画图的问题

    hBr = (HBRUSH) GetStockObject (BLACK_BRUSH);     // hBr = (HBRUSH) GetStockObject (RGB(255,0,0)); 把BLACK_BRUSH改成RGB(255,0,0)为什么不行呢???     hOldBr = (HBRUSH) SelectObject (hdc, hBr); ...…

查看全部问答>

申请试用开发板

计划用在新电源的控制上 设备类型:逆变电源 主要参数:200kw/50KHZ…

查看全部问答>

POS机套件 有人在做吗?

很想做,但是能力。。有人在做吗?我有一摞子问题…

查看全部问答>

求友晶公司的TRDB-D5M

现在有一块DE2-70板子,求一块闲置的友晶公司的TRDB-D5M,有的带价。…

查看全部问答>