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

高分求救!9054一次DMA传输最多可以传多少数?

楼主#
更多 发布于:2004-08-09 09:14
应用程序传给驱动的缓冲区是64kBytes,但是一次DMA传输只能传0X7F98,我是按照武安河的书上做的,进入continue()之后再次调用OnDmaReady,但是有个判断:
if((ULONG)pXfer->BytesRemaining()==I.ReadSize())
StartDMA(ptd->td_PhysAddr.LowPart,ptd->td_Length);
I.ReadSize()一直是应用程序要求的64kBytes,但是BytesRemaining()自动减少了,所以就不再调用OnDMAReady,以至于没有DMA传输完成中断,无法返回应用程序而死机

9054一次DMA传输不要分割最多能传多大?
另外请教如何分隔了以后继续正常传输呀?
高分求救!
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-08-09 15:23
用户被禁言,该主题自动屏蔽!
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-08-09 18:06
能说的详细点吗?
如果几M的话,一次能传完吗?分割几次传输怎么控制呀?
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2004-08-10 09:58
用户被禁言,该主题自动屏蔽!
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-08-10 10:42
我的为什么不行呀?会是哪里的问题?

64KBytes都不行,还要分割,如果要分割的话,该怎么处理?
武安河书上的例子中比较ULONG)pXfer->BytesRemaining()==I.ReadSize()干什么?

lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-08-11 15:03
50分求救都没人肯详细点回答呀?!
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-08-12 15:34
有人按照武安河书上9054的例子成功的一次DMA传输64KBytes以上的吗?

知道的回个贴呀!
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-08-13 14:42
顶!
linjing
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2008-12-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-08-13 21:53
没试过,帮你顶一下
粼粼
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-09-09 14:58
我的只能达到30kBytes,而且第一次可以,以后再用就不行,我的DMA有关的程序入下,麻烦大家看看,谢谢!
#define MAX_DMA_LENGTH 0x100000
DEVICE_DESCRIPTION dd;
RtlZeroMemory(&dd, sizeof(dd));
dd.Version = DEVICE_DESCRIPTION_VERSION;
dd.Master = TRUE;
dd.ScatterGather = FALSE;
dd.DemandMode = TRUE;
dd.AutoInitialize = FALSE;
dd.Dma32BitAddresses = TRUE;
dd.IgnoreCount = FALSE;
dd.DmaChannel = 0;
dd.InterfaceType = PCIBus;
dd.DmaWidth = Width32Bits;
dd.DmaSpeed = Compatible;
dd.MaximumLength = MAX_DMA_LENGTH;
// Initialize the DMA adapter object
m_Dma.Initialize(&dd, m_Lower.TopOfStack());
在StartDma例程中
m_IoPortRange0.outd(DMAMODE0,0x20DC0);
//DMA Channel0 PCI Address
m_IoPortRange0.outd(DMAPADR0,PAddress);
//DMA Channel0 Local Address,本地fifo地址是0xC
m_IoPortRange0.outd(DMALADR0,0xC);
//DMA Channel0 Transfer Size(Bytes)
m_IoPortRange0.outd(DMASIZ0,NBytes);
//从PCI总线到Local总线
m_IoPortRange0.outd(DMADPR0,0x0);
//Channel0 Enable,Start
m_IoPortRange0.outb(DMACSR0,0x3);
真心请教,急!
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-09-10 20:10
Tom.cat帮忙呀!
我是用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分
11楼#
发布于:2004-09-11 09:34
控制问题,刚才在别的地方回答了
你再试试
[size=3][color=red]狂喜中......[/color][/size]
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-09-11 16:29
不知道MAX_DMA_LENGTH 0x100000 定义的有什么意义,明明是一兆,却实现不了一次传输一兆!
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-09-20 11:28
在驱动中用DMA系统公用缓冲区传输,可以达到我的要求了,问题已解决,谢谢各位!
游客

返回顶部