degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1384回复:5

关于wince下驱动的内存访问的问题

楼主#
更多 发布于:2004-09-10 08:49
各位老大,我现在在写一个wince下的pci设备的驱动,我获得了pci的内存的基地址,但是我现在不知道在wince下怎么可以进行内存的访问,我以前做别的嵌入式系统是线性内存,所以只要基地址+偏移就可以访问寄存器,但是wince下物理地址和逻辑地址不对应,我就不知道怎么做了
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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;
}

用这个函数,把物理地址映射到徐虚拟地址,你给出你要映射的物理地址首址,和大小,返回一个可用的虚拟地址给你的驱动。
根据地的兄弟们,团结就是力量
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-11 09:26
wxl_50685330老大,是这样的,这个虚拟的地址我已经获得了,我现在用*(volatile UINT32 *)(psio->sioaddress +LCR)=LCR_DLAB;来访问寄存器可以吗,其中sioaddress就是我的虚拟地址的基地址,谢谢老大了
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-09-13 12:57
嗯,就这样:)good luck
根据地的兄弟们,团结就是力量
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-09-13 17:09
谢谢老大,我觉得老大是一个好人,我一向不称赞别人,这是实话。再次感谢。
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-09-16 14:48
我同意wxl_50685330大哥的看法,既然你已经把PCI设备的物理地址转换成了虚拟地址,那么就可以通过虚拟基地址+偏移就可以访问PCI接口芯片内部的寄存器。 :cool:
Come on, let us drive the world.
游客

返回顶部