Chinaunix首页 | 论坛 | 博客
  • 博客访问: 53577
  • 博文数量: 10
  • 博客积分: 365
  • 博客等级: 一等列兵
  • 技术积分: 125
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-07 16:28
文章存档

2012年(3)

2011年(7)

分类: 嵌入式

2011-07-21 16:18:31

一、进入异常中断
当一个异常出现以后,ARM微处理器会执行以下几步操作:
1、将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+8,与异常的类型有关);
2、将CPSR复制到相应的SPSR中。
3、根据异常类型,强制设置CPSR的运行模式位。
4、强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。还可以设置中断禁止位,以禁止中断发生。
ARM微处理器对异常的响应过程用伪码可以描述为:
1.R14_ = Return Link
2.SPSR_ = CPSR
3.CPSR[4:0] = Exception Mode Number
  CPSR[5] = 0 ;当运行于ARM 工作状态时
  If == Reset or FIQ then;当响应 FIQ 异常时,禁止新的FIQ 异常
    CPSR[6] = 1
    CPSR[7] = 1
4.PC = Exception Vector Address
 
二、退出异常中断
异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:
1、将连接寄存器LR的值减去相应的偏移量后送到PC中。
2、将SPSR复制回CPSR中。
3、若在进入异常处理时设置了中断禁止位,要在此清除。
可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。
阅读(1730) | 评论(0) | 转发(0) |
0

上一篇:处理器硬件学习

下一篇:C语言深入分析

给主人留下些什么吧!~~