ARM概论(Advanced RISC Machines)


简介

ARM7是32 位通用微处理器ARM(Advanced RISC Machines)家族中的一员,具备比较低的电 源消耗和良好的性价比,
基于(精简指令)RISC结构,指令集和相关的译码机制与微程序 控制的复杂指令系统的计算机相比要相对简单,
这使得它拥有比较高的指令处理能力和实时 中断响应能力。

指令集包含11种基本类型:
     两种类型用于偏上算术逻辑单元, 在31个寄存器(32位)间执 行高速操做
                    桶式移位器
                    乘法器
     三种类型的指令控制数据在存储器和寄存器之间传送,
                    一种用于弹性地址
                    一种用于 高速内容切换
                    一种用于交换数据

     三种类型的指令用于控制流程和特权级执行
     三种专门用于控制外部的协处理器,此种协处理器容许指令集的功能以开放和统一的 格式扩展到片外

特性:
●适用于高级语言
ARM指令集对不一样高级语言的编译器来说都比较适用,须要临界的代码段,汇编语言的编程 也很简单,
不像其它的微处理器, 须要依靠复杂的编译器来管理指令。

流水线技术
指令处理和存储系统的各个部分均可以连续运行。 典型的例子, 一条指令正在执行,下一条指令正被译码,
第三条指令同时从存储器中取出。 在存储系统中,存储接口的设计能够最大限度地发挥性能潜力而不须要花费很大的代价,
度敏感信号作成流水线方式,容许系统控制功能应用于标准的低电压逻辑,这些控制信号推 动了由工业DRAM提供的快速局部访问模式

●兼容性
ARM7有32位的地址总线,全部的ARM处理器共享同一个指令集,ARM7能够配制成26位地 址线,向下兼容其它早期的处理器。

●CMOS
ARM7是全静态CMOS,容许时钟在周期的任意部分被中止,但不丢失状态。

应用:
ARM7适用于那些须要紧凑且功能强大的RISC处理器系统
     电讯 GSM终端控制
     数据通讯 协议转换
     便携式计算机 掌上电脑
     自动控制系统 发动机管理单元
     信息存贮系统 存储卡
     图像处理 JOEG控制器


二. 编程模式
ARM7支持不一样的操做配置
     硬件配置,由输入信号控制
     其余为软件控制,称为 操做模式

硬件配置信号
ARM7提供了三个硬件配置信号,处理器正在运行的时候能够改变,具体以下:
1. big and little endian  (bigend 位)
ARM7 依据BIGNED 信号为高或者低,将MEM中的数据看成Big Endian 或 Little Endian 格 式,
MEM 被看做字节线性存储,序号从0向上排列,字节0到3为第一个存储字,4 到 7为 第二个,以此类推

在LittleEndian格式,一个字的最小号字节被看成最低字节,最大号字节被看成最高字节。
字节0将被连结到数据线D[7:0]


在Big Endian 格式下,最高字节被存在MEM中的最低地址,最低字节被存在MEM的最高地
址。MEM中字节0对应数据线D[31:24],endianism只影响加载和存储指令。




操做模式选择
ARM7有32位地址和32位数据线。处理器支持字节(8位),字(32位)数据类型,字必须 四个字节对齐。
指令按字执行,数据操做(好比加法)以字为单位执行,加载和存储操做可 觉得字或字节传送。

ARM7支持六种操做模式:
(1)用户模式(usr):正常的程序执行状态
(2) FIQ模式(fiq): 支持数据传送或通道处理
(3) IRQ模式(irq): 用于通用的中断处理
(4) 管理模式(svc):用于操做系统的保护模式
(5) 异常模式(abt):数据或者指令预取异常时进入
(6) 无定义模式(und):当无定义指令被执行时进入 软件控制,外部中断,
              异常处理均可以改变操做模式。 大部分的应用程序在用户模式下执行。
(7) 其余模式,好比管理模式,在中断、异常服务、或者访问被保护资源时进入。


寄存器
ARM7处理器共有37个寄存器
         ● 31个(32位)通用寄存器
          6个状态寄存器
在任意时候 16个通用寄存器(R0-R15)和一个或者两个状态寄存器对处理器来说是可见的。
可见寄存 器依据处理器模式和其它寄存器(banked registers)将被切换去支持IRQ, FIQ,管理, 异常, 无定义模式的处理。异常模式,非定义模式。

在全部的模式中,16个寄存器(R0-R15)均可以直接访问。除过R15,其余的寄存器都是通 用寄存器, 能够用来保存数据和地址。R15保存可编程计数器PC的值,当R15被读时,位[1: 0]为’0’,位[31:2]保存计数器的值。 第十七个寄存器(CPSR-当前程序状态寄存器)也是可 以访问的。它包括了条件代码标位和当前模式位,能够看成是PC 的扩展。 R14能够看成子程序链接寄存器,当执行一个分支或者链接指令时,能够保存R15的值。在 其它状况下, 能够看成通用寄存器用。 R14_svc, R14_irq, R14_fiq, R14_abt, R14_und与R14 类似,当中断或者异常发生时,或者是中断和异常程序中,分支和分支链接指令被执行时, 能够保存R15 的返回值


FIQ模式有7个Banked 寄存器,映射到R8-14(R8_fiq- R14_fiq)。有些FIQ程序不须要存储任 何寄存器。用户模式,IRQ模式,管理模式,无定义模式都有两个Banked寄存器,映射到 R13和R14。这两个Banked寄存器容许每一个模式有本身的堆栈指针和l连接寄存器。管理模 式,IRQ模式,异常模式和无定义模式的程序(须要不止两个Banked寄存器)可以在它们自 己的堆栈中存储部分或者所有的调用程序的寄存器(R0-R12),这样就能够无限制地用这 些寄存器(R0-R12),这些寄存器在调用程序返回以前被恢复。另外,有5 个SPSRs寄存 器(存储可编程状态寄存器),当异常发生时拷贝CPSR 。每个特权级模式有一个SPSR



可编程状态寄存器的格式在图6中显示,N,Z,C,和V位条件代码标志位。看成处理器的算术或 者逻辑运算结束时这些条件代码标志位可能被改变,也能够在程序中以此做为条件来判断指 令是否被执行。 I 和 F 位为中断禁止位。当I置’1’时,禁止IRQ中断,当F置’1’时,禁止FIQ中断。M[4:0]为 模式位,这些位决定了处理器的操做模式。表2解释了模式位M[4:0]。并非全部的组合都 表示了有效的操做,只有那些明肯定义的组合才有效。 PSR寄存器的低28位(包括I,F,M[4:0])所有做为控制位。若是有异常产生这些控制位将改 变,或者在管理模式,经过软件改变控制位。没有用到的位为保留位,它们的状态在在控制
位和标志位改变时能够保留。当检查PSR状态时,程序并不须要依靠保留位的值来判断,因 为它们在未来的处理器中中可能为’1’或者’0’。


异常
当正常的程序流程须要被中断时,异常产生,使得处理器能够执行外设产生(例)的中断。 进入异常处理以前,处理器的状态必须保存,以便异常处理完以后源程序能够继续执行。可 能会有几个异常同时产生。

ARM7处理异常时,经过banked寄存器保存状态。PC和CPSR寄存器中的内容被拷贝到相应 的R14和SPSR中,PC 和CPSR中的模式位M[0:4]根据异常类型被强制改变。在异常断处理 中,若是要禁止其它难以管理异常的嵌套,能够置位中断禁止标志位。在须要重复进入中断 处理程序的状况下,R14和SPSR应该在中断被使能以前保存到主MEM的堆栈中;当传送 SPSR寄存器到堆栈或者从堆栈传送时,须要注意的是必须传送整个字(32位),而不仅是 标志位或者控制位。当多个异常同时产生时,固定的优先级决定异常响应的顺序。优先级将 在之后章节中说明

FIQ
FIQ(快速中断请求)异常是由外部产生,将Nfiq输入拉低。此输入能够接受异步转换,在 影响处理器的执行流程以前,会被延迟一个时钟周期,以便与处理器保持同步。此设计支持 数据传输或者通道处理,有足够的私有寄存器转移在某些应用中须要保存的值(最小化切换 成本) 。 能够置位在CPSR中的F标志位屏蔽FIQ异常 (除过用户模式) , 若是F位清零, ARM7 在每一条指令结束时会检查FIQ同步器的输出是否为低电平。 当检测到有FIQ低电平输入时,ARM7执行如下步骤:
(1) 将下一条将要执行的指令地址+4,保存到R14_fiq,保存CPSR的值到SPSR_fiq
(2) 强制M[4:0]=10001(FIQ模式),置位CPSR中的F,I
(3) 强制PC从地址0X1C取下一条指令

为了从FIQ返回,执行 SUBS PC,R14_fiq,#4 将恢复PC(从R14)和CPSR(从SPSR_fiq)并 继续执行的被中断的程序。

IRQ
IRQ(中断请求)为普通异常,当 nIRQ 输入位低电平时产生IRQ。它的优先级低于FIQ,并 且当进入FIQ异常处理程序时,它被屏蔽。在任什么时候候将CPSR中I 位置1,均可以屏蔽此中 断(用户模式除外)。当I 位清零时,ARM7在每一条指令结束时会检查IRQ同步器的输 出是否有低电平。当检测到有IRQ输入时ARM7执行如下步骤:
(1) 将下一条将要执行的指令地址+4,保存到R14_fiq,保存CPSR的值到SPSR_fiq
(2) 强制M[4:0]=10010(IRQ模式),置位CPSR中的I
(3) 强制PC从地址0X18取下一条指令

为了从IRQ状态恢复正常,执行SUBS PC,R14_fiq,#4 将恢复PC(从R14)和CPSR(从 SPSR_fiq)并继续执行的被中断的程序。

异常中断
异常中断由外部的ABORT输入产生。ABORT表示当前存储器访问没有完成。举例来说,在 虚拟存储器系统中,当前地址上相应的数据可能已经从存储器被移到disc, 在访问完成以前, 可能要求处理器动做以恢复这些数据。Arm7在存储器访问周期检查ABORT信号,若是有异
常产生,ARM7将执行如下两种步骤之一:
(1) 若是异常在指令预取时产生(预取异常),预取的指令被标志为无效,可是异常中 断并不当即产生。若是指令没有被执行,举例来说,在流水线中的一个分支指令, 将不会产生异常,若是指令到流水线的出口并将要被执行时,异常产生。
(2) 若是异常在数据访问时产生(数据异常),ARM7的动做将依靠指令类型
          (A) 单次数据传输指令(LDR,STR)将回写改变过的基址寄存器,异常处理程序必
                        须注意到这一点。
          (B) 交换指令异常(SWP),虽然外部的读写访问可能发生,但就好像此指令没有
                         被执行同样
          (C) 块数据传输指令完成(LDM,STM),若是回写位置1,基址将改变。若是正常 状况下,指令回写基址寄存器(LDM传输列表中的基址),
                    则回写 被禁止。当 异常产生时,全部寄存器回写都被禁止。这就意味着当LDM指令异常时,R15 (老是最后一个被传送)将保留。

在指令预取异常或数据异常发生,ARM7进行如下操做:
(1) 保存地址 (异常指令地址 加4 for 指令预取异常, 加8 for 数据异常) 到R14_abt, 保存CPSR到SPSR_abt
(2) 强制M[4:0]=10111(异常模式),置位CPSR中的I
(3) 强制PC从地址0X0C(预取异常)或0X10(数据异常)取下一条指令

为了从异常返回,执行SUBS PC,R14_abt,#4 (预取异常)或SUBS PC,R14_abt,#8 (数 据异常),恢复PC和CPSR并继续执行被异常的指令。
当适当的MEM管理软件有效时,异常机制容许执行錀须要的页式虚拟MEM系统鐀。处理器 能够产生任意地址,若是地址中的数据无效时,MMU产生异常。处理器进入系统软件陷阱, 系统软件必须找出异常缘由,使请求的数据有效,从新执行被异常的指令。应用程序不须要 知道它用到的有效MEM的总量,也不须要异常时的状态。

软件中断
软件中断指令(SWI)从其它模式进入管理模式。一般状况下,请求一个特殊的管理函数。
当SWI指令被执行时,ARM7执行如下动做:
(1) 将SWI指令地址加4保存到R14_svc,保存CPSR的值到SPSR_svc
(2) 强制M[4:0]=10011(管理模式),置位CPSR中的 I
(3) 强制PC在地址0X80取下一条指令
为了从SWI返回,执行指令MOVS PC,R14_svc,恢复PC和CPSR的值,返回到SWI的下一 条指令。

无定义的指令陷阱
当ARM7遇到本身没有办法处理的指令(第四章:指令集),它将此指令提供给现场的协处 理器。若是协处理器能够执行此指令,但当时又比较忙,ARM7将进入等待状态,直到协处 理器准备好或者中断产生。若是没有协处理器能够处理此指令,ARM7将进入无定义指令陷 阱。

当系统中没有协处理器硬件时,陷阱能够用来作协处理器的软件仿真,或者经过软件仿真用 于通用指令集扩展。
当ARM7接收到无定义指令陷阱时,执行如下步骤:
(1) 将无定义指令或协处理器指令加4保存到R14_und;保存CPSR到SPSR_und.
(2) 强制M[4:0]=11011(无定义模式),置位CPSR中的 I
(3) 强制PC在地址0X04取下一条指令
在仿真失败的指令以后,为了从陷阱返回,执行MOVS PC,R14_und,恢复CPSR并返回到无 定义指令的下一条指令。






相关文章
相关标签/搜索