请教XTANG及各位大侠,系统是如何分配irq的,在一个工控机上同时插上两块板卡,分配的irq相同

我现在在一个工控机上同时插上两个板卡,这两个板卡都要相应外部中断。
出现了中断相互影响的情况,具体现象是这样的,给一个板卡中断,两个板卡会同时相应,我用的是InterruptAttachEvent。
我认为是系统给两个板卡分配了相同的irq,在查看之后,结果是系统给两个板卡分配的irq都是11。但是int_id = InterruptAttachEvent (irq, &event, 0),int_id是不同的。我查看资料Interruptwait等待的是硬件中断,是自己相关的硬件产生的中断,不知道为什么它会相应其他硬件产生的中断,是因为相同的irq么?
我已经阅读了本论坛关于pci共享中断的讨论,可是还是没有找到解决办法。
小弟自己解决不了,请各位大侠帮助,谢谢!

你看到的现象是对的,原因也就是你说的系统为你的两个板卡分配了相同的irq。

这些是PCI板卡吧。你可以试试BIOS里面有没有设定。另外,有时候换一下插槽也有帮助。

最后,实在不能把中断热闹分开时,也可以中断共享。只要你的程序处理得当,也是可以的。每个程序在收到自己的event以后,一定要先去板卡上判断这个是不是属于自己的中断,如果不是,要InterruptUnmask(),然后直接退出。

谢谢XTANG的解答。
我现在是在程序中处理,每次去判断中断是不是自己发出来的,但是好像还是有些问题。
我觉得是不是还是不要共享中断可靠些,请问如何在biso里设置,谢谢!

从嵌入式的角度来讲,是不希望共享中断,因为这样会增加中断延迟。但x86的中断有限。

BIOS不同,设置方法也不一样。有的BIOS也可能不能设(所谓的Plug&Play)。要自己一点点去试才能知道。