阅读:1380回复:10
Tom.cat或者懂得9054DMA传输的朋友们帮忙呀!
我是用DS开发的驱动,直接将应用程序的开辟的缓冲区通过I.Mdl()传给KDmaTransfer的一个实例m_CurrentTransfer的,缓冲区时64KBytes,但是每次DMA都不能实现64KBytes,最多只有0x7FC0字节(不到32KBytes)
希望大家帮忙怎么一次DMA传输64kBytes的数?! |
|
沙发#
发布于:2004-09-11 09:23
我用的是Windriver,DMA缓冲区是由DMALock申请的
并且64k应该是连续空间, 你应用程序申请的可能不是连续的 |
|
|
板凳#
发布于:2004-09-11 15:56
应用程序是用new BYTE[65536]开辟的缓冲区,应该是连续的吧?
|
|
地板#
发布于:2004-09-11 16:31
据VC程序工作的原理,我理解new申请的空间不一定是连续的。
最好看看DS的例子,WD中就有相应的例子程序 |
|
|
地下室#
发布于:2004-09-11 20:32
应用程序申请的内存,基本能保证“不是连续”的
|
|
5楼#
发布于:2004-09-12 14:16
你可以让DMA分页传输试试,在DMA中断服务例程判断下DMA的数据长度参数,如果小于你的长度,再让他启动次DMA,把DMA的地址、长度在置一次。
|
|
|
6楼#
发布于:2004-09-13 09:06
我的可以一次DMA传输256kB的
TheMdl = new (NonPagedPool) KMemory(DMA_VirtualAddress, BUFFER_SIZE);//Memory Descriptor List |
|
7楼#
发布于:2004-09-14 14:30
用户被禁言,该主题自动屏蔽! |
|
8楼#
发布于:2004-09-14 15:41
to:wisywyx
如果在驱动中申请是用公用缓冲区作为DMA数据区吗?我的是用应用程序缓冲区作为DMA的数据区的,不行吗? 不用KDmaTransfer和KCommonDmaBuffer类吗? |
|
9楼#
发布于:2004-09-17 11:45
我用的是block方式,每次4k(fpga内做的4kmemory),应用程序(writefile用循环)每次发送4k,单最多发送10几次,以后就不行了,用softice看,就只进了dispatchwrite,而进不了startio,为什么?(ddk写的)
谢谢!!! |
|
10楼#
发布于:2004-09-24 09:21
问题已解决,在驱动中开辟内存!
|
|