微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > FS2410 开发板上启用 MMU 实现虚拟内存管理

FS2410 开发板上启用 MMU 实现虚拟内存管理

时间:11-10 来源:互联网 点击:

用 MCR 指令

来写该寄存器,具体格式如下:

MCR P15, 0, , , ,

其中, 中为将写入 C7 中的数据; , 的不同组合决定执行不同的操作:

----------------------------------------------------------------------------------

含义 数据

----------------------------------------------------------------------------------

C0 4 等待中断激活0

C5 0 使用无效整个Cache 0

C5 1 使无效指令Cache 中的某块 虚地址

C5 2 使无效指令Cache 中的某块 组号/组内序号

C5 4 清空预取缓冲区0

C5 6 清空整个跳转目标Cache 0

C5 7 清空跳转目标Cache中的某块 生产商定义

C6 0 使无效整个数据Cache 0

C6 1 使无效数据Cache 中的某块 虚地址

C6 2 使无效数据Cache 中的某块 组号/组内序号

C7 0 使数据Cache 和指令Cache 无效 0

C7 1 使无效整个Cache 中的某块 虚地址

C7 2 使无效整个Cache 中的某块 组号/组内序号

C8 2 等待中断激活 0

C10 1 清空数据Cache 中某块虚地址

C10 2 清空数据Cache 中某块组号/组内序号

C10 4 清空写缓冲区0

C11 1 清空整个Caceh 中某块虚地址

C11 2 清空整个Caceh 中某块组号/组内序号

C13 1 预取指令Cache 中某块虚地址

C14 1 清空并使无效数据Cache中某块虚地址

C14 2 清空并使无效数据Cache中某块组号/组内序号

C15 1 清空并使无效整个Cache中某块虚地址

C15 2 清空并使无效整个Cache中某块组号/组内序号

----------------------------------------------------------------------------------

第 35~36 行: 清空写缓冲区

第 38~39 行,使DCache, ICache 及页表的内容无效。系统控制协处理器 CP15 的寄存器 C8就

是用来控制清除 TLB内容相关操作的。指令格式如下:

MCR P15, 0, , , ,

其中 中为将写入 C8中的数据; , 的不同组合决定指令执行不同的操作

----------------------------------------------------------------------------------

指令 含义

----------------------------------------------------------------------------------

MCR P15,0,Rd,C8,C7,0 0b0000 0b0111 0 DCache,ICache 无效

MCR P15,0,Rd,C8,C7,1 0b0000 0b0111 虚地址 整个Cache 中单个地址变换条目无效

MCR P15,0,Rd,C8,C5,0 0b0000 0b0101 0 整个Cache无效

MCR P15,0,Rd,C8,C5,1 0b0000 0b0101 虚地址 指令Cache 中单个地址变换条目无效

MCR P15,0,Rd,C8,C6,0 0b0000 0b0110 0 整个数据Cache无效

MCR P15,0,Rd,C8,C6,1 0b0000 0b0110 虚地址 数据Cache 中单个地址变换条目无效

----------------------------------------------------------------------------------

第 41~43 行:加载页表的首地址到 CP15 协处理器的寄存器 C2

第 45~53 行:设置访问控制权限。协处理器 CP15 中 C3 为 DOMAIN ACCESS CONTROL REGISTER,

该寄存器有效位为32,被分成16个区域,每个区域由两个位组成,含义如下:

00:当前级别下,该内存区域不允许被访问,任何的访问都会引起一个 domain fault

01:当前级别下,该内存区域的访问必须配合该内存区域的段描述符中AP位进行权检查

10:保留状态

11:当前级别下,对该内存区域的访问都不进行权限检查

注意第 49 行我们用的是 "mvn r0, #0" 而非 "mov r0, #0"

第 59~76 行, 设置并启用 MMU。这几行代码主要是设置了 CP15 的寄存器 C1。C1 是一个控制寄

存器它包括以下功能:

禁止/使能 MMU 以及其它的与存储系统相关的功能

配置存储系统以及 ARM 处理器中的相关部分的工作方式

来看一下 C1 寄存器具体是什么样子:

各控制位含义如下表:

----------------------------------------------------------------------------------

C1中的控制位 含义

----------------------------------------------------------------------------------

M 禁止/使能 MMU

A 禁止/使能地址对齐检查功能

C 禁止/使能整个 Cache

W 禁止/使能写缓冲

P 32/26地址模式

D 禁止/使能26地址异常检查

L 早期/后期中止模型

B little-endian/big-endian

S 在 MMU 启用时用作系统保护

R 在 MMU 启用时用作系统保护

F 由生产商定义

Z 禁止/使能跳转预测指令

I 禁止/使能 Cache

V 低端/高端异常中断向量表

RR 对系统中的 Cache 选择淘汰算法

L4 提供对以前的 ARM 的版本兼容

bits[31:16] 保留

----------------------------------------------------------------------------------

第 77~79 行: 这是使用嵌入汇编的方式,第 78 行的 "r"(ttb) 表示变量 ttb 的值赋给一个寄

存器作为输

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top