ARM9微处理器有两种工作状态,以支持32位ARM或16位紧凑型长度Thumb指令的运行,可以在程序的执行过程中任意切换。ARM9具有7种异常运行模式,各种异常模式下都有自己的寄存器组,以便于异常程序的执行和返回。
ARM9微处理器有32位ARM和16位Thumb两种工作状态。在32位ARM状态下执行字对齐的ARM指令,在16位Thumb状态下执行半字对齐的Thumb指令。在ARM指令集和Thumb指令集中均有切换处理器状态的指令,并可在两种状态之间互相切换。在系统上电或复位时,微处理器处于ARM状态。
进入 Thumb 状态 :当操作数寄存器的状态位,即位[0]为1时,执行BX指令使微处理器从ARM状态切换到Thumb状态。
当微处理器处于Thumb状态时发生了异常(如IRQ、FIQ、SWI等),则当异常处理返回时,自动切换到Thumb状态。
在Thumb状态下,程序计数器PC使用位[1]选择另一个半字。
切换到 ARM 状态 :当操作数寄存器的状态位,即位[0]为0时,执行BX指令使微处理器从Thumb状态切换到ARM状态。
当处理器进行异常处理时,把当前的PC指针存入相应的异常模式连接寄存器(该模式下的R14寄存器)中,并从异常向量入口地址开始执行程序,执行完毕后将其连接寄存器的值送入PC(还要做一些偏移量的处理),程序返回到主程序。
ARM处理器在两种工作状态之间可以切换,切换不影响处理器的模式或寄存器的内容。
● 用户模式usr:ARM微处理器正常程序执行模式,用户程序都在这种模式下执行。
● 快速中断模式fiq:当一个高优先级的快速中断源产生中断时进入这种模式,主要用于高速数据传输或通道处理。
● 普通中断模式irq:当一个普通优先级的中断源产生中断时进入这种模式,用于一般的中断事务处理。
● 管理模式svc:当复位或软中断指令执行时将进入这种模式,是供操作系统使用的一种保护模式。
● 数据访问中止模式abt:当数据或指令预取中止时进入该模式,用于虚拟存储及存储保护。
● 系统模式sys:供需要访问资源的操作系统任务使用,运行具有特权的操作系统任务。
● 未定义指令中止模式und:当执行未定义的指令时进入该模式。
ARM处理器的运行模式可以在特权模式下通过软件改变,也可以通过外部中断和异常处理改变;大多数的应用程序运行在用户模式下,当运行在用户模式下时,被保护的系统资源是不能访问的。
除用户模式外,其余6种模式被称为特权模式。
用户模式的特点是 ,用户程序不能访问受操作系统保护的系统资源,也不能进行处理器模式的切换。
特权模式的特点是 ,应用程序可以访问所有的系统资源,可以任意地进行处理器模式的切换。
除用户和系统模式外,其余模式被称为异常模式。
系统模式的特点是 ,不能通过异常方式进入该模式,可以访问系统的所有资源,可以任意地进行处理器模式的切换。
异常模式的特点是 ,以各自的异常方式或中断方式进入,并且处理各自异常或中断。对于管理模式svc异常进入方式和处理的内容如下。
1)系统上电复位或按下RESET按钮后进入管理模式。处理任务有ARM系统初始化、关闭中断、设置系统3个总线的频率、配置动态存储器SDRAM、各种运行模式下堆栈区的设置、各个模块的初始化、为C/C++应用程序提供运行环境等。
2)当执行软中断指令(SWI)异常时,也可进入管理模式。
处理器运行模式间有两种切换方式:一种是通过软件控制进行切换,另一种是由外部中断或内部的异常触发进行切换。前者是通过编写软件来实现的,后者是自动触发的。系统启动时运行模式的转换流程如下。
1)上电复位或按复位按钮,进入到管理模式,此时主要工作是关闭中断,设置系统3个总线的频率、配置动态存储器(SDRAM)等。
2)设置1)模式下的堆栈指针后,通过使用软件改变CPSR的最低5位的模式控制位M[4:0],即模式字,系统进入某种特权模式,设置它的堆栈指针;再一次改变模式字,进入相应的运行模式,进行该模式的堆栈指针设置,直到设置完所有模式下的堆栈指针等。需要注意的是,此期间系统一直处于特权模式下。
3)最后通过软件模式字的更改,使系统进入到用户模式工作,运行应用系统的软件。此时若各种异常模式产生了异常,进入相应的异常模式处理,处理完后返回到异常发生时的模式程序处,继续执行原异常模式程序。
注意 :异常模式是有优先级的,如果同时产生异常,优先级高的模式优先处理执行;另外,模式优先级高的可以在模式优先级低的模式中产生异常,处理完后返回原处。
ARM微处理器在每一种处理器模式下均有一组相应的寄存器与之对应。即在任意一种处理器模式下,可访问的寄存器包括15个通用寄存器(R0~R14)、1~2个状态寄存器和程序计数器。在所有的寄存器中,有些是在7种处理器模式下共用同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器。