|
WINCE 在map.a文件中的一个地址映射表,
OEMAddressTable
;;;-------------------------------------------------------------
;;; Virt Addr Phys Addr MB
;;;-------------------------------------------------------------
DCD 0x80000000, 0x02000000, 30 ; 30 MB SRAM(SRAM/ROM) BANK 0
DCD 0x82000000, 0x08000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 1
DCD 0x84000000, 0x10000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 2
DCD 0x86000000, 0x18000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 3
DCD 0x88000000, 0x20000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 4
DCD 0x8A000000, 0x28000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 5
DCD 0x8C000000, 0x30000000, 64 ; Hanson change:64 MB DRAM B
。。。。
DCD 0x91600000, 0x56000000, 1 ; I/O Port register
在2440.h中
#define IOP_BASE 0xB1600000 // 0x56000000
#define IOP_PHY_BASE 0x56000000
typedef struct {
unsigned int rGPACON; // 00
unsigned int rGPADAT;
unsigned int rPAD1[2];
unsigned int rGPBCON; // 10
unsigned int rGPBDAT;
unsigned int rGPBUP;
unsigned int rPAD2;
...
unsigned int rGPJUP;
unsigned int rPAD9;
}IOPreg;
比如DCD 0x91600000, 0x56000000它将I/O Port register的物理地址映射到了0x91600000,
然后我们可以通过 VirtualAlloc()和VirtualCopy()内存也址与虚拟地址IOP_BASE邦定,访问到0x56000000.
我想问的是:
我们定义了 volatile IOPreg *v_pIOPRegs,可通过 v_pIOPRegs->rGPACON访问GPACON寄存器,可以通过 v_pIOPRegs->rGPADAT访问GPADAT寄存器;但是我们只定义了IOP_BASE这些寄存器的起始地址(GPACON 0x56000000),
GPADAT,rPAD1[2],rGPBCON...这些寄存器的地址并没有明确的被定义到哪个地址呀?这怎么能访问到呢?
请教各位大侠,指点下!
|
|