<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          VxWorks中的地址映射

          作者: 時(shí)間:2004-12-10 來(lái)源:網(wǎng)絡(luò) 收藏
          作者Email: hnjinyuhe@163.net

          在運(yùn)用嵌入式系統(tǒng)和MPC860進(jìn)行通信系統(tǒng)設(shè)計(jì)開(kāi)發(fā)時(shí),會(huì)遇到一個(gè)不能訪問(wèn)的問(wèn)題。
          缺省情況下,系統(tǒng)已經(jīng)進(jìn)行了如下

          memory、bcsr(Board Control and Status)地址、PC_BASE_ADRS(PCMCIA)地址、Internal Memory地址、rom(Flach memory)地址等,但是當(dāng)你的硬件開(kāi)發(fā)中要加上別的外設(shè)時(shí),如(falsh、dsp、FPGA等),對(duì)這些外設(shè)的訪問(wèn)也是通過(guò)地址形式進(jìn)行讀寫(xiě),如果你沒(méi)有加相應(yīng)的地址,那么是無(wú)法訪問(wèn)這些外設(shè)的。

          缺省地址映射類(lèi)似,你也可以進(jìn)行相應(yīng)的地址映射。

          如下是地址映射原理及實(shí)現(xiàn):

          1、地址映射結(jié)構(gòu)

          在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:硬件設(shè)計(jì)時(shí)定義的實(shí)際物理地址
          len;要進(jìn)行映射的地址長(zhǎng)度
          initialStateMask:可以初始化的地址狀態(tài):
          有如下?tīng)顟B(tài):
          #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芯片類(lèi)型還有其特殊狀態(tài)

          initialState:實(shí)際初始化的地址狀態(tài):
          有如下?tīng)顟B(tài):
          #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芯片類(lèi)型還有其特殊狀態(tài)

          2、初始化結(jié)構(gòu)

          在 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
          }
          };
          上面結(jié)構(gòu)中是缺省地址映射。

          3、地址初始化

          在Tornado argetsrcconfig usrMmuInit.c 文件中
          通過(guò)函數(shù)usrMmuInit使地址映射生效

          4、實(shí)現(xiàn)映射:

          如你定義flash地址為0x04000000開(kāi)始的8Mbyte地址,則可以如下進(jìn)行地址映射
          {
          (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頁(yè),4K大小,所以len值最小為:0x00010000。

          按照如上步驟可以進(jìn)行你要訪問(wèn)的任何外設(shè)或芯片(諸如flash、DSP、PCI等)的地址映射,進(jìn)行地址映射后,就可以象操作內(nèi)存一樣對(duì)該地址進(jìn)行讀寫(xiě)了。



          關(guān)鍵詞: 映射 地址 VxWorks

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();