1. void enable_irq(unsigned int irq) 用于使能一个irq
  2. void disable_irq(unsigned int irq)则用于禁止一个irq
  3.  
  4. 其使用的例程如下:
  5. static void cp_poll_controller(struct net_device *dev)
  6. {
  7. struct cp_private *cp = netdev_priv(dev);
  8. const int irq = cp->pdev->irq;
  9.  
  10. disable_irq(irq);
  11. cp_interrupt(irq, dev);
  12. enable_irq(irq);
  13. }
  14. 从本例中可以看到这个函数一般和disable_irq 配合使用。
  15. 其源码分析如下:
  16. void enable_irq(unsigned int irq)
  17. {
  18. unsigned long flags;
  19. #根据irq得到其对应的中断描述符
  20. struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
  21. #描述符为null,则直接退出.
  22. if (!desc)
  23. return;
  24. #中断描述符如果没有对应的chip,则打印error 信息,并退出
  25. if (WARN(!desc->irq_data.chip,
  26. KERN_ERR "enable_irq before setup/request_irq: irq %u\n", irq))
  27. goto out;
  28. #继续调用__enable_irq 使能中断
  29. __enable_irq(desc);
  30. out:
  31. irq_put_desc_busunlock(desc, flags);
  32. }
  33.  
  34. void __enable_irq(struct irq_desc *desc)
  35. {
  36. switch (desc->depth) {
  37. case :
  38. err_out:
  39. WARN(, KERN_WARNING "Unbalanced enable for IRQ %d\n",
  40. irq_desc_get_irq(desc));
  41. break;
  42. #正常情况下第一个调用enable_irq的时候desc->depth 应该是1,如果是0的话,后面进行--操作的话就成负数了
  43. case : {
  44. #如果正处于suspend的过程中,则直接退出
  45. if (desc->istate & IRQS_SUSPENDED)
  46. goto err_out;
  47. 这三个函数后面详细分析
  48. /* Prevent probing on this irq: */
  49. irq_settings_set_noprobe(desc);
  50. #通过chip来使能irq
  51. irq_enable(desc);
  52. check_irq_resend(desc);
  53. /* fall-through */
  54. }
  55. #从这里可以知道enable_irq 是可以嵌套的,即同一个irq 可以多次调用enable_irq
  56. default:
  57. desc->depth--;
  58. }
  59. }
  60.  
  61. static inline void irq_settings_set_noprobe(struct irq_desc *desc)
  62. {
  63. #只是或上一个_IRQ_NOPROBE flag
  64. desc->status_use_accessors |= _IRQ_NOPROBE;
  65. }
  66.  
  67. void irq_enable(struct irq_desc *desc)
  68. {
  69. irq_state_clr_disabled(desc);
  70. #正常情况下回调用chip来使能irq
  71. if (desc->irq_data.chip->irq_enable)
  72. desc->irq_data.chip->irq_enable(&desc->irq_data);
  73. else
  74. desc->irq_data.chip->irq_unmask(&desc->irq_data);
  75. irq_state_clr_masked(desc);
  76. }

来源:https://blog.csdn.net/tiantao2012/article/details/78908163

中断API之enable_irq的更多相关文章

  1. GPIO口及中断API函数【转】

    本文转载自:http://blog.sina.com.cn/s/blog_a6559d9201015vx9.htmlG #include <linux/gpio.h> // 标准 GPIO ...

  2. Linux kernel的中断子系统之(五):驱动申请中断API

    返回目录:<ARM-Linux中断系统>. 总结:二重点区分了抢占式内核和非抢占式内核的区别:抢占式内核可以在内核空间进行抢占,通过对中断处理进行线程化可以提高Linux内核实时性. 三介 ...

  3. 中断API之setup_irq【转】

    转自:https://blog.csdn.net/tiantao2012/article/details/78957472 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  4. Linux中断 - 驱动申请中断API

    一.前言 本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的驱动的时候,如何向Linux Kernel中的中断子系统注册中断处理函数?为了理解注册中断的接口,必须了解一些中断线程化(threa ...

  5. Linux kernel中断子系统之(五):驱动申请中断API【转】

    转自:http://www.wowotech.net/linux_kenrel/request_threaded_irq.html 一.前言 本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的 ...

  6. Intel 80x86 Linux Kernel Interrupt(中断)、Interrupt Priority、Interrupt nesting、Prohibit Things Whthin CPU In The Interrupt Off State

    目录 . 引言 . Linux 中断的概念 . 中断处理流程 . Linux 中断相关的源代码分析 . Linux 硬件中断 . Linux 软中断 . 中断优先级 . CPU在关中断状态下编程要注意 ...

  7. 非常好!!!Linux源代码阅读——中断【转】

    Linux源代码阅读——中断 转自:http://home.ustc.edu.cn/~boj/courses/linux_kernel/2_int.html 目录 为什么要有中断 中断的作用 中断的处 ...

  8. Linux中断驱动程序

    1.中断概念 中断时一种电信号,由硬件设备产生,然后再由中断控制器向处理器发送相应的信号.处理器一经检测到该信号,便中断自己当前正在处理的工作,转而去处理中断.此后,处理器会通知操作系统已经产生中断. ...

  9. 基於tiny4412的Linux內核移植 --- 实例学习中断背后的知识(1)

    作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台 tiny4412 ADK Linux-4.9 概述 前面几篇博文列举了在有设备树的时候,gpio中断的 ...

随机推荐

  1. BootStrap学习(一)——BootStrap入门

    1.环境搭建 中文官网下载地址:http://www.bootcss.com/ 右击选中的WEB项目,点击导入,选择文件系统,然后下一步,选择BootStrap文件目录路径,如下: 完成后,WEB项目 ...

  2. js实现数组的去重

    function filterRepat(arr){ if(Array.isArray(arr) && arr.length){ var arr = arr.filter(functi ...

  3. 使用python绘制词云

    最近在忙考试的事情,没什么时间敲代码,一个月也没几天看代码,最近看到可视化的词云,看到网上也很多这样的工具, 但是都不怎么完美,有些不支持中文,有的中文词频统计得莫名其妙.有的不支持自定义形状.所有的 ...

  4. RMAN删除归档脚本

    crosscheck archivelog all;   delete noprompt expired archivelog all;   delete noprompt archivelog un ...

  5. SpringCloud学习笔记(4)----Spring Cloud Netflix之Eureka的配置

    1. Eureka监控配置 Eureka的客户端需要加入依赖 <dependency> <groupId>org.springframework.boot</groupI ...

  6. Debian9.5系统DNS服务器BIND软件配置说明

    DNS的出现的历史 网络出现的早期是使用IP地址通讯的,那时就几台主机通讯.但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和W ...

  7. Python数据分析前提-----pandas

    1.read_csv(url):读取数据 2.help(read_csv):打印函数相关用法 3.数据名.dtypes:读取数据的类型(int.float……) 4.type(数据名):读取所有数据的 ...

  8. python基础5(文件操作,with语句)

    打开文件 #使用 open f = open('路径',mode = '打开模式', encoding='编码') #可以使用with语句打开,不需要关闭,可以同时打开多个文件 with open(' ...

  9. 紫书 习题 8-24 UVa 10366 (构造法)

    又是一道非常复杂的构造法-- #include<cstdio> #include<algorithm> #define REP(i, a, b) for(int i = (a) ...

  10. pandas学习笔记 - 常见的数据处理方式

    1.缺失值处理 - 拉格朗日插值法 input_file数据文件内容(存在部分缺失值): from scipy.interpolate import lagrange import pandas as ...