阅读:3020回复:4
关于IoConnectInterrupt。
在startdevice中,我得到了CmResourceTypeInterrupt。值如下:Interrupt vector 0000003B IRQL 16 Affinity 1 Mode 0 irqshare=1
然后我在startdevice调用的最后写了: status = IoConnectInterrupt(&pdx->InterruptObject, (PKSERVICE_ROUTINE) OnInterrupt,(PVOID) pdx, NULL, vector, irql, irql, mode, irqshare, affinity, FALSE); 编译,安装都正常。但重起后2000系统死机,softice报错。 注释掉这一行后,安装重起后一切正常,端口读写等均正确。 这是怎么回事呢?这句话究竟干了什么,会出现这种问题?而且本来 我前面还有个函数写pci卡上的寄存器以启动中断,后来我都注释掉 了,还是一加这句就死机。 谢谢! |
|
最新喜欢:xiangs...
|
沙发#
发布于:2001-06-29 20:59
这是因为你没有响应中断,并把中断清掉。
|
|
板凳#
发布于:2001-06-29 21:35
什么意思?我有OnInterrupt函数,而且我没运行app启动dma啊,不该有中断到来。我是安装后就重起的,然后进入系统时死机,我的硬件不能那时来中断啊?
我把安装时初始化Interrupt的函数都注掉了,也就是没往硬件的Interrupt相关寄存器里写东西,还是启动就死机。难道是机器启动后就来了中断,OnInterrupt就响应了,因为OnInterrupt里确实可能有毛病,所以死机了? |
|
|
地板#
发布于:2001-06-30 14:36
这句话是设定一个中断响应函数,指定该中断的各个属性。注意,在这个函数返回前,可能就有中断发生了。
ResetDevice(pdx); status = IoConnectInterrupt(...); KeSynchronizeExecution(pdx->InterruptObject, (PKSYNCHRONIZE_ROUTINE) SetupDevice, pdx); 象这样,在ResetDevice中,你得复位设备,清除中断,然后在SetDevice中你向中断控制寄存器中写入控制字,由于这步有可能要使用一些在ISR中也要用得寄存器,所以使用KeSynchornizeExecution来同步执行 |
|
|
地下室#
发布于:2001-07-02 15:48
opera同志:
你好!我今天下午在调试我的驱动程序时也同样遇到了这个问题。 驱动程序安装完毕后,不要启动,直接去设备属性中查看设备资源,在98/ME中断号不对,在2000中没有分配中断号。两者的I/O资源都是有的,中断号的申请,触发方式都是我的硬件设置的。 我不知道,你的错误表现形式是否和我的一样。 如果,你的问题解决了,也告诉我一声。谢了先! |
|