ARM基础知识教程三

来源:本站
导读:目前正在解读《ARM基础知识教程三》的相关信息,《ARM基础知识教程三》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《ARM基础知识教程三》的详细说明。
简介:ARM基础知识-ARM中异常中断的种类

**复位(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_AddrDCD Start_Boot

Undefined_AddrDCD Undefined_Handle

SW_AddrDCD SWI_Handle

Prefeth_AddrDCD Prefeth_Handle

Abort_AddrDCD Abort_Handle

DCD 0

IRQ_AddrDCD IRQ_Handle

FIQ_AddrDCD 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)

提醒:《ARM基础知识教程三》最后刷新时间 2024-03-14 01:12:31,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《ARM基础知识教程三》该内容的真实性请自行鉴别。