打印
[微控制器/MCU]

引用 ARM协处理器及其指令简单介绍

[复制链接]
2706|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Massif123|  楼主 | 2010-8-6 22:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
U-BOOTARM协处理器及其指令简单介绍
ARM协处理器及其指令
ARM 微处理器可支持多达 16 个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略 ARM 处理器和其他协处理器的指令

ARM 的协处理器指令主要用于

l
ARM 处理器初始化

l
ARM 协处理器的数据处理操作

l
在ARM 处理器的寄存器和协处理器的寄存器之间传送数据

l
在 ARM 协处理器的寄存器和存储器之间传送数据



ARM 协处理器指令包括以下 5 条:

1.
CDP 协处理器数操作指令

2.
LDC 协处理器数据加载指令

3.
STC 协处理器数据存储指令

4.
MCR ARM 处理器寄存器到协处理器寄存器的数据传送指令

5.
MRC 协处理器寄存器到ARM 处理器寄存器的数据传送指令



1、CDP 指令

CDP 指令的格式为:

CDP{条件} 协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2。

CDP 指令用于ARM 处理器通知ARM 协处理器执行特定的操作,若协处理器不能成功完成特定的操作,则产生未定义指令异常。其中协处理器操作码1 和协处理器操作码2 为协处理器将要执行的操作,目的寄存器和源寄存器均为协处理器的寄存器,指令不涉及ARM 处理器的寄存器和存储器。

指令示例:

CDP P3 ,2 ,C12 ,C10 ,C3 ,4 ;该指令完成协处理器P3 的初始化



2、LDC 指令

LDC 指令的格式为:

LDC{条件}{L} 协处理器编码,目的寄存器,[源寄存器]
LDC 指令用于将源寄存器所指向的存储器中的字数据传送到目的寄存器中,若协处理器不能成功完成传送操作,则产生未定义指令异常。其中,{L}选项表示指令为长读取操作,如用于双精度数据的传输。

指令示例:

LDC P3 , C4 , [R0] ;将 ARM 处理器的寄存器 R0 所指向的存储器中的字数据传送到协处理器 P3 的寄存器 C4 中。



3、STC 指令

STC 指令的格式为:

STC{条件}{L} 协处理器编码,源寄存器,[目的寄存器]
STC 指令用于将源寄存器中的字数据传送到目的寄存器所指向的存储器中,若协处理器不能成功完成传送操作,则产生未定义指令异常。其中,{L}选项表示指令为长读取操作,如用于双精度数据的传输。

指令示例:

STC P3 , C4 , [R0] ;将协处理器 P3 的寄存器 C4 中的字数据传送到 ARM 处理器的寄存器R0 所指向的存储器中。



4、MCR 指令 (mov arm to c,可以这样来**

MCR 指令的格式为:

MCR{条件} 协处理器编码,协处理器操作码1源寄存器,目的寄存器1,目的寄存器2,协处理器操作码2。

MCR 指令用于将ARM 处理器寄存器中的数据传送到协处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码1 和协处理器操作码2 为协处理器将要执行的操作,源寄存器为ARM 处理器的寄存器,目的寄存器1 和目的寄存器2 均为协处理器的寄存器。

指令示例:

MCR
P3
, 3 , R0 , C4 , C5 , 6 ;

该指令将 ARM 处理器寄存器 R0 中的数据传送到协处理器 P3 的寄存器 C4 和 C5 中。



5、MRC 指令

MRC 指令的格式为:

MRC{条件} 协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2。

MRC 指令用于将协处理器寄存器中的数据传送到ARM 处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码1 和协处理器操作码2 为协处理器将要执行的操作,目的寄存器为ARM 处理器的寄存器,源寄存器1 和源寄存器2 均为协处理器的寄存器。

指令示例:

MRC P3 , 3 , R0 , C4 , C5 , 6 ;

该指令将协处理器 P3 的寄存器中的数据传送到 ARM 处理器寄存器中.




The ARM920T介绍CP15介绍
CP15 系统控制协处理器 (the system control coprocessor)它通过协处理器指令MCR和MRC提供具体的寄存器来配置和控制caches、MMU、保护系统、配置时钟模式(在bootloader时钟初始化用到)……

CP15的寄存器只能被MRC和MCR(Move to Coprocessor from ARM Register )指令访问



他包括15个具体的寄存器如下:

-R0:ID号寄存器 这是一个只读寄存器,返回一个32位的设备ID号,32具体功能参考2410 datesheet的 table 2-5
-R0:缓存类型寄存器(CACHE TYPE REGISTER),注意有2个R0,根据MCR操作数的不同传送不同的值,这也一个只读寄存器,包含了caches的信息。读这个寄存器的方式是通过设置协处理操作码为1.

如:

MRC p15,0,Rd,c0,c0,1; 返回caches的详细信息

-R1:控制寄存器

-R2:转换表基址寄存器(Translation Table Base --TTB)

-R3:域访问控制寄存器(Domain access control )

-R4:保留

-R5:异常状态寄存器(fault status -FSR)

-R6:异常地址寄存器(fault address -FAR)

-R7:缓存操作寄存器

-R8:TLB操作寄存器

-R9:缓存锁定寄存器

-R10:TLB 锁定寄存器

-R11-12&14:保留

-R13:处理器ID
-R15:测试配置寄存器

更加详细的介绍请参考arm处理器的数据手册,上面说的非常清楚,这里给大家一个建议:不论在学习什么芯片,最好的参考资料就是原版数据手册,否则很容易被许多中文参考资料所误导。

相关帖子

沙发
年轻不在| | 2010-8-17 12:43 | 只看该作者
我想问的是,不了解arm架构好像也能编程,了解arm架构到底对编程有什么帮助呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

177

主题

276

帖子

1

粉丝