阅读:1719回复:1
DMA传输所用的函数问题,很疑惑!
我现在想用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); 就可以锁定了,请问这是什么原因? |
|
沙发#
发布于:2003-07-04 12:54
我也在使用WinDriver中的函数进行9054的DMA操作。共同进步!
|
|