diff --git a/kal/cmsis/cmsis_liteos2.c b/kal/cmsis/cmsis_liteos2.c
index 9d6cb289..9aa795b6 100644
--- a/kal/cmsis/cmsis_liteos2.c
+++ b/kal/cmsis/cmsis_liteos2.c
@@ -639,7 +639,7 @@ osStatus_t osDelay(uint32_t ticks)
return osOK;
}
if (osKernelGetState() != osKernelRunning) {
- LOS_SysDelay(ticks);
+ LOS_UDelay(ticks * OS_US_PER_TICK);
} else {
uwRet = LOS_TaskDelay(ticks);
}
diff --git a/kernel/arch/include/los_timer.h b/kernel/arch/include/los_timer.h
index bc09a703..498f02c4 100644
--- a/kernel/arch/include/los_timer.h
+++ b/kernel/arch/include/los_timer.h
@@ -67,9 +67,7 @@ VOID HalClearSysSleepFlag(VOID);
VOID HalEnterSleep(LOS_SysSleepEnum sleep);
-VOID HalDelay(UINT32 ticks);
-
- /**
+/**
* @ingroup los_timer
* @brief Get systick cycle.
*
diff --git a/kernel/include/los_task.h b/kernel/include/los_task.h
index 7bd594dd..d1288f5a 100644
--- a/kernel/include/los_task.h
+++ b/kernel/include/los_task.h
@@ -1098,14 +1098,14 @@ extern CHAR* LOS_TaskNameGet(UINT32 taskID);
* @attention:
*
*
- * @param ticks [IN] delay times.
+ * @param UINT64 [IN] delay times, microseconds.
*
* @retval: None.
* @par Dependency:
* - los_task.h: the header file that contains the API declaration.
* @see None.
*/
-extern VOID LOS_SysDelay(UINT32 ticks);
+extern VOID LOS_UDelay(UINT64 microseconds);
/**
* @ingroup los_cpup
diff --git a/kernel/src/los_task.c b/kernel/src/los_task.c
index c860f3c3..89561b0a 100644
--- a/kernel/src/los_task.c
+++ b/kernel/src/los_task.c
@@ -1296,15 +1296,17 @@ LITE_OS_SEC_TEXT_MINOR VOID LOS_Msleep(UINT32 mSecs)
(VOID)LOS_TaskDelay(interval);
}
-VOID LOS_SysDelay(UINT32 ticks)
+VOID LOS_UDelay(UINT64 microseconds)
{
UINT64 endTime;
- if (ticks == 0) {
+ if (microseconds == 0) {
return;
}
- endTime = LOS_SysCycleGet() + ticks * OS_CYCLE_PER_TICK;
+ endTime = (microseconds / OS_SYS_US_PER_SECOND) * OS_SYS_CLOCK +
+ (microseconds % OS_SYS_US_PER_SECOND) * OS_SYS_CLOCK / OS_SYS_US_PER_SECOND;
+ endTime = LOS_SysCycleGet() + endTime;
while (LOS_SysCycleGet() < endTime) {
}