阅读:1453回复:5
关于wince下驱动的内存访问的问题
各位老大,我现在在写一个wince下的pci设备的驱动,我获得了pci的内存的基地址,但是我现在不知道在wince下怎么可以进行内存的访问,我以前做别的嵌入式系统是线性内存,所以只要基地址+偏移就可以访问寄存器,但是wince下物理地址和逻辑地址不对应,我就不知道怎么做了
|
|
论坛版主
|
沙发#
发布于:2004-09-10 13:52
PVOID MyVirtualMap(PVOID PhyMem, UINT32 size)
{ PVOID pVirtualAddr; pVirtualAddr = VirtualAlloc( 0, size, MEM_RESERVE, PAGE_NOACCESS ); if(pVirtualAddr == NULL) { RETAILMSG(1,(TEXT("MyVirtualMap : pVirtualAddr is not allocated\n\r"))); return NULL; } if( !VirtualCopy(pVirtualAddr, PhyMem, size, PAGE_READWRITE | PAGE_NOCACHE ) ) { RETAILMSG(1, (TEXT("MyVirtualMap : pVirtualAddr is not mapped\n\r"))); VirtualFree((PVOID)pVirtualAddr, 0, MEM_RELEASE); return NULL; } return pVirtualAddr; } 用这个函数,把物理地址映射到徐虚拟地址,你给出你要映射的物理地址首址,和大小,返回一个可用的虚拟地址给你的驱动。 |
|
板凳#
发布于:2004-09-11 09:26
wxl_50685330老大,是这样的,这个虚拟的地址我已经获得了,我现在用*(volatile UINT32 *)(psio->sioaddress +LCR)=LCR_DLAB;来访问寄存器可以吗,其中sioaddress就是我的虚拟地址的基地址,谢谢老大了
|
|
论坛版主
|
地板#
发布于:2004-09-13 12:57
嗯,就这样:)good luck
|
|
地下室#
发布于:2004-09-13 17:09
谢谢老大,我觉得老大是一个好人,我一向不称赞别人,这是实话。再次感谢。
|
|
5楼#
发布于:2004-09-16 14:48
我同意wxl_50685330大哥的看法,既然你已经把PCI设备的物理地址转换成了虚拟地址,那么就可以通过虚拟基地址+偏移就可以访问PCI接口芯片内部的寄存器。 :cool:
|
|
|