内核驱动中断申请类型及函数分析

本文分析了Linux内核中断请求函数`request_irq`的使用,特别是`IRQF_ONESHOT`标志位的作用。`IRQF_ONESHOT`表示一次性触发的中断,不允许嵌套。中断处理程序在处理过程中会屏蔽中断源,防止中断重入,这对于某些需要完整交互过程的驱动,如电池驱动与电量计的HDQ通信,是必要的。选择是否使用`IRQF_ONESHOT`取决于硬件系统特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    ret = request_irq(chip->irq, xxx_intr_handler,
         IRQF_TRIGGER_FALLING | IRQF_NO_THREAD |
        IRQF_NO_SUSPEND, name, chip); 

 上面是中断初始化中调用系统中断请求函数,查看函数原型:

/*
static inline int __must_check
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
        const char *name, void *dev)
{
    return request_threaded_irq(irq, handler, NULL, flags, name, dev);
}
*/

其中,中断触发标志中需要根据硬件对应设计选择正确触发类型。

 基本类型:

IRQF_TRIGGER_HIGH

IRQF_TRIGGER_LOW

IRQF_TRIGGER_FALLING 

IRQF_TRIGGER_RISING

对应基本触发类型:高电平触发,低电平触发,下降沿触发,上升沿触发。

除此之外,看到其他驱动还有另外一种禁止打断型中断:ONESHOT类型

    ret = devm_request_threaded_irq(&pdev->dev, alm_irq, NULL,
                    da9055_rtc_alm_irq,
                    IRQF_TRIGGER_HIGH | IRQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值