• 课标2213 :MMU配置与使用


    void create_page_table(void)
    {
    unsigned long *ttb = (unsigned long *)0x20000000;
    unsigned long vaddr, paddr;

    vaddr = 0xA0000000;                                                                        //  虚拟地址
    paddr = 0xE0200000;                                                                        //页表地址,存在内存里的
    *(ttb + (vaddr >> 20)) = (paddr & 0xFFF00000) | MMU_SECDESC;  // 虚拟地址映射

    vaddr = 0x20000000;                                                        //内存映射
    paddr = 0x20000000;                                                       //内存映射时,虚拟和物理地址一致
    while (vaddr < 0x24000000)
    {
    *(ttb + (vaddr >> 20)) = (paddr & 0xFFF00000) | MMU_SECDESC_WB;                         
    vaddr += 0x100000;                                                            //一页对应1M ,采用循环语句把64M映射好
    paddr += 0x100000;
    }
    }

    ////////////////////////////////////////////////////////////////////////

    void mmu_init()
    {
    __asm__(

    /*设置TTB*/
    "ldr r0, =0x20000000\n"                //c2是Translation table base ,把地址写入c2中
    "mcr p15, 0, r0, c2, c0, 0\n"


    /*不进行权限检查*/
    "mvn r0, #0\n"                                     //取反传送
    "mcr p15, 0, r0, c3, c0, 0\n"               //c3 Domain access control 寄存器

     

    /*使能MMU*/
    "mrc p15, 0, r0, c1, c0, 0\n"         //c1 是mmu的控制寄存器
    "orr r0, r0, #0x0001\n"
    "mcr p15, 0, r0, c1, c0, 0\n"
    :
    :
    );
    }

  • 相关阅读:
    2thweek.training.c。链表典型题
    队列—summer training B.
    栈—summertraining#2.A题
    周题:UVa10736题。Foreign Exchange
    UVA_11877.第三次比赛C题:The Coco Cola
    uva10465 Homer Simpson(水题)
    uva348 Optimal Array Multiplication Sequence(DP)
    uva116 Unidirectional TSP(DP)
    uva 607 Scheduling Lectures(DP)
    uva11598 Optimal Segments(DP 求方案)
  • 原文地址:https://www.cnblogs.com/1932238825qq/p/7141940.html
Copyright © 2020-2023  润新知