中断异常处理流程_第1页
中断异常处理流程_第2页
中断异常处理流程_第3页
中断异常处理流程_第4页
中断异常处理流程_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机体系结构中,异常或者中断是处理系统中突发事件的一种机制,几乎所有的处理器都提供这种机制。 异常主要是从处理器被动接受的角度出发的一种描述, 指意外操作 引起的异常。 而中断则带有向处理器主动申请的意味。 但这两种情况具有一定的共性, 都是 请求处理器打断正常的程序执行流程,进入特定程序的一种机制。 若无特别说明, 对“异常 ” 和“中断 ”都不作严格的区分。本文结合经过实际验证的代码对 ARM9 中断处理流程进行分 析,并设计出基于 S3C2410 芯片的外部中断处理程序。1. 异常中断响应和返回系统运行时, 异常可能会随时发生。 当一个异常出现以后, ARM 微处理器会执行以 下几步操

2、作:1) 将下一条指令的地址存入相应连接寄存器LR ,以便程序在处理异常返回时能从正确的位置重新开始执行。2) 将 CPSR 复制到相应的 SPSR 中。3) 根据异常类型,强制设置 CPSR 的运行模式位。4) 强制 PC 从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处 理程序处。这些工作是由 ARM 内核完成的 ,不需要用户程序参与。异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:1) 将连接寄存器 LR 的值减去相应的偏移量后送到 PC 中。2) 将SPSR复制回CPSR中。3) 若在进入异常处理时设置了中断禁止位,要在此清除。这些工作必须由用户在中断处理函数

3、中实现。为保证在 ARM 处理器发生异常时不 至于处于未知状态, 在应用程序的设计中, 首先要进行异常处理。 采用的方式是在异常向量 表中的特定位置放置一条跳转指令,跳转到异常处理程序。当 ARM 处理器发生异常时,程 序计数器 PC 会被强制设置为对应的异常向量,从而跳转到异常处理程序。当异常处理完成 以后, 返回到主程序继续执行。 可以认为应用程序总是从复位异常处理程序开始执行的, 因 此复位异常处理程序不需要返回。2. 异常处理程序设计2.1 异常响应流程由于向量表的限制,只能有一条指令B完成32MB范围内的跳转,并不能保证所有的异常处理函数都位于32MB范围内。为了扩展跳转范围,需要二

4、次跳转才能把异常处理函数的地址传送给 PC。异常处理调用关系如图1所示。三星公司网站提供了test2410_r11软件包,其中2410init.s有如下代码:Han dlerXXXsubsp,sp,#4;减少sp,保存跳转地址stmfdsp!,rO;将工作寄存器压入堆栈ldr r0,=HandleXXX ;将 HandleXXX 地址放入 r0ldr rO,rO;将中断程序入口地址放入r0str rO,sp,#4;将中断程序入口地址压入堆栈ldmfd sp!,rO,pc;将工作寄存器和中断程序入口地址弹出到r0和PCf1Ei llaEidkrf OB IhncIkrlkQ如zH Humllrr

5、rbJiKnlb ItaulkrSWI伽dHB HjndktUncfOtWJLJMitncirrtRQHamiickiyHndteSW I;lUndte* ladef图1异常处理调用并且在RAM中定义了存有中断程序入口地址表_ISR_STARTADDRESS :AREA RamData, DA TA, READWRITEA _ISR_STARTADDRESSHan dleReset#4Han dleU ndef#4Han dleSWI# 4Han dlePabort#4Han dleDabort#4Han dleReserved#4Han dleIRQ通 常 HandlerXXX 位 于 程

6、序 入 口 地 址 32MB 范 围 内 , HandleXXX 是 以 _ISR_STARTADDRESS 为基地址的 RAM 中地址。该代码主要实现跳转功能,把异常处理 程序地址 HandleXXX 送到 PC 中。例如产生 IRQ 中断时, PC 会被强制设置为 0x18 ,执行 指令: b HandlerIRQ在 HandlerIRQ 程序段内,处理器做一些必要的处理, 就会将 _ISR_STARTADDRESS 表中存放的IRQ入口地址送入 PC,然后开始执行相关中断程序。 由于_ISR_STARTADDRESS 表存放在 RAM 中,后面的 C 语言程序可以方便地更改相关中断服务程

7、序的内容。2.2 异常分支系统可能存在多个 IRQ/FIQ 的中断处理程序。 为了从向量表入口处的跳转最终能找 到正确的中断处理程序, 需要设计一套处理机制和方法来实现。可以在 ARM 的异常向量表 之外, 增加一张关联中断控制器的向量表, 向量表中的内容对应每个具体的中断源, 可以协 助跳转到不同的中断处理程序。当响应外设的一个中断请求时,首先触发 ARM 核的中断,进人中断程序,再通过 中断控制器识别中断源,使 PC 能够自动获得中断处理程序的地址。有的芯片支持特殊的硬 件分支功能, 依据中断源自动跳转到向量表的相应地址, 多数情况下是用软件来处理异常分 支。在 S3C2410 体系中,中

8、断的调用可以看成是经历了 2 次“中断向量表 ”的查询。 2410init.s 中的以下代码完成功能就是查询中断偏移寄存器 INTOFFSET ,得到当前中断的中 断号,并根据中断号再调用相关的中断服务程序。IsrIRQsubsp,sp,#4stmfdsp!,r8-r9ldrr9,=INTOFFSETldrr9,r9ldrr8,=HandleEINT0addr8,r8,r9,lsl #2ldrr8,r8str r8,sp,#8ldmfd sp!,r8-r9,pc为了方便C程序使用中断,将IsrIRQ设为IRQ的中断服务程序。ldr r0,=HandleIRQldrr1,=IsrIRQstrr1

9、,r0其中 HandleEINT0 是用户自己开辟的一块存储空间的起始地址, 后面按次序存放中 断异常处理程序的地址, 也可以理解为二级中断向量表。 IsrIRQ 从中断控制器处获取中断源 信息,然后再从二级中断向量表中的对应地址单元得到异常中断处理程序的入口地址,完成异常响 应的 跳 转。 二级 中 断 向量表 一般 位于 HandleFIQ 的 后面 , 也就是 以 _ISR_STARTADDRESS + 0x20为起始地址,这里定义了S3C2410处理器所有中断源的相关中断处理处理程序入口。这种方法的好处是用户程序在运行过程中能够动态改变异常向量。2.3 中断函数设计为了方便高级语言设计

10、中断处理函数,标准的 ARM 指令编译器提供了一个用来声 明中断处理函数的关键字-irq,使用此关键字声明的函数可以被编译器识别为中断处理函数。编译后的代码在处理异常事件前保存现场信息, 处理异常事件后对现场信息进行恢复。 中断 函数设计如下:static void _irq Eint3Int(void)ClearPending(BIT_EINT3);Uart_Printf(EINT3 interrupt is occurred.n);num_int=3; 设置标志位定 义 中 断 处 理 程 序 入 口 地 址 : #define pISR_EINT3(*(unsigned*)(_ISR_S

11、TARTADDRESS+0x2c)在 初 始 化 程 序 , 引 用 代 码 pISR_EINT3=(U32)Eint3Int , 即 可 定 义 地 址 _ISR_STARTADDRESS+0x2c 内容是 Eint3Int 的地址,外部中断 3产生请求时即可调用中断 处理函数 Eint3Int 。3外中断初始化程序设计S3C2410X的中断控制寄存器能接收来自56个中断源的请求。内部的外围模块和外部管脚产生的多个中断请求通过中断控制器冲裁后,向ARM920T核发出FIQ或者IRQ中断。ARM内核只有2个外部中断输入信号 nIRQ和nFIQ,在具体嵌入式系统中,需要用中 断控制器管理多个外部

12、中断源,选择其中一个中断,通过nIRQ或nFIQ向ARM内核发出中断请求,如图2所示。图2 FIQ/ IRQ中断处理过程ARM920T内核可以识别正常中断请求和快速中断请求两种类型的外部中断,中断 的行为模式由中断控制器来设置。S3C2410X的中断控制器包括 6类寄存器:中断源状态寄存器、中断模式寄存器、中断屏蔽寄存器、优先级寄存器、中断状态寄存器,以及中断偏移 寄存器。在初始化程序中,需要选择相应管脚的功能,在此定义GPF3为EINT3模式,通过外部中断控制寄存器 EXTINT0设定EINT3是下降沿触发方式,通过设置中断源悬挂寄存器 SRCPND、中断悬挂寄存器INTPND和中断屏蔽寄存器 INTMSK开启EINT3。中断模式寄 存器和中断优先级寄存器采用系统默认方式。具体代码实现如下:void Ei nt_ln it(void)rGPFCON = (rGPFCON & 0x3f0c)|(17);rEXTINTO = (rEXTINTO & (0x712) | 0x212; plSR_EINT3=(U32)Ei nt3l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论