Lines Matching full:timer
15 #include <zephyr/drivers/timer/system_timer.h>
22 /* Maximum time interval between timer interrupts (in hw_cycles) */
35 /* Global timer state */
41 bool initialized; /* Set to true when timer is initialized */
42 sl_sleeptimer_timer_handle_t handle; /* Timer handle for system timer */
49 struct sleeptimer_timer_data *timer = data; in sleeptimer_cb() local
52 uint32_t prev = atomic_get(&timer->last_count); in sleeptimer_cb()
56 uint32_t unannounced = pending / timer->cyc_per_tick; in sleeptimer_cb()
58 atomic_set(&timer->last_count, prev + unannounced * timer->cyc_per_tick); in sleeptimer_cb()
63 static void sleeptimer_clock_set_timeout(int32_t ticks, struct sleeptimer_timer_data *timer) in sleeptimer_clock_set_timeout() argument
69 ticks = (ticks == K_TICKS_FOREVER) ? timer->max_timeout_ticks : ticks; in sleeptimer_clock_set_timeout()
70 ticks = CLAMP(ticks, 0, timer->max_timeout_ticks); in sleeptimer_clock_set_timeout()
72 k_spinlock_key_t key = k_spin_lock(&timer->lock); in sleeptimer_clock_set_timeout()
75 uint32_t pending = curr % timer->cyc_per_tick; in sleeptimer_clock_set_timeout()
76 uint32_t next = ticks * timer->cyc_per_tick; in sleeptimer_clock_set_timeout()
83 next = timer->cyc_per_tick; in sleeptimer_clock_set_timeout()
87 sl_sleeptimer_restart_timer(&timer->handle, next, sleeptimer_cb, timer, 0, 0); in sleeptimer_clock_set_timeout()
88 k_spin_unlock(&timer->lock, key); in sleeptimer_clock_set_timeout()
91 static uint32_t sleeptimer_clock_elapsed(struct sleeptimer_timer_data *timer) in sleeptimer_clock_elapsed() argument
93 if (!IS_ENABLED(CONFIG_TICKLESS_KERNEL) || !timer->initialized) { in sleeptimer_clock_elapsed()
97 return (sl_sleeptimer_get_tick_count() - atomic_get(&timer->last_count)) / in sleeptimer_clock_elapsed()
98 timer->cyc_per_tick; in sleeptimer_clock_elapsed()
122 struct sleeptimer_timer_data *timer = &g_sleeptimer_timer_data; in sleeptimer_init() local
135 timer->cyc_per_tick = z_clock_hw_cycles_per_sec / CONFIG_SYS_CLOCK_TICKS_PER_SEC; in sleeptimer_init()
137 timer->max_timeout_ticks = MAX_TIMEOUT_CYC / timer->cyc_per_tick; in sleeptimer_init()
138 timer->initialized = true; in sleeptimer_init()
140 atomic_set(&timer->last_count, in sleeptimer_init()
141 ROUND_DOWN(sl_sleeptimer_get_tick_count(), timer->cyc_per_tick)); in sleeptimer_init()
143 /* Start the timer and announce 1 kernel tick */ in sleeptimer_init()
145 status = sl_sleeptimer_start_timer(&timer->handle, timer->cyc_per_tick, in sleeptimer_init()
146 sleeptimer_cb, timer, 0, 0); in sleeptimer_init()
148 status = sl_sleeptimer_start_periodic_timer(&timer->handle, timer->cyc_per_tick, in sleeptimer_init()
149 sleeptimer_cb, timer, 0, 0); in sleeptimer_init()