电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>ARM>ARM微处理器编程模型之异常中断处理分析

ARM微处理器编程模型之异常中断处理分析

2017-10-18 | rar | 0.3 MB | 次下载 | 1积分

资料介绍

 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
  ARM微处理器编程模型之异常中断处理分析
  图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
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1电子电路原理第七版PDF电子教材免费下载
  2. 0.00 MB  |  1490次下载  |  免费
  3. 2单片机典型实例介绍
  4. 18.19 MB  |  92次下载  |  1 积分
  5. 3S7-200PLC编程实例详细资料
  6. 1.17 MB  |  27次下载  |  1 积分
  7. 4笔记本电脑主板的元件识别和讲解说明
  8. 4.28 MB  |  18次下载  |  4 积分
  9. 5开关电源原理及各功能电路详解
  10. 0.38 MB  |  10次下载  |  免费
  11. 6基于AT89C2051/4051单片机编程器的实验
  12. 0.11 MB  |  4次下载  |  免费
  13. 7蓝牙设备在嵌入式领域的广泛应用
  14. 0.63 MB  |  3次下载  |  免费
  15. 89天练会电子电路识图
  16. 5.91 MB  |  3次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234313次下载  |  免费
  3. 2PADS 9.0 2009最新版 -下载
  4. 0.00 MB  |  66304次下载  |  免费
  5. 3protel99下载protel99软件下载(中文版)
  6. 0.00 MB  |  51209次下载  |  免费
  7. 4LabView 8.0 专业版下载 (3CD完整版)
  8. 0.00 MB  |  51043次下载  |  免费
  9. 5555集成电路应用800例(新编版)
  10. 0.00 MB  |  33562次下载  |  免费
  11. 6接口电路图大全
  12. 未知  |  30320次下载  |  免费
  13. 7Multisim 10下载Multisim 10 中文版
  14. 0.00 MB  |  28588次下载  |  免费
  15. 8开关电源设计实例指南
  16. 未知  |  21539次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935053次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537791次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420026次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234313次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233045次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191183次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183277次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138039次下载  |  免费