阅读:1994回复:13
高分求救!9054一次DMA传输最多可以传多少数?
应用程序传给驱动的缓冲区是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传输不要分割最多能传多大? 另外请教如何分隔了以后继续正常传输呀? 高分求救! |
|
沙发#
发布于:2004-08-09 15:23
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2004-08-09 18:06
能说的详细点吗?
如果几M的话,一次能传完吗?分割几次传输怎么控制呀? |
|
地板#
发布于:2004-08-10 09:58
用户被禁言,该主题自动屏蔽! |
|
地下室#
发布于:2004-08-10 10:42
我的为什么不行呀?会是哪里的问题?
64KBytes都不行,还要分割,如果要分割的话,该怎么处理? 武安河书上的例子中比较ULONG)pXfer->BytesRemaining()==I.ReadSize()干什么? |
|
5楼#
发布于:2004-08-11 15:03
50分求救都没人肯详细点回答呀?!
|
|
6楼#
发布于:2004-08-12 15:34
有人按照武安河书上9054的例子成功的一次DMA传输64KBytes以上的吗?
知道的回个贴呀! |
|
7楼#
发布于:2004-08-13 14:42
顶!
|
|
8楼#
发布于:2004-08-13 21:53
没试过,帮你顶一下
|
|
|
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); 真心请教,急! |
|
10楼#
发布于:2004-09-10 20:10
Tom.cat帮忙呀!
我是用DS开发的驱动,直接将应用程序的开辟的缓冲区通过I.Mdl()传给KDmaTransfer的一个实例m_CurrentTransfer的,缓冲区时64KBytes,但是每次DMA都不能实现64KBytes,最多只有0x7FC0字节(不到32KBytes) 希望大家帮忙怎么一次DMA传输64kBytes的数?! |
|
11楼#
发布于:2004-09-11 09:34
控制问题,刚才在别的地方回答了
你再试试 |
|
|
12楼#
发布于:2004-09-11 16:29
不知道MAX_DMA_LENGTH 0x100000 定义的有什么意义,明明是一兆,却实现不了一次传输一兆!
|
|
13楼#
发布于:2004-09-20 11:28
在驱动中用DMA系统公用缓冲区传输,可以达到我的要求了,问题已解决,谢谢各位!
|
|