标志31N30292827ZCV.8.控制7IF6.54M43M3210M2M1M0模式位FIQ禁止位IRQ禁止位溢出进位,借位,扩展零负数,少于图6:可编程状态寄存器格式可编程状态寄存器的格式在图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’。M[4:0]100001000110010100111011111011
模式用户FIQIRQ管理异常无定义
PC,R14…R0
可访问的寄存器
CPSR
CPSR,SPSR_fiqCPSR,SPSR_irqCPSR,SPSR_svcCPSR,SPSR_abtCPSR,SPSR_und
PC,R14_fiq…R8_fiq,R7…R0PC,R14_irq…R13_irq,R12…R0PC,R14_svc…R13_svc,R12…R0PC,R14_abt..R13_abt,R12..R0PC,R14_und..R13_und,R12..R0
表2模式位定义
16
This file is generated by AlienTools PDF Generator, unregister version
3.4异常
????μμóé Foxit Reader ±à?-°?è¨??óD ·-°?2?????1??à1à?£
当正常的程序流程需要被中断时,异常产生,使得处理器可以执行外设产生(例)的中断。进入异常处理之前,处理器的状态必须保存,以便异常处理完之后源程序可以继续执行。可能会有几个异常同时产生。
ARM7处理异常时,通过banked寄存器保存状态。PC和CPSR寄存器中的内容被拷贝到相应的R14和SPSR中,PC和CPSR中的模式位M[0:4]根据异常类型被强制改变。在异常断处理中,如果要禁止其它难以管理异常的嵌套,可以置位中断禁止标志位。在需要重复进入中断处理程序的情况下,R14和SPSR应该在中断被使能之前保存到主MEM的堆栈中;当传送SPSR寄存器到堆栈或者从堆栈传送时,需要注意的是必须传送整个字(32位),而不只是标志位或者控制位。当多个异常同时产生时,固定的优先级决定异常响应的顺序。优先级将在以后章节中说明。3.4.1FIQ
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返回,执行SUBSPC,R14_fiq,#4将恢复PC(从R14)和CPSR(从SPSR_fiq)并继续执行的被中断的程序。3.4.2IRQ
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取下一条指令
17
This file is generated by AlienTools PDF Generator, unregister version
为了从IRQ状态恢复正常,执行SUBSPC,R14_fiq,#4将恢复PC(从R14)和CPSR(从SPSR_fiq)并继续执行的被中断的程序。3.4.3异常中断
异常中断由外部的ABORT输入产生。ABORT表示当前存储器访问没有完成。举例来讲,在虚拟存储器系统中,当前地址上相应的数据可能已经从存储器被移到disc,在访问完成之前,可能要求处理器动作以恢复这些数据。Arm7在存储器访问周期检查ABORT信号,如果有异常产生,ARM7将执行以下两种步骤之一:
(1)如果异常在指令预取时产生(预取异常),预取的指令被标志为无效,但是异常中
断并不立即产生。如果指令没有被执行,举例来讲,在流水线中的一个分支指令,将不会产生异常,如果指令到流水线的出口并将要被执行时,异常产生。(2)如果异常在数据访问时产生(数据异常),ARM7的动作将依靠指令类型
(A)单次数据传输指令(LDR,STR)将回写改变过的基址寄存器,异常处理程序必
须注意到这一点。
(B)交换指令异常(SWP),虽然外部的读写访问可能发生,但就好像此指令没有
被执行一样
(C)块数据传输指令完成(LDM,STM),如果回写位置1,基址将改变。如果正常
情况下,指令回写基址寄存器(LDM传输列表中的基址),则回写被禁止。当异常产生时,所有寄存器回写都被禁止。这就意味着当LDM指令异常时,R15(总是最后一个被传送)将保留。在指令预取异常或数据异常发生,ARM7进行以下操作:
(1)保存地址(异常指令地址加4for指令预取异常,加8for数据异常)到R14_abt,
保存CPSR到SPSR_abt
(2)强制M[4:0]=10111(异常模式),置位CPSR中的I
(3)强制PC从地址0X0C(预取异常)或0X10(数据异常)取下一条指令
为了从异常返回,执行SUBSPC,R14_abt,#4(预取异常)或SUBSPC,R14_abt,#8(数据异常),恢复PC和CPSR并继续执行被异常的指令。
当适当的MEM管理软件有效时,异常机制允许执行需要的页式虚拟MEM系统。处理器可以产生任意地址,如果地址中的数据无效时,MMU产生异常。处理器进入系统软件陷阱,系统软件必须找出异常原因,使请求的数据有效,重新执行被异常的指令。应用程序不需要知道它用到的有效MEM的总量,也不需要异常时的状态。
18
This file is generated by AlienTools PDF Generator, unr
3.4.4软件中断
????μμóé Foxit Reader ±à?-°?è¨??óD ·-°?2?????1??à1à?£
软件中断指令(SWI)从其它模式进入管理模式。通常情况下,请求一个特殊的管理函数。当SWI指令被执行时,ARM7执行以下动作:(1)将SWI指令地址加4保存到R14_svc,保存CPSR的值到SPSR_svc(2)强制M[4:0]=10011(管理模式),置位CPSR中的I(3)强制PC在地址0X80取下一条指令
为了从SWI返回,执行指令MOVSPC,R14_svc,恢复PC和CPSR的值,返回到SWI的下一条指令。
3.4.5无定义的指令陷阱
当ARM7遇到自己没有办法处理的指令(第四章:指令集),它将此指令提供给现场的协处理器。如果协处理器可以执行此指令,但当时又比较忙,ARM7将进入等待状态,直到协处理器准备好或者中断产生。如果没有协处理器可以处理此指令,ARM7将进入无定义指令陷阱。
当系统中没有协处理器硬件时,陷阱可以用来做协处理器的软件仿真,或者通过软件仿真用于通用指令集扩展。
当ARM7接收到无定义指令陷阱时,执行以下步骤:
(1)将无定义指令或协处理器指令加4保存到R14_und;保存CPSR到SPSR_und.(2)强制M[4:0]=11011(无定义模式),置位CPSR中的I(3)强制PC在地址0X04取下一条指令
在仿真失败的指令之后,为了从陷阱返回,执行MOVSPC,R14_und,恢复CPSR并返回到无定义指令的下一条指令。
19
This file is generated by AlienTools PDF Generator, unregister version
3.4.6向量总结地址0X000000000X000000040X000000080X0000000C0X000000100X000000140X000000180X0000001C
异常复位无定义指令软件中断异常(预取)异常(数据)保留IRQFIQ
表3:向量总结
这些是字节地址,通常包括了指向相关程序的分支指令。FIQ程序处于0X1C,从而不需要分支指令(和执行时间)。3.4.7异常优先级
当多个异常时产生时,固定的优先级系统决定异常处理的顺序:(1)(2)(3)(4)(5)(6)
复位(最高优先级)数据异常中断FIQIRQ
预取异常
无定义异常,软件中断(最低优先级)
进入模式管理模式无定义管理异常异常--IRQFIQ
注意,不是所有的异常都会立即产生,无定义指令和软件中断互为排斥,因为它们都依靠当前指令的特定译码(不能重叠)。
如果数据异常和FIQ同时发生,且FIQ被使能(CPSR中F标志位为0),ARM7将进入数据异常处理,然后立即进入FIQ中断向量处理,从FIQ的正常返回将使数据异常处理器继续运行。数据异常优先级高于FIQ,保证能够检测到传输错误,计算数据异常响应时间应该加上最差的情况下FIQ处理的时间。
20
This file is generated by AlienTools PDF Generator, unregister version