bs_bcu_app/kit/kit_time.c

152 lines
2.8 KiB
C
Raw Normal View History

2024-11-07 17:24:19 +08:00
#include "kit_time.h"
#include "kit_debug.h"
#ifdef NO_OS
uint32_t sys_tick = 0;
#elif defined UCOS3
#include "os.h"
#endif
void kit_time_beat(void)
{
#ifdef NO_OS
sys_tick++;
#elif defined UCOS3
OSTimeTick();
#endif
}
uint32_t kit_time_get_tick(void)
{
#ifdef NO_OS
return sys_tick;
#else
OS_ERR ERR;
return OSTimeGet(&ERR);
#endif
}
uint32_t kit_time_get_interval(uint32_t old_tick, uint32_t new_tick)
{
uint32_t interval = 0;
if(new_tick >= old_tick)
interval = new_tick - old_tick;
else
interval = new_tick + ((uint32_t)0xFFFFFFFF - old_tick);
return interval;
}
uint32_t kit_time_get_interval_by_now(uint32_t last_tick)
{
uint32_t interval = kit_time_get_interval(last_tick, kit_time_get_tick());
return interval;
}
uint32_t kit_time_get_interval_by_now_and_update(uint32_t *last_tick)
{
uint32_t now_tick = kit_time_get_tick();
uint32_t interval = kit_time_get_interval(*last_tick, now_tick);
*last_tick = now_tick;
return interval;
}
#if 0
#include "drv_clk.h"
//延时和主频相关M4 1us 系数为33
void kit_time_dly_us(uint32_t dly)
{
if(dly >= 1)
{
dly = dly * ((uint32_t)33 * 168 * 1000000 / CLOCK_SYS_FREQ);
while(--dly);
}
}
#endif
void kit_time_dly_100ns(void)
{
__nop();
}
KitResult kit_wait_flag(volatile uint32_t *reg, uint32_t flag_bit, int32_t timeout)
{
KitResult res = kKitResult_Ok;
KIT_ASSERT_PARAM((reg != NULL) && (flag_bit != 0) && (timeout > 0));
while((*reg & flag_bit) == 0)
{
if(timeout-- < 0)
{
res = kKitResult_TimeOut;
break;
}
}
return res;
}
void kit_time_dly_ms(uint32_t dly)
{
OS_ERR err;
#ifdef NO_OS
uint32_t tick = kit_time_get_tick();
while((kit_time_get_tick() - tick) < dly);
#elif defined UCOS3
OSTimeDly(dly,OS_OPT_TIME_DLY, &err);
#endif
}
void kit_time_dly_by_fix_period(uint32_t last_tick,uint16_t period)
{
uint32_t tick_diff = 0;
tick_diff = kit_time_get_interval_by_now(last_tick);
if (tick_diff < period)
kit_time_dly_ms(period - tick_diff);
else
kit_time_dly_ms(1);
}
//返回时间格式和time.h中定义一致
struct tm * kit_time_get_date(uint16_t start_year, uint32_t stamp)
{
struct tm tmp;
tmp.tm_year = start_year - 1900;
tmp.tm_mon = 1 - 1;
tmp.tm_mday = 1;
tmp.tm_hour = 0;
tmp.tm_min = 0;
tmp.tm_sec = 0;
tmp.tm_isdst = -1;
stamp += mktime(&tmp);
return localtime(&stamp);
}
uint32_t kit_time_get_stamp(uint16_t start_year, struct tm *time)
{
struct tm tmp;
tmp.tm_year = start_year - 1900;
tmp.tm_mon = 1 - 1;
tmp.tm_mday = 1;
tmp.tm_hour = 0;
tmp.tm_min = 0;
tmp.tm_sec = 0;
tmp.tm_isdst = -1;
return mktime(time) - mktime(&tmp);
}