历史上的今天

今天是: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实现中断嵌套的方法探究

推荐阅读

        当前网信领域正经历着云计算、大数据、物联网、AI等新业态、新需求交叉融合式的快速发展,而操作系统作为一个强生态属性的产业,面临着更高的要求,也迎来了更为广阔的发展空间。在此背景下,近日在北京举办的国产自研智能终端操作系统2018生态发展推进会暨中关村智能终端操作系统产业联盟(简称“ZOSA”)第二次成员大会,彰显出重要意义...
μc/os移植的条件uCOS II的移植需要满足以下要求:   1)处理器的C编译器可以产生可重入代码:可以使用C调用进入和退出Critical Code(临界区代码);   2)处理器必须支持硬件中断,并且需要一个定时中断源;   3)处理器需能容纳一定数据的硬件堆栈;   4)处理器需有能在CPU寄存器与内存和堆栈交换数据的指令。移植需要完成的工作CPU的接口部...
本周早些时候,日本媒体《日刊工业新闻》报道,索尼将为苹果提供 OLED 微显示器,以用于其传闻已久的 AR / VR 眼镜。此后,该报道得到了显示器行业分析师 Ross Young 的证实,他说有多个消息来源显示,苹果确实计划将索尼的微型显示器技术用于其头戴式产品。根据嵌入式视觉技术供应商 FRAMOS 的说法,索尼的 OLED 微显示器是小型,尖端的显示...
经检测,RF前端混频器故障,导致测不到信号,自校准报错。维修过程更换损坏器件,工程师调整指标。维修结果仪器自检正常,测试信号正常,完成修复。

史海拾趣

问答坊 | AI 解惑

史上最奢侈的煤油灯

设计师则将现代实验器皿和这一老工具结合起来进行设计——透亮的试管内部,由不锈钢包裹着的纤维灯芯浸入清澈的油里,并将这一助燃物质充分吸收,让头顶会随风摇曳的火苗照亮小屋。但是偶可不建议大家买这东西回家玩浪漫,因为如果是正品原装的话, ...…

查看全部问答∨

基底噪声异常涨起来---------急,谢谢!

关于基底噪声异常涨起来很大幅度——这个问题一直困扰了我,都急晕了,但不知道原因在哪,也找不到解决的办法。   信道链路就单看了:天馈下来电缆连接输入给放大器组件再输出信号。 单独测天馈下来输出的基底噪声不高;断开天馈,单独 ...…

查看全部问答∨

麦克风没有声音

我把sndvol32文件放进C:\\WINDOWS\\system32,音量图标是出现了,可是与别人语音的时候还是提示麦克风没有声音,这到底是怎么回事呀?…

查看全部问答∨

关于evc

我想问下,我现在想用evc4.0开发wince的程序,还需要什么软件辅助?还需要学习哪方面的知识? 我现在知识对MFC,Wince的环境比较熟悉,其他的请高手赐教了~…

查看全部问答∨

用计数器的输出做分频,怎样最小化时钟扭斜?

由于系统时钟是50M的,想得到如1K的低速时钟给其它模块,所以写了计数器分频。但综合时总提示:Warning: Found 1 node(s) in clock paths which may be acting as ripple and/or gated clocks -- node(s) analyzed as buffer(s) resulting in clock ...…

查看全部问答∨

求助msp430的中断返回问题

我看到大部分的论坛上都说用RETI可以从中断中返回原程序,原来用51时也可以,可是我编写了一个程序后编译时会出现RETI未定义的错误,跪求大大解决下 这是个键盘的源程序 源程序:…

查看全部问答∨

MSP430外带高速AD

在做毕业设计,一个系统的测试信号和实际信号频率上差距有点大,实际信号脉宽在1/3M-1/4M s左右,要进行AD采集。刚开始,只要AD转换速率跟上就行了,后来发现,其实到底不是AD的限制,而是IO口的限制。系统读取的速度没有那么快!读io口3个mclk,赋 ...…

查看全部问答∨

请问有人可以提供达芬奇技术(DM642 DM6446)的相有偿关培训吗

请问有对DM642和DM6446比较熟悉的吗?我们想请对这块比较熟悉的人到我们这来有偿培训一下,可能需要几天时间,有兴趣、有时间的请回帖或私下联系我。主要是软件培训。邮箱maqing4909@163.com 培训地点:长沙 时间:看进度要求 培训内容: (1) ...…

查看全部问答∨

参与HELPER2416开发板助学计划:呼吸灯作业,裸机编程教程

    从来没弄过linux编程,尝试了下发现完全hold不住,在yuanlai那知道了用SD卡的裸机编程方法,但是因为没用过arm-linux-gcc,不会写makefile,就用了yuanlai的试了下,但是yuanlai的是针对汇编的,我用C语言编写的不晓得为啥编译出来的 ...…

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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