arm嵌入式原理技术及应用ch.ppt

上传人:san****019 文档编号:7322500 上传时间:2020-03-19 格式:PPT 页数:130 大小:1.19MB
返回 下载 相关 举报
arm嵌入式原理技术及应用ch.ppt_第1页
第1页 / 共130页
arm嵌入式原理技术及应用ch.ppt_第2页
第2页 / 共130页
arm嵌入式原理技术及应用ch.ppt_第3页
第3页 / 共130页
点击查看更多>>
资源描述
2020 3 19 2010 12 陈赜 ARM嵌入式技术原理与应用 clshust 13135699803 2020 3 19 第二章ARM体系结构及编程模型 2020 3 19 了解ARM技术的应用领域 熟悉ARM微处理器系列的基本类型和主要特点 理解ARM微处理器的工作状态和工作模式 掌握ARM微处理器的存储器系统和寄存器组织以及异常中断的应用 2020 3 19 2 1ARM微处理器的特点 ARM AdvancedRISCMachines ARM 既可以认为是一个公司的名字 也可以认为是对一类微处理器的通称 还可以认为是一种技术的名字 2020 3 19 ARM公司于1990年11月在英国剑桥成立 前身为Acorn计算机公司 ARM公司是全球领先的16 32位嵌入式RISC微处理器解决方案供应商 ARM公司是知识产权 IP 公司 本身不生产芯片 靠转让设计许可 由合作伙伴公司来生产各具特色的芯片 2020 3 19 目前 全世界有几十家著名的半导体公司都使用ARM公司的授权 其中包括MOTOROLA IBM Intel LG SONY NEC ATMEL等 从而保证了大量的开发工具和丰富的第三方资源 它们共同保证了基于ARM处理器核的设计可以很快投入市场 ARM公司已成为移动通信 手持设备 多媒体数字消费嵌入式解决方案的RISC标准 2020 3 19 采用RISC指令集 低功耗 低成本 高性能 使用大量的寄存器 ARM THUMB指令支持 三 五级流水线 ARM微处理器特点 2020 3 19 采用RISC架构的ARM处理器一般具有如下特点 固定长度的指令格式 指令归整 简单 基本寻址方式有2 3种 使用单周期指令 便于流水线操作执行 大量使用寄存器 数据处理指令只对寄存器进行操作 只有加载 存储指令可以访问存储器 以提高指令的执行效率 2020 3 19 ARM处理器共有37个寄存器 被分为若干个组 这些寄存器包括 31个通用寄存器 包括程序计数器 PC指针 均为32位的寄存器 6个状态寄存器 用以标识CPU的工作状态及程序的运行状态 均为32位 2020 3 19 ARM微处理器支持两种指令集ARM指令集和Thumb指令集 ARM指令为32位的长度 Thumb指令为16位长度Thumb指令集为ARM指令集的功能子集 但与等价的ARM代码相比较 可节省30 40 以上的存储空间 同时具备32位代码的所有优点 2020 3 19 除此以外 ARM体系结构还采用了一些特别的技术 在保证高性能的前提下尽量缩小芯片的面积 并降低功耗 所有的指令都可根据前面的执行结果决定是否被执行 从而提高指令的执行效率 可用加载 存储指令批量传输数据 以提高数据的传输效率 可在一条数据处理指令中同时完成逻辑处理和移位处理 在循环处理中使用地址的自动增减来提高运行效率 2020 3 19 2 2ARM微处理器系列介绍 1 ARM7系列ARM7采用冯 诺依曼 Von Neumann 结构 数据存储器和程序存储器使用同一存储空间 用相同的指令访问 此结构也被大多数计算机所采用 ARM7为三级流水线结构 取指 译码 执行 平均功耗为0 6mW MHz 时钟速度为66MHz 每条指令平均执行1 9个时钟周期 2020 3 19 ARM7系列微处理器包括如下几种类型的核 ARM7TDMI ARM7TDMI S ARM720T ARM7EJ ARM7TMDI是目前使用最广泛的32位嵌入式RISC处理器 属低端ARM处理器核 TDMI的基本含义为 对其它系列也适用 T 支持16为压缩指令集Thumb 称为T变种D 支持片上Debug 称为D变种M 内嵌硬件乘法器Multiplier 称为M变种I 嵌入式ICE 支持片上断点和调试 称为I变种 2020 3 19 表2 1ARM7系列产品 2020 3 19 2 ARM9系列ARM7采用的冯 诺依曼VonNeumann结构 取指令和取操作数都是通过一条总线分时进行 这样 在高速运算时 不但不能同时取指令和取操作数 而且还会造成传输通道上的瓶颈现象 ARM9采用哈佛 Harvard 结构 程序存储器与数据存储器分开 提供了较大的存储器带宽 同时 大多数DSP都采用此结构 2020 3 19 ARM9为五级流水 取指 译码 执行 缓冲 数据 回写 平均功耗为0 7mW MHz 时钟速度为120MHz 200MHz 每条指令平均执行1 5个时钟周期 ARM9系列微处理器包含ARM920T ARM922T和ARM940T三种类型 主要应用在手持产品 视频电话 PDA 数字消费产品 机顶盒 家用网关等方面 2020 3 19 表2 2ARM9系列产品 2020 3 19 3 ARM9E系列ARM9E系列微处理器包括如下4种类型的核 ARM926EJ S ARM946E S和ARM966E S 见表2 3 2020 3 19 表2 3ARM9E系列产品 2020 3 19 ARM9E系列是一种包含有微控制器 DSP Java功能的综合处理器 强化了数字信号处理能力 适用于需要DSP和微控制器结合使用的情况 并且把Thumb技术和DSP都扩展到了ARM指令中 并且具有EmbededICE RT逻辑 更好地适应了实时系统开发的需要 同时ARM9E使用了Jazelle增强技术 该技术支持一种新的Java操作状态 在硬件中执行Java字节码 2020 3 19 4 ARM10系列ARM10系列微处理器包括 ARM1020E和ARM1022E等型号 见表2 4 ARM10系列采用了新的体系结构 其核心为使用了向量浮点单元 有强大的浮点运算能力 并且增加了Cache容量和总线宽度 并且具有低功耗的特点 ARM10系列微处理器主要应用于下一代无线设备 视频消费品等 2020 3 19 表2 4ARM10系列产品 2020 3 19 5 ARMStrong Xscale系列StrongARM是采用ARM体系结构高度集成的32位RISC微处理器 它融合了Intrl公司的设计技术 以及ARM体系结构的电源效率 其体系结构在软件上兼容ARMv4 同时又具有Intel技术优点 2020 3 19 StrongARM是Intrl公司为手持消费类电子和移动计算与通信设备生产的嵌入式处理器 采用StrongARM架构的处理器有 SA 1 SA 110 SA 1100 SA1110和IXP1200 Xscale是基于ARMv5体系结构的解决方案 是一款性能全 性价比高 功耗低的处理器 支持16位的Thumb和DSP指令集 主要应用于数字移动电话 个人数字助理和网络产品等 Xscale架构的处理器有 PXA250 PXA255和PXA270等 2020 3 19 6 ARM11系列ARM11系列微处理器内核最新内核 ARM1156T2 S内核 ARM1156T2F S内核 ARM1176JZ S内核和ARM11JZF S内核 2020 3 19 7 SecurCore系列SecurCore系列微处理器除了具有ARM体系结构各种主要特点外 还在系统安全方面具有如下的特点 1 带有灵活的保护单元 确保操作系统和应用数据的安全 2 采用软内核技术 防止外部对其进行扫描探测 3 可集成用户自己的安全特性和其他协处理器 2020 3 19 8 ARMCortex系列ARMCortex发布于2005年 ARMCortex系列的三款产品全都集成了Thumb 2指令集 可满足各种不同的日益增长的市场需求 ARMCortex系列的三款处理器 1 ARMCortex A系列 针对复杂操作系统以及用户应用设计的应用处理器 2 ARMCortex R系列 实时系统专用嵌入式处理器 3 ARMCortex M系列 针对微控制器和低成本应用专门优化的深嵌入式处理器 2020 3 19 9 基于32位ARM核微处理器基于32位ARM核微处理器的主要公司有 1 ST 意法半导体 公司32位ARM核微处理器 主要有 STR7 STR9和STM32系列 2 Freescale公司32位微控制器与处理器 主要是MCF52xx系列 3 OKI公司32位ARM7DMI核微处理器 主要是ML67xx系列 4 ATMEL公司微控制器 主要是AT91FR AT91M AT91RM AT91SAM等系列 2020 3 19 5 PHILIPS飞利浦 NXP恩智浦ARM单片机 主要是LPC21xx LPC22xx等系列 6 Intel公司的StrongARM系列和XScale系列 7 SamSung公司的ARM系列 主要有S3C44B0X S3C2410X S3C2440X S3C5410X等系列 8 TI公司的ARM处理器主要是OMAP C5470 C5471等系列 9 CirrusLogic公司的ARM处理器系列 主要是EP9xxx等系列 2020 3 19 ARM系列产品命名规则 2020 3 19 1 ARM体系结构的特点 总体思想在不牺牲性能的同时 尽量简化处理器 同时从体系结构的层面上灵活支持处理器扩展 这种简化和开放的思路使得ARM处理器采用了很简单的结构来实现 2 3ARM体系结构 2020 3 19 ARM处理器是最先进的目前 ARM32位体系结构被公认为业界领先的32位嵌入式RISC微处理器核 所有ARM处理器都共享这一体系结构 2020 3 19 1 RISC型处理器结构ARM采用RISC结构 在简化处理器结构 减少复杂功能指令的同时 提高了处理器的速度 考虑到处理器与存储器打交道的指令执行时间远远大于在寄存器内操作的指令执行时间 RISC型处理器采用了Load Store 加载 存储 结构 即只有Load Store指令可与存储器打交道 其余指令都不允许进行存储器操作 2020 3 19 为了进一步提高指令和数据的存取速度 RISC型处理器增加了指令高速缓冲I Cache和数据高速缓冲D Cache及多处理器结构 使指令的操作尽可能在寄存器之间进行 2020 3 19 只能对寄存器执行算术和逻辑操作 Load Store体系结构 2020 3 19 2 Thumb指令集虽然ARM处理器本身是32位设计 但考虑到RISC型处理器的指令功能相对较弱 新型的ARM体系结构中定义了16位的Thumb指令集 Thumb指令集比通常的8 16位CISC RISC处理器有更好的代码密度 而芯片面积只增加6 却可以使程序存储器更小 2020 3 19 3 多处理器状态模式ARM体系结构定义了7种处理器模式 用户 快中断 中断 管理 终止 未定义和系统模式 大大提高了ARM处理器的效率 4 两种处理器工作状态ARM状态 执行32位ARM指令 Thumb状态 执行16位Thumb指令 2020 3 19 5 嵌入式在线仿真调试ARM体系结构的处理器芯片都嵌入了在线仿真ICE RT逻辑 便于通过JTAG来仿真调试芯片 省去了价格昂贵的在线仿真器 2020 3 19 6 灵活方便的接口ARM体系结构具有协处理器接口 允许接16个协处理器 既可以使基本的ARM处理器内核尽可能小 方便地扩充ARM指令集 也可以通过未定义指令来支持协处理器的软件仿真 7 低电压功耗的设计考虑到ARM处理器主要用于手持式嵌入式系统中 在设计中就十分注意功耗的设计 2020 3 19 2020 3 19 2 ARM9体系结构比较最常用的是ARM920T内核 ARM920T结构主要部分有7部分构成 ARM9TDMI内核CPUMMUCache协处理器接口运行跟踪信息接口 ETM JTAG调试接口总线接口 2020 3 19 ARM9TDMI体系结构框图 2020 3 19 ARM920T体系结构框图 2020 3 19 ARM920T体系结构框图 2020 3 19 ARM9TDMI核性能 0 25微米的ARM9TDMI核在执行32位ARM代码时的特性综述于下表3 核的版图示于下页图 2020 3 19 2 4ARM流水线结构 1 流水线技术概述流水线方式是把一个重复的过程分解为若干个子过程 每个子过程可以与其他子过程同时进行 由于这种工作方式与工厂中的生产流水线十分相似 因此 把它称为流水线工作方式 2020 3 19 处理器按照一系列步骤来执行每一条指令 典型的步骤为 1 从存储器读取指令 fetch 2 译码以鉴别它是哪一类指令 dec 3 从寄存器组取得所需的操作数 reg 4 将操作数进行组合以得到结果或存储器地址 exe 5 如果需要 则访问存储器存取数据 mem 6 将结果回写到寄存器组 res 2020 3 19 2 ARM7的三级流水线1取指 从程序存储器中取指令 放入指令流水线 占用存储器访问操作 2译码 指令译码 占用译码逻辑 3执行 执行指令 读写REG 占用ALU及数据路径 2020 3 19 下图为3个单周期指令在流水线上的情况 一条指令有3个时钟周期的执行时间 但吞吐量是每个周期1条指令 t 123 PC值如何计算 PC指向处于读取级的指令地址 而不是处于执行级的指令地址PC 当前执行指令地址 8 ARM单周期指令的3级流水线操作 2020 3 19 优秀的流水线结构 2020 3 19 3 ARM9TDMI的五级流水线 ARM7TDMI与ARM9TDMI流水线比较 2020 3 19 4 ARM7和ARM9流水线比较5级流水线的ARM9内核是哈佛架构 拥有独立的指令和数据总线 指令和数据的读取可以在同一周期进行 3级流水的ARM7内核是指令和数据总线复用的冯 诺依曼架构 指令和数据的读取不能在同一周期进行 5级流水线设计把寄存器读取 逻辑运算 结果回写分散在不同的流水当中 每一级流水的操作简洁 提升了处理器的主频 2020 3 19 随着流水线深度 级数 的增加 每一段的工作量被削减了 这使得处理器可以工作在更高的频率 同时改进了处理器的性能 负面作用是增加了系统的延时 即内核在执行一条指令前 需要更多的周期来填充流水线 流水线级数的增加也意味着在某些段之间会产生数据相关 2020 3 19 ARM处理器性能比较 2020 3 19 2 5ARM总线结构 ARM微控制器使用的是AMBA总线体系结构AMBA AdvancedMicrocontrollerBusArchitecture 是ARM公司公布的总线标准 先进的AMBA规范定义了三种总线 2020 3 19 AHB总线 AdvancedHigh performanceBus 用于连接高性能系统模块 它支持突发数据传输方式及单个数据传输方式 所有时序参考同一个时钟沿 ASB总线 AdvancedSystemBus 用于连接高性能系统模块 它支持突发数据传输模式 APB总线 AdvancePeripheralBus 是一个简单接口支持低性能的外围接口 2020 3 19 从编程的角度看 ARM微处理器的工作状态一般有两种 并可在两种状态之间切换 ARM状态 此时处理器执行32位的字对齐的ARM指令 Thumb状态 此时处理器执行16位的 半字对齐的Thumb指令 ARM处理器有两种工作状态和7种工作模式 2 6ARM微处理器的工作状态与模式 1 ARM处理器的两种工作状态 2020 3 19 THUMB指令是ARM指令的子集 可以相互调用 只要遵循一定的调用规则 Thumb指令与ARM指令的时间效率和空间效率关系为 存储空间约为ARM代码的60 70 指令数比ARM代码多约30 40 存储器为32位时ARM代码比Thumb代码快约40 存储器为16位时Thumb比ARM代码快约40 50 使用Thumb代码 存储器的功耗会降低约30 2020 3 19 ARM指令集和Thumb指令集均有切换处理器状态的指令 并可在两种工作状态之间切换 在开始执行代码时 应该处于ARM状态 状态切换方法 两种状态可以切换程序执行过程中 通过执行带状态切换的分支指令BX 随时在两种工作状态之间进行切换 并且 处理器工作状态的转变 并不影响处理器的工作模式和相应寄存器中的内容 2020 3 19 进入Thumb状态 当操作数寄存器的状态位 位0 为1时 可以采用执行BX指令的方法 使微处理器从ARM状态切换到Thumb状态 此为主动切换 当处理器处于Thumb状态时发生异常 如IRQ FIQ Undef Abort SWI等 则异常处理返回时 自动切换到Thumb状态 此为自动切换 2020 3 19 切换到ARM状态 在处理器进行异常处理时 把PC指针放入异常模式链接寄存器中 并从异常向量地址开始执行程序 也可以使处理器切换到ARM状态 有两种情况ARM处理器自动切换到Thumb状态 1 执行BX指令 当操作数寄存器的位 0 为0时 则微处理器从Thumb状态切换到ARM状态 2 当处理器在Thumb状态时发生异常 如IRQ FIQ Undef等 则处理器从Thumb状态自动切换到ARM状态进行异常处理 2020 3 19 例 状态切换程序 从ARM状态切换到Thumb状态LDRR0 Lable 1BXR0 从Thumb状态切换到ARM状态LDRR0 LableBXR0注意 ARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内容 ARM处理器在开始执行代码时 只能处于ARM状态 2020 3 19 1 处理器模式 用户模式 usr ARM处理器正常的程序执行状态 大部分任务执行在这种模式 快速中断模式 fiq 当一个高优先级 fast 中断产生时将会进入这种模式 用于高速数据传输或通道处理 外部中断模式 irq 当一个低优先级 normal 中断产生时将会进入这种模式 用于通用的中断处理 2 ARM处理器的工作模式 2020 3 19 管理模式 svc 当复位或软中断指令执行时将会进入这种模式 供操作系统使用的一种保护模式 中止模式 abt 当存取异常时将会进入这种模式 用于虚拟存储及存储保护 系统模式 sys 供需要访问系统资源的操作系统任务使用 运行具有特权的操作系统任务 未定义模式 und 当执行未定义指令时会进入这种模式 软件仿真硬件协处理器 2020 3 19 2 模式特点 1 用户模式特点 应用程序不能够访问受操作系统保护的系统资源 应用程序不能进行处理器模式的切换 2 系统模式特点 不属于异常模式 不是通过异常进入的 系统模式属于特权模式 可以访问所有的系统资源 也可以直接进行模式的切换 它主要供操作系统使用 2020 3 19 3 特权模式及其特点 特权模式 除用户模式之外的工作模式又称为特权模式特点 应用程序可以访问所有的系统资源可以任意地进行处理器模式的切换 2020 3 19 4 异常模式及其特点 异常模式 除用户模式 系统模式之外的五种模式称为异常模式 特点 以各自的中断或异常方式进入 并且处理各自的中断或异常 2020 3 19 对管理模式 svc 进入方式和处理内容有 系统上电复位后进入管理模式 运行系统初始化程序 如中断允许 禁止 主时钟设置 SDRAM配置 各个功能模块初始化等 当执行软件中断指令SWI时 进入管理模式 2020 3 19 3 模式切换 处理器模式可以通过软件进行切换 也可以通过外部中断或者异常处理过程进行切换 当应用程序发生异常中断时 处理器进入相应的异常模式 在每一种异常模式下都有一组寄存器 供相应的异常处理程序使用 这样就可以保证在进入异常模式时 用户模式下的寄存器不被破坏 2020 3 19 处理器模式的切换方式 软件控制进行切换 通过外部中断和异常进行切换处理器启动时的模式转换图 管理模式 Supervisor 多种特权模式变化 用户程序的运行模式 复位后的缺省模式 主要完成各模式的堆栈设置 注意不要进入用户模式 一般为用户模式User 2020 3 19 系统模式并不是通过异常进入的 它和用户模式具有完全一样的寄存器 但是系统模式属于特权模式 可以访问所有的系统资源 也可以直接进行处理器模式切换 2020 3 19 系统模式它主要供操作系统任务使用通常操作系统的任务需要访问所有的系统资源 同时该任务仍然使用用户模式的寄存器组 而不是使用异常模式下相应的寄存器组 这样可以保证当异常中断发生时任务状态不被破坏 2020 3 19 2 7ARM体系结构的存储器格式1 ARM处理器支持以下6种数据类型 8位有符号和无符号字节 Byte 16位有符号和无符号半字 Halfword 它们必须以两字节的边界对齐 半字对齐 32位有符号和无符号字 word 它们必须以4字节的边界对齐 字对齐 2020 3 19 字对齐 字单元地址的低两位A1A0 0b00 即地址末位为0 x0 0 x4 0 x8 0 xc 半字对齐 半字单元地址的最低位A0 0b0 地址末位为0 x0 0 x2 0 x4 0 x6 0 x8 0 xa 0 xc 0 xe 2020 3 19 对于指令 ARM指令系统分为32位ARM指令集和16位的Thumb指令集 在存储时分别以32位和16位的两种不同长度存储 对于数据 ARM支持对32位字数据 16位半字数据 8位字节数据操作 因此数据存储器可以存储32位 16位 8位三种不同长度数据 2020 3 19 在ARM内部 所有操作都面向32位的操作数 只有数据传送指令支持较短的字节和半字的数据类型 当从存储器读入一个字节或半字时 根据其数据类型将其扩展到32位 2020 3 19 2 ARM存储器组织ARM存储器以8位为一个单元存储数据 一个字节 每个存储单元分配一个存储地址 ARM将存储器看作是从零地址开始的字节的线性组合 作为32位的微处理器 ARM体系结构所支持的最大寻址空间为4GB 232字节 2020 3 19 从零字节到三字节放置第一个存储的字数据 从第四个字节到第七个字节放置第二个存储的字数据 依次排列 32位的字数据要使用4个地址单元 16位半数据要使用2个地址单元 这样 就存在一个所存储的字或半字数据的排列顺序问题 ARM体系结构可以用两种方法存储字数据 称为大端格式和小端格式 2020 3 19 大端格式 big endian 字数据的高字节存储在低地址中 而字数据的低字节则存放在高地址中 小端格式 low endian 与大端存储格式相反 低地址中存放的是字数据的低字节 高地址存放的是字数据的高字节 缺省设置为小端格式 2 7ARM存储器格式 2020 3 19 3 ARM存储器层次微处理器希望存储器容量大 速度快 但容量大者速度慢 速度快者容量小 解决方法是构建一个由多级存储器组成的复合存储器系统 两级存储器方案一般包括 一个容量小但速度快的从存储器一个容量大但速度慢的主存储器宏观上看这个存储器系统像一个即大又快的存储器 这个容量小但速度快的元件是Cache 它自动地保存处理器经常用到的指令和数据的拷贝 2020 3 19 多级存储器系统 寄存器组 访问时间约为几个ns 片上RAM 与片外RAM比速度快 功耗小 容量小 读写时间约为几个ns 片上Cache 8 32KB 访问时间约为十几个ns 主存储器 一般为几兆字节 1GB的动态存储器 访问时间约50ns CPU 寄存器组 片上RAM 片上Cache 主存储器 硬盘 2020 3 19 2 8寄存器组织 ARM微处理器共有37个32位寄存器 其中31个为通用寄存器 6个为状态寄存器 但是这些寄存器不能被同时访问 具体哪些寄存器是可编程访问的 取决微处理器的工作状态及具体的运行模式 但在任何时候 通用寄存器R14 R0 程序计数器PC 一个或两个状态寄存器都是可访问的 2020 3 19 1 ARM状态下的寄存器组织 通用寄存器 通用寄存器包括R0 R15 可以分为三类 未分组寄存器R0 R7 分组寄存器R8 R14 程序计数器PC R15 2020 3 19 ARM状态下的寄存器组织 2020 3 19 未分组寄存器R0 R7 在所有的运行模式下 未分组寄存器都指向同一个物理寄存器 他们未被系统用作特殊的用途 因此 在中断或异常处理进行运行模式转换时 由于不同的处理器运行模式均使用相同的物理寄存器 可能会造成寄存器中数据的破坏 这一点在进行程序设计时应引起注意 2020 3 19 分组寄存器R8 R12 每次所访问的物理寄存器与处理器当前的运行模式有关 R8 R12 每个寄存器对应两个不同的物理寄存器 当使用fiq模式时 访问寄存器R8 fiq R12 fiq 当使用除fiq模式以外的其他模式时 访问寄存器R8 usr R12 usr 2020 3 19 分组寄存器R13 R14 R13 R14 每个寄存器对应6个不同的物理寄存器 其中的一个是用户模式与系统模式共用 另外5个物理寄存器对应于其他5种不同的运行模式 采用以下的记号来区分不同的物理寄存器 R13 R14 mode为以下几种之一 usr fiq irq svc abt und 2020 3 19 堆栈指针 R13 R13在ARM指令中常用作堆栈指针 但这只是一种习惯用法 用户也可使用其他的寄存器作为堆栈指针 在Thumb指令集中 某些指令强制性的要求使用R13作为堆栈指针 由于处理器的每种运行模式均有自己独立的物理寄存器R13 在初始化部分 都要初始化每种模式下的R13 这样 当程序的运行进入异常模式时 可以将需要保护的寄存器放入R13所指向的堆栈 而当程序从异常模式返回时 则从对应的堆栈中恢复 2020 3 19 子程序连接寄存器 R14 R14也称作子程序连接寄存器或连接寄存器LR 当执行BL子程序调用指令时 可以从R14中得到R15 程序计数器PC 的备份 其他情况下 R14用作通用寄存器 在每一种运行模式下 都可用R14保存子程序的返回地址 当用BL或BLX指令调用子程序时 将PC的当前值拷贝给R14 执行完子程序后 又将R14的值拷贝回PC 即可完成子程序的调用返回 BLSUB1 SUB1 STMFDSP LR 将R14存入堆栈 LDMFDSP PC 完成子程序返回 2020 3 19 程序计数器PC R15 ARM状态下 位 1 0 为0 位 31 2 用于保存PC Thumb状态下 位 0 为0 位 31 1 用于保存PC R15虽然也可用作通用寄存器 但一般不这么使用 因为对R15的使用有一些特殊的限制 当违反了这些限制时 程序的执行结果是未知的 由于ARM体系结构采用了多级流水线技术 对于ARM指令集而言 PC总是指向当前指令的下两条指令的地址 即PC的值为当前指令的地址值加8个字节 2020 3 19 程序状态寄存器 CPSR SPSR 寄存器R16用作CPSR 当前程序状态寄存器 CPSR可在任何运行模式下被访问 它包括条件标志位 中断禁止位 当前处理器模式标志位 以及其他一些相关的控制和状态位 每一种运行模式下又都有一个专用的物理状态寄存器 称为SPSR 备份的程序状态寄存器 异常发生时 SPSR用于保存CPSR的值 从异常退出时则可由SPSR来恢复CPSR 2020 3 19 由于用户模式和系统模式不属于异常模式 他们没有SPSR 当在这两种模式下访问SPSR 结果是未知的 2020 3 19 Thumb状态下的寄存器组织 Thumb状态下的寄存器集是ARM状态下寄存器集的一个子集 程序可以直接访问8个通用寄存器 R7 R0 程序计数器 PC 堆栈指针 SP 连接寄存器 LR 和CPSR 同样 每一种特权模式下都有一组SP LR和SPSR 2020 3 19 Thumb状态下的寄存器组织图 2020 3 19 Thumb状态下的寄存器与ARM状态下的寄存器关系 Thumb状态下和ARM状态下的R0 R7是相同的 Thumb状态下和ARM状态下的CPSR和所有的SPSR是相同的 Thumb状态下的SP对应于ARM状态下的R13 Thumb状态下的LR对应于ARM状态下的R14 Thumb状态下的程序计数器对应于ARM状态下R15 2020 3 19 Thumb状态下的寄存器与ARM状态下的寄存器关系图 2020 3 19 访问THUMB状态下的高位寄存器 Hi registers 在Thumb状态下 高位寄存器R8 R15并不是标准寄存器集的一部分 但可使用汇编语言程序受限制的访问这些寄存器 将其用作快速的暂存器 使用带特殊变量的MOV指令 数据可以在低位寄存器和高位寄存器之间进行传送 高位寄存器的值可以使用CMP和ADD指令进行比较或加上低位寄存器中的值 2020 3 19 程序状态寄存器作用 ARM体系结构包含一个当前程序状态寄存器 CPSR 和五个备份的程序状态寄存器 SPSRs 1 当前程序状态寄存器CPSR CurrentProgramStatusRegister 用来保存当前程序状态的寄存器 所有处理器模式下都可以访问当前程序状态寄存器CPSR 仅一个CPSR 2020 3 19 2 保存程序状态寄存器SPSR mode SavedProgramStatusRegister SPSR mode用来进行异常处理 其功能包括 保存ALU中的当前操作信息当异常发生时 用来保存CPSR的值 从异常返回时 将SPSR mode复制到CPSR中 恢复CPSR的值 控制允许和禁止中断修改SPSR的值 设置处理器的运行模式修改SPSR的值 2020 3 19 程序状态寄存器的每一位的安排 2020 3 19 程序状态寄存器的条件码标志 N Z C V均为条件码标志位 它们的内容可被算术或逻辑运算的结果所改变 并且可以决定某条指令是否被执行 在ARM状态下 绝大多数的指令都是有条件执行的 在Thumb状态下 仅有分支指令是有条件执行的 2020 3 19 影响标志位的指令 2020 3 19 程序状态寄存器的控制位 状态寄存器的低8位 I F T和M 4 0 称为控制位 发生异常时这些位可以被改变 如果处理器运行特权模式 这些位也可以由程序修改 中断禁止位I F I 1禁止IRQ中断 I 0允许IRQ中断F 1禁止FIQ中断 F 0允许FIQ中断 T标志位 该位反映处理器的运行状态T 1时 程序运行于Thumb状态T 0时 程序运行于ARM状态 运行模式位M 4 0 是模式位 决定处理器的运行模式 2020 3 19 处理器运行模式及可以访问的寄存器 2020 3 19 1 中断和异常的概念1 中断当CPU正在执行程序时 系统发生了一件急需处理的事件 CPU暂时停下正在执行的程序 转去处理相应的事件 事件处理完后 CPU再返回执行原来的程序 这种情况称为中断 2 9异常 2020 3 19 中断事件 引起CPU产生中断 并且与CPU当前所执行的程序无关的 由外部硬件产生的事件 也叫中断源 中断事件也常称为外中断 中断是计算机系统基本的功能利用中断 外设可以与CPU并行工作 当外设需要传输数据或控制时 向CPU发出中断请求信号 CPU响应其请求进行处理 因此 使用中断既可以实现CPU与外设并行工作 又可以实时处理各种紧急事件 2020 3 19 2 异常是指CPU在执行指令时出现的错误 即不正常的情况 异常是与当前所执行的程序有关的 如存取数据或指令错误 计算结果溢出等 异常的处理 也用中断的方式进行处理 计算机通常是用中断来处理外中断和异常 因此下面将二者均称为异常 2020 3 19 对异常的说明当系统运行时 异常可能会随时发生 为保证在ARM处理器发生异常时不至于处于未知状态 在应用程序的设计中 首先要进行异常处理 采用的方式是在异常向量表中的特定位置放置一条跳转指令 跳转到异常处理程序 2020 3 19 当ARM处理器发生异常时 程序计数器PC会被强制设置为对应的异常向量 从而跳转到异常处理程序 当异常处理完成以后 返回到主程序继续执行 我们需要处理所有的异常 尽管我们可以简单的在某些异常处理程序处放置死循环 2020 3 19 3 ARM的异常ARM有7种异常 1 复位处理器上一旦有复位输入 ARM处理器立刻停止执行当前指令 复位后 ARM处理器在禁止中断的管理模式下 从地址0 x00000000或0 xFFFF0000开始执行指令 2020 3 19 2 未定义指令异常当ARM处理器执行协处理器指令时 它必须等待任一外部协处理器应答后 才能真正执行这条指令 若协处理器没有响应 就会出现未定义指令异常 未定义指令异常可用于在没有物理协处理器 硬件 的系统上 对协处理器进行软件仿真 或在软件仿真时进行指令扩展 2020 3 19 3 软件中断异常该异常由执行SWI指令产生 可使用此机制进行软件仿真 4 预取中止 取指令存储器中止 若处理器预取指令的地址不存在 或该地址不允许当前指令访问 存储器会向处理器发出中止信号 但当预取的指令被执行时 才会产生指令预取中止异常 5 数据中止 访问数据存储器中止 若处理器数据访问指令的地址不存在 或该地址不允许当前指令访问时 产生数据中止异常 2020 3 19 6 IRQ异常当处理器的外部中断请求引脚有效 且CPSR中的I 0 产生IRQ异常 系统的外设可通过该异常请求中断服务 7 FIQ异常当处理器的外部中断请求引脚有效 且CPSR中的F 0 产生FIQ异常 FIQ支持数据传送和通道处理 并有足够的私有寄存器 从而在应用中可避免对寄存器保存的需求 减少了开销 2020 3 19 4 ARM异常中断响应过程当发生异常时 除了复位异常立即中止当前指令外 处理器尽量完成当前指令 然后脱离当前的程序去处理异常 ARM处理器对异常中断的响应过程如下 2020 3 19 1 保存返回地址将引起异常指令的下一条指令的地址保存到新的异常模式x下的R14 即R14 中 使异常处理程序执行完后能正确返回原程序 2 保存当前状态寄存器CPSR的内容将CPSR的内容保存到将要执行的异常中断对应的SPSR中 便于中断返回时恢复处理器当前的状态位 中断屏蔽位以及各条件标志位 2020 3 19 3 设置当前状态寄存器CPSR中的相应位设置CPSR模式控制位CPSR 4 0 使处理器进入相应的执行模式 设置中断标志位 CPSR 6 1 禁止IRQ中断 设置中断标志位 CPSR 7 1 禁止FIQ中断 当进入Reset或FIQ模式时 2020 3 19 4 转去执行中断处理程序取相应的中断向量给程序计数器PC 使程序开始执行中断处理程序 一般地说 矢量地址处将包含一条指向相应程序的转移指令 从而可跳转到相应的异常中断处理程序处执行异常中断处理程序 2020 3 19 R14 ReturnLinkSPSR CPSRCPSR 4 0 ExceptionModeNumberCPSR 5 0If ResetorFIQthenCPSR 6 1CPSR 7 1PC ExceptionVectorAddress 异常响应伪代码 处理器处于Thumb状态 则当异常向量地址加载入PC时 处理器自动切换到ARM状态 ARM微处理器对异常的响应过程用伪码可以描述为 在ARM状态下执行 禁止快速中断 禁止正常中断 转入异常入口地址 2020 3 19 注意使用异常模式下的特有寄存器每个异常模式对应有两个寄存器R13 R14 分别保存相应模式下的堆栈指针 返回地址 堆栈指针可用来定义一个存储区域保存其它用户寄存器 在程序初始化时应该对各种模式堆栈设置 便于随时使用 FIQ模式还有额外的专用寄存器R8 fiq R12 fiq 使用这些寄存器可以加快快速中断的处理速度 2020 3 19 5 异常返回 1 异常返回应执行的操作异常处理完毕之后 ARM微处理器会执行以下几步操作从异常返回 将返回地址装入PC把连接寄存器LR的值减去相应的偏移量 然后送到PC中 恢复CPSR的值将SPSR复制回CPSR中 清除中断屏蔽位若在进入异常处理时设置了中断禁止位 要在此清除 可以认为应用程序总是从复位异常处理程序开始执行的 因此复位异常处理程序不需要返回 2020 3 19 2 各种异常返回方法FIQ中断返回不管是在ARM状态还是在Thumb状态下进入FIQ模式 FIQ处理程序均可以执行以下指令从FIQ模式返回 SUBSPC R14 fiq 4指令预取中止 Abort 异常返回 2020 3 19 当指令预取访问存储器失败时 存储器系统向ARM处理器发出存储器中止 Abort 信号 预取的指令被记为无效 但只有当处理器试图执行无效指令时 指令预取中止异常才会发生 如果指令未被执行 例如在指令流水线中发生了跳转 则预取指令中止不会发生 如果发生了指令预取中止异常 无论是在ARM状态还是Thumb状态 其返回指令为 SUBSPC R14 abt 4 重新执行被中止的指令 2020 3 19 数据中止 Abort 异常返回如果发生了数据中止异常 无论是在ARM状态还是Thumb状态 其返回指令为 SUBSPC R14 abt 8重新执行被中止的指令 2020 3 19 软件中断指令 SWI 异常返回用于进入管理模式 常用于请求执行特定的管理功能 软件中断处理程序执行以下指令可以从SWI模式返回 无论是在ARM状态还是Thumb状态 MOVSPC R14 svc以上指令恢复PC 从R14 svc 和CPSR 从SPSR svc 的值 并返回到SWI的下一条指令 2020 3 19 未定义指令异常返回当ARM处理器遇到不能处理的指令时 会产生未定义指令异常 采用这种机制 可以通过软件仿真扩展ARM或Thumb指令集 处理器执行以下程序返回 无论是在ARM状态还是Thumb状态 MOVSPC R14 und以上指令恢复PC 从R14 und 和CPSR 从SPSR und 的值 并返回到未定义指令后的下一条指令 2020 3 19 ARM中断向量 2020 3 19 异常中断向量表说明 存储器的前8个字中除了地址0 x00000014之外 全部被用作异常矢量地址 这是因为在早期的26位地址空间的ARM处理器中 曾使用地址0 x00000014来捕获落在地址空间之外的load和store存储器地址 2020 3 19 这些陷阱称为 地址异常 因为32位的ARM不会产生落在它的32位地址空间之外的地址 所以地址异常在当前的体系结构中没有作用 0 x00000014的矢量地址也就不再使用了 2020 3 19 ARM中断的优先级 2020 3 19
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!