原创 ARM7TDMI体系结构介绍

2011-1-13 14:27 2186 15 17 分类: 消费电子

冯·诺依曼(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位置没有高速缓存和无缓冲区。

文章评论2条评论)

登录后参与讨论

用户1584511 2011-1-14 12:41

我找资料查一下,我也不确定。谢谢zhanglim。呵呵!

zhanglii2011_392530165 2011-1-14 10:13

ARM7TDMI没有MMU,所以用户模式可以访问任何地址
相关推荐阅读
用户1584511 2011-04-28 13:56
关于离职
犹豫不安,思前顾后,让自己徘徊了一些日子。最终还是选择离开,第一份工作画上了句号。虽然他并不是很成功,但或多或少还是为自己之后的生活积累了经验。到此为止整整一年的时间,这一年中我做了些什么,有时候会恨...
用户1584511 2011-02-25 11:21
can总线应用问题
本人想通过开发一个代理程序,实现对CAN网络的管理监视,需要找到一种方法来确定CAN总线网络当前运行节点个数。 但是现在有个难题,基于目前CAN总线中传输的报文,我无法确定目前网络中节点的个数?如果运...
用户1584511 2011-01-28 16:42
位段
C语言中对内存存取信息一般以字节为单位。实际上,有时一个信息用不了那么多位,因此C语言中允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或“位域”。利用位段能够用...
用户1584511 2011-01-27 15:44
中断向量控制器
ARM7TDMI内核具有两个中断输入,分别为IRQ中断和FIQ中断。中断向量控制器不是ARM设计的,ARM只提供以上两个中断输入接口,中断向量控制器是由各个厂商根据自己的实际情况设计的。下面介绍的是...
用户1584511 2011-01-26 08:55
存储器加速模块
存储器加速模块产生的原因:LPC2114/2124/2210/2212/2214微控制器的ARM内核工作在最高频率60MHz时,执行一条指令约为17ns。而Flash存储器的访问周期需要50ns,...
用户1584511 2011-01-26 08:54
用Typedef定义类型
C语言中可以用typedef声明新的类型名来代替已有的类型名。例如:typedef int INTEGER,指定用INTEGER代替int。 声明一个新的类型名的方法: 1、先按定义变量的...
我要评论
2
15
关闭 站长推荐上一条 /2 下一条