中断服务程序

中断服务程序必须在设备驱动程序中定义,并在使用 request_irq 函数申请 IRQ 线时,关联到所申请到

的 IRQ 线上(中断控制器对外的电路线)。它们都具有如下相同的原型。

把中断线和具体设备关联:


/**
* @irq:所申请到的 IRQ 线。
* @dev_id:request_irq 函数传递进来的参数,具有全局唯一性,通常指向设备的私有
* 数据结构,可以用其判断具体是哪个设备产生了中断。
*/
typedef irqreturn_t (*irq_handler_t)(int irq, void *dev_id);

中断服务程序的返回值是一个特殊类型——irqreturn_t,它在 include/linux/irqreturn.h 文件中定义。
19 typedef int irqreturn_t;
20
21 #define IRQ_NONE (0)
22 #define IRQ_HANDLED
(1)
23 #define IRQ_RETVAL(x) ((x) != 0)

具体设备的中断状态:是否正在处理中断:

irqreturn_t 只能取两个值:IRQ_NONE 表示不处理所收到的中断请求,比如当中断服务程序发现该中
断请求并不由自己负责时;
IRQ_HANDLED 表示接收到了有效的中断请求,
并且做出了正确的处理。
另外,
也可以使用宏 IRQ_RETVAL(x),若 x 为非 0 值,返回 IRQ_HANDLED,否则返回 IRQ_NONE。
中断服务程序是无需重入的。当一个给定的中断服务程序正在执行时,相应的中断线在所有处理器上
都会被屏蔽,以避免在同一中断线上接收另一个新的中断。因此,同一个中断服务程序绝对不会被同时调
用。这大大简化了中断服务程序的编写。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值