关于 内核驱动程序 并口中断响应 的问题
*在创建设备时指定了并口地址和中断级(0x378,0x7)
*通过IoConnectInterrupt函数,成功为中断服务例程Isr注册
*以将并口LPT1中的“端口设置”设为:使用指派给此端口的任何中断
*作好的“并口回送连接器”插在目标机的并口上
*使用测试程序测试 (测试程序功能:向并口顺序发送20个字节的数据,在顺序从并口读出)
*测试程序运行在目标机,另在主控机使用WinDbg监控调试
·正确的结果:向并口写第一个数据,之后读出,产生中断,Isr例程开始--判断是否需继续传输 或 完成IRP请求
·目前的结果:“向并口写第一个数据,之后读出”这两步正常(通过WinDbg得知)
产生中断:
#if DBG==1
DbgPrint("PPORT: TransmitByte: generating interrupt.\n");
#endif
// Enable interrupts, raise BUSY
WriteControl( pDevExt, CTL_INTENB | CTL_SELECT | CTL_DEFAULT );
// Lower BUSY
WriteControl( pDevExt, CTL_INTENB | CTL_DEFAULT );
// Pulse ACK#
WriteControl( pDevExt, CTL_INTENB | CTL_NOT_RST | CTL_DEFAULT);
// hold it for about 50 uS
KeStallExecutionProcessor(50);
WriteControl( pDevExt, CTL_INTENB | CTL_DEFAULT );
(
#define CTL_STROBE 0x01 // 1 选通流经并口的数据
#define CTL_AUTOLF 0x02 // 1 自动换行
#define CTL_NOT_RST 0x04 // 0 复位打印机
#define CTL_SELECT 0x08 // 1 选择打印机
#define CTL_INTENB 0x10 // 1 启用中断
#define CTL_DEFAULT 0xC0 // 设置保留位为1(必须)
)
产生中断后,通过WinDbg得知,Isr例程根本没有运行! 程序只完成了一个字节的写和读,
剩下的19个字节的读写因为Isr没有运行而无法继续。
请问:
……问题可能出在哪里?上述产生中断程序有问题?
……还是因为程序并不是实现即插即用的,需要为并口“硬编码”硬件资源,如何实现?
……是否是因为系统的标准并口驱动(parallel.sys & parport.sys)对我驱动的并口回送连接器有中断抢占?
……其它?
谢谢大家!感激涕零!