新聞中心

        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

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 安康市| 泰州市| 南平市| 孟村| 昭通市| 伽师县| 池州市| 彭阳县| 平顺县| 江门市| 墨竹工卡县| 鹰潭市| 兴宁市| 洛扎县| 临泽县| 商南县| 台中县| 城市| 米脂县| 巧家县| 应城市| 永修县| 灵石县| 龙里县| 十堰市| 清河县| 玉树县| 鄢陵县| 宣化县| 富顺县| 乌审旗| 永登县| 上杭县| 宁蒗| 岱山县| 江北区| 崇信县| 江陵县| 仪陇县| 合川市| 民乐县|