我们了解到AM335x有8个通用定时器,其中DMtimer1是作为系统时钟定时器使用的,此外还有RTC和watchdog两个定时器。
RTC和watchdog是专用定时器,不考虑其他用途。
我们现在想提高系统的定时粒度,如果使用系统定时器,如mod_timer函数集的话,定时粒度是依赖于系统时钟的,只能以系统时钟为最小定时周期,我们可以修改tick频率达到。但是系统tick也不能无限提高,过高的tick频率,导致系统频繁调度,会降低系统运行效率。
为此,想了解一下,在Linux中是否可以使用其他的硬件定时器,由这些定时器中断来触发频率较高的周期计时,而系统tick保持正常的10ms就可以了。
现在了解到一个叫hrtimer的高精度定时器方法,就是使用了额外的硬件定时器,需要编写专门的驱动程序来使用:“http://blog.csdn.net/drivermonkey/article/details/9464469”。
不知哪位知道am335x运行Linux时,是否有使用其他7个通用定时器作为系统时钟之外计时手段的例子?
当然由于存在一个系统时间之外的定时器中断系统运行,估计也会影响系统时间的计时精度吧。
Steven Liu1:
是有看到过在Linux中,把DMTIMER4用做一个计时中断源,但是没理解,你说的“系统时钟之外计时手段的例”是什么意思。是指不用DMTIMER1吗?只要DMTIMER2~7模块没有被占用,就可以使用。
kai zong:
回复 Steven Liu1:
谢谢回复,我就是想了解一下,在AM335x运行Linux系统时如何使用DMTIMER4以外的定时器,不知道能够提供示例。
关于hrtimer,我的立即估计有误,现在还不确定hrtimer和mod_timer函数集是否使用的同一个硬件定时器,望了解的指正。
user4932081:
回复 kai zong:
你好,请问你最后怎么实现高精度定时器的呢?
yongqing wang:
回复 user4932081:
hrtimer高精度定时器的interval由ktime_set(const long secs, const unsigned long nsecs)决定,可做到ns级。
user4932081:
回复 yongqing wang:
那样会影响到系统其它的用到定时器的地方的吧,现在是想单独搞个定时器的驱动,提供给用户态使用。我看到好像ti做了个驱动:dmtimer.c,不知道是不是可以直接用这个呢?我想做到1ms以下,最好的ns级
kai zong:
回复 user4932081:
这个问题很早了,我们后续也没找到解决方案,抱歉帮不上什么忙了。
期待牛人答疑。