阅读:1109回复:0
amcc的dma初级问题
是不是有什么地方没考虑到?程序运行正常,但收到的都是0,而不是我发过来的数据。
以下是事先在amcc的nvram中开了块64K字节的内存资源。 设备扩展中声明: { PULONG AmccBaseRegisterAddress1; // Adapter\'s memory phisycal address for dma PHYSICAL_ADDRESS AmccDmaPhAddress1; } { case CmResourceTypeMemory: DebugPrint(\"OsrStartDevice: 内存资源 ...\"); DevExt->AmccDmaPhAddress1 = prdTranslated->u.Memory.Start; DevExt->AmccBaseRegisterAddress1 = (ULONG*)MmMapIoSpace(prdTranslated->u.Memory.Start, prdTranslated->u.Memory.Length, MmNonCached); } 申请到资源后,在设置dma的传输首地址时,如果用AmccDmaPhAddress1.LowPart机器会重起, 用AmccBaseRegisterAddress1则dma正常。。。 WRITE_PORT_ULONG(devExt->AmccBaseRegisterAddress+MWAR_OFF, *DevExt->AmccBaseRegisterAddress1); 并且dma传输结束会产生中断,这时调用 RtlCopyMemory(pbuffersys, DevExt->AmccBaseRegisterAddress1, length);将数据传给应用 程序。但是得到的数据全是零!! |
|
|