manually merged with ARM version

This commit is contained in:
2025-11-13 17:43:55 +03:00
parent f978759ae0
commit 04015fb4cb
463 changed files with 119514 additions and 45 deletions

View File

@ -0,0 +1,74 @@
/***************************************************************************//**
@addtogroup ltimer
@{
@file lclock.h
Файл содержит заголовки функций для работы с системным счетчиком. Сами функции
реализуются портом для соответствующей платформы.
@author Borisov Alexey <borisov@lcard.ru>
*****************************************************************************/
#ifndef LCLOCK_H_
#define LCLOCK_H_
#include "lclock_arch.h"
#include "lcspec.h"
#ifndef LCLOCK_TICKS_PER_SECOND
/** Константа, определяющее количество отсчетов системного счетчика в секунду */
#define LCLOCK_TICKS_PER_SECOND 1000
#endif
#if LCLOCK_TICKS_PER_SECOND == 1000
/** Макрос для перевода интервала в мс в количество отсчетов системного счетчика */
#define LTIMER_MS_TO_CLOCK_TICKS(tout) (tout)
/** Макрос для перевода интервала в количестве отсчетов системного счетчика в интервал в мс */
#define LTIMER_CLOCK_TICKS_TO_MS(tout) (tout)
#else
#define LTIMER_MS_TO_CLOCK_TICKS(tout) ((tout)*(LCLOCK_TICKS_PER_SECOND/1000))
#define LTIMER_CLOCK_TICKS_TO_MS(tout) ((tout)*1000/LCLOCK_TICKS_PER_SECOND)
#endif
/** Маска для выделения старшего бита в типе #t_lclock_ticks */
#define LCLOCK_HIGH_BIT (((t_lclock_ticks)-1)/2 + 1)
/** Проверка, установлен ли старший бит для типа #t_lclock_ticks. Если
переменная данного типа содержит интервал в отсчетах системного счетчика,
полученный как разность значений отсчетов счетчика, то данный макрос
можно использовать как признак, отрицательный ли интервал */
#define LCLOCK_IS_NEG(clock) ((clock) & LCLOCK_HIGH_BIT)
#ifdef __cplusplus
extern "C" {
#endif
/** Инициализация системного счетчика заданным значением и его запуск */
void lclock_init_val(t_lclock_ticks init_val);
/** Получение текущего значения системного счетчика */
t_lclock_ticks lclock_get_ticks(void);
/** Запуск системного счетчика в случае, если его начальное значение не важно */
static LINLINE void lclock_init(void) {
lclock_init_val(0);
}
/** Проверка, был ли уже инициализирован системный счетчик */
char lclock_is_initialized(void);
/** Запрет работы системного счетчика */
void lclock_disable(void);
/** Для некоторых портов есть возможность реализовать пользовательскую функцию,
* которая будет вызываться раз в мс. Для этого необходимо глобально определить
* LCLOCK_USE_USER_MS_CB и реализовать функцию lclock_user_ms_cb() */
#ifdef LCLOCK_USE_USER_MS_CB
extern void lclock_user_ms_cb(void);
#endif
#ifdef __cplusplus
}
#endif
#endif /* LCLOCK_H_ */
/** @} */