ml0552
驱动牛犊
驱动牛犊
  • 注册日期2003-05-27
  • 最后登录2003-10-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1719回复:1

DMA传输所用的函数问题,很疑惑!

楼主#
更多 发布于:2003-06-06 17:05
我现在想用windrive中的
BOOL P9054_DMAReadWriteBlock (P9054_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, DWORD dwBytes, BOOL fIsRead, P9054_MODE mode, P9054_DMA_CHANNEL dmaChannel)
这个函数来实现dma.可是我不知道PVOID buf指的是什么?windrive中的解释是hDma->dma.pUserAddr = buf,
即PVOID pUserAddr;  // beginning of buffer
它是指计算机分配给的内存空间的实地址吗?还是指自己在程序中设一个buf[].
还有一个问题:
我想得到一块连续的物理空间,PCI分配给我的地址是df102000.
我写了如下程序:
HANDLE hWD=0;
hWD=WD_Open();
if (hWD==0)
printf(\"device open failed\");
WD_DMA dma;
PVOID buffer=(PVOID)df102000;
dma.dwBytes=10000;
dma.pUserAddr=buffer;
dma.dwOpion=0;
WD_DMA(hWD,&dma);
if(dma==0)
printf(\"lock failed\");
始终无法锁定设备,可是我把
PVOID buffer=(PVOID)malloc(10000);
就可以锁定了,请问这是什么原因?
louis_hioe
驱动小牛
驱动小牛
  • 注册日期2003-04-23
  • 最后登录2008-12-18
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望22点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-04 12:54
我也在使用WinDriver中的函数进行9054的DMA操作。共同进步!
游客

返回顶部