emesjx
驱动牛犊
驱动牛犊
  • 注册日期2004-07-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望30点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2334回复:1

Windows98/VxD ISA中断实战经验

楼主#
更多 发布于:2004-10-08 22:21
 Windows98 VxD驱动中ISA中断实战经验

1.    Windows98中,ISA中断为正脉冲,上升沿触发、高电平有效,这是由BIOS初始化8259时设定的。与DOS系统不同的是,Windows98对中断脉冲的宽度有一定的要求,这是因为,当VMM监测到IRQ上升沿后,表示有硬件中断产生,系统做一些预处理工作后将控制权交给VPICD,VPICD要重判该IRQ信号是否还存在,即IRQ是否保持高电平,如果不存在了,就不做任何处理返回了。存在才做相应的中断处理,包括用户在VxD中自定义的(虚拟)中断处理程序。由于VMM和VPICD的预处理需要一定的时间tw,此tw与系统(主要是CPU)的速度有关,因此,为了不丢失中断,即每次中断都有效,并执行用户中断处理程序,IRQ的脉冲宽度就必须大于tw。经实验检测:
●    对于“赛扬1G”CPU,tw>60us
●    对于“PIV1.8G”CPU,tw>30us
上述时间只是一个参考,不同机器的系统配置(如RAM大小)以及系统正在运行的进程数量都影响tw。
2.    一般用户电路产生的中断脉冲(如计数器)的宽度比较窄,最简单的方法是用一片单稳电路(如74LS123)来展宽,但这种方法有一定的局限性,即不同速度的机器,要对脉宽做相应的调整。另一种更通用的方法是,用户电路的中断脉冲先经一个D触发器(如74LS74)锁存,再送入系统IRQ引脚,进入用户中断处理程序后才将其清除,用这种方法设计的ISA卡具有通用性。
3.    在VxD驱动程序中,ISA中断一般使用VHardwareInt类虚拟化,为了使ISA中断能够在VxD中虚拟成功,必须在BIOS Setup中进入“Pnp/PCI Configurations | IRQ Resources”子菜单,将响应的IRQx置成[Legacy ISA],如:
IRQx assigned to   [Legacy ISA]
4.    一般情况下,用户设计ISA中断时都使用IRQ5,但在有些机器上使用时,一装入VxD驱动程序就出错,通过调试发现是中断不能虚拟化,其原因是系统安装了声卡驱动程序,尽管使用“开始 | 程序 | 附件 | 系统工具 | 系统信息” 查看IRQ5没有被占用,但声卡的DOS驱动占用了IRQ5。解决办法有两种:一是卸载声卡的驱动程序;或者,进入“设备管理器 | 声音.视频…… | ……Audio Legacy Device | 属性 | Setting | DOS IRQ Setting ”中,不要选IRQ5(改为IRQ7),重新启动机器即可。

最新喜欢:

nicosternicost...
guangjiema
驱动牛犊
驱动牛犊
  • 注册日期2005-04-22
  • 最后登录2005-08-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-22 10:36
很好,学知识了。
游客

返回顶部