EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
第五章 ARM存储系统 5.1 arm存储系统概述 mmu 使用内存映射机制实现虚拟空间到物理空间的映射。通常嵌入式系统的程序放在ROM/FLASH中,这样系统断电后程序能够保存。但是 通常ROM/FLASH与SDRAM相比,速度要慢很多,而且嵌入式系统中通常把异常中断向量表放在RAM,利用内存映射机制可以解决这 种问题。在系统加电时,将ROM/FLASH映射为地址0,这样可以进行一些初始化处理。当这些程序处理完成后将SDRAM映射为地址0 并把系统程序加载到SDRAM中运行。 5.2 arm中用于存储管理的协处理器CP15 arm存储系统通常是通过系统控制协处理器CP15完成的。 CP15 CP15可以包含16个32位的寄存器,其编号为0到15.实际上某些编号的寄存器可能对应多个物理寄存器,在指令中指定特定的标志位来区分这些物理寄存器。以下将详细介绍CP15中的寄存器: 1、寄存器的访问类型(只读/只写/可读可写) 2、各种指令操作对于寄存器的作用 3、寄存器是否对应多个物理寄存器 4、寄存器的具体作用 5.2.1 CP15中的寄存器 访问CP15寄存器的指令
) J1 U: G) F6 ]0 U2 l访问CP15寄存器指令的编码格式及语法说明如下: 31 28 | 27 24 | 23 21 | 20 | 19 16 | 15 12 | 11 8 | 7 5 | 4 | 3 0 | cond | 1 1 1 0 | opcode_1 | L | cr n | rd | 1 1 1 1 | opcode_2 | 1 | crm | * v, E) O4 m; {: M8 ^% H4 X9 l
0 \. o( @6 i% {8 p# N5 r3 U
说明:
! V9 M( H% ]& @<opcode_1>:协处理器行为操作码,对于CP15来说,<opcode_1>永远为0b000,否则结果未知。- k A- e" a0 k8 R6 F# f
<rd>:不能是r15/pc,否则,结果未知。* \: z+ _/ S" C
<crn>:作为目标寄存器的协处理器寄存器,编号为C0~C15。
$ V8 u( }. d2 K9 o9 t2 l- t<crm>:附加的目标寄存器或源操作数寄存器,如果不需要设置附加信息,将crm设置为c0,否则结果未知。
" [9 q. Y& d3 P) s/ P* v$ d& W* y( I# }<opcode_2>:提供附加信息比如寄存器的版本号或者访问类型,用于区分同一个编号的不同物理寄存器,可以省略<opcode_2>或者将其设置为0,否则结果未知。 指令 | 说明 | 语法格式 | mcr | 将ARM处理器的寄存器中的数据写到CP15中的寄存器中 | mcr{<cond>} p15, <opcode_1>, <rd>, <crn>, <crm>, {<opcode_2>} | mrc | 将CP15中的寄存器中的数据读到ARM处理器的寄存器中 | mcr{<cond>} p15, <opcode_1>, <rd>, <crn>, <crm>, {<opcode_2>} | # r$ j) v$ w7 Z5 `( F
3 H I- y; F4 x" _- L
4.1.2CP15寄存器介绍0 ^8 K- l: z" F8 L3 `: f3 i* s
CP15的寄存器列表如表4-1所示。. w+ Q l( B) U
表4-1 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 | 因不同设计而异 | 因不同设计而异 | 因不同设计而异 |
: S, G. K% Q0 F! _7 A c
3 l: n' V- t3 l3 g& E: b·CP15的寄存器C0
5 T8 h9 o) @# w, qCP15中寄存器C0对应两个标识符寄存器,由访问CP15中的寄存器指令中的<opcode_2>指定要访问哪个具体物理寄存器,<opcode_2>与两个标识符寄存器的对应关系如下所示:
4 c4 H9 j, ]; }
- |1 H q4 n. B& K! b opcode_2编码 | 对应的标识符号寄存器 | 0b000 | 主标识符寄存器 | 0b001 | cache类型标识符寄存器 | 其他 | 保留 | ( p4 d, b3 X& s* F7 |/ X& R
7 @, \+ n" V6 |+ J
1)主标识符寄存器
' w+ q/ x: s F5 n访问主标识符寄存器的指令格式如下所示:/ ^2 [# Q3 E8 S, [2 g3 D4 |3 C( M
mrc p15, 0, r0, c0, c0, 0 ;将主标识符寄存器C0,0的值读到r0中6 ?8 Q- [$ k, z& e$ O) j
ARM不同版本体系处理器中主标识符寄存器的编码格式说明如下。, o$ C' s9 b, f$ h% J* o+ b
ARM7之后处理器的主标识符寄存器编码格式如下所示: 31 24 23 20 19 16 15 4 3 0 | 由生产商确定 | 产品子编号 | ARM体系版本号 | 产品主编号 | 处理器版本号 | " ]- l s4 g% p, E9 L
$ R& v" g( f* d
位 | 说明 | 位[3: 0] | 生产商定义的处理器版本号 | 位[15: 4] | 生产商定义的产品主编号,其中最高4位即位[15:12]可能的取值为0~7但不能是0或7 | 位[19: 16] | ARM体系的版本号,可能的取值如下:
' i) [/ m; y1 `1 |! r& ^, W0x1 ARM体系版本4
' y* D% h: I: h( `+ i" x5 q0x2 ARM体系版本4T2 c9 Y! c1 K. F, N
0x3 ARM体系版本55 {8 s4 z! {' S$ X. b! E
0x4 ARM体系版本5T
- c3 K' \) R4 ?! g0x5 ARM体系版本5TE& ^/ ] |5 ]* }* I. Y9 K
其他由ARM公司保留将来使用 | 位[23: 20] | 生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等 | 位[31: 24] | 生产厂商的编号,现在已经定义的有以下值:
( i2 y, y6 q- ^) o- A, o0x41 =A ARM公司4 C0 g; Y" C& Z* \0 ]4 u
0x44 =D Digital Equipment公司4 x' K% @ K; o' o+ x: Z
0x69 =I intel公司 |
. s$ J) i6 |3 `7 }0 _3 R$ V# z& e g* L; j
ARM7处理器的主标识符寄存器编码格式如下所示: 31 24 23 22 16 15 4 3 0 | 由生产商确定 | A | 产品子编号 | 产品主编号 | 处理器版本号 | ( Y) ?/ V. P+ O# i
7 |$ q Y$ i- U" B
位 | 说明 | 位[3: 0] | 生产商定义的处理器版本号 | 位[15: 4] | 生产商定义的产品主编号,其中最高4位即位[15:12]的值为0x7 | 位[22: 16] | 生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等 | 6 \5 f/ K j" a# j0 `0 Z
J! w0 ?& s. |$ L
续表 位 | 说明 | 位[23] | ARM7支持下面两种ARM体系的版本号:
! U8 s: H- q7 Y% K2 a0x0 ARM体系版本3
, f$ ^% g7 j' T p0x1 ARM体系版本4T | 位[31: 24] | 生产厂商的编号,现在已经定义的有以下值:
; s$ U+ ~, c7 w% p7 J0x41 =A ARM公司
" Y* W4 H* z& E( k0x44 =D Digital Equipment公司1 t4 v6 D) j/ q+ f( f
0x69 =I Intel公司 |
% N+ c/ @0 E4 b6 x2 J) `2 m' T y/ z i0 s: I. y9 p
ARM7之前处理器的主标识符寄存器编码格式如下所示: 31 24 23 22 16 15 4 3 0 | 由生产商确定 | A | 产品子编号 | 产品主编号 | 处理器版本号 |
+ h' _4 Q+ b2 Q0 w8 r# r, z- C4 f* ^4 b9 C
位 | 说明 | 位[3: 0] | 生产商定义的处理器版本号 | 位[15: 4] | 生产商定义的产品主编号,其中最高4位即为[15:12]的值为0x7 | 位[22: 16] | 生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等 | 位[23] | ARM7支持下面两种ARM体系的版本号:4 E7 K* M X6 R2 W
0x0 ARM体系版本3
6 r! X* s3 O: U- c3 i: |' |0x1 ARM体系版本4T | 位[31: 24] | 生产厂商的编号,现在已经定义的有以下值:
: Q# V* W. ^7 I2 g0x41 =A ARM公司! F4 x& W; e7 o! U/ B5 _" N$ v4 }
0x44 =D Digital Equipment公司: G/ a2 ^" R8 f3 K3 j
0x69 =I intel公司 |
% w7 @* Q4 K! b0 e% }8 z; b- I
) T: d6 ~& W! Q( _7 a* V, B. y2)cache类型标识符寄存器
9 U1 M+ {5 O( ]) q8 B访问cache类型标识符寄存器的指令格式如下所示:5 U7 Z% J6 k9 P; `4 P3 ~
mrc p15, 0, r0, c0, c0, 1 ;将cache类型标识符寄存器C0,1的值读到r0中
) Q7 F( K/ q3 h+ U% \ARM处理器中cache类型标识符寄存器的编码格式如下所示: 31 29 28 25 24 23 12 11 0 | 0 0 0 | 属性字段 | S | 数据cache相关属性 | 指令cache相关属性 | * l3 ^8 Q2 a2 |/ {. }4 P7 ?
, S. g' K) @9 F& H! \" e. ?; |
位 | 说明 | 位[28: 25] | 指定控制字段位[24: 0]指定的属性之外的cache的其他属性,详见表4-2 | 位[24] | 定义系统中的数据cache和指令cache是分开的还是统一的:* l2 q9 s" K& B+ o
0 系统的数据cache和指令cache是统一的;5 Y' S8 O9 y2 E. D
1 系统的数据cache和指令cache是分开的 | 位[23: 12] | 定义数据cache的相关属性,如果位[24]为0,本字段定义整个cache的属性 | 位[31: 24] | 定义指令cache的相关属性,如果位[24]为0,本字段定义整个cache的属性 | $ v0 y s- L( V# J" i8 X9 |
f3 \0 ^( T) P8 ^8 E' d
其中控制字段位[28:25]的含义说明如下:
* }3 x/ }+ a( P8 D表4-2 cache类型标识符寄存器的控制字段位[28:25] 编码 | cache类型 | cache内容清除方法 | cache内容锁定方法 | 0b0000 | 写通类型 | 不需要内容清除 | 不支持内容锁定 | 0b0001 | 写回类型 | 数据块读取 | 不支持内容锁定 | 0b0010 | 写回类型 | 由寄存器C7定义 | 不支持内容锁定 | 0b0110 | 写回类型 | 由寄存器C7定义 | 支持格式A | 0b0111 | 写回类型 | 由寄存器C7定义 | 支持格式B |
% d7 Z1 u, _, y$ n6 _9 ]. F9 ?4 D7 h$ \2 E. E
控制字段位[23:12]和控制字段位[11:0]的编码格式相同,含义如下所示: 11 9 8 6 5 3 2 1 0 | 0 0 0 | cache容量 | cache相联特性 | M | 块大小 | : X# ?, P+ k; O e
7 V" }5 }, q# e" b! Z P
cache容量字段bits[8: 6]的含义如下所示: 编 码 | M=0时含义(单位KB) | M=1时含义(单位KB) | 0b000 | 0.5 | 0.75 | 0b001 | 1 | 1.5 | 0b010 | 2 | 3 | 0b011 | 4 | 6 | 0b100 | 8 | 12 | 0b101 | 16 | 24 | 0b110 | 32 | 48 | 0b111 | 64 | 96 |
1 \& }, w9 r, H0 D+ g# M8 y' U$ L# `1 Y; ?8 T! Y
cache相联特性字段bits[5: 3]的含义如下所示: 编码 | M=0时含义 | M=1时含义 | 0b000 | 1路相联(直接映射) | 没有cache | 0b001 | 2路相联 | 3路相联 | 0b010 | 4路相联 | 6路相联 | 0b011 | 8路相联 | 12路相联 | 0b100 | 16路相联 | 24路相联 | 0b101 | 32路相联 | 48路相联 | 0b110 | 64路相联 | 96路相联 | 0b111 | 128路相联 | 192路相联 | " n$ r' g* B2 r- t; X5 w( ^
4 L) R/ a! ^' E1 o7 [0 V" T8 { x. ocache块大小字段bits[1: 0]的含义如下所示: 编码 | cache块大小 | 0b00 | 2个字(8字节) | 0b01 | 4个字(16字节) | 0b10 | 8个字(32字节) | 0b11 | 16个字(64字节) | # d$ Q/ {* D: {3 Q; Y) t
+ E/ w% M2 z5 n, z! \* |) P( n·CP15的寄存器C1: r+ F/ J" X& D0 _8 ?! S
访问主标识符寄存器的指令格式如下所示:" W+ a. Q" X1 |! Y
mrc p15, 0, r0, c1, c0{, 0} ;将CP15的寄存器C1的值读到r0中
- p# f* i2 P& K8 }0 Ymcr p15, 0, r0, c1, c0{, 0} ;将r0的值写到CP15的寄存器C1中2 k6 }- u0 O) [2 |; o
CP15中的寄存器C1的编码格式及含义说明如下: 31 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 附加 | L4 | RR | V | I | Z | F | R | S | B | L | D | P | W | C | A | M |
( ~$ C: A7 K: G8 \( f) D1 Q5 |# [- j, D* Q
位 | 说明 | M | 0:禁止MMU或者PU;1:使能MMU或者PU | A | 0:禁止地址对齐检查;1:使能地址对齐检查 | C | 0:禁止数据/整个cache;1:使能数据/整个cache | W | 0:禁止写缓冲;1:使能写缓冲 | P | 0:异常中断处理程序进入32位地址模式;1:异常中断处理程序进入26位地址模式 | D | 0:禁止26位地址异常检查;1:使能26位地址异常检查 | L | 0:选择早期中止模型;1:选择后期中止模型 | B | 0:little endian;1:big endian | S | 在基于MMU的存储系统中,本位用作系统保护 | R | 在基于MMU的存储系统中,本位用作ROM保护 | F | 0:由生产商定义 | Z | 0:禁止跳转预测功能;1:使能跳转预测指令 | I | 0:禁止指令cache;1:使能指令cache | V | 0:选择低端异常中断向量0x0~0x1c;1:选择高端异常中断向量0xffff0000~ 0xffff001c | RR | 0:常规的cache淘汰算法,如随机淘汰;1:预测性淘汰算法,如round-robin淘汰算法 | L4 | 0:保持ARMv5以上版本的正常功能;1:将ARMv5以上版本与以前版本处理器兼容,不根据跳转地址的bit[0]进行ARM指令和Thumb状态切换:bit[0]等于0表示ARM指令,等于1表示Thumb指令 | 附加: | 7 C1 q7 I, x" [4 D6 A, u& v* N" O# ~
& J1 B+ X/ P" b·CP15的寄存器C2% u8 a* w* A {3 @" }1 j
CP15中的寄存器C2保存的是页表的基地址,即一级映射描述符表的基地址。其编码格如下所示: % ?& b2 T9 L+ @9 K
4 |' c: W* H) E' {: }
·CP15的寄存器C3) ^( t& H" j4 x) w( c
CP15中的寄存器C3定义了ARM处理器的16个域的访问权限。 31 0 | D15 | D14 | D13 | D12 | D11 | D10 | D9 | D8 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | $ Y- r+ R/ X) m
: ?/ U; ?( l/ U4 Q$ w5 b. E·CP15的寄存器C5' V0 ~9 A- q$ a9 N
CP15中的寄存器C5是失效状态寄存器,编码格式如下所示: 31 9 8 7 4 3 0 | UNP/SBZP | 0 | 域标识 | 状态标识 |
! A( J% V$ w$ \, R. c @' ~$ i9 O ~# q& u6 k, d8 z$ M S
其中,域标识bit[7:4]表示存放引起存储访问失效的存储访问所属的域。$ V& Y* ~6 q+ e: s
状态标识bit[3:0]表示放引起存储访问失效的存储访问类型,该字段含义如表4-3所示(优先级由上到下递减)。
$ e/ N. f; u$ ^, p" N表4-3 状态标识字段含义 引起访问失效的原因 | 状态标识 | 域标识 | C6 | 终端异常(Terminal Exception) | 0b0010 | 无效 | 生产商定义 | 中断向量访问异常(Vector Exception) | 0b0000 | 无效 | 有效 | 地址对齐 | 0b00x1 | 无效 | 有效 | 一级页表访问失效 | 0b1100 | 无效 | 有效 | 二级页表访问失效 | 0b1110 | 有效 | 有效 | 基于段的地址变换失效 | 0b0101 | 无效 | 有效 | 基于页的地址变换失效 | 0b0111 | 有效 | 有效 | 基于段的存储访问中域控制失效 | 0b1001 | 有效 | 有效 | 基于页的存储访问中域控制失效 | 0b1101 | 有效 | 有效 | 基于段的存储访问中访问权限控制失效 | 0b1111 | 有效 | 有效 | 基于页的存储访问中访问权限控制失效 | 0b0100 | 有效 | 有效 | 基于段的cache预取时外部存储系统失效 | 0b0110 | 有效 | 有效 | 基于页的cache预取时外部存储系统失效 | 0b1000 | 有效 | 有效 | 基于段的非cache预取时外部存储系统失效 | 0b1010 | 有效 | 有效 | 8 |( p0 t, ?! a& p* A9 ^: {5 Q
1 n, u( f% X1 K; K·CP15中的寄存器C6
0 w( f: j# `' J1 w) wCP15中的寄存器C5是失效地址寄存器,编码格式如下所示: ?# g2 }0 J- i$ M$ k G7 c
b. o# |, B6 v. V5 Z4 M·CP15中的寄存器C7
9 i3 {6 H" U( [# _) S$ X( E; LCP15的C7寄存器用来控制cache和写缓存,它是一个只写寄存器,读操作将产生不可预知的后果。
2 z. ]! x# e( A. M* t7 X访问CP15的C7寄存器的指令格式如下所示:
. R* H* D% E6 Q2 Smcr p15, 0, <rd>, <c7>, crm, <opcode_2> ;<rd>、<crm>和<opcode_2>的不同取值组合实现不同功能
' H+ c+ r! u' a9 B7 Q0 {$ K·CP15中的寄存器C8
& C7 A! E+ e2 pCP15的C8寄存器用来控制清除TLB的内容,是只写寄存器,读操作将产生不可预知的后果。
& O) S/ a% M( H/ n! l$ T- z" o. q/ }+ s访问CP15的C8寄存器的指令格式如下所示:: |; v0 c3 G6 f! m
mcr p15, 0, <rd>, <c8>, crm, <opcode_2> ;<rd>、<crm>和<opcode_2>的不同取值组合实现不同功能,见第4.2节) x$ d1 y" r6 c7 v2 g9 E! c0 O/ U. T- z" t
·CP15中的寄存器C9$ k+ k; T3 J6 c" Z! z
CP15的C9寄存器用于控制cache内容锁定。
2 |6 t: `$ p: I( B( l4 H访问CP15的C9寄存器的指令格式如下所示:* ~- `/ ^. i% X# m) g4 G
mcr p15, 0, <rd>, <c9>, c0, <opcode_2>9 C1 b6 R3 r `7 Q7 O1 ]" g
mrc p15, 0, <rd>, <c9>, c0, <opcode_2>! _- I9 ~( G! }2 Y) k
如果系统中包含独立的指令cache和数据cache,那么对应于数据cache和指令cache分别有一个独立的cache内容锁定寄存器,<opcode_2>用来选择其中的某个寄存器:
' I' Q6 W3 _0 u: G: U/ w<opcode_2>=1选择指令cache的内容锁定寄存器;
" f, Z3 ]5 F* M( p0 C<opcode_2>=0选择数据cache的内容锁定寄存器。
% \ O" c3 k2 i& P- tCP15的C9寄存器有A、B两种编码格式。编码格式A如下所示: 31 32-W 31-W 0 | cache组内块序号index | 0 | . [% m: E( r1 o' u, }
; X W/ p5 y3 I& b8 f6 U) _, ^+ x其中index表示当下一次发生cache未命中时,将预取的存储块存入cache中该块对应的组中序号为index的cache块中。此时序号为0~index-1的cache块被锁定,当发生cache替换时,从序号为index到ASSOCIATIVITY的块中选择被替换的块。/ B7 N) \+ e0 E
编码格式B如下所示: 31 30 W W-1 0 | L | 0 | cache组内块序号index | & q1 v0 Z$ }7 P/ U6 R& L6 y( D
% _0 i) t$ R& Z, S3 b
( B- L; E4 v- Y/ ~2 g, I6 S) ^% N$ T; Q) f4 A, t
位 | 说明 | L=0 | 当发生cache未命中时,将预取的存储块存入cache中该块对应的组中序号为index的cache块中 | ! W8 M( b5 l5 ], p+ M) B
; g# ]0 n7 X- \. O续表 位 | 说明 | L=1 | 如果本次写操作之前L=0,并且index值小于本次写入的index,本次写操作执行的结果不可预知;否则,这时被锁定的cache块包括序号为0~index-1的块,当发生cache替换时,从序号为index到ASSOCIATIVITY的块中选择被替换的块 | 4 ^+ u* r- ^" f: q5 ?
/ \0 L1 P2 r, a' W, S·CP15的寄存器C102 H3 ]3 W! j' x' w5 l
CP15的C10寄存器用于控制TLB内容锁定。
5 [( E3 e% U U; z$ G' L: r9 M访问CP15的C10寄存器的指令格式如下所示:( H. B0 m. I: m
mcr p15, 0, <rd>, <c10>, c0, <opcode_2> \6 y8 n* h- |- i
mrc p15, 0, <rd>, <c10>, c0, <opcode_2>
, S9 V ?4 ? j7 E5 f# ?. F, v, `' I如果系统中包含独立的指令TLB和数据TLB,那么对应于数据TLB和指令TLB分别有一个独立的TLB内容锁定寄存器,<opcode_2>用来选择其中的某个寄存器:. m' ]- e5 E* \! i! o
<opcode_2>=1选择指令TLB的内容锁定寄存器;
/ K- `; N: l9 U& r, |- ]<opcode_2>=0选择数据TLB的内容锁定寄存器。3 h' L. H7 W2 A6 |
C10寄存器的编码格式如下: 31 30 32-W 31-W 32-2W 31-2W 1 0 | 可被替换的条目起始地址的base | 下一个将被替换的条目地址victim | 0 | P | / a, Z5 V# ?5 N5 Y0 e6 k
! Y& P9 D: T+ ^# f C- z位 | 说明 | victim | 指定下一次TLB没有命中(所需的地址变换条目没有包含在TLB中)时,从内存页表中读取所需的地址变换条目,并把该地址变换条目保存在TLB中地址victim处 | base | 指定TLB替换时,所使用的地址范围,从(base)到(TLB中条目数-1);字段victim的值应该包含在该范围内 | P | 1:写入TLB的地址变换条目不会受使整个TLB无效操作的影响,一直保持有效;0:写入TLB的地址变换条目将会受到使整个TLB无效操作的影响 |
& L C* f, m7 p5 m. \- T: B+ p8 R( ~$ L8 |+ Q+ m8 P
·CP15的寄存器C13
- q, C/ q. P/ X2 D5 `C13寄存器用于快速上下文切换FCSE。4 c* p- G& n3 \5 x6 o7 q3 ~! i
访问CP15的C13寄存器的指令格式如下所示:
! h. M/ R( t9 m/ i6 h; Y7 Umcr p15, 0, <rd>, <c13>, c0, 0
- O% z [( w# `" i4 u' L! W' Kmrc p15, 0, <rd>, <c13>, c0, 0 T) }# U' J# B& R) U, C
C13寄存器的编码格式如下所示: ) k% q4 m; m5 E+ N
" c5 b4 c, h3 }其中,PID表示当前进程的所在的进程空间块的编号,即当前进程的进程标识符,取值为0~127。$ f' u9 w i2 H0 {
0:MVA(变换后的虚拟地址)= VA(虚拟地址),禁止FCSE(快速上下文切换技术),系统复位后PID=0;# J5 a3 m. @( D2 S* ~' e3 k% l
非0:使能FCSE。 + {0 r" T( n- t* p1 Y/ J. R
|