iccat
驱动牛犊
驱动牛犊
  • 注册日期2001-12-28
  • 最后登录2003-09-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1504回复:5

谁曾把Windriver生成的驱动作成DLL形式?中断如何处理?

楼主#
更多 发布于:2003-03-18 22:23
我用Windriver做PCI板卡的驱动程序,想把驱动作成DLL,不知如何处理中断。我把中断处理函数放在DLL的实现函数中,可是有中断的也进不去。请高手救命!!!十万火急!! :(

最新喜欢:

XmanXman
leerom
驱动小牛
驱动小牛
  • 注册日期2001-06-08
  • 最后登录2010-08-31
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-19 09:57
要在你的代码中调用WinDriver提供的函数(WD_IntEnable、InterruptThreadEnable等等)来处理中断。在这里要注意的是,调用这些中断处理函数,你要提供清中断的代码。因为PCI中断处理是水平触发的,所以当硬件产生中断的时候你必须立即将该中断清除,才能制止他继续打断cpu的工作。
leerom
lw535
驱动牛犊
驱动牛犊
  • 注册日期2002-10-13
  • 最后登录2004-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-21 10:33
楼上的哥们,InterrupThreadEnable()是什么意思,我看了半天源码没有看懂。
终于找到组织了......
leerom
驱动小牛
驱动小牛
  • 注册日期2001-06-08
  • 最后登录2010-08-31
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-23 10:41
你只要了一些WinDriver工作的基本原理,那么剩下的就简单了。WinDriver提供了一个通用的驱动程序Windrvr.sys。通过该区驱动程序,你可以将板卡上的寄存器映射到用户层的地址空间中。这样在你的应用程序中就可以直接访问这些板卡上的寄存器,从而完成对设备的控制。然而,对于中断的处理要相对复杂一些。对于PCI设备来说他的中断是水平触发,也就是说如果你不清除该中断,那么它一直有效并且会不断的打扰CPU的工作。所以WinDriver的中断处理函数会要求你提供清理中断的代码(通常是将某些值写入特定寄存器来清除中断)。在Windrvr.sys驱动程序完成了清除中断的任务之后,它在通知你的应用程序,设备产生了一个中断。这样你就可以在你的应用程序中处理相关的任务了。
leerom
iccat
驱动牛犊
驱动牛犊
  • 注册日期2001-12-28
  • 最后登录2003-09-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-23 11:28
你们说的我都知道,而且我在一般的应用程序里面也是这样用的,只是在 DLL时,无论如何都不响应中断。
  顺便再问一句:驱动程序分发时,(WIN2000下),是不是只需拷贝Windrvr.sys和wdpnp.sys,inf文件,和驱动就行了,如果在程序中注册了WINDRIVER,还需要象它用户手册上写的那样调用REG.EXE吗?
  谁做过分发,能否详细给我说一下步骤?
  多谢了!
xinlingzhu
驱动牛犊
驱动牛犊
  • 注册日期2003-04-11
  • 最后登录2003-06-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-12 18:25

如果针对ISA,即边沿触发中断处理,难道就不需要每次在中断服务程序中清中断了吗?
非常感谢!
游客

返回顶部