Linux中断管理

每一个中断信号linux都会分配一个中断号驱动开发人员需要在arch/arm/mach-exynos/include/mach/irqs.h  ,找到中断编号每一中断信号在linux内核中都有一个struct irq_desc结构体来描述这个中断,当中断发生时内核会根据中断编号查找irq_desc结构体
linux在中断处理的时候,整个中断处于关闭状态,中断处理引入底半部基址(中断的延时处理)

linux如何完成中断
static inline int __must_check
 request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,        
         const char *name, void *dev) ; 
    注册中断处理函数
    返回值:成功:  失败:负数
    参数:unsigned int irq   中断编号
          irq_handler_t handler  中断处理函数指针(函数在中断发生执行,执行过程中irq关闭)
          unsigned long flags  中断标志IRQF_SHARED 外部中断需要设置触发方式
          const char *name   cat /proc/interrupts时查看到的中断名
          void *dev  传递给中断处理函数的参数
          
disable_irq(unsigned int irq);//关闭中断
void free_irq(unsigned int irq, void *dev_id);//释放中断资源

typedef irqreturn_t (*irq_handler_t)(int irq, void * dev);
        中断处理函数:
            IRQ_HANDLED  正常退出统一的返回
            参数:int irq  中断号,系统自动回写
            void * dev  request_irq的最后一个参数
            
中断底半部:中断的延时处理
    底半部的实现方式:
        tasklet(利用软件中断实现)(延时短, 不允许睡眠,部允许调度)
        属于中断上下文(时效性高),任意一个中断函数结束都会自动执行一个tasklet函数
        tasklet的实现,内核维护struct  tasklet_struct;
        
        void fun(unsigned long data)
        {
        
        }
        1.DECLARE_TASKLET(my, fun, data);//初始化tasklet结构,定义中断的延时处理函数是fun
        2.tasklet_schedule(&my);//注册taskle结构my到队列
     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值