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\n");

    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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。