打印

mmu的初始化程序解析

[复制链接]
4011|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
diyzhangy|  楼主 | 2008-8-7 19:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
mmu的初始化程序,我查了很久都没有找到一个系统的学资料,现发出初始化原代码,希望,各位高手能分析一下程序中各函数的作用,初始化流程.这也会为以后的初学者有很大帮助的,谢谢!
 ************************************************/

#include "../inc/def.h"
#include "../inc/config.h"
#include "../inc/board.h"
#include "../inc/utils.h"
#include "../inc/slib.h"
#include "../inc/mmu.h"

// 1) Only the section table is used. 
// 2) The cachable/non-cachable area can be changed by MMT_DEFAULT value.
//    The section size is 1MB.

void MMU_DCacheCleanAll(void)
{
    int i, j;
    
    //If write-back is used,the DCache should be cleared.
    for(i=0; i<64; i++)
        for(j=0; j<8; j++)
            MMU_CleanDCacheIndex((i<<26)|(j<<5));
    __asm {
        mov    r0, #0
        mcr    p15, 0, r0, c7, c10, 4    // drain WB
    }
}

void MMU_DCacheCleanInvalidateAll(void)
{
    int i, j;
    
    //If write-back is used,the DCache should be cleared.
    for(i=0; i<64; i++)
        for(j=0; j<8; j++)
            MMU_CleanInvalidateDCacheIndex((i<<26)|(j<<5));
    __asm {
        mov    r0, #0
        mcr    p15, 0, r0, c7, c10, 4    // drain WB
    }
}

void MMU_Init(MMU_Table table[])
{
    //========================== IMPORTANT NOTE =========================
    //The current stack and code area can't be re-mapped in this routine.
    //If you want memory map mapped freely, your own sophiscated MMU
    //initialization code is needed.
    //===================================================================

    MMU_DisableDCache();
    MMU_DisableICache();
        MMU_InvalidateDCache();    //invalidate data cache all
    MMU_DCacheCleanInvalidateAll();
    MMU_InvalidateICache();
    
    #if 0
    //To complete MMU_Init() fast, Icache may be turned on here.
    MMU_EnableICache(); 
    #endif
    
    MMU_DisableMMU();
    MMU_InvalidateTLB();
    
    for(; table->vEnd; table++)
        MMU_SetMTT(table->vStart, table->vEnd, table->pStart, table->attr);
    
    MMU_SetTTBase(_MMUTT_STARTADDRESS);
    MMU_SetDomain(0x55555550|DOMAIN1_ATTR|DOMAIN0_ATTR); 
    //DOMAIN1: no_access, DOMAIN0,2~15=client(AP is checked)
    MMU_SetProcessId(0x0);
    MMU_EnableAlignFault();
    
    MMU_EnableMMU();
    MMU_EnableICache();
    MMU_EnableDCache(); //DCache should be turned on after MMU is turned on.
}    

// attr=RW_CB,RW_CNB,RW_NCNB,RW_FAULT
void ChangeRomCacheStatus(int attr)
{
    int i,j;
    MMU_DisableDCache();
    MMU_DisableICache();
    //If write-back is used,the DCache should be cleared.
    for(i=0;i<64;i++)
        for(j=0;j<8;j++)
            MMU_CleanInvalidateDCacheIndex((i<<26)|(j<<5));
    MMU_InvalidateICache();
    MMU_DisableMMU();
    MMU_InvalidateTLB();
    MMU_SetMTT(0x00000000,0x07f00000,0x00000000,attr);    //bank0
    MMU_SetMTT(0x08000000,0x0ff00000,0x08000000,attr);    //bank1
    MMU_EnableMMU();
    MMU_EnableICache();
    MMU_EnableDCache();
}    

void MMU_SetMTT(U32 vaddrStart, U32 vaddrEnd, U32 paddrStart, int attr)
{
    U32 *pTT;
    int i, nSec;
    
    pTT = (U32 *)_MMUTT_STARTADDRESS+(vaddrStart>>20);
    nSec = (vaddrEnd>>20)-(vaddrStart>>20);
    for(i=0; i<=nSec; i++)
        *pTT++ = attr|(((paddrStart>>20)+i)<<20);
}

相关帖子

沙发
diyzhangy|  楼主 | 2008-8-7 19:53 | 只看该作者

AND

别外,我这几天搜了一些MMU的学习资料,有的很不错,要的留下邮箱

使用特权

评论回复
板凳
leo1983| | 2008-8-7 20:13 | 只看该作者

leo20012245@gmail.com

使用特权

评论回复
地板
南方老色狼| | 2008-8-8 08:55 | 只看该作者

我要!谢谢

linjunfeng99@163.com

使用特权

评论回复
5
程序匠八| | 2008-8-8 09:44 | 只看该作者

MMU这个东西看了头都大了

boydsc@1226.com 谢谢

使用特权

评论回复
6
rayzhong| | 2008-8-8 17:03 | 只看该作者

re

也给我一份 谢谢
rayzhongr@126.com

使用特权

评论回复
7
diyzhangy|  楼主 | 2008-8-8 19:11 | 只看该作者

发了

5楼,发是是..@126.com

使用特权

评论回复
8
sang_sang| | 2008-8-11 20:41 | 只看该作者

请也给我一份

sangsang512@sina.com

使用特权

评论回复
9
xielihong| | 2008-8-13 16:46 | 只看该作者

我也要一份

xiliho221@163.com
对mmu也是头大中,我也要一份,谢谢了
希望能够渐渐明白

使用特权

评论回复
10
景雯| | 2008-9-12 10:44 | 只看该作者

正在研究

麻烦给我一份,mosquite7@sina.com

使用特权

评论回复
11
01dxwlm| | 2008-9-13 19:03 | 只看该作者

麻烦发分给我啊

smalf@sina.com

使用特权

评论回复
12
avocationA| | 2008-9-13 22:27 | 只看该作者

要一分

fengyeuzou@126.com

使用特权

评论回复
13
robertc| | 2008-9-14 00:31 | 只看该作者

回复主题:mmu的初始化程序解析

我也要一份 chenwei366@163.com

使用特权

评论回复
14
FActzero| | 2008-9-14 11:11 | 只看该作者

谢谢!

azlinzhi@yahoo.com.cn

使用特权

评论回复
15
01dxwlm| | 2008-9-17 15:04 | 只看该作者

我也要一份

smalf@sina.com 

使用特权

评论回复
16
freewing| | 2008-9-23 16:12 | 只看该作者

mmu 难, 我也要一份

我也要一份 738879104@qq.com 。谢谢!

有个2410完全开发手册里边也有简单介绍到这个。不过没有深入。
http://www.embedsky.net/technical/view_014.html

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

92

帖子

0

粉丝