VxWorks中的地址映射
作者Email: hnjinyuhe@163.net在運(yùn)用嵌入式系統(tǒng)VxWorks和MPC860進(jìn)行通信系統(tǒng)設(shè)計(jì)開(kāi)發(fā)時(shí),會(huì)遇到一個(gè)映射地址不能訪問(wèn)的問(wèn)題。
缺省情況下,VxWorks系統(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)行讀寫,如果你沒(méi)有加相應(yīng)的地址映射,那么是無(wú)法訪問(wèn)這些外設(shè)的。
和VxWorks缺省地址映射類似,你也可以進(jìn)行相應(yīng)的地址映射。
如下是地址映射原理及實(shí)現(xiàn):
1、 地址映射結(jié)構(gòu)
在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:硬件設(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芯片類型還有其特殊狀態(tài)
initialState:實(shí)際初始化的地址狀態(tài):
有如下?tīng)顟B(tài):
#define VM_STATE_VALID &
[1] [2] [3]