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寄存器的指令
% X. e* Z& c- E& X. ]6 d. r访问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 |
1 s `& A. x0 E
, R! L! F9 [" H/ S( |+ s8 h说明:+ h! P X# z6 D$ C9 L# `. c
<opcode_1>:协处理器行为操作码,对于CP15来说,<opcode_1>永远为0b000,否则结果未知。3 T+ G( R7 q9 n' A4 v6 y8 ^
<rd>:不能是r15/pc,否则,结果未知。) V e- K# y8 g8 D# c" \
<crn>:作为目标寄存器的协处理器寄存器,编号为C0~C15。
W5 u9 ?0 i; N0 @/ h7 r- [2 c<crm>:附加的目标寄存器或源操作数寄存器,如果不需要设置附加信息,将crm设置为c0,否则结果未知。$ l" n- _! j E1 L4 f; p
<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>} | / Q( F6 o! c1 F9 k, h. _# n
5 N: ^4 s0 l- v6 B, ]5 [7 c; y; c3 {$ ?
4.1.2CP15寄存器介绍
8 t7 y) a& r! d6 t* yCP15的寄存器列表如表4-1所示。
: D4 q8 d9 S, X, _4 ~& Q0 S表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 | 因不同设计而异 | 因不同设计而异 | 因不同设计而异 | d* Z& G: J6 c; O/ q6 n" J, ]8 E
' C0 q- U( X: U3 o7 k' [! e
·CP15的寄存器C0 S4 v4 y& Q2 n) M+ w: g
CP15中寄存器C0对应两个标识符寄存器,由访问CP15中的寄存器指令中的<opcode_2>指定要访问哪个具体物理寄存器,<opcode_2>与两个标识符寄存器的对应关系如下所示:
: K4 f6 v4 B j5 p1 Z6 A! x/ F5 i& f0 e' Q/ c( U0 u0 A% T8 e
opcode_2编码 | 对应的标识符号寄存器 | 0b000 | 主标识符寄存器 | 0b001 | cache类型标识符寄存器 | 其他 | 保留 | " h# H& B0 l8 E& N2 f/ ~' C
8 J4 v3 W0 ]8 v. w1)主标识符寄存器# j9 M4 o' K/ J+ O- y0 e3 R) L
访问主标识符寄存器的指令格式如下所示:1 U* E7 T. q) N' E* n+ B* S
mrc p15, 0, r0, c0, c0, 0 ;将主标识符寄存器C0,0的值读到r0中
3 h& T& S' @7 @, u. M- @; N1 kARM不同版本体系处理器中主标识符寄存器的编码格式说明如下。. p6 [& ?$ ^8 a& [9 ^4 t: z) s* E
ARM7之后处理器的主标识符寄存器编码格式如下所示: 31 24 23 20 19 16 15 4 3 0 | 由生产商确定 | 产品子编号 | ARM体系版本号 | 产品主编号 | 处理器版本号 | 4 v* E* B8 i" V- I6 S% T& F
- A4 C1 w! D* y: D* ^
位 | 说明 | 位[3: 0] | 生产商定义的处理器版本号 | 位[15: 4] | 生产商定义的产品主编号,其中最高4位即位[15:12]可能的取值为0~7但不能是0或7 | 位[19: 16] | ARM体系的版本号,可能的取值如下:
+ |! K# @! i% R, q- t( D0x1 ARM体系版本43 U0 b! `9 b$ u/ F/ H* C' T
0x2 ARM体系版本4T
$ [# {+ V& W* C/ |6 q0x3 ARM体系版本5
c$ @' i5 H9 t. Y0 W1 n0x4 ARM体系版本5T t, a/ R$ w5 \9 w( A
0x5 ARM体系版本5TE
9 V4 @" [" W3 _1 X' m0 n# a) a0 S其他由ARM公司保留将来使用 | 位[23: 20] | 生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等 | 位[31: 24] | 生产厂商的编号,现在已经定义的有以下值:' J3 |: X" _# ~6 r3 c
0x41 =A ARM公司
' r. F7 s) t1 e9 T0x44 =D Digital Equipment公司
0 Z, J C& b( [- E. M: ~0x69 =I intel公司 | 2 c/ z y( S7 W1 {6 S. n
2 w0 E% M" Z3 W7 \5 u
ARM7处理器的主标识符寄存器编码格式如下所示: 31 24 23 22 16 15 4 3 0 | 由生产商确定 | A | 产品子编号 | 产品主编号 | 处理器版本号 | ( e9 _$ o$ H3 x; h0 C, q
6 t# `% L& [. n7 }2 n1 N& j位 | 说明 | 位[3: 0] | 生产商定义的处理器版本号 | 位[15: 4] | 生产商定义的产品主编号,其中最高4位即位[15:12]的值为0x7 | 位[22: 16] | 生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等 | : m2 ~! Z# L: D* l" v6 U
- {: c! F0 P* l c# t4 G0 o; T续表 位 | 说明 | 位[23] | ARM7支持下面两种ARM体系的版本号:. h8 m4 c. E7 \( D& Q' D8 S
0x0 ARM体系版本3
1 C( ?6 Z% f# P* ]1 t0x1 ARM体系版本4T | 位[31: 24] | 生产厂商的编号,现在已经定义的有以下值:
/ {! r* j) i# K2 x0x41 =A ARM公司; G- y. ]9 W9 C0 J3 x/ x
0x44 =D Digital Equipment公司
8 A- g0 H. v* ?* x A! x0x69 =I Intel公司 |
: {/ c8 u8 \8 R5 G: G% Q# L7 M1 d
ARM7之前处理器的主标识符寄存器编码格式如下所示: 31 24 23 22 16 15 4 3 0 | 由生产商确定 | A | 产品子编号 | 产品主编号 | 处理器版本号 |
7 z+ b. J$ @: g/ T& H( y( r) ]1 }) I* F5 y V; j" G
位 | 说明 | 位[3: 0] | 生产商定义的处理器版本号 | 位[15: 4] | 生产商定义的产品主编号,其中最高4位即为[15:12]的值为0x7 | 位[22: 16] | 生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等 | 位[23] | ARM7支持下面两种ARM体系的版本号:' R* z9 ^8 j# `
0x0 ARM体系版本3
" ~5 w( ?0 j# v1 p0x1 ARM体系版本4T | 位[31: 24] | 生产厂商的编号,现在已经定义的有以下值:
, m1 J. f Q" N, a0x41 =A ARM公司
0 Z6 i- X3 V) U2 f0x44 =D Digital Equipment公司, R8 b, b: c5 q N- B/ I
0x69 =I intel公司 |
: G, Y& F# H6 Q0 j4 a% h: s9 b7 Q. ?4 r9 h, A: @6 _, O
2)cache类型标识符寄存器, s5 i9 a& p/ N
访问cache类型标识符寄存器的指令格式如下所示:' j& l# O' B3 A9 g- _
mrc p15, 0, r0, c0, c0, 1 ;将cache类型标识符寄存器C0,1的值读到r0中2 R5 S" [2 B! S" F0 S4 }& Z
ARM处理器中cache类型标识符寄存器的编码格式如下所示: 31 29 28 25 24 23 12 11 0 | 0 0 0 | 属性字段 | S | 数据cache相关属性 | 指令cache相关属性 | 9 K* {4 `. o: U, d( s. q) n
) w8 w+ W: _3 O( l4 J9 y P位 | 说明 | 位[28: 25] | 指定控制字段位[24: 0]指定的属性之外的cache的其他属性,详见表4-2 | 位[24] | 定义系统中的数据cache和指令cache是分开的还是统一的:/ I5 V' H+ l# C" E* I
0 系统的数据cache和指令cache是统一的;
9 e2 ]) x; f1 x8 G9 W+ e V1 系统的数据cache和指令cache是分开的 | 位[23: 12] | 定义数据cache的相关属性,如果位[24]为0,本字段定义整个cache的属性 | 位[31: 24] | 定义指令cache的相关属性,如果位[24]为0,本字段定义整个cache的属性 | 6 N, S: r: Q0 M2 K/ x
9 U8 Y4 {6 S5 j1 D其中控制字段位[28:25]的含义说明如下:# ?$ v7 ]% P6 x, n J
表4-2 cache类型标识符寄存器的控制字段位[28:25] 编码 | cache类型 | cache内容清除方法 | cache内容锁定方法 | 0b0000 | 写通类型 | 不需要内容清除 | 不支持内容锁定 | 0b0001 | 写回类型 | 数据块读取 | 不支持内容锁定 | 0b0010 | 写回类型 | 由寄存器C7定义 | 不支持内容锁定 | 0b0110 | 写回类型 | 由寄存器C7定义 | 支持格式A | 0b0111 | 写回类型 | 由寄存器C7定义 | 支持格式B | 2 C' N' s T8 R) f( R- g
# d7 v4 d% G5 S控制字段位[23:12]和控制字段位[11:0]的编码格式相同,含义如下所示: 11 9 8 6 5 3 2 1 0 | 0 0 0 | cache容量 | cache相联特性 | M | 块大小 | # J% ?4 N3 I2 x* O1 D ~+ v
9 W% f e% }8 Q1 K9 w( K" b
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 |
# N: }/ T$ Y5 S) K$ }- A$ { F
3 M) T9 q& a( U# G- U# Ecache相联特性字段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路相联 |
7 g, `" K4 p' @
, A+ j1 a& ]1 rcache块大小字段bits[1: 0]的含义如下所示: 编码 | cache块大小 | 0b00 | 2个字(8字节) | 0b01 | 4个字(16字节) | 0b10 | 8个字(32字节) | 0b11 | 16个字(64字节) |
4 q1 N+ s/ R& u) T4 _; ]- X6 |* v. ?$ Z; _) W6 l* J( w6 o; W
·CP15的寄存器C14 G, s$ Y/ p' t3 t3 |5 H
访问主标识符寄存器的指令格式如下所示:
3 h3 j; D5 j9 K6 Z9 vmrc p15, 0, r0, c1, c0{, 0} ;将CP15的寄存器C1的值读到r0中
( P. u2 L4 m, s( Wmcr p15, 0, r0, c1, c0{, 0} ;将r0的值写到CP15的寄存器C1中
& t% `( J' C) }+ b2 A7 O; L W0 tCP15中的寄存器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 |
) P1 d( f4 g1 }6 ^0 E- P! B
( c4 q* f- X% A位 | 说明 | 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指令 | 附加: | : U% Q) C$ {% h+ G: }/ L( r3 u
8 z) A2 t H8 y0 C1 j
·CP15的寄存器C2, b# B& {9 e1 u" W% ]1 F+ F7 t' V
CP15中的寄存器C2保存的是页表的基地址,即一级映射描述符表的基地址。其编码格如下所示:
/ ]+ [( |, C+ K' i# A- ^; ~ D
1 r, _4 ? n" P7 F9 i·CP15的寄存器C3
0 S6 c8 D* s; v+ D; Q" R# Z' A0 V! \2 uCP15中的寄存器C3定义了ARM处理器的16个域的访问权限。 31 0 | D15 | D14 | D13 | D12 | D11 | D10 | D9 | D8 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
* q8 E. [: @, b( ^4 f; C; e0 a% @" W0 ]8 ^" ]9 Q
·CP15的寄存器C59 e, m$ M( d4 P& L$ f
CP15中的寄存器C5是失效状态寄存器,编码格式如下所示: 31 9 8 7 4 3 0 | UNP/SBZP | 0 | 域标识 | 状态标识 | . u) ?! ` o, l6 I' b
U, P7 f! M" K: g! L其中,域标识bit[7:4]表示存放引起存储访问失效的存储访问所属的域。
! \5 Z. \1 i. [# \) P% _状态标识bit[3:0]表示放引起存储访问失效的存储访问类型,该字段含义如表4-3所示(优先级由上到下递减)。" D1 n& i! }! v; k) H+ v& v/ y
表4-3 状态标识字段含义 引起访问失效的原因 | 状态标识 | 域标识 | C6 | 终端异常(Terminal Exception) | 0b0010 | 无效 | 生产商定义 | 中断向量访问异常(Vector Exception) | 0b0000 | 无效 | 有效 | 地址对齐 | 0b00x1 | 无效 | 有效 | 一级页表访问失效 | 0b1100 | 无效 | 有效 | 二级页表访问失效 | 0b1110 | 有效 | 有效 | 基于段的地址变换失效 | 0b0101 | 无效 | 有效 | 基于页的地址变换失效 | 0b0111 | 有效 | 有效 | 基于段的存储访问中域控制失效 | 0b1001 | 有效 | 有效 | 基于页的存储访问中域控制失效 | 0b1101 | 有效 | 有效 | 基于段的存储访问中访问权限控制失效 | 0b1111 | 有效 | 有效 | 基于页的存储访问中访问权限控制失效 | 0b0100 | 有效 | 有效 | 基于段的cache预取时外部存储系统失效 | 0b0110 | 有效 | 有效 | 基于页的cache预取时外部存储系统失效 | 0b1000 | 有效 | 有效 | 基于段的非cache预取时外部存储系统失效 | 0b1010 | 有效 | 有效 | ; S5 f& `; @: b% D; Y
( h8 b0 t2 R) s5 K·CP15中的寄存器C6
5 G1 n( e: c5 r9 V0 g6 q3 wCP15中的寄存器C5是失效地址寄存器,编码格式如下所示:
9 A- G. D. z2 Z- x8 |: c" `
1 |- }; x% b5 [2 i: P" ], M·CP15中的寄存器C7
/ t, }. k( C. a; c5 i6 uCP15的C7寄存器用来控制cache和写缓存,它是一个只写寄存器,读操作将产生不可预知的后果。4 J% Z! q% o# L7 M* I* |
访问CP15的C7寄存器的指令格式如下所示:, S0 e, r, {! }& m1 E3 B
mcr p15, 0, <rd>, <c7>, crm, <opcode_2> ;<rd>、<crm>和<opcode_2>的不同取值组合实现不同功能
* C1 }8 u: Q' P2 s0 e: Y·CP15中的寄存器C81 e& {$ ?) N5 s1 w S/ X
CP15的C8寄存器用来控制清除TLB的内容,是只写寄存器,读操作将产生不可预知的后果。
- D! w1 C" T/ S2 _* H5 \5 Q& w7 s访问CP15的C8寄存器的指令格式如下所示:* V/ b" S4 i- s/ C
mcr p15, 0, <rd>, <c8>, crm, <opcode_2> ;<rd>、<crm>和<opcode_2>的不同取值组合实现不同功能,见第4.2节1 B3 `. z4 C5 k" |
·CP15中的寄存器C9/ ]+ ^0 @7 A7 I% s* j
CP15的C9寄存器用于控制cache内容锁定。
" y- E) l- d! b/ X7 M访问CP15的C9寄存器的指令格式如下所示:5 R, I+ X$ E ?7 A8 Z
mcr p15, 0, <rd>, <c9>, c0, <opcode_2>
' L& P! R- T5 C+ D% Q$ ]mrc p15, 0, <rd>, <c9>, c0, <opcode_2>' }5 Q5 q) N, Q
如果系统中包含独立的指令cache和数据cache,那么对应于数据cache和指令cache分别有一个独立的cache内容锁定寄存器,<opcode_2>用来选择其中的某个寄存器:4 D2 w: Z7 N1 |$ ~. f* b v2 z
<opcode_2>=1选择指令cache的内容锁定寄存器;. Q& [9 u! \- H9 T B1 z
<opcode_2>=0选择数据cache的内容锁定寄存器。
d5 l9 z0 y: U/ d, mCP15的C9寄存器有A、B两种编码格式。编码格式A如下所示: 31 32-W 31-W 0 | cache组内块序号index | 0 | ( e: M. z$ W5 W2 J
9 W1 u F3 O% B# W2 g* F
其中index表示当下一次发生cache未命中时,将预取的存储块存入cache中该块对应的组中序号为index的cache块中。此时序号为0~index-1的cache块被锁定,当发生cache替换时,从序号为index到ASSOCIATIVITY的块中选择被替换的块。
1 B: t+ w+ r" n+ ?5 i: ~编码格式B如下所示: 31 30 W W-1 0 | L | 0 | cache组内块序号index | 4 e0 ?, V- r! L
& a) U3 x+ c5 \5 {* K' z. m- k T8 g; `: }9 a
+ {8 g, c8 }5 r# _; x: Q( H* C
位 | 说明 | L=0 | 当发生cache未命中时,将预取的存储块存入cache中该块对应的组中序号为index的cache块中 |
: R% } j& ^8 J2 z# a/ z1 m$ }$ Q0 I& S- ~( q0 j; Z
续表 位 | 说明 | L=1 | 如果本次写操作之前L=0,并且index值小于本次写入的index,本次写操作执行的结果不可预知;否则,这时被锁定的cache块包括序号为0~index-1的块,当发生cache替换时,从序号为index到ASSOCIATIVITY的块中选择被替换的块 |
& N! @' i+ F% S
D( D, f# n. `3 E& O·CP15的寄存器C10
$ H9 I$ K' d3 d4 p0 ^) [' ]7 j: j$ ?CP15的C10寄存器用于控制TLB内容锁定。$ t' |# T$ z; |- m
访问CP15的C10寄存器的指令格式如下所示:$ Y; O8 s( P5 q7 U. @' S
mcr p15, 0, <rd>, <c10>, c0, <opcode_2>4 f9 t* k- j h4 f4 {+ g
mrc p15, 0, <rd>, <c10>, c0, <opcode_2>( E5 Q' a: }! g# M( ~
如果系统中包含独立的指令TLB和数据TLB,那么对应于数据TLB和指令TLB分别有一个独立的TLB内容锁定寄存器,<opcode_2>用来选择其中的某个寄存器:
, ?6 _6 D1 J+ N2 m' O5 Y, e<opcode_2>=1选择指令TLB的内容锁定寄存器;
" f" B+ F0 \- r( W5 n<opcode_2>=0选择数据TLB的内容锁定寄存器。
2 x3 g& ]+ d [1 v9 O4 B/ H" `C10寄存器的编码格式如下: 31 30 32-W 31-W 32-2W 31-2W 1 0 | 可被替换的条目起始地址的base | 下一个将被替换的条目地址victim | 0 | P |
3 a2 J4 ]1 Z- ~, ^
. U' A, y4 u: z' h5 m位 | 说明 | victim | 指定下一次TLB没有命中(所需的地址变换条目没有包含在TLB中)时,从内存页表中读取所需的地址变换条目,并把该地址变换条目保存在TLB中地址victim处 | base | 指定TLB替换时,所使用的地址范围,从(base)到(TLB中条目数-1);字段victim的值应该包含在该范围内 | P | 1:写入TLB的地址变换条目不会受使整个TLB无效操作的影响,一直保持有效;0:写入TLB的地址变换条目将会受到使整个TLB无效操作的影响 | - B1 Q5 W8 U& p. D2 T! `
" z* M4 N( P( `! j5 w" l$ e1 }
·CP15的寄存器C13
; _" G5 h' a% sC13寄存器用于快速上下文切换FCSE。6 G# q: J( y8 m1 u& D$ h5 ^
访问CP15的C13寄存器的指令格式如下所示:
! Q* S l6 Z6 H( J: t/ ^4 z2 xmcr p15, 0, <rd>, <c13>, c0, 0$ _$ S _2 n, }. u
mrc p15, 0, <rd>, <c13>, c0, 0! S7 F* A9 z4 W, Z# O! w; J
C13寄存器的编码格式如下所示: 5 _2 n L+ G W$ a
& }6 F1 C6 ^$ B Q; E o+ A其中,PID表示当前进程的所在的进程空间块的编号,即当前进程的进程标识符,取值为0~127。
s( d$ s) N z1 B2 @9 B0:MVA(变换后的虚拟地址)= VA(虚拟地址),禁止FCSE(快速上下文切换技术),系统复位后PID=0;) E5 x3 Z: t+ u# _
非0:使能FCSE。 . f8 S1 U) K V- j* t' k
|