ARM异常中断机制

ARM异常中断机制

ID:44713587

大小:69.00 KB

页数:4页

时间:2019-10-25

ARM异常中断机制_第1页
ARM异常中断机制_第2页
ARM异常中断机制_第3页
ARM异常中断机制_第4页
资源描述:

《ARM异常中断机制》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、ARM9(以S3C2410为例)中断机制一、ARM异常机制介绍ARM9处理器有7种工作模式。分别是用户模式(usr):ARM处理器正常的程序执行状态。快速中断模式(fiq):用于高速数据传输或通道处理。外部中断模式(irq):用于通用的中断处理。管理模式(svc):操作系统使用的保护模式。数据访问终止模式(abt):当数据或指令预取终止时进入该模式。系统模式(sys):运行具有特权的操作系统任务。未定义指令中止模式(und):当未定义的指令执行时进入该模式。每种模式通过5位二进制编码进行标示:用户模式10000快速中断模式10001外部中断模式10010管理模式10011数据访问终止模式

2、10111未定义指令中止模式11011系统模式11111模式编码存放在CPSR(程序当前状态寄存器)中的[4:0]。快速中断模式、外部中断模式、数据访问终止模式、未定义指令中止模式、管理模式称为异常模式。异常类型具体含义复位当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。未定义指令遇到不能处理的指令时,产生未定义指令异常。软件中断该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。指令预取中止若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指

3、令预取中止异常。数据中止若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。IRQ(外部中断请求)当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。FIQ(快速中断请求)当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。当多个异常发生时,处理器根据优先级进行处理。优先级1(最高)复位2数据中止3FIQ4IRQ5预取指令中止6(最低)未定义指令、SWI异常中断发生时,处理器执行完当前的指令,需要保存当前执行现场,切换到相应的异常模式,并跳转到相应的异常中断处理程序。中断处理完成

4、后,处理器返回现场执行下条指令。异常处理一般过程如下:(1)把当前工作模式中的下一条即将运行的指令地址保存到R14中;(2)保存当前CPSR到SPSR(保存程序状态寄存器);(3)改写CPSR中的工作模式为当前产生异常的工作模式;(4)禁止IRQ(如果进入FIQ则禁止FIQ);(5)跳转到相应异常向量表入口;如果是复位异常处理会禁止所有中断,另外由于不用返回,因此不需要作(1)(2)步。以上的异常处理操作都是由处理器自动完成的。二、异常向量表Linux内核启动时,向量表的创建过程为:init/main.c->start_kernel()->trap_init()。trap_init函数位

5、于/arch/$(ARCH)/kernel/traps.c中。trap_init函数中向量表创建的相关代码如下:unsignedlongvectors=CONFIG_VECTORS_BASE;……memcpy((void*)vectors,__vectors_start,__vectors_end-__vectors_start);memcpy((void*)vectors+0x200,__stubs_start,__stubs_end-__stubs_start);其中CONFIG_VECTORS_BASE是向量表的基地址。在ARMV4及V4T以后的大部分处理器中,向量表可以有两个位置

6、:一个是0,另一个是0xffff0000。通过CP15协处理器c1寄存器中V位(bit[13])控制。V和异常向量表的对应关系如下:V=0       ~       0x00000000~0x0000001CV=1       ~       0xffff0000~0xffff001CCONFIG_VECTORS_BASE的值在内核的相关配置文件中定义。比如在/arch/arm/configs/s3c2410_defconfig中CONFIG_VECTORS_BASE=0xffff0000。异常向量表存放在__vectors_start至__vectors_end定义的空间内。异常向量

7、表的逻辑结构(8*4个字节)为:异常类型工作模式地址复位管理模式0x00000000未定义指令未定义指令中止模式0x00000004软件中断管理模式0x00000008中止(预取指令)数据访问终止模式0x0000000C中止(数据)数据访问终止模式0x00000010保留0x00000014IRQ外部中断模式0x00000018FIQ快速中断模式0x0000001C异常向量表的物理结构位于arch/arm/kernel/entry-

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。