#ifndef LCLOCK_ARCH_H_
#define LCLOCK_ARCH_H_

#include "lcspec.h"
#include "chip.h"
#include "ch32v30x.h"

/** Количество тиков системного таймера в секунду */
#define LCLOCK_TICKS_PER_SECOND 1000

/** Тип для представления количества системных тиков */
typedef unsigned int t_lclock_ticks;


extern volatile t_lclock_ticks lclock_systicks;

static LINLINE t_lclock_ticks lclock_get_ticks(void)
{
#if 0
    return lclock_systicks;
#else
    t_lclock_ticks ticks;
    union t_systick_cnt cnt;

    do {
        cnt.CNTH = SysTick->cnt.CNTH;
        cnt.CNTL = SysTick->cnt.CNTL;
    } while (cnt.CNTH != SysTick->cnt.CNTH);
    // SysTick = HCLK / 8
    ticks = (t_lclock_ticks) (cnt.CNT / (CHIP_CLK_SYSTICK_FREQ / 8 / LCLOCK_TICKS_PER_SECOND));
    return ticks;
#endif
}

#endif /* LCLOCK_ARCH_H_ */
