}
}
+#ifdef SUPPORT_RC_CALIBRATION
+volatile uint64_t g_pre_count = 0;
+volatile double g_pre_msec = 0;
+#endif
+
uint64_t HalClockGetCycles(void)
{
+#ifdef SUPPORT_RC_CALIBRATION
+ volatile double tick_count;
+#else
uint64_t tick_count;
+#endif
uint64_t cycle;
uint32_t lock_int_save;
uint32_t load_tick;
+#ifdef SUPPORT_RC_CALIBRATION
+ volatile double msec;
+ volatile uint64_t now_count;
+#endif
lock_int_save = LOS_IntLock();
+
+#ifdef SUPPORT_RC_CALIBRATION
+ if (g_pre_count == 0) {
+ tick_count = (uapi_systick_get_count() * OS_SYS_MS_PER_SECOND) / CLOCK_32K_CALI_FREQ;
+ g_pre_count = uapi_systick_get_count();
+ g_pre_msec = tick_count;
+ } else {
+ now_count = uapi_systick_get_count();
+ msec = (double)((now_count - g_pre_count) * OS_SYS_MS_PER_SECOND) / CLOCK_32K_CALI_FREQ;
+ tick_count = g_pre_msec + msec;
+
+ g_pre_count = now_count;
+ g_pre_msec = tick_count;
+ }
+#else
tick_count = uapi_systick_get_ms();
+#endif
+
load_tick = machine_timer_get_load_count();
cycle = (uint64_t)(tick_count * load_tick);
+
LOS_IntRestore(lock_int_save);
return cycle;
}