1 #include <hal/hwtimer.h>
2 #include <lunaix/spike.h>
4 #include <usr/lunaix/ioctl_defs.h>
6 struct hwtimer* current_timer;
9 hwtimer_base_frequency()
11 return current_timer->base_freq;
15 hwtimer_current_systicks()
17 return current_timer->systicks();
21 hwtimer_to_ticks(u32_t value, int unit)
23 // in case system frequency is less than 1000Hz
24 if (unit != TIME_MS) {
25 return current_timer->running_freq * unit * value;
28 ticks_t freq_ms = current_timer->running_freq / 1000;
30 return freq_ms * value;
34 __hwtimer_ioctl(struct device* dev, u32_t req, va_list args)
36 struct hwtimer* hwt = (struct hwtimer*)dev->underlay;
49 hwtimer_init(u32_t hertz, void* tick_callback)
51 struct hwtimer* hwt_ctx = hwtimer_choose();
53 hwt_ctx->init(hwt_ctx, hertz, tick_callback);
54 hwt_ctx->running_freq = hertz;
56 current_timer = hwt_ctx;
58 struct device* timerdev = device_addsys(NULL, hwt_ctx, hwt_ctx->name);
60 timerdev->ops.exec_cmd = __hwtimer_ioctl;