ARM7TDMI体系结构详解 & 各个后缀字母的含义

T:高密度16位Thumb指令集扩展

D:支持片上调试

M:64位乘法指令

I:Embedded ICE硬件仿真功能模块

冯·诺依曼(Von Neumann)结构,指令和数据共用一条32位总线。ARM7TDMI为V4版本,直接支持的数据类型字节(8位),半字(16位),字(32位)。(V4版本之后都支持这三种形式。)所有数据操作都以字为单位。装载和保存指令可以对字节、半字和字进行操作。ARM7TDMI处理器内核使用V4T版本的ARM结构,该结构包含32位ARM指令集和16位Thumb指令集。ARM指令的长度刚好是1个字(分配为占用4个字节),Thumb指令的长度刚好是半字(占用2个字节)。两个状态之间的切换并不影响处理器模式或寄存器内容。

ARM体系结构支持7种处理器模式,分别为:用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式。除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。快中断模式、中断模式、管理模式、中止模式、未定义模式这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。

ARM7TDMI处理器内部有37个用户可见的寄存器,分成两大类:31个通用32位寄存器和6个状态寄存器。在汇编语言中寄存器R0~R7为保存数据或地址值的通用寄存器。对于任何处理器模式,它们中的每一个都对应于相同的32位物理寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊的用途,并且可用于任何使用通用寄存器的指令。堆栈指针SP对应ARM状态的寄存器R13。每个异常模式都有其自身的SP分组版本,SP通常指向各异常模式所专用的堆栈。(注意:在发生异常时,处理器自动进入ARM状态。)

ARM7TDMI内核包含1个CPSR和5个供异常处理程序使用的SPSR。CPSR反映了当前处理器的状态,其包含:

4个条件代码标志(负(N)、零(Z)、进位(C)和溢出(V) );

2个中断禁止位,分别控制一种类型的中断;

5个对当前处理器模式进行编码的位;

1个用于指示当前执行指令(ARM还是Thumb)的位。

每个异常模式还带有一个程序状态保存寄存器(SPSR),它用于保存在异常事件发生之前的CPSR。CPSR和SPSR通过特殊指令进行访问。

异常模式:只要正常的程序流被暂时中止,处理器就进入异常模式。例如响应一个来自外设的中断。异常总是在ARM状态中进行处理。当处理器处于Thumb状态时发生了异常,在异常向量地址装入PC时,会自动切换到ARM状态。中止发生在对存储器的访问不能完成时,中止包含两种类型:预取中止 发生在指令预取过程中数据中止 发生在对数据访问时。使用软件中断(SWI)指令可以进入管理模式,通常用于请求一个特定的管理函数。当ARM7TDMI处理器遇到一条自己和系统内任何协处理器都无法处理的指令时,ARM7TDMI内核执行未定义指令陷阱。

在复位后,除PC和CPSR之外的所有寄存器的值都不确定。

当nRESET信号再次变为高电平时,ARM处理器执行下列操作:

1.强制M[4:0]变为b10011(管理模式);

2.置位CPSR中的I和F位;

3.清零CPSR中的T位;

4.强制PC从地址0x00开始对下一条指令进行取指;

5.返回到ARM状态并恢复执行 。

基于ARM内核的芯片具有许多的外设,这些外设访问的标准方法是使用存储器映射的I/O,为外设的每个寄存器都分配一个地址。通常,从这些地址装载数据用于读入,向这些地址保存数据用于输出。有些地址的装载和保存用于外设的控制功能,而不是输入或输出功能。存储器映射的I/O位置的操作不同于正常的存储器位置的操作。通常,存储器映射的I/O位置没有高速缓存和无缓冲区。

猜你喜欢

转载自blog.csdn.net/zilan23/article/details/104070212