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都将被禁用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NW嵌入式开发

感谢您的支持,让我们一起进步!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值