新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > ARM微处理器的编程模型之:异常中断处理

ARM微处理器的编程模型之:异常中断处理

作者:时间:2013-09-13来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/257085.htm

3.4

异常或中断是用户程序中最基本的一种执行流程和形态。这部分主要对架构下的异常中断做详细说明。

有7种类型的异常,按优先级从高到低的排列如下:(Reset)、(Data Abort)、快速中断异常(FIQ)、外部中断异常(IRQ)、预取异常(Prefetch Abort)、软件中断(SWI)和未定义指令异常(Undefined instruction)。

注意

文档中,使用术语Exception来描述异常。Exception主要是从处理器被动接受异常的角度出发,而Interrupt带有向处理器主动申请的色彩。在本书中,对“异常”和“中断”不做严格区分,两者都是指请求处理器打断正常的程序执行流程,进入特定程序循环的一种机制。

3.4.1 异常种类

ARM体系结构中,存在7种异常处理。当异常发生时,处理器会把PC设置为一个特定的存储器地址。这一地址放在被称为向量表(vector table)的特定地址范围内。向量表的入口是一些跳转指令,跳转到专门处理某个异常或中断的子程序。

存储器映射地址0x00000000是为向量表(一组32位字)保留的。在有些处理器中,向量表可以选择定位在存储空间的高地址(从偏移量0xffff0000开始)。一些嵌入式操作系统,如Linux和Windows CE就要利用这一特性。

表3.4列出了ARM的7种异常。

表3.4 ARM的7种异常

异 常 类 型

处理器模式

执行低地址

执行高地址

(Reset)

特权模式

0x00000000

0xFFFF0000

未定义指令异常(Undefined interrupt)

未定义指令中止模式

0x00000004

0xFFFF0004

软中断异常(Software Abort)

特权模式

0x00000008

0xFFFF0008

预取异常(Prefetch Abort)

数据访问中止模式

0x0000000C

0xFFFF000C

(Data Abort)

数据访问中止模式

0x00000010

0xFFFF0010

外部中断请求IRQ

外部中断请求模式

0x00000018

0xFFFF0018

快速中断请求FIQ

快速中断请求模式

0x0000001C

0xFFFF001C

异常处理向量表如图3.5所示。

当异常发生时,分组寄存器r14和SPSR用于保存处理器状态,操作伪指令如下。

R14_exception_mode> = return link

SPSR_exception_mode> = CPSR

CPSR[4∶0] = exception mode number

CPSR[5] = 0 /*进入ARM状态*/

If exception_mode> = = reset or FIQ then

CPSR[6] = 1 /*屏蔽快速中断FIQ*/

CPSR[7] = 1 /*屏蔽外部中断IRQ*/

PC = exception vector address

图3.5 异常处理向量表

异常返回时,SPSR内容恢复到CPSR,连接寄存器r14的内容恢复到程序计数器PC。

1.

当处理器的复位引脚有效时,系统产生复位异常中断,程序跳转到复位程序处执行。复位异常中断通常用在下面两种情况下。

· 系统上电。

· 系统复位。

当复位异常时,系统执行下列伪操作。

R14_svc = UNPREDICTABLE value

SPSR_svc = UNPREDICTABLE value

CPSR[4∶0] = 0b10011 /*进入特权模式*/

CPSR[5] = 0 /*处理器进入ARM状态*/

CPSR[6] = 1 /*禁止快速中断*/

CPSR[7] = 1 /*禁止外设中断*/

If high vectors configured then

PC = 0xffff0000

Else

PC = 0x00000000


上一页 1 2 3 4 5 6 7 8 9 10 下一页

评论


相关推荐

技术专区

关闭