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_nosync 函数调用以后立即返回,不会等待当前中断处理程序执行完毕。上面三个函数都是使能或者禁止某一个中断,有时候我们需要关闭当前处理器的整个中断系统,也就是在学习 STM32 的时候常说的关闭全局中断,这个时候可以使用如下两个函数: local_irq_enable 用于使能当前处理器中断系统,local_irq_disable 用于...
irq_disable函数还会通过irq_state_set_disabled和irq_state_set_masked,设置irq_data.flag的IRQD_IRQ_DISABLED和IRQD_IRQ_MASK标志。 disable_irq的最后,调用了synchronize_irq,该函数通过IRQ_INPROGRESS标志,确保action链表中所有的handler都已经处理完毕,然后还要通过wait_event等待该irq所有的中断线程退出。正因为这样...
假如 A 任务调用 local_irq_disable 关闭全局中断 10S,当关闭了 2S 的时候 B 任务开始运行,B 任务也调用 local_irq_disable 关闭全局中断 3S,3 秒以后 B 任务调用 local_irq_enable 函数将全局中断打开了。此时才过去 2+3=5 秒的时间,然后全局中断就被打开了,此时 A 任务要关闭 10S 全局中断的愿望就破灭...
synchronize_irq函数 该函数等待一个特定的中断处理程序的退出。如果该处理程序正在执行,那么该函数必须退出后才能返回 enable_irq函数 对这些函数的调用可以嵌套。但要记住在一条指定的中断线上,对disable_irq()或 disable_irq_nosync()的每次调用,都需要相应 调用一次enable_irq()。只有在对enable_irq()完成最后一...
void disable_irq(unsigned int irq); void disable_irq_nosync(unsigned int irq); void enable_irq(unsigned int irq); void synchronize_irq(unsigned int irq); 1. 2. 3. 4.
local_irq_disable local_irq_save local_irq_disable是将本cpu的cpsr寄存器中的I(第7)bit置1,用来屏蔽当前CPU上的所有中断,通过操作arm核心中的寄存器来屏蔽到达CPU上的中断,此时中断控制器中所有送往该CPU上的中断信号都将被忽略。 local_irq_disable和local_irq_enable最大的区别在于,local_irq_save会在关闭中...
disable_irq_nosync():立即返回 屏蔽本CPU所有中断源 local_irq_save(flags):将中断状态保留在flags中 local_irq_disable():直接禁止,不保存状态 恢复本CPU所有中断源 local_irq_restore(flags) local_irq_enable() 中断下半部tasklet tasklet的使用较简单,其执行的上下文是软中断。执行的时机通常是顶半部返回的...
void enable_irq (int irq); void disable_irq_nosync(int irq)与void disable_irq(int irg)的区别是前者立即返回,后者等待目前中断处理完。 (2) 屏蔽所有中断 #define local_irq_save (flags)//屏蔽本cpu所有 void local_irq_disable (void) //屏蔽本cpu所有中断 ...
irqflags是中断处理的属性,一般用来指定相应的中断流控。 devname设置中断名称,通常是在cat /proc/interrupts中可以看到此名称。 dev_id在中断共享时会用到,一般设置为这个设备的设备结构体或者NULL。 enable_irq(unsigned int irq) 用来打开中断。 disable_irq(unsigned int irq) ...