阅读:995回复:1
power_lei 老兄请进
看到了以前的一个帖子,我也遇到了同样的问题,不知道你是怎么解决的?帮帮忙,谢了!
我的邮箱:sunjx2002@sohu.com ============================ 引: 我使用PLX9054-RDK LITE板子,EEPROM中的信息没有做任何操作, 单次的read()和WRITE()的驱动程序已经成功,现在编写DMA的驱动,出现如下问题: 1、我用DRIVERWORKS自己编写他的DMA驱动程序,不知道可行否? 2、如果可行,是否需要什么特别的设置,下面的设置是否正确。 #define MAX_DMA_LENGTH 0x100000 // 0x100000 is 1 MB // Initialize the device descriptor for the DMA object using the assigned resource DEVICE_DESCRIPTION dd; RtlZeroMemory(&dd, sizeof(dd)); dd.Version = DEVICE_DESCRIPTION_VERSION; dd.Master = TRUE; dd.ScatterGather = FALSE; dd.DemandMode = FALSE; dd.AutoInitialize = FALSE; dd.Dma32BitAddresses = TRUE; dd.IgnoreCount = FALSE; // dd.BusNumber = 0; dd.DmaChannel = 0; dd.InterfaceType = PCIBus; dd.DmaWidth = Width32Bits; // PCI default width dd.DmaSpeed = Compatible; dd.MaximumLength = MAX_DMA_LENGTH; // Initialize the DMA adapter object m_Dma.Initialize(&dd, m_Lower.TopOfStack()); 3、如果上面正确,我是使用下面的方法,为什么不能执行LOCAL->PCI的DMA操作? m_CurrentTransfer = new(NonPagedPool) KDmaTransfer(this, &m_Dma); if ( m_CurrentTransfer == NULL ) { status = STATUS_INSUFFICIENT_RESOURCES; //DbgPrint(\"BMDmaTstDevice: unable to allocate transfer object: %x\\n\", status); I.Information() = 0; I.Status() = status; NextIrp(I); } status=m_CurrentTransfer->Initiate( this, &m_Dma, I.Mdl(), FromDeviceToMemory, LinkTo(OnDmaReady), NULL, NULL, false ); 出现的现象是: 1>、决大多数情况下不能进入ONDMAREADY()回调程序。 2>、有的时候,会直接跳入KMEMORY.h文件,提示:break due to page fault。 请各位专家给个提示。 |
|
沙发#
发布于:2004-08-11 23:05
不好意思,现在才看到,已经好了吧。:)
|
|