嵌入式开发笔记(四) ARM异常处理

什么是异常?

1正常工作之外的流程都叫异常

2异常会打断正在执行的工作,并且一般我们希望异常处理完成后继续回来执行原  来的工作

3中断是异常的一种

 

知识点回顾:

ARM 有7个基本工作模式:

User : 非特权模式,大部分任务执行在这种模式

-----------------------------------------------------------------------------------------------

FIQ :   当一个高优先级(fast) 中断产生时将会进入这种模式

IRQ :   当一个低优先级(normal) 中断产生时将会进入这种模式

Supervisor :当复位或软中断指令执行时将会进入这种模式

Abort : 当存取异常时将会进入这种模式

Undef : 当执行未定义指令时会进入这种模式

------------------------------------------------------------------------------------------------

System : 使用和User模式相同寄存器集的特权模式

小结:

(1)FIQ,IRQ,Supervisor,Abort ,Undef 五种都为异常模式。

    (2)同步  同步时钟  ,异步 靠中断(一种特殊的中断)来实现

 

1.异常向量表

1.1特点:

(1)所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件决定 的。

(2)当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常,有时 伴有一些辅助动作)

(3)异常向量表是硬件向软件提供的处理异常的支持。

 

    1.2ARM的异常处理机制

嵌入式开发笔记(四) ARM异常处理

嵌入式开发笔记(四) ARM异常处理 

 

1.21向量表:

 (1)复位异常                          0X00

 (2)未定义异常 0X04

 (3)软中断 0X08

 (4)Prefetch Abort (预取指异常) 0X0C

 (5)Data abort数据访问异常 0X10

 (6)Reserved 0X14

 7IRQ (外部中断模式) 0X18

  (8) FRQ (快速中断模式) 0X1C

 

笔记:内存地址规划

1.22处理机制

1.23当异常产生时:ARM core:

 (1)拷贝 CPSR 到 SPSR_<mode>

 (2)设置适当的 CPSR 位:

          1.改变处理器状态进入 ARM 态

          2.改变处理器模式进入相应的异常模式

          3.设置中断禁止位禁止相应中断 (如果需要)

 (3)保存返回地址到 LR_<mode>

 (4)设置 PC 为相应的异常向量

1.24返回时, 异常处理需要:

         (1)从 SPSR_<mode>恢复CPSR

         (2)从LR_<mode>恢复PC

         (3)Note:这些操作只能在 ARM 态执行.

 

        1.25知识小结:

嵌入式开发笔记(四) ARM异常处理 

1.改变处理器状态进入 ARM 态

 

            T Bit

            仅ARM  xT架构支持

            T = 0: 处理器处于 ARM 状态

            T = 1: 处理器处于 Th

 

    2..改变处理器模式进入相应的异常模式

            Mode位:

                处理器模式位

3.设置中断禁止位禁止相应中断 (如果需要)

    中断禁止位:

            I  = 1: 禁止  IRQ.

            F = 1: 禁止  FIQ.

总结:

(1)异常处理中有一些是硬件自动做的,有一些是程序员需要自己做的。需要搞清楚 哪些是需要自己做的,才知道如何写代码。

(2)以上说的是CPU设计时提供的异常向量表,一般成为一级向量表。有些CPU为 了支持多个中断,还会提供二级中断向量表,处理思路类似于这里说的一级中断 向量表。

 

 

 

转载于:https://my.oschina.net/vvbest/blog/811509