**复位(RESET)**
当处理器复位引脚有用时,体系发生复位反常中止,程序跳转到复位反常中止处理程序处履行。复位反常中止一般用在下面几种状况下:体系加电时;体系复位时;跳转到复位中止向量处履行成为软复位。
**未界说的指令**
当ARM处理器或许是体系中的协处理器以为当时指令未界说时,发生未界说的指令反常中止,能够经过改反常中止机制仿真浮点向量运算。
**软件中止**
这是一个由用户界说的中止指令。可用于用户方式下的程序调用特权操作指令。在实时操作体系中能够经过该机制西线体系功用调用。
**指令与取停止(PrefechAbort)**
假如处理器预取的指令的地址不存在,或许该地址不允许当时指令拜访,当被预取的指令履行时,处理器发生指令预取停止反常中止。
**数据拜访停止(DATAABORT)
假如数据拜访指令的方针地址不存在,,或许该地址不允许当时指令拜访,处理器发生数据拜访停止反常中止
**外部中止请求(IRQ)**
当处理器的外部中止请求引脚有用,并且CPSR的寄存器的I操控位被铲除时,处理器发生外部中止请求反常中止。体系中个外设经过该反常中止请求处理服务。
**快速中止请求(FIQ)**
当处理器的外部快速中止请求引脚有用,并且CPSR的F操控位被铲除时,处理器发生外部中止请求反常中止
反常中止向量表及反常中止优先级
中止向量表指定了个反常中止及其处理程序的对应联系。他一般存放在存储地址的低端。在ARM体系中,反常中止向量表的巨细为32字节,其间每个反常中止占有4个字节巨细,保存了4个字节空间。
每个反常中止对应的中止向量表中的4个字节的空间中存放了一个跳转指令或许一个向PC寄存器中赋值的数据拜访指令。经过这两种指令,程序将跳转到相应的反常中止处理程序处履行。当几个反常中止同时发生时,就有必要依照必定的次第来处理这些反常中止。
各个反常中止的中止向量地址以及中止的处理优先级
中止向量地址 反常中止类型 反常中止方式 优先级(6最低)
0x00 复位 特权方式 1
0x04 未界说的指令 未界说指令停止方式 6
0x08 软件中止 特权方式 6
0x0C 指令预取停止 停止方式 5
0x10 数据拜访停止 停止方式 2
0x14 保存 未运用 未运用
0x18 外部中止请求 IRQ方式 4
0x1C 快速中止请求 FIQ方式 3
在应用程序中装置反常中止处理程序
1.运用跳转指令:能够在反常中止对应反常向量表中特定方位放置一条跳转指令,直接跳转到该反常中止的处理程序。这种办法有一个缺陷,即只能在32M空间范围内跳转。
2.运用数据读取指令LDR:运用数据读取指令LDR向程序计数器PC中直接赋值。这种办法分为两步:先将反常中止处理程序的肯定地址存放在存放在间隔向量表4KB范围内的一个存储单元中;再运用数据读取指令LDR将该单元的内容读取到程序计数器PC中。 **在体系复位时装置反常中止处理程序**
1.地址0x00处为ROM的状况
运用数据读取指令LDR示例如下所示:
Vector_Init_Block
LDR PC, Reset_Addr
LDR PC, Undefined_Addr
LDR PC, SW_Addr
LDR PC, Prefeth_Addr
LDR PC, Abort_Addr
NOP
LDR PC, IRQ_Addr
LDR PC, FIQ_Addr
Reset_Addr DCD Start_Boot
Undefined_Addr DCD Undefined_Handle
SW_Addr DCD SWI_Handle
Prefeth_Addr DCD Prefeth_Handle
Abort_Addr DCD Abort_Handle
DCD 0
IRQ_Addr DCD IRQ_Handle
FIQ_Addr DCD FIQ_Handle
运用跳转指令的示例如下所示:
Vector_Init_Block
BL Reset_Handle
BL DCD Undefined_Handle
BL SWI_Handle
BL Prefeth_Handle
BL Abort_Handle
NOP
BL IRQ_Handle
BL FIQ_Handle
2.地址0x00处为RAM的状况
地址0x00处为RAM时,中止向量表有必要运用数据读取指令直接指向PC中赋值的方式。并且,有必要运用下面的代码巴中止向量表从ROM中仿制到RAM中地址0x00开端处的存储空间中:
MOV r8,#0
ADR r9,Vector_Init_Block
;仿制中止向量表(8字)
LDMIA r9!,(r0-r7)
STMIA r8!,(r0-r7)
;仿制保存各中止处理函数地址的表(8字words)
LDMIA r9!,(r0-r7)
STMIA r8!,(r0-r7)