关于 内核驱动程序 并口中断响应 的问题

lgchina97 2003-08-30 02:54:26
*在创建设备时指定了并口地址和中断级(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)对我驱动的并口回送连接器有中断抢占?
……其它?
谢谢大家!感激涕零!
...全文
101 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgchina97 2003-09-01
  • 打赏
  • 举报
回复
中断并不是由ISR产生的,而是在产生中断后,IO管理程序自动调用“中断服务例程”也就是
ISR。但现在中断通过上面的代码产生后,ISR并没有被调用。这就是我的问题所在。
ArthurTu 2003-08-31
  • 打赏
  • 举报
回复
是在ISR再产生中断?ISR没有退出,怎么会再进入?
lgchina97 2003-08-31
  • 打赏
  • 举报
回复
各位大虾有会的吗?提供思路不胜感激,分不够在加!

期盼、期盼……

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧