免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1939 | 回复: 0
打印 上一主题 下一主题

ARM协处理器及其指令 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 08:41 |只看该作者 |倒序浏览
学习ARM 指令这么久,搞不懂的就是协处理器指令到底是怎么样工作的。在网上找到点资料贴出来。
在研究MMU地址转换的时候遇到过协处理器P15。

ARM的嵌入式应用中,存储系统是通过协处理器CP15完成的。CP15包含16个32位的寄存器,其编号是0到15。对CP15协处理器的操作使用mcr和mrc两条协处理器指令,这两条指令的记法是从后往前看:mcr是把r(CPU核寄存器)中的数据传送到c(协处理器寄存器)中,mrc则是把c(协处理器寄存器)中的数据传送到r(CPU核寄存器)中。对CP15协处理器的所有操作都是通过CPU寄存器和CP15寄存器之间交换数据来完成的。

寄存器C0,C1。C0的基本作用是ID编码;C1的基本作用是控制位(可读可写)。-

C1的第12位:I(bit[12])。当数据和地址是分开的时,本控制位禁止使能指令cache;其中0 是禁止指令cache ,1是使能指令cache;如果系统中使用统一的指令cache和数据cache或者系统中不含cache,读取时该位返回0,写入时忽略该位。当系统中的指令cache不能禁止时,读取时该位返回1,写入时忽略该位。

C1的第2位:C (bit[2])。当数据和地址是分开的时,本控制位禁止使能数据cache;如果系统中使用统一的指令cache和数据cache时,该控制位禁止使能整个cache。其中0 是禁止cache ,1是使能cache;如果系统中不含cache,读取时该位返回0,写入时忽略该位。当系统中的cache不能禁止时,读取时该位返回1,写入时忽略该位。

C1的第1位:A (bit)。对于可以选择是否支持内存访问时地址对齐检查的那些系统,本位禁止使能地址对齐检查功能;0是禁止地址对齐检查功能,1是使能地址对齐检查功能;对于内存访问时地址对齐检查功能不可选择的那些系统,读取该位时根据系统是否支持地址对齐检查功能返回0或者1,写入时忽略该位。-

C1的第0位:M(bit[0])。禁止使能MMU或者PU;其中0是禁止地址对齐检查功能,1是使能地址对齐检查功能;如果系统中没有MMU及PU,读取时该位返回0,写入时忽略该位。

C1的30位设置快速总线模式

C1的31位设置异步模式


博文地址http://blog.csdn.net/yyt7529/archive/2009/08/02/4401937.aspx

ARM 微处理器可支持多达 16 个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略 ARM 处理器和其他协处理器的指令。ARM 的协处理器指令主要用于 ARM 处理器初始化 ARM 协处理器的数据处理操作,以及在ARM 处理器的寄存器和协处理器的寄存器之间传送数据,和在 ARM 协处理器的寄存器和存储器之间传送数据。 ARM 协处理器指令包括以下 5 条:

— CDP 协处理器数操作指令
— LDC 协处理器数据加载指令
— STC 协处理器数据存储指令
— MCR ARM 处理器寄存器到协处理器寄存器的数据传送指令
— 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 指令

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 有两个具体协处理器

CP14(略)

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的详细信息

详见:table 2-6

-R1:控制寄存器 2-10

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

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

-R4:保留 2-14

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

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

-R7:缓存操作寄存器 2-15

-R8:TLB操作寄存器 2-18

-R9:缓存锁定寄存器 2-19

-R10:TLB 锁定寄存器 2-21

-R11-12&14:保留

-R13:处理器ID 2-22

-R15:测试配置寄存器 2-24


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP