ARM协处理器CP15寄存器详解

发布者:Shuxiang最新更新时间:2016-03-31 来源: eefocus关键字:ARM  协处理器  CP15寄存器 手机看文章 扫描二维码
随时随地手机看文章
用于系统存储管理的协处理器CP15
 
MCR{cond}     coproc,opcode1,Rd,CRn,CRm,opcode2
MRC {cond}    coproc,opcode1,Rd,CRn,CRm,opcode2
coproc         指令操作的协处理器名.标准名为pn,n,为0~15 
opcode1      协处理器的特定操作码. 对于CP15寄存器来说,opcode1永远为0,不为0时,操作结果不可预知
CRd             作为目标寄存器的协处理器寄存器. 
CRn             存放第1个操作数的协处理器寄存器. 
CRm            存放第2个操作数的协处理器寄存器. (用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为C0)
opcode2     可选的协处理器特定操作码.                (用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为0)
 
  • 在基于ARM的嵌入式系统中,存储系统通常是通过系统控制协处理器CP15完成的。
  • CP15可以包含16个32位的寄存器,其编号为0-15。实际上对于某些编号的寄存器可能对应有多个物理寄存器。在指令中指定特定的标志位来区分这些物理寄存器。有些类似于ARM寄存器中,处于不同的处理器模式时,ARM某些寄存器可能不同。
 
CP15 的寄存器列表如表所示:

寄存器编号

基本作用

在 MMU 中的作用

在 PU 中的作用

0

ID 编码(只读)

ID 编码和 cache 类型

 

1

控制位(可读写)

各种控制位

 

2

存储保护和控制

地址转换表基地址

Cachability 的控制位

3

存储保护和控制

域访问控制位

Bufferablity 控制位

4

存储保护和控制

保留

保 留

5

存储保护和控制

内存失效状态

访问权限控制位

6

存储保护和控制

内存失效地址

保护区域控制

7

高速缓存和写缓存

高速缓存和写缓存控制

 

8

存储保护和控制

TLB 控制

保 留

9

高速缓存和写缓存

高速缓存锁定

 

10

存储保护和控制

TLB 锁定

保 留

11

保留

 

 

12

保留

 

 

13

进程标识符

进程标识符

 

14

保留

 

 

15

因不同设计而异

因不同设计而异

因不同设计而异

 
注:以下寄存器中相应位的含义在不同的处理器中可能不同,但总体功能不变
 
(一)CP15 的寄存器 C0
CP15 中寄存器 C0 对应两个标识符寄存器,由访问 CP15 中的寄存器指令中的  指定要访问哪个具体物理寄存器,  与两个标识符寄存器的对应关系如下所示:

opcode2 编码

对应的标识符号寄存器

0b000

主标识符寄存器

0b001

cache类型标识符寄存器

其 他

保留

 
(1)主标识符寄存器
指令如下:
MRC    P15,0,R0,C0,C0,0       #将主标示符寄存器的内容读到AMR寄存器R0中
主标示符的编码格式对于不同的ARM处理器版本有所不同。

对于AMR7之后的处理器,其主标示符编码格式如下 : 

30                24

23                20

19                          16

15                 4

                      0

由生产商确定

产品子编号

ARM 体系版本号

产品主编号

处理器版本号

各部分的编码详细含义如下表所示:

                   说     

位 [3: 0]

生产商定义的处理器版本号

位 [15: 4]

生产商定义的产品主编号

其中最高 位即位 [15:12] 可能的取值为0x0~0x7 但不能是 0x0 或 0x7

因为:

0x0表示 ARM7之前的处理器

0x7 表示ARM7处理器

位 [19: 16]

ARM 体系的版本号,可能的取值如 下:

0x1   ARM 体系版本 4

0x2   ARM 体系版本 4T

0x3   ARM 体系版本 5

0x4   ARM 体系版本 5T

0x5   ARM 体系版本 5TE

其他   由 ARM 公司保留将来使用

位 [23: 20]

生产商定义的产品子编号。当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不 同的高速缓存的大小等

位 [31: 24]

生产厂商的编号,现在已经定义的有以下值:

0x41  =A  ARM 公司

0x44  =D  Digital Equipment 公司

0x69  =I   intel 公司

 
(2)cache类型标识符寄存器
指令如下:
MRC    P15,0,R0,C0,C0,1       #将cache类型标识符寄存器的内容读到AMR寄存器R0中
 
ARM 处理器中 cache 类型标识符寄存器的编码格式如下所示:

31      29

28           25

24

23                                12

11                                0

  000

  属性字段

 S

   数据 cache 相关属性

   指令cache 相关属性

各部分的编码详细含义如下表所示:

含义

位 [28: 25]

主要用于定义对于写回类型的cache的一些属性

位 [24]

定义系统中的数据 cache 和指令 cache 是分开的还是统一的:

  系统的数据 cache 和指令 cache 是统一的;

   系统的数据 cache 和指令 cache 是分开的

位 [23: 12]

定义数据 cache 的相关属性

如果位 [24] 为 ,本字段定义整个cache 的属性

位 [31: 24]

定义指令 cache 的相关属性

如果位 [24] 为 ,本字段定义整个cache 的属性

  •  控制字段位 [28 : 25] 的含义
主要用于定义对于写回类型的cache的一些属性

cache 类型标识符寄存器的控制字段位 [28 : 25]:

编     

cache 类型

cache 内容清除方法

cache 内容锁定方法

0b0000

写通类型

不需要内容清除

不支持内容锁定

0b0001

写回类型

数据块读取

不支持内容锁定

0b0010

写回类型

由寄存器 C7 定义

不支持内容锁定

0b0110

写回类型

由寄存器 C7 定义

支持格式 A

0b0111

写回类型

由寄存器 C7 定义

支持格式 B

  • 控制字段位 [23 : 12] 及控制字段位 [11 : 0] 含义
[23:12]用于定义数据cache的属性,[11: 0]用于定义指令cache的属性
编码格式如下:

11      9

              6

                      3

2

        0

000

cache 容量

cache 相联特性

M

块大小

其中bits[1:0]含义如下:

编     

cache 块大小

0b00

个字( 字节)

0b01

个字( 16 字节)

0b10

个字( 32 字节)

0b11

16 个字( 64 字节)

其中bits[5:3]含义如下:

编     

M=0 时含义

M=1 时含义

0b000

路相联(直接映射)

没有 cache

0b001

路 相联

路 相联

0b010

路 相联

路 相联

0b011

路 相联

12 路 相联

0b100

16 路 相联

24 路 相联

0b101

32 路 相联

48 路 相联

0b110

64 路 相联

96 路 相联

0b111

128 路相联

192 路相联

其中bits[8:6]含义如下:

编     

M=0 时含义

M=1时含义

0b000

0.5KB

0.75 KB

0b001

KB

1.5 KB

0b010

KB

KB

0b011

KB

KB

0b100

KB

12 KB

0b101

16 KB

24 KB

0b110

32 KB

48 KB

0b111

64 KB

96 KB


 
(二)CP15 的寄存器 C1
CP15中的寄存器C1是一个控制寄存器,它包括以下控制功能:
  • 禁止或使能MMU以及其他与存储系统相关的功能
  • 配置存储系统以及ARM处理器中的相关部分的工作
指令如下:
mrc p15, 0, r0, c1, c0{, 0}     ;将 CP15 的寄存器 C1 的值读到 r0 
mcr p15, 0, r0, c1, c0{, 0}     ;将 r0 的值写到 CP15 的寄存器 C1 
 
CP15 中的寄存器 C1 的编码格式及含义说明如下:

C1中的控制位

含义

M(bit[0])

:禁止 MMU 或者 PU 

:使能 MMU 或者 PU

如果系统中没有MMU及PU,读取时该位返回0,写入时忽略该位

A(bit[1])

:禁止地址对齐检查

:使能地址对齐检查

C(bit[2])

当数据cache和指令cache分开时,本控制位禁止/使能数据cache。当数据cache和指令cache统一时,该控制位禁止/使能整个cache。

:禁止数据 整个 cache 

:使能数据 整个 cache

如果系统中不含cache,读取时该位返回0.写入时忽略

当系统中不能禁止cache 时,读取时返回1.写入时忽略

W(bit[3])

:禁止写缓冲

:使能写缓冲

如果系统中不含写缓冲时,读取时该位返回0.写入时忽略

当系统中不能禁止写缓冲时,读取时返回1.写入时忽略

P(bit[4])

对于向前兼容26位地址的ARM处理器,本控制位控制PROG32控制信号

:异常中断处理程序进入 32 位地址模式

:异常中断处理程序进入26 位地址模式

如果本系统中不支持向前兼容26位地址,读取该位时返回1,写入时忽略

D(bit[5])

对于向前兼容26位地址的ARM处理器,本控制位控制DATA32控制信号

:禁止 26 位地址异常检查

:使能 26 位地址异常检查

如果本系统中不支持向前兼容26位地址,读取该位时返回1,写入时忽略

L(bit[6])

对于ARMv3及以前的版本,本控制位可以控制处理器的中止模型

:选择早期中止模型

:选择后期中止模型

B(bit[7])

对于存储系统同时支持big-endian和little-endian的ARM系统,本控制位配置系统的存储模式

: little endian  

: big endian

对于只支持little-endian的系统,读取时该位返回0,写入时忽略

对于只支持big-endian的系统,读取时该位返回1,写入时忽略

S(bit[8])

在基于 MMU 的存储系统中,本位用作系统保护

R(bit[9])

在基于 MMU 的存储系统中,本位用作 ROM 保护

F(bit[10])

由生产商定义

Z(bit[11])

对于支持跳转预测的ARM系统,本控制位禁止/使能跳转预测功能

:禁止跳转预测功能 

:使能跳转预测功能

对于不支持跳转预测的ARM系统,读取该位时返回0,写入时忽略

I(bit[12])

当数据cache和指令cache是分开的,本控制位禁止/使能指令cache

:禁止指令 cache  

:使能指令 cache

如果系统中使用统一的指令cache和数据cache或者系统中不含cache,读取该位时返回0,写入时忽略。当系统中的指令cache不能禁止时,读取时该位返回1,写入时忽略

V(bit[13])

对于支持高端异常向量表的系统,本控制位控制向量表的位置

:选择低端异常中断向量 0x0~0x1c 

:选择高端异常中断向量0xffff0000~ 0xffff001c

对于不支持高端异常向量表的系统,读取时该位返回0,写入时忽略

PR(bit[14])

如果系统中的cache的淘汰算法可以选择的话,本控制位选择淘汰算法

:常规的 cache 淘汰算法,如随机淘汰 

:预测性淘汰算法,如round-robin 淘汰算法

如果系统中cache的淘汰算法不可选择,写入该位时忽略。读取该位时,根据其淘汰算法是否可以比较简单地预测最坏情况返回0或者1

L4(bit[15])

对于ARM版本5及以上的版本,本控制位可以提供兼容以前的ARM版本的功能

:保持 ARMv5 以上版本的正常功能

:将 ARMv5 以上版本与以前版本处理器兼容,不根据跳转地址的 bit[0] 进行 ARM 指令和 Thumb 状态切换: bit[0] 等于 表示 ARM 指令,等于 表示 Thumb 指令

Bits[31:16])

这些位保留将来使用,应为UNP/SBZP

  

(三)CP15 的寄存器 C2

C2寄存器的别名:Translation table base (TTB) register

 C2寄存器用来保存页表的基地址,即一级映射描述符表的基地址。其编码格如下所示:

31                                                                                                     0

                                    一级映射描述符表的基地址(物理地址)

 
(四)CP15 的寄存器 C3

CP15 中的寄存器 C3 定义了 ARM 处理器的 16 个域的访问权限。

31                                                                                                     0

D15

D14

D13

D12

D11

D10

D9

D8

D7

D6

D5

D4

D3

D2

D1

D0

 
在 CP15的C3寄存器中,划分了 16个域,每个区域由两位构成,这两位说明了当前内存的检查权限:
00:当前级别下,该内存区域不允许被访问,任何的访问都会引起一个domain fault,这时 AP位无效
01:当前级别下,该内存区域的访问必须配合该内存区域的段描述符中AP位进行权检查
10:保留状态(我们最好不要填写该值,以免引起不能确定的问题)
11:当前级别下,对该内存区域的访问都不进行权限检查。 这时 AP位无效 
 
所以只有当相应域的编码为 01 时,才会根据  AP位 和协处理器CP15中的C1寄存器的R,S位进行权限检查

 

(五)CP15 的寄存器 C5
CP15 中的寄存器 C5 是失效状态寄存器,分为指令状态失效和数据状态失效。
MRC p15, 0, , c5, c0, 0 访问数据失效状态寄存器 
MRC p15, 0, , c5, c0, 1  访问指令状态失效寄存器 
编码格式如下所示: 

31            9

8

   4

     0

UNP/SBZP

0

域标识

状态标识

 其中,域标识bit[7:4]表示存放引起存储访问失效的存储访问所属的域。
 状态标识 bit[3:0] 表示放引起存储访问失效的存储访问类型,该字段含义如下表所示(优先级由上到下递减)。 

引起访问失效的原因

状态标识

域标识

C6

终端异常( Terminal Exception 

0b0010

无 效

生 产商定义

中断向量访问异常( Vector Exception)

0b0000

无 效

有 效

地 址对齐

0b00x1

无 效

有 效

一 级页表访问失效

0b1100

无 效

有 效

二 级页表访问失效

0b1110

有 效

有 效

基 于段的地址变换失效

0b0101

无 效

有 效

基 于页的地址变换失效

0b0111

有 效

有 效

基 于段的存储访问中域控制失效

0b1001

有 效

有 效

基 于页的存储访问中域控制失效

0b1101

有 效

有 效

基 于段的存储访问中访问权限控制失效

0b1111

有 效

有 效

基 于页的存储访问中访问权限控制失效

0b0100

有 效

有 效

基于段的 cache 预 取时外部存储系统失效

0b0110

有 效

有 效

基于页的 cache 预 取时外部存储系统失效

0b1000

有 效

有 效

基于段的非 cache 预 取时外部存储系统失效

0b1010

有 效

有 效

 
(六)CP15的寄存器C6

CP15 中的寄存器 C6 是失效地址寄存器,其中保存了引起存储访问失效的地址,分为数据失效地址寄存器和指令失效地址寄存器

MRC p15, 0, , c6, c0, 0  访问数据失效地址寄存器 
MRC p15, 0, , c6, c0, 2 访问指令失效地址寄存器 

编码格式如下所示:

31                                                                                                      0

                        失效地址(虚拟地址)

 
(七)CP15的寄存器C7
CP15 的 C7 寄存器用来控制 cache 和写缓存,它是一个只写寄存器,读操作将产生不可预知的后果。
访问 CP15 的 C7 寄存器的指令格式如下所示:
mcr p15, 0, , , crm,                ; 、  和  的不同取值组合,实现不同功能
 
表中的数据是指Rd中的数据:
 
(八)CP15的寄存器C8

    系统协处理器CP15的寄存器C8就是清除TLB内容的相关操作。它是一个只写的寄存器。

        MCR    p15,0,Rd,c8,CRm,opcode_2

        Rd中为要写入C8寄存器的内容,CRm和opcode_2的不同组合决定指令执行的不同操作。

指令

Rd

含义

MCR p15, 0, Rd, c8, c5, 0 

0

使无效整个指令TLB

MCR p15, 0, Rd, c8, c5, 1 

虚拟地址

使无效指令TLB中的单个地址变换条目

MCR p15, 0, Rd, c8, c6, 0 

0

使无效整个数据TLB

MCR p15, 0, Rd, c8, c6, 1 

虚拟地址

使无效数据TLB中的单个地址变换条目

MCR p15, 0, , c8, c7, 0 

0

使无效整个数据和指令TLB

MCR p15, 0, , c8, c7, 1 

虚拟地址

使无效数据和指令TLB中的单个地址变换条目

 
 
(九)CP15的寄存器C12
CP15寄存器C12用来设置异常向量基地址,其编码格式如下所示:
MCR p15, 0, , c12, c0, 0 ;Rd中存放要修改的异常向量基地址 

31              5

        0

异常向量基地址

Reserve

注:只有ARM11和cortex-a 可以任意修改异常向量基地址。arm7,ARM9,ARM10只可以在0地址或0xffff0000中 
 
(十)CP15的寄存器C13

CP15中的寄存器C13用于快速上下文切换。其编码格式如下所示。

访问寄存器C13的指令格式如下所示。

MCR           p15, 0,,,c0,0

MRC           P15, 0,,,c0,0

其中,在读操作时,结果中位[31::25]返回PID,其他位 的数值是不可以预知的。写操作将设置PID的值。

        当PID的值为0时,MVA = VA  |  (0(PID)<<25),MVA=VA,相当于禁止了FCSE。系统复位后PID即为0.

        当PID的值不为0时,相当于使能了FCSE。


关键字:ARM  协处理器  CP15寄存器 引用地址:ARM协处理器CP15寄存器详解

上一篇:ARM汇编指令——TST和BNE、BEQ解析
下一篇:ARM指令中如何判断一个立即数是有效立即数

推荐阅读最新更新时间:2024-03-16 14:48

基于ARM9:Thumb指令系统和ARM指令系统
1.首先说说是什么? 是指令集。 是ARM体系结构为了兼容数据总线宽度为16位的应用系统而产生的; 是ARM指令集的自指令集,每个Thumb指令在ARM指令集中都有对应的指令; 2.分析Thumb指令和ARM指令时间效率和空间效率关系如下: –Thumd代码所需的存储空间约为ARM代码的60%~70% –Thumb代码使用的指令数要比ARM代码多约30%~40%; 使用32位存储器,ARM代码比Thumb代码快约40% 使用16位存储器,Thumb代码比ARM指令快约40%~50% 与ARM代码相比较,使用Thumb代码,存储器的功耗会降低约30% 在程序程序设计时,若对系统性能要求比较高,则要使用ARM代码;若多成本和功耗要求较
[单片机]
arm BOOT阅读笔记
[单片机]
美国开建arm超级计算机,单节点性能是手机芯片100倍
美国也没忘了尝试新的超算架构,能源部下属的桑迪亚国家实验室宣布建造arm处理器的超算Astra,浮点性能2.3PFLOPS,比TOP500靠前的超算性能差很远,但arm阵营来说意义重大。 一周前美国能源部下属的橡树岭国家实验室宣布了Summit超算,20亿亿次的性能力压中国神威·太湖之光,预计会成为新的TOP500冠军。为了提升性能,Summit超算使用的是IBM Power 9处理器及NVIDIA Tesla V100加速卡,都是高性能芯片。而在另一方面,美国也没忘了尝试新的超算架构,能源部下属的桑迪亚国家实验室宣布建造arm处理器的超算Astra,浮点性能2.3PFLOPS,比TOP500靠前的超算性能差很远,但arm阵营来说
[网络通信]
从硬件和软件的角度分析ARM和单片机的不同
对于新手来说,在入门阶段针对ARM与单片机进行区分是非常困难的。两者在一些概念和用途上高度接近,这就使得刚入门的开发者无法十分准确的对两者进行区分。本文将从软件和硬件两个大方面来对ARM和单片机的不同进行区分。 软件 这应该是最大的区别了,引入的操作系统为两者进行了区别划分。 1)方便。主要体现在后期的开发,即在操作系统上直接开发应用程序。不像单片机一样一切都要重新写。前期的操作系统移植工作,还是要专业人士来做。 2)安全。这是LINUX的一个特点。LINUX的内核与用户空间的内存管理分开,不会因为用户的单个程序错误而引起系统死掉。这在单片机的软件开发中没见到过。 3)高效。引入进程的管理调度系统,使系统运行更加高效。在传统的
[单片机]
ARM7和ARM9流水对PC的影响
“PC=PC+1”,这不完全正确,PC自增一的情况指出现在无流水(non-pipeline)的情况下,这个时候取指,译码,执指都是顺序执行的。 而在有流水的情况下就比较复杂了这里用arm7和arm9为例。 arm7是3级流水。arm9是5级流水。PC在执行过程中是每次加8的。原因如下: 为便于说明问题,我们假设当前正在执行0地址处的指令,从下面的两幅图中可以清楚地得到结论。 ARM7是三级流水线,AMR7的三级流水线如下: ARM9是五级流水线,ARM9的五级流水线如下: 可见,ARM9和ARM7中都是PC=当前执行指令地址+8的根本的原因是,两者的流水线设计中,指令的执行阶段都是处于流水线的第
[单片机]
ARM处理器寄存器
1.1.1 ARM处理器不同模式下寄存器 CPU的模式不同,在其对应模式下可以使用的寄存器也不相同,如表3-2所示: 表3-2 ARM处理器模式下寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 终止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7
[单片机]
赛灵思助力安森美智能功率模块平台更快更高效
本文编译自Xilinx官方博客 安森美的智能功率模块(IPM)和集成功率模块是为有效控制电机而制造的。它们适用于高电压和高工作温度,并减少了驱动器的空间。更高的开关频率有助于提高效率,超越了传统电机控制解决方案的能力。 这就是为什么在软件中具有算法的MCU无法优化新技术的原因。在专用逻辑中使用高级算法的快速切换可控制电动机的旋转磁场,从而最大程度地提高效率。通过Xilinx(赛灵思) Zynq-7000 SoC中的电机控制功能,该系统可通过设计获得最佳性能。无论Xilinx SoC内部正在运行什么,控制环的速度始终是可预测的。处理系统中的Arm内核使该设备变得智能化,可用于工业物联网(IIoT)。 电机的能效起着至关重
[嵌入式]
赛灵思助力安森美智能功率模块平台更快更高效
基于ARM7处理器LPC2119的USB-CAN转换器设计
引言 控制器局域网(controller area network,CAN)是20世纪80年代德国BOSCH公司为现代汽车应用而推出的一种多主机局部网,由于CAN总线具有可靠性高、功能完善、成本合理、实时性等优点,CAN总线早已不再局限于汽车行业,而被广泛应用于各个自动化控制系统中,例如汽车电子、工业控制、智能大厦、安防监控、环境控制等。目前CAN总线是国际上应用最广泛的现场总线之一。通用串行总线(universalserial bus,USB)作为一种协议规范,是以Intel为首的7家计算机及通信产业厂商公司于1994年11月共同提出,其除具有使用方便(即插即用)、功耗低、数据传输率高等优点外,还具有软硬件支持广泛、功耗低、
[单片机]
基于<font color='red'>ARM</font>7处理器LPC2119的USB-CAN转换器设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved