60 lines
1.3 KiB
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;
|
|
}
|