arm 异常处理

l         ARM3种控制程序流程:

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

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值