ARM7是32 位通用微处理器ARM(Advanced RISC Machines)家族中的一员,具有比较低的电源消耗和良好的性价比,
基于(精简指令)RISC结构,指令集和相关的译码机制与微程序控制的复杂指令系统的计算机相比要相对简单,
这使得它拥有比较高的指令处理能力和实时中断响应能力。
指令集包含11种基本类型:
●两种类型用于偏上算术逻辑单元,在31个寄存器(32位)间执行高速操作
桶式移位器
乘法器
●三种类型的指令控制数据在存储器和寄存器之间传送,
一种用于弹性地址
一种用于高速内容切换
一种用于交换数据
●三种类型的指令用于控制流程和特权级执行
●三种专门用于控制外部的协处理器,此种协处理器允许指令集的功能以开放和统一的格式扩展到片外
特性:
●适用于高级语言
ARM指令集对不同高级语言的编译器来讲都比较适用,需要临界的代码段,汇编语言的编程也很简单,
不像其它的微处理器,需要依靠复杂的编译器来管理指令。
●流水线技术
指令处理和存储系统的各个部分都可以连续运行。 典型的例子,一条指令正在执行,下一条指令正被译码,
第三条指令同时从存储器中取出。在存储系统中,存储接口的设计可以最大限度地发挥性能潜力而不需要花费很大的代价,
速度敏感信号做成流水线方式,允许系统控制功能应用于标准的低电压逻辑,这些控制信号推动了由工业DRAM提供的快速局部访问模式
●兼容性
ARM7有32位的地址总线,所有的ARM处理器共享同一个指令集,ARM7可以配制成26位地址线,向下兼容其它早期的处理器。
●CMOS
ARM7是全静态CMOS,允许时钟在周期的任意部分被停止,但不丢失状态。
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 的返回值
异常
当正常的程序流程需要被中断时,异常产生,使得处理器可以执行外设产生(例)的中断。进入异常处理之前,处理器的状态必须保存,以便异常处理完之后源程序可以继续执行。可能会有几个异常同时产生。
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并返回到无定义指令的下一条指令。