kucy_zhou@163.c
驱动牛犊
驱动牛犊
  • 注册日期2003-11-26
  • 最后登录2005-11-04
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:949回复:0

我想在中断处理下进行dma传送数据可以么?

楼主#
更多 发布于:2004-08-26 11:09
我的程序如下:
VOID P9054Device::DpcFor_Irq(PVOID Arg1, PVOID Arg2)
{
    ULONG data;
    t << "interrpt dpc  \n";
    data=m_MemoryRange0.ind(0x68);
    if (!(data&0x00008000))
   {
        DbgPrint("%d bytes remained in current dma\n");
m_DmaTr.BytesRemaining();

   //唯一的操作,继续进行下一次分割传输
   m_DmaTr.Continue(UseTransferSize);
   }
   else
   {

    KIrp I(m_DriverManagedQueue.CurrentIrp());

    m_DmaTr.Initiate(this,&m_Dma,I.Mdl(),FromDeviceToMemory,
            LinkTo(CallBack_Dma),&m_CommonBuffer,NULL,FALSE); //dma 初始化
  
m_DriverManagedQueue.PnpNextIrp(I);
}

// I.Status() = STATUS_SUCCESS;
// I.Information() = 0;
    
// PnpNextIrp completes this IRP and starts processing
// for the next IRP in the driver managed queue.

  
UNREFERENCED_PARAMETER(Arg1);
UNREFERENCED_PARAMETER(Arg2);
}
可是不知道为什么程序在m_DmaTr.Initiate时出错好像在第三个参数I.Mdl时,不知道是什么原因,然后出现蓝屏提示说IRQL_NOT_LESS_EQUAL可是我看帮助说DPC在DISPATCH_LEVEL以下,而m_DmaTr.Initiate也是在DISPATCH_LEVEL以下亚,这是为什么呢?
游客

返回顶部