/*
* timer:
* hrtimer指针,
*
* clock_id:
* CLOCK_REALTIME //实时时间,如果系统时间变了,定时器也会变
* CLOCK_MONOTONIC //递增时间,不受系统影响
*
* mode:
* HRTIMER_MODE_ABS = 0x0, 绝对模式
* HRTIMER_MODE_REL = 0x1, 相对模式
* HRTIMER_MODE_PINNED = 0x02, 和CPU绑定
* HRTIMER_MODE_ABS_PINNED = 0x02, 第一、三种的结合
* HRTIMER_MODE_REL_PINNED = 0x03, 第二、三种的结合
*/
void hrtimer_init(struct hrtimer *timer, clockid_t clock_id, enum hrtimer_mode mode);
/*
* timer:
* hrtimer指针
*
* tim:
* 时间,可以使用ktime_set()函数设置时间,
*
* mode:
* 和初始化的mode参数一致
*/
hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode);
/*
* 单位为秒和纳秒组合
*
* secs:
* 秒
*
* nsecs:
* 纳秒
*/
ktime_t ktime_set(const long secs, const unsigned long nsecs);
# 项目中用来拉高一个引脚
static struct hrtimer g_hrtimer_io_trigger = {0};
static ktime_t get_kernel_timestamp(void)
{
ktime_t ktime = ktime_get(); // 获取当前时间
u64 timestamp = ktime_to_ns(ktime); // 将ktime转换为纳秒时间戳
printk(KERN_INFO "Current timestamp: %llu nanoseconds\n", timestamp);
return ktime;
}
static enum hrtimer_restart timer_isr_io_trigger(struct hrtimer *timer)
{
rtk_trigger(RTK_TRIGGER_ON);
return HRTIMER_NORESTART;
}
/* hrt */
hrtimer_init(&g_hrtimer_io_trigger, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
g_hrtimer_io_trigger.function = timer_isr_io_trigger;
hrtimer_cancel(&g_hrtimer_io_trigger);
hrtimer_start(&g_hrtimer_io_trigger, ktime_set(0, timerdelayus*1000), HRTIMER_MODE_REL);