资料介绍
3.4 异常中断处理
异常或中断是用户程序中最基本的一种执行流程和形态。这部分主要对ARM架构下的异常中断做详细说明。
ARM有7种类型的异常,按优先级从高到低的排列如下:复位异常(Reset)、数据异常(Data Abort)、快速中断异常(FIQ)、外部中断异常(IRQ)、预取异常(Prefetch Abort)、软件中断(SWI)和未定义指令异常(Undefined instruction)。
注意在ARM文档中,使用术语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)特权模式0x000000000xFFFF0000
未定义指令异常(Undefined interrupt)未定义指令中止模式0x000000040xFFFF0004
软中断异常(Software Abort)特权模式0x000000080xFFFF0008
预取异常(Prefetch Abort)数据访问中止模式0x0000000C0xFFFF000C
数据异常(Data Abort)数据访问中止模式0x000000100xFFFF0010
外部中断请求IRQ外部中断请求模式0x000000180xFFFF0018
快速中断请求FIQ快速中断请求模式0x0000001C0xFFFF001C
异常处理向量表如图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
复位异常中断处理程序将进行一些初始化工作,内容与具体系统相关。下面是复位异常中断处理程序的主要功能。
· 设置异常中断向量表。
· 初始化数据栈和寄存器。
· 初始化存储系统,如系统中的MMU等。
· 初始化关键的I/O设备。
· 使能中断。
· 处理器切换到合适的模式。
· 初始化C变量,跳转到应用程序执行。
2.未定义指令异常
当ARM处理器执行协处理器指令时,它必须等待一个外部协处理器应答后,才能真正执行这条指令。若协处理器没有相应,则发生未定义指令异常。
未定义指令异常可用于在没有物理协处理器的系统上,对协处理器进行软件仿真,或通过软件仿真实现指令集扩展。例如,在一个不包含浮点运算的系统中,CPU遇到浮点运算指令时,将发生未定义指令异常中断,在该未定义指令异常中断的处理程序中可以通过其他指令序列仿真浮点运算指令。
仿真功能可以通过下面步骤实现。
① 将仿真程序入口地址链接到向量表中未定义指令异常中断入口处(0x00000004或0xffff0004),并保存原来的中断处理程序。
② 读取该未定义指令的bits[27∶24],判断其是否是一条协处理器指令。如果bits[27∶24]值为0b1110或0b110x,该指令是一条协处理器指令;否则,由软件仿真实现协处理器功能,可以同过bits[11∶8]来判断要仿真的协处理器功能(类似于SWI异常实现机制)。
③ 如果不仿真该未定义指令,程序跳转到原来的未定义指令异常中断的中断处理程序执行。
当未定义异常发生时,系统执行下列的伪操作。
r14_und = address of next instruction after the undefined instruction
SPSR_und = CPSR
CPSR[4∶0] = 0b11011 /*进入未定义指令模式*/
CPSR[5] = 0 /*处理器进入ARM状态*/
/*CPSR[6]保持不变*/
CPSR[7] = 1 /*禁止外设中断*/
If high vectors configured then
PC = 0xffff0004
Else
PC = 0x00000004
3.软中断SWI
软中断异常发生时,处理器进入特权模式,执行一些特权模式下的操作系统功能。软中断异常发生时,处理器执行下列伪操作。
r14_svc = address of next instruction after the SWI instruction
SPSR_und = CPSR
CPSR[4∶0] = 0b10011 /*进入特权模式*/
CPSR[5] = 0 /*处理器进入ARM状态*/
/*CPSR[6]保持不变*/
CPSR[7] = 1 /*禁止外设中断*/
If high vectors configured then
PC = 0xffff0008
Else
PC = 0x00000008
4.预取指令异常
预取指令异常使由系统存储器报告的。当处理器试图去取一条被标记为预取无效的指令时,发生预取异常。
如果系统中不包含MMU时,指令预取异常中断处理程序只是简单地报告错误并退出。若包含MMU,引起异常的指令的物理地址被存储到内存中。
预取异常发生时,处理器执行下列伪操作。
r14_svc = address of the aborted instruction + 4
SPSR_und = CPSR
CPSR[4∶0] = 0b10111 /*进入特权模式*/
CPSR[5] = 0 /*处理器进入ARM状态*/
/*CPSR[6]保持不变*/
CPSR[7] = 1 /*禁止外设中断*/
If high vectors configured then
PC = 0xffff000C
Else
PC = 0x0000000C
异常或中断是用户程序中最基本的一种执行流程和形态。这部分主要对ARM架构下的异常中断做详细说明。
ARM有7种类型的异常,按优先级从高到低的排列如下:复位异常(Reset)、数据异常(Data Abort)、快速中断异常(FIQ)、外部中断异常(IRQ)、预取异常(Prefetch Abort)、软件中断(SWI)和未定义指令异常(Undefined instruction)。
注意在ARM文档中,使用术语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)特权模式0x000000000xFFFF0000
未定义指令异常(Undefined interrupt)未定义指令中止模式0x000000040xFFFF0004
软中断异常(Software Abort)特权模式0x000000080xFFFF0008
预取异常(Prefetch Abort)数据访问中止模式0x0000000C0xFFFF000C
数据异常(Data Abort)数据访问中止模式0x000000100xFFFF0010
外部中断请求IRQ外部中断请求模式0x000000180xFFFF0018
快速中断请求FIQ快速中断请求模式0x0000001C0xFFFF001C
异常处理向量表如图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
复位异常中断处理程序将进行一些初始化工作,内容与具体系统相关。下面是复位异常中断处理程序的主要功能。
· 设置异常中断向量表。
· 初始化数据栈和寄存器。
· 初始化存储系统,如系统中的MMU等。
· 初始化关键的I/O设备。
· 使能中断。
· 处理器切换到合适的模式。
· 初始化C变量,跳转到应用程序执行。
2.未定义指令异常
当ARM处理器执行协处理器指令时,它必须等待一个外部协处理器应答后,才能真正执行这条指令。若协处理器没有相应,则发生未定义指令异常。
未定义指令异常可用于在没有物理协处理器的系统上,对协处理器进行软件仿真,或通过软件仿真实现指令集扩展。例如,在一个不包含浮点运算的系统中,CPU遇到浮点运算指令时,将发生未定义指令异常中断,在该未定义指令异常中断的处理程序中可以通过其他指令序列仿真浮点运算指令。
仿真功能可以通过下面步骤实现。
① 将仿真程序入口地址链接到向量表中未定义指令异常中断入口处(0x00000004或0xffff0004),并保存原来的中断处理程序。
② 读取该未定义指令的bits[27∶24],判断其是否是一条协处理器指令。如果bits[27∶24]值为0b1110或0b110x,该指令是一条协处理器指令;否则,由软件仿真实现协处理器功能,可以同过bits[11∶8]来判断要仿真的协处理器功能(类似于SWI异常实现机制)。
③ 如果不仿真该未定义指令,程序跳转到原来的未定义指令异常中断的中断处理程序执行。
当未定义异常发生时,系统执行下列的伪操作。
r14_und = address of next instruction after the undefined instruction
SPSR_und = CPSR
CPSR[4∶0] = 0b11011 /*进入未定义指令模式*/
CPSR[5] = 0 /*处理器进入ARM状态*/
/*CPSR[6]保持不变*/
CPSR[7] = 1 /*禁止外设中断*/
If high vectors configured then
PC = 0xffff0004
Else
PC = 0x00000004
3.软中断SWI
软中断异常发生时,处理器进入特权模式,执行一些特权模式下的操作系统功能。软中断异常发生时,处理器执行下列伪操作。
r14_svc = address of next instruction after the SWI instruction
SPSR_und = CPSR
CPSR[4∶0] = 0b10011 /*进入特权模式*/
CPSR[5] = 0 /*处理器进入ARM状态*/
/*CPSR[6]保持不变*/
CPSR[7] = 1 /*禁止外设中断*/
If high vectors configured then
PC = 0xffff0008
Else
PC = 0x00000008
4.预取指令异常
预取指令异常使由系统存储器报告的。当处理器试图去取一条被标记为预取无效的指令时,发生预取异常。
如果系统中不包含MMU时,指令预取异常中断处理程序只是简单地报告错误并退出。若包含MMU,引起异常的指令的物理地址被存储到内存中。
预取异常发生时,处理器执行下列伪操作。
r14_svc = address of the aborted instruction + 4
SPSR_und = CPSR
CPSR[4∶0] = 0b10111 /*进入特权模式*/
CPSR[5] = 0 /*处理器进入ARM状态*/
/*CPSR[6]保持不变*/
CPSR[7] = 1 /*禁止外设中断*/
If high vectors configured then
PC = 0xffff000C
Else
PC = 0x0000000C
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 一文读懂ARM微处理器指令系统 53次下载
- ARM微处理器的详细资料介绍 17次下载
- 嵌入式系统原理及应用教程之ARM异常中断处理及编程的资料说明 7次下载
- 第2章 ARM微处理器的编程模型 3次下载
- ARM微处理器的概述 9次下载
- 基于ARM微处理器的指令系统 5次下载
- Thumb指令集之异常中断产生指令解析 0次下载
- ARM微处理器编程模型之处理器工作模式解析 2次下载
- ARM体系中的异常中断及其应用 4次下载
- ARM系列微处理器简介 93次下载
- ARM微处理器的编程模型
- 基于S3C44B0X处理器的VxWorks中断设计
- ARM微处理器体系结构
- ARM/THUMB微处理器结构及指令系统
- ARM微处理器的编程模型
- dsp是嵌入式微处理器的一种设备吗 ARM嵌入式微处理器有何特点? 675次阅读
- 嵌入式微处理器的原理和应用 588次阅读
- Cortex-M0处理器内核异常中断简介 4465次阅读
- ARM异常中断的原因及处理措施 7799次阅读
- STM32的Cortex-M3中断异常处理 7958次阅读
- 基于ARM异常中断处理的方法解析 913次阅读
- 解答arm处理器的七种工作模式 1.6w次阅读
- 浅谈arm处理器的优势 1.2w次阅读
- 微处理器是cpu吗?微处理器和cpu的区别 6.7w次阅读
- SH-3异常中断处理方式 SH7709S的应用 1187次阅读
- 浅谈ARM处理器的特点和体系结构 1.7w次阅读
- 对ARM异常中断的集中情况进行总结,并给出了一些解决方法 6408次阅读
- ARM S3C4510B系统的异常中断机制解析 1720次阅读
- 基于ARM处理器的高效异常处理解决方案 1286次阅读
- ARM微处理器的指令的分类与格式 1361次阅读
下载排行
本周
- 1电子电路原理第七版PDF电子教材免费下载
- 0.00 MB | 1490次下载 | 免费
- 2单片机典型实例介绍
- 18.19 MB | 92次下载 | 1 积分
- 3S7-200PLC编程实例详细资料
- 1.17 MB | 27次下载 | 1 积分
- 4笔记本电脑主板的元件识别和讲解说明
- 4.28 MB | 18次下载 | 4 积分
- 5开关电源原理及各功能电路详解
- 0.38 MB | 10次下载 | 免费
- 6基于AT89C2051/4051单片机编程器的实验
- 0.11 MB | 4次下载 | 免费
- 7蓝牙设备在嵌入式领域的广泛应用
- 0.63 MB | 3次下载 | 免费
- 89天练会电子电路识图
- 5.91 MB | 3次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 2PADS 9.0 2009最新版 -下载
- 0.00 MB | 66304次下载 | 免费
- 3protel99下载protel99软件下载(中文版)
- 0.00 MB | 51209次下载 | 免费
- 4LabView 8.0 专业版下载 (3CD完整版)
- 0.00 MB | 51043次下载 | 免费
- 5555集成电路应用800例(新编版)
- 0.00 MB | 33562次下载 | 免费
- 6接口电路图大全
- 未知 | 30320次下载 | 免费
- 7Multisim 10下载Multisim 10 中文版
- 0.00 MB | 28588次下载 | 免费
- 8开关电源设计实例指南
- 未知 | 21539次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935053次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537791次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233045次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191183次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183277次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138039次下载 | 免费
评论
查看更多