自学内容网 自学内容网

Cortex-A7:使能/失能内存管理单元(MMU)

0 参考资料

ARM Cortex-A(armV7)编程手册V4.0.pdf

1 Cortex-A7:使能/失能内存管理单元(MMU)

1.1 使能MMU

在使能MMU前务必完成页表的配置,否则使能MMU可能会发生错误的虚拟地址到物理地址的转换操作,造成不可预料的错误。以下代码用于使能MMU:

MRC p15, 0, R1, c1, C0, 0 ;Read control register 读系统控制寄存器(SCTLR)
ORR R1, #0x1 ;Set M bit 将Mbit置1
MCR p15, 0,R1,C1, C0,0 ;Write control register and enable MMU 将R1值写入系统控制寄存器(SCTLR)以使能MMU

读、写系统控制寄存器(SCTLR)的示例如下:
在这里插入图片描述
系统控制寄存器(SCTLR)描述如下:
在这里插入图片描述
在这里插入图片描述

1.2 失能MMU

以下代码用于失能MMU:

MRC p15, 0, R1, c1, C0, 0 ;Read control register 读系统控制寄存器(SCTLR)
AND R1, #0xfffffffe ;Set M bit 将Mbit置0
MCR p15, 0,R1,C1, C0,0 ;Write control register and enable MMU 将R1值写入系统控制寄存器(SCTLR)以失能MMU

读、写系统控制寄存器(SCTLR)的示例如下:
在这里插入图片描述
系统控制寄存器(SCTLR)描述如下:
在这里插入图片描述

1.3 使能/失能MMU的注意事项

(1)在使能MMU之前一定要将页表创建好。
(2)如果虚拟地址和物理地址不是简单的直接映射关系(物理地址等于虚拟地址,PA=VA),在使能/失能MMU时,虚拟地址和物理地址对应关系会发生改变,这时一定要清除Cache中的当前地址变换条目。
(3)如果使能/失能MMU代码的物理地址和虚拟地址不是直接映射关系,在使能/失能MMU时需要进行特殊处理,会造成很大的麻烦。因此建议将使能/失能MMU的代码虚拟地址和物理地址设置一致。
(4)Cortex-A7失能MMU之后物理地址=虚拟地址。
(5)Cortex-A7在失能MMU情况下无论是否使能Cache,内存Cache和Write Buffer都将被禁用。


原文地址:https://blog.csdn.net/kevin1499/article/details/142616273

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!