啊哒 表情包:bootloader之ARM的处理器模式

来源:百度文库 编辑:偶看新闻 时间:2024/04/30 11:38:35

ARM异常中断处理概述

当正常的程序执行流程发生暂时的停止时,称之为异常,例如处理一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。
ARM体系结构中的异常,与8位/16位体系结构的中断有很大的相似之处,但异常与中断的概念并不完全等同。

ARM体系结构所支持的异常类型

异常类型                           具体含义
复位                         复位电平有效时,产生复位异常,程序跳转到复位处理程序处执行。
未定义指令          遇到不能处理的指令时,产生未定义指令异常。
软件中断                 执行SWI指令产生,用于用户模式下的程序调用特权操作指令。
指令预取中止        处理器预取指令的地址不存在,或该地址不允许当前指令访问,产生
指令预取中止异常。
数据中止                处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。
IRQ                         外部中断请求有效,且CPSR中的I位为0时,产生IRQ异常。
FIQ                      快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。

异常向量表(Exception Vectors)

地址                                   异常                                  进入模式

0x0000,0000                 复位                                      管理模式

ox0000,0004                 未定义指令                          未定义模式

0x0000,0008                  软件中断                              管理模式

0x0000,000c                 中止(预存指令)            中止模式

0x0000,0010                中止(数据)                    中止模式

0x0000,0014                  保留                                     保留

0x0000,0018                 IRQ                                         IRQ

0x0000,001c                  FIQ                                        FIQ

异常优先级(Exceprion Priorities)

优先级                             异常

1(最高)                        复位

2                                        数据中止

3                                        FIQ

4                                        IRQ

5                                        预取指令

6(最低)                        未定义指令、SWI

对异常的响应

当一个异常出现以后,ARM微处理器会执行以下几步操作

1、将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。
2、将CPSR复制到相应的SPSR中。
3、根据异常类型,强制设置CPSR的运行模式位。
4、强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。

异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:

1、将连接寄存器LR的值减去相应的偏移量后送到PC中。
2、将SPSR复制回CPSR中。
3、若在进入异常处理时设置了中断禁止位,要在此清除。

可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返

中断处理程序的安装

一般在系统的启动代码中安装异常处理程序。大致可以分为两种情况:

1、地址处存储器为ROM/FLASH
2、地址处存储器为RAM

在ROM/FLASH中安装中断处理程序

在ROM/FLASH的异常中断向量表中,可以使用LDR指令直接向程序计数器PC中赋值,也可以直接使用跳转指令转到异常中断处理程序。

当0地址处为ROM时,将跳转指令安装在0地址处:
中断向量表:
b SYS_RST_HANDLER   ;0x00000000
b UDF_INS_HANDLER    ;0x00000004
b SWI_SVC_HANDLER   ;0x00000008
b INS_ABT_HANDLER     ;0x0000000c
b DAT_ABT_HANDLER   ;0x00000010
b .                                         ;nop
b IRQ_SVC_HANDLER    ;0x00000018
b FIQ_SVC_HANDLER    ;0x0000001c

;为中断向量分配地址空间,此空间处为RAM的地址
MAP _ISR_STARTADDRESS
    SYS_RST_VECTOR      # 4  
    UDF_INS_VECTOR      # 4
   SWI_SVC_VECTOR    # 4
   INS_ABT_VECTOR      # 4
    DAT_ABT_VECTOR      # 4
    RESERVED_VECTOR   # 4
   IRQ_SVC_VECTOR     # 4
    FIQ_SVC_VECTOR     # 4

RAM中安装中断处理程序

当0地址处为RAM时,中断向量表必须使用数据读取指令直接指向PC中赋值的形式。而且必须把中断向量从ROM中复制到RAM地址的0地址处。

MOV r8, #0   ;
ADR r9, Vector_Init_Block
LDMIA r9!, {r0-r7}
STMIA r8!, {r0-r7}



ARM处理器共有7种不同的处理器模式:

1、用户模式(User)2、快速中断模式(FIQ)3、外部中断模式(IRQ)4、特权模式(SVC)5、数据访问中止模式(ABT)6、未定义指令中止模式(UND)7、系统模式(SYS)

 

除了用户模式以外的其他6种处理器模式称为特权模式。在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器的模式切换。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。

其中,除了用户模式、系统模式以外,其他5种特权模式又称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。

用户和系统模式这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。

系统模式是特权模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。