阅读:1109回复:7
关于中断
一块ISA卡,在DOS下如Init_Interrupt设置中断,中断可工作
在Windows驱动中我用IoConnectInterrupt联接中断成功,但是驱动为什么总是收不到中断呢?是不是在驱动中也要对8259进行初始化, 如果是,该怎么做? 请高人指点 void Init_Interrupt( void ) { int TmpVect; int TmpIntr; int TmpPort; char Tbyte; asm CLI; TmpIntr = InterruptNum; if (TmpIntr<= 7) { /* get interrupt vector */ TmpVect = TmpIntr + 0x08; /* get port address */ TmpPort = MASTER_PIC; } else { /* get interrupt vector */ TmpVect = (TmpIntr -8) + 0x70; /* get port address */ TmpPort = SLAVE_PIC; } /* save old interruptvector */ oldhandler = getvect(TmpVect); /* set new interruptvector */ setvect(TmpVect, Timer_interrupt); /* PIC - interruptnumber */ TmpIntr &= 0x0007; TmpPort += IRQ_MASK; /* enable interrupt */ Tbyte = inportb(TmpPort); char value=Tbyte & ~(1 << TmpIntr); outportb (TmpPort, (Tbyte & ~(1 << TmpIntr)) ); Tbyte = inportb(TmpPort); asm STI; } |
|
沙发#
发布于:2002-12-06 10:57
确定中断为ISA保留了
没有被别的设备占用 |
|
|
板凳#
发布于:2002-12-06 11:26
是的,用的是10号中断,没被系统占用
|
|
地板#
发布于:2002-12-06 12:36
为什么没人回答。
|
|
地下室#
发布于:2002-12-06 13:56
用IoConnectInterrupt联接中断成功?你要看看10号中断在windows对应的是什么,不能直接挂10号
|
|
5楼#
发布于:2002-12-06 14:12
跟踪的结果:
Interrupt vector:0000003A IRQL :17 Affinity: 1 Mode: 1 应该不会错的。 |
|
6楼#
发布于:2002-12-06 15:35
要初始化的
否则设备怎么会发中断 |
|
|
7楼#
发布于:2002-12-06 17:13
设备已经将中断发出,只是我的驱动怎么都收不到。
到底是怎么回事,我都快疯掉了 |
|