阅读:1504回复:5
谁曾把Windriver生成的驱动作成DLL形式?中断如何处理?
我用Windriver做PCI板卡的驱动程序,想把驱动作成DLL,不知如何处理中断。我把中断处理函数放在DLL的实现函数中,可是有中断的也进不去。请高手救命!!!十万火急!! :(
|
|
最新喜欢:Xman |
沙发#
发布于:2003-03-19 09:57
要在你的代码中调用WinDriver提供的函数(WD_IntEnable、InterruptThreadEnable等等)来处理中断。在这里要注意的是,调用这些中断处理函数,你要提供清中断的代码。因为PCI中断处理是水平触发的,所以当硬件产生中断的时候你必须立即将该中断清除,才能制止他继续打断cpu的工作。
|
|
|
板凳#
发布于:2003-03-21 10:33
楼上的哥们,InterrupThreadEnable()是什么意思,我看了半天源码没有看懂。
|
|
|
地板#
发布于:2003-03-23 10:41
你只要了一些WinDriver工作的基本原理,那么剩下的就简单了。WinDriver提供了一个通用的驱动程序Windrvr.sys。通过该区驱动程序,你可以将板卡上的寄存器映射到用户层的地址空间中。这样在你的应用程序中就可以直接访问这些板卡上的寄存器,从而完成对设备的控制。然而,对于中断的处理要相对复杂一些。对于PCI设备来说他的中断是水平触发,也就是说如果你不清除该中断,那么它一直有效并且会不断的打扰CPU的工作。所以WinDriver的中断处理函数会要求你提供清理中断的代码(通常是将某些值写入特定寄存器来清除中断)。在Windrvr.sys驱动程序完成了清除中断的任务之后,它在通知你的应用程序,设备产生了一个中断。这样你就可以在你的应用程序中处理相关的任务了。
|
|
|
地下室#
发布于:2003-03-23 11:28
你们说的我都知道,而且我在一般的应用程序里面也是这样用的,只是在 DLL时,无论如何都不响应中断。
顺便再问一句:驱动程序分发时,(WIN2000下),是不是只需拷贝Windrvr.sys和wdpnp.sys,inf文件,和驱动就行了,如果在程序中注册了WINDRIVER,还需要象它用户手册上写的那样调用REG.EXE吗? 谁做过分发,能否详细给我说一下步骤? 多谢了! |
|
5楼#
发布于:2003-04-12 18:25
如果针对ISA,即边沿触发中断处理,难道就不需要每次在中断服务程序中清中断了吗? 非常感谢! |
|