413 void disable_irq(unsigned int irq) 414 { 415 if (!__disable_irq_nosync(irq)) 416 synchronize_irq(irq); 417 } 372 static int __disable_irq_nosync(unsigned int irq) 373 { 374 unsigned long flags; 375 struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_ ...
下面是`disable_irq()`函数的操作流程: 1. 驱动程序调用`ioctl()`系统调用将文件描述符传递给内核模块。 2. 内核模块接收文件描述符,并使用该文件描述符查找到对应的设备结构体。 3. 内核模块通过设备结构体中的`disable_irq()`函数将指定中断屏蔽。 4. 内核中断处理函数将检测到中断被屏蔽,并终止中断处理。
使用request_irq 函数申请中断的时候需要设置中断处理函数,中断处理函数格式如下所示: 中断使能和禁止函数 常用的中断使用和禁止函数如下所示: enable_irq 和 disable_irq 用于使能和禁止指定的中断,irq 就是要禁止的中断号。disable_irq函数要等到当前正在执行的中断处理函数执行完才返回,因此使用者需要保证不会产生新...
函数disable_irq_nosync()不会等待当前中断处理程序执行完毕 synchronize_irq函数 该函数等待一个特定的中断处理程序的退出。如果该处理程序正在执行,那么该函数必须退出后才能返回 enable_irq函数 对这些函数的调用可以嵌套。但要记住在一条指定的中断线上,对disable_irq()或 disable_irq_nosync()的每次调用,都需要相...
void disable_irq_nosync(int irq); void enable_irq(int irq); 调用任一函数可能更新在可编程控制器(PIC)中的特定 irq 的掩码, 因此禁止或使能跨所 有处理器的特定 IRQ. 对这些函数的调用能够嵌套 -- 如果 disable_irq 被连续调用 2 次, 需要 2 个 enable_irq 调用在 IRQ 被真正重新使能前. 可能调用...
enable_irq() 功能 使用enable_irq函数使能中断号,使得该中断可以被触发和处理 头文件#include<linux/interrupt.h>原型voidenable_irq(unsignedintirq);参数unsignedintirq 中断号 返回值 无 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. disable_irq() ...
禁止中断voiddisable_irq_nosync(unsigned int irq);voiddisable_irq(unsigned int irq);参数:irq,要禁止的中断对应的编号。 注意:在中断服务程序中不能使用 disable_irq 这个函数,否则内核崩溃,可以使用 disable_irq_nosync。 disable_irq:函数调用后,函数不会马上返回,而等待中断程序执行完成才返回,在中断调用会导...
如果设置了共享标志,那么函数删除仅仅对dev对应的处理程序,除非删除了最后一个处理程序后,中断线才会被禁用。 五、编写中断处理程序 irqreturn_t intr_handler 返回值是一个特殊类型:irqreturn_t,可能返回两个特殊的值:IRQ_NONE和IRQ_HANDLED 重入和中断处理程序:中断程序是不需要重入的,程序中断时,其他中断会被屏蔽...
depth和标志IRQ_DISABLED表明IRQ线被使能还是禁止。每次调用disable_irq()和disable_irq_nosync()函数,depth都会增加;如果depth大于0,则函数禁止IRQ线并且设置IRQ_DISABLED标志。相反,如果调用enable_irq()函数,depth会递减,如果depth等于0,则使能IRQ线并且清除IRQ_DISABLED标志。
staticinlinevoidarch_local_irq_disable(void) { asmvolatile( " cpsid i @ arch_local_irq_disable" : : :"memory","cc"); } 函数介绍:arch_local_irq_disable函数用于将CPSR寄存器中的中断使能位设为0,从而禁止CPU响应中断。 相关实现:同上