Chinaunix首页 | 论坛 | 博客
  • 博客访问: 456879
  • 博文数量: 362
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-26 17:08
文章分类

全部博文(362)

文章存档

2015年(362)

我的朋友

分类: 嵌入式

2015-12-11 00:01:11

原文地址:mini2440裸机之MMU(一)(mmu.h) 作者:

 s3c2440 MMU.pdf   下后改为ppt格式才能看
/********************************************************************
  NAME    : MMU.H
  DESC    :
  Revision: 02.28.2002 ver 0.0
 **********************************************************************/
#include "2440slib.h"
#ifndef __MMU_H__
#define __MMU_H__
#ifdef __cplusplus
extern "C" {
#endif
/**********************************************************************
* 段描述符中各字段含义
* 位[1 : 0]  一级描述符的类型标识(4种)
* 位[3 : 2]  C\B控制位
* 位[4 : 4]  固定为1
* 位[8 : 5]  本段所在的域的标识符,标识第几个域
* 位[9 : 9]  保留,为0
* 位[11:10]  访问权限控制位AP
* 位[19:12]  保留,为0
* 位[31:20]  该段对应的物理空间的基地址的高12位
************************************************************************/
#define DESC_SEC (0x2|(1<<4))  //段描述符(看下图)
/************************************************************************

*S3c2440共有4种内存映射方式,分别是:
*00 Fault (无映射)
*01 Coarse Page (粗表)
*10 Section (段)
*11 Fine Page (细表)
***************************************************/
#define CB     (3<<2)  //cache_on, write_back回写
#define CNB    (2<<2)  //cache_on, write_through直写
#define NCB    (1<<2)  //cache_off,WR_BUF on
#define NCNB   (0<<2)  //cache_off,WR_BUF off
#define AP_RW  (3<<10) //supervisor=RW, user=RW
#define AP_RO  (2<<10) //supervisor=RW, user=RO
//Domain域可以填写的值有4个
//00:当前级别下,该内存区域不允许被访问,任何的访问都会引起一个domain fault
//01:当前级别下,该内存区域的访问必须配合该内存区域的段描述符中AP位进行权检查
//10:保留状态(我们最好不要填写该值,以免引起不能确定的问题)
//11:当前级别下,对该内存区域的访问都不进行权限检查
#define DOMAIN_FAULT  (0x0)      // 不可访问
#define DOMAIN_CHK    (0x1)      // 访问受页表项中设置的权限值控制
#define DOMAIN_NOTCHK (0x3)      // 访问不受控制,不产生权限中止
#define DOMAIN0       (0x0<<5)   // 第0个域
#define DOMAIN1       (0x1<<5)   // 第1个域
// 域访问控制寄存器C3的格式
//┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
//│15│14│13│12│11│10│9 │8 │7 │6 │5 │4 │3 │2 │1 │0 │
//└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
// ================================================================
// 访问         位域值         说明
// ================================================================
// 管理者       11             访问不受控制,不产生权限中止
// 保  留       10             不可预料
// 客  户       01             访问受页表项(AP)中设置的权限控制
// 不可访问     00             产生域错误
// ================================================================ 
#define DOMAIN0_ATTR (DOMAIN_CHK<<0)   // 域0属性,访问受页表项中设置的权限值控制
//由于domain=0,而DOMAIN ACCESS CONTROL REGISTER中field 0的值是01,系统会对该访问进行访问权限的检查
//假设当前CPU处于Supervisor模式下,则程序可以对该描述符描述的内存区域进行读写操作
#define DOMAIN1_ATTR (DOMAIN_FAULT<<2) // 域1属性,不可以访问
//由于domain=2,而DOMAIN ACCESS CONTROL REGISTER中field 1的值是00,当前级别下,该内存区域不允许被访问,任何的访问都会引起一个domain fault
#define RW_CB    (AP_RW|DOMAIN0|CB|DESC_SEC)   // 读写,属于第0域,cache开,回写,段描述符
#define RW_CNB   (AP_RW|DOMAIN0|CNB|DESC_SEC)  // 读写,属于第0域,cache开,直写,段描述符
#define RW_NCNB  (AP_RW|DOMAIN0|NCNB|DESC_SEC) // 读写,属于第0域,cache关,WR_BUF off,段描述符
#define RW_FAULT (AP_RW|DOMAIN1|NCNB|DESC_SEC) // 读写,属于第1域,cache关,WR_BUF off,段描述符

void MMU_Init(void);
void MMU_SetMTT(int vaddrStart,int vaddrEnd,int paddrStart,int attr);
void ChangeRomCacheStatus(int attr);
#ifdef __cplusplus
}
#endif
#endif /*__MMU_H__*/
阅读(255) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~