• 沒有找到結果。

寄存器转移指令

在文檔中 1.1 嵌入式系统 (頁 64-71)

第3章 ARM7体系结构

3. 寄存器转移指令

允许协处理器值转移到ARM 寄存器或将 ARM 寄存器值转移到协处理器。

(5) 杂项指令

杂项指令包括状态寄存器转移指令和异常产生指令。

状态寄存器转移指令将CPSR 或 SPSR 的内容转移到一个通用寄存器,或者反过来将通 用寄存器的内容写入CPSR 或 SPSR 寄存器。写 CPSR 会:

设定条件代码标志的值 设定中断使能位的值 设定处理器模式

有两种类型的指令用于产生特定的异常,但在ARM7TDMI 仅实现了一种,它就是软件 中断指令。

SWI 指令导致产生软件中断异常。它通常用于向操作系统请求调用 OS 定义的服务。SWI 指令导致的处理器进入管理模式(一种特权模式)。这样一个非特权任务就能对特权的功能 进行访问,但是只能以OS 所允许的方式访问。

3.14.3 Thumb 指令集

传统的微处理器结构对于指令和数据有相同的带宽。因此,和16 位结构相比,32 位结 构处理32 位数据具有更高的性能,并且在寻址更大的地址空间时要有效得多。

16 位结构比 32 位结构具有更高的代码密度,并且超过 32 位结构 50%的性能。Thumb

- - 55 在32 位结构上实现了 16 位的指令集,这样可提供:

比 16 位结构更高的性能 比 32 位结构更高的代码密度

Thumb 指令集不是一个完整的指令集,它仅仅是最通用的 ARM 指令的子集,不能指望 处理器只执行Thumb 指令而不支持 ARM 指令。Thumb 指令长度为 16 位,每条指令都对应 一条32 位 ARM 指令,它对处理器模型有相同的效果。

Thumb 指令使用标准的 ARM 寄存器配置进行操作(Thumb 指令对寄存器访问的限制参 考1.6.3 节),这样 ARM 和 Thumb 状态之间具有极好的互用性。在执行方面,Thumb 具有 32 位内核所有的优点:

32 位地址空间 32 位寄存器

32 位移位器和算术逻辑单元(ALU) 32 位存储器传输

Thumb 因此提供了长的分支范围、强大的算术操作和巨大的地址空间。

Thumb 代码仅为 ARM 代码规模的 65%,但其性能却相当于连接到 16 位存储器系统的 ARM 处理器性能的 160%。因此 Thumb 使 ARM7TDMI 处理器非常适用于那些只有有限的 存储器带宽并且代码密度很高的嵌入式应用。

16 位 Thumb 和 32 位 ARM 指令集使设计者极大的灵活性,使他们可以根据各自应用的 需求,在子程序一级上实现对性能或者代码规模的优化。例如,应用中的快速中断和 DSP 算法可使用完全的ARM 指令集编写并与使用 Thumb 代码连接。

为了实现 16 位指令长度,Thumb 指令丢弃 ARM 指令集的一些特性:

大多数指令是无条件执行的(所有 ARM 指令是条件执行的)

许多 Thumb 指令采用 2 地址格式(除 64 位乘法外,ARM 数据处理指令采取 3 地址 格式)

Thumb 指令没有 ARM 指令规则 Thumb 指令集可分为 4 大类指令:

分支指令 数据处理指令

寄存器加载与存储指令 异常产生指令

(1) 分支指令

与ARM 分支指令不同,Thumb 的分支指令 B、BX 和 BL 中的偏移域没有固定的位数,

不过应用工程师不必关心它,汇编程序会自动处理。其中指令B 是 Thumb 指令中唯一条件 执行的指令。

转移和连接(BL)选项在跳转后将指令地址保存在 R14(LR)当中。这样通过将 LR 复制到PC 可实现子程序的返回。

另外有的分支指令可在指令集之间进行切换。这样就允许Thumb 子程序和 ARM 子程 序可以相互调用。

(2) 数据处理指令

这些指令都能够映射到相应的ARM 数据处理指令(包括乘法指令)。尽管 ARM 指令 支持在单条指令中完成一个操作数的移位和AUL 操作,但 Thumb 指令集将移位操作和 ALU 操作分离为不同的指令。

Thumb 指令对 8 个寄存器的操作的数据处理指令都更新条件码标志(同功能的 ARM 指 令仅在带S 后缀时更新条件码标志位)。除 CMP 指令外,对高 8 个寄存器操作的指令不改

- - 56

变条件码标志(CMP 指令的用途就是改变条件码标志)。

(3) 加载和存储指令

加载和存储指令包括加载和存储单寄存器和加载和存储多个寄存器两类。

加载和存储单寄存器的指令是从 ARM 的加载和存储单寄存器指令集中精选出来的子 集,并且与等价的ARM 指令有严格相同的语义和完全相同的汇编格式。

Thumb 只有六条加载和存储多个寄存器的指令,分别为:PUSH {reglist}、POP {reglist}、

PUSH {reglist,LR}、POP {reglist,PC}、LDMIA Rn,{reglist}和 STMIA Rn,{reglist}。这些指 令有很多使用限制,具体情况参考第二章。

(4) 异常产生指令

有两种类型的指令用于产生特定的异常,但在ARM7TDMI 仅实现了一种,它就是软件 中断指令。

SWI 指令导致产生软件中断异常。它通常用于向操作系统请求调用 OS 定义的服务。SWI 指令导致的处理器进入管理模式(一种特权模式)和进入ARM 状态。这样一个非特权任务 就能对特权的功能进行访问,但是只能以OS 所允许的方式访问。

3.15 协处理器接口

3.15.1 简介

ARM7TDMI 处理器指令集使您可以通过协处理器来实现特殊的附加指令。这些协处理 器是与ARM7TDMI 内核相结合的单独的处理单元。一个典型的协处理器包括:

指令流水线 指令译码逻辑 寄存器分组

带独立数据通路的特殊处理逻辑

协处理器和ARM7TDMI 处理器连接到同一个数据总线,这意味着协处理器可以对指令 流中的指令进行译码并执行那些它所支持的指令。每条指令的处理都沿着ARM7TDMI 处理 器流水线和协处理器流水线同时进行。

指令的执行由ARM7TDMI 内核与协处理器共同实现。

ARM7TDMI 内核:

1. 求出条件代码的值以确定指令是否必须由协处理器执行,然后使用 CPnI(内核 与协处理器握手的信号)通知系统中的所有协处理器。

2. 产生指令所要求的地址(包括下一条指令的预取)来填充流水线。

3. 如果出现协处理器不接受的指令,则执行未定义指令陷阱。

协处理器:

1. 对指令进行译码以确定是否接受。

2. 通过 CPA 和 CPB(内核与协处理器握手的信号)指示它是否接受这一指令。

3. 从自身的寄存器组当中取出任何需要的值。

4. 执行指令所要求的操作。

如果协处理器无法执行某条指令,则执行未定义指令陷阱。您可以选择在软件中仿真协 处理器功能或设计一个专用的协处理器。

3.15.2 可用的协处理器

一个系统中最多可连接 16 个协处理器,每个协处理器都通过唯一的 ID 号识别。

ARM7TDMI 处理器包含两个内部协处理器:

- - 57 CP14 通信通道协处理器

CP15 为 cache 和 MMU 功能提供的系统控制协处理器

因此,您不能将外部协处理器的编号分配为14 和 15。ARM 还保留了其它的协处理器编 号,见表3.7。

表 3.7 可用的协处理器

协处理器编号 分配

15 系统控制

14 调试控制器

13:8 保留

7:4 可供芯片设计者使用

3:0 保留

3.15.3 关于未定义的指令

ARM7TDMI 处理器执行完全的 ARM 结构 v4T 未定义指令的处理。这意味着 ARM 体系 结构参考手册中定义为UNDEFINED 的任何指令都会使 ARM7TDMI 处理器执行未定义指 令陷阱。任何一个不被协处理器接受的指令也会使 ARM7TDMI 处理器执行未定义指令陷 阱。

3.16 调试接口简介

ARM7TDMI 处理器的高级调试特性使应用程序、操作系统和硬件的开发变得更加容易。

3.16.1 典型调试系统

ARM7TDMI 处 理 器 构 成 了 调 试 系 统 的 一 个 部 件 , 它 作 为 您 执 行 的 高 级 调 试 与 ARM7TDMI 所支持的低级调试之间的接口。图 3.9 所示为一个典型的调试系统。

一个调试系统通常具有3 个部分:

调试主机

一台运行调试软件(例如ARM 的 Windows 版调试器 AXD)的计算机。调试主机使您 可以使用设置断点或检查存储器内容这些高级命令。

协议转换器

调试主机发出的高级命令与ARM7TDMI 处理器 JTAG 接口的低级命令之间的接口。典 型地,它通过一个接口(例如增强型并口)与主机相连。

调试目标

ARM7TDMI 处理器具有便于进行底层调试的硬件扩展。这些扩展可使您:

暂停程序的执行

检查和修改内核的内部状态 检查存储器系统的状态

执行中止异常,允许实时监控内核 恢复程序执行

调试主机和协议转换器与系统有关。

- - 58 调试主机 (主机编译器 运行ARM 或 第三方工具包)

协议转换器 (例如Multi-ICE)

调试目标 (包含ARM7TDMI-S 处理器的开发系统)

图 3.9 典型的调试系统 3.16.2 调试接口

ARM7TDMI 处理器的调试接口是建立在 IEEE 1149.1-1990 标准、标准测试访问端口和 边界扫描结构基础之上的。

3.16.3 EmbeddedICE-RT

ARM7TDMI 处理器 EmbeddedICE-RT 模块为 ARM7TDMI 内核提供集成的片内调试支 持。EmbeddedICE-RT 通过 ARM7TDMI 处理器 TAP 控制器串行编程。图 3.10 为内核、

EmbeddedICE-RT 与 TAP 控制器之间的关系,图中只显示了与 EmbeddedICE-RT 有关的信号。

CLK ARM7TDMI

内核

Em beddedI CE- RT

DBGRNG[1:0]

DBGACK DBGBREAK DBGCOMMTX DBGCOMMRX

DBGRQ DBGEXT[1:0]

DBGEN

TAP

DBGTCKEN DBGTMS

DBGTDI DBGTDO DBGnTRTS

图 3.10 ARM7TDMI 内核、TAP 控制器和 EmbeddedICE-RT 宏单元

- - 59 EmbeddedICE-RT 逻辑包含下面这些部分:

两个实时观察点单元

可以编程这两个观察点或其中一个使内核暂停指令的执行。当编程到 EmbeddedICE-RT 的值与地址总线、数据总线和不同的控制信号上出现的值相匹配时,指令的执行会被暂停。

可以屏蔽其中任何一位使它的值不影响比较。

每个观察点单元都可配置为观察点(监视数据的访问)或断点(监视指令取指)

中止状态寄存器

该寄存器用于识别产生异常中止的原因。

调试通信通道(DCC)

DCC 在目标系统与主机调试程序之间传递信息。

3.16.4 扫描链和 JTAG 接口

在 ARM7TDMI 处理器中有两个扫描链用于实现调试和 EmbeddedICE-RT 编程。JTAG 类型的测试访问端口(TAP)控制器控制扫描链。关于 JTAG 规范的详细信息请参阅 IEEE 标准1149.1-1990。

3.17 ETM 接口简介

外部嵌入式跟踪宏单元(ETM)连接到 ARM7TDMI 处理器,这样就能够实现对正在执 行的处理器进行代码的实时跟踪。

ETM 直接连接到 ARM 内核而不是主 AMBA 系统总线。它将跟踪信息压缩并通过一个

ETM 直接连接到 ARM 内核而不是主 AMBA 系统总线。它将跟踪信息压缩并通过一个

在文檔中 1.1 嵌入式系统 (頁 64-71)