- 论坛徽章:
- 0
|
大家都知道,linux中断流程是
一.当来了一个中断时: do_irq()-->irq_desc[irq].handle_irq--->ISR(驱动程序员来完成)
二.irq_desc[irq].handle_irq这个函数是在linux内核刚开始启动初始化时赋值,可以是handle_edge_irq(用来处理边沿触发)或者handle_level_irq(用来处理电平触发)
问题:
前提:
假设平台对某一个中断号A初始化为边沿触发,那么中断A到来的流程:
A--->do_irq()-->handle_edge_irq()--->ISR
问题:
如果编写驱动时,在ISR中调用函数irq_set_type(),让中断A的触发方式变为电平触发,
①那么当中断A来时的处理流程还是A--->do_irq()--->handle_edge_irq()-->ISR吗?还是
A--->do_irq()-->handle_level_irq()--->ISR?
②如果是A--->do_irq()-->handle_level_irq()--->ISR这个流程,在源码中我并没有发现
irq_desc[irq].handle_irq什么时候被赋值成handle_level_irq()
求大神指点 |
|