中断API之enable_irq
- 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 :
- err_out:
- WARN(, KERN_WARNING "Unbalanced enable for IRQ %d\n",
- irq_desc_get_irq(desc));
- break;
- #正常情况下第一个调用enable_irq的时候desc->depth 应该是1,如果是0的话,后面进行--操作的话就成负数了
- case : {
- #如果正处于suspend的过程中,则直接退出
- if (desc->istate & IRQS_SUSPENDED)
- goto err_out;
- 这三个函数后面详细分析
- /* Prevent probing on this irq: */
- irq_settings_set_noprobe(desc);
- #通过chip来使能irq
- irq_enable(desc);
- check_irq_resend(desc);
- /* fall-through */
- }
- #从这里可以知道enable_irq 是可以嵌套的,即同一个irq 可以多次调用enable_irq
- default:
- desc->depth--;
- }
- }
- static inline void irq_settings_set_noprobe(struct irq_desc *desc)
- {
- #只是或上一个_IRQ_NOPROBE flag
- desc->status_use_accessors |= _IRQ_NOPROBE;
- }
- void irq_enable(struct irq_desc *desc)
- {
- irq_state_clr_disabled(desc);
- #正常情况下回调用chip来使能irq
- if (desc->irq_data.chip->irq_enable)
- desc->irq_data.chip->irq_enable(&desc->irq_data);
- else
- desc->irq_data.chip->irq_unmask(&desc->irq_data);
- irq_state_clr_masked(desc);
- }
来源:https://blog.csdn.net/tiantao2012/article/details/78908163
中断API之enable_irq的更多相关文章
- GPIO口及中断API函数【转】
本文转载自:http://blog.sina.com.cn/s/blog_a6559d9201015vx9.htmlG #include <linux/gpio.h> // 标准 GPIO ...
- Linux kernel的中断子系统之(五):驱动申请中断API
返回目录:<ARM-Linux中断系统>. 总结:二重点区分了抢占式内核和非抢占式内核的区别:抢占式内核可以在内核空间进行抢占,通过对中断处理进行线程化可以提高Linux内核实时性. 三介 ...
- 中断API之setup_irq【转】
转自:https://blog.csdn.net/tiantao2012/article/details/78957472 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
- Linux中断 - 驱动申请中断API
一.前言 本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的驱动的时候,如何向Linux Kernel中的中断子系统注册中断处理函数?为了理解注册中断的接口,必须了解一些中断线程化(threa ...
- Linux kernel中断子系统之(五):驱动申请中断API【转】
转自:http://www.wowotech.net/linux_kenrel/request_threaded_irq.html 一.前言 本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的 ...
- Intel 80x86 Linux Kernel Interrupt(中断)、Interrupt Priority、Interrupt nesting、Prohibit Things Whthin CPU In The Interrupt Off State
目录 . 引言 . Linux 中断的概念 . 中断处理流程 . Linux 中断相关的源代码分析 . Linux 硬件中断 . Linux 软中断 . 中断优先级 . CPU在关中断状态下编程要注意 ...
- 非常好!!!Linux源代码阅读——中断【转】
Linux源代码阅读——中断 转自:http://home.ustc.edu.cn/~boj/courses/linux_kernel/2_int.html 目录 为什么要有中断 中断的作用 中断的处 ...
- Linux中断驱动程序
1.中断概念 中断时一种电信号,由硬件设备产生,然后再由中断控制器向处理器发送相应的信号.处理器一经检测到该信号,便中断自己当前正在处理的工作,转而去处理中断.此后,处理器会通知操作系统已经产生中断. ...
- 基於tiny4412的Linux內核移植 --- 实例学习中断背后的知识(1)
作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台 tiny4412 ADK Linux-4.9 概述 前面几篇博文列举了在有设备树的时候,gpio中断的 ...
随机推荐
- BootStrap学习(一)——BootStrap入门
1.环境搭建 中文官网下载地址:http://www.bootcss.com/ 右击选中的WEB项目,点击导入,选择文件系统,然后下一步,选择BootStrap文件目录路径,如下: 完成后,WEB项目 ...
- js实现数组的去重
function filterRepat(arr){ if(Array.isArray(arr) && arr.length){ var arr = arr.filter(functi ...
- 使用python绘制词云
最近在忙考试的事情,没什么时间敲代码,一个月也没几天看代码,最近看到可视化的词云,看到网上也很多这样的工具, 但是都不怎么完美,有些不支持中文,有的中文词频统计得莫名其妙.有的不支持自定义形状.所有的 ...
- RMAN删除归档脚本
crosscheck archivelog all; delete noprompt expired archivelog all; delete noprompt archivelog un ...
- SpringCloud学习笔记(4)----Spring Cloud Netflix之Eureka的配置
1. Eureka监控配置 Eureka的客户端需要加入依赖 <dependency> <groupId>org.springframework.boot</groupI ...
- Debian9.5系统DNS服务器BIND软件配置说明
DNS的出现的历史 网络出现的早期是使用IP地址通讯的,那时就几台主机通讯.但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和W ...
- Python数据分析前提-----pandas
1.read_csv(url):读取数据 2.help(read_csv):打印函数相关用法 3.数据名.dtypes:读取数据的类型(int.float……) 4.type(数据名):读取所有数据的 ...
- python基础5(文件操作,with语句)
打开文件 #使用 open f = open('路径',mode = '打开模式', encoding='编码') #可以使用with语句打开,不需要关闭,可以同时打开多个文件 with open(' ...
- 紫书 习题 8-24 UVa 10366 (构造法)
又是一道非常复杂的构造法-- #include<cstdio> #include<algorithm> #define REP(i, a, b) for(int i = (a) ...
- pandas学习笔记 - 常见的数据处理方式
1.缺失值处理 - 拉格朗日插值法 input_file数据文件内容(存在部分缺失值): from scipy.interpolate import lagrange import pandas as ...