Over
驱动牛犊
驱动牛犊
  • 注册日期2001-09-26
  • 最后登录2002-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:963回复:0

amcc如何使用nvram中分配的内存进行dma传输?

楼主#
更多 发布于:2002-02-05 17:00
是不是有什么地方没考虑到?程序运行正常,但收到的都是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);将数据传给应用
程序。但是得到的数据全是零!!


当我们仰望星空,其实是在回顾历史
游客

返回顶部