当前位置:   article > 正文

ARM处理器异常与中断处理 学习总结_prefetchaborthandler

prefetchaborthandler

今天学习《ARM System Developer's Guide: Designing and Optimizing System Software》第9章 异常与中断处理,总结一下:

1. 异常处理

Q1. 异常和中断嘛关系啊?

       中断时异常的一种,中断两种:IRQ, FIQ。异常好多种呢?reset,data abort, FIQ,IRQ,prefetch abort, SWI, undefined 。ARM标准向量表中列出了以下异常:   

  1. exception mode offset of vector table
  2. reset SVC +0x00
  3. undefined UND +0x04
  4. SWI SVC +0x08
  5. prefetch abort ABT +0x0c
  6. data abort ABT +0x10
  7. undefined - +0x14
  8. IRQ/FIQ IRQ/FIQ +0x18/0x1c


通常说的异常主要来自cpu内部,abort,reset等; 中断主要来自外设

Q2. 怎么进入异常?

       两种:改cpsr 和 发生相应异常。其中USER mode 和 system mode只能通过该cpsr进入相应mode。上面的表都没有这两种mode。


reset handler:主要配置cpsr寄存器(关中断),因为这时候interrupt handler还没有初始化好;设置SVC mode.

  1. reset:
  2. /*
  3. * set the cpu to SVC32 mode
  4. */
  5. mrs r0, cpsr
  6. bic r0, r0, #0x3f
  7. orr r0, r0, #0xd3
  8. msr cpsr, r0

Q3.异常优先级

    除了简单的reset,data abort, FIQ,IRQ,prefetch abort, SWI, undefined 依次优先级下降外。

   data abort 发生在MMU或UMC指示访问了无效的存储器地址,或当前代码没有访问权限。data abort的handler里没有禁用FIQ,在data abort的异常处理程序中,可以发生FIQ,当FIQ完成后,控制权交给data abort handler.

   FIQ 中断处理时,禁 FIQ和IRQ,所以所有的外部中断都进不来。

   IRQ : 只有当没有FIQ 和data abort 的时候,IRQ才能进来,然后关IRQ中断

    prefech abort: 在流水线中,如果某指令的“执行”阶段没有更高优先级的异常出现,保持FIQ不变(注意是不变),禁止IRQ。如果FIQ enable,并且发生了FIQ,可以了在处prefech abort handler的时候得到响应。

2. 中断

1))分配中断: 系统design哪些硬件可产生哪种中断,可以通过硬件或软件实现。

2)  IRQ与FIQ异常 会使处理器硬件经过以下一个标准流程(假设中断未被屏蔽)

     a. 处理器切换到一个特定的mode,表明产生了中断;

     b. 前一个mode的cpsr保存到新mode的spsr

     c. pc被保存到新的中断mode的lr

     d. 关中断 - 更改cpsr中的IRQ 或者FIQ和IRQ都禁止。中断请求是允许还是禁止,只有在MSR指令已经完成了流水线的“执行”阶段后才确定,理解这一点很重要!在MSR指令完成前,中断仍可能发生或者被屏蔽。

     e. 处理器跳转到响应向量表的入口


IRQ mode堆栈必须在中断使能前设置好-通常是系统初始化代码中(reset),思考为什么FIQ不用呢?

r13是堆栈寄存器,要在系统初始化的时候,设置好各个异常的堆栈。

 


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/973609
推荐阅读
相关标签
  

闽ICP备14008679号