summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bsp/wch/risc-v/Libraries/ch32_drivers/drv_common.c28
-rw-r--r--bsp/wch/risc-v/Libraries/ch32_drivers/drv_common.h25
2 files changed, 53 insertions, 0 deletions
diff --git a/bsp/wch/risc-v/Libraries/ch32_drivers/drv_common.c b/bsp/wch/risc-v/Libraries/ch32_drivers/drv_common.c
new file mode 100644
index 0000000000..79145ea939
--- /dev/null
+++ b/bsp/wch/risc-v/Libraries/ch32_drivers/drv_common.c
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2006-2023, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2023-06-14 muaxiaohei first version
+ */
+
+#include <rtthread.h>
+#include "drv_common.h"
+
+void rt_hw_us_delay(rt_uint32_t us)
+{
+ uint64_t total_delay_ticks, us_ticks, start, now, delta, reload;
+
+ start = SysTick->CNT;
+ reload = SysTick->CMP;
+ us_ticks = SystemCoreClock / 8000000UL;
+ total_delay_ticks = (uint32_t)us * us_ticks;
+ RT_ASSERT(total_delay_ticks < reload);
+
+ do{
+ now = SysTick->CNT;
+ delta = start > now ? start - now : reload + start - now;
+ }while(delta < total_delay_ticks);
+}
diff --git a/bsp/wch/risc-v/Libraries/ch32_drivers/drv_common.h b/bsp/wch/risc-v/Libraries/ch32_drivers/drv_common.h
new file mode 100644
index 0000000000..df9bed2794
--- /dev/null
+++ b/bsp/wch/risc-v/Libraries/ch32_drivers/drv_common.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2006-2023, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2023-06-14 muaxiaohei first version
+ */
+
+#ifndef __DRV_COMMON_H__
+#define __DRV_COMMON_H__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void rt_hw_us_delay(rt_uint32_t us);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif