新闻  |   论坛  |   博客  |   在线研讨会
老文章,搞工控的可以看看-Windows98 VxD驱动中ISA中断实战经验
emesjx | 2010-10-24 14:10:00    阅读:2704   发布文章

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),重新启动机器即可。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客