zephyr/soc/st/stm32/stm32wbax/hci_if/stm32_timer.c

60 lines
1.3 KiB
C

/*
* Copyright (c) 2023 STMicroelectronics
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <zephyr/sys_clock.h>
#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;
}