我有一个Linux设备驱动程序,它使用中断处理程序来完成它的工作。
如何安排每隔 X 毫秒(中断线断开)调用中断处理程序?
答案 0 :(得分:2)
假设您只是在修复中断行之前进行调试,您可以尝试在timer_interrupt
中的arch/*/kernel/time.c
内调用您的ISR(减去其上下文保存代码)启用中断。如果你需要比滴答源更慢的速率,你将不得不添加一些代码,使它只触发Y刻度中的一个。
如果在中断上下文中运行ISR不是您的目标,并且您只想让下半部分驱动程序代码定期运行,则可以使用计时器API而不是黑客timer_interrupt
。在这种情况下,您的ISR代码将不会在中断上下文中执行。
如果您需要比刻度源更快的速率,则可能需要使用高位计时器。在这里,您实际上不会在中断上下文中执行。
有一个很好的介绍高级计时器和here的计时器API。 timer_create( )
man page中有一个示例用户空间计时器。对于内核空间计时器,您需要hrtimer_init()
和hrtimer_start()
。有一个示例hrtimer here。为了让这个定期工作,我想你只需在每次触发或使用SE post中的hrtimer_forward( )
解决方案时重置计时器。