ARM7TDMISRev 4技术参考手册Word下载.docx
《ARM7TDMISRev 4技术参考手册Word下载.docx》由会员分享,可在线阅读,更多相关《ARM7TDMISRev 4技术参考手册Word下载.docx(75页珍藏版)》请在冰豆网上搜索。
![ARM7TDMISRev 4技术参考手册Word下载.docx](https://file1.bdocx.com/fileroot1/2023-2/6/ef69ca8f-5ea7-46c0-a3dd-ad8b07a88f3c/ef69ca8f-5ea7-46c0-a3dd-ad8b07a88f3c1.gif)
这些控制信号使许多片
内和片外存储器技术所支持的“快速突发访问模式”得到充分利用。
ARM7TDMI-S处理器的存储器周期有4种基本类型
*内部周期
*非连续的周期
*连续的周期
*协处理器寄存器传输周期
1.2ARM7TDMI-S的结构
ARM7TDMI-S处理器有两个指令集
*32位ARM指令集
*16位Thumb指令集
ARM7TDMI-S处理器使用了ARM结构v4T。
关于ARM和Thumb指令集的详细信息请参阅《ARM
体系结构参考手册》
1.2.1指令压缩
传统的微处理器结构对于指令和数据有相同的带宽。
因此,和16位结构相比,32位结构处理32位数
据具有更高的性能,并且在寻址更大的地址空间时要有效得多。
16位结构比32位结构具有更高的代码密度,并且超过32位结构50%的性能。
Thumb在32位结构上
实现了16位的指令集,这样可提供:
*比16位结构更高的性能
*比32位结构更高的代码密度
1.2.2Thumb指令集
Thumb指令集是最通用的ARM指令的子集。
Thumb指令长度为16位,每条指令都对应一条32位ARM
指令,它对处理器模型有相同的效果。
Thumb指令使用标准的ARM寄存器配置进行操作,这样ARM和Thumb状态之间具有极好的互用性
在执行方面,Thumb具有32位内核所有的优点:
*32位地址空间
*32位寄存器
*32位移位器和算术逻辑单元(ALU)
*32位存储器传输
Thumb因此提供了长的分支范围,强大的算术操作和巨大的地址空间。
Thumb代码仅为ARM代码规模的65%但其性能却相当于连接到16位存储器系统的ARM处理器性能的160%,因此Thumb使ARM7TDMI-S处理器非常适用于那些只有有限的存储器带宽并且代码密度很高的嵌入式应用。
16位Thumb和32位ARM指令集使设计者极大的灵活性,使他们可以根据各自应用的需求,在子程序一级上实现对性能或者代码规模的优化。
例如,应用中的快速中断和DSP算法可使用完全的ARM指令集编写并使用Thumb代码连接。
1.3ARM7TDMI-S模块内核和功能框图
ARM7TDMI-S处理器结构内核和功能框图见下
*ARM7TDMI-S模块见图1-2
*ARM7TDMI-S内核见图1-3
*ARM7TDMI-S功能框图见图1-4
数据总线上没有双向路径,图1-2对这些作了简化。
1.4ARM7TDMI-S指令集汇总
该节提供了ARM和Thumb指令集的汇总:
*ARM指令汇总
*Thumb指令汇总
指令集详见ARM体系结构参考手册。
1.5Rev3a和Rev4之间的差异:
ARM7TDMI-S(Rev4)的变更见下面的章节
*增加的EmbeddedICE-RT逻辑
*改进的调试通信通道(DCC)带宽
*通过JTAG对DCC进行访问
*TAP控制器ID寄存器
*更加有效的多路传输
1.5.1增加的EmbeddedICE-RT逻辑
EmbeddedICE-RT对ARM7TDMI-S(Rev3)当中的EmbeddedICE逻辑作了改进。
EmbeddedICE-RT可以
使您在监控模式下执行调试。
在监控模式下,内核在遇到断点或观察点时执行异常处理,并不像在暂停模
式中那样进入调试状态。
如果内核在遇到断点或观察点时不进入调试状态,它仍然可以像正常情况下一样响应硬件中断请求。
如果内核构成了机械系统反馈环的一部分,那么在监控模式下进行调试非常有用,因为如果停止内核会导致系统运转中断。
更详细的信息请查阅第5章调试您的系统。
节电
当DBGEN被拉低时,大部分的EmbeddedICE-RT逻辑都被禁止以实现最低功耗。
程序员模式的改变
程序员模式的改变如下:
调试控制寄存器
增加了两个新的位:
Bit4监控模式使能,
使用该位来控制器件对断点或观察点的反应。
*置位时内核执行指令或数据的异常中止。
*当清零时内核进入调试状态。
Bit5EmbeddedICE-RT禁止在更改观察点。
和断点时使用该位。
*置位时,该位禁止断点和观察点,断点或观察点寄存器可以编程为新的值。
*清零时,新的断点或观察点值生效。
协处理器寄存器映射
协处理器寄存器映射中的一个新的寄存器(R2)指示处理器是因为一个真实的中止,还是因为断点或观察点而进入预取指或数据异常中止。
更详细的信息请参阅第5章的中止状态寄存器。
1.5.2改进的调试通信通道(DCC)带宽
在ARM7TDMI-S处理器(Rev3)中,读取DCC数据需要对扫描链2进行两次访问第一次访问,状态位,第二次访问数据本身。
为了改进DCC带宽,在ARM7TDMI-S处理器(Rev4)中,读取数据和状态位只需要一次访问。
状态位包含在扫描链所读取的地址区域的最低位当中。
DCC控制寄存器中的状态位保持不变以确保向下兼容性。
更多信息参考第5章的调试通信通道一节。
1.5.3通过JTAG访问DCC
DCC控制寄存器可通过ARM7TDMI-S处理器(Rev4)中的JTAG接口进行控制处理器写操作清零bit0数据读控制位。
更多信息请参考第5章的调试通信通道一节。
1.5.4TAP控制器ID寄存器
TAP控制器ID寄存器值为0x7F1F0F0F。
更多信息请参考第5章的ARM7TDMI-S器件标识(ID)代码寄存器一节。
第2章编程模型
这一章讲述ARM7TDMI-S处理器的编程模型包含以下小节
*关于编程模型
*处理器操作状态
*存储器格式
*指令长度
*数据类型
*操作模式
*寄存器
*程序状态寄存器
*异常
*状态延迟
*复位
2.1关于编程模型
ARM7TDMI-S处理器内核使用ARMv4T结构实现,该结构包含32位ARM指令集和16位Thumb指
令集。
在ARM体系结构参考手册中详细讲述了编程模型。
2.2处理器操作状态
ARM7TDMI-S处理器有两种操作状态:
ARM状态32位,这种状态下执行的是字方式的ARM指令
Thumb状态16位,半字方式的Thumb指令
在Thumb状态中,程序计数器(PC)使用bit1来选择切换半字。
ARM和Thumb状态间的切换并不影响处理器模式或寄存器内容。
2.2.1状态切换
您可以使用BX指令将ARM7TDMI-S内核的操作状态在ARM状态和Thumb状态之间进行切换详
见ARM体系结构参考手册。
所有的异常处理都在ARM状态中执行。
如果异常发生在Thumb状态中,处理器会返回ARM状态。
在异常处理返回时自动切换回Thumb状态。
2.3存储器格式
ARM7TDMI-S处理器将存储器看作是一个从0开始的线性递增的字节集合
*字节0到3保存第1个存储的字
*字节4到7保存第2个存储的字
*字节8到11保存第3个存储的字
ARM7TDMI-S处理器可以将存储器中的字以下列格式存储
*大端(Big-endian)格式
*小端(Little-endian)格式
2.3.1大端格式
在大端格式中ARM7TDMI-S处理器将最高位字节保存在最低地址字节,最低位字节保存在最高地址字节,因此存储器系统字节0连接到数据线3124。
2.3.2小端格式
在小端格式中一个字当中最低地址的字节被看作是最低位字节,最高地址字节被看作是最高位字节。
因此存储器系统字节0连接到数据线70。
如图2-2所示。
2.4指令长度
指令长度为下面两种之一
*32位长度(在ARM状态中)
*16位长度(在Thumb状态中)
2.5数据类型
ARM7TDMI-S处理器支持下列数据类型
*字32位
*半字16位
*字节8位
您必须这样进行分配
*字量必须分配为占用4个字节
*半字量必须分配为占用2个字节
*字节量可放置在任何一个字节内
2.6操作模式
ARM7TDMI-S处理器具有7种操作模式
*用户模式这是ARM程序通常执行的状态,用于执行大多数应用程序。
*快速中断(FIQ)模式支持数据传输或通道处理。
*中断(IRQ)模式用于通用中断处理。
*超级用户模式是操作系统一种受保护的模式。
*中止模式在数据或指令预取指中止时进入该模式。
*系统模式是操作系统一种特许的用户模式。
*未定义模式当执行未定义的指令时进入该模式。
除了用户模式之外其它模式都被归为特权模式。
特权模式用于服务中断异常或者访问受保护的资源。
2.7寄存器
ARM7TDMI-S处理器总共有37个寄存器
*31个通用32位寄存器
*6个状态寄存器
这些寄存器并不是在同一时间全都可以被访问的。
处理器状态和操作模式决定了程序员可以访问哪些寄存器。
2.7.1ARM状态寄存器集
在ARM状态中16个通用寄存器和1个或2个状态寄存器可在任何时候同时被访问。
在特权模式中与模式相关的分组寄存器可以被访问。
图2-3所示为每种模式所能访问的寄存器。
ARM状态寄存器集包含16个可直接访问的寄存器r0r15。
一个附加的寄存器当前程序状态寄存器
(CPSR)包含条件代码标志和当前模式位,寄存器r0r13为保存数据或地址值的通用寄存器,寄存器r14
和r15具有下面的特殊功能
连接寄存器寄存器14作为一个子程序连接寄存器(LR)当执行连接分支(BL)指令时,r14接
收r15的备份。
在其它时候可将r14当成一个通用寄存器对应的分组寄存器r14_svc,r14_irq,r14_fiq,
r14_abt和r14_und与之相似,当发生中断和异常或者当中断或异常,子程序中的BL
指令执行,时用于保存r15的返回值。
程序计数器寄存器15用于保存程序计数器PC
在ARM状态中r15中的bits[1:
0]为0bits[31:
2]包含PC值。
在Thumb状态中bit[0]为0bits[31:
1]包含PC值
在特权模式中另外一个寄存器被保存的程序状态寄存器(SPSP)可以被访问。
它包含了条件代码标志和作为异常的结果所保存的模式位,此异常导致进入当前模式,关于程序状态寄存器的描述见后面的章
节
分组寄存器有一个模式标识符,用于指示它们被映射到哪个用户模式寄存器。
这些模式标识符如表2-1所示:
FIQ模式有7个分组寄存器,分别映射到r8r14(r8_fiqr14_fiq)
在ARM状态中,大多数FIQ处理程序都不必保存任何寄存器。
用户,IRQ,超级用户,中止和未定义
模式各有2个分组寄存器,分别映射到r13和r14,每种模式允许有一个专用的堆栈指针和LR。
图2-3所示为ARM状态寄存器。
2.7.2Thumb状态寄存器集
Thumb状态寄存器集时ARM状态集的子集,程序员可直接访问:
*8个通用寄存器r0r7
*PC
*堆栈指针SP
*连接寄存器LR
*CPSR
每个特权模式都有分组的SPLR和SPSR,该寄存器集如图2-4所示。
2.7.3ARM状态寄存器和Thumb状态寄存器之间的关系
Thumb状态寄存器与ARM状态寄存器有如下的关系:
*Thumb状态r0r7与ARM状态r0r7相同
*Thumb状态CPSR和SPSR与ARM状态CPSR和SPSR相同
*Thumb状态SP映射到ARM状态r13
*Thumb状态LR映射到ARM状态r14
*Thumb状态PC映射到ARM状态PC(r15)
这些关系如图2-5所示:
寄存器r0r7为低寄存器,寄存器r8r15为高寄存器
2.7.4在Thumb状态中访问高寄存器
在Thumb状态中高寄存器r8r15不是标准寄存器集的一部分。
汇编语言程序员对它们的访问受到限制,但可以将它们用于快速暂存
可以使用MOV指令的特殊变量将一个值从低寄存器(r0r7)转移到高寄存器,或者从高寄存器到低寄存器CMP指令可用于比较高寄存器和低寄存器的值。
ADD指令可用于将高寄存器的值与低寄存器的值相加,详细信请参考ARM体系结构参考手册。
程序状态寄存器
ARM7TDMI-S内核包含1个CPSR和5个SPSR供异常处理程序使用。
程序状态寄存器:
*保持条件代码标志
*控制中断的使能和禁止
*设置处理器操作模式
位的分配如图2-6所示
为了保持与将来的ARM处理器兼容,并且作为一种良好的习惯,在更改CPSR时,我们强烈建议您使用读写修改的方法。
2.8.1条件代码标志
N,Z,C和V位都是条件代码标志。
可以通过算术和逻辑操作来设置这些位。
这些标志还可通过MSR和LDM指令进行设置。
ARM7TDMI-S处理器对这些位进行测试以决定是否执行一条指令。
在ARM状态中,所有指令都可按条件来执行。
在Thumb状态中只有分支指令可条件执行。
更详细的信息请参考ARM体系结构参考手册。
2.8.2控制位
PSR的最低8位为控制位,它们分别是
*中断禁止位
*T位
*模式位
当发生异常时,控制位改变,当处理器在一个特权模式下操作时,可用软件操作这些位。
中断禁止位
I和F位都是中断禁止位
*当I位置位时,IRQ中断被禁止
*当F位置位时,FIQ中断被禁止
T位
T位反映了正在操作的状态
*当T位置位时,处理器正在Thumb状态下运行
*当T位清零时,处理器正在ARM状态下运行
操作状态通过CPTBIT外部信号反映。
警告:
绝对不要强制改变CPSR寄存器中的T位。
如果这样做,处理器会进入一个无法预知的状态。
模式位
M4,M3,M2,M1和M0位(M[4:
0])都是模式位。
这些位决定处理器的操作模式,见表2-2,不是所有模式位的组合都定义了有效的处理器模式,因此请小心不要使用表中所没有列出的组合。
如果将非法值写入M[4:
0]中,处理器将进入一个无法恢复的模式。
2.8.3保留位
PSR中的保留位被保留将来使用,当改变PSR标志和控制位时,请确认没有改变这些保留位。
另外请确保您的程序不依赖于包含特定值的保留位,因为将来的处理器可能会将这些位设置为1或者0。
2.9异常
只要正常的程序流被暂时中止,处理器就进入异常模式。
例如响应一个来自外设的中断。
在处理异常之前,ARM7TDMI-S内核保存当前的处理器状态,这样当处理程序结束时可以恢复执行原来的程序。
如果同时发生两个或更多异常,那么将按照固定的顺序来处理异常,见异常优先级一节。
该节将会详细讲述ARM7TDMI-S处理器的异常处理
*异常入口/出口汇总
*进入异常
*退出异常
2.9.1异常入口/出口汇总
表2-3所示为异常入口处变量r14所保存的PC值以及退出异常处理程序所推荐使用的指令。
2.9.2进入异常
当处理异常时,ARM7TDMI-S内核会:
1.在适当的LR中保存下一条指令的地址。
当异常入口来自:
2.ARM状态ARM7TDMI-S将下一条指令的地址复制到LR中(当前PC+4或PC+8取决
于异常的类型)
Thumb状态ARM7TDMI-S将PC加偏移值(PC+4或PC+8取决于异常的类型)写入LR当进入异常时,异常处理程序不必确定状态。
例如在SWI情况下,MOVSPC,r14_svc总是返回到下一条指令,而不管SWI是在ARM还是在Thumb状态下执行。
2.将CPSR复制到适当的SPSR。
3.根据异常将CPSR模式强制设为某一值。
4.强制PC从相关的异常向量处对下一条指令取指。
ARM7TDMI-S内核在中断异常时置位中断禁止标志,这样可防止不受控制的异常嵌套。
异常总是在ARM状态中进行处理。
当处理器处于Thumb状态时发生了异常,在异常向量地址装入PC时,会自动切换到ARM状态。
2.9.3退出异常
当异常结束时,异常处理程序必须:
1.将LR中的值减去偏移量后移入PC,偏移量根据异常的类型而有所不同,见表2-3
2.将SPSR的值复制回CPSR。
3.清零在入口置位的中断禁止标志。
恢复CPSR的动作会将T,F和I位自动恢复为异常发生前的值。
2.9.4快速中断请求
快速中断请求(FIQ)异常支持数据转移或通道处理。
在ARM状态中,FIQ模式有8个专用的寄存器可
用来满足寄存器保护的需要(这是上下文切换的最小开销)
将nFIQ信号拉低可实现外部产生FIQ。
不管异常入口是来自ARM状态还是Thumb状态,FIQ处理程序都会通过执行下面的指令从中断返回:
SUBSPC,R14_fiq,#4
在一个特权模式中,可通过置位CPSR中的F标志来禁止FIQ异常。
当F标志清零时,ARM7TDMI-S
在每条指令结束时检测FIQ同步器输出端的低电平。
2.9.5中断请求
中断请求(IRQ)异常是一个由nIRQ输入端的低电平所产生的正常中断,IRQ的优先级低于FIQ。
对
于FIQ序列它是被屏蔽的。
任何时候在一个特权模式下,都可通过置位CPSR中的I位来禁止IRQ,。
不管异常入口是来自ARM状态还是Thumb状态,IRQ处理程序都会通过执行下面的指令从中断返回:
SUBSPC,R14_irq,#4
2.9.6中止
中止表示当前存储器访问不能被完成。
这是通过外部ABORT输入指示的。
不管异常入口是来自ARM
状态还是Thumb状态,FIQ处理程序都会通过执行下面的指令从中断返回:
SUBSPC,R14_fiq,#4在存储器访问周期结束时检测中止异常。
有两种类型的中止
*预取指中止发生在指令预取指过程中
*数据中止发生在对数据访问时
预取指中止
当发生预取指中止时,ARM7TDMI-S内核将预取的指令标记为无效,但在指令到达流水线的执行阶段
时才进入异常。
如果指令在流水线中因为发生分支而没有被执行,中止将不会发生。
在处理中止的原因之后,不管处于哪种处理器操作状态,处理程序都会执行下面的指令:
SUBSPC,R14_abt,#4
这个动作恢复了PC和CPSR并重试被中止的指令。
数据中止
当发生数据中止时根据指令的类型产生不同的动作:
*数据转移指令(LDR,STR)回写到被修改的基址寄存器。
中止处理程序必须注意这一点。
*交还指令(SWP)中止好像没有被执行过一样中止必须发生在(SWP)指令进行读访问时
*块数据转移指令(LDM,STM)完成。
当回写被设置时。
基址寄存器被更新,在指示出现中止后,ARM7TDMI-S内核防止所有寄存器被覆盖。
这意味着ARM7TDMI-S内核总是会保护被中止的
LDM指令中的r15(总是最后一个被转移的寄存器)。
中止的机制使指令分页的虚拟存储器系统能够被实现。
在这样一个系统中,处理器允许产生仲裁地址。
当某一地址的数据无法访问时,存储器管理单元(MMU)通知产生了中止,中止处理程序必须找出中止的原因,使请求的数据可以被访问并重新执行被中止的指令。
应用程序不必知道可用存储器的数量,也不必知道它的被中止时所处的状态。
在修复产生中止的原因后,不管处于哪种处理器操作状态,处理程序都必须执行下面的返回指令:
SUBSPC,R14_abt,#8
这个动作恢复了PC和CPSR并重试被中止的指令:
2.9.7软件中断指令
软件中断(SWI)用于进入超级用户模式,通常用于请求一个特定的超级用户函数。
SWI处理程序通过执行下面的指令返回:
MOVSPC,R14_svc
这个动作恢复了PC和CPSR并返回到SWI之后的指令。
SWI处理程序读取操作码以提取SWI函数编号。
2.9.8未定义的指令
当ARM7TDMI-S处理器遇到一条系统内任何协处理器都无法处理的指令时,ARM7TDMI-S内核执行未定义指令陷阱。
软件可使用这一机制通过仿真未定义的协处理器指令来扩展ARM指令集。
ARM7TDMI-S处理器完全遵循ARM结构v4T,可以捕获所有分类未被定义的指令位格式。
在防止失败的指令后,捕获处理器执行下面的指令:
MOVSPC,R14_und
这个动作恢复了PC和CPSR并返回到未定义指令之后的指令。
关于未定义指令更详细的信息请参考ARM体系结构参考手册。
2.9.9异常向量
表2-4所示位异常向量地址,在表中,I和F表示先前的值。
2.9.10异常优先级
当多个异常同时发生时一个固定的优先级系统决定它们被处理的顺序:
1.复位(最高优先级)
2.数据中止
3.FIQ
4.IRQ
5.预取指中止
6.未定义指令
7.SWI(最低优先级)
有些异常不能一起发生
*未定义的指令和SWI异常互斥。
它们分