wangyupup
驱动牛犊
驱动牛犊
  • 注册日期2002-09-28
  • 最后登录2007-10-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1418回复:4

Art Baker书中 并口驱动的疑惑

楼主#
更多 发布于:2002-11-13 12:04
Art Baker著《windows 2000设备驱动程序设计指南》(第二版)中有一个并口驱动的例子(第8章),我按照书中讲的自己做了一个并口回送连接器,运行光盘中的程序,为什么不能产生中断呢?

读写control,status寄存器都正常,control寄存器设好了,status就能对应读出,说明回送连接器没问题。

我还做了如下试验:
1 设置“控制面板/系统/硬件/设备管理/lpt1/使用给此端口的任何中断”
2 上升沿触发和下降沿触发都试了

写完control 跟着就读 status,发现ack位是跟着变的,但status寄存器第二位一直是1,没有中断,十分疑惑。
小弟是初学,请读过此书的学长和大侠们多深援助之手,一定给分!

最新喜欢:

yangngyangng
wangyupup
驱动牛犊
驱动牛犊
  • 注册日期2002-09-28
  • 最后登录2007-10-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-13 15:17
用IoReportDetectedDevice检查,返回失败,程序中的注释说这是由于设备被标准并口驱动占用,大侠们,我该怎么办呢?
wangyupup
驱动牛犊
驱动牛犊
  • 注册日期2002-09-28
  • 最后登录2007-10-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-14 10:27
问题基本解决

现在发现中断信号的确有,ISR也运行了,我之所以没有发现,是因为光盘中源程序(ISR例程)中的debug语句的条件编译为:
#if dbg==1
。。。
#endif

而ntddk.h宏定义是
#define DBG

大小写出了问题,所以该条语句达不出来,我还以为没有执行ISR,进而误认为是中断没有发出来,真是弱智之极!(该书作者亦有毁人不倦之嫌:-)

但是我继续跟踪,发现ISR在“判断中断是否属于该驱动程序”时出了问题。它首先读取并口状态寄存器,再判断其第2位,如果该位为0说明中断是它自己的,否则推出。但是这一位始终为1,因此ISR到此就推出了,后面的程序不能执行,一直等着。
取消对这一位的判断,程序顺利的执行完了。

这说明并口有中断但status寄存器第二位不一定是0,为什么呢?
看来还要继续弱智几天。
请明白此事的大侠明示。
baby301
驱动牛犊
驱动牛犊
  • 注册日期2004-07-27
  • 最后登录2004-08-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-30 10:53
我也试了那本书中的例子,但提示找不到ntddk.h,在头文件中明明有ntddk.h,里面也有东东,但为什么会有这种报错呢?我把ntddk.h拷贝到程序的目录下,一对问题又出来了:(
你通过了这一关,请指教一下!多谢!
baby301
驱动牛犊
驱动牛犊
  • 注册日期2004-07-27
  • 最后登录2004-08-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-31 09:29
wangyupup请教一下,我也同样用的那本书中的例子,怎么提示的错误都是ntddk.h文件中的?我开始运行时找不到ntddk.h文件,我在ntddk中手动找到,然后拷贝到程序运行的目录下,找到了,但有提示了很多ntddk中的错误,请大侠不吝赐教!
游客

返回顶部