本章节我们一起来探讨一下Linux中的中断:
http://blog.csdn.net/gotosola/article/details/7422072
中断处理
http://www.cnblogs.com/tianshuai11/archive/2012/04/20/2477168.html
里边有自动探测中断号:
http://blog.csdn.net/en_wang/article/details/6726421
当目标设备有能力告知驱动它要使用的中断号时,自动探测中断号只是意味着探测设备,无需做额外的工作探测中断。
但不是每个设备都对程序员友好,对于他们还是需要一些探测工作。这个工作技术上非常简单: 驱动告知设备产生中断并且观察发生了什么。如果一切顺利,则只有一个中断信号线被激活。尽管探l测在理论上简单,但实现可能不简单。有 2 种方法来进行探测中断:调用内核定义的辅助函数和DIY探测。
内核帮助下的探测:
linux提供了一个底层设施来探测中断号。它只能在非共享中断的模式下工作,但是大多数硬件有能力工作在共享中断的模式下,并可提供更好的找到配置中断号的方法,内核提供的这一设施由两个函数组成,在头文件<linux/interrupt.h>中声明:
<linux/interrupt.h> unsigned long probe_irq_on(void); /*返回一个未分配中断的位掩码。驱动必须保留返回的位掩码,并在后边传递给probe_irq_off,在调用它之后,驱动程序应当至少安排它的设备产生一次中断*/ int probe_irq_off(unsigned long); /*在请求设备产生一次中断后,驱动调用这个函数,并将probe_irq_on产生的位掩码作为参数传递给probe_irq_off,probe_irq_off返回在probe_on之后发生的中断号。如果没有中断发生,返回0,如果产生了多次中断,返回一个负值。*/ |
程序员应当注意在调用 probe_irq_on 之后启用设备上的中断, 并在调用 probe_irq_off 前禁用。此外还必须记住在 probe_irq_off 之后服务设备中待处理的中断。