libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:945回复:3

ISA驱动里的中断处理例程和延迟例程里该做的事?

楼主#
更多 发布于:2003-06-10 18:01
我说说对ISA里中断的理解:ISA的中断是死的,相对于PCI的,也就是在驱动入口点初始化和设置中断,也就意味着当硬件的外界中断来的时候,系统知道是哪个中断了,只需要确认一下,同时,是边沿触发,也用不着清中断,只需确认,就表示响应了中断。
由于ISR的运行级别很高,一般把要处理的事放在DPC里来做,比如读数据。

拿一个具体的例子来说,我的硬件很简单,一个中断读数据的ISA板,当中断来的的时候,系统响应中断,从板上读数据到内存中。很多的设计模式是这样:在应用层创建一个事件对象通过DEVICEIOCTL发送到驱动层,同时在应用层创建一个线程来等待驱动出发事件的发生。在驱动层也创建事件对象,中断来了,进入ISR,在这里完成确认中断,然后进入DPC,在这里,触发事件,也就是使应用层等待的线程有效,应用层等待的线程有效后,发一个读数据的DEVICEIOCTL,调用驱动的相应分发例程来读数据。总感觉这种方式有点慢,能不能采取这种方式:不在应用层创建事件和等待线程,直接发送读数据的DEVICEIOCTL(系统排队方式)。中断到来的时候进入ISR,确认中断,进入DPC,读ISA板上的数据,把数据读到驱动中自己分配的非分页内存中。在读数据的DEVICEIOCTL的例程里,把DPC中非分页内存里的数据用RtlMemoryCopy函数拷贝到映射应用层创建的内存中。不知道这样的方法能否可行。
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
guard2002
驱动中牛
驱动中牛
  • 注册日期2002-05-21
  • 最后登录2017-03-07
  • 粉丝0
  • 关注0
  • 积分46分
  • 威望65点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-06-11 08:31
不知道你有没有试过
我的硬件没有中断
所以只能看你的结果了
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-11 10:40
其他人呢??
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-11 17:41
没人会吗?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
游客

返回顶部