当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]VxWorks中的地址映射

作者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 argethvmLib.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_COHERENCY    0x40
#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 argetconfigads860sysLib.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 argetsrcconfig 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等)的地址映射,进行地址映射后,就可以象操作内存一样对该地址进行读写了。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭