#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); }