linux irq部分简介
来源:互联网 发布:淘宝店铺如何快速升钻 编辑:程序博客网 时间:2024/06/05 04:30
今天在rockchip的rk3066平台上的声卡驱动中想加一个中断用来进行耳机插拔检测,在使用request_irq()时,在flags中设置为上下边沿触发,结果竟然返回失败,大体检查了一下代码,发现问题出在平台相关代码的GPIO IRQ中,主要是代码不支持同时设置上下边沿触发,只能设置为上边沿或者下边沿触发模式。由于我们freescale iMX6平台没有这个问题,而且也能正确的触发,所以我回来后想看看关于gpio irq这块的内容;
几个重要的结构:
struct irq_chip hardware interrupt chip descriptor;可以理解为管理某类中断集合,比如,我们所有的gpio irq;
它的功能函数比较全面比如 ack/set type/mask等,也就是说,当你需要对某个中断进行操作时,要用到这里的函数;
struct irq_desc interrupt descriptor;中断描述符,用来全面描述一个具体的中断;
struct gpio_chip abstract a GPIO controller;顾名思义,gpio控制器呗,类似struct irq_chip;但是抽象出来的,一般用来表示一个gpio集合;比如GPIOA;
它的功能也是比较全面的,比如设置一个gpio的方向,请求gpio,get/set gpio,gpio_to_irq等;除了方法,还有关于这个GPIO集合的信息,比如有多少各GPIO,这个gpio集合的起始编号等;
看到这,也许能猜到,应该还有一个描述某个gpio的结构,对,下个就是:
struct gpio_desc 用来描述一个gpio,结构很简单,感觉也没啥用,最重要的就是chip指针指向的struct gpio_chip;它的全部幸福,都在gpio_chip身上;
接下来,怎么把他们链接在一起呢?
看一下代码,这也太简单了吧。。。gpio_to_irq(pin),轻轻松松的搞定。。下面分析:
在kernel启动过程中,有一个init_irq函数被调用,它直接初始化所有的irq,当然包含gpio对应的那些个irq,所以,当我们调用gpio_to_irq函数时,就取得了已经初始化好的irq的索引了,接下来就很轻松,调用request_irq,将中断处理函数,触发模式等全部写进了struct irq_desc中,接下来完事ok了,只等中断到来;
今天就到这,我再分析分析,打通向前到arm处理中断异常部分;
- linux irq部分简介
- linux的中断子系统简介(汇编和hard irq部分)_ARM平台(S5PV210)
- Linux IRQ
- Linux irq
- Gt9xx系列------irq的部分
- Linux部分命令简介
- Linux IRQ(2)
- linux irq抽象
- Linux GPIO & IRQ Driver
- Linux generic IRQ handling
- Linux之IRQ domain
- linux irq domain笔记
- 关于 linux disable irq
- linux kernel threaded irq
- linux irq/affinity理解
- Linux内核笔记 -- IRQ
- IRQ
- irq
- 循环11~14
- LeetCode173-Binary Search Tree Iterator
- Java形参是传值还是传引用
- 【springmvc框架】(一)原理分析
- 编程之美-从无头单链表中删除节点
- linux irq部分简介
- Django之第一个app<3>
- 编程之美-判断两个链表是否相交
- 基于飞淩OK6410开发板与Ubuntu 10.04 的NFS的配置
- mysql查询结果添加序列号
- 编程之美-编程判断两个链表(可能含环)是否相交以及相交的第一个结点
- 5 Longest Palindromic Substring
- Junit(5)趁热打铁
- CircuitBreakingException[[FIELDDATA] Data too large, data for [proccessDate] would be larger than li