Chinaunix首页 | 论坛 | 博客
  • 博客访问: 611303
  • 博文数量: 263
  • 博客积分: 9025
  • 博客等级: 中将
  • 技术积分: 2557
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-01 17:42
文章分类

全部博文(263)

文章存档

2012年(4)

2011年(64)

2010年(47)

2009年(44)

2008年(99)

2007年(5)

我的朋友

分类:

2008-03-14 16:40:16

二、ARM 的异常处理

    当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。当异常中断处理程序执行完成后,程序返回到发生中断指令的下条指令处执行。在进入异常中断处理程序时,要保存被中断程序的执行现场,从异常中断处理程序退出时,要恢复被中断程序的执行现场。

1、引起异常的原因
    (1)、指令执行引起的异常
    软件中断、未定义指令(包括所要求的协处理器不存在是的协处理器指令)、预取址中止(存储器故障)、数据中止。
    (2)
、外部产生的中断
    复位、FIQIRQ

   2ARM中异常中断的种类

     (1)、复位(RESET)
     a、当处理器复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行,包括系统加电和系统复位。
     b
、通过设置PC跳转到复位中断向量处执行称为软复位。

     (2)、未定义的指令
    
ARM处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断,可以通过改异常中断机制仿真浮点向量运算。

    (3)、软件中断
    
这是一个由用户定义的中断指令(SWI)。可用于用户模式下的程序调用特权操作指令。在实时操作系统中可以通过该机制实现系统功能调用。

    (4)、指令与取终止(Prefech Abort)
    
如果处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,当被预取的指令执行时,处理器产生指令预取终止异常中断。

    (5)、数据访问终止(DATAABORT
    如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问终止异常中断。

    (6)、外部中断请求(IRQ)
    当处理器的外部中断请求引脚有效,而且CPSR的寄存器的I控制位被清除时,处理器产生外部中断请求异常中断。系统中个外设通过该异常中断请求处理服务。

    (7)、快速中断请求(FIQ
    
当处理器的外部快速中断请求引脚有效,而且CPSRF控制位被清除时,处理器产生外部中断请求异常中断。

   3、异常的响应过程
    
除了复位异常外,当异常发生时,ARM处理器尽可能完成当前指令(除了复位异常)后,再去处理异常。并执行如下动作:

     (1)、将引起异常指令的下一条指令的地址保存到新模式的R14,若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC4PC8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量,这样,异常处理程序就不需要确定异常是从何种状态进入的。例如:在软件中断异常SWI,指令MOV PCR14_svc总是返回到下一条指令,不管SWI是在ARM状态执行,还是在Thumb

态执行。
     (2)
、将CPSR的内容保存到要执行异常中断模式的SPSR中。(注意:如果通过程序修改CPSR进入异常模式,硬件将不会将CPSR保存到SPSR)
     (3)、设置CPSR相应的位进入相应的中断模式。
     (4)
、通过设置CPSR的第7位来禁止IRQ。如果异常为快速中断和复位。则还要设置CPSR的第6位来禁止快速中断。
     (5)
、给PC强制赋向量地址值。

    ARM处理器内核会自动执行以上几步,程序计数器PC总是跳转到相应的固定地址。

    如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态,则异常处理返回时,自动切换到Thumb状态,即中断处理只在ARM状态下处理。

阅读(507) | 评论(0) | 转发(0) |
0

上一篇:ARM基础一

下一篇:ARM基础三

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