/*! * \file hal_sleep.c * * \brief Target xc6xxx hal spi implementation * * \copyright Revised BSD License, see section \ref LICENSE. * * \code * * _ __ _ ________ _ * | |/ /(_)___ / ____/ /_ (_)___ * | // / __ \/ / / __ \/ / __ \ * / |/ / / / / /___/ / / / / /_/ / * /_/|_/_/_/ /_/\____/_/ /_/_/ .___/ * /_/ * (C) 2022-2025 XinChip * * \endcode * * \author ( XinChip ) Alex-J * * \author ( XinChip ) */ /* ------------------------------------------------------------------------------------------------ * Includes * ------------------------------------------------------------------------------------------------ */ #include "hal_timer.h" #include "OSAL_Clock.h" #include "xc_drv_timer.h" uint32 sys_tick_cnt; __RAM_CODE void timer1_callback(void *context) { sys_tick_cnt++; } __RAM_CODE void osal_timer_init(void) { /* timer1 init */ if (cpr_ctlapbclken_grctl__timer_pclk_en__getf() != ENABLE) cpr_ctlapbclken_grctl__timer_pclk_en__setf(ENABLE); cpr_timer1_clk_ctl__timer_clksel__setf(TIMER_CLK_SRC_32M_DIV); cpr_timer1_clk_ctl__timer_clk0_div__setf(TIMER_DIV_CLK_16MHzOr16K); cpr_timer1_clk_ctl__timer_clk1_div__setf(TIMER_DIV_CLK_16MHzOr16K); cpr_lp_ctl__timer_sysclk_sel__setf(ENABLE); timer_tcr__tes__setf(OSAL_TIMER, TIMER_TCR_TES_DISABLE); timer_tcr__tms__setf(OSAL_TIMER, TIMER_MODE_CYCLE); /* value set */ timer_tlc_set(OSAL_TIMER, 10000); //625us = 10000tick /* timer1 start */ NVIC_EnableIRQ(TIMER1_IRQn); NVIC_SetPriority(TIMER1_IRQn,1); timer_tcr__tim__setf(OSAL_TIMER, TIMER_TCR_TIM_DISABLE); timer_tcr__tes__setf(OSAL_TIMER, TIMER_TCR_TES_ENABLE); return; } __RAM_CODE void osal_timer_start(void) { NVIC_EnableIRQ(TIMER1_IRQn); timer_tcr__tim__setf(OSAL_TIMER, TIMER_TCR_TIM_DISABLE); timer_tcr__tes__setf(OSAL_TIMER, TIMER_TCR_TES_ENABLE); } __RAM_CODE void osal_timer_tick_set(uint32 tick) { sys_tick_cnt = tick; } __RAM_CODE uint32 getMcuPrecisionCount(void) { return sys_tick_cnt; }