/* * Copyright (c) 2023 STMicroelectronics * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include "stm32_timer.h" #define TICKS_PER_MS (CONFIG_SYS_CLOCK_TICKS_PER_SEC / MSEC_PER_SEC) static struct k_timer timer; UTIL_TIMER_Status_t UTIL_TIMER_Create(UTIL_TIMER_Object_t *timer_object, uint32_t period, UTIL_TIMER_Mode_t mode, void (*callback)(void *), void *argument) { if (timer_object == NULL) { return UTIL_TIMER_INVALID_PARAM; } timer_object->ReloadValue = period * TICKS_PER_MS; timer_object->Mode = mode; timer_object->Callback = callback; timer_object->argument = argument; timer_object->IsRunning = false; timer_object->IsReloadStopped = false; timer_object->Next = NULL; return UTIL_TIMER_OK; } UTIL_TIMER_Status_t UTIL_TIMER_Start(UTIL_TIMER_Object_t *timer_object) { if (timer_object == NULL) { return UTIL_TIMER_INVALID_PARAM; } k_timer_user_data_set(&timer, timer_object); k_timer_start(&timer, K_TICKS(timer_object->ReloadValue), K_TICKS(timer_object->ReloadValue)); timer_object->IsRunning = true; return UTIL_TIMER_OK; } UTIL_TIMER_Status_t UTIL_TIMER_Stop(UTIL_TIMER_Object_t *timer_object) { if (timer_object == NULL) { return UTIL_TIMER_INVALID_PARAM; } k_timer_stop(&timer); timer_object->IsRunning = false; return UTIL_TIMER_OK; }