您的位置:首页 > 其它

arm 异常处理

2009-04-27 17:14 246 查看
l ARM有3种控制程序流程:

1. 正常执行过程,每执行一条ARM指令,PC增加4字节;每执行一条THUMB指令,PC增加2字节;
2. 跳转指令,B执行跳转操作,BL执行跳转操作,保存子程序返回地址,BX执行跳转,根据目标地址最低位可以切换到THUMB状态;BLX执行以上3种,跳转,保存,切换。
3. 异常中断发生。执行完当前指令,跳转到相应的异常中断处理程序,同时保存当前执行现场,中断执行完成,返回执行现场的下条指令。
各种异常对应不同寄存器,当多个异常发生时,由优先级响应处理

异常类型
具体含义
复位
当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。
未定义指令
当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真。
软件中断
该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。
指令预取中止
若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。
数据中止
若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。
IRQ(外部中断请求)
当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。
FIQ(快速中断请求)
当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。
优先级
异 常
1(最高)
复位
2
数据中止
3
FIQ
4
IRQ
5
预取指令中止
6(最低)
未定义指令、SWI
当系统运行时,异常可能会随时发生,为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理,采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序,当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序,当异常处理完成以后,返回到主程序继续执行

异常向量地址显示如表2.9。

表2.9 异常向量表

地 址
异 常
进入模式
0x0000,0000
复位
管理模式
0x0000,0004
未定义指令
未定义模式
0x0000,0008
软件中断
管理模式
0x0000,000C
中止(预取指令)
中止模式
0x0000,0010
中止(数据)
中止模式
0x0000,0014
保留
保留
0x0000,0018
IRQ
IRQ
0x0000,001C
FIQ
FIQ
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: