博客
关于我
Linux中断相关函数
阅读量:504 次
发布时间:2019-03-07

本文共 1325 字,大约阅读时间需要 4 分钟。

目录


request_irq

函数介绍

函数原型

最好用devm_request_irq代替

request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,   const char *name, void *dev)

         //对应free_irq   (此函数必须要调用)

参数

irq:     要申请的硬件中断号。

             对于不支持设备树的内核:在内核si项目里搜“irqs.h",找对应平台,即可得到。
             对于支持设备树的内核:不能直接写中断号,要通过设备树映射中断号,见:
handler: 向系统注册的中断处理函数,是回调函数,中断发生时,系统调用这函数,dev_id参数传递给它。
             本函数最后要return IRQ_HANDLED;
irqflags:中断处理的属性,  //以下老版本意思是linux2.6.24之前
          IRQF_DISABLED (老版本中的SA_INTERRUPT)表示中断处理程序是快速处理程序,
                                           快速处理程序被调用时禁止所有中断。慢速处理程序不禁止
          IRQF_SHARED (老版本中的SA_SHIRQ)多个设备共享中断,
          IRQF_SAMPLE_RANDOM(老版本中的SA_SAMPLE_RANDOM),对系统获取随机数有好处。
          ...
name:  中断名称,通常是设备驱动程序的名称. 
          在/proc/interrupts  里可以看到。cat /proc/interrupts
dev:   作为中断服务函数(handler)的第二个参数。若中断服务函数用不到更多参数,则设置为NULL。
          若此项不是NULL,free_irq的第二个参数也要写上对应的值。

返回值

0:     成功
-EINVAL:表示中断号无效或处理函数指针为NULL
-EBUSY:表示中断已经被占用且不能共享

注意事项

        在设备树存在以后,不能直接把中断号作为第1个参数,得从设备树获取,获取时核心层函数做了映射将中断号数组中对应的索引作为此函数的参数。

示例:
i2c0的中断号是89
设备树中:
interrupt-parent = <&intc>;
interrupt = <0 57 1>;  //共享中断,57+32=89, 触发方式:上升沿。设备树中共享中断要减32,私有中断要减16 

驱动代码

static int i2c_probe(struct platform_device *pdev)
{
    struct device_node *node;
    int irq;

   irq = platform_get_irq(pdev, 0);

    if (irq < 0) {
        dev_err(&pdev->dev, "failed to get IRQ number\n");
       return irq;
    }
    if(request_irq(irq, i2c0_int_irq_handler, IRQF_SHARED, "i2c0-test" , &(dev->dev)))
    {
        printk(KERN_DEBUG "requst irq failled \n");
    }
    return 0;
}

转载地址:http://umvjz.baihongyu.com/

你可能感兴趣的文章
multiprocessing.Pool:map_async 和 imap 有什么区别?
查看>>
MySQL Connector/Net 句柄泄露
查看>>
multiprocessor(中)
查看>>
mysql CPU使用率过高的一次处理经历
查看>>
Multisim中555定时器使用技巧
查看>>
MySQL CRUD 数据表基础操作实战
查看>>
multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
查看>>
mysql csv import meets charset
查看>>
multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
查看>>
MySQL DBA 数据库优化策略
查看>>
multi_index_container
查看>>
MySQL DBA 进阶知识详解
查看>>
Mura CMS processAsyncObject SQL注入漏洞复现(CVE-2024-32640)
查看>>
Mysql DBA 高级运维学习之路-DQL语句之select知识讲解
查看>>
mysql deadlock found when trying to get lock暴力解决
查看>>
MuseTalk如何生成高质量视频(使用技巧)
查看>>
mutiplemap 总结
查看>>
MySQL DELETE 表别名问题
查看>>
MySQL Error Handling in Stored Procedures---转载
查看>>
MVC 区域功能
查看>>