wangjisheng
驱动小牛
驱动小牛
  • 注册日期2002-11-06
  • 最后登录2011-07-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望20点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:1581回复:9

(79分)求driverworks编写的DMA驱动,不要书上的例子

楼主#
更多 发布于:2003-08-26 08:54
谁有cy7c09449的用DS编写的DMA驱动,给我参考一下,一定给分
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-26 09:18
我没有,但我看过DS的DMA的模式,对于总线主设备,DS的DMA模型很死的,你只要按它的要求做就好了。武安河最近出的一本书上有9054的例子,可以参考参考!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
wangjisheng
驱动小牛
驱动小牛
  • 注册日期2002-11-06
  • 最后登录2011-07-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望20点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-26 09:25
我也是用ds作的,但是和武安和做得不太一样,我的没有IRP_MJ_READ等IRP,也没有serialRead等函数,也没有用startio()
所以我不知道应该在那里初始化dma,我只有deviceiocontrol
flying
驱动小牛
驱动小牛
  • 注册日期2002-08-01
  • 最后登录2016-06-19
  • 粉丝0
  • 关注0
  • 积分197分
  • 威望70点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-08-26 13:51
你可以试试用DEVICEIOCONTROL(),带DMA_READ,DMA_WRITE,等控制码来实现.
不过,不知道怎么回事,我做的DMA_READ,DMA_WRITE一运行到该函数就会出错.
你可以试试,然后我们可以一起讨论一下,你看可否?

那里是我的问题,还有一些代码,不知对你有否帮助:
http://www.driverdevelop.com/forum/viewthread.php?tid=49816
wangjisheng
驱动小牛
驱动小牛
  • 注册日期2002-11-06
  • 最后登录2011-07-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望20点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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()
你是如何解决中断共享的,如何做的?
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-26 16:38
我也是用ds作的,但是和武安和做得不太一样,我的没有IRP_MJ_READ等IRP,也没有serialRead等函数,也没有用startio()
所以我不知道应该在那里初始化dma,我只有deviceiocontrol

其实用DEVICEIOCTL和用READFILE,WRITEFILE的道理是一样的,用READFILE和WRITEFILE的时候传输对象的初始化是在SERIALREAD中做的,用DEVICEIOCTL的话,可以在SERIAL_DEVICEIOCTL里做(串行化处理IRP)。
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
xtli_21
驱动牛犊
驱动牛犊
  • 注册日期2003-07-24
  • 最后登录2005-12-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-08-28 16:17
把事件变量做成全局的,或者作为参数传给线程就可以了。如果作为参数传递的话,可以这样做:
HANDLE hEvent;
hEvent = *(HANDLE *) m_hEvent;
WaitForSingleObject( hEvent,INFINITE);
试试看吧,VC的基本东西
wangjisheng
驱动小牛
驱动小牛
  • 注册日期2002-11-06
  • 最后登录2011-07-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望20点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-08-28 18:54
我试试看,解释一下原因吧!
flying
驱动小牛
驱动小牛
  • 注册日期2002-08-01
  • 最后登录2016-06-19
  • 粉丝0
  • 关注0
  • 积分197分
  • 威望70点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2003-08-28 22:19
同意xtli_21的说法!
你再试试吧

另外,TO: xtli_21
想你是驱动程序中的高手,能否向你请教一个有关驱动程序DMA的问题?
zytzjx
驱动牛犊
驱动牛犊
  • 注册日期2001-12-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望41点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2003-11-19 11:22
这个我有用DDK做的
Wecan
游客

返回顶部