wei_ziyong
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2010-04-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望16点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
阅读:969回复:3

DMA传数?

楼主#
更多 发布于:2004-05-18 14:20
    在Driver Works中,我的驱动程序能够顺利的启动设备进行主控DMA的传输。设备一次DMA操作的最大数据量64k(65535)个字节。但是,我的dma 操作的最大数据量不能够超过28960个字节,一超过这个值,机器就回自动重新启动。
    当指定一个比28960大的数据量比如30000时,在调用SequenceTransferDescriptor之前,通过驱动程序输出的调试信息能够看到30000个字节的缓冲确实传给了驱动程序,但是,当调用
SequenceTransferDescriptor()函数获取应用程序30000个字节缓冲的段描述时,他返回的缓冲的大小却始终是,28960。
   他怎么会把应用程序的缓冲区变小了?请问这是什么原因?驱动程序只传送28960个字节,当执行到延迟过程调用函数的时后,机器就重起了。请各位高手帮帮忙?

VOID C6403Device::OnDmaReady(KDmaTransfer* pXfer, KIrp I)
{
   t << \"Entering OnDmaReady, \" << I << EOL;
  t << \"BytesRemaining: \" << (ULONG)pXfer->BytesRemaining() << EOL << EOL;

if (pXfer->BytesRemaining() == 0)
{
   t << \"Entering BytesRemaining \" << EOL;
t << \"BytesRemaining: \" << (ULONG)pXfer->BytesRemaining() << EOL << EOL;

pXfer->Terminate();
I.Information() = I.ReadSize(CURRENT);
I.Status() = STATUS_SUCCESS;
PnpNextIrp(I);

m_CurrentTransfer = NULL;
delete pXfer;
return;
}

PTRANSFER_DESCRIPTOR ptd;
while (pXfer->SequenceTransferDescriptors(&ptd)) {

t << \"Physical Address: \" << ptd->td_PhysAddr.LowPart << EOL << EOL<< \"Length is: \" <<  ptd-td_Length<<\".\"<<EOL<<EOL;
}
if ((ULONG) pXfer->BytesRemaining() == I.ReadSize())
StartDMA(ptd->td_PhysAddr.LowPart,ptd->td_Length);

}
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-05-18 15:23
用户被禁言,该主题自动屏蔽!
wei_ziyong
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2010-04-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望16点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-18 16:31
HI:
   TOM.Cat,你好!  
   我用的是TMS320C6416的主控DMA Write 从DSP那边取数据到计算机内存。
  DMA我能够启动,而且也能够进行数据传输。就是一次DMA操作的数据不能够超过28960个字节,他的最大数据是64KB,才接进一半就不行了。
下面有我的程序的原代吗:你能够帮我看一下么?谢谢,TOM.Cat.
附件名称/大小 下载次数 最后更新
2004-05-18_c6403.rar (4293KB)  20
wei_ziyong
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2010-04-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望16点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-18 16:32
HI:
   TOM.Cat,你好!  
   我用的是TMS320C6416的主控DMA Write 从DSP那边取数据到计算机内存。
  DMA我能够启动,而且也能够进行数据传输。就是一次DMA操作的数据不能够超过28960个字节,他的最大数据是64KB,才接进一半就不行了。
下面有我的程序的原代吗:你能够帮我看一下么?谢谢,TOM.Cat.
开发环境:win2000,driverstudio
附件名称/大小 下载次数 最后更新
2004-05-18_c6403.rar (4293KB)  10
游客

返回顶部