PCI9054 DMA启动后,用户DMA缓冲区的数据以4KB为单位在更新,更新速度很慢,请帮忙分析可能的原因。以下是根据原型的实现。
1 这个函数是提交DMA参数的代码
int sub_49D5F0(HANDLE hDevice, int a2, int *a3)
{
int v4;
int *lpInBuffer;
lpInBuffer[19] = 3;//DMA通道号
*lpInBuffer = 0;
lpInBuffer[16] = 0x00060201;//动态调试为固定值
lpInBuffer[17] =0;//动态调试为固定值
lpInBuffer[18] = 0;//动态调试为固定值
DeviceIoControl(hDevice, 0x83001100, lpInBuffer, 0x5Cu, lpInBuffer, 0x5Cu, 0, (LPOVERLAPPED)(lpInBuffer + 23));
v4 = *lpInBuffer;
return v4;
}
2、这个函数是发送DMA传输开始命令的
int sub_49D6C0(HANDLE hDevice, int a2, const void *a3)
{
int v4;
int *lpInBuffer;
int v6[3];
lpInBuffer[19] =3;DMA通道号
v6[0] = 用于映射的DMA缓冲区地址;
v6[1] = 0x80000;//可能是传输长度,动态调试为固定值
v6[2] = 0x20000;//动态调试为固定值
v6[3]=8;
qmemcpy(lpInBuffer + 4, v6, 0x30u);
DeviceIoControl(hDevice, 0x83001122, lpInBuffer, 0x5Cu, lpInBuffer, 0x5Cu, 0, (LPOVERLAPPED)(lpInBuffer + 23));
v4 = *lpInBuffer;
return v4;
}