• linux中断处理程序


     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
    ");
    
        return 0;
    }

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

    四、中断号查找

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

      

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

  • 相关阅读:
    for循环的执行循序
    final和finally面试时最好的回答
    关于java类加载器的一些概念
    JVM内存分析
    建造者模式
    外观模式
    常用的设计模式
    Java基础知识:Java实现Map集合二级联动3
    Java基础知识:Java实现Map集合二级联动1
    MySQL数据库怎么截取字符串?
  • 原文地址:https://www.cnblogs.com/51qianrushi/p/4294606.html
Copyright © 2020-2023  润新知