首页 理论教育 嵌入式系统协处理器指令

嵌入式系统协处理器指令

时间:2023-11-23 理论教育 版权反馈
【摘要】:在程序执行的过程中,每个协处理器忽略属于ARM 处理器和其他协处理器的指令。其中,Cop1 和Cop2 为协处理器操作码,CRn、CRm 和CRd 均为协处理器的寄存器,指令中不涉及ARM 处理器的寄存器和存储器。本指令可用于任何可能存在的协处理器。这类协处理器一般使用这些指令来访问和修改片上的控制寄存器。通常,具有协处理器编号CP#的协处理器将接受这条指令。如果没有一个协处理器接受这条指令,ARM 将产生未定义指令陷阱。

嵌入式系统协处理器指令

ARM 支持16 个协处理器,用于各种协处理器操作,最常使用的协处理器是用于控制片上功能的系统协处理器。 例如,控制ARM720 上的高速缓存存储器管理单元等,也开发了浮点ARM 协处理器,还可以开发专用的协处理器。 在程序执行的过程中,每个协处理器忽略属于ARM 处理器和其他协处理器的指令。 当一个协处理器硬件不能执行属于它的协处理器指令时,将产生未定义指令异常中断,在该异常中断处理程序时,可以通过软件模拟该硬件操作。 例如,如果系统中不包含向量浮点运算器,则可以选择浮点运算软件模拟包来支持向量浮点运算。

ARM 协处理器指令根据其用途主要分为三类:①用于ARM 处理器初始化ARM 协处理器的数据操作指令;②用于ARM 处理器的寄存器和ARM 协处理器间的数据传送指令;③用于ARM 协处理器的寄存器和内存单元之间的传送数据。

(1)协处理器的数据操作

协处理器数据操作完全是协处理器内部的操作,它完成协处理器寄存器的状态改变。 一个例子是浮点加法,在浮点协处理器中两个寄存器相加,结果放在第三个寄存器。 这些指令用于控制数据在协处理器寄存器内部的操作。 标准格式遵循ARM 整数数据处理指令的三地址形式,但是所有协处理器域可能会有其他的解释。

1)指令格式

ARM 对可能存在的任何协处理器提供这条指令。 如果它被一个协处理器接受,ARM 继续执行下一指令;如果它没有被接受,ARM 将产生未定义中止的陷阱(可以用来实现“协处理器丢失”的软件仿真)。

通常,与协处理器编号CP#一致的协处理器将接受指令,执行由Cop1 和Cop2 域定义的操作,使用CRn 和CRm 作为源操作数,并将结果放到CRd。 其中,Cop1 和Cop2 为协处理器操作码,CRn、CRm 和CRd 均为协处理器的寄存器,指令中不涉及ARM 处理器的寄存器和存储器。

举例如下:

2)注意事项

对于Cop1、Crn、CRd、Cop2 和CRm 域的解释与协处理器有关。 以上的解释是推荐的用法,它最大程度地与ARM 开发工具兼容。

(2)协处理器的数据存取

协处理器数据传送指令从存储器读取数据装入协处理器寄存器,或将协处理器寄存器的数据存入存储器。 因为协处理器可以支持它自己的数据类型,所以每个寄存器传送的字数与协处理器有关。 ARM 产生存储器地址,但协处理器控制传送的字数。 协处理器可能执行一些类型转换作为传送的一部分。

协处理器数据存取指令类似于前面介绍的字和无符号字节数据存取指令的立即数偏移格式,但偏移量限于8 位而不是12 位。

可使用自动变址,以及前变址和后变址寻址。

1)指令格式

①前变址的格式

②后变址的格式

在这两种情况下,LDC 选择从存储器中读取数据装入协处理器寄存器,STC 选择将协处理器寄存器的数据存到存储器。 L 标志如果存在,则选择长数据类型(N =1)。 <offset >是#± <8位立即数>。

本指令可用于任何可能存在的协处理器。 如果没有一个协处理器接受它,ARM 将产生未定义指令陷阱,可以使用软件仿真协处理器。 一般情况下,具有协处理器编号CP#的协处理器(如果存在)将接受这条指令。

地址计算将在ARM 内进行,使用ARM 基址寄存器(Rn)和8 位立即数偏移量进行计算,8 位立即数偏移应左移两位产生字偏移。 寻址模式和自动变址则以ARM 字和无符号字节存取指令相同的方式来控制。 这样定义了第一个存取地址,随后的字则存储到递增的字地址或从递增的字地址读取。

数据由协处理器寄存器(CRd)提供或由协处理器寄存器接受,由协处理器来控制存取的字数,N 位从两种可能的长度中选择一种。(www.xing528.com)

举例如下:

2)注意事项

①N 和CRd 域的解释与协处理器有关,以上用法是推荐的用法,且最大限度地与ARM 开发工具兼容。

②如果地址不是字对齐的,则最低两位有效位将被忽略,但是,一些ARM 系统可能产生异常。

③字的存取数目由协处理器控制。 ARM 将连续产生后续地址,直到协处理器指示存取应该结束。 在数据存取的过程中,ARM 将不响应中断请求,所以,协处理器设计者应该注意,因为存取非常长的数据将会损害系统中断响应时间。 将最大存取长度限制到16 个字,将确保协处理器数据存取的时间不会长于存取多寄存器指令的最坏情况。

(3)协处理器的寄存器传送

在ARM 和协处理器寄存器之间传送数据有时是有用的。 这些协处理寄存器传送指令,使得协处理器中产生的整数能直接传送到ARM 寄存器,或者影响ARM 条件码标志位。 典型的使用是:①浮点FIX 操作,它将整数返回到ARM 的一个寄存器。 ②浮点比较,它将比较的结果直接返回到ARM 条件码标志位,此标志位将确定控制流。 ③FLOAT 操作,它从ARM 寄存器中取得一个整数,并传送给协处理器,在那里整数被转换成浮点表示并装入协处理器寄存器。

在一些较复杂的ARM CPU(中央处理单元)中,常使用系统控制协处理器来控制Cache和存储器管理功能。 这类协处理器一般使用这些指令来访问和修改片上的控制寄存器。

1)指令格式

从协处理器传送到ARM 寄存器:

从ARM 寄存器传送到协处理器:

本指令可用于任何可能存在的协处理器。 通常,具有协处理器编号CP#的协处理器将接受这条指令。 如果没有一个协处理器接受这条指令,ARM 将产生未定义指令陷阱。

如果协处理器接受了从协处理器中读取数据的指令,一般它将执行由Cop1 和Cop2 定义的对于源操作数CRn 和CRm 的操作,并将32 位整数结果返回到ARM,ARM 再将它装入Rd。

如果在从协处理器读取数据的指令中将PC 定义为目的寄存器Rd,则由协处理器产生32位整数的最高4 位将被放在CPSR 中的N、Z、C 和V 标志位。

举例如下:

2)注意事项

①Cop1、CRn、Cop2 和CRm 域由协处理器解释,推荐使用以上解释以最大限度同ARM 开发工具兼容。

②若协处理器必须完成一些内部工作来准备一个32 位的数据向ARM 传送(例如,浮点FIX 操作必须将浮点值转换为等效的定点值),这些工作必须在协处理器提交传送前进行。因此,在准备数据时经常需要协处理器握手信号处于“忙—等待”状态。 ARM 可以在“忙—等待”时间内产生中断,如果它确实得以中断,它将暂停握手开始中断服务。 当它从中断服务程序返回时,将可能重试协处理器指令,但也可能不重试,例如中断使任务切换。 在任一情况下,协处理器必须给出一致的结果,因此,在握手提交阶段之前进行的准备工作,不许改变处理器的可见状态。

③从ARM 到协处理器的传送一般比较简单,因为任何数据转换工作都可以在传送完成后在协处理器中的进行。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈