10416|31

59

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

2440官方bsp中mmu打开问题? [复制链接]

各位好!现在我的移植工作卡在eboot开启mmu之后。在b main之后的问题?开启mmu后物理地址不能用了。只能用虚拟地址.我在b main之前用虚拟地址点灯也是成功的。现在我认为肯定是跳到main函数中了。但是我在main中点灯
            volatile S3C2440A_IOPORT_REG *s2440IOP = (S3C2440A_IOPORT_REG *)OALPAtoVA(S3C2440A_BASE_REG_PA_IOPORT, FALSE);

    //volatile S3C2440A_IOPORT_REG *s2440IOP = 0xB1600000;
        s2440IOP->GPFCON  = (0x1 << 8) |(0x1 <<10) | (0x1 << 12) | (0x1 <<14);
        s2440IOP->GPFDAT =((OALPAtoVAs2440IOP->GPFDAT) & 0xF) | ((0x0 & 0xF) << 4);
还是不亮!现在怀疑这个OALPAtoVA()函数。我查看了下这个函数D:\WINCE500\PLATFORM\COMMON\SRC\ARM\COMMON\MEMORY并生成TARGETNAME=oal_memory_arm
TARGETTYPE=LIBRARY
NOMIPS16CODE=1 这样的lib。并发现D:\WINCE500\PLATFORM\COMMON\SRC\ARM\SAMSUNG\S3C2440A\Memory在这里合成了
TARGETNAME=oal_memory_s3c2440a
TARGETTYPE=LIBRARY
SYNCHRONIZE_DRAIN=1
NOMIPS16CODE=1

SOURCES=

SOURCELIBS= \
    $(_PLATCOMMONLIB)\$(_CPUDEPPATH)\oal_memory_arm.lib 这个lib !这个lib在我的eboot中是有引用的。
TARGETLIBS= \
    $(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\oal_memory_s3c2440a.lib  \
    $(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\oal_cache_s3c2440a.lib   \

也就是说这个函数是系统实现的函数?那为什么在官方的bsp中有问题呢??还是问题出在别的地方?还请各位指点下?

最新回复

结贴了!搞定了!继续bsp移植学习!  详情 回复 发表于 2009-11-12 13:40
点赞 关注

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
s2440IOP->GPFDAT =((OALPAtoVAs2440IOP->GPFDAT) & 0xF) | ((0x0 & 0xF) < < 4);
——怎么这么奇怪呢?

这个使用不会有问题的,我前阵子还弄过。
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这就是eboot的郁闷之处,一定要搞个ADS bootloader来引导这样仿真容易。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

4
 
你的BSP中没有类似这样的一个函数吗?
[code]//  Function:  OALPAtoVA
//
//  Converts a physical address (PA) to a virtual address (VA). This routine
//  uses the OEMAddressTable defined in the platform.
//
VOID* OALPAtoVA(UINT32 pa, BOOL cached)
{
    OAL_ADDRESS_TABLE *pTable = g_oalAddressTable;
    VOID *va = NULL;

    //OALMSG(OAL_MEMORY&&OAL_FUNC, (L"+OALPAtoVA(0x%x, %d)\r\n", pa, cached));

    // Search the table for address range
    while (pTable->size != 0) {
        if (
            pa >= pTable->PA &&
            pa <= (pTable->PA + (pTable->size << 20) - 1)
        ) break;                      // match found
        pTable++;
    }

    // If address table entry is valid compute the VA
    if (pTable->size != 0) {
        va = (VOID *)(pTable->CA + (pa - pTable->PA));
        // If VA is uncached, set the uncached bit
        if (!cached) (UINT32)va |= OAL_MEMORY_CACHE_BIT;
    }

    // Indicate the virtual address
    //OALMSG(OAL_MEMORY&&OAL_FUNC, (L"-OALPAtoVA(va = 0x%08x)\r\n", va));
    return va;
}
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 
bsp??bsp中没有只有common中有!会不会是这个原因呢?你们的bsp中这个函数是在那实现的呢??
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

6
 
学习一下,现在有很多都看不懂…
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

7
 
郁闷呐!这个问题还没解决!大家有没有相同的经历呀?韦伯大哥!你们的bsp里这个函数是怎么实现的呢?能讲下吗?我的没有函数体,只是在oal_memory.h有这样的定义
extern OAL_ADDRESS_TABLE g_oalAddressTable[];

//------------------------------------------------------------------------------

#define OALCAtoUA(va)       (VOID*)(((UINT32)(va))|OAL_MEMORY_CACHE_BIT)
#define OALUAtoCA(va)       (VOID*)(((UINT32)(va))&~OAL_MEMORY_CACHE_BIT)

#if defined(MIPS) || defined(SHx)

#define OALPAtoCA(pa)       (VOID*)(((UINT32)(pa))|0x80000000)
#define OALPAtoUA(pa)       (VOID*)(((UINT32)(pa))|0xA0000000)
#define OALPAtoVA(pa, c)    (VOID*)((c)?(pa)|0x80000000:(pa)|0xA0000000)
#define OALVAtoPA(va)       (((UINT32)(va))&~0xE0000000)

#else

#define OALPAtoCA(pa)       OALPAtoVA(pa, TRUE)
#define OALPAtoUA(pa)       OALPAtoVA(pa, FALSE)

VOID* OALPAtoVA(UINT32 pa, BOOL cached);
UINT32 OALVAtoPA(VOID *va);

#endif  不知道怎么回事??请各位帮我分析下!谢谢了!
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

8
 
今天的贴子不错,顶!
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 
在你的BSP文件中找OAL_ADDRESS_TABLE g_oalAddressTable[]吧,这个会有的,有可能是个.inc文件
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

10
 
mmu开启之后当然不能够访问物理地址了
你可以使用工具查看一下物理地址和虚拟地址的映射表,直接查看mmu的方式进行查看,很多调试工具中有这个功能
前段时间,碰到和你类似的问题,后来发现时mmu初始化有错误,原因是mmu的pts表格内容比较乱,在初始化之前全部清0就好了
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 8 楼 veabol 的回复:
在你的BSP文件中找OAL_ADDRESS_TABLE g_oalAddressTable[]吧,这个会有的,有可能是个.inc文件

这个数组我有的!extern OAL_ADDRESS_TABLE g_oalAddressTable[];

//------------------------------------------------------------------------------

#define OALCAtoUA(va)       (VOID*)(((UINT32)(va))|OAL_MEMORY_CACHE_BIT)
#define OALUAtoCA(va)       (VOID*)(((UINT32)(va))&~OAL_MEMORY_CACHE_BIT)

#if defined(MIPS) || defined(SHx)

#define OALPAtoCA(pa)       (VOID*)(((UINT32)(pa))|0x80000000)
#define OALPAtoUA(pa)       (VOID*)(((UINT32)(pa))|0xA0000000)
#define OALPAtoVA(pa, c)    (VOID*)((c)?(pa)|0x80000000:(pa)|0xA0000000)
#define OALVAtoPA(va)       (((UINT32)(va))&~0xE0000000)

#else

#define OALPAtoCA(pa)       OALPAtoVA(pa, TRUE)
#define OALPAtoUA(pa)       OALPAtoVA(pa, FALSE)

VOID* OALPAtoVA(UINT32 pa, BOOL cached);
UINT32 OALVAtoPA(VOID *va);

#endif 是一个头文件!然后呢??
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 9 楼 guopeixin 的回复:
mmu开启之后当然不能够访问物理地址了
你可以使用工具查看一下物理地址和虚拟地址的映射表,直接查看mmu的方式进行查看,很多调试工具中有这个功能
前段时间,碰到和你类似的问题,后来发现时mmu初始化有错误,原因是mmu的pts表格内容比较乱,在初始化之前全部清0就好了

您好!我的是在eboot中打开的!初始化全部清0 怎么解释呢?
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 11 楼 xuefeng_baggio 的回复:
引用 9 楼 guopeixin 的回复:
mmu开启之后当然不能够访问物理地址了
你可以使用工具查看一下物理地址和虚拟地址的映射表,直接查看mmu的方式进行查看,很多调试工具中有这个功能
前段时间,碰到和你类似的问题,后来发现时mmu初始化有错误,原因是mmu的pts表格内容比较乱,在初始化之前全部清0就好了

您好!我的是在eboot中打开的!初始化全部清0 怎么解释呢?

我是指在pts表格初始化之前把那16kb的数据给清0,如果有trace等工具的话,最好查看一下映射关系
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

14
 
我的pts好像是放置   g_oalAddressTable 表的??
这是开启mmu之前的代码??
不知道你的16k是什么数据?
add     r11, pc, #g_oalAddressTable - (. + 8)
        ldr     r10, =PTs                ; (r10) = 1st level page table
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

15
 
就是存放mmu映射表的那段空间,你在add    r11, pc, #g_oalAddressTable - (. + 8)
之前把他给清0
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

16
 
请教下怎么个清0法??
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

17
 
直接写就可以呀
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

18
 
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

19
 
引用 16 楼 guopeixin 的回复:
直接写就可以呀

请教下。汇编不是很明白?是不是直接 r10 寄存器赋值0  ldr r10,0  是这样吗??
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

20
 
忘记讲了,我这个eboot是用nboot引导的,nboot是用ads编译的。这里面得地址不知道有没有特别的地方?小弟这块确实不是很明白?还请各位照顾下!谢谢!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
Microchip 直播|利用motorBench开发套件高效开发电机磁场定向控制方案 报名中!
直播主题:利用motorBench开发套件高效开发电机磁场定向控制方案
直播时间:2025年3月25日(星期二)上午10:30-11:30
快来报名!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表