/***************************************************************************//**
  @ingroup ltimer_port_wch_lchip_systick
  @file ports/wch_lchip_systick/lclock.c
    Файл содержит реализацию порта для ядер QingKe от WCH  
    на базе системного счетчика SysTick. 
    Порт использует определения регистров из библиотеки chip
  @author Borisov Alexey <borisov@lcard.ru>
 ******************************************************************************/

#include "chip.h"
#include "lclock_arch.h"



void lclock_init_val(t_lclock_ticks init_val) {
    CHIP_REGS_STK->CTLR = 0;
    CHIP_REGS_STK->CNTH = (init_val >> 32) & 0xFFFFFFFF;
    CHIP_REGS_STK->CNTL = init_val & 0xFFFFFFFF;
    CHIP_REGS_STK->CTLR |= CHIP_REGFLD_STK_CTLR_STE;
}

t_lclock_ticks lclock_get_ticks(void) {
    uint32_t h1 = CHIP_REGS_STK->CNTH;
    uint32_t l = CHIP_REGS_STK->CNTL;
    uint32_t h2 = CHIP_REGS_STK->CNTH;
    if ((h2 != h1) && (l > 0x80000000U)) {
        h2 = h1;
    }
    return ((uint64_t)h2 << 32) | l;
}

char lclock_is_initialized(void) {
    return CHIP_REGS_STK->CTLR & CHIP_REGFLD_STK_CTLR_STE;
}

void lclock_disable(void) {
    CHIP_REGS_STK->CTLR = 0;
}
