void enable_irq(unsigned int irq) 用于使能一个irq。
void disable_irq(unsigned int irq)则用于禁止一个irq其使用的例程如下:
static void cp_poll_controller(struct net_device *dev)
{struct cp_private *cp = netdev_priv(dev);const int irq = cp->pdev->irq;disable_irq(irq);cp_interrupt(irq, dev);enable_irq(irq);
}
从本例中可以看到这个函数一般和disable_irq 配合使用。
其源码分析如下:
void enable_irq(unsigned int irq)
{unsigned long flags;#根据irq得到其对应的中断描述符struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);#描述符为null,则直接退出.if (!desc)return;#中断描述符如果没有对应的chip,则打印error 信息,并退出if (WARN(!desc->irq_data.chip,KERN_ERR "enable_irq before setup/request_irq: irq %u\n", irq))goto out;#继续调用__enable_irq 使能中断__enable_irq(desc);
out:irq_put_desc_busunlock(desc, flags);
}void __enable_irq(struct irq_desc *desc)
{switch (desc->depth) {case 0:err_out:WARN(1, KERN_WARNING "Unbalanced enable for IRQ %d\n",irq_desc_get_irq(desc));break;#正常情况下第一个调用enable_irq的时候desc->depth 应该是1,如果是0的话,后面进行--操作的话就成负数了case 1: {#如果正处于suspend的过程中,则直接退出if (desc->istate & IRQS_SUSPENDED)goto err_out;这三个函数后面详细分析/* Prevent probing on this irq: */irq_settings_set_noprobe(desc);#通过chip来使能irqirq_enable(desc);check_irq_resend(desc);/* fall-through */}#从这里可以知道enable_irq 是可以嵌套的,即同一个irq 可以多次调用enable_irqdefault:desc->depth--;}
}static inline void irq_settings_set_noprobe(struct irq_desc *desc)
{#只是或上一个_IRQ_NOPROBE flagdesc->status_use_accessors |= _IRQ_NOPROBE;
}void irq_enable(struct irq_desc *desc)
{irq_state_clr_disabled(desc);#正常情况下回调用chip来使能irqif (desc->irq_data.chip->irq_enable)desc->irq_data.chip->irq_enable(&desc->irq_data);elsedesc->irq_data.chip->irq_unmask(&desc->irq_data);irq_state_clr_masked(desc);
}

中断API之enable_irq相关推荐

  1. GPIO及中断API函数

    #include <linux/gpio.h> // 标准 GPIO_API    int gpio_request(unsigned gpio, const char *label); ...

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

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

  3. 中断API之irq_set_chained_handler

    irq_set_chained_handler(unsigned int irq, irq_flow_handler_t handle)用于修改通过request_irq 注册中断号的handle 其 ...

  4. Linux 中断实验

    目录 Linux 中断简介 Linux 中断API 函数 上半部与下半部 设备树中断信息节点 获取中断号 硬件原理图分析 实验程序编写 修改设备树文件 按键中断驱动程序编写 编写测试APP 运行测试 ...

  5. Linux内核中断系统处理机制-详细分析

    原文地址::https://blog.csdn.net/weixin_42092278/article/details/81989449 相关文章 1.Linux中断管理 (1)Linux中断管理机制 ...

  6. 《linux内核中断》之 法外狂徒张三删库跑路

    法外狂徒张三删库跑路 真实案例:在今年2月份,国内一个程序员删库的消息传遍it界.他的几行代码,直接让上市公司微盟的市值一天蒸发超10亿,300百万用户直接受到影响.网上是谣言四起,可谓是最牛逼的删库 ...

  7. Linux中断子系统(四)之中断申请注册

    Linux中断子系统(四)之中断申请注册 备注:   1. Kernel版本:5.4   2. 使用工具:Source Insight 4.0   3. 参考博客: Linux中断子系统(一)中断控制 ...

  8. 【Linux驱动开发】019 中断

    一.Linux中断API函数 1.中断号 在 Linux 内核中使用一个 int 变量表示中断号,每个中断都有一个中断号,通过中断号即可区分不同的中断. 注意:中断号取决于硬件,芯片设计时候已经固定. ...

  9. FreeRTOS 临界段和开关中断

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 临界段 代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码 的执行不被 ...

最新文章

  1. 有声专栏-宏基因组专业词汇讲解
  2. pycharm如何执行高级撤销操作回到历史
  3. 让图片动起来,特朗普和蒙娜丽莎深情合唱《Unravel》
  4. 【采用】【评分卡开发】信用评分模型构建流程
  5. 物联网在智慧仓库的价值体现
  6. jcmd 命令_jcmd:一个可以全部统治的JDK命令行工具
  7. python弹出框多一个空白框_Selenium+python3 应对多个弹出框存在(alert_is_present)判断和处理...
  8. CentOS配置syslog发送到服务器
  9. 值得收藏的8个Web端组件库
  10. 转载: .net程序员偏向XML开发的面试题
  11. 西部数据app可导致Windows 和 macOS 提权
  12. 微信公众号-关注取消关注后图文和普通消息自动回复
  13. 八数码问题的SET实现与哈希实现的比较
  14. Phalcon框架启动流程(部分源码)分析
  15. 360cdn能挡住cc攻击_关于本站8.11→8.13遭受大型CC攻击和CDN恶意流量攻击,已向公安部报警...
  16. 【图解UDS】UDS汽车诊断标准协议(ISO 14229)带你入门到精通
  17. 小清新风格的微信公众号图文这样排版,看过的都说好。
  18. c程序语言中long,C语言long
  19. K8S最新版本集群部署超详细(k8s版本1.5.1)docker 版本19.03.1以及基本操作和服务介绍。
  20. Pygame详解(四):event 模块(有USEREVENT事件)

热门文章

  1. win10user文件夹迁移_windows 7、Windows10 系统目录迁移,修改安装的默认路径:Users,Program Files,ProgramData...
  2. 用好故事思维,轻松获得人心
  3. 2022-2028全球与中国高级计划和排程软件市场现状及未来发展趋势
  4. gawk 命令(转载:http://blog.sina.com.cn/s/blog_6238358c01012h1f.html)
  5. Kaggle实战:泰坦尼克幸存者预测 - 上
  6. html5字体在线代码,网络字体@font-face 如何处理网页中的特殊字体
  7. kubernetes-v1.15.0安装【使用kubeadm部署Kubernetes-跳过国内网络问题】
  8. 海尔电视显示连接不上服务器,海尔电视怎么连接手机
  9. 星网锐捷语音网关密码重置恢复出厂设置
  10. 如何选择适合你的兴趣爱好(四十八),手风琴