阅读:2372回复:8
关于WDM驱动程序中断服务例程的问题。
WDM驱动程序中的中断服务例程,
按照cant书上的说法, 要尽快清除中断, 然后调用DPC。 那么具体要进行那些操作呢? 那位大虾有这方面的源程序, 衷心的感谢大家的帮忙。 我这里不知道什么地方出了问题, 中断的时候就死机, 而且中断也没有按照程序中的预想被拉下来。 |
|
|
沙发#
发布于:2002-06-24 17:48
本站的专栏文章《nt/2000pci设备驱动程序详解》,你去看看,有ISR的源代码啊。你可以参考下。还有,你有没有清楚你设备的中断呢?
|
|
|
板凳#
发布于:2002-06-25 08:59
。。。。
|
|
地板#
发布于:2002-06-25 18:31
在isr里要尽快判断是否是你的中断,若不是,立即退出,若是,则
清掉中断后请求dpc,退出 |
|
|
地下室#
发布于:2002-06-26 13:53
首先判断是否是自己的中断
如果中断是电平触发如PCI卡,你得去除卡上的中断信号 然后进入DPC处理 |
|
5楼#
发布于:2002-06-28 05:18
要做的事如果不多,直接在isr里做了就是了,不用非要开个dpc,比如刷几个寄存器之类的。
一般isr里就是简单的访问一下硬件的寄存器,看看发生中断的原因是什么,dpc里可干的事情就比较多了,比方启动个dma什么的。 中断死机原因很多,假设你硬件没问题,如果是蓝屏,那么多半是访问了分页内存,如果压根整个系统就死了,多半是你isr里有个死循环或者干脆就是硬件访问的不对。别的原因比较少见,如果有,倒是不妨贴出来看看。 |
|
6楼#
发布于:2002-06-28 09:03
谢谢大家的关注。我具体描述一下我所遇到的情况,希望能够说得清楚一些:
我所遇到的死机的情况,不是出现蓝屏幕(Win98),而是屏幕定格,外设(键盘鼠标)不起作用,只有Reset重启。用DebugPrint跟踪调试语句,根本无法来得及显示。我调试的时候遇到了以下几种不同的情况: 1,检查端口和中段分配是否正确,经过测试,端口和中断号都分配正确,所以硬件对应的资源部分应该没有什么问题。至少控制命令和其他一些端口命令都发送到正确的地方,中断也能够正确响应。 2,将Dpc注释掉之后,发现中断调用正常,用示波器观察总线上相应的中断输入,发现屏幕死机之后中断信号仍然可以正常响应,并且由中断服务例程将每次的中断信号拉下来。因此怀疑只是外设不响应,CPU工作并没有停止。这种现象怀疑为中断处理例程中的一个读端口命令在总线上引起的电磁干扰导致外设死掉。在注释掉这条语句换为直接为响应内存区赋值后,没有死机,且程序好像工作正常。 3,加入Dpc之后,在上面两种情况下都死机,由于没有测量IRQ信号,不知道CPU是否也死掉,死机的现象如开始时所述。 请各位打下帮忙分析一下可能是什么原因导致了这种现象的发生,非常地感谢,我会尽量多送分的。 [编辑 - 6/28/02 by zhangc98] |
|
|
7楼#
发布于:2002-06-28 09:12
再简要说一下中断例程所要完成的工作。
首先中断触发源为硬件设备中的FIFO半满信号。 中断产生时,ISR首先检查是否是FIFO半满中断,然后写寄存器,禁止中断再次产生并将中断信号拉下,然后完成数据缓冲区的检查,保证其空间的大小。接着从FIFO中读出一半的数据(256byte)存入到指定Buffer中,然后调用dpc。最后复位寄存器,允许中断产生,isr结束。 DPC中完成的工作主要是将Buffer中的数据转入BufferTwo中,并根据不同的采集条件和停止条件将数据进行分帧和重组,以便于在应用程序中显示。 这就是整个中断过程的任务,大家看看有什么问题/ |
|
|
8楼#
发布于:2002-06-28 11:32
把允许中断放到DPC的返回前看看呢?
|
|
|