VxWorks中的地址映射
作者Email:
在运用嵌入式系统VxWorks和MPC860进行通信系统设计开发时,会遇到一个映射地址不能访问的问题。
缺省情况下,VxWorks系统已经进行了如下地址的映射
memory地址、bcsr地址、PC_BASE_ADRS地址、Internal Memory地址、rom地址等,但是当你的硬件开发中要加上别的外设时,如,对这些外设的访问也是通过地址形式进行读写,如果你没有加相应的地址映射,那么是无法访问这些外设的。
和VxWorks缺省地址映射类似,你也可以进行相应的地址映射。
如下是地址映射原理及实现
1、地址映射结构
在Tornado“target“h“文件中
typedef struct phys_mem_desc
{
void *virtualAddr;
void *physicalAddr;cacheable
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“target“config“ads860“ 文件中:
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 |

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。