WinCE中关于虚拟内存的配置

sgy1350611007   2007-10-23 10:47 楼主
在2440\src\inc\oemaddrtab_cfg.inc里面,有一个g_oalAddressTable,定义的是系统虚拟地址的使用分配,那么在config.bib里面,我们定义的虚拟地址所占用的地址段跟这个表的会不会冲突?如果不会冲突,那么该怎么理解这两个虚拟地址之间的相互覆盖和交叉呢?  这里的Bank0~Bank7有什么用途?是不是一条内存对应一个Bank?在使用的时候,我们应该根据什么来配置Memory Controller相关的寄存器呢?

;------------------------------------------------------------------------------
;
; TABLE FORMAT
;       cached address, physical address, size
;------------------------------------------------------------------------------
g_oalAddressTable

        DCD     0x80000000, 0x30000000, 64      ; 32 MB DRAM BANK 6
        DCD     0x84000000, 0x10000000, 32      ; nGCS2: PCMCIA/PCCARD
        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, 0x08000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 1
        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     0x90F00000, 0x4F000000,  1      ; Camera 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     0x92000000, 0x00000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 0
        DCD     0x00000000, 0x00000000,  0      ; end of table

MEMORY
    NK            80200000  01F00000  RAMIMAGE
    RAM           82100000  01D00000  RAM
    FLASH         92000000  00100000  RESERVED

    DATA1               80002000  00000800  RESERVED
    DATA2         80010000  00010000  RESERVED
    DATA3         80020800  00000800  RESERVED       
    DATA4          80023000  00001000  RESERVED
       
    DATA5               80024000  00002000  RESERVED
    DATA6                80026000  00002000  RESERVED
    DATA7          80028000  00002000  RESERVED
    DATA8         80030000  00020000  RESERVED
    DATA9               80100000  00100000  RESERVED   

回复评论 (4)

比较晕, 帮你顶一下。
以前就没搞明白。
点赞  2007-10-23 11:04
1.config.bib 中内存的定义应该和g_oalAddressTable 保持一致,不应该发生冲突,否则启动时的内存配置和CE中的是不同的,可能会引起启动问题
2、Bank0~Bank7 规划了CPU本身对内存地址的硬件寻址。一般情况下是一个内存(条/类型)对于一个槽,看说明。
3.Memory Controller 请根据CPU和 RAM时序要求进行配置,保障RAM可以正常工作。
点赞  2007-10-23 11:52
感谢slyzhang的回复。那么这个该怎么解释呢?
比如说DCD     0x80000000, 0x30000000, 64      ; 32 MB DRAM BANK 6
那应该是说cpu的从0x3000_0000开始的64M物理地址空间 被映射到从0x8000_0000开始的64M的系统的虚拟地址空间,而我们在config.bib里面又是这样规定的
MEMORY
    NK            80200000  01F00000  RAMIMAGE
    RAM           82100000  01D00000  RAM
那么从0x8000_0000开始的一段地址空间到底是用于  cpu的实际io地址 还是用于物理内存  的地址空间呢?比如说0x8020_0000对应的是cpu的物理地址空间 还是 对应物理内存呢?
还是我的理解错误,物理内存所映射的地址空间跟cpu的物理地址空所映射的虚拟地址空间根本就不会冲突?
点赞  2007-10-23 17:06
是不是说,按照这样的配置,我的内存就是相当于插在 Bank6上的,所以对Bank6的访问实际上就是对物理内存的访问?
点赞  2007-10-23 17:25
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复