系统:回退海思时间修改 1510/1
authorCaisking <3449750381@qq.com>
Wed, 11 Dec 2024 07:59:26 +0000 (15:59 +0800)
committerCaisking <3449750381@qq.com>
Wed, 11 Dec 2024 07:59:26 +0000 (15:59 +0800)
code/sdk/drivers/chips/brandy/porting/liteos/riscv70/tick_timer.c

index 73d4fbd..9e9712c 100755 (executable)
@@ -120,17 +120,48 @@ void HalDelayUs(unsigned usecs)
     }
 }
 
+#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;
 }