浅谈PowerPC的MMU(下)
谷子
|
2019.12.24
|
0
+关注

本篇以MPC5634微控制器为例说明实现MMU是如何配置的。

BAM 启动代码执行后的MMU状态:BAM的代码修改了MMU的前6个TLB表项,提供默认的存储分配表,如下表。

Codewarrior调试界面图:

根据实际应用(基于MPC5634 )可配置,只要将用到的所有地址全部包含,同时,各个TLB表项的地址不能重复。另外特别注意的是,实际页面地址确定了页面对应的起始物理地址,这个地址必须是页面大小的整数倍,例如16KB的页面的起始地址必须位于0,16KB,32KB或48KB这样的边界上。这样将页面和MPC5634的实际物理地址对应起来的时候就需要格外注意。接下来我们按照下图的存储分配需求配置MMU。

以TLB1为例,代码实现如下:

代码说明:

SPR624,MAS0寄存器,用于选择当前访问的TLB序号、索引。对于e200系列内核,只有TLB1。MAS0寄存器配置为:0x10010000,代表配置的是TLB1 Entry1.

SPR625,MAS1寄存器,用于配置MMU TLB是否可用,是否受保护、与有效地址的处理ID比较的转换ID、转换地址空间以及转换页的大小。MAS1寄存器配置为:0xC0000400,配置的转换页大小为0b0100,对应256KB。

SPR626,MAS2用于配置所选MMU TLB条目管理存储器页的有效地址页、是否为Power ISA(指令集架构)VLE页、是否缓冲、是否禁止缓冲、是否要求存储器一致、是否需要访问保障以及大小端选择。MAS2寄存器配置为:0x00100008,配置的有效页面地址为0b 00000000000100000000。

SPR627,MAS3用于配置所选MMU TLB条目管理存储器页的转换真实地址页号、系统软件保留位(U0~U3)以及访问权限。MAS3寄存器配置为:0x0010003F,配置实际页面地址为0b 00000000000100000000。

MMU的每个TLB表项都必须单独配置。配置TLB需要首先通过mtspr指令将配置参数写入到MAS寄存器中,然后通过tlbwe指令将MAS寄存器的内容转移到TLB表项中。设置TLB表项不需要使用MAS4和MAS6寄存器,这两个寄存器用于MMU异常处理的过程。

本篇就介绍到这里,希望能给读者开发MMU驱动时提供一定的参考。

精选留言
延伸阅读
2020.04.03
4020阅读
更多报告干货
写留言
2527
阅读
收藏
回到顶部