|
|
|
#include "p_tcc.h"
|
|
|
|
#include "lvgl/lvgl.h"
|
|
|
|
static struct timer_task TIMER_0_task1, TIMER_0_task2;
|
|
|
|
struct timer_descriptor p_tcc_inst;
|
|
|
|
#define P_MAX_TIME_STR (64)
|
|
|
|
static volatile uint32_t sys_time = 0;
|
|
|
|
static char sys_time_str[64];
|
|
|
|
|
|
|
|
static void TIMER_0_task1_cb(const struct timer_task *const timer_task)
|
|
|
|
{
|
|
|
|
sys_time++;
|
|
|
|
lv_tick_inc(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
void p_time_init(void)
|
|
|
|
{
|
|
|
|
delay_init(SysTick);
|
|
|
|
hri_mclk_set_APBAMASK_TC0_bit(MCLK);
|
|
|
|
hri_gclk_write_PCHCTRL_reg(GCLK, TC0_GCLK_ID, CONF_GCLK_TC0_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
|
|
|
|
|
|
|
|
timer_init(&p_tcc_inst, TC0, _tc_get_timer());
|
|
|
|
|
|
|
|
TIMER_0_task1.interval = 1;
|
|
|
|
TIMER_0_task1.cb = TIMER_0_task1_cb;
|
|
|
|
TIMER_0_task1.mode = TIMER_TASK_REPEAT;
|
|
|
|
|
|
|
|
timer_add_task(&p_tcc_inst, &TIMER_0_task1);
|
|
|
|
timer_start(&p_tcc_inst);
|
|
|
|
}
|
|
|
|
uint32_t p_get_time(void)
|
|
|
|
{
|
|
|
|
return sys_time;
|
|
|
|
}
|
|
|
|
|
|
|
|
const char* p_get_time_str(void)
|
|
|
|
{
|
|
|
|
uint16_t millis = sys_time % 1000;
|
|
|
|
// remove millis portion
|
|
|
|
uint32_t current_time = sys_time / 1000;
|
|
|
|
uint8_t hour = ((current_time % 86400UL) / 3600); // 86400 seconds per day
|
|
|
|
uint8_t minute = ((current_time % 3600) / 60);
|
|
|
|
uint8_t _sec = (current_time % 60);
|
|
|
|
memset(sys_time_str, '\0', P_MAX_TIME_STR);
|
|
|
|
snprintf(sys_time_str, P_MAX_TIME_STR, "%02u:%02u:%02u:%03u", hour, minute, _sec, millis);
|
|
|
|
|
|
|
|
return sys_time_str;
|
|
|
|
|
|
|
|
}
|