• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > VxWorks中的地址映射

    VxWorks中的地址映射

    作者: 時間:2004-12-10 來源:網絡 收藏
    作者Email: hnjinyuhe@163.net

    在運用嵌入式系統和MPC860進行通信系統設計開發時,會遇到一個不能訪問的問題。
    缺省情況下,系統已經進行了如下

    memory、bcsr(Board Control and Status)地址、PC_BASE_ADRS(PCMCIA)地址、Internal Memory地址、rom(Flach memory)地址等,但是當你的硬件開發中要加上別的外設時,如(falsh、dsp、FPGA等),對這些外設的訪問也是通過地址形式進行讀寫,如果你沒有加相應的地址,那么是無法訪問這些外設的。

    缺省地址映射類似,你也可以進行相應的地址映射。

    如下是地址映射原理及實現:

    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等)的地址映射,進行地址映射后,就可以象操作內存一樣對該地址進行讀寫了。



    關鍵詞: 映射 地址 VxWorks

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 瑞金市| 辛集市| 当阳市| 且末县| 黄骅市| 长沙县| 隆德县| 龙江县| 芒康县| 元氏县| 凉山| 逊克县| 德江县| 南华县| 招远市| 汾西县| 万载县| 枝江市| 巴青县| 萨嘎县| 罗城| 乌鲁木齐县| 拜城县| 银川市| 瓮安县| 游戏| 新密市| 奉化市| 江城| 枣庄市| 磐石市| 蓝山县| 哈巴河县| 磐安县| 宜昌市| 镇安县| 松原市| 容城县| 桃园市| 长葛市| 仙游县|