ARM内存管理MMU详解
{ ,opcode2}
其中 coproc 指令操作的协处理器的名称,标准名为pn ,n 为0~15 ,这里为p15
opcode1 协处理器的特定操作码
Rd 做源的ARM 处理器寄存器
CRn 存放第一个操作数的协处理器寄存器
CRm 存放第二个操作数的协处理器寄存器
opcode2 可选的协处理器操作码
指令举例如下:
MCR p6,2,R7,c1,c2
MCR p7,0,R1,c3,c2,1
l MRC
MRC 指令将协处理器的寄存器中的数据传送到ARM 理器的寄存器中。若协处理器不能成功执行该操作,将产生未定义指令异常中断。指令格式如下:
MRC{cond} coproc ,opcode1 ,Rd ,CRn ,CRm{ ,opcode2}
其中 coproc 指令操作的协处理器的名称,标准名为pn ,n 为0~15 ,这里为p15
opcode1 协处理器的特定操作码
Rd 做目标的ARM 处理器寄存器
CRn 存放第一个操作数的协处理器寄存器
CRm 存放第二个操作数的协处理器寄存器
opcode2 可选的协处理器操作码
指令举例如下:
MRC p6,2,R7,c1,c2
MCR p7,0,R1,c3,c2,1
CP15 寄存器 0 , ID 代码及缓存类型
访问:只读
CP 寄存器 0 包含详细的硬件信息。读访问内容由 opcode_2 域值确定。对寄存器 0 写入结果无法预计。
将 opcode_2 域置 0 后读寄存器 0 访问 ID 代码寄存器 。
将 opcode_2 域置 1 后读寄存器 0 访问缓存类型寄存器。缓存类型寄存器包含缓存大小与架构信息。
CP15 寄存器 1 ,控制
访问:读 / 写
CP15 寄存器 1 或或称为控制寄存器包含 ARM920T 控制位
各个控制位的作用:
• M[0]: MMU 使能
0 = MMU 禁用
1 = MMU 使能
• A[1]: 队列故障使能
0 = 故障校验禁用
1 = 故障校验使能
• C[2]: DCache 使能
0 = DCache 禁用
1 = DCache 使能
• B[7]: Endianness
0 = 小 endian 模式
1 = 大 endian 模式
• S[8]: 系统保护
修改 MMU 保护系统
详见 ARM920T 技术参考手册 Rev. DDI0151C 。
• R[9]: ROM 保护
修改 MMU 保护系统
详见 ARM920T 技术参考手册 Rev. DDI0151C 。
• I[12]: ICache 控制
0 = ICache 禁用
1 = ICache 使能
• V[13]: 异常寄存器基地址
0 = 低地址,为 0x00000000
1 = 高地址,为 0xFFFF0000
• RR[14]: Round Robin 置换
0 = 随机置换
1 = Round robin 置换
CP15 寄存器 2, TTB
访问:读 / 写
CP15 寄存器 2 ,或转换表基 (TTB) 寄存器,定义转换表第一级,用于存放页表基址
读 CP15 寄存器 2 时,在 bits[31:14] 返回当前活动的第一级转换表的物理地址, bits[13:0] 不确定。读 CP15 寄存器 2 时, CRm 和操作数 2 被忽略,并应该是 0 。
写 CP15 寄存器 2 时,在 bits[31:14] 更新当前活动的第一级转换表的物理地址, bits[13:0] 应该写 0 或先前读回的值。写 CP15 寄存器 2 时, CRm 和操作数 2 被忽略,并应该是 0 。
CP15 寄存器 3 ,域访问控制寄存器
访问:读 / 写
CP 15 寄存器 3 ,或域访问控制寄存器,定义允许域访问。
使用 16 域进行 MMU 访问优先级控制。
寄存器 3 中的每两位对应一个域。
域是节、大页和小页的集合。 ARM 结构支持 16 个域。对域的访问由域访问控制寄存器的两个位字段控制。因为每个字段对访问对应的域的使能非常迅速,所以整个存储器区间能很快地交换进出虚拟存储器。这里支持 2 种域访问方式:
客户域的用户(执行程序,访问数据),被形成这个域的节或页来监督访问权限。
管理者控制域的行为(域中的当前节和页,对域的访问),不被形成这个域的节或页来监督访问权限。
一个程序可以是一些域的客户,也是另外一些域的管理者,同时没有对其它域的访问权限。这允许对程序访问不同存储器资源的非常灵活的存储器保护。表 3-4 说明了域访问控制寄存器的位编码方式。
(域的作用即对于每一个存储块如节、大页和小页,设置能否访问这些存储块,或者访问这些存储块时是否需要进行在转换表中所设置的权限的检查)
CP15寄存器4,保留
对该寄存器的访问( 读或写) 结果无法预见。
CP15寄存器5,故障状态寄存器
访问:读/ 写
读CP 15 寄存器5,或故障状态寄存器(FSR),返回最后数据故障源,表示当数据中止出现时尝试访问的域与类型。
此外,将引起数据中止的虚拟地址写入故障地址寄存器(CP15 寄存器6)。
写CP 15 寄存器5,或故障状态寄存器(FSR),设置数据写入时FSR 值。用于调试器恢复FSR中值。
Status[3:0]: 故障类型
说明故障类型。当数据中止出现时由MMU对状态域编码。状态域译码由域名及与数据中止相关的MVA(存于FAR中)确定。
Domain[7:4]: 域
说明当故障出现时访问的域(D15 - D0)。
当写入时,未定义位为0,读出时结果无法预见。
CP15寄存器6,故障地址寄存器
访问:读/ 写
CP 15
ARM内存管理MMU详 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)