Linux进行中断处理的4个步骤:
  1、当中断产生,跳到统一入口IRQ_SVC
  2、获取中断号
  3、根据中断号找到irq_desc结构
  4、从irq_desc结构中取出事先注册好的中断处理函数

Linux中断处理程序设计:
  1、注册中断
  2、实现中断处理函数
  3、注销处理

一、注册中断
  使用request_irq函数
  原型:int request_irq(unsigned int irq,irq_handler_t handler,unsigned long flags, const char *devname, void *dev_id)
  参数:
    irq:中断号
    handler:中断处理函数名
    flags:中断选项,例:IRQF_TRIGGER_FALLING(在下降沿触发中断),其余选项对IRQF_TRIGGER_FALLING逆搜索即可得出
    devname:产生中断的设备名
    id:设备id,当中断选项为IRQF_SHARED共享中断时用到,即同一中断号会包含多个设备的irq_desc结构体,根据设备id加以区分

二、实现中断处理函数
  中断处理函数有以下限制:
    1、不能调用可能引起阻塞的函数
    2、不能调用可能引起中断的函数
  处理流程:
    1、检查设备是否产生中断
    2、清除中断产生标志
    3、相应的硬件操作
  其中,第一步针对共享中断,第二步通常内核会进行清除。

/*中断处理函数*/
irqreturn_t key_int(int irq, void *dev_id)
{
/*1、检测设备是否产生中断*/ /*2、清除中断产生标志*/ /*3、相应的硬件操作*/
printk("press key down\n"); return ;
}

三、注销中断
  free_irq函数
  原型:void    free_irq(unsigned int irq, void *dev_id)
  参数:
    irq:中断号
    id:设备id

四、中断号查找

  用SourceInsight查看linux内核源代码,打开s3c2410对应的irqs.h

  

  查看mini2440手册和s3c2440芯片手册查到设备对应的硬件中断号,即EINTXX,在内核代码中中断号即为与之对应的IRQ_EINTXX

linux中断处理程序的更多相关文章

  1. 13.linux中断处理程序

    linux中断处理程序 一.中断处理流程 在linux内核代码中进入entry-armv.S目录: linux统一的入口:__irq svc. 进入了统一的入口之后,程序跳到irq_handler标号 ...

  2. linux内核--中断处理程序

    一个设备的中断处理程序是它设备驱动程序的一部分--设备驱动程序是用于对设备进行管理的内核代码.中断处理程序与其他内核函数的真正区别在于,中断处理程序是被内核调用来响应中断的,而它们运行于我们称之为中断 ...

  3. Linux中断概述

    中断和异常 1.1中断的由来及实质 Linux内核要管理计算机上的硬件设备,首先要和他们通信.而处理器的速度跟外围硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器向硬件发出一个请求,然后 ...

  4. Linux中断驱动程序

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

  5. linux内核分析笔记----中断和中断处理程序【转】

    转自:http://www.cnblogs.com/hanyan225/archive/2011/07/17/2108609.html 中断还是中断,我讲了很多次的中断了,今天还是要讲中断,为啥呢?因 ...

  6. Linux设备驱动 之 中断处理程序

    注册中断处理程序 中断处理程序是管理硬件驱动程序的组成部分:如果设备使用中断,那么相应的驱动程序就注册一个中断处理程序: 驱动程序通过request_irq()函数注册,并且激活给定的中断线,以处理中 ...

  7. linux内核分析笔记----中断和中断处理程序

    中断还是中断,我讲了很多次的中断了,今天还是要讲中断,为啥呢?因为在操作系统中,中断是必须要讲的.. 那么什么叫中断呢, 中断还是打断,这样一说你就不明白了.唉,中断还真是有点像打断.我们知道linu ...

  8. linux中断与异常

    看了<深入理解linux内核>的中断与异常,简单总结了下,如果有错误,望指正! 一 什么是中断和异常 异常又叫同步中断,是当指令执行时由cpu控制单元产生的,之所以称之为异常,是因为只有在 ...

  9. Linux 中断详解 【转】

    转自:http://blog.csdn.net/tiangwan2011/article/details/7891818 原文地址 http://www.yesky.com/20010813/1921 ...

随机推荐

  1. NSURLConnection获取数据

    - (void)loadDataFromUrl { NSURL* url = [NSURL URLWithString:@"http://m.weather.com.cn/data/1011 ...

  2. C primer plus 读书笔记第八章

    本章的标题是字符输入/输出和输入确认.主要内容是讨论用于I/O的标准函数. 1.getchar()和putchar() 这两个函数之前用过,我们通过这两个函数来讨论下缓冲区. #include &qu ...

  3. gulp入门学习

    一.gulp简介 gulp是一个自动化构建工具.在开发过工程中,能够使用gulp对项目进行自动构建,大大提高工作效率. 二.安装gulp 在安装gulp之前先要确认已经正确安装了node.js,然后在 ...

  4. Javascript 第一阶段 学习使用总结

    JavaScript 是一种轻量级的编程语言.JavaScript 是可插入 HTML 页面的编程代码.脚本可被放置在 HTML 页面的 <body> 和 <head> 部分中 ...

  5. webform repeater

    repeater:由模板构成,解析后模板就不存在了             需要指定数据源进行数据绑定 List<Fruit> list = new FruitDA().Select(); ...

  6. 汇编笔记之 ret 、retf和call

    作用: ret  将 栈顶数据出栈到IP retf 将 栈顶数据出栈到IP ,然后再次将栈顶数据出栈到CS 这样一来,可以使程序跳转到已经定义好了的代码段去执行. call 语法 call s0 (如 ...

  7. C/C++中的&&和||运算符

    代码: #include <iostream> #include <cstdio> using namespace std; int main(){ ,b=,c=-,d=; d ...

  8. 关于C++条件运算符(三目运算符)右结合的说明

    C++条件运算符 a ? c : d;是右结合的,但是这个右结合要怎么理解呢? 对于a ? b : c ? d : e; 这样的表达式如果按照右结合来解读的话,那不应该是先运算c,然后返回d或者e,返 ...

  9. phpcms V9 修改生成静态文件路径/html

    在论坛看到部分用户反馈这个问题,要修改的其实是html_root的值,默认是"/html"如果要生成在网站根目录的话,这个值则要为空.论坛上现在看到的办法是打开caches\con ...

  10. PHP iconv()编码转换函数用法示例

    PHP iconv()字符编码转换函数的用法,iconv()函数,在php5中是内置的,语法格式:iconv("UTF- 8","GB2312//IGNORE" ...