资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,嵌入式系统设计,:ARM,处理器的工作模式,1,1.1 ARM,处理器的工作状态和模式,为了能够体现,ARM,的特点和性能,,ARM,处理器有两种工作状态和,7,种工作模式。,1.1.1 ARM,处理器的工作状态,有两种工作状态:,ARM,状态:,处理器执行,32,位的字对齐的,ARM,指令;,Thumb,状态:,处理器执行,16,位的半字对齐的,Thumb,指令。,两种状态可以切换,。程序执行过程中,通过执行,带状态切换的分支指令,BX,,随时在两种工作状态之间进行切换。并且,处理器工作状态的转变,并不影响处理器的工作模式和相应寄存器中的内容。,2,1.1 ARM,处理器的工作状态和模式,(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,状态进行异常处理,3,1.1 ARM,处理器的工作状态和模式,(3),例,1.1,状态切换程序,;,从,ARM,状态切换到,Thumb,状态,LDRR0,=Lable+1,BXR0,;,从,Thumb,状态切换到,ARM,状态,LDRR0,=Lable,BXR0,注意:,ARM,和,Thumb,之间状态的切换不影响处理器的模式或寄存器的内容。,ARM,处理器在开始执行代码时,只能处于,ARM,状态。,4,1.1.2 ARM,处理器的工作模式,一、,ARM9,的,7,种工作模式,1,、用户模式(,usr),:,非特权模式,大部分任务执行在这种模式。,正常程序执行的模式,2,、快速中断模式(,fiq,):,当一个高优先级,(fast),中断产生时将会进入这种模式。,高速数据传输或通道处理,3,、外部中断模式(,irq,):,当一个低优先级,(normal),中断产生时将会进入这种模式。,通常的中断处理,4,、管理模式(,svc),:,当复位或软中断指令执行时将会进入这种模式。,供操作系统使用的一种保护模式,5,1.1.2 ARM,处理器的工作模式,(2),5,、中止模式(,abt,):,当存取异常时将会进入这种模式,虚拟存储及存储保护,6,、未定义模式(,und,):,当执行未定义指令时会进入这种模式,软件仿真硬件协处理器,7,、系统模式(,sys,):,供需要访问系统资源的操作系统任务使用,特权级的操作系统任务,6,1.1.2 ARM,处理器的工作模式,(2),二、模式分类及特点,七种模式可以划分成四类,1,、用户模式特点:,应用程序不能够访问受操作系统保护的系统资源。,应用程序不能进行处理器模式的切换。,2,、系统模式特点:,不属于异常模式,不是通过异常进入的。系统模式属于特权模式,可以访问所有的系统资源,也可以直接进行模式的切换。它主要供操作系统使用。,3,、特权模式及其特点:,特权模式:,除用户模式之外的工作模式又称为特权模式,特点:,应用程序可以访问所有的系统资源,可以任意地进行处理器模式的切换,7,1.1.2 ARM,处理器的工作模式,(3),4,、异常模式及其特点:,异常模式:,除用户模式、系统模式之外的五种模式称为异常模式。,特点:以各自的中断或异常方式进入,并且处理各自的中断或异常。对管理模式,(svc),进入方式和处理内容有,:,系统上电复位后进入管理模式,运行系统初始化程序,如中断允许,/,禁止,主时钟设置,,SDRAM,配置,各个功能模块初始化等。,当执行软件中断指令,SWI,时,进入管理模式。,8,1.1.2 ARM,处理器的工作模式,(4),处理器模式的切换方式:,软件控制进行切换。,通过外部中断和异常进行切换,处理器启动时的模式转换图,管理模式,(Supervisor),多种特权,模式变化,用户程序的,运行模式,复位后的缺省模式,主要完成各模式的堆栈设置,注意不要进入用户模式,一般为用户模式,User,9,1.2 ARM9,寄存器,本节主要内容,1,、,ARM,寄存器概述,2,、,ARM,通用寄存器,3,、,ARM,状态寄存器,10,1.2 ARM9,寄存器,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_fiq,6,个状态寄存器,CPSR,SPSR_svc,、,SPSR_abt,、,SPSR_und,、,SPSR_irq,和,SPSR_fiq,11,1.2 ARM9,寄存器,(2),每一类处理器模式都有一组相应的寄存器组;,在任意的处理器模式下,可见的寄存器包括,15,个通用寄存器(,R0,R14,)、,1,个或,2,个状态寄存器和程序寄存器。,带灰色底纹的单元格表示,用户模式或系统模式使用的一般寄存器,已被异常模式特定的另一寄存器所替代。,12,1.2 ARM,寄存器,(4),1.2.2 ARM,的通用寄存器,通用寄存器包括,R0,R15,,可以分为三类:,未分组寄存器,R0,R7,分组寄存器,R8,R14,程序计数器,PC(R15),一、未分组寄存器,R0,R7,在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途,,是真正的通用寄存器,。,因此,在中断或异常处理进行运行模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,可能会造成寄存器中数据的破坏,这一点在进行程序设计时应引起注意。,13,1.2 ARM,寄存器,(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,。,14,1.2 ARM,寄存器,(6),R13,:,寄存器,R13,在,ARM,指令中,常用作堆栈指针,SP,。,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。而在,Thumb,指令集中,某些指令强制性的要求使用,R13,作为堆栈指针。,R14,:,寄存器,R14,也称作子程序链接寄存器(,Subroutine Link Register,)或,链接寄存器,LR,。,当执行,BL,子程序调用指令时,,R14,中得到,R15,(程序计数器,PC,)的备份。其他情况下,,R14,用作通用寄存器。,与之类似,当发生中断或异常时,对应的分组寄存器,R14_svc,、,R14_irq,、,R14_fiq,、,R14_abt,和,R14_und,用来保存,R15,的返回值。,15,1.2 ARM,寄存器,(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,个字节。,16,1.2 ARM,寄存器,(8),1.2.3 ARM,的状态寄存器,一、两种程序状态寄存器,在,ARM,微处理器中,有,CPSR,和,SPSR,两种程序状态寄存器。,1,、当前程序状态寄存器,CPSR,(Current Program Status Register,),用来保存当前程序状态的寄存器。,所有处理器模式下都可以访问当前程序状态寄存器,CPSR,。仅一个,CPSR,。,2,、保存程序状态寄存器,SPSR_mode,(Saved Program Status Register),SPSR_mode,用来进行异常处理,其功能包括:,保存,ALU,中的当前操作信息,当异常发生时,用来保存,CPSR,的值,从异常返回时,将,SPSR_mode,复制到,CPSR,中,恢复,CPSR,的值。,控制允许和禁止中断,修改,SPSR,的值,设置处理器的运行模式,修改,SPSR,的值,问题:,一共有多少个,SPSR,?为什么?,17,1.2.3 ARM,的状态寄存器,(2),二、,ARM,状态寄存器的格式,1,、条件码标志位,(保存,ALU,中的当前操作信息),N,:正负号,/,大小 标志位,0,表示:正数,/,大于;,1,表示:负数,/,小于,Z,:零标志位,0,表示:结果不为零;,1,表示:结果为零,C,:进位,/,借位,/,移出位,0,表示:未进位,/,借位,/,移出,0,;,1,表示:进位,/,未借位,/,移出,1,V,:溢出标志位,0,表示:结果未溢出;,1,表示:结果溢出,31,30,29,28,27 8,7,6,5,4,3,2,1,0,N,Z,C,V,(保留),I,F,T,M4,M3,M2,M1,M0,18,1.2.3 ARM9,的状态寄存器,(3),2,、控制位,I,、,F,中断控制位,控制允许和禁止中断,I,1,禁止,IRQ,中断,I,0,允许,IRQ,中断,F,1,禁止,FIQ,中断,F,0,允许,FIQ,中断,T,控制,(,标志,),位,反映处理器的运行状态,T=1,时,程序运行于,Thumb,状态,T=0,时,程序运行于,ARM,状态,M,控制位,决定了处理器的运行模式,当发生异常时这些位被改变。,如果处理器运行在特权模式,这些位也可以由程序修改。,M4:0,10000,10001,10010,10011,10111,11011,11111,模式,用户,快中断,中断,管理,中止,未定义,系统,19,1.2.3 ARM9,的状态寄存器,(4),3,、保留位,CPSR,中的其余位为保留位,当改变,CPSR,中的条件码标志位或者控制位时,保留位不要改变,在程序中也不要使用保留位来存储数据。保留位将用于,ARM,版本的扩展。,1.2.4 Thumb,状态下的寄存器组织,Thumb,状态下的寄存器集是,ARM,状态下寄存器集的子集。程序员可以直接访问,8,个通用的寄存器(,R0R7,),程序计数器,PC,、堆栈指针,SP,、链接寄存器,LR,和当前状态寄存器,CPSP,。,20,本节主要内容,1,、中断和异常的概念,2,、,ARM,的异常中断介绍,3,、,ARM,的异常中断响应过程,4,、中断向量和中断优先级,1.3 ARM,异常,21,1.3 ARM,异常,1.3.1,中断和异常的概念,1,、中断,当,CPU,正在执行程序时,系统发生了一件急需处理的事件,,CPU,暂时停下正在执行的程序,转去处理相应的事件,事件处理完后,,CPU,再返回执行原来的程序,这种情况称为中断。这是中断的本来意义。,中断事件:,引起,CPU,产生中断、并且与,CPU,当前所执行的程序无关的、由外部硬件产生的事件,也叫中断源。中断事件也常称为,外中断,。,常说的中断:,有时指的是中断的本意,有时指的是外部中断事件,即外中断。,中断是计算机系统基本的功能,利用中断,外设可以与,CPU,并行工作,当外设需要传输数据或控制时,向,CPU,发出中断请求信号。,CPU,响应其请求进行处理。因此,使用中断既可以实现,CPU,与外设并行工作,又可以实时处理各种紧急事件。,22,1.3 ARM,异常,2,、异常,是指,CPU,在执行指令时出现的错误,即不正常的情况。异常是与当前所执行的程序有关的。如存取数据或指令错误、计算结果溢出等。,异常的处理:,也用中断的方式进行处理。,计算机通常是用中断来处理外中断和异常,因此下面将二者均称为异常。,3,、,ARM,程序的三种执行流程,顺序流程:,每执行一条,ARM,指令,程序计数器(,PC,)的值加,4,;每执行一条,Thumb,指令,程序计数器寄存器(,PC,)的值加,2,,整个过程是按顺序执行。,23,对异常的说明,当系统运行时,异常可能会随时发生,为保证在,ARM,处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理,采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序,当,ARM,处理器发生异常时,程序计数器,PC,会被强制设置为对应的异常向量,从而跳转到异常处理程序,当异常处理完成以后,返回到主程序继续执行。,我们需要处理所有的异常,尽管我们可以简单的在某些异常处理程序处放置死循环。,1.3 ARM,异常,24,1.3 ARM,异常,跳转流程:,程序执行了跳转指令,则要跳转到特定的地址标号处执行,包括跳转到子程序。例如,跳转指令,,B,、,BL,、,BLX,和,BX,。,中断流程:,当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。在当异常中断处理程序执行完成后,程序返回到发生中断的指令的下条指令处执行。,在进行异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程序退出时,要恢复被中断的程序的执行现场。,中断处理与子程序调用的区别:,中断是随机的,并且与正在执行的程序无关;子程序调用是程序的主动行为,并且与正在执行的程序密切相关。,25,1.3.2 ARM,的异常,ARM,有,7,种异常,1,、复位,处理器上一旦有复位输入,,ARM,处理器立刻停止执行当前指令。复位后,,ARM,处理器在禁止中断的管理模式下,从地址,0 x00000000,或,0 xFFFF0000,开始执行指令。,2,、未定义指令异常,当,ARM,处理器执行,协处理器指令,时,它必须等待任一外部协处理器应答后,才能真正执行这条指令。若协处理器没有响应,就会出现未定义指令异常。,未定义指令异常可用于在没有物理协处理器(硬件)的系统上,对协处理器进行软件仿真,或在软件仿真时进行指令扩展。,1.3 ARM,异常,26,3,、软件中断异常,该异常由执行,SWI,指令产生,可使用此机制进行软件仿真。,4,、预取中止(取指令存储器中止),若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。,5,、数据中止(访问数据存储器中止),若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。,1.3 ARM,异常,27,6,、,IRQ,异常,当处理器的外部中断请求引脚有效,且,CPSR,中的,I=0,,产生,IRQ,异常。,系统的外设可通过该异常请求中断服务。,7,、,FIQ,异常,当处理器的外部中断请求引脚有效,且,CPSR,中的,F=0,,产生,FIQ,异常。,FIQ,支持数据传送和通道处理,并有足够的私有寄存器,从而在应用中可避免对寄存器保存的需求,减少了开销。,1.3 ARM,异常,28,1.3.3 ARM,异常中断响应过程,一、进入异常,当发生异常时,除了复位异常立即中止当前指令外,处理器尽量完成当前指令,然后脱离当前的程序去处理异常。,ARM,处理器对异常中断的响应过程如下:,1,、保存返回地址,将引起异常指令的下一条指令的地址保存到新的异常模式,x,下的,R14,,即,R14-,中,使异常处理程序执行完后能正确返回原程序。,2,、保存当前状态寄存器,CPSR,的内容,将,CPSR,的内容保存到将要执行的异常中断对应的,SPSR,中,便于中断返回时恢复处理器当前的状态位、中断屏蔽位以及各条件标志位。,1.3 ARM,异常,29,3,、设置当前状态寄存器,CPSR,中的相应位,设置,CPSR,模式控制位,CPSR,4,:,0,,使处理器进入相应的执行模式;,设置中断标志位,(,CPSR,6,=1,),禁止,IRQ,中断;,设置中断标志位,(,CPSR,7,=1,)禁止,FIQ,中断,当进入,Reset,或,FIQ,模式时。,4,、转去执行中断处理程序,取相应的中断向量给程序计数器,PC,,使程序开始执行中断处理程序。,一般地说,矢量地址处将包含一条指向相应程序的转移指令,从而可跳转到相应的异常中断处理程序处执行异常中断处理程序。,1.3 ARM,异常,30,1.3 ARM,异常,ARM,处理器对异常的响应过程可以用伪代码描述如下,:,R14_=return link,SPSR_=CPSR,CPSR,4,:,0,=exception mode number,CPSR,5,=0 /*,当运行于,ARM,状态时*,/,CPSR,6,=1 /*,禁止新的,IRQ,中断*,/,if =Reset or FIQ then,CPSR,7,=1 /*,当,Reset,或,FIQ,异常中断时*,/,/*,禁止新 的,FIQ,中断*,/,PC=exception vector address,31,注意使用异常模式下的特有寄存器,每个异常模式对应有两个寄存器,R13_,、,R14_,分别保存相应模式下的堆栈指针、返回地址;堆栈指针可用来定义一个存储区域保存其它用户寄存器,在程序初始化时应该对各种模式堆栈设置,便于随时使用。,FIQ,模式还有额外的专用寄存器,R8_fiq,R12_fiq,,使用这些寄存器可以加快快速中断的处理速度。,1.3 ARM,异常,32,二、异常返回,1,、异常返回应执行的操作,异常处理完毕之后,,ARM,微处理器会执行以下几步操作从异常返回:,将返回地址装入,PC,把连接寄存器,LR,的值减去相应的偏移量,然后送到,PC,中。,恢复,CPSR,的值,将,SPSR,复制回,CPSR,中。,清除中断屏蔽位,若在进入异常处理时设置了中断禁止位,要在此清除。,可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。,1.3 ARM,异常,33,2,、各种异常返回方法,FIQ,中断返回,不管是在,ARM,状态还是在,Thumb,状态下进入,FIQ,模式,,FIQ,处理程序均可以执行以下指令从,FIQ,模式返回:,SUBS PC,R14-fiq,#4,指令预取中止(,Abort,)异常返回,当指令预取访问存储器失败时,存储器系统向,ARM,处理器发出存储器中止(,Abort,)信号,预取的指令被记为无效,但只有当处理器试图执行无效指令时,指令预取中止异常才会发生,如果指令未被执行,例如在指令流水线中发生了跳转,则预取指令中止不会发生。,如果发生了,指令,预取中止异常,,无论是在,ARM,状态还是,Thumb,状态,其返回指令为:,SUBS PC,R14_abt,#4,;重新执行被中止的指令,1.3 ARM,异常,34,数据中止(,Abort,)异常返回,如果发生了,数据,中止异常,,无论是在,ARM,状态还是,Thumb,状态,其返回指令为:,SUBS PC,R14_abt,#8,重新执行被中止的指令,软件中断指令(,SWI,)异常返回,用于进入管理模式,常用于请求执行特定的管理功能。软件中断处理程序执行以下指令可以从,SWI,模式返回,无论是在,ARM,状态还是,Thumb,状态:,MOVS PC,R14_svc,以上指令恢复,PC,(从,R14_svc,)和,CPSR,(从,SPSR_svc,)的值,并返回到,SWI,的下一条指令。,1.3 ARM,异常,35,未定义指令异常返回,当,ARM,处理器遇到不能处理的指令时,会产生未定义指令异常。采用这种机制,可以通过软件仿真扩展,ARM,或,Thumb,指令集。,处理器执行以下程序返回,无论是在,ARM,状态还是,Thumb,状态:,MOVS PC,R14_und,以上指令恢复,PC,(从,R14_und,)和,CPSR,(从,SPSR_und,)的值,并返回到未定义指令后的下一条指令。,1.3 ARM,异常,36,异常类型,模式,低向量地址,高向量地址,复位,管理,0 x00000000,0 xFFFF0000,未定义指令,未定义,0 x00000004,0 xFFFF0004,软件中断(,SWI,),管理,0 x00000008,0 xFFFF0008,预取中止,(取指令存储器中止),中止,0 x0000000C,0 xFFFF000C,数据中止,(,访问数据存储器中止,),中止,0 x00000010,0 xFFFF0010,IRQ,(中断),IRQ,0 x00000018,0 xFFFF0018,FIQ,(快速中断),FIQ,0 x0000001C,0 xFFFF001C,ARM,中断向量,1.3.4 ARM,中断向量和优先级,37,异常中断向量表,1.3 ARM,的异常,地 址,异 常,进入模式,0 x0000,0000,复位,管理模式,0 x0000,0004,未定义指令,未定义模式,0 x0000,0008,软件中断,管理模式,0 x0000,000C,中止(预取指令),中止模式,0 x0000,0010,中止(数据),中止模式,0 x0000,0014,保留,保留,0 x0000,0018,IRQ,IRQ,0 x0000,001C,FIQ,FIQ,38,异常中断向量表说明:,存储器的前,8,个字中除了地址,0 x00000014,之外,全部被用作异常矢量地址。,这是因为在早期的,26,位地址空间的,ARM,处理器中,曾使用地址,0 x00000014,来捕获落在地址空间之外的,load,和,store,存储器地址。这些陷阱称为“地址异常”,因为,32,位的,ARM,不会产生落在它的,32,位地址空间之外的地址,所以地址异常在当前的体系结构中没有作用,,0 x00000014,的矢量地址也就不再使用了。,1.3 ARM,的异常,39,ARM,中断的优先级,1.3 ARM,异常,优先级,异 常,1,(最高),复位,2,数据中止,3,FIQ,4,IRQ,5,预取指令中止,6,(最低),未定义指令、,SWI,40,
展开阅读全文