阅读:1719回复:15
art baker [Window2000 Dirver]书中第八章的中断程序,有人调通过么?
我按照书中讲的方法去连接并口线, 自制了一个LoopBack Connector但是在调试第八章的的程序时,就是产生不了中断,有人调通过么?
想请教一下. |
|
沙发#
发布于:2005-05-16 14:34
加个电容(要小)是去除闭合瞬间的抖动,在单片机键盘中就是这样去干扰的,当然也可软件去干扰。
在你的按键闭合时不是立即从一个电平状态到另一个状态,而是反复几次后才到另一个状态。具体可查单片机开发方面的书。 |
|
板凳#
发布于:2005-05-16 11:19
像这样一个中断来了,ISR会被调用好多次的道理是什么呢? 一次中断应是一次ISR !! 试试在ISR里把中断disable.看看结果如何 ?? 现在要混几分真不容易 :D :D |
|
地板#
发布于:2005-05-16 09:49
To 楼上的大侠们:
像这样一个中断来了,ISR会被调用好多次的道理是什么呢? 怎么才能从软件和硬件上避免呢? 硬件是不是如qfzcx所说, \"并个小电容\"就可以了, 不太理解其原理,谁能解说一下? |
|
地下室#
发布于:2005-05-14 09:40
看图 : 呵呵,KMK服务到家了 :D :D |
|
|
5楼#
发布于:2005-05-13 21:13
可能是不稳定,输入不可靠的原因,并个小电容试试
|
|
6楼#
发布于:2005-05-13 18:30
To KMK:
为什么会出现这种情况: 有时候调用三次Isr函数 再调用一次Dpc函数, 有时候调用两次Isr函数 再调用一次Dpc函数, 有时候调用一次Isr函数 再调用一次Dpc函数? 就这个程序而言,我觉得Isr 和 Dpc的关系应该是1:1的才对啊? 这说明了什么问题呢? 我跟踪了一下IoRequestDpc这个宏只有在第一次的时候返回一个TRUE,其余时候都是FALSE, 直到DPC处理完毕,下一个中断来临! BOOLEAN InterruptIsr(IN PKINTERRUPT Interrupt, IN OUT PVOID Context) { PDEVICE_OBJECT DeviceObject = Context; KdPrint( (\"Interrupt.sys: Interrupt Service Routine\\n\") ); /* We should check if the interrupt comes from us and return */ IoRequestDpc(DeviceObject, DeviceObject->CurrentIrp, NULL); return TRUE; } |
|
7楼#
发布于:2005-05-13 17:00
To KMK:
谢谢KMK,我用你的方法确实产生了中断,我想问一下你在哪里找到中断的依据的?[先将pin10 接地然后断开] To bmyyyud: \"也可以用SoftIce,用IDT指令看看\" 能描述一下使用这个IDT指令的过程么? |
|
8楼#
发布于:2005-05-13 15:47
看看IoConnectInterrupt()反回是甚麽值,可能中断根本没接上. 也可以用SoftIce,用IDT指令看看 |
|
|
9楼#
发布于:2005-05-13 14:42
看图 :
|
|
10楼#
发布于:2005-05-13 14:22
看看IoConnectInterrupt()反回是甚麽值,可能中断根本没接上.
我不是用Art Baker的code,我是用 http://www.beyondlogic.org/interrupts/winnt_isr_dpc.htm 另外把 HalGetInterruptVector(Isa, 0, pDevExt->Irq, 0, &kIrql, &kAffinity); 里的Isa改成PCIBus试试看. 如果用PCI的结,IoConnectInterrupt()要改 status = IoConnectInterrupt( &DeviceExtension->InterruptObject, // InterruptObject InterruptIsr, // ServiceRoutine DeviceObject, // ServiceContext NULL, // SpinLock MappedVector, // Vector Irql, // Irql Irql, // SynchronizeIrql LevelSensitive, // PCI use LevelSensitive TRUE, // PCI alway true DeviceExtension->Affinity, // ProcessorEnableMask FALSE // FloatingSave alway false for x86 ); 我没用program试,用那根线而已 ! [编辑 - 5/13/05 by KMK] |
|
11楼#
发布于:2005-05-13 13:55
[quote] 在调试程序的过程中 在把这根线剪断么? 它是要一正何脉冲,故先接地後放开,我是串一开关在线上的,把根线剪断也可 !! 但这真的太土了,下一次又要接上去. 另外你的user mode的程序可能没产生中断,也要看你的设备管理器有没有用这中断,当初我没注意这点 !!! [/quote] 我按照你的方法还是没有产生中断,在设备管理器中我已经看到了并口有个7号中断, 你的方法和书上说的不太一样,书上是把pin10 和 pin16连接在一起, 你能把你的调试步骤描述的详细些么? |
|
12楼#
发布于:2005-05-13 11:51
在调试程序的过程中 在把这根线剪断么? 它是要一正何脉冲,故先接地後放开,我是串一开关在线上的,把根线剪断也可 !! 但这真的太土了,下一次又要接上去. 另外你的user mode的程序可能没产生中断,也要看你的设备管理器有没有用这中断,当初我没注意这点 !!! |
|
13楼#
发布于:2005-05-13 11:37
可以的 !! 楼上的兄弟, 我对你所说的 \"放开便可中断\"不太理解, 是先接地,在调试程序的过程中 在把这根线剪断么? 那也太土了点 如果我想把这个程序调试通过, 具体该怎么做呢? 我是这么做的: 1.先按照书上把并口线接好 2.安装第8章的驱动 3.执行user mode的程序 4.等待中断的产生, 可是中断并不产生, 程序就这样挂了 真的被中断了:) |
|
14楼#
发布于:2005-05-13 11:16
可以的 !!
把 pin10 ack 先接地(本身高电平),放开便可中断. |
|
15楼#
发布于:2005-05-13 10:49
我按照书中讲的方法去连接并口线, 自制了一个LoopBack Connector但是在调试第八章的的程序时,就是产生不了中断,有人调通过么? 并口一般情况是不用中断的,看你的设备管理器 |
|
|