1,318
社区成员
发帖
与我相关
我的任务
分享
hrtimer_init(&m_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_PINNED);
m_timer.function = vibrator_timer_func;
hrtimer_start(&m_timer,ktime_set(0, 62500),HRTIMER_MODE_REL_PINNED);
static enum hrtimer_restart vibrator_timer_func(struct hrtimer *timer)
{
gpio_set_value(gpio_test, 1);
gpio_set_value(gpio_test, 0);
hrtimer_forward_now(&m_timer,ktime_set(0, 62500));
return HRTIMER_RESTART;
}
static void __init davinci_timer_init(void)
该函数中有一行
clockevent_davinci.min_delta_ns = 50000; /* 50 usec */
而hrTimer在设定下一次定时中断时,会跟该值进行对比
if (delta < dev->min_delta_ns)
delta = dev->min_delta_ns;
(在clockevents_program_event函数中)
默认该值是50us,所以我定时小于50us的都被改为了50us,将该值改为5us后,问题解决,出来了完美的40us周期波形。
写在这里希望对后面遇到同样问题的人有帮助。