| VxWorks中的地址映射 |
| 类别:嵌入式系统 |
|                        来源:21IC中国电子网 作者:深圳中太多媒体 金雨和          作者Email: hnjinyuhe@163.net          在运用嵌入式系统VxWorks和MPC860进行通信系统设计开发时,会遇到一个映射地址不能访问的问题。     缺省情况下,VxWorks系统已经进行了如下地址的映射:          memory地址、bcsr(Board Control and Status)地址、PC_BASE_ADRS(PCMCIA)地址、Internal Memory地址、rom(Flach memory)地址等,但是当你的硬件开发中要加上别的外设时,如(falsh、dsp、FPGA等),对这些外设的访问也是通过地址形式进行读写,如果你没有加相应的地址映射,那么是无法访问这些外设的。          和VxWorks缺省地址映射类似,你也可以进行相应的地址映射。          如下是地址映射原理及实现:          1、 地址映射结构          在Tornado\target\h\vmLib.h文件中     typedef struct phys_mem_desc     {     void *virtualAddr;     void *physicalAddr;     UINT len;     UINT initialStateMask; /* mask parameter to vmStateSet */     UINT initialState; /* state parameter to vmStateSet */     } PHYS_MEM_DESC;          virtualAddr:你要映射的虚拟地址     physicalAddr:硬件设计时定义的实际物理地址     len;要进行映射的地址长度     initialStateMask:可以初始化的地址状态:     有如下状态:     #define VM_STATE_MASK_VALID 0x03     #define VM_STATE_MASK_WRITABLE 0x0c     #define VM_STATE_MASK_CACHEABLE 0x30     #define VM_STATE_MASK_MEM_COHERENCY0x40     #define VM_STATE_MASK_GUARDED 0x80     不同的CPU芯片类型还有其特殊状态          initialState:实际初始化的地址状态:     有如下状态:     #define VM_STATE_VALID 0x01     #define VM_STATE_VALID_NOT 0x00     #define VM_STATE_WRITABLE 0x04     #define VM_STATE_WRITABLE_NOT 0x00     #define VM_STATE_CACHEABLE 0x10     #define VM_STATE_CACHEABLE_NOT 0x00     同样不同的CPU芯片类型还有其特殊状态          2、 初始化结构          在 Tornado\target\config\ads860\sysLib.c 文件中:     PHYS_MEM_DESC sysPhysMemDesc [] =     {      {      (void *) LOCAL_MEM_LOCAL_ADRS,      (void *) LOCAL_MEM_LOCAL_ADRS,      LOCAL_MEM_SIZE ,      VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE |     VM_STATE_MASK_CACHEABLE,      VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE      },      {      (void *) BCSR0,      (void *) BCSR0,      0x00001000,/* 4 k - Board Control and Status */      VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE |     VM_STATE_MASK_CACHEABLE | VM_STATE_MASK_GUARDED,      VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT |     VM_STATE_GUARDED      },      ……      {      (void *) INTERNAL_MEM_MAP_ADDR,      (void *) INTERNAL_MEM_MAP_ADDR,      INTERNAL_MEM_MAP_SIZE, /* 64 k - Internal Memory Map */      VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE |     VM_STATE_MASK_CACHEABLE | VM_STATE_MASK_GUARDED,      VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT |     VM_STATE_GUARDED      },      {      (void *) ROM_BASE_ADRS,      (void *) ROM_BASE_ADRS,      ROM_SIZE,/* Flach memory */      VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE |     VM_STATE_MASK_CACHEABLE ,      VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT      }     };     上面结构中是缺省地址映射。          3、 地址初始化          在Tornado\target\src\config\ usrMmuInit.c 文件中     通过函数usrMmuInit使地址映射生效          4、 实现映射:          如你定义flash地址为0x04000000开始的8Mbyte地址,则可以如下进行地址映射     {     (void *) 0x04000000,     (void *) 0x04000000,     0x00800000, /* 8 m - Flash window 1 */     VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE,     VM_STATE_VALID | VM_STATE_WRITABLE     },          5、 注意          地址映射最小单位为1页,4K大小,所以len值最小为:0x00010000。          按照如上步骤可以进行你要访问的任何外设或芯片(诸如flash、DSP、PCI等)的地址映射,进行地址映射后,就可以象操作内存一样对该地址进行读写了。           |
- AT89C51单片..
- 2008-1-17
- AT89C51单片..
- 2008-1-17
- 嵌入式电脑控制系统..
- 2008-1-17
- 基于嵌入式技术的网..
- 2008-1-2
- 威达电P4嵌入式平..
- 2007-12-27
- NORCO硬件平台..
- 2007-12-27
- UGM 嵌入式影像..
- 2007-12-20
- 嵌入式系统设计的核..
- 2007-12-17
- 发展基于嵌入式计算..
- 2007-12-10
- 基于RT-Linu..
- 2007-11-15
- 嵌入式实时操作系统..
- 2007-11-12
- 基于RT-Linu..
- 2007-11-1
- Windows 9..
- 2007-8-9
- 一种新型编码芯片及..
- 2007-8-9
- 把网络引进嵌入式控..
- 2007-8-9
- Windows N..
- 2007-7-29
- 嵌入式系统的开发利..
- 2007-7-29
- 基于驱动程序的协议..
- 2007-7-29
- 具有DSP功能的1..
- 2007-8-9
- 微控制器的抗干扰软..
- 2007-8-9



