当前位置: 技术问答>linux和unix
关于共享中断号
来源: 互联网 发布时间:2016-08-08
本文导语: 共享中断号时,如何确定是哪个设备产生中断? 下面是我在网上找到的一些答案,但是回答的人也说不确定,所以在这里让高手给看看啊,谢谢 如下: 共享中断号时,所有共享该中断号的中断处理程序形成一个链...
共享中断号时,如何确定是哪个设备产生中断?
下面是我在网上找到的一些答案,但是回答的人也说不确定,所以在这里让高手给看看啊,谢谢
如下:
共享中断号时,所有共享该中断号的中断处理程序形成一个链表。
当有中断产生时,依次执行链表中的中断处理程序。
每个中断处理程序都检查自己对应的设备的状态寄存器,以确定是否是该设备产生中断。如果是,则处理该中断,并停止向下传递,否则什么都不做,继续执行下一个中断处理程序
下面是我在网上找到的一些答案,但是回答的人也说不确定,所以在这里让高手给看看啊,谢谢
如下:
共享中断号时,所有共享该中断号的中断处理程序形成一个链表。
当有中断产生时,依次执行链表中的中断处理程序。
每个中断处理程序都检查自己对应的设备的状态寄存器,以确定是否是该设备产生中断。如果是,则处理该中断,并停止向下传递,否则什么都不做,继续执行下一个中断处理程序
|
差不多就是这个了
|
那个帖子里出现那么多高手,不知道为什么现在这么冷清
正确答案就是如此
int request_irq(unsigned int irq, irq_handler_t handler,
unsigned long irqflags, const char *devname, void *dev_id)
这个dev_id可以随便指定,最重要的作用是删除时区分共享中断上的每一个注册的处理函数,所以必须不同。
此外就是传递给中断处理函数handler,如果你有参数需要让中断处理函数知道,可以让dev_id指向一个自定义的结构。
不能靠dev_id区分驱动,request_irq传递进什么dev_id,中断处理函数就接收什么dev_id
正确答案就是如此
int request_irq(unsigned int irq, irq_handler_t handler,
unsigned long irqflags, const char *devname, void *dev_id)
这个dev_id可以随便指定,最重要的作用是删除时区分共享中断上的每一个注册的处理函数,所以必须不同。
此外就是传递给中断处理函数handler,如果你有参数需要让中断处理函数知道,可以让dev_id指向一个自定义的结构。
不能靠dev_id区分驱动,request_irq传递进什么dev_id,中断处理函数就接收什么dev_id