152 lines
2.8 KiB
C
152 lines
2.8 KiB
C
#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);
|
||
}
|
||
|
||
|