ARM处理器的工作模式_第1页
ARM处理器的工作模式_第2页
ARM处理器的工作模式_第3页
ARM处理器的工作模式_第4页
ARM处理器的工作模式_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统设计 ARM处理器的工作模式 1 1ARM处理器的工作状态和模式 为了能够体现ARM的特点和性能 ARM处理器有两种工作状态和7种工作模式 1 1 1ARM处理器的工作状态有两种工作状态 ARM状态 处理器执行32位的字对齐的ARM指令 Thumb状态 处理器执行16位的半字对齐的Thumb指令 两种状态可以切换 程序执行过程中 通过执行带状态切换的分支指令BX 随时在两种工作状态之间进行切换 并且 处理器工作状态的转变 并不影响处理器的工作模式和相应寄存器中的内容 1 1ARM处理器的工作状态和模式 2 从ARM状态切换到Thumb状态有两种情况ARM处理器自动切换到Thumb状态 1 执行BX指令 当操作数寄存器的位 0 为1时 则微处理器从ARM状态切换到Thumb状态 此为主动切换 2 当处理器处于Thumb状态时发生异常 如IRQ FIQ Undef等 处理完异常后 在异常处理返回时 自动切换到Thumb状态 此为自动切换 从Thumb状态切换到ARM状态有两种情况ARM处理器自动切换到Thumb状态 1 执行BX指令 当操作数寄存器的位 0 为0时 则微处理器从Thumb状态切换到ARM状态 2 当处理器在Thumb状态时发生异常 如IRQ FIQ Undef等 则处理器从Thumb状态自动切换到ARM状态进行异常处理 1 1ARM处理器的工作状态和模式 3 例1 1状态切换程序 从ARM状态切换到Thumb状态LDRR0 Lable 1BXR0 从Thumb状态切换到ARM状态LDRR0 LableBXR0注意 ARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内容 ARM处理器在开始执行代码时 只能处于ARM状态 1 1 2ARM处理器的工作模式 一 ARM9的7种工作模式1 用户模式 usr 非特权模式 大部分任务执行在这种模式 正常程序执行的模式2 快速中断模式 fiq 当一个高优先级 fast 中断产生时将会进入这种模式 高速数据传输或通道处理3 外部中断模式 irq 当一个低优先级 normal 中断产生时将会进入这种模式 通常的中断处理4 管理模式 svc 当复位或软中断指令执行时将会进入这种模式 供操作系统使用的一种保护模式 1 1 2ARM处理器的工作模式 2 5 中止模式 abt 当存取异常时将会进入这种模式虚拟存储及存储保护6 未定义模式 und 当执行未定义指令时会进入这种模式软件仿真硬件协处理器7 系统模式 sys 供需要访问系统资源的操作系统任务使用特权级的操作系统任务 1 1 2ARM处理器的工作模式 2 二 模式分类及特点七种模式可以划分成四类1 用户模式特点 应用程序不能够访问受操作系统保护的系统资源 应用程序不能进行处理器模式的切换 2 系统模式特点 不属于异常模式 不是通过异常进入的 系统模式属于特权模式 可以访问所有的系统资源 也可以直接进行模式的切换 它主要供操作系统使用 3 特权模式及其特点 特权模式 除用户模式之外的工作模式又称为特权模式特点 应用程序可以访问所有的系统资源可以任意地进行处理器模式的切换 1 1 2ARM处理器的工作模式 3 4 异常模式及其特点 异常模式 除用户模式 系统模式之外的五种模式称为异常模式 特点 以各自的中断或异常方式进入 并且处理各自的中断或异常 对管理模式 svc 进入方式和处理内容有 系统上电复位后进入管理模式 运行系统初始化程序 如中断允许 禁止 主时钟设置 SDRAM配置 各个功能模块初始化等 当执行软件中断指令SWI时 进入管理模式 1 1 2ARM处理器的工作模式 4 处理器模式的切换方式 软件控制进行切换 通过外部中断和异常进行切换处理器启动时的模式转换图 管理模式 Supervisor 多种特权模式变化 用户程序的运行模式 复位后的缺省模式 主要完成各模式的堆栈设置 注意不要进入用户模式 一般为用户模式User 1 2ARM9寄存器 本节主要内容1 ARM寄存器概述2 ARM通用寄存器3 ARM状态寄存器 1 2ARM9寄存器 1 2 1 ARM寄存器概述ARM处理器v4及以上版本有37个32位的寄存器其中31个为通用寄存器 6个为状态寄存器 31个通用寄存器R0 R15 R13 svc R14 svc R13 abt R14 abt R13 und R14 und R13 irq R14 irq R8 fiq R14 fiq6个状态寄存器CPSRSPSR svc SPSR abt SPSR und SPSR irq和SPSR fiq 1 2ARM9寄存器 2 每一类处理器模式都有一组相应的寄存器组 在任意的处理器模式下 可见的寄存器包括15个通用寄存器 R0 R14 1个或2个状态寄存器和程序寄存器 带灰色底纹的单元格表示 用户模式或系统模式使用的一般寄存器 已被异常模式特定的另一寄存器所替代 1 2ARM寄存器 4 1 2 2ARM的通用寄存器通用寄存器包括R0 R15 可以分为三类 未分组寄存器R0 R7 分组寄存器R8 R14 程序计数器PC R15 一 未分组寄存器R0 R7在所有的运行模式下 未分组寄存器都指向同一个物理寄存器 他们未被系统用作特殊的用途 是真正的通用寄存器 因此 在中断或异常处理进行运行模式转换时 由于不同的处理器运行模式均使用相同的物理寄存器 可能会造成寄存器中数据的破坏 这一点在进行程序设计时应引起注意 1 2ARM寄存器 5 二 分组的寄存器R8 R14对于R8 R12 每一次所访问的物理寄存器 与处理器当前的工作模式有关 1 R8 R12当处理器工作于fiq模式时 访问的寄存器为R8 fiq R12 fiq 除fiq模式以外的其他模式 访问的寄存器为R8 usr R12 usr 2 R13和R14 每个寄存器对应6个不同的物理寄存器 其中的一个是用户模式与系统模式共用 另外5个物理寄存器 对应于其他5种不同的异常模式 采用以下的记号来区分不同的物理寄存器 R13 R14 其中 mode为以下几种模式之一 usr fiq irq svc abt und 1 2ARM寄存器 6 R13 寄存器R13在ARM指令中常用作堆栈指针SP 但这只是一种习惯用法 用户也可使用其他的寄存器作为堆栈指针 而在Thumb指令集中 某些指令强制性的要求使用R13作为堆栈指针 R14 寄存器R14也称作子程序链接寄存器 SubroutineLinkRegister 或链接寄存器LR 当执行BL子程序调用指令时 R14中得到R15 程序计数器PC 的备份 其他情况下 R14用作通用寄存器 与之类似 当发生中断或异常时 对应的分组寄存器R14 svc R14 irq R14 fiq R14 abt和R14 und用来保存R15的返回值 1 2ARM寄存器 7 三 程序计数器PC R15 寄存器R15用作程序计数器 PC 在ARM状态下 位 1 0 为0 位 31 2 用于保存PC 在Thumb状态下 位 0 为0 位 31 1 用于保存PC 使用R15时注意 虽然R15可以用作通用寄存器 但是有一些指令在使用R15时有一些特殊限制 若不注意 执行的结果将是不可预料的 所以 一般不这么使用 关于PC的值 由于ARM采用多级流水线技术 所以PC总是指向正在取指的指令 而不是正在执行的指令 也即PC总是指向当前指令的下两条指令的地址 因此 对于ARM指令集而言 PC的值为当前指令的地址值加8个字节 1 2ARM寄存器 8 1 2 3ARM的状态寄存器一 两种程序状态寄存器在ARM微处理器中 有CPSR和SPSR两种程序状态寄存器 1 当前程序状态寄存器CPSR CurrentProgramStatusRegister 用来保存当前程序状态的寄存器 所有处理器模式下都可以访问当前程序状态寄存器CPSR 仅一个CPSR 2 保存程序状态寄存器SPSR mode SavedProgramStatusRegister SPSR mode用来进行异常处理 其功能包括 保存ALU中的当前操作信息当异常发生时 用来保存CPSR的值 从异常返回时 将SPSR mode复制到CPSR中 恢复CPSR的值 控制允许和禁止中断修改SPSR的值 设置处理器的运行模式修改SPSR的值问题 一共有多少个SPSR 为什么 1 2 3ARM的状态寄存器 2 二 ARM状态寄存器的格式1 条件码标志位 保存ALU中的当前操作信息 N 正负号 大小标志位0表示 正数 大于 1表示 负数 小于Z 零标志位0表示 结果不为零 1表示 结果为零C 进位 借位 移出位0表示 未进位 借位 移出0 1表示 进位 未借位 移出1V 溢出标志位0表示 结果未溢出 1表示 结果溢出 1 2 3ARM9的状态寄存器 3 2 控制位I F中断控制位 控制允许和禁止中断I 1禁止IRQ中断I 0允许IRQ中断F 1禁止FIQ中断F 0允许FIQ中断T控制 标志 位 反映处理器的运行状态T 1时 程序运行于Thumb状态T 0时 程序运行于ARM状态M控制位 决定了处理器的运行模式当发生异常时这些位被改变 如果处理器运行在特权模式 这些位也可以由程序修改 1 2 3ARM9的状态寄存器 4 3 保留位CPSR中的其余位为保留位 当改变CPSR中的条件码标志位或者控制位时 保留位不要改变 在程序中也不要使用保留位来存储数据 保留位将用于ARM版本的扩展 1 2 4Thumb状态下的寄存器组织Thumb状态下的寄存器集是ARM状态下寄存器集的子集 程序员可以直接访问8个通用的寄存器 R0 R7 程序计数器PC 堆栈指针SP 链接寄存器LR和当前状态寄存器CPSP 本节主要内容1 中断和异常的概念2 ARM的异常中断介绍3 ARM的异常中断响应过程4 中断向量和中断优先级 1 3ARM异常 1 3ARM异常 1 3 1中断和异常的概念1 中断当CPU正在执行程序时 系统发生了一件急需处理的事件 CPU暂时停下正在执行的程序 转去处理相应的事件 事件处理完后 CPU再返回执行原来的程序 这种情况称为中断 这是中断的本来意义 中断事件 引起CPU产生中断 并且与CPU当前所执行的程序无关的 由外部硬件产生的事件 也叫中断源 中断事件也常称为外中断 常说的中断 有时指的是中断的本意 有时指的是外部中断事件 即外中断 中断是计算机系统基本的功能利用中断 外设可以与CPU并行工作 当外设需要传输数据或控制时 向CPU发出中断请求信号 CPU响应其请求进行处理 因此 使用中断既可以实现CPU与外设并行工作 又可以实时处理各种紧急事件 1 3ARM异常 2 异常是指CPU在执行指令时出现的错误 即不正常的情况 异常是与当前所执行的程序有关的 如存取数据或指令错误 计算结果溢出等 异常的处理 也用中断的方式进行处理 计算机通常是用中断来处理外中断和异常 因此下面将二者均称为异常 3 ARM程序的三种执行流程顺序流程 每执行一条ARM指令 程序计数器 PC 的值加4 每执行一条Thumb指令 程序计数器寄存器 PC 的值加2 整个过程是按顺序执行 对异常的说明当系统运行时 异常可能会随时发生 为保证在ARM处理器发生异常时不至于处于未知状态 在应用程序的设计中 首先要进行异常处理 采用的方式是在异常向量表中的特定位置放置一条跳转指令 跳转到异常处理程序 当ARM处理器发生异常时 程序计数器PC会被强制设置为对应的异常向量 从而跳转到异常处理程序 当异常处理完成以后 返回到主程序继续执行 我们需要处理所有的异常 尽管我们可以简单的在某些异常处理程序处放置死循环 1 3ARM异常 1 3ARM异常 跳转流程 程序执行了跳转指令 则要跳转到特定的地址标号处执行 包括跳转到子程序 例如 跳转指令 B BL BLX和BX 中断流程 当异常中断发生时 系统执行完当前指令后 将跳转到相应的异常中断处理程序处执行 在当异常中断处理程序执行完成后 程序返回到发生中断的指令的下条指令处执行 在进行异常中断处理程序时 要保存被中断的程序的执行现场 在从异常中断处理程序退出时 要恢复被中断的程序的执行现场 中断处理与子程序调用的区别 中断是随机的 并且与正在执行的程序无关 子程序调用是程序的主动行为 并且与正在执行的程序密切相关 1 3 2ARM的异常ARM有7种异常1 复位处理器上一旦有复位输入 ARM处理器立刻停止执行当前指令 复位后 ARM处理器在禁止中断的管理模式下 从地址0 x00000000或0 xFFFF0000开始执行指令 2 未定义指令异常当ARM处理器执行协处理器指令时 它必须等待任一外部协处理器应答后 才能真正执行这条指令 若协处理器没有响应 就会出现未定义指令异常 未定义指令异常可用于在没有物理协处理器 硬件 的系统上 对协处理器进行软件仿真 或在软件仿真时进行指令扩展 1 3ARM异常 3 软件中断异常该异常由执行SWI指令产生 可使用此机制进行软件仿真 4 预取中止 取指令存储器中止 若处理器预取指令的地址不存在 或该地址不允许当前指令访问 存储器会向处理器发出中止信号 但当预取的指令被执行时 才会产生指令预取中止异常 5 数据中止 访问数据存储器中止 若处理器数据访问指令的地址不存在 或该地址不允许当前指令访问时 产生数据中止异常 1 3ARM异常 6 IRQ异常当处理器的外部中断请求引脚有效 且CPSR中的I 0 产生IRQ异常 系统的外设可通过该异常请求中断服务 7 FIQ异常当处理器的外部中断请求引脚有效 且CPSR中的F 0 产生FIQ异常 FIQ支持数据传送和通道处理 并有足够的私有寄存器 从而在应用中可避免对寄存器保存的需求 减少了开销 1 3ARM异常 1 3 3ARM异常中断响应过程一 进入异常当发生异常时 除了复位异常立即中止当前指令外 处理器尽量完成当前指令 然后脱离当前的程序去处理异常 ARM处理器对异常中断的响应过程如下 1 保存返回地址将引起异常指令的下一条指令的地址保存到新的异常模式x下的R14 即R14 中 使异常处理程序执行完后能正确返回原程序 2 保存当前状态寄存器CPSR的内容将CPSR的内容保存到将要执行的异常中断对应的SPSR中 便于中断返回时恢复处理器当前的状态位 中断屏蔽位以及各条件标志位 1 3ARM异常 3 设置当前状态寄存器CPSR中的相应位设置CPSR模式控制位CPSR 4 0 使处理器进入相应的执行模式 设置中断标志位 CPSR 6 1 禁止IRQ中断 设置中断标志位 CPSR 7 1 禁止FIQ中断 当进入Reset或FIQ模式时 4 转去执行中断处理程序取相应的中断向量给程序计数器PC 使程序开始执行中断处理程序 一般地说 矢量地址处将包含一条指向相应程序的转移指令 从而可跳转到相应的异常中断处理程序处执行异常中断处理程序 1 3ARM异常 1 3ARM异常 ARM处理器对异常的响应过程可以用伪代码描述如下 R14 returnlinkSPSR CPSRCPSR 4 0 exceptionmodenumberCPSR 5 0 当运行于ARM状态时 CPSR 6 1 禁止新的IRQ中断 if ResetorFIQthenCPSR 7 1 当Reset或FIQ异常中断时 禁止新的FIQ中断 PC exceptionvectoraddress 注意使用异常模式下的特有寄存器每个异常模式对应有两个寄存器R13 R14 分别保存相应模式下的堆栈指针 返回地址 堆栈指针可用来定义一个存储区域保存其它用户寄存器 在程序初始化时应该对各种模式堆栈设置 便于随时使用 FIQ模式还有额外的专用寄存器R8 fiq R12 fiq 使用这些寄存器可以加快快速中断的处理速度 1 3ARM异常 二 异常返回1 异常返回应执行的操作异常处理完毕之后 ARM微处理器会执行以下几步操作从异常返回 将返回地址装入PC把连接寄存器LR的值减去相应的偏移量 然后送到PC中 恢复CPSR的值将SPSR复制回CPSR中 清除中断屏蔽位若在进入异常处理时设置了中断禁止位 要在此清除 可以认为应用程序总是从复位异常处理程序开始执行的 因此复位异常处理程序不需要返回 1 3ARM异常 2 各种异常返回方法FIQ中断返回不管是在ARM状态还是在Thumb状态下进入FIQ模式 FIQ处理程序均可以执行以下指令从FIQ模式返回 SUBSPC R14 fiq 4指令预取中止 Abort 异常返回当指令预取访问存储器失败时 存储器系统向ARM处理器发出存储器中止 Abort 信号 预取的指令被记为无效 但只有当处理器试图执行无效指令时 指令预取中止异常才会发生 如果指令未被执行 例如在指令流水线中发生了跳转 则预

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论