S3C2440A

来源:互联网 发布:淘宝网商城女鞋休闲鞋 编辑:程序博客网 时间:2024/05/21 11:35

1、 处理器的操作状态:

从编程者的角度,ARM920T可工作在ARM/THUMB两种状态。

ARM状态:执行32位的,字对齐的ARM指令(常用)

THUMB状态:执行16位的,半字对齐的THUMB指令(用的相对较少)

注:两种工作状态的改变并不会引起工作模式及寄存器值的改变!!

 

进入THUMB状态:执行BX指令。

进入ARM状态:在THUMB状态时,执行BX指令。或处理器处理异常。

2、 处理器的存储模式:

大端模式:要存储数据的高位存储在内存中的底位。

小端模式:要存储数据的高位存储在内存中的高位。

3、 指令的长度:

ARM指令:4字节(32位)须4字节对齐

THUMB指令:2字节(16位)须2字节对齐

4、 支持的数据类型:

字节(8位)、半字(16位)、字(32位)

5、 支持的工作模式:

ARM920T支持7中工作模式:

User(用户模式):正常的ARM程序执行。

Fiq(快速中断):支持快速的数据或通道的加工

Irq(普通中断):用于普通中断处理

Svc(管理模式):用于操作的保护模式

Abt(数据、指令预取):当数据或指令预取失败进入的模式

Sys(系统模式):为操作系统提供的特权用户模式

Und(未定义指令):当未定义指令执行时进入的模式

 

注:模式的改变可通过软件来控制,或外部中断、异常的产生。大部分的用户程序执行在用户模式。非用户模式称为特权模式。进入特权模式主要是进入中断或异常服务。或者访问被保护的资源。

 

寄存器:

ATM920T一共有37个寄存器:31个通用的32位的寄存器和6个状态寄存器。但是这些寄存器不能同时使用。处理的操作状态和模式决定了使用哪些寄存器。

 

ARM状态寄存器集:

ARM状态,16个通用寄存器和一个或两个状态寄存器在任何时候可见。在特权模式时,模式相关的备份寄存器将切入。

ARM状态下的寄存器有R0-R15,在这些寄存器中,除了R15外都是通用的寄存器。可用来保存地址或数据。第17个寄存器(CPSR)用来保存状态。

 

R14:被用作子程序连接寄存器。当BL指令被执行是,R14将保存R15(程序计数器)的值,在其他情况下可用作通用寄存器。相应的备份寄存器R14_svc,R14_fiq,R14_irq,R14_abt,R14_und用来保存当中断或异常发生时,R15(PC)的返回值。或在对应模式时执行BL指令时该模式的PC值。

R15:该寄存器被用作PC(程序计数器)。在ARM状态,bits[1:0]填充0bits[31:2]填充PC。在THUMB状态,bits[0]填充0bits[31:1]填充PC

 

R16:该寄存器CPSR(当前程序状态寄存器)。包含条件码和当前程序的模式。

 

注:R13:通常用作堆栈指针寄存器。R14:存放子程序返回地址。R15:程序计数器PC

FIQ模式用7个备份寄存器R8-14R8_fiq—R14_fiq)在ARM状态由于有很多备份寄存器,所以这些寄存器的值不用保存。在IRQ/SVC/ABT/UND等模式下,有连个备份寄存器R13R14。允许这些模式有一个私有的堆栈指针和连接寄存器。

至于THUMB状态就不再讨论。

 

程序状态寄存器:

ARM920T包含一个当前程序状态寄存器(CPSR)和5个保存程序状态寄存器(SPSR),该寄存器主要用于当异常发生时保存前一状态的CPSR的值。

 

  条件标志                     保留                      控制位

N

Z

C

V

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

I

F

T

M4

M3

M2

M1

M0

条件标志:

N:取反、小于

Z:为0

C:进位、借位

V:溢出

 

控制位:

I1(关普通中断),0(开普通中断)

F1(关快速中断),0(开快速中断)

T1THUMB状态),0ARM状态)

M[4:0]:

10000

用户模式

10001

快速中断模式

10010

普通中断模式

10011

管理模式

10111

预取指令、数据无效

11011

未定义模式

11111

系统模式

6、 异常:

异常发生时处理器会暂时终止当前程序的运行,转去执行中断处理。在转去执行中断处理之前,当前处理器的状态必须保存以便异常处理完能够正常返回。在同一时间有可能产生多种异常,如果发生了,处理器将按照固定的顺序去处理。

 

进入异常处理器要做的事:

1、 保存下一条地址当相应异常模式的连接寄存器(R14),如果异常是从ARM状态进入,拷贝到连接寄存器的下一条指令的地址为(PC+4PC+8决定哪种异常)。

2、 拷贝CPSR的值到相应模式的SPSR寄存器。

3、 改变CPSR的模式位为对应的异常模式。

4、 从中断向量表中取出下一条指令。

  退出异常要做的事:

1、 将连接寄存器的值减去一个合适的值,赋给PC,减去的值与异常的类型有关。

2、 拷贝SPSR中的值到CPSR

3、 如果进入异常时关了中断,则在此开中断。

对应的表:

         对应返回指令

   ARMR14_X

 

BL     MOV PC,R14

  PC + 4

 

SWI    MOV PC,R14_svc

   PC+ 4

 

UDEF   MOVPC,R14_und

   PC+ 4

 

FIQ    SUBS PC,R14_fiq,#4

   PC+ 4

 

IRQ    SUBS PC,R14_irq,#4

   PC+ 4

 

PABT  SUBS PC,R14_abt,#4

   PC+ 4

 

DABT  SUBS PC,R14_abt,#8

   PC+ 8

 

RESET  --

  ----

 

 

 

软中断:软中断指令(SWI)被用作进入管理模式。通常是需要使用管理模式功能时使用。从管理模式返回只需以下指令:MOV  PC,R14_svc

7、 异常向量表:

地址

异常

进入的模式

优先级

0x00000000

Reset

管理

1

0x00000004

未定义指令

UND

6

0x00000008

软中断

管理

6

0x0000000C

预取指令无效

ABORT

5

0x00000010

预取数据无效

ABORT

2

0x00000014

保留

保留

 

0x00000018

IRQ

IRQ

4

0x0000001C

FIQ

FIQ

3

 

 

复位的过程:

当复位信号变低时,ARM920T丢弃正在执行的指令,并且继续以字地址增加去取指令。

当复位信号变高时,ARM920T

1、 拷贝当前PCCPSR的值到R14_svcSPSR中。这时PCSPSR是未定义的。

2、 M[4:0]强制改为10011(管理模式)设置CPSRIF位(关中断和快速中断)并且清除T位(工作状态为ARM状态)。

3、 强制PC下一条预取指令的地址为0x00

4、 ARM状态继续执行指令。

0 0
原创粉丝点击