收藏 分销(赏)

arm中断处理流程.doc

上传人:pc****0 文档编号:9010617 上传时间:2025-03-11 格式:DOC 页数:7 大小:273KB
下载 相关 举报
arm中断处理流程.doc_第1页
第1页 / 共7页
arm中断处理流程.doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述
ARM编程特别是系统初始化代码的编写中通常需要实现中断的响应、解析跳转和返回等操作,以便支持上层应用程序的开发,而这往往是困扰初学者的一个难题。中断处理的编程实现需要深入了解ARM内核和处理器本身的中断特征,从而设计一种快速简便的中断处理机制。需要说明的是,具体的上层高级语言编写的中断服务函数不在本文的讨论范围之内。   ARM处理器异常中断处理概述   当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行。在进入异常中断处理程序时,要保存被中断的程序的执行现场。从异常中断处理程序退出时,要恢复被中断的程序的执行现场。ARM体系中通常在存储地址的低端固化了一个32字节的硬件中断向量表,用来指定各异常中断及其处理程序的对应关系。当一个异常出现以后,ARM微处理器会执行以下几步操作:   1)保存处理器当前状态、中断屏蔽位以及各条件标志位;   2)设置当前程序状态寄存器CPSR中相应的位;   3)将寄存器lr_mode设置成返回地址;   4)将程序计数器(PC)值设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行。   在接收到中断请求以后, ARM处理器内核会自动执行以上四步,程序计数器PC总是跳转到相应的固定地址。从异常中断处理程序中返回包括下面两个基本操作:   1)恢复被屏蔽的程序的处理器状态;   2)返回到发生异常中断的指令的下一条指令处继续执行。   当异常中断发生时,程序计数器PC所指的位置对于各种不同的异常中断是不同的,同样,返回地址对于各种不同的异常中断也是不同的。例外的是,复位异常中断处理程序不需要返回,因为整个应用系统是从复位异常中断处理程序开始执行的。   支持中断跳转的解析程序   解析程序的概念和作用   如前所述,ARM处理器响应中断的时候,总是从固定的地址开始的,而在高级语言环境下开发中断服务程序时,无法控制固定地址开始的跳转流程。为了使得上层应用程序与硬件中断跳转联系起来,需要编写一段中间的服务程序来进行连接。这样的服务程序常被称作中断解析程序。   每个异常中断对应一个4字节的空间,正好放置一条跳转指令或者向PC寄存器赋值的数据访问指令。理论上可以通过这两种指令直接使得程序跳转到对应的中断处理程序中去。但实际上由于函数地址值为未知和其它一些问题,并不这么做。这里给出一种常用的中断跳转流程:   图1中断跳转流程图   这个流程中的关键部分是中断向量表,为了让解析程序能找到向量表,应该将向量表的地址固定化(编程者自定义)。这样,整个跳转流程的所有程序地址都是固定的,当中断触发后,就可以自动运行。其中,只有向量表的内容是可变的,编程者只要在向量表中填入正确的目标地址值就可以了。这使得上层中断处理程序和底层硬件跳转有机地联系起来。   解析过程示例   以一次IRQ跳转为例,假定中断向量表定义在0x00400000开始的外部RAM空间:   图2 中断解析示例流程   图2中实线表示的流程都用ARM汇编语言编写,一般作为boot代码的一部分放在系统的底层模块中。填写向量表的操作可以在上层应用程序中方便地实现,比如在C语言中: *( int *(0x00400018)) = (int) ISR_IRQ;这样就将IRQ中断的服务程序入口地址(0x00300260)填写到中断向量表中的固定地址0x00400018开始的4字节空间了。   如此一来,就可避免在应用程序中计算中断的跳转地址,并且可以很方便的选择不同的函数作为指定中断的服务程序。当然,在程序开发时要合理开辟好向量表,避免对向量表地址空间不必要的写操作。   解析程序的扩展   众所周知,在ARM处理器中会包含很多中断源,通常会在ARM内核外面扩展一个中断控制器来管理各种原因产生的中断。比如,三星公司的S3C4510B处理器中的IRQ/FIQ类型的中断源可以有21个,S3C44B0X有26个。这时候中断处理的原理还是一样的,无非是向量表更长,并且当一个中断触发以后,需要在解析程序里查询中断控制器的状态来确定具体的中断源,再根据中断源来读取向量表中的对应地址内容。其处理流程可用图3表示。   图3 中断解析的扩展   相比图2,图3中多了一级的跳转,也就是在第一次解析跳转到IRQ/FIQ服务程序中后,再进行第二次的解析_中断源的识别。   向量中断的处理   一些处理器在设计外扩的中断控制器时提供了一种叫做“向量中断”的中断跳转机制。这与前文叙述的扩展解析跳转流程有所不同,它不需要软件来识别具体的中断源,也就是不需要添加图3中的IRQ/FIQ服务程序,而完全由硬件自动跳转到对应的中断地址。其它跳转流程的原理都是一样的。这相当于扩展了ARM内核的硬件中断向量表,减小了中断响应延时。以S3C44B0X处理器的外部中断0为例,需要在其对应的硬件固定跳转地址0x00000020处添加指令:ldr pc,=HandlerEINT,使得程序跳转到其服务程序HandlerEINT0处执行。   图4  向量中断解析流程示例   结语   本文介绍的中断处理机制是嵌入式编程中常常采用的方法,其原理是通用的。当然,在实际开发中,需要根据系统处理器ARM内核的中断特征和处理器自身的中断控制器特点具体细化流程图中的各个步骤和改写参考代码。 arm 中断处理 1.   首先就是知道ARM状态下37个寄存器包括通用寄存器、程序计数器、状态寄存器。绿颜色的就是相应模式下的私有寄存器。就是说程序一般运行在系统和用户模式下,使用的是系统和用户模式下的通用寄存器,当有异常发生时,比如FIQ,那么系统将切换到FIQ模式下,相应的就会采用FIQ模式下的寄存器,其中绿颜色的就是只在FIQ模式下才会用到的寄存器。 2.   在模式切换的过程中,要保护系统和用户模式下的通用寄存器状态,以便在异常处理完成之后程序能正常返回。因为FIQ模式下R8-R14为其私有寄存器,所以切换到FIQ模式的过程中,系统和用户模式下的通用寄存器的R8-R14就不用保护了,所以减少了对寄存器存取的需要,从而可以快速的进行FIQ处理,故称为FIQ。这就是FIQ的私有寄存器比其它模式多的原因。切到FIQ模式需要保护的寄存器为R0~R7,切到SVC,IRQ,ABORT.和未定义模式需要保护的寄存器为R0~R12 3. 异常处理的动作。当然这都是CPU内核自己干的。以FIQ为例。 当CPU切入FIQ模式时, 第一,将原来执行程序的下一条指令地址保存到LR中,就是将R14保存到R14_fiq里面。 第二,拷贝CPSR到SPSR_fiq。 第三,改变CPSR模式位的值,改到FIQ模式。 第四,改变PC值,将其指向异常处理向量所指的下一条指令。 离开异常处理的时候, 第一,将LR(R14_fiq)赋给PC。 第二,将SPSR(SPSR_fiq)拷贝到CPSR。 第三,清除中断禁止标志(如果开始时置位了)。 4.异常中断向量 异常中断的向量地址 地址                 异常中断类型             入口时处理器的操作模式 0x00000000        复位               超级用户 0x00000004        未定义指令         未定义 0x00000008        软件中断           超级用户 0x0000000c        中止(预取指)     中止 0x00000010        中止(数据)       中止 0x00000014        保留                              保留 0x00000018        IRQ                                IRQ 0x0000001c        FIQ                                FIQ 异常中断优先级 中断 优先级 复位                                     最高 数据异常    FIQ IRQ 预取指异常中断 未定义指令和软件中断        最低 5.当发生IRQ中断时 第一,模式进入到IRQ里面。 第二,PC跳到0x00000018处运行。因为这是IRQ的中断入口。 第三, 通过0x00000018:LDR PC, IRQ_ADDR。跳转到相应的中断服务程序。这个里面就有个确定哪个中断源的问题了。那就有优先级的问题了。每个中断源会有自己的中断服务程序。 第四,得到中断源有硬件实现和软件处理两种方式。比如LPC21XX的就是利用硬件方式,为了利用向量中断控制器的优点,IRQ中断向量入口处代码做了修改,变成         0x00000018:LDR PC, [PC, #-0xff0]。     这条指令从内存映射地址0xfffff030处获得数据装载到PC,这样就能够直接从硬件中获得中断源。这样就减少了中断延迟。记得,三星的S3C44B0好象采用的是用软件确定中断源,因此要建立中断向量表。好久不用了,记不清了。 第五,得到中断源,就知道要跳到哪个中断服务程序去了。     一般都是这么定义的。Timer0_Handler HANDLER Timer0 。这种格式是调用一种宏定义,目的是保护现场,跳到中断服务程序。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服