博客
关于我
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/

你可能感兴趣的文章
Nacos如何实现Raft算法与Raft协议原理详解
查看>>
Nacos安装教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
Nacos实战攻略:从入门到精通,全面掌握服务治理与配置管理!(下)
查看>>
Nacos心跳机制实现快速上下线
查看>>
Nacos服务注册与发现demo
查看>>
nacos服务注册和发现原理简单实现案例
查看>>
Nacos服务注册总流程(源码分析)
查看>>
nacos服务注册流程
查看>>
Nacos服务部署安装
查看>>
nacos本地可以,上服务器报错
查看>>
Nacos注册中心有几种调用方式?
查看>>
nacos注册失败,Feign调用失败,feign无法注入成我们的bean对象
查看>>
nacos源码 nacos注册中心1.4.x 源码 nacos源码如何下载 nacos 客户端源码下载地址 nacos discovery下载地址(一)
查看>>
nacos源码 nacos注册中心1.4.x 源码 spring cloud alibaba 的discovery做了什么 nacos客户端是如何启动的(二)
查看>>
Nacos简介、下载与配置持久化到Mysql
查看>>
Nacos简介和控制台服务安装
查看>>
Nacos管理界面详细介绍
查看>>
Nacos编译报错NacosException: endpoint is blank
查看>>
nacos自动刷新配置
查看>>
nacos运行报错问题之一
查看>>