• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : 我tiny4412的板子,现在做MMU映射GPIO寄存器实验,遇到问题了,求助啊 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 98770
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2013-12-06
最后登录: 2017-10-14
楼主  发表于: 2015-04-20 20:22

 我tiny4412的板子,现在做MMU映射GPIO寄存器实验,遇到问题了,求助啊

#include "regs.h"

#define GPM4CON  (*(volatile unsigned long*) 0x110002E1)
#define GPM4DAT  (*(volatile unsigned long*) 0x110002E2)

void (*printf)(char *, ...) = 0x43e11f3c;

void init_ttb(unsigned long *ttb_base);
void mmap(unsigned long *ttb_base, unsigned long va, unsigned long pa);
void memset(char *buf, char ch, int size);
void led_on(void);
void led_off(void);

void main(void)
{    
    unsigned long c1_flags, ttb = 0x73000000;
    volatile int *p;// = 0x52345678;

//    *p = 0x52300000;    

    init_ttb(ttb);
    mmap(ttb,0x110002E1,0x110002E0);
    mmap(ttb,0x110002E2,0x110002E4);
    mmap(ttb, 0x12345678, 0x52345678);
//    printf("*p = 0x%08x\n",*p);
    c1_flags = 1 | (1 << 3) | ( 1 << 11) | (1 << 28);
//    printf("*p = 0x%08x\n", *p);
    __asm__ __volatile__ (
        "mvn r0, #0 \n"            
        "mcr p15, 0, r0, c3, c0, 0\n"

        "mcr p15, 0, %1, c2, c0, 0\n" //configure ttb

        "mrc p15, 0, r0, c1, c0, 0\n"
        "orr %0, r0, %0\n"
        "mcr p15, 0, %0, c1, c0, 0\n" //enable mmu
        :
        : "r" (c1_flags), "r" (ttb)
        : "r0"
    );
//    mmap(ttb,0x12345678,0x52345678);
    p = 0x12345678;
    printf("*p = 0x%08x\n",  *p);
    led_off();
}

void led_off(void)
{
    GPM4CON &= ~0xffff;
    GPM4CON |=  0x1111;
    GPM4DAT |=  0xf;    
}
void led_on(void)
{
    GPM4CON &= ~0xffff;
    GPM4CON |=  0x1111;
    GPM4DAT &= ~0xf;
}

void init_ttb(unsigned long *ttb_base)
{
    unsigned long va, pa;

    memset(ttb_base, 0x00, 16 * 1024 );        

    for (va = 0x00000000; va < 0x10000000; va += 0x100000) { //Others
        pa = va;
        ttb_base[ va >> 20] = (pa & 0xfff00000) | 2;    
    }

    for (va = 0x10000000; va < 0x14000000; va += 0x100000) { //SFR
        pa = va;
        ttb_base[ va >> 20] = (pa & 0xfff00000) |  2;    
    }

    for (va = 0x40000000; va < 0x80000000; va += 0x100000) { //DRAM
        pa = va;
        ttb_base[ va >> 20] = (pa & 0xfff00000) | 2;    
    }
    
}


void mmap(unsigned long *ttb_base, unsigned long va, unsigned long pa)
{
    ttb_base[ va >> 20] = (pa & 0xfff00000) |  2;    
}

void memset(char *buf, char ch, int size)
{
    int i;
    for (i = 0; i < size; i ++)
        buf = ch;
}


以上代码我发现mmap函数映射的没有效果,怎么回事,代码明明是友善提供的,谁能帮忙说说怎么解决啊?


级别: 新手上路
UID: 41925
精华: 0
发帖: 26
金钱: 130 两
威望: 26 点
贡献值: 0 点
综合积分: 52 分
注册时间: 2011-04-02
最后登录: 2017-02-22
1楼  发表于: 2015-06-04 14:57
又遇到新手一枚,你的启动文件呢?启动MMU需要在进CPU开始的时候做,也就是在汇编里面做,这样可以避免造成取指令地址和运行地址不一致问题,相对取指,直接取指你要先搞明白,编译器根据基址都会为每一条指令做地址编码,你这直接在main里面初始化,会直接导致MMU打开后,MMU虚拟地址和实际地址不一致,PC找不到指令的问题,在main之前至少要做一次MMU映射,可以是物理地址和虚拟地址相同的映射,来解决这个问题。
级别: 风云使者
UID: 133551
精华: 0
发帖: 2689
金钱: 13445 两
威望: 2689 点
贡献值: 0 点
综合积分: 5378 分
注册时间: 2017-07-06
最后登录: 2017-07-08
2楼  发表于: 2017-07-07 01:09
我顶啊。接着顶
级别: 风云使者
UID: 133552
精华: 0
发帖: 2682
金钱: 13410 两
威望: 2682 点
贡献值: 0 点
综合积分: 5364 分
注册时间: 2017-07-06
最后登录: 2017-07-11
3楼  发表于: 2017-07-07 03:12
我不是随便的人。我随便起来不是人
级别: 风云使者
UID: 133553
精华: 0
发帖: 2691
金钱: 13455 两
威望: 2691 点
贡献值: 0 点
综合积分: 5382 分
注册时间: 2017-07-06
最后登录: 2017-07-08
4楼  发表于: 2017-07-07 08:22
我帮你 喝喝
还是市郊好
级别: 风云使者
UID: 9845
精华: 0
发帖: 2732
金钱: 85175 两
威望: 17035 点
贡献值: 0 点
综合积分: 5464 分
注册时间: 2009-10-15
最后登录: 2018-01-08
5楼  发表于: 2017-07-07 10:26
走自己的路,让别人打车去吧.
还是市郊好
级别: 风云使者
UID: 9845
精华: 0
发帖: 2732
金钱: 85175 两
威望: 17035 点
贡献值: 0 点
综合积分: 5464 分
注册时间: 2009-10-15
最后登录: 2018-01-08
6楼  发表于: 2017-07-07 14:57
欲望以提升热忱,毅力以磨平高山。14:57
级别: 风云使者
UID: 133552
精华: 0
发帖: 2682
金钱: 13410 两
威望: 2682 点
贡献值: 0 点
综合积分: 5364 分
注册时间: 2017-07-06
最后登录: 2017-07-11
7楼  发表于: 2017-07-07 18:07
挤在北京,给首都添麻烦了……
级别: 风云使者
UID: 133554
精华: 0
发帖: 2702
金钱: 13510 两
威望: 2702 点
贡献值: 0 点
综合积分: 5404 分
注册时间: 2017-07-06
最后登录: 2017-09-30
8楼  发表于: 2017-07-07 22:26
世界上那些最容易的事情中,拖延时间最不费力。
级别: 风云使者
UID: 43453
精华: 0
发帖: 2712
金钱: 84640 两
威望: 16928 点
贡献值: 0 点
综合积分: 5424 分
注册时间: 2011-04-17
最后登录: 2017-09-24
9楼  发表于: 2017-07-08 04:24
我对生命无悔,奈何心中有愧,只要不死……誓将RMB一赚到底!
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go