lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1362回复:10

Tom.cat或者懂得9054DMA传输的朋友们帮忙呀!

楼主#
更多 发布于:2004-09-10 20:12
我是用DS开发的驱动,直接将应用程序的开辟的缓冲区通过I.Mdl()传给KDmaTransfer的一个实例m_CurrentTransfer的,缓冲区时64KBytes,但是每次DMA都不能实现64KBytes,最多只有0x7FC0字节(不到32KBytes)
希望大家帮忙怎么一次DMA传输64kBytes的数?!
wangy00
驱动牛犊
驱动牛犊
  • 注册日期2001-10-30
  • 最后登录2007-03-14
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-09-11 09:23
我用的是Windriver,DMA缓冲区是由DMALock申请的
并且64k应该是连续空间,
你应用程序申请的可能不是连续的
[size=3][color=red]狂喜中......[/color][/size]
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-11 15:56
应用程序是用new BYTE[65536]开辟的缓冲区,应该是连续的吧?
wangy00
驱动牛犊
驱动牛犊
  • 注册日期2001-10-30
  • 最后登录2007-03-14
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-09-11 16:31
据VC程序工作的原理,我理解new申请的空间不一定是连续的。

最好看看DS的例子,WD中就有相应的例子程序
[size=3][color=red]狂喜中......[/color][/size]
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2004-09-11 20:32
应用程序申请的内存,基本能保证“是连续”的
yjhleaf
驱动小牛
驱动小牛
  • 注册日期2001-11-04
  • 最后登录2005-11-23
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-09-12 14:16
你可以让DMA分页传输试试,在DMA中断服务例程判断下DMA的数据长度参数,如果小于你的长度,再让他启动次DMA,把DMA的地址、长度在置一次。
忽如一夜春风来,千树万树梨花开。
wisywyx
驱动牛犊
驱动牛犊
  • 注册日期2004-06-14
  • 最后登录2009-07-17
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-09-13 09:06
我的可以一次DMA传输256kB的

TheMdl = new (NonPagedPool) KMemory(DMA_VirtualAddress, BUFFER_SIZE);//Memory Descriptor List
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2004-09-14 14:30
用户被禁言,该主题自动屏蔽!
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-09-14 15:41
to:wisywyx
如果在驱动中申请是用公用缓冲区作为DMA数据区吗?我的是用应用程序缓冲区作为DMA的数据区的,不行吗?
不用KDmaTransfer和KCommonDmaBuffer类吗?
sunhongbo_li
驱动牛犊
驱动牛犊
  • 注册日期2004-01-06
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-09-17 11:45
我用的是block方式,每次4k(fpga内做的4kmemory),应用程序(writefile用循环)每次发送4k,单最多发送10几次,以后就不行了,用softice看,就只进了dispatchwrite,而进不了startio,为什么?(ddk写的)
谢谢!!!
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-09-24 09:21
问题已解决,在驱动中开辟内存!
游客

返回顶部