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

下载本文档

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

文档简介

嵌入式系统设计:ARM处理器的工作模式2021/5/911.1ARM处理器的工作状态和模式

为了能够体现ARM的特点和性能,ARM处理器有两种工作状态和7种工作模式。1.1.1ARM处理器的工作状态有两种工作状态:

ARM状态:处理器执行32位的字对齐的ARM指令;

Thumb状态:处理器执行16位的半字对齐的Thumb指令。两种状态可以切换。程序执行过程中,通过执行带状态切换的分支指令BX,随时在两种工作状态之间进行切换。并且,处理器工作状态的转变,并不影响处理器的工作模式和相应寄存器中的内容。2021/5/921.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状态进行异常处理2021/5/931.1ARM处理器的工作状态和模式(3)

例1.1状态切换程序;从ARM状态切换到Thumb状态

LDR R0, =Lable+1 BX R0;从Thumb状态切换到ARM状态

LDR R0, =Lable BX R0

注意:

ARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内容。

ARM处理器在开始执行代码时,只能处于ARM状态。2021/5/941.1.2ARM处理器的工作模式

一、

ARM9的7种工作模式

1、用户模式(usr):非特权模式,大部分任务执行在这种模式。

正常程序执行的模式

2、快速中断模式(fiq):当一个高优先级(fast)中断产生时将会进入这种模式。 高速数据传输或通道处理

3、外部中断模式(irq):当一个低优先级(normal)中断产生时将会进入这种模式。通常的中断处理

4、管理模式(svc):当复位或软中断指令执行时将会进入这种模式。供操作系统使用的一种保护模式2021/5/951.1.2ARM处理器的工作模式(2)

5、中止模式(abt):当存取异常时将会进入这种模式

虚拟存储及存储保护6、未定义模式(und):当执行未定义指令时会进入这种模式

软件仿真硬件协处理器7、系统模式(sys):供需要访问系统资源的操作系统任务使用

特权级的操作系统任务2021/5/961.1.2ARM处理器的工作模式(2)

二、模式分类及特点 七种模式可以划分成四类

1、用户模式特点:应用程序不能够访问受操作系统保护的系统资源。应用程序不能进行处理器模式的切换。

2、系统模式特点:

不属于异常模式,不是通过异常进入的。系统模式属于特权模式,可以访问所有的系统资源,也可以直接进行模式的切换。它主要供操作系统使用。

3、特权模式及其特点: 特权模式:除用户模式之外的工作模式又称为特权模式 特点: 应用程序可以访问所有的系统资源 可以任意地进行处理器模式的切换2021/5/971.1.2ARM处理器的工作模式(3)

4、异常模式及其特点:

异常模式: 除用户模式、系统模式之外的五种模式称为异常模式。

特点:以各自的中断或异常方式进入,并且处理各自的中断或异常。对管理模式(svc)进入方式和处理内容有:

①系统上电复位后进入管理模式,运行系统初始化程序,如中断允许/禁止,主时钟设置,SDRAM配置,各个功能模块初始化等。 ②当执行软件中断指令SWI时,进入管理模式。2021/5/981.1.2ARM处理器的工作模式(4)处理器模式的切换方式:软件控制进行切换。通过外部中断和异常进行切换处理器启动时的模式转换图管理模式(Supervisor)多种特权模式变化用户程序的运行模式复位后的缺省模式主要完成各模式的堆栈设置,注意不要进入用户模式一般为用户模式User2021/5/991.2ARM9寄存器本节主要内容

1、ARM寄存器概述

2、ARM通用寄存器

3、ARM状态寄存器2021/5/9101.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_fiq

6个状态寄存器CPSRSPSR_svc、SPSR_abt、SPSR_und、SPSR_irq和SPSR_fiq2021/5/9111.2ARM9寄存器(2)

每一类处理器模式都有一组相应的寄存器组;在任意的处理器模式下,可见的寄存器包括15个通用寄存器(R0-R14)、1个或2个状态寄存器和程序寄存器。带灰色底纹的单元格表示,用户模式或系统模式使用的一般寄存器,已被异常模式特定的另一寄存器所替代。2021/5/9121.2ARM寄存器(4)1.2.2ARM的通用寄存器

通用寄存器包括R0~R15,可以分为三类:

─未分组寄存器R0~R7 ─分组寄存器R8~R14 ─程序计数器PC(R15)

一、未分组寄存器R0~R7

在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途,是真正的通用寄存器。 因此,在中断或异常处理进行运行模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,可能会造成寄存器中数据的破坏,这一点在进行程序设计时应引起注意。2021/5/9131.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_<mode>R14_<mode>

其中,mode为以下几种模式之一:usr、fiq、irq、svc、abt、und。2021/5/9141.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的返回值。2021/5/9151.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个字节。2021/5/9161.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?为什么?2021/5/9171.2.3ARM的状态寄存器(2)

二、ARM状态寄存器的格式

1、条件码标志位(保存ALU中的当前操作信息)

N:正负号/大小标志位

0表示:正数/大于;1表示:负数/小于

Z:零标志位

0表示:结果不为零;1表示:结果为零

C:进位/借位/移出位

0表示:未进位/借位/移出0;1表示:进位/未借位/移出1 V:溢出标志位

0表示:结果未溢出;1表示:结果溢出3130292827…876543210NZCV(保留)IFTM4M3M2M1M02021/5/9181.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控制位——决定了处理器的运行模式当发生异常时这些位被改变。如果处理器运行在特权模式,这些位也可以由程序修改。M[4:0]10000100011001010011101111101111111模式用户快中断中断管理中止未定义系统2021/5/9191.2.3ARM9的状态寄存器(4) 3、保留位

CPSR中的其余位为保留位,当改变CPSR中的条件码标志位或者控制位时,保留位不要改变,在程序中也不要使用保留位来存储数据。保留位将用于ARM版本的扩展。1.2.4Thumb状态下的寄存器组织

Thumb状态下的寄存器集是ARM状态下寄存器集的子集。程序员可以直接访问8个通用的寄存器(R0~R7),程序计数器PC、堆栈指针SP、链接寄存器LR和当前状态寄存器CPSP。2021/5/920本节主要内容1、中断和异常的概念2、ARM的异常中断介绍3、ARM的异常中断响应过程4、中断向量和中断优先级1.3ARM异常

2021/5/9211.3ARM异常

1.3.1中断和异常的概念

1、中断

当CPU正在执行程序时,系统发生了一件急需处理的事件,CPU暂时停下正在执行的程序,转去处理相应的事件,事件处理完后,CPU再返回执行原来的程序,这种情况称为中断。这是中断的本来意义。

中断事件:引起CPU产生中断、并且与CPU当前所执行的程序无关的、由外部硬件产生的事件,也叫中断源。中断事件也常称为外中断。

常说的中断:有时指的是中断的本意,有时指的是外部中断事件,即外中断。

中断是计算机系统基本的功能利用中断,外设可以与CPU并行工作,当外设需要传输数据或控制时,向CPU发出中断请求信号。CPU响应其请求进行处理。因此,使用中断既可以实现CPU与外设并行工作,又可以实时处理各种紧急事件。2021/5/9221.3ARM异常

2、异常

是指CPU在执行指令时出现的错误,即不正常的情况。异常是与当前所执行的程序有关的。如存取数据或指令错误、计算结果溢出等。

异常的处理:也用中断的方式进行处理。 计算机通常是用中断来处理外中断和异常,因此下面将二者均称为异常。

3、ARM程序的三种执行流程顺序流程:每执行一条ARM指令,程序计数器(PC)的值加4;每执行一条Thumb指令,程序计数器寄存器(PC)的值加2,整个过程是按顺序执行。2021/5/923

对异常的说明 当系统运行时,异常可能会随时发生,为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理,采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序,当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序,当异常处理完成以后,返回到主程序继续执行。 我们需要处理所有的异常,尽管我们可以简单的在某些异常处理程序处放置死循环。1.3ARM异常

2021/5/9241.3ARM异常

跳转流程:程序执行了跳转指令,则要跳转到特定的地址标号处执行,包括跳转到子程序。例如,跳转指令,B、BL、BLX和BX。

中断流程:当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。在当异常中断处理程序执行完成后,程序返回到发生中断的指令的下条指令处执行。 在进行异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程序退出时,要恢复被中断的程序的执行现场。

中断处理与子程序调用的区别:中断是随机的,并且与正在执行的程序无关;子程序调用是程序的主动行为,并且与正在执行的程序密切相关。2021/5/9251.3.2ARM的异常

ARM有7种异常1、复位处理器上一旦有复位输入,ARM处理器立刻停止执行当前指令。复位后,ARM处理器在禁止中断的管理模式下,从地址0x00000000或0xFFFF0000开始执行指令。2、未定义指令异常当ARM处理器执行协处理器指令时,它必须等待任一外部协处理器应答后,才能真正执行这条指令。若协处理器没有响应,就会出现未定义指令异常。未定义指令异常可用于在没有物理协处理器(硬件)的系统上,对协处理器进行软件仿真,或在软件仿真时进行指令扩展。1.3ARM异常

2021/5/9263、软件中断异常该异常由执行SWI指令产生,可使用此机制进行软件仿真。4、预取中止(取指令存储器中止)若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。5、数据中止(访问数据存储器中止)若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。1.3ARM异常

2021/5/9276、IRQ异常当处理器的外部中断请求引脚有效,且CPSR中的I=0,产生IRQ异常。系统的外设可通过该异常请求中断服务。7、FIQ异常当处理器的外部中断请求引脚有效,且CPSR中的F=0,产生FIQ异常。

FIQ支持数据传送和通道处理,并有足够的私有寄存器,从而在应用中可避免对寄存器保存的需求,减少了开销。1.3ARM异常

2021/5/928

1.3.3ARM异常中断响应过程

一、进入异常 当发生异常时,除了复位异常立即中止当前指令外,处理器尽量完成当前指令,然后脱离当前的程序去处理异常。ARM处理器对异常中断的响应过程如下:

1、保存返回地址 将引起异常指令的下一条指令的地址保存到新的异常模式x下的R14,即R14-<mode>中,使异常处理程序执行完后能正确返回原程序。

2、保存当前状态寄存器CPSR的内容 将CPSR的内容保存到将要执行的异常中断对应的SPSR中,便于中断返回时恢复处理器当前的状态位、中断屏蔽位以及各条件标志位。1.3ARM异常2021/5/929

3、设置当前状态寄存器CPSR中的相应位设置CPSR模式控制位CPSR[4:0],使处理器进入相应的执行模式;设置中断标志位(CPSR[6]=1),禁止IRQ中断;设置中断标志位(CPSR[7]=1)禁止FIQ中断,当进入Reset或FIQ模式时。

4、转去执行中断处理程序 取相应的中断向量给程序计数器PC,使程序开始执行中断处理程序。一般地说,矢量地址处将包含一条指向相应程序的转移指令,从而可跳转到相应的异常中断处理程序处执行异常中断处理程序。1.3ARM异常2021/5/9301.3ARM异常

ARM处理器对异常的响应过程可以用伪代码描述如下:

R14_<exception_mode>=returnlinkSPSR_<exception_mode>=CPSRCPSR[4:0]=exceptionmodenumberCPSR[5]=0/*当运行于ARM状态时*/CPSR[6]=1 /*禁止新的IRQ中断*/if<exception-mode>=ResetorFIQthenCPSR[7]=1 /*当Reset或FIQ异常中断时*/ /*禁止新的FIQ中断*/PC=exceptionvectoraddress2021/5/931

注意使用异常模式下的特有寄存器

每个异常模式对应有两个寄存器R13_<mode>、R14_<mode>分别保存相应模式下的堆栈指针、返回地址;堆栈指针可用来定义一个存储区域保存其它用户寄存器,在程序初始化时应该对各种模式堆栈设置,便于随时使用。

FIQ模式还有额外的专用寄存器R8_fiq~R12_fiq,使用这些寄存器可以加快快速中断的处理速度。1.3ARM异常2021/5/932

二、异常返回

1、异常返回应执行的操作 异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:将返回地址装入PC

把连接寄存器LR的值减去相应的偏移量,然后送到PC中。恢复CPSR的值将SPSR复制回CPSR中。清除中断屏蔽位若在进入异常处理时设置了中断禁止位,要在此清除。

可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。1.3ARM异常2021/5/933

2、各种异常返回方法

FIQ中断返回 不管是在ARM状态还是在Thumb状态下进入FIQ模式,FIQ处理程序均可以执行以下指令从FIQ模式返回:

SUBSPC,R14-fiq,#4

指令预取中止(Abort

)异常返回 当指令预取访问存储器失败时,存储器系统向ARM处理器发出存储器中止(Abort)信号,预取的指令被记为无效,但只有当处理器试图执行无效指令时,指令预取中止异常才会发生,如果指令未被执行,例如在指令流水线中发生了跳转,则预取指令中止不会发生。 如果发生了指令预取中止异常,无论是在ARM状态还是Thumb状态,其返回指令为:

SUBSPC,R14_abt,#4 ;重新执行被中止的指令1.3ARM异常2021/5/934数据中止(Abort)异常返回 如果发生了数据中止异常,无论是在ARM状态还是Thumb状态,其返回指令为:

SUBSPC,R14_abt,#8

重新执行被中止的指令软件中断指令(SWI)异常返回 用于进入管理模式,常用于请求执行特定的管理功能。软件中断处理程序执行以下指令可以从SWI模式返回,无论是在ARM状态还是Thumb状态:

MOVSPC,R14_svc

以上指令恢复PC(从R14_svc)和CPSR(从SPSR_svc)的值,并返回到SWI的下一条指令。1.3ARM异常2021/5/935

未定义指令异常返回 当ARM处理器遇到不

温馨提示

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

评论

0/150

提交评论