阅读:945回复:3
ISA驱动里的中断处理例程和延迟例程里该做的事?
我说说对ISA里中断的理解:ISA的中断是死的,相对于PCI的,也就是在驱动入口点初始化和设置中断,也就意味着当硬件的外界中断来的时候,系统知道是哪个中断了,只需要确认一下,同时,是边沿触发,也用不着清中断,只需确认,就表示响应了中断。
由于ISR的运行级别很高,一般把要处理的事放在DPC里来做,比如读数据。 拿一个具体的例子来说,我的硬件很简单,一个中断读数据的ISA板,当中断来的的时候,系统响应中断,从板上读数据到内存中。很多的设计模式是这样:在应用层创建一个事件对象通过DEVICEIOCTL发送到驱动层,同时在应用层创建一个线程来等待驱动出发事件的发生。在驱动层也创建事件对象,中断来了,进入ISR,在这里完成确认中断,然后进入DPC,在这里,触发事件,也就是使应用层等待的线程有效,应用层等待的线程有效后,发一个读数据的DEVICEIOCTL,调用驱动的相应分发例程来读数据。总感觉这种方式有点慢,能不能采取这种方式:不在应用层创建事件和等待线程,直接发送读数据的DEVICEIOCTL(系统排队方式)。中断到来的时候进入ISR,确认中断,进入DPC,读ISA板上的数据,把数据读到驱动中自己分配的非分页内存中。在读数据的DEVICEIOCTL的例程里,把DPC中非分页内存里的数据用RtlMemoryCopy函数拷贝到映射应用层创建的内存中。不知道这样的方法能否可行。 |
|
|
沙发#
发布于:2003-06-11 08:31
不知道你有没有试过
我的硬件没有中断 所以只能看你的结果了 |
|
板凳#
发布于:2003-06-11 10:40
其他人呢??
|
|
|
地板#
发布于:2003-06-11 17:41
没人会吗?
|
|
|