5177|10

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教内存映射方式的问题 [复制链接]

请教一个简单问题. 我的2440的nGCS5片选接了一个硬盘的片选. 我现在要操作2440的实际物理空间. 如:0x2800 0000地址.
在s2440.h文件中.有以下:
#define MEMCTRL_BASE    0xB0800000 // 0x49000000
...
#define DMA_BASE       0xB0B00000 // 0x4B0000000
....
#define CAM_BASE      0xB0F00000 // 0x4F000000
其中//后面的是2440的实际物理地址. 我的疑问是//前面是如何定义的. 按照什么算法. 按照什么哪个内存映射方式?

最新回复

现在正规的CE5.0中的s2440.h在这个路径E:\WINCE500\PLATFORM\SMDK2440A\Src\Inc下;而且这个文件现在已经只是相关头文件的引用表。 你的应该是CE4.2上升级过来的。  详情 回复 发表于 2008-12-6 17:37
点赞 关注

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
应该是在OEMAddressTable表中有. 但怎么我的2440bsp中没找到该映射表?
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 cokeliu 的回复:
应该是在OEMAddressTable表中有. 但怎么我的2440bsp中没找到该映射表?


在这OEMAddressTable里面是大的内存分区的规划,可以看看csp/BSP中 2440目录下的INC 或者Kernel里面的 INC 目录, 或者直接找到 类似memorymap map等 *.inc 的扩展名的文件

 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
WINCE420\PLATFORM\SMDK2410\KERNEL\HAL\ARM

; Mapped for S3C2400X01

    EXPORT      OEMAddressTable[DATA]
   ;;;-------------------------------------------------------------
    ;;; Virt Addr   Phys Addr   MB
    ;;;-------------------------------------------------------------
    DCD 0x80000000, 0x02000000, 30  ; 30 MB SROM(SRAM/ROM) BANK 0
    DCD 0x82000000, 0x08000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 1
    DCD 0x84000000, 0x10000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 2
    DCD 0x86000000, 0x18000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 3
    DCD 0x88000000, 0x20000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 4
    DCD 0x8A000000, 0x28000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 5
    DCD 0x8C000000, 0x30000000, 64  ; 64 MB DRAM BANK 0,1
    DCD 0x90800000, 0x48000000,  1  ; Memory control register
    DCD 0x90900000, 0x49000000,  1  ; USB Host register
    DCD 0x90A00000, 0x4A000000,  1  ; Interrupt Control register


2440 类似的吧
 
 
 

回复

93

帖子

0

TA的资源

一粒金砂(初级)

5
 
;;;-------------------------------------------------------------
    DCD 0x80000000, 0x00000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 0
    DCD 0x82000000, 0x08000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 1
    DCD 0x84000000, 0x10000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 2
    DCD 0x86000000, 0x18000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 3
    DCD 0x88000000, 0x20000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 4
    DCD 0x8A000000, 0x28000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 5
    DCD 0x8C000000, 0x30000000, 64  ; 64 MB DRAM BANK 0
    DCD 0x90800000, 0x48000000,  1  ; Memory control register
    DCD 0x90900000, 0x49000000,  1  ; USB Host register
    DCD 0x90A00000, 0x4A000000,  1  ; Interrupt Control register
    DCD 0x90B00000, 0x4B000000,  1  ; DMA control register
    DCD 0x90C00000, 0x4C000000,  1  ; Clock & Power register
    DCD 0x90D00000, 0x4D000000,  1  ; LCD control register
    DCD 0x90E00000, 0x4E000000,  1  ; NAND flash control register
    DCD 0x91000000, 0x50000000,  1  ; UART control register
    DCD 0x91100000, 0x51000000,  1  ; PWM timer register
    DCD 0x91200000, 0x52000000,  1  ; USB device register
    DCD 0x91300000, 0x53000000,  1  ; Watchdog Timer register
    DCD 0x91400000, 0x54000000,  1  ; IIC control register
    DCD 0x91500000, 0x55000000,  1  ; IIS control register
    DCD 0x91600000, 0x56000000,  1  ; I/O Port register
    DCD 0x91700000, 0x57000000,  1  ; RTC control register
    DCD 0x91800000, 0x58000000,  1  ; A/D convert register
    DCD 0x91900000, 0x59000000,  1  ; SPI register
    DCD 0x91A00000, 0x5A000000,  1  ; SD Interface register
    DCD 0x00000000, 0x00000000,  0  ; End of Table (MB MUST BE ZERO!)
谢谢两位. 确实找到了这个内存表. 但还有3个问题.
1.在S2440.H中是#define DMA_BASE      0xB0B00000 // 0x4B0000000
在内存映射表中是DCD 0x90B00000, 0x4B000000,  1  ; DMA control register
发现所有在内存映射表中与.h文件中刚好相差 0xb0b00000-0x90b00000=0x20000000. 这个差值怎么解释?
2. 内存映射表中最后一个是0x5A000000. 而在s2440.h中还有#define AC97_BASE 0XB1B00000  //0x5B000000
这个0xB1B00000在映射表中没有被找到.
3. 如果操作内存SDRAM物理地址空间而不是寄存器空间. 如S2440的0x2800 0000地址应该怎么操作?
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

6
 
首先要理解 windows CE 下的地址映射机制。 wince有两种地址:物理地址和虚拟地址.不同架构的 CPU 硬件上的区别导致地址映射也不同。MIPS和SH x 处理器,不采用MMU,直接在CPU和内核里定义 1G 的物理地址;而X86和ARM带有 MMU 单元,在 OEMAddressTable 中定义物理地址到虚拟地址间的映射关系或者是OS启动后调用 CreateStaticMapping 和NKCreateStaticMapping 来实现从虚拟地址到物理地址的静态映射.经过静态映射的地址,可以由操作系统内核用于 ISR 访问设备。如果我们要在应用程序中访问外设,必须在物理地址和虚拟地址间建立动态映射关系,我们可以使用 VirtualAlloc 和 VirtualCopy (或者直接调用 MmmapIoSpace 函数)来实现。
其次,如果是操作通过总线挂接的 I/O 或者存储器,必须先把总线地址转化成 CPU 上的系统地址,再做物理地址到虚拟地址的映射。这里需要查 CPU 的 Datasheet ,找出所要操作的I/O地址.先调用 HALTranslateBusAddress( )把总线地址转化成CPU上的系统地址, 再调用 MmmapIoSpace 函数实现虚实映射;也可以使用 TransBusAddrToVirtual ()直接把总线上的地址转化成系统的虚拟地址。
第三,在一般的应用程序中访问 I/O 是访问它的缓存段虚拟地址,而驱动中必须访问无缓存段虚拟地址。简单来说无缓存段虚拟地址 = 缓存段虚拟地址 +0x20000000 。
总结起来,如果是 wince 内核(如HAL)访问外部 I/O ,只需要在 OEMAddressTable 中定义物理地址到虚拟地址间的映射关系就可以了;如果是应用程序或者驱动要访问 I/O ,要做的工作包括: 1 。在 CPU 物理地址和虚拟地址间做一个动态映射, 2 。对虚拟地址进行操作。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

7
 
1.在S2440.H中是#define DMA_BASE      0xB0B00000 // 0x4B0000000
在内存映射表中是DCD 0x90B00000, 0x4B000000,  1  ; DMA control register
发现所有在内存映射表中与.h文件中刚好相差 0xb0b00000-0x90b00000=0x20000000. 这个差值怎么解释?
这个是CACHE_UNCACHE的差别,就是是否将该内存映射到缓存CACHE中的差别。

2. 内存映射表中最后一个是0x5A000000. 而在s2440.h中还有#define AC97_BASE 0XB1B00000  //0x5B000000
这个0xB1B00000在映射表中没有被找到.
AC97在2440中是可以支持,但是既然用了IIS,就不会用AC97,两者的管脚是复用的。

3. 如果操作内存SDRAM物理地址空间而不是寄存器空间. 如S2440的0x2800 0000地址应该怎么操作?
SDRAM物理地址映射如下
DCD 0x8C000000, 0x30000000, 64  ; 64 MB DRAM BANK 0
那么,想操作SDRAM的地址空间,就从0x8C000000开始的64MB可以操作。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

8
 
楼上说的不错. 比较全面.谢谢!
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

9
 
感谢slyzhang /ninesuns02 /shuiyan 三位.
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
CE5.0中的已没有OEMAddressTable的的说法,取而代之的是OAL_ADDRESS_TABLE/*POAL_ADDRESS_TABLE(在%_WINCEROOT%\PLATFORM\COMMON\SRC\INC中定义:extern OAL_ADDRESS_TABLE g_oalAddressTable[]),在%_WINCEROOT%\PLATFORM\\Src\Inc下的oemaddrtab_cfg.inc中实现具体定义g_oalAddressTable。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

11
 
现在正规的CE5.0中的s2440.h在这个路径E:\WINCE500\PLATFORM\SMDK2440A\Src\Inc下;而且这个文件现在已经只是相关头文件的引用表。
你的应该是CE4.2上升级过来的。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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