关于中断中屏蔽中断disable_irq_nosync

void timer_func(unsigned long arg)
{
printk("enter timer_func.............\n");
del_timer(×s);
printk("del_timer....................\n");
enable_irq(76);
printk("enable_irq...................\n");
}

irqreturn_t cdd_isr(int irq,void *dev_id)

{
disable_irq_nosync(76);
printk("occur up key press or release!\n");
add_timer(×s);
mod_timer(×s, jiffies+HZ); 
printk("exit cdd_isr\n");
return IRQ_HANDLED;

}

当连续两次触发中断的时间间隔小于内核定时器设定的时间时

disable_irq_nosync 经过试验发现只是一个存储下一个中断的函数,即等待第一个中断处理结束,当enable_irq后(即timer_func函数执行结束)会再次进入中断函数,执行第二次触发的中断,而不是屏蔽掉第二次触发的中断。

关于如何屏蔽第二次中断,我还未找到好的解决方法。

你可能感兴趣的:(驱动中断)