ARM9 2410移植之ARM中断原理, 中断嵌套的误区,中断号的怎么来的

发布者:740322lwj最新更新时间:2022-06-07 来源: eefocus关键字:ARM9  移植  ARM  中断  中断嵌套  中断号 手机看文章 扫描二维码
随时随地手机看文章

几天前一个学生问我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发信号呢?上文中可以看到,是老板的客户,也可能是公安。这个事情就是由中断控制器来管理。


拿最简单的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中的中断号就是根据这个算法把每个中断算一下得来的。


还有子中断、外部中断,电平触发、边沿触发等,以后再谈。

关键字:ARM9  移植  ARM  中断  中断嵌套  中断号 引用地址:ARM9 2410移植之ARM中断原理, 中断嵌套的误区,中断号的怎么来的

上一篇:at91sam9260 开发环境的建立
下一篇:s3c6410的UART设备驱动(1)

推荐阅读最新更新时间:2024-11-13 11:14

ARM 汇编 伪指令 MACRO及MEND
MACRO伪操作标识 宏定义的开始,MEND标识宏定义的结束。 用MACRO 及MEND定义一段代码,称为宏定义体,这样在程序中就可以通过宏指令多次调用该代码段 语法格式 MACRO {$label} macroname {$parameter {,$parameter}...} ;code ... ;code MEND 其中: $labelz在宏指令被展开时,label可被替换成相应的符号,通常是一个标号。在一个符号前使用$标识程序被汇编时将使用相应的值来替代$后的符号 Macroname为所定义的宏的名称 $parameter为宏指令的参数。当宏指令被展开时将被替换成相应的值,类似于函数中的形式参数。可以在宏定义时为参数指定相
[单片机]
openocd 命令行烧写ARM裸机程序
以前是用RVDS 的IDE来烧写调试ARM程序的,不过RVDS虽然是集成化的调试工具调试起来方便,但是有的时候只知其一,不知其二,只知道按部就班的来点击按钮,忽略了一些本质性的东西。而且RVDS还有一个不好的地方是它只能在windows平台下运行,不支持Linux OS。为了便于学习Linux,使用Openocd会是个不错的选择,可以学习gnu 汇编,Makefile编写,工具链命令行使用。 如果这些命令搞熟悉了,你还可以利用Qt 来做个自己的图形化界面烧写调试工具。(不过这只是个壳子而已,精髓在于openocd ,所以如果有时间你还可以分析一下Openocd的源码,因为它是开源的,开源的东西就是好,它可以满足你的好奇心,虽然有些
[单片机]
实时操作系统μC/OS-II在MCF5272的移植
  介绍了实时操作系统μC/OS-II的特点和内核结构,并首次实现μC/OS-II在Motorola嵌入式处理器MCF5272上的移值。      作为一个实时内核,μC/OS从1992年开始为人们熟悉,到现在已经发展为μC/OS-II。ΜC/OS-II最多支持56个任务,其内核为占先式,总是执行就绪态的优先级最高的任务,并支持Semaphore(信号量)、Mailbox(邮箱)、Message Queue(消息队列)等多种常用的进程间通信机制。与大多商用RTOS不同的是,μC/OS-II公开所有的源代码,并可以免费获得,对商业应用收取少量L IC ense费用。一般商用操作系统如VxWorks、pSOS、WinCE,购买费用动辄
[单片机]
实时操作系统μC/OS-II在MCF5272的<font color='red'>移植</font>
基于ARM的rfid如何设计成嵌入式的
引言 RFID利用了电磁波空间耦合、传播进行通信,以达到自动识别被标识对象,获取对象信息的目的。同其他一些识别技术相比,射频识别技术具有高效快捷、非接触、无污染、识别率高等突出优点。识别过程无需人工干预,可在恶劣环境下工作,能够应用到很多行业。 1.RIFD 读写器的硬件总体设计 图 1 读写器的硬件总体设计 RFID 系统主要由射频卡、读写器以及计算机系统组成。系统的工作原理如下:读写器通过天线发送出13.56MHz的射频信号,当射频卡进入读写器工作场时,天线产生感应电流,从而射频卡获得能量被激活并向读写器发送出自身编码等信息,读写器接收到来自射频卡的载波信号,对接收的信号进行解调和解码后发送至PC 机进行处理,PC
[单片机]
基于<font color='red'>ARM</font>的rfid如何设计成嵌入式的
ARM推台积电7nm打造,新款Cortex-A76抢攻个人计算机市场
硅智财权(IP)大厂安谋(ARM)抢在 Computex Taipei 2018 开幕前,于 1 日一口气发表了 3 款针对处理器的 Cortex-A76、绘图芯片的 Mali-G76、视讯编译码处理的 Mali-V76 的硅智财权产品。其中最受关切的,就是针对 Windows 操作系统的平板或笔记本电脑而来的 Cortex-A76。这显示 ARM 可为 Windows 操作系统下的设备提供更好效能的处理器产品。 有鉴于之前 ARM 与微软合作,推出基于 Windows 10 的运算平台,虽然可提供用户长达 20 小时的续航能力,以及随时连接上网的功能。 但说到运算效能,基于 ARM 所设计,运用于 Windows 10 个人计算
[半导体设计/制造]
基于ARM处理器LPC2142的高速数据采集卡设计方案
在瞬态信号测量和图像处理等一些高速、高精度的测量中,往往都需要进行高速数据采集。现在通用的高速数据采集卡(一般多是PCI卡或ISA卡)存在有安装麻烦、价格昂贵、受计算机插槽数量/地址/中断资源的限制、可扩展性差,而且在一些电磁干扰性强的测试现场无法专门对其进行电磁屏蔽,因而会导致采集的数据失真等缺点。 为此,本文给出了采用PHILIPS公司的一款LPC2142芯片(基于ARM7内核,内置了宽范围的USB2.0 Device全速串行通信接口)设计的数据采集卡的设计方案,从而有效解决了传统高速数据采集卡的上述缺陷。 1 基于ARM的数据采集卡系统结构 该系统主要由双通道模/数转换器AD9238、ARM微控制器LPC2142
[单片机]
基于<font color='red'>ARM</font>处理器LPC2142的高速数据采集卡设计方案
关于汇编ARM指令DCD
数据定义( Data Definition )伪指令 数据定义伪指令一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。 DCD ( DCDU ) 用于分配一片连续的字存储单元并用指定的数据初始化。 3、 DCD(或DCDU) 语法格式: 标号 DCD (或 DCDU ) 表达式 DCD (或 DCDU )伪指令用于分配一片连续的字存储单元并用伪指令中指定的表达式初始化。其中,表达式可以为程序标号或数字表达式。 DCD 也可用 & 代替。 用 DCD 分配的字存储单元是字对齐的,而用 DCDU 分配的字存储单元并不严格字对齐。 使用示例: DataTest DCD 4 , 5 , 6 ;分配
[单片机]
微软Windows再度拥抱ARM 突破英特尔、AMD双寡头
微软(Microsoft)曾尝试让Windows RT运行ARM(ARM)处理器,最后以失败告终,如今微软再结盟高通(Qualcomm),推出搭载高通ARM架构Snapdragon 835芯片的随时连结PC(Always Connected PC),这等于打破多年来由英特尔(Intel)及AMD(AMD) x86架构盘据的全球PC中央处理器(CPU)市场格局,让这块市场终于出现非x86架构新选择,另也是微软在面临苹果(Apple) iPad入侵NB市场下,借由推常时连网PC以期抵挡来自iPad对企业PC市场的持续入侵。   根据The Motley Fool网站报导,微软于2012年试图让Windows RT支援ARM处理器运行,
[半导体设计/制造]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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