ARM体系的异常处理

      当正常的程序执行流程出现暂停或者停止时,称之为异常,如处理一个中断请求,复位也是一种异常。MCU在处理异常之前,会将当前MCU的状态必须保留,当异常处理完成之后,可以保证程序可以继续执行。MCU支持多个异常同时发生,它将会按固定的优先级进行处理。

1.异常类型

ARM所支持的异常类型共有7种,其具体含义下所示。

                                                ARM体系结构所支持的异常

异常类型

含义

复位

当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执

未定义指令

当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真

软件中断

该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用

指令预取中止

若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常

数据中止

若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常

IRQ(外部中断请求)

当处理器的外部中断请求引脚有效,且CPSR中的1位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务

FIQ(快速中断请求)

当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常

2.异常处理流程

一般异常发生后,MCU都会进行一系列的操作,这些操作大部分是MCU自动完成的,一般的处理流程如下。

1、  拷贝CPSR到SPSR_

2、  设置适当的CPSR位: 改变处理器状态进入ARM状态;改变处理器模式进入相应的异常模式;设置中断禁止位禁止相应中断。

3、  更新LR_,这个寄存器中保存的是异常返回时的链接地址

4、  设置PC到相应的异常向量

ARM微处理器对异常的响应过程用伪代码描述如下。

R14_  =  Return Llink                //这个可以参看寄存器的说明,两个作用

SPSR_< Exception_mode >  =  CPSR

CPSR[4:0]  =  Exception  Mode  Number

CPSR[5] = 0 ;                      //AEM指令

If ==Reset or Fiq then      //只有在复位和FIQ模式下才会关闭FIQ中断

    CPSR[6] = 1 ;

    CPSR[7] = 1 ;                             //任何异常模式下都会关闭IRQ中断

PC = Exception Vector Address

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值