xtang,关于中断的问题。

我记得在help里面有介绍写中断的两种方法,一种是interruptattach,一种是interruptattchevent。在前面一种方法当中,ISR要判断中断是不是自己的硬件产生的,我不太明白到底要判断什么?判断板子的中断寄存器,还是别的什么东西。

还有帮忙看一下
http://www.openqnx.com/chinese/viewtopic.php?t=881
我用interruptattachevent始终有问题。但是一直不知道到底错在哪里 。拜托了唐。

如果是共用中断,需要判断是不是自己的板子产生的,方法很多。

x86应为中断源有限,常使用“共享中断”的方法。比方网卡和显卡共用同一个中断号。这样网卡驱动和显卡驱动都会Attach到同一个中断号上。

当这个中断号发生时,内核无法区分是网卡还是显卡引起的中断,所以内核直接调用挂在这个中断号上的各个ISR,让它们自已决定谁应该响应。

所以在网卡驱动的ISR里,第一件事就是检查网卡上的中断状态寄存器,从而判断收到的中断是不是网卡引起的;是,就继续进行处理;不是,则直接返回,让内核去调用显卡驱动的ISR,在那里进行判别。

用InterruptAttach()或者InterruptAttachEvent()都应该进行检查。

Comquter不是指出你的开中断顺序错了吗?

哦,我想我有点明白了。我再试试。comquter说的那个问题,我已经改过了,现在是我觉得中断出现的时机不对,按理说register_interrupt应该在ch1senddata之前,然而这样我收到的数据就是ch1senddata之前的数据,也就是说ch1senddata如果发的数是0x12345678,而之前FIFO的数据如果是0,那么收到的是0,而不是0x12345678,但是register_interrupt在ch1senddata之后,就正常了,而这种逻辑是不对的。我也觉得我在ch1senddata发完数据产生中断之前,已经有一个中断发生了,但实在不知道,这个神秘的中断是什么。