阅读:1677回复:9
(79分)求driverworks编写的DMA驱动,不要书上的例子
谁有cy7c09449的用DS编写的DMA驱动,给我参考一下,一定给分
|
|
沙发#
发布于:2003-08-26 09:18
我没有,但我看过DS的DMA的模式,对于总线主设备,DS的DMA模型很死的,你只要按它的要求做就好了。武安河最近出的一本书上有9054的例子,可以参考参考!
|
|
|
板凳#
发布于:2003-08-26 09:25
我也是用ds作的,但是和武安和做得不太一样,我的没有IRP_MJ_READ等IRP,也没有serialRead等函数,也没有用startio()
所以我不知道应该在那里初始化dma,我只有deviceiocontrol |
|
地板#
发布于:2003-08-26 13:51
你可以试试用DEVICEIOCONTROL(),带DMA_READ,DMA_WRITE,等控制码来实现.
不过,不知道怎么回事,我做的DMA_READ,DMA_WRITE一运行到该函数就会出错. 你可以试试,然后我们可以一起讨论一下,你看可否? 那里是我的问题,还有一些代码,不知对你有否帮助: http://www.driverdevelop.com/forum/viewthread.php?tid=49816 |
|
地下室#
发布于:2003-08-26 14:35
flying:
好的,我试一试吧,你的有进展吗? 我还有一个小问题就是,我的应用程序用对话框编写的 我利用事件通知方法知道驱动程序有中断来了,我在应用程序中建立了线程 DWORD WINAPI ServiceThread(PVOID m_hEvent) { while(TRUE) { WaitForSingleObject(m_hEvent,INFINITE); AfxMessageBox( \"接收到中断\", MB_OK ); if(!DeviceIoControl(m_hDevice,PCIDP_IOCTL_CON,NULL,0,pci,sizeof(pci_cfg),&nOutput,NULL)) { MessageBox(\"控制错误\",\"警告\",MB_OK|MB_ICONHAND); } } return 0; } 我就是想在线程中对数据进行读取,但是在线程中却不认识句柄m_hEvent,也不认识MessageBox()函数,只认识AfxMessageBox() 你是如何解决中断共享的,如何做的? |
|
5楼#
发布于:2003-08-26 16:38
我也是用ds作的,但是和武安和做得不太一样,我的没有IRP_MJ_READ等IRP,也没有serialRead等函数,也没有用startio() 其实用DEVICEIOCTL和用READFILE,WRITEFILE的道理是一样的,用READFILE和WRITEFILE的时候传输对象的初始化是在SERIALREAD中做的,用DEVICEIOCTL的话,可以在SERIAL_DEVICEIOCTL里做(串行化处理IRP)。 |
|
|
6楼#
发布于:2003-08-28 16:17
把事件变量做成全局的,或者作为参数传给线程就可以了。如果作为参数传递的话,可以这样做:
HANDLE hEvent; hEvent = *(HANDLE *) m_hEvent; WaitForSingleObject( hEvent,INFINITE); 试试看吧,VC的基本东西 |
|
7楼#
发布于:2003-08-28 18:54
我试试看,解释一下原因吧!
|
|
8楼#
发布于:2003-08-28 22:19
同意xtli_21的说法!
你再试试吧 另外,TO: xtli_21 想你是驱动程序中的高手,能否向你请教一个有关驱动程序DMA的问题? |
|
9楼#
发布于:2003-11-19 11:22
这个我有用DDK做的
|
|
|