summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHuang YunKun <[email protected]>2025-07-31 17:27:18 +0800
committerGitHub <[email protected]>2025-07-31 17:27:18 +0800
commitc55cbc5cf29ef29913e46a909bade7e98e8b939f (patch)
tree2f0e469a1b9377fa7eeb9b860d2d7caf791bf094
parent9f66b35874528f17b4818aa14dc801ba8d408373 (diff)
[BSP] 添加GD32E230开发板适配 (#10557)
-rw-r--r--.github/ALL_BSP_COMPILE.json1
-rw-r--r--.gitignore3
-rw-r--r--bsp/gd32/arm/README.md2
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/.ci/attachconfig/ci.attachconfig.yml25
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/.config1424
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/Kconfig12
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/README.md105
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/SConscript15
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/SConstruct74
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/applications/SConscript15
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/applications/main.c100
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/board/Kconfig246
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/board/SConscript17
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/board/board.c80
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/board/board.h35
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/board/gd32e23x_libopt.h59
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/board/linker_scripts/link.icf51
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/board/linker_scripts/link.ld139
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/board/linker_scripts/link.sct39
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/figures/board.pngbin0 -> 123140 bytes
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/rtconfig.h413
-rw-r--r--bsp/gd32/arm/gd32e230-lckfb/rtconfig.py148
-rw-r--r--bsp/gd32/arm/libraries/Kconfig5
-rw-r--r--bsp/gd32/arm/libraries/gd32_drivers/drv_adc.c58
-rw-r--r--bsp/gd32/arm/libraries/gd32_drivers/drv_adc.h3
-rw-r--r--bsp/gd32/arm/libraries/gd32_drivers/drv_dma.h24
-rw-r--r--bsp/gd32/arm/libraries/gd32_drivers/drv_gpio.c93
-rw-r--r--bsp/gd32/arm/libraries/gd32_drivers/drv_gpio.h6
-rw-r--r--bsp/gd32/arm/libraries/gd32_drivers/drv_rtc.c81
-rw-r--r--bsp/gd32/arm/libraries/gd32_drivers/drv_spi.c44
-rw-r--r--bsp/gd32/arm/libraries/gd32_drivers/drv_spi.h5
-rw-r--r--bsp/gd32/arm/libraries/gd32_drivers/drv_usart.c193
-rw-r--r--bsp/gd32/arm/libraries/gd32_drivers/drv_usart.h37
-rw-r--r--bsp/gd32/arm/libraries/gd32_drivers/drv_usart_v2.c330
-rw-r--r--bsp/gd32/arm/libraries/gd32_drivers/drv_usart_v2.h7
-rw-r--r--bsp/gd32/arm/tools/sdk_dist.py6
36 files changed, 3686 insertions, 209 deletions
diff --git a/.github/ALL_BSP_COMPILE.json b/.github/ALL_BSP_COMPILE.json
index 71ed62b145..0370c089a2 100644
--- a/.github/ALL_BSP_COMPILE.json
+++ b/.github/ALL_BSP_COMPILE.json
@@ -303,6 +303,7 @@
"gd32/arm/gd32h759i-start",
"gd32/arm/gd32e503v-eval",
"gd32/arm/gd32527I-eval",
+ "gd32/arm/gd32e230-lckfb",
"n32/n32g43xcl-stb",
"n32/n32g45xcl-stb",
"n32/n32g45xml-stb",
diff --git a/.gitignore b/.gitignore
index df7cd55d87..9da95424d2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -65,3 +65,6 @@ vdso.lds
# stm32cubemx
**/CubeMX_Config/Drivers/
**/CubeMX_Config/MDK-ARM/
+
+# mac
+.DS_Store
diff --git a/bsp/gd32/arm/README.md b/bsp/gd32/arm/README.md
index 898f92c459..0645f5082e 100644
--- a/bsp/gd32/arm/README.md
+++ b/bsp/gd32/arm/README.md
@@ -24,6 +24,8 @@ GD32 ARM 系列 BSP 目前支持情况如下表所示:
| [gd32470z-lckfb](gd32470z-lckfb) | 立创梁山派 GD32F470ZGT6 开发板 |
| **E5 系列** | |
| [gd32e503v-eval](gd32e503v-eval) | 兆易创新 官方 GD32E503V-EVAL 开发板 |
+| **E23 系列** | |
+| [gd32e230-lckfb](gd32e230-lckfb) | 立创·GD32E230C8T6开发板 |
可以通过阅读相应 BSP 下的 README 来快速上手,如果想要使用 BSP 更多功能可参考 docs 文件夹下提供的说明文档,如下表所示:
diff --git a/bsp/gd32/arm/gd32e230-lckfb/.ci/attachconfig/ci.attachconfig.yml b/bsp/gd32/arm/gd32e230-lckfb/.ci/attachconfig/ci.attachconfig.yml
new file mode 100644
index 0000000000..506885b13f
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/.ci/attachconfig/ci.attachconfig.yml
@@ -0,0 +1,25 @@
+kernel.tick:
+ kconfig:
+ - CONFIG_RT_TICK_PER_SECOND=100
+kernel.console_name:
+ kconfig:
+ - CONFIG_RT_CONSOLE_DEVICE_NAME="uart0"
+component.dev_drv.ipc.sys_workqueue:
+ kconfig:
+ - CONFIG_RT_USING_SYSTEM_WORKQUEUE=y
+hw_drv_onchip.uart0:
+ kconfig:
+ - CONFIG_BSP_USING_UART0=y
+hw_drv_onchip.adc0:
+ kconfig:
+ - CONFIG_BSP_USING_ADC=y
+ - CONFIG_BSP_USING_ADC0=y
+hw_drv_onchip.spi0:
+ kconfig:
+ - CONFIG_BSP_USING_SPI=y
+ - CONFIG_BSP_USING_SPI0=y
+hw_drv_onchip.i2c0:
+ kconfig:
+ - CONFIG_BSP_USING_I2C0=y
+ - CONFIG_BSP_I2C0_SCL_PIN=22
+ - CONFIG_BSP_I2C0_SDA_PIN=23 \ No newline at end of file
diff --git a/bsp/gd32/arm/gd32e230-lckfb/.config b/bsp/gd32/arm/gd32e230-lckfb/.config
new file mode 100644
index 0000000000..528af6c48f
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/.config
@@ -0,0 +1,1424 @@
+
+#
+# RT-Thread Kernel
+#
+
+#
+# klibc options
+#
+
+#
+# rt_vsnprintf options
+#
+# CONFIG_RT_KLIBC_USING_LIBC_VSNPRINTF is not set
+# CONFIG_RT_KLIBC_USING_VSNPRINTF_LONGLONG is not set
+# CONFIG_RT_KLIBC_USING_VSNPRINTF_STANDARD is not set
+# end of rt_vsnprintf options
+
+#
+# rt_vsscanf options
+#
+# CONFIG_RT_KLIBC_USING_LIBC_VSSCANF is not set
+# end of rt_vsscanf options
+
+#
+# rt_memset options
+#
+# CONFIG_RT_KLIBC_USING_USER_MEMSET is not set
+# CONFIG_RT_KLIBC_USING_LIBC_MEMSET is not set
+# CONFIG_RT_KLIBC_USING_TINY_MEMSET is not set
+# end of rt_memset options
+
+#
+# rt_memcpy options
+#
+# CONFIG_RT_KLIBC_USING_USER_MEMCPY is not set
+# CONFIG_RT_KLIBC_USING_LIBC_MEMCPY is not set
+# CONFIG_RT_KLIBC_USING_TINY_MEMCPY is not set
+# end of rt_memcpy options
+
+#
+# rt_memmove options
+#
+# CONFIG_RT_KLIBC_USING_USER_MEMMOVE is not set
+# CONFIG_RT_KLIBC_USING_LIBC_MEMMOVE is not set
+# end of rt_memmove options
+
+#
+# rt_memcmp options
+#
+# CONFIG_RT_KLIBC_USING_USER_MEMCMP is not set
+# CONFIG_RT_KLIBC_USING_LIBC_MEMCMP is not set
+# end of rt_memcmp options
+
+#
+# rt_strstr options
+#
+# CONFIG_RT_KLIBC_USING_USER_STRSTR is not set
+# CONFIG_RT_KLIBC_USING_LIBC_STRSTR is not set
+# end of rt_strstr options
+
+#
+# rt_strcasecmp options
+#
+# CONFIG_RT_KLIBC_USING_USER_STRCASECMP is not set
+# end of rt_strcasecmp options
+
+#
+# rt_strncpy options
+#
+# CONFIG_RT_KLIBC_USING_USER_STRNCPY is not set
+# CONFIG_RT_KLIBC_USING_LIBC_STRNCPY is not set
+# end of rt_strncpy options
+
+#
+# rt_strcpy options
+#
+# CONFIG_RT_KLIBC_USING_USER_STRCPY is not set
+# CONFIG_RT_KLIBC_USING_LIBC_STRCPY is not set
+# end of rt_strcpy options
+
+#
+# rt_strncmp options
+#
+# CONFIG_RT_KLIBC_USING_USER_STRNCMP is not set
+# CONFIG_RT_KLIBC_USING_LIBC_STRNCMP is not set
+# end of rt_strncmp options
+
+#
+# rt_strcmp options
+#
+# CONFIG_RT_KLIBC_USING_USER_STRCMP is not set
+# CONFIG_RT_KLIBC_USING_LIBC_STRCMP is not set
+# end of rt_strcmp options
+
+#
+# rt_strlen options
+#
+# CONFIG_RT_KLIBC_USING_USER_STRLEN is not set
+# CONFIG_RT_KLIBC_USING_LIBC_STRLEN is not set
+# end of rt_strlen options
+
+#
+# rt_strnlen options
+#
+# CONFIG_RT_KLIBC_USING_USER_STRNLEN is not set
+# end of rt_strnlen options
+
+# CONFIG_RT_UTEST_TC_USING_KLIBC is not set
+# end of klibc options
+
+CONFIG_RT_NAME_MAX=8
+# CONFIG_RT_USING_ARCH_DATA_TYPE is not set
+# CONFIG_RT_USING_NANO is not set
+# CONFIG_RT_USING_SMART is not set
+# CONFIG_RT_USING_AMP is not set
+# CONFIG_RT_USING_SMP is not set
+CONFIG_RT_CPUS_NR=1
+CONFIG_RT_ALIGN_SIZE=8
+# CONFIG_RT_THREAD_PRIORITY_8 is not set
+CONFIG_RT_THREAD_PRIORITY_32=y
+# CONFIG_RT_THREAD_PRIORITY_256 is not set
+CONFIG_RT_THREAD_PRIORITY_MAX=32
+CONFIG_RT_TICK_PER_SECOND=100
+CONFIG_RT_USING_OVERFLOW_CHECK=y
+CONFIG_RT_USING_HOOK=y
+CONFIG_RT_HOOK_USING_FUNC_PTR=y
+# CONFIG_RT_USING_HOOKLIST is not set
+CONFIG_RT_USING_IDLE_HOOK=y
+CONFIG_RT_IDLE_HOOK_LIST_SIZE=4
+CONFIG_IDLE_THREAD_STACK_SIZE=256
+# CONFIG_RT_USING_TIMER_SOFT is not set
+# CONFIG_RT_USING_CPU_USAGE_TRACER is not set
+
+#
+# kservice options
+#
+# CONFIG_RT_USING_TINY_FFS is not set
+# end of kservice options
+
+CONFIG_RT_USING_DEBUG=y
+CONFIG_RT_DEBUGING_ASSERT=y
+CONFIG_RT_DEBUGING_COLOR=y
+CONFIG_RT_DEBUGING_CONTEXT=y
+# CONFIG_RT_DEBUGING_AUTO_INIT is not set
+# CONFIG_RT_USING_CI_ACTION is not set
+
+#
+# Inter-Thread communication
+#
+CONFIG_RT_USING_SEMAPHORE=y
+CONFIG_RT_USING_MUTEX=y
+CONFIG_RT_USING_EVENT=y
+CONFIG_RT_USING_MAILBOX=y
+CONFIG_RT_USING_MESSAGEQUEUE=y
+# CONFIG_RT_USING_MESSAGEQUEUE_PRIORITY is not set
+# CONFIG_RT_USING_SIGNALS is not set
+# end of Inter-Thread communication
+
+#
+# Memory Management
+#
+CONFIG_RT_USING_MEMPOOL=y
+CONFIG_RT_USING_SMALL_MEM=y
+# CONFIG_RT_USING_SLAB is not set
+# CONFIG_RT_USING_MEMHEAP is not set
+CONFIG_RT_USING_SMALL_MEM_AS_HEAP=y
+# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set
+# CONFIG_RT_USING_SLAB_AS_HEAP is not set
+# CONFIG_RT_USING_USERHEAP is not set
+# CONFIG_RT_USING_NOHEAP is not set
+# CONFIG_RT_USING_MEMTRACE is not set
+# CONFIG_RT_USING_HEAP_ISR is not set
+CONFIG_RT_USING_HEAP=y
+# end of Memory Management
+
+CONFIG_RT_USING_DEVICE=y
+# CONFIG_RT_USING_DEVICE_OPS is not set
+# CONFIG_RT_USING_INTERRUPT_INFO is not set
+# CONFIG_RT_USING_THREADSAFE_PRINTF is not set
+CONFIG_RT_USING_CONSOLE=y
+CONFIG_RT_CONSOLEBUF_SIZE=128
+CONFIG_RT_CONSOLE_DEVICE_NAME="uart0"
+CONFIG_RT_VER_NUM=0x50201
+# CONFIG_RT_USING_STDC_ATOMIC is not set
+CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32
+# end of RT-Thread Kernel
+
+CONFIG_RT_USING_HW_ATOMIC=y
+CONFIG_ARCH_ARM=y
+CONFIG_ARCH_ARM_CORTEX_M=y
+CONFIG_ARCH_ARM_CORTEX_M23=y
+
+#
+# RT-Thread Components
+#
+CONFIG_RT_USING_COMPONENTS_INIT=y
+CONFIG_RT_USING_USER_MAIN=y
+CONFIG_RT_MAIN_THREAD_STACK_SIZE=1024
+CONFIG_RT_MAIN_THREAD_PRIORITY=10
+# CONFIG_RT_USING_LEGACY is not set
+# CONFIG_RT_USING_MSH is not set
+
+#
+# DFS: device virtual file system
+#
+# CONFIG_RT_USING_DFS is not set
+# end of DFS: device virtual file system
+
+# CONFIG_RT_USING_FAL is not set
+
+#
+# Device Drivers
+#
+# CONFIG_RT_USING_DM is not set
+# CONFIG_RT_USING_DEV_BUS is not set
+CONFIG_RT_USING_DEVICE_IPC=y
+CONFIG_RT_UNAMED_PIPE_NUMBER=64
+# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set
+CONFIG_RT_USING_SERIAL=y
+CONFIG_RT_USING_SERIAL_V1=y
+# CONFIG_RT_USING_SERIAL_V2 is not set
+# CONFIG_RT_SERIAL_USING_DMA is not set
+CONFIG_RT_SERIAL_RB_BUFSZ=64
+# CONFIG_RT_USING_SERIAL_BYPASS is not set
+# CONFIG_RT_USING_CAN is not set
+# CONFIG_RT_USING_CPUTIME is not set
+# CONFIG_RT_USING_I2C is not set
+# CONFIG_RT_USING_PHY is not set
+# CONFIG_RT_USING_PHY_V2 is not set
+# CONFIG_RT_USING_ADC is not set
+# CONFIG_RT_USING_DAC is not set
+# CONFIG_RT_USING_NULL is not set
+# CONFIG_RT_USING_ZERO is not set
+# CONFIG_RT_USING_RANDOM is not set
+# CONFIG_RT_USING_PWM is not set
+# CONFIG_RT_USING_PULSE_ENCODER is not set
+# CONFIG_RT_USING_INPUT_CAPTURE is not set
+# CONFIG_RT_USING_MTD_NOR is not set
+# CONFIG_RT_USING_MTD_NAND is not set
+# CONFIG_RT_USING_PM is not set
+# CONFIG_RT_USING_RTC is not set
+# CONFIG_RT_USING_SDIO is not set
+# CONFIG_RT_USING_SPI is not set
+# CONFIG_RT_USING_WDT is not set
+# CONFIG_RT_USING_AUDIO is not set
+# CONFIG_RT_USING_SENSOR is not set
+# CONFIG_RT_USING_TOUCH is not set
+# CONFIG_RT_USING_LCD is not set
+# CONFIG_RT_USING_HWCRYPTO is not set
+# CONFIG_RT_USING_WIFI is not set
+# CONFIG_RT_USING_BLK is not set
+# CONFIG_RT_USING_VIRTIO is not set
+CONFIG_RT_USING_PIN=y
+# CONFIG_RT_USING_KTIME is not set
+# CONFIG_RT_USING_HWTIMER is not set
+# CONFIG_RT_USING_CHERRYUSB is not set
+# end of Device Drivers
+
+#
+# C/C++ and POSIX layer
+#
+
+#
+# ISO-ANSI C layer
+#
+
+#
+# Timezone and Daylight Saving Time
+#
+# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set
+CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y
+CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8
+CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0
+CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
+# end of Timezone and Daylight Saving Time
+# end of ISO-ANSI C layer
+
+#
+# POSIX (Portable Operating System Interface) layer
+#
+# CONFIG_RT_USING_POSIX_FS is not set
+# CONFIG_RT_USING_POSIX_DELAY is not set
+# CONFIG_RT_USING_POSIX_CLOCK is not set
+# CONFIG_RT_USING_POSIX_TIMER is not set
+# CONFIG_RT_USING_PTHREADS is not set
+# CONFIG_RT_USING_MODULE is not set
+
+#
+# Interprocess Communication (IPC)
+#
+# CONFIG_RT_USING_POSIX_PIPE is not set
+# CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set
+# CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set
+
+#
+# Socket is in the 'Network' category
+#
+# end of Interprocess Communication (IPC)
+# end of POSIX (Portable Operating System Interface) layer
+
+# CONFIG_RT_USING_CPLUSPLUS is not set
+# end of C/C++ and POSIX layer
+
+#
+# Network
+#
+# CONFIG_RT_USING_SAL is not set
+# CONFIG_RT_USING_NETDEV is not set
+# CONFIG_RT_USING_LWIP is not set
+# CONFIG_RT_USING_AT is not set
+# end of Network
+
+#
+# Memory protection
+#
+# CONFIG_RT_USING_MEM_PROTECTION is not set
+# CONFIG_RT_USING_HW_STACK_GUARD is not set
+# end of Memory protection
+
+#
+# Utilities
+#
+# CONFIG_RT_USING_RYM is not set
+# CONFIG_RT_USING_ULOG is not set
+# CONFIG_RT_USING_UTEST is not set
+# CONFIG_RT_USING_VAR_EXPORT is not set
+# CONFIG_RT_USING_RESOURCE_ID is not set
+# CONFIG_RT_USING_ADT is not set
+# CONFIG_RT_USING_RT_LINK is not set
+# end of Utilities
+
+# CONFIG_RT_USING_VBUS is not set
+
+#
+# Using USB legacy version
+#
+# CONFIG_RT_USING_USB_HOST is not set
+# CONFIG_RT_USING_USB_DEVICE is not set
+# end of Using USB legacy version
+
+# CONFIG_RT_USING_FDT is not set
+# end of RT-Thread Components
+
+#
+# RT-Thread Utestcases
+#
+# CONFIG_RT_USING_UTESTCASES is not set
+# end of RT-Thread Utestcases
+
+#
+# RT-Thread online packages
+#
+
+#
+# IoT - internet of things
+#
+# CONFIG_PKG_USING_LORAWAN_DRIVER is not set
+# CONFIG_PKG_USING_PAHOMQTT is not set
+# CONFIG_PKG_USING_UMQTT is not set
+# CONFIG_PKG_USING_WEBCLIENT is not set
+# CONFIG_PKG_USING_WEBNET is not set
+# CONFIG_PKG_USING_MONGOOSE is not set
+# CONFIG_PKG_USING_MYMQTT is not set
+# CONFIG_PKG_USING_KAWAII_MQTT is not set
+# CONFIG_PKG_USING_BC28_MQTT is not set
+# CONFIG_PKG_USING_WEBTERMINAL is not set
+# CONFIG_PKG_USING_FREEMODBUS is not set
+# CONFIG_PKG_USING_NANOPB is not set
+# CONFIG_PKG_USING_WIFI_HOST_DRIVER is not set
+# CONFIG_PKG_USING_ESP_HOSTED is not set
+
+#
+# Wi-Fi
+#
+
+#
+# Marvell WiFi
+#
+# CONFIG_PKG_USING_WLANMARVELL is not set
+# end of Marvell WiFi
+
+#
+# Wiced WiFi
+#
+# CONFIG_PKG_USING_WLAN_WICED is not set
+# end of Wiced WiFi
+
+# CONFIG_PKG_USING_RW007 is not set
+
+#
+# CYW43012 WiFi
+#
+# CONFIG_PKG_USING_WLAN_CYW43012 is not set
+# end of CYW43012 WiFi
+
+#
+# BL808 WiFi
+#
+# CONFIG_PKG_USING_WLAN_BL808 is not set
+# end of BL808 WiFi
+
+#
+# CYW43439 WiFi
+#
+# CONFIG_PKG_USING_WLAN_CYW43439 is not set
+# end of CYW43439 WiFi
+# end of Wi-Fi
+
+# CONFIG_PKG_USING_COAP is not set
+# CONFIG_PKG_USING_NOPOLL is not set
+# CONFIG_PKG_USING_NETUTILS is not set
+# CONFIG_PKG_USING_CMUX is not set
+# CONFIG_PKG_USING_PPP_DEVICE is not set
+# CONFIG_PKG_USING_AT_DEVICE is not set
+# CONFIG_PKG_USING_ATSRV_SOCKET is not set
+# CONFIG_PKG_USING_WIZNET is not set
+# CONFIG_PKG_USING_ZB_COORDINATOR is not set
+
+#
+# IoT Cloud
+#
+# CONFIG_PKG_USING_ONENET is not set
+# CONFIG_PKG_USING_GAGENT_CLOUD is not set
+# CONFIG_PKG_USING_ALI_IOTKIT is not set
+# CONFIG_PKG_USING_AZURE is not set
+# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set
+# CONFIG_PKG_USING_JIOT-C-SDK is not set
+# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set
+# CONFIG_PKG_USING_JOYLINK is not set
+# CONFIG_PKG_USING_IOTSHARP_SDK is not set
+# end of IoT Cloud
+
+# CONFIG_PKG_USING_NIMBLE is not set
+# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set
+# CONFIG_PKG_USING_OTA_DOWNLOADER is not set
+# CONFIG_PKG_USING_IPMSG is not set
+# CONFIG_PKG_USING_LSSDP is not set
+# CONFIG_PKG_USING_AIRKISS_OPEN is not set
+# CONFIG_PKG_USING_LIBRWS is not set
+# CONFIG_PKG_USING_TCPSERVER is not set
+# CONFIG_PKG_USING_PROTOBUF_C is not set
+# CONFIG_PKG_USING_DLT645 is not set
+# CONFIG_PKG_USING_QXWZ is not set
+# CONFIG_PKG_USING_SMTP_CLIENT is not set
+# CONFIG_PKG_USING_ABUP_FOTA is not set
+# CONFIG_PKG_USING_LIBCURL2RTT is not set
+# CONFIG_PKG_USING_CAPNP is not set
+# CONFIG_PKG_USING_AGILE_TELNET is not set
+# CONFIG_PKG_USING_NMEALIB is not set
+# CONFIG_PKG_USING_PDULIB is not set
+# CONFIG_PKG_USING_BTSTACK is not set
+# CONFIG_PKG_USING_BT_CYW43012 is not set
+# CONFIG_PKG_USING_CYW43XX is not set
+# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set
+# CONFIG_PKG_USING_WAYZ_IOTKIT is not set
+# CONFIG_PKG_USING_MAVLINK is not set
+# CONFIG_PKG_USING_BSAL is not set
+# CONFIG_PKG_USING_AGILE_MODBUS is not set
+# CONFIG_PKG_USING_AGILE_FTP is not set
+# CONFIG_PKG_USING_EMBEDDEDPROTO is not set
+# CONFIG_PKG_USING_RT_LINK_HW is not set
+# CONFIG_PKG_USING_RYANMQTT is not set
+# CONFIG_PKG_USING_RYANW5500 is not set
+# CONFIG_PKG_USING_LORA_PKT_FWD is not set
+# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set
+# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set
+# CONFIG_PKG_USING_HM is not set
+# CONFIG_PKG_USING_SMALL_MODBUS is not set
+# CONFIG_PKG_USING_NET_SERVER is not set
+# CONFIG_PKG_USING_ZFTP is not set
+# CONFIG_PKG_USING_WOL is not set
+# CONFIG_PKG_USING_ZEPHYR_POLLING is not set
+# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set
+# CONFIG_PKG_USING_LHC_MODBUS is not set
+# CONFIG_PKG_USING_QMODBUS is not set
+# CONFIG_PKG_USING_PNET is not set
+# CONFIG_PKG_USING_OPENER is not set
+# CONFIG_PKG_USING_FREEMQTT is not set
+# end of IoT - internet of things
+
+#
+# security packages
+#
+# CONFIG_PKG_USING_MBEDTLS is not set
+# CONFIG_PKG_USING_LIBSODIUM is not set
+# CONFIG_PKG_USING_LIBHYDROGEN is not set
+# CONFIG_PKG_USING_TINYCRYPT is not set
+# CONFIG_PKG_USING_TFM is not set
+# CONFIG_PKG_USING_YD_CRYPTO is not set
+# end of security packages
+
+#
+# language packages
+#
+
+#
+# JSON: JavaScript Object Notation, a lightweight data-interchange format
+#
+# CONFIG_PKG_USING_CJSON is not set
+# CONFIG_PKG_USING_LJSON is not set
+# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set
+# CONFIG_PKG_USING_RAPIDJSON is not set
+# CONFIG_PKG_USING_JSMN is not set
+# CONFIG_PKG_USING_AGILE_JSMN is not set
+# CONFIG_PKG_USING_PARSON is not set
+# CONFIG_PKG_USING_RYAN_JSON is not set
+# end of JSON: JavaScript Object Notation, a lightweight data-interchange format
+
+#
+# XML: Extensible Markup Language
+#
+# CONFIG_PKG_USING_SIMPLE_XML is not set
+# CONFIG_PKG_USING_EZXML is not set
+# end of XML: Extensible Markup Language
+
+# CONFIG_PKG_USING_LUATOS_SOC is not set
+# CONFIG_PKG_USING_LUA is not set
+# CONFIG_PKG_USING_JERRYSCRIPT is not set
+# CONFIG_PKG_USING_MICROPYTHON is not set
+# CONFIG_PKG_USING_PIKASCRIPT is not set
+# CONFIG_PKG_USING_RTT_RUST is not set
+# end of language packages
+
+#
+# multimedia packages
+#
+
+#
+# LVGL: powerful and easy-to-use embedded GUI library
+#
+# CONFIG_PKG_USING_LVGL is not set
+# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set
+# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set
+# end of LVGL: powerful and easy-to-use embedded GUI library
+
+#
+# u8g2: a monochrome graphic library
+#
+# CONFIG_PKG_USING_U8G2_OFFICIAL is not set
+# CONFIG_PKG_USING_U8G2 is not set
+# end of u8g2: a monochrome graphic library
+
+# CONFIG_PKG_USING_OPENMV is not set
+# CONFIG_PKG_USING_MUPDF is not set
+# CONFIG_PKG_USING_STEMWIN is not set
+# CONFIG_PKG_USING_WAVPLAYER is not set
+# CONFIG_PKG_USING_TJPGD is not set
+# CONFIG_PKG_USING_PDFGEN is not set
+# CONFIG_PKG_USING_HELIX is not set
+# CONFIG_PKG_USING_AZUREGUIX is not set
+# CONFIG_PKG_USING_TOUCHGFX2RTT is not set
+# CONFIG_PKG_USING_NUEMWIN is not set
+# CONFIG_PKG_USING_MP3PLAYER is not set
+# CONFIG_PKG_USING_TINYJPEG is not set
+# CONFIG_PKG_USING_UGUI is not set
+# CONFIG_PKG_USING_MCURSES is not set
+# CONFIG_PKG_USING_TERMBOX is not set
+# CONFIG_PKG_USING_VT100 is not set
+# CONFIG_PKG_USING_QRCODE is not set
+# CONFIG_PKG_USING_GUIENGINE is not set
+# CONFIG_PKG_USING_3GPP_AMRNB is not set
+# end of multimedia packages
+
+#
+# tools packages
+#
+# CONFIG_PKG_USING_CMBACKTRACE is not set
+# CONFIG_PKG_USING_EASYFLASH is not set
+# CONFIG_PKG_USING_EASYLOGGER is not set
+# CONFIG_PKG_USING_SYSTEMVIEW is not set
+# CONFIG_PKG_USING_SEGGER_RTT is not set
+# CONFIG_PKG_USING_RTT_AUTO_EXE_CMD is not set
+# CONFIG_PKG_USING_RDB is not set
+# CONFIG_PKG_USING_ULOG_EASYFLASH is not set
+# CONFIG_PKG_USING_LOGMGR is not set
+# CONFIG_PKG_USING_ADBD is not set
+# CONFIG_PKG_USING_COREMARK is not set
+# CONFIG_PKG_USING_DHRYSTONE is not set
+# CONFIG_PKG_USING_MEMORYPERF is not set
+# CONFIG_PKG_USING_NR_MICRO_SHELL is not set
+# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set
+# CONFIG_PKG_USING_LUNAR_CALENDAR is not set
+# CONFIG_PKG_USING_BS8116A is not set
+# CONFIG_PKG_USING_GPS_RMC is not set
+# CONFIG_PKG_USING_URLENCODE is not set
+# CONFIG_PKG_USING_UMCN is not set
+# CONFIG_PKG_USING_LWRB2RTT is not set
+# CONFIG_PKG_USING_CPU_USAGE is not set
+# CONFIG_PKG_USING_GBK2UTF8 is not set
+# CONFIG_PKG_USING_VCONSOLE is not set
+# CONFIG_PKG_USING_KDB is not set
+# CONFIG_PKG_USING_WAMR is not set
+# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set
+# CONFIG_PKG_USING_LWLOG is not set
+# CONFIG_PKG_USING_ANV_TRACE is not set
+# CONFIG_PKG_USING_ANV_MEMLEAK is not set
+# CONFIG_PKG_USING_ANV_TESTSUIT is not set
+# CONFIG_PKG_USING_ANV_BENCH is not set
+# CONFIG_PKG_USING_DEVMEM is not set
+# CONFIG_PKG_USING_REGEX is not set
+# CONFIG_PKG_USING_MEM_SANDBOX is not set
+# CONFIG_PKG_USING_SOLAR_TERMS is not set
+# CONFIG_PKG_USING_GAN_ZHI is not set
+# CONFIG_PKG_USING_FDT is not set
+# CONFIG_PKG_USING_CBOX is not set
+# CONFIG_PKG_USING_SNOWFLAKE is not set
+# CONFIG_PKG_USING_HASH_MATCH is not set
+# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set
+# CONFIG_PKG_USING_VOFA_PLUS is not set
+# CONFIG_PKG_USING_ZDEBUG is not set
+# CONFIG_PKG_USING_RVBACKTRACE is not set
+# CONFIG_PKG_USING_HPATCHLITE is not set
+# CONFIG_PKG_USING_THREAD_METRIC is not set
+# end of tools packages
+
+#
+# system packages
+#
+
+#
+# enhanced kernel services
+#
+# CONFIG_PKG_USING_RT_MEMCPY_CM is not set
+# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set
+# end of enhanced kernel services
+
+# CONFIG_PKG_USING_AUNITY is not set
+
+#
+# acceleration: Assembly language or algorithmic acceleration packages
+#
+# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set
+# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set
+# CONFIG_PKG_USING_QFPLIB_M3 is not set
+# end of acceleration: Assembly language or algorithmic acceleration packages
+
+#
+# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard
+#
+# CONFIG_PKG_USING_CMSIS_5 is not set
+# CONFIG_PKG_USING_CMSIS_CORE is not set
+# CONFIG_PKG_USING_CMSIS_NN is not set
+# CONFIG_PKG_USING_CMSIS_RTOS1 is not set
+# CONFIG_PKG_USING_CMSIS_RTOS2 is not set
+# end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard
+
+#
+# Micrium: Micrium software products porting for RT-Thread
+#
+# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set
+# CONFIG_PKG_USING_UCOSII_WRAPPER is not set
+# CONFIG_PKG_USING_UC_CRC is not set
+# CONFIG_PKG_USING_UC_CLK is not set
+# CONFIG_PKG_USING_UC_COMMON is not set
+# CONFIG_PKG_USING_UC_MODBUS is not set
+# end of Micrium: Micrium software products porting for RT-Thread
+
+# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set
+# CONFIG_PKG_USING_LITEOS_SDK is not set
+# CONFIG_PKG_USING_TZ_DATABASE is not set
+# CONFIG_PKG_USING_CAIRO is not set
+# CONFIG_PKG_USING_PIXMAN is not set
+# CONFIG_PKG_USING_PARTITION is not set
+# CONFIG_PKG_USING_PERF_COUNTER is not set
+# CONFIG_PKG_USING_FILEX is not set
+# CONFIG_PKG_USING_LEVELX is not set
+# CONFIG_PKG_USING_FLASHDB is not set
+# CONFIG_PKG_USING_SQLITE is not set
+# CONFIG_PKG_USING_RTI is not set
+# CONFIG_PKG_USING_DFS_YAFFS is not set
+# CONFIG_PKG_USING_LITTLEFS is not set
+# CONFIG_PKG_USING_DFS_JFFS2 is not set
+# CONFIG_PKG_USING_DFS_UFFS is not set
+# CONFIG_PKG_USING_LWEXT4 is not set
+# CONFIG_PKG_USING_THREAD_POOL is not set
+# CONFIG_PKG_USING_ROBOTS is not set
+# CONFIG_PKG_USING_EV is not set
+# CONFIG_PKG_USING_SYSWATCH is not set
+# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set
+# CONFIG_PKG_USING_PLCCORE is not set
+# CONFIG_PKG_USING_RAMDISK is not set
+# CONFIG_PKG_USING_MININI is not set
+# CONFIG_PKG_USING_QBOOT is not set
+# CONFIG_PKG_USING_PPOOL is not set
+# CONFIG_PKG_USING_OPENAMP is not set
+# CONFIG_PKG_USING_RPMSG_LITE is not set
+# CONFIG_PKG_USING_LPM is not set
+# CONFIG_PKG_USING_TLSF is not set
+# CONFIG_PKG_USING_EVENT_RECORDER is not set
+# CONFIG_PKG_USING_ARM_2D is not set
+# CONFIG_PKG_USING_MCUBOOT is not set
+# CONFIG_PKG_USING_TINYUSB is not set
+# CONFIG_PKG_USING_KMULTI_RTIMER is not set
+# CONFIG_PKG_USING_TFDB is not set
+# CONFIG_PKG_USING_QPC is not set
+# CONFIG_PKG_USING_AGILE_UPGRADE is not set
+# CONFIG_PKG_USING_FLASH_BLOB is not set
+# CONFIG_PKG_USING_MLIBC is not set
+# CONFIG_PKG_USING_TASK_MSG_BUS is not set
+# CONFIG_PKG_USING_UART_FRAMEWORK is not set
+# CONFIG_PKG_USING_SFDB is not set
+# CONFIG_PKG_USING_RTP is not set
+# CONFIG_PKG_USING_REB is not set
+# CONFIG_PKG_USING_RMP is not set
+# CONFIG_PKG_USING_R_RHEALSTONE is not set
+# CONFIG_PKG_USING_HEARTBEAT is not set
+# CONFIG_PKG_USING_MICRO_ROS_RTTHREAD_PACKAGE is not set
+# end of system packages
+
+#
+# peripheral libraries and drivers
+#
+
+#
+# HAL & SDK Drivers
+#
+
+#
+# STM32 HAL & SDK Drivers
+#
+# CONFIG_PKG_USING_STM32F0_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32F0_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32F1_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32F1_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32F2_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32F2_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32F3_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32F3_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32F4_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32F4_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32F7_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32F7_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32G0_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32G0_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32G4_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32G4_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32H5_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32H5_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32H7_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32H7_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32H7RS_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32H7RS_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32L0_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32L0_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32L4_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32L4_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32L5_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32L5_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32U5_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32U5_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32WB55_SDK is not set
+# CONFIG_PKG_USING_STM32_SDIO is not set
+# CONFIG_PKG_USING_STM32WL_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32WL_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32WB_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32WB_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_STM32MP1_M4_HAL_DRIVER is not set
+# CONFIG_PKG_USING_STM32MP1_M4_CMSIS_DRIVER is not set
+# end of STM32 HAL & SDK Drivers
+
+#
+# Infineon HAL Packages
+#
+# CONFIG_PKG_USING_INFINEON_CAT1CM0P is not set
+# CONFIG_PKG_USING_INFINEON_CMSIS is not set
+# CONFIG_PKG_USING_INFINEON_CORE_LIB is not set
+# CONFIG_PKG_USING_INFINEON_MTB_HAL_CAT1 is not set
+# CONFIG_PKG_USING_INFINEON_MTB_PDL_CAT1 is not set
+# CONFIG_PKG_USING_INFINEON_RETARGET_IO is not set
+# CONFIG_PKG_USING_INFINEON_CAPSENSE is not set
+# CONFIG_PKG_USING_INFINEON_CSDIDAC is not set
+# CONFIG_PKG_USING_INFINEON_SERIAL_FLASH is not set
+# CONFIG_PKG_USING_INFINEON_USBDEV is not set
+# end of Infineon HAL Packages
+
+# CONFIG_PKG_USING_BLUETRUM_SDK is not set
+# CONFIG_PKG_USING_EMBARC_BSP is not set
+# CONFIG_PKG_USING_ESP_IDF is not set
+
+#
+# Kendryte SDK
+#
+# CONFIG_PKG_USING_K210_SDK is not set
+# CONFIG_PKG_USING_KENDRYTE_SDK is not set
+# end of Kendryte SDK
+
+# CONFIG_PKG_USING_NRF5X_SDK is not set
+# CONFIG_PKG_USING_NRFX is not set
+# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set
+# CONFIG_PKG_USING_MM32 is not set
+
+#
+# WCH HAL & SDK Drivers
+#
+# CONFIG_PKG_USING_CH32V20x_SDK is not set
+# CONFIG_PKG_USING_CH32V307_SDK is not set
+# end of WCH HAL & SDK Drivers
+
+#
+# AT32 HAL & SDK Drivers
+#
+# CONFIG_PKG_USING_AT32A403A_HAL_DRIVER is not set
+# CONFIG_PKG_USING_AT32A403A_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_AT32A423_HAL_DRIVER is not set
+# CONFIG_PKG_USING_AT32A423_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_AT32F45x_HAL_DRIVER is not set
+# CONFIG_PKG_USING_AT32F45x_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_AT32F402_405_HAL_DRIVER is not set
+# CONFIG_PKG_USING_AT32F402_405_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_AT32F403A_407_HAL_DRIVER is not set
+# CONFIG_PKG_USING_AT32F403A_407_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_AT32F413_HAL_DRIVER is not set
+# CONFIG_PKG_USING_AT32F413_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_AT32F415_HAL_DRIVER is not set
+# CONFIG_PKG_USING_AT32F415_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_AT32F421_HAL_DRIVER is not set
+# CONFIG_PKG_USING_AT32F421_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_AT32F423_HAL_DRIVER is not set
+# CONFIG_PKG_USING_AT32F423_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_AT32F425_HAL_DRIVER is not set
+# CONFIG_PKG_USING_AT32F425_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_AT32F435_437_HAL_DRIVER is not set
+# CONFIG_PKG_USING_AT32F435_437_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_AT32M412_416_HAL_DRIVER is not set
+# CONFIG_PKG_USING_AT32M412_416_CMSIS_DRIVER is not set
+# end of AT32 HAL & SDK Drivers
+
+#
+# HC32 DDL Drivers
+#
+# CONFIG_PKG_USING_HC32F3_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_HC32F3_SERIES_DRIVER is not set
+# CONFIG_PKG_USING_HC32F4_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_HC32F4_SERIES_DRIVER is not set
+# end of HC32 DDL Drivers
+
+#
+# NXP HAL & SDK Drivers
+#
+# CONFIG_PKG_USING_NXP_MCX_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_NXP_MCX_SERIES_DRIVER is not set
+# CONFIG_PKG_USING_NXP_LPC_DRIVER is not set
+# CONFIG_PKG_USING_NXP_LPC55S_DRIVER is not set
+# CONFIG_PKG_USING_NXP_IMX6SX_DRIVER is not set
+# CONFIG_PKG_USING_NXP_IMX6UL_DRIVER is not set
+# CONFIG_PKG_USING_NXP_IMXRT_DRIVER is not set
+# end of NXP HAL & SDK Drivers
+
+#
+# NUVOTON Drivers
+#
+# CONFIG_PKG_USING_NUVOTON_CMSIS_DRIVER is not set
+# CONFIG_PKG_USING_NUVOTON_SERIES_DRIVER is not set
+# CONFIG_PKG_USING_NUVOTON_ARM926_LIB is not set
+# end of NUVOTON Drivers
+
+#
+# GD32 Drivers
+#
+CONFIG_PKG_USING_GD32_ARM_CMSIS_DRIVER=y
+CONFIG_PKG_GD32_ARM_CMSIS_DRIVER_PATH="/packages/peripherals/hal-sdk/gd32/gd32-arm-cmsis"
+CONFIG_PKG_USING_GD32_ARM_CMSIS_DRIVER_LATEST_VERSION=y
+CONFIG_PKG_GD32_ARM_CMSIS_DRIVER_VER="latest"
+CONFIG_PKG_USING_GD32_ARM_SERIES_DRIVER=y
+CONFIG_PKG_GD32_ARM_SERIES_DRIVER_PATH="/packages/peripherals/hal-sdk/gd32/gd32-arm-series"
+CONFIG_PKG_USING_GD32_ARM_SERIES_DRIVER_LATEST_VERSION=y
+CONFIG_PKG_GD32_ARM_SERIES_DRIVER_VER="latest"
+# end of GD32 Drivers
+# end of HAL & SDK Drivers
+
+#
+# sensors drivers
+#
+# CONFIG_PKG_USING_LSM6DSM is not set
+# CONFIG_PKG_USING_LSM6DSL is not set
+# CONFIG_PKG_USING_LPS22HB is not set
+# CONFIG_PKG_USING_HTS221 is not set
+# CONFIG_PKG_USING_LSM303AGR is not set
+# CONFIG_PKG_USING_BME280 is not set
+# CONFIG_PKG_USING_BME680 is not set
+# CONFIG_PKG_USING_BMA400 is not set
+# CONFIG_PKG_USING_BMI160_BMX160 is not set
+# CONFIG_PKG_USING_SPL0601 is not set
+# CONFIG_PKG_USING_MS5805 is not set
+# CONFIG_PKG_USING_DA270 is not set
+# CONFIG_PKG_USING_DF220 is not set
+# CONFIG_PKG_USING_HSHCAL001 is not set
+# CONFIG_PKG_USING_BH1750 is not set
+# CONFIG_PKG_USING_MPU6XXX is not set
+# CONFIG_PKG_USING_AHT10 is not set
+# CONFIG_PKG_USING_AP3216C is not set
+# CONFIG_PKG_USING_TSL4531 is not set
+# CONFIG_PKG_USING_DS18B20 is not set
+# CONFIG_PKG_USING_DHT11 is not set
+# CONFIG_PKG_USING_DHTXX is not set
+# CONFIG_PKG_USING_GY271 is not set
+# CONFIG_PKG_USING_GP2Y10 is not set
+# CONFIG_PKG_USING_SGP30 is not set
+# CONFIG_PKG_USING_HDC1000 is not set
+# CONFIG_PKG_USING_BMP180 is not set
+# CONFIG_PKG_USING_BMP280 is not set
+# CONFIG_PKG_USING_SHTC1 is not set
+# CONFIG_PKG_USING_BMI088 is not set
+# CONFIG_PKG_USING_HMC5883 is not set
+# CONFIG_PKG_USING_MAX6675 is not set
+# CONFIG_PKG_USING_MAX31855 is not set
+# CONFIG_PKG_USING_TMP1075 is not set
+# CONFIG_PKG_USING_SR04 is not set
+# CONFIG_PKG_USING_CCS811 is not set
+# CONFIG_PKG_USING_PMSXX is not set
+# CONFIG_PKG_USING_RT3020 is not set
+# CONFIG_PKG_USING_MLX90632 is not set
+# CONFIG_PKG_USING_MLX90382 is not set
+# CONFIG_PKG_USING_MLX90393 is not set
+# CONFIG_PKG_USING_MLX90392 is not set
+# CONFIG_PKG_USING_MLX90394 is not set
+# CONFIG_PKG_USING_MLX90397 is not set
+# CONFIG_PKG_USING_MS5611 is not set
+# CONFIG_PKG_USING_MAX31865 is not set
+# CONFIG_PKG_USING_VL53L0X is not set
+# CONFIG_PKG_USING_INA260 is not set
+# CONFIG_PKG_USING_MAX30102 is not set
+# CONFIG_PKG_USING_INA226 is not set
+# CONFIG_PKG_USING_LIS2DH12 is not set
+# CONFIG_PKG_USING_HS300X is not set
+# CONFIG_PKG_USING_ZMOD4410 is not set
+# CONFIG_PKG_USING_ISL29035 is not set
+# CONFIG_PKG_USING_MMC3680KJ is not set
+# CONFIG_PKG_USING_QMP6989 is not set
+# CONFIG_PKG_USING_BALANCE is not set
+# CONFIG_PKG_USING_SHT2X is not set
+# CONFIG_PKG_USING_SHT3X is not set
+# CONFIG_PKG_USING_SHT4X is not set
+# CONFIG_PKG_USING_AD7746 is not set
+# CONFIG_PKG_USING_ADT74XX is not set
+# CONFIG_PKG_USING_MAX17048 is not set
+# CONFIG_PKG_USING_AS7341 is not set
+# CONFIG_PKG_USING_CW2015 is not set
+# CONFIG_PKG_USING_ICM20608 is not set
+# CONFIG_PKG_USING_PAJ7620 is not set
+# CONFIG_PKG_USING_STHS34PF80 is not set
+# CONFIG_PKG_USING_P3T1755 is not set
+# CONFIG_PKG_USING_QMI8658 is not set
+# CONFIG_PKG_USING_ICM20948 is not set
+# end of sensors drivers
+
+#
+# touch drivers
+#
+# CONFIG_PKG_USING_GT9147 is not set
+# CONFIG_PKG_USING_GT1151 is not set
+# CONFIG_PKG_USING_GT917S is not set
+# CONFIG_PKG_USING_GT911 is not set
+# CONFIG_PKG_USING_FT6206 is not set
+# CONFIG_PKG_USING_FT5426 is not set
+# CONFIG_PKG_USING_FT6236 is not set
+# CONFIG_PKG_USING_XPT2046_TOUCH is not set
+# CONFIG_PKG_USING_CST816X is not set
+# CONFIG_PKG_USING_CST812T is not set
+# end of touch drivers
+
+# CONFIG_PKG_USING_REALTEK_AMEBA is not set
+# CONFIG_PKG_USING_BUTTON is not set
+# CONFIG_PKG_USING_PCF8574 is not set
+# CONFIG_PKG_USING_SX12XX is not set
+# CONFIG_PKG_USING_SIGNAL_LED is not set
+# CONFIG_PKG_USING_LEDBLINK is not set
+# CONFIG_PKG_USING_LITTLED is not set
+# CONFIG_PKG_USING_LKDGUI is not set
+# CONFIG_PKG_USING_INFRARED is not set
+# CONFIG_PKG_USING_MULTI_INFRARED is not set
+# CONFIG_PKG_USING_AGILE_BUTTON is not set
+# CONFIG_PKG_USING_AGILE_LED is not set
+# CONFIG_PKG_USING_AT24CXX is not set
+# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set
+# CONFIG_PKG_USING_PCA9685 is not set
+# CONFIG_PKG_USING_ILI9341 is not set
+# CONFIG_PKG_USING_I2C_TOOLS is not set
+# CONFIG_PKG_USING_NRF24L01 is not set
+# CONFIG_PKG_USING_RPLIDAR is not set
+# CONFIG_PKG_USING_AS608 is not set
+# CONFIG_PKG_USING_RC522 is not set
+# CONFIG_PKG_USING_WS2812B is not set
+# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set
+# CONFIG_PKG_USING_MULTI_RTIMER is not set
+# CONFIG_PKG_USING_MAX7219 is not set
+# CONFIG_PKG_USING_BEEP is not set
+# CONFIG_PKG_USING_EASYBLINK is not set
+# CONFIG_PKG_USING_PMS_SERIES is not set
+# CONFIG_PKG_USING_CAN_YMODEM is not set
+# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set
+# CONFIG_PKG_USING_QLED is not set
+# CONFIG_PKG_USING_AGILE_CONSOLE is not set
+# CONFIG_PKG_USING_LD3320 is not set
+# CONFIG_PKG_USING_WK2124 is not set
+# CONFIG_PKG_USING_LY68L6400 is not set
+# CONFIG_PKG_USING_DM9051 is not set
+# CONFIG_PKG_USING_SSD1306 is not set
+# CONFIG_PKG_USING_QKEY is not set
+# CONFIG_PKG_USING_RS485 is not set
+# CONFIG_PKG_USING_RS232 is not set
+# CONFIG_PKG_USING_NES is not set
+# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set
+# CONFIG_PKG_USING_VDEVICE is not set
+# CONFIG_PKG_USING_SGM706 is not set
+# CONFIG_PKG_USING_RDA58XX is not set
+# CONFIG_PKG_USING_LIBNFC is not set
+# CONFIG_PKG_USING_MFOC is not set
+# CONFIG_PKG_USING_TMC51XX is not set
+# CONFIG_PKG_USING_TCA9534 is not set
+# CONFIG_PKG_USING_KOBUKI is not set
+# CONFIG_PKG_USING_ROSSERIAL is not set
+# CONFIG_PKG_USING_MICRO_ROS is not set
+# CONFIG_PKG_USING_MCP23008 is not set
+# CONFIG_PKG_USING_MISAKA_AT24CXX is not set
+# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set
+# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set
+# CONFIG_PKG_USING_SOFT_SERIAL is not set
+# CONFIG_PKG_USING_MB85RS16 is not set
+# CONFIG_PKG_USING_RFM300 is not set
+# CONFIG_PKG_USING_IO_INPUT_FILTER is not set
+# CONFIG_PKG_USING_LRF_NV7LIDAR is not set
+# CONFIG_PKG_USING_AIP650 is not set
+# CONFIG_PKG_USING_FINGERPRINT is not set
+# CONFIG_PKG_USING_BT_ECB02C is not set
+# CONFIG_PKG_USING_UAT is not set
+# CONFIG_PKG_USING_ST7789 is not set
+# CONFIG_PKG_USING_VS1003 is not set
+# CONFIG_PKG_USING_X9555 is not set
+# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set
+# CONFIG_PKG_USING_BT_MX01 is not set
+# CONFIG_PKG_USING_RGPOWER is not set
+# CONFIG_PKG_USING_BT_MX02 is not set
+# CONFIG_PKG_USING_GC9A01 is not set
+# CONFIG_PKG_USING_IK485 is not set
+# CONFIG_PKG_USING_SERVO is not set
+# CONFIG_PKG_USING_SEAN_WS2812B is not set
+# CONFIG_PKG_USING_IC74HC165 is not set
+# CONFIG_PKG_USING_IST8310 is not set
+# CONFIG_PKG_USING_ST7789_SPI is not set
+# CONFIG_PKG_USING_SPI_TOOLS is not set
+# end of peripheral libraries and drivers
+
+#
+# AI packages
+#
+# CONFIG_PKG_USING_LIBANN is not set
+# CONFIG_PKG_USING_NNOM is not set
+# CONFIG_PKG_USING_ONNX_BACKEND is not set
+# CONFIG_PKG_USING_ONNX_PARSER is not set
+# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set
+# CONFIG_PKG_USING_ELAPACK is not set
+# CONFIG_PKG_USING_ULAPACK is not set
+# CONFIG_PKG_USING_QUEST is not set
+# CONFIG_PKG_USING_NAXOS is not set
+# CONFIG_PKG_USING_R_TINYMAIX is not set
+# CONFIG_PKG_USING_LLMCHAT is not set
+# end of AI packages
+
+#
+# Signal Processing and Control Algorithm Packages
+#
+# CONFIG_PKG_USING_APID is not set
+# CONFIG_PKG_USING_FIRE_PID_CURVE is not set
+# CONFIG_PKG_USING_QPID is not set
+# CONFIG_PKG_USING_UKAL is not set
+# CONFIG_PKG_USING_DIGITALCTRL is not set
+# CONFIG_PKG_USING_KISSFFT is not set
+# CONFIG_PKG_USING_CMSIS_DSP is not set
+# end of Signal Processing and Control Algorithm Packages
+
+#
+# miscellaneous packages
+#
+
+#
+# project laboratory
+#
+# end of project laboratory
+
+#
+# samples: kernel and components samples
+#
+# CONFIG_PKG_USING_KERNEL_SAMPLES is not set
+# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set
+# CONFIG_PKG_USING_NETWORK_SAMPLES is not set
+# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set
+# end of samples: kernel and components samples
+
+#
+# entertainment: terminal games and other interesting software packages
+#
+# CONFIG_PKG_USING_CMATRIX is not set
+# CONFIG_PKG_USING_SL is not set
+# CONFIG_PKG_USING_CAL is not set
+# CONFIG_PKG_USING_ACLOCK is not set
+# CONFIG_PKG_USING_THREES is not set
+# CONFIG_PKG_USING_2048 is not set
+# CONFIG_PKG_USING_SNAKE is not set
+# CONFIG_PKG_USING_TETRIS is not set
+# CONFIG_PKG_USING_DONUT is not set
+# CONFIG_PKG_USING_COWSAY is not set
+# CONFIG_PKG_USING_MORSE is not set
+# CONFIG_PKG_USING_TINYSQUARE is not set
+# end of entertainment: terminal games and other interesting software packages
+
+# CONFIG_PKG_USING_LIBCSV is not set
+# CONFIG_PKG_USING_OPTPARSE is not set
+# CONFIG_PKG_USING_FASTLZ is not set
+# CONFIG_PKG_USING_MINILZO is not set
+# CONFIG_PKG_USING_QUICKLZ is not set
+# CONFIG_PKG_USING_LZMA is not set
+# CONFIG_PKG_USING_RALARAM is not set
+# CONFIG_PKG_USING_MULTIBUTTON is not set
+# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set
+# CONFIG_PKG_USING_CANFESTIVAL is not set
+# CONFIG_PKG_USING_ZLIB is not set
+# CONFIG_PKG_USING_MINIZIP is not set
+# CONFIG_PKG_USING_HEATSHRINK is not set
+# CONFIG_PKG_USING_DSTR is not set
+# CONFIG_PKG_USING_TINYFRAME is not set
+# CONFIG_PKG_USING_KENDRYTE_DEMO is not set
+# CONFIG_PKG_USING_UPACKER is not set
+# CONFIG_PKG_USING_UPARAM is not set
+# CONFIG_PKG_USING_HELLO is not set
+# CONFIG_PKG_USING_VI is not set
+# CONFIG_PKG_USING_KI is not set
+# CONFIG_PKG_USING_ARMv7M_DWT is not set
+# CONFIG_PKG_USING_CRCLIB is not set
+# CONFIG_PKG_USING_LIBCRC is not set
+# CONFIG_PKG_USING_LWGPS is not set
+# CONFIG_PKG_USING_STATE_MACHINE is not set
+# CONFIG_PKG_USING_DESIGN_PATTERN is not set
+# CONFIG_PKG_USING_CONTROLLER is not set
+# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set
+# CONFIG_PKG_USING_MFBD is not set
+# CONFIG_PKG_USING_SLCAN2RTT is not set
+# CONFIG_PKG_USING_SOEM is not set
+# CONFIG_PKG_USING_QPARAM is not set
+# CONFIG_PKG_USING_CorevMCU_CLI is not set
+# CONFIG_PKG_USING_DRMP is not set
+# end of miscellaneous packages
+
+#
+# Arduino libraries
+#
+# CONFIG_PKG_USING_RTDUINO is not set
+
+#
+# Projects and Demos
+#
+# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set
+# CONFIG_PKG_USING_ARDUINO_SKETCH_LOADER_DEMO is not set
+# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set
+# CONFIG_PKG_USING_ARDUINO_RTDUINO_SENSORFUSION_SHIELD is not set
+# CONFIG_PKG_USING_ARDUINO_NINEINONE_SENSOR_SHIELD is not set
+# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set
+# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set
+# end of Projects and Demos
+
+#
+# Sensors
+#
+# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31855 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MSA301 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_ITG3200 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_MP503 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set
+# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set
+# CONFIG_PKG_USING_ARDUINO_JARZEBSKI_MPU6050 is not set
+# end of Sensors
+
+#
+# Display
+#
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set
+# CONFIG_PKG_USING_ARDUINO_U8G2 is not set
+# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set
+# CONFIG_PKG_USING_SEEED_TM1637 is not set
+# end of Display
+
+#
+# Timing
+#
+# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set
+# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set
+# CONFIG_PKG_USING_ARDUINO_TICKER is not set
+# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set
+# end of Timing
+
+#
+# Data Processing
+#
+# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set
+# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set
+# CONFIG_PKG_USING_ARDUINO_TENSORFLOW_LITE_MICRO is not set
+# CONFIG_PKG_USING_ARDUINO_RUNNINGMEDIAN is not set
+# end of Data Processing
+
+#
+# Data Storage
+#
+
+#
+# Communication
+#
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set
+# end of Communication
+
+#
+# Device Control
+#
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set
+# end of Device Control
+
+#
+# Other
+#
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set
+# end of Other
+
+#
+# Signal IO
+#
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set
+# end of Signal IO
+
+#
+# Uncategorized
+#
+# end of Arduino libraries
+# end of RT-Thread online packages
+
+CONFIG_SOC_FAMILY_GD32=y
+CONFIG_SOC_SERIES_GD32E23x=y
+
+#
+# Hardware Drivers Config
+#
+CONFIG_SOC_GD32E230C8T6=y
+
+#
+# Onboard Peripheral Drivers
+#
+CONFIG_BSP_USING_LED=y
+CONFIG_BSP_LED_PIN=45
+# end of Onboard Peripheral Drivers
+
+#
+# On-chip Peripheral Drivers
+#
+CONFIG_BSP_USING_GPIO=y
+CONFIG_BSP_USING_UART=y
+CONFIG_BSP_USING_UART0=y
+# CONFIG_BSP_UART0_RX_USING_DMA is not set
+# CONFIG_BSP_UART0_TX_USING_DMA is not set
+# CONFIG_BSP_USING_UART1 is not set
+# CONFIG_BSP_USING_SPI is not set
+
+#
+# I2C Configuration
+#
+# CONFIG_BSP_USING_HW_I2C is not set
+# CONFIG_BSP_USING_I2C0 is not set
+# CONFIG_BSP_USING_I2C1 is not set
+# end of I2C Configuration
+
+# CONFIG_BSP_USING_ADC is not set
+# CONFIG_BSP_USING_TIM is not set
+# CONFIG_BSP_USING_ONCHIP_RTC is not set
+# CONFIG_BSP_USING_WDT is not set
+# end of On-chip Peripheral Drivers
+
+#
+# Board extended module Drivers
+#
+# end of Hardware Drivers Config
diff --git a/bsp/gd32/arm/gd32e230-lckfb/Kconfig b/bsp/gd32/arm/gd32e230-lckfb/Kconfig
new file mode 100644
index 0000000000..07edfefc34
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/Kconfig
@@ -0,0 +1,12 @@
+mainmenu "RT-Thread Configuration"
+
+BSP_DIR := .
+
+RTT_DIR := ../../../..
+
+PKGS_DIR := packages
+
+source "$(RTT_DIR)/Kconfig"
+osource "$PKGS_DIR/Kconfig"
+rsource "../libraries/Kconfig"
+rsource "board/Kconfig"
diff --git a/bsp/gd32/arm/gd32e230-lckfb/README.md b/bsp/gd32/arm/gd32e230-lckfb/README.md
new file mode 100644
index 0000000000..9c5164d67f
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/README.md
@@ -0,0 +1,105 @@
+# GD32E230立创开发板说明
+
+## 简介
+
+本文档是为 GD32E230立创开发板提供的板级支持包 (BSP) 说明。
+
+该核心板以 GD32E230C8T6 作为主控制器,可通过板载的 USB 接口或 5V 引脚供电。核心板引出了所有 I/O 口,方便连接各种外设模块。
+
+该开发板常用 **板载资源** 如下:
+
+- **主控芯片**:GD32E230C8T6
+ - **内核**:ARM® Cortex®-M23
+ - **主频**:72MHz
+ - **FLASH**:64KB
+ - **RAM**:8KB
+- **常用外设**
+ - **LED**:1 个,用户 LED (PC13)
+ - **按键**:1 个,复位按键
+ - **定时器**:
+ - 1 x 高级定时器 (TIMER0)
+ - 5 x 通用定时器 (TIMER2, TIMER14, TIMER15, TIMER16)
+ - 1 x 基本定时器 (TIMER5)
+ - **通信接口**:
+ - 2 x USART (USART0, USART1)
+ - 2 x SPI (SPI0, SPI1)
+ - 2 x I2C (I2C0, I2C1)
+ - **ADC**:1 x 12位 ADC (最多10个外部通道)
+- **常用接口** USB 接口
+- **调试接口**:SWD (SWDIO / SWCLK)
+
+## 外设支持
+
+本 BSP 目前对外设的支持情况如下:
+
+| **片上外设** | **支持情况** | **备注** |
+| :--- | :---: | :--- |
+| GPIO | 支持 | PAx, PBx... |
+| UART | 支持 | USART0, USART1 |
+| **扩展模块** | **支持情况** | **备注** |
+| 暂无 | 暂不支持 | 暂不支持 |
+
+## 使用说明
+
+使用说明分为如下两个章节:
+
+- **快速上手**
+
+ 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果。
+
+- **进阶使用**
+
+ 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。
+
+### 快速上手
+
+本 BSP 支持 GCC 开发环境,下面介绍如何在GCC环境下编译下载。
+
+#### 硬件连接
+
+使用DAP-Link连接开发板与 PC。
+
+#### 编译下载
+
+``` shell
+scons -j12
+```
+
+``` shell
+pyocd flash -t gd32e230c8t6 rtthread.bin
+```
+
+开发板板载USB转串口,没有调试器,也可以直接连接USB进行下载。
+
+#### 运行结果
+
+下载程序成功之后,系统会自动运行,板载的蓝色 LED (PC13) 将会闪烁。
+
+连接开发板对应的串口到 PC,在终端工具里打开相应的串口(波特率:115200,数据位:8,停止位:1,无校验),复位设备后,可以看到 RT-Thread 的输出信息:
+
+``` shell
+ \ | /
+- RT - Thread Operating System
+ / | \ 4.1.0 build Jul 23 2025
+ 2006 - 2024 Copyright by rt-thread team
+ hello rt-thread
+```
+
+### 进阶使用
+
+此 BSP 默认只开启了 GPIO 和 USART0 的功能,如果需使用更多外设功能,需要利用 ENV 工具对 BSP 进行配置,步骤如下:
+
+1. 在 bsp 目录下打开 env 工具。
+2. 输入 `menuconfig` 命令配置工程,配置好之后保存退出。
+3. 输入 `pkgs --update` 命令更新软件包。
+4. 输入 `scons -j12` 编译。
+
+## 注意事项
+1. GD32E230资源受限,虽然通过调整参数极限运行msh,但是意义不大,建议关闭。
+2. **GPIOA-13** 和 **GPIOA-14** 默认用于 SWD 调试下载功能,建议不要配置为其它功能,否则将可能导致无法正常下载和调试。
+
+## 联系人信息
+
+维护人:
+
+- [htynkn](https://github.com/htynkn), 邮箱:<[email protected]> \ No newline at end of file
diff --git a/bsp/gd32/arm/gd32e230-lckfb/SConscript b/bsp/gd32/arm/gd32e230-lckfb/SConscript
new file mode 100644
index 0000000000..20f7689c53
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/SConscript
@@ -0,0 +1,15 @@
+# for module compiling
+import os
+Import('RTT_ROOT')
+from building import *
+
+cwd = GetCurrentDir()
+objs = []
+list = os.listdir(cwd)
+
+for d in list:
+ path = os.path.join(cwd, d)
+ if os.path.isfile(os.path.join(path, 'SConscript')):
+ objs = objs + SConscript(os.path.join(d, 'SConscript'))
+
+Return('objs')
diff --git a/bsp/gd32/arm/gd32e230-lckfb/SConstruct b/bsp/gd32/arm/gd32e230-lckfb/SConstruct
new file mode 100644
index 0000000000..9623c1041e
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/SConstruct
@@ -0,0 +1,74 @@
+import os
+import sys
+import rtconfig
+
+if os.getenv('RTT_ROOT'):
+ RTT_ROOT = os.getenv('RTT_ROOT')
+else:
+ RTT_ROOT = os.path.normpath(os.getcwd() + '/../../../..')
+
+sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
+try:
+ from building import *
+except:
+ print('Cannot found RT-Thread root directory, please check RTT_ROOT')
+ print(RTT_ROOT)
+ exit(-1)
+
+def bsp_pkg_check():
+ import subprocess
+
+ check_paths = [
+ os.path.join("packages", "gd32-arm-cmsis-latest"),
+ os.path.join("packages", "gd32-arm-series-latest")
+ ]
+
+ need_update = not all(os.path.exists(p) for p in check_paths)
+
+ if need_update:
+ print("\n===============================================================================")
+ print("Dependency packages missing, please running 'pkgs --update'...")
+ print("If no packages are fetched, run 'pkgs --upgrade' first, then 'pkgs --update'...")
+ print("===============================================================================")
+ exit(1)
+
+RegisterPreBuildingAction(bsp_pkg_check)
+
+TARGET = 'rtthread.' + rtconfig.TARGET_EXT
+
+DefaultEnvironment(tools=[])
+env = Environment(tools = ['mingw'],
+ AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
+ CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS,
+ AR = rtconfig.AR, ARFLAGS = '-rc',
+ CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS,
+ LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
+env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
+
+if rtconfig.PLATFORM in ['iccarm']:
+ env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES'])
+ env.Replace(ARFLAGS = [''])
+ env.Replace(LINKCOM = env["LINKCOM"] + ' --map rtthread.map')
+
+Export('env')
+Export('RTT_ROOT')
+Export('rtconfig')
+
+SDK_ROOT = os.path.abspath('./')
+
+if os.path.exists(SDK_ROOT + '/libraries'):
+ libraries_path_prefix = SDK_ROOT + '/libraries'
+else:
+ libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries'
+
+SDK_LIB = libraries_path_prefix
+Export('SDK_LIB')
+
+# prepare building environment
+objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False)
+
+# include drivers
+objs.extend(SConscript(os.path.join(libraries_path_prefix, 'gd32_drivers', 'SConscript')))
+
+# make a building
+DoBuilding(TARGET, objs)
diff --git a/bsp/gd32/arm/gd32e230-lckfb/applications/SConscript b/bsp/gd32/arm/gd32e230-lckfb/applications/SConscript
new file mode 100644
index 0000000000..9bb9abae89
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/applications/SConscript
@@ -0,0 +1,15 @@
+from building import *
+import os
+
+cwd = GetCurrentDir()
+src = Glob('*.c')
+CPPPATH = [cwd]
+
+group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH)
+
+list = os.listdir(cwd)
+for item in list:
+ if os.path.isfile(os.path.join(cwd, item, 'SConscript')):
+ group = group + SConscript(os.path.join(item, 'SConscript'))
+
+Return('group')
diff --git a/bsp/gd32/arm/gd32e230-lckfb/applications/main.c b/bsp/gd32/arm/gd32e230-lckfb/applications/main.c
new file mode 100644
index 0000000000..c605cd1f90
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/applications/main.c
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2006-2025, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2025-07-28 Yunkun Huang Init Project
+ */
+
+#include <rtthread.h>
+#include <rtdevice.h>
+#include <board.h>
+
+
+#define LED_PIN BSP_LED_PIN
+
+
+static void led_blink_thread_entry(void *parameter)
+{
+ rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);
+
+ rt_kprintf("LED blink thread started.\n");
+
+ while (1)
+ {
+ rt_pin_write(LED_PIN, PIN_HIGH);
+ rt_thread_mdelay(500);
+
+ rt_pin_write(LED_PIN, PIN_LOW);
+ rt_thread_mdelay(500);
+ }
+}
+
+#define UART_DEVICE_NAME "uart0"
+
+static void uart_send_thread_entry(void *parameter)
+{
+ rt_device_t console_dev;
+ char msg[] = "hello rt-thread\r\n";
+
+ console_dev = rt_console_get_device();
+
+ if (!console_dev)
+ {
+ rt_kprintf("Failed to get console device.\n");
+ return;
+ }
+
+ rt_kprintf("UART send thread started. Will send message every 2 seconds.\n");
+
+ while (1)
+ {
+ rt_device_write(console_dev, 0, msg, (sizeof(msg) - 1));
+ rt_thread_mdelay(2000);
+ }
+}
+
+
+int main(void)
+{
+ rt_thread_t led_tid = RT_NULL;
+ rt_thread_t uart_tid = RT_NULL;
+
+ led_tid = rt_thread_create("led_blink",
+ led_blink_thread_entry,
+ RT_NULL,
+ 256,
+ 20,
+ 10);
+
+ if (led_tid != RT_NULL)
+ {
+ rt_thread_startup(led_tid);
+ }
+ else
+ {
+ rt_kprintf("Failed to create led_blink thread.\n");
+ }
+
+ uart_tid = rt_thread_create("uart_send",
+ uart_send_thread_entry,
+ RT_NULL,
+ 512,
+ 21,
+ 10);
+
+ if (uart_tid != RT_NULL)
+ {
+ rt_kprintf("uart_send thread created successfully. Starting it up...\n");
+ rt_thread_startup(uart_tid);
+ }
+ else
+ {
+ rt_kprintf("!!! FAILED to create uart_send thread. Not enough memory?\n");
+ }
+
+ return 0;
+}
+
diff --git a/bsp/gd32/arm/gd32e230-lckfb/board/Kconfig b/bsp/gd32/arm/gd32e230-lckfb/board/Kconfig
new file mode 100644
index 0000000000..d8a53a9562
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/board/Kconfig
@@ -0,0 +1,246 @@
+# SPDX-License-Identifier: Apache-2.0
+
+menu "Hardware Drivers Config"
+
+config SOC_SERIES_GD32E23x
+ bool
+ default y
+
+config SOC_GD32E230C8T6
+ bool
+ select SOC_SERIES_GD32E23x
+ select RT_USING_COMPONENTS_INIT
+ select RT_USING_USER_MAIN
+ default y
+
+menu "Onboard Peripheral Drivers"
+ menuconfig BSP_USING_LED
+ bool "Enable Onboard LED"
+ default y
+ if BSP_USING_LED
+ config BSP_LED_PIN
+ int "The pin number of the onboard LED"
+ default 45 # GET_PIN(C, 13)
+ endif
+
+endmenu
+
+menu "On-chip Peripheral Drivers"
+
+ config BSP_USING_GPIO
+ bool "Enable GPIO"
+ select RT_USING_PIN
+ default y
+
+ menuconfig BSP_USING_UART
+ bool "Enable UART"
+ select RT_USING_SERIAL
+ default y
+ if BSP_USING_UART
+ config BSP_USING_UART0
+ bool "Enable UART0 for Console"
+ default y
+
+ config BSP_UART0_RX_USING_DMA
+ bool "Enable UART0 RX DMA"
+ depends on BSP_USING_UART0
+ select RT_SERIAL_USING_DMA
+ default n
+
+ config BSP_UART0_TX_USING_DMA
+ bool "Enable UART0 TX DMA"
+ depends on BSP_USING_UART0
+ select RT_SERIAL_USING_DMA
+ default n
+
+ config BSP_UART0_RX_BUFSIZE
+ int "Set UART0 RX buffer size"
+ range 64 65535
+ depends on BSP_USING_UART0 && RT_USING_SERIAL_V2
+ default 64
+
+ config BSP_UART0_TX_BUFSIZE
+ int "Set UART0 TX buffer size"
+ range 0 65535
+ depends on BSP_USING_UART0 && RT_USING_SERIAL_V2
+ default 64
+
+ config BSP_UART0_DMA_PING_BUFSIZE
+ int "Set UART0 RX DMA ping-pong buffer size"
+ range 32 65535
+ depends on RT_USING_SERIAL_V2 && BSP_UART0_RX_USING_DMA
+ default 32
+
+ config BSP_USING_UART1
+ bool "Enable UART1"
+ default n
+
+ config BSP_UART1_RX_USING_DMA
+ bool "Enable UART1 RX DMA"
+ depends on BSP_USING_UART1
+ select RT_SERIAL_USING_DMA
+ default n
+
+ config BSP_UART1_TX_USING_DMA
+ bool "Enable UART1 TX DMA"
+ depends on BSP_USING_UART1
+ select RT_SERIAL_USING_DMA
+ default n
+
+ config BSP_UART1_RX_BUFSIZE
+ int "Set UART1 RX buffer size"
+ range 64 65535
+ depends on BSP_USING_UART1 && RT_USING_SERIAL_V2
+ default 64
+
+ config BSP_UART1_TX_BUFSIZE
+ int "Set UART1 TX buffer size"
+ range 0 65535
+ depends on BSP_USING_UART1 && RT_USING_SERIAL_V2
+ default 0
+
+ config BSP_UART1_DMA_PING_BUFSIZE
+ int "Set UART1 RX DMA ping-pong buffer size"
+ range 32 65535
+ depends on RT_USING_SERIAL_V2 && BSP_UART1_RX_USING_DMA
+ default 32
+ endif
+
+ menuconfig BSP_USING_SPI
+ bool "Enable SPI"
+ select RT_USING_SPI
+ default n
+ if BSP_USING_SPI
+ config BSP_USING_SPI0
+ bool "Enable SPI0"
+ default n
+
+ config BSP_SPI0_TX_USING_DMA
+ bool "Enable SPI0 TX DMA"
+ depends on BSP_USING_SPI0
+ default n
+
+ config BSP_SPI0_RX_USING_DMA
+ bool "Enable SPI0 RX DMA"
+ depends on BSP_USING_SPI0
+ default n
+
+ config BSP_USING_SPI1
+ bool "Enable SPI1"
+ default n
+
+ config BSP_SPI1_TX_USING_DMA
+ bool "Enable SPI1 TX DMA"
+ depends on BSP_USING_SPI1
+ default n
+
+ config BSP_SPI1_RX_USING_DMA
+ bool "Enable SPI1 RX DMA"
+ depends on BSP_USING_SPI1
+ default n
+ endif
+
+ menu "I2C Configuration"
+ menuconfig BSP_USING_HW_I2C
+ bool "Enable Hardware I2C"
+ select RT_USING_I2C
+ default n
+ if BSP_USING_HW_I2C
+ config BSP_USING_I2C0
+ bool "Enable I2C0"
+ default y
+
+ config BSP_USING_I2C1
+ bool "Enable I2C1"
+ default n
+ endif
+ menuconfig BSP_USING_I2C0
+ bool "Enable I2C0 BUS (software simulation)"
+ default n
+ select RT_USING_I2C
+ select RT_USING_I2C_BITOPS
+ select RT_USING_PIN
+ if BSP_USING_I2C0
+ config BSP_I2C0_SCL_PIN
+ int "i2c0 scl pin number"
+ range 1 216
+ default 22
+ config BSP_I2C0_SDA_PIN
+ int "I2C0 sda pin number"
+ range 1 216
+ default 23
+ endif
+ menuconfig BSP_USING_I2C1
+ bool "Enable I2C1 BUS (software simulation)"
+ default n
+ select RT_USING_I2C
+ select RT_USING_I2C_BITOPS
+ select RT_USING_PIN
+ if BSP_USING_I2C1
+ config BSP_I2C1_SCL_PIN
+ int "i2c1 scl pin number"
+ range 1 216
+ default 24
+ config BSP_I2C1_SDA_PIN
+ int "I2C1 sda pin number"
+ range 1 216
+ default 25
+ endif
+ endmenu
+
+ menuconfig BSP_USING_ADC
+ bool "Enable ADC"
+ select RT_USING_ADC
+ default n
+ if BSP_USING_ADC
+ config BSP_USING_ADC0
+ bool "Enable ADC"
+ default y
+ endif
+
+ menuconfig BSP_USING_TIM
+ bool "Enable Hardware Timer"
+ select RT_USING_HWTIMER
+ default n
+ if BSP_USING_TIM
+ config BSP_USING_TIM2
+ bool "Enable TIM2"
+ default n
+
+ config BSP_USING_TIM3
+ bool "Enable TIM3"
+ default n
+ endif
+
+ menuconfig BSP_USING_ONCHIP_RTC
+ bool "Enable RTC"
+ select RT_USING_RTC
+ default n
+ if BSP_USING_ONCHIP_RTC
+ choice
+ prompt "Select RTC clock source"
+ default BSP_RTC_USING_LSE
+
+ config BSP_RTC_USING_LSE
+ bool "RTC using LSE (External Crystal)"
+
+ config BSP_RTC_USING_LSI
+ bool "RTC using LSI (Internal RC)"
+ endchoice
+ endif
+
+ config BSP_USING_WDT
+ bool "Enable Watchdog Timer"
+ select RT_USING_WDT
+ default n
+
+ # Source the upstream GD32 drivers Kconfig
+ source "$(BSP_DIR)/../libraries/gd32_drivers/Kconfig"
+
+endmenu
+
+menu "Board extended module Drivers"
+ # Configuration for external modules connected to the board
+endmenu
+
+endmenu
diff --git a/bsp/gd32/arm/gd32e230-lckfb/board/SConscript b/bsp/gd32/arm/gd32e230-lckfb/board/SConscript
new file mode 100644
index 0000000000..98ad1b98d1
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/board/SConscript
@@ -0,0 +1,17 @@
+import os
+import rtconfig
+from building import *
+
+cwd = GetCurrentDir()
+
+# add general drivers
+src = Split('''
+board.c
+''')
+
+path = [cwd]
+
+CPPDEFINES = ['GD32E23X', 'GD32E23X_HD']
+group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES)
+
+Return('group')
diff --git a/bsp/gd32/arm/gd32e230-lckfb/board/board.c b/bsp/gd32/arm/gd32e230-lckfb/board/board.c
new file mode 100644
index 0000000000..f29d44ca99
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/board/board.c
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2006-2025, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ */
+
+#include <rthw.h>
+#include <rtthread.h>
+#include "board.h"
+#include "gd32e23x.h"
+
+#ifdef RT_USING_SERIAL
+#if defined(RT_USING_SERIAL_V2)
+#include "drv_usart_v2.h"
+#else
+#include "drv_usart.h"
+#endif
+#endif
+
+/**
+ * @brief This function is executed in case of error occurrence.
+ * @param None
+ * @retval None
+ */
+void Error_Handler(void)
+{
+ rt_kprintf("\nError_Handler triggered! System halted.\n");
+ while (1)
+ {
+ }
+}
+
+/**
+ * @brief This is the timer interrupt service routine.
+ *
+ */
+void SysTick_Handler(void)
+{
+ /* enter interrupt */
+ rt_interrupt_enter();
+
+ rt_tick_increase();
+
+ /* leave interrupt */
+ rt_interrupt_leave();
+}
+
+/**
+ * @brief This function will initial GD32 board.
+ * @note This function is called from the RT-Thread startup code.
+ */
+void rt_hw_board_init(void)
+{
+#ifdef VECT_TAB_RAM
+ SCB->VTOR = 0x20000000;
+#else /* VECT_TAB_FLASH is the default */
+ SCB->VTOR = 0x08000000;
+#endif
+
+ SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);
+ NVIC_SetPriority(SysTick_IRQn, (1 << __NVIC_PRIO_BITS) - 1);
+
+#ifdef RT_USING_HEAP
+ rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END);
+#endif
+
+#ifdef RT_USING_SERIAL
+ rt_hw_usart_init();
+#endif
+
+#ifdef RT_USING_CONSOLE
+ rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
+#endif
+
+#ifdef RT_USING_COMPONENTS_INIT
+ rt_components_board_init();
+#endif
+}
+
diff --git a/bsp/gd32/arm/gd32e230-lckfb/board/board.h b/bsp/gd32/arm/gd32e230-lckfb/board/board.h
new file mode 100644
index 0000000000..aa1e4ae313
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/board/board.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2006-2025, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ */
+#ifndef __BOARD_H__
+#define __BOARD_H__
+
+#include "gd32e23x.h"
+#include "drv_gpio.h"
+
+#include "gd32e23x_exti.h"
+
+
+#define GD32_SRAM_SIZE 8
+
+#define GD32_SRAM_BEGIN (0x20000000)
+#define GD32_SRAM_END (GD32_SRAM_BEGIN + GD32_SRAM_SIZE * 1024)
+
+#ifdef __ARMCC_VERSION
+extern int Image$$RW_IRAM1$$ZI$$Limit;
+#define HEAP_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit)
+#elif __ICCARM__
+#pragma section="CSTACK"
+#define HEAP_BEGIN (__segment_end("CSTACK"))
+#else /* GCC */
+extern int __bss_end;
+#define HEAP_BEGIN (&__bss_end)
+#endif
+
+#define HEAP_END GD32_SRAM_END
+
+#endif
+
diff --git a/bsp/gd32/arm/gd32e230-lckfb/board/gd32e23x_libopt.h b/bsp/gd32/arm/gd32e230-lckfb/board/gd32e23x_libopt.h
new file mode 100644
index 0000000000..1ad718d0e1
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/board/gd32e23x_libopt.h
@@ -0,0 +1,59 @@
+/*!
+ \file gd32e23x_libopt.h
+ \brief library optional for gd32e23x
+
+ \version 2025-02-10, V2.3.0, firmware for GD32E23x
+*/
+
+/*
+ Copyright (c) 2025, GigaDevice Semiconductor Inc.
+
+ Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ 3. Neither the name of the copyright holder nor the names of its contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGE.
+*/
+
+#ifndef GD32E23X_LIBOPT_H
+#define GD32E23X_LIBOPT_H
+
+#include "gd32e23x_adc.h"
+#include "gd32e23x_crc.h"
+#include "gd32e23x_dbg.h"
+#include "gd32e23x_dma.h"
+#include "gd32e23x_exti.h"
+#include "gd32e23x_fmc.h"
+#include "gd32e23x_gpio.h"
+#include "gd32e23x_syscfg.h"
+#include "gd32e23x_i2c.h"
+#include "gd32e23x_fwdgt.h"
+#include "gd32e23x_pmu.h"
+#include "gd32e23x_rcu.h"
+#include "gd32e23x_rtc.h"
+#include "gd32e23x_spi.h"
+#include "gd32e23x_timer.h"
+#include "gd32e23x_usart.h"
+#include "gd32e23x_wwdgt.h"
+#include "gd32e23x_misc.h"
+#include "gd32e23x_cmp.h"
+
+#endif /* GD32E23X_LIBOPT_H */
+
diff --git a/bsp/gd32/arm/gd32e230-lckfb/board/linker_scripts/link.icf b/bsp/gd32/arm/gd32e230-lckfb/board/linker_scripts/link.icf
new file mode 100644
index 0000000000..81bcee4a5a
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/board/linker_scripts/link.icf
@@ -0,0 +1,51 @@
+/*###ICF### Section handled by ICF editor, don't touch! ****/
+/*-Editor annotation file-*/
+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
+/*-Specials-*/
+define symbol __ICFEDIT_intvec_start__ = 0x08000000;
+/*-Memory Regions-*/
+/*
+ * IMPORTANT: Please check your specific chip's datasheet for correct memory sizes.
+ * The following values are for a GD32E230 with 64KB Flash and 8KB SRAM.
+ */
+define symbol __ICFEDIT_region_ROM_start__ = 0x08000000;
+define symbol __ICFEDIT_region_ROM_end__ = 0x0800FFFF; /* 64KB Flash */
+define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
+define symbol __ICFEDIT_region_RAM_end__ = 0x20001FFF; /* 8KB SRAM */
+/*-Sizes-*/
+/*
+ * The CSTACK is used for main function before scheduler start and for interrupt handlers.
+ * The HEAP is the C library heap, which is rarely used in RT-Thread.
+ * RT-Thread uses the remaining RAM for its own dynamic memory heap.
+ */
+define symbol __ICFEDIT_size_cstack__ = 0x400; /* 1024 bytes, a safer size */
+define symbol __ICFEDIT_size_heap__ = 0x100; /* 256 bytes, can be smaller */
+/**** End of ICF editor section. ###ICF###*/
+
+
+define memory mem with size = 4G;
+define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__];
+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__];
+
+/* Remove the non-existent RAM1 region */
+/* define region RAM1_region = mem:[from __region_RAM1_start__ to __region_RAM1_end__]; */
+
+
+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
+
+initialize by copy { readwrite };
+do not initialize { section .noinit };
+
+/* Keep RT-Thread FinSH command symbols */
+keep { section FSymTab };
+keep { section VSymTab };
+keep { section .rti_fn* };
+place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
+
+place in ROM_region { readonly };
+place in RAM_region { readwrite,
+ block CSTACK, block HEAP };
+
+/* Remove placement in the non-existent RAM1 region */
+/* place in RAM1_region { section .sram }; */ \ No newline at end of file
diff --git a/bsp/gd32/arm/gd32e230-lckfb/board/linker_scripts/link.ld b/bsp/gd32/arm/gd32e230-lckfb/board/linker_scripts/link.ld
new file mode 100644
index 0000000000..bbe40cb864
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/board/linker_scripts/link.ld
@@ -0,0 +1,139 @@
+/*
+ * linker script for GD32E230x with GNU ld
+ * Adapted from GD32E50x version.
+ * Corrected by Gemini to fix oversized .bin file and subsequent linker errors.
+ */
+
+MEMORY
+{
+ /*
+ * IMPORTANT: Please check your specific chip's datasheet for correct memory sizes.
+ * The following values are for a GD32E230 with 64KB Flash and 8KB SRAM.
+ */
+ CODE (rx) : ORIGIN = 0x08000000, LENGTH = 64k /* MODIFIED: 64KB flash */
+ DATA (rw) : ORIGIN = 0x20000000, LENGTH = 8k /* MODIFIED: 8KB sram */
+}
+
+/* Program Entry, set to mark it as "used" and avoid gc */
+ENTRY(Reset_Handler)
+
+/*
+ * Define the size of the stack used by the system.
+ * This is for the main stack pointer (MSP), used before RT-Thread scheduler starts and in interrupts.
+ * Increased to 1KB for safety.
+ */
+_system_stack_size = 0x400; /* MODIFIED: 1024 bytes */
+
+SECTIONS
+{
+ .text :
+ {
+ . = ALIGN(4);
+ _stext = .;
+ KEEP(*(.isr_vector)) /* Startup code */
+ . = ALIGN(4);
+ *(.text) /* remaining code */
+ *(.text.*) /* remaining code */
+ *(.rodata) /* read-only data (constants) */
+ *(.rodata*)
+ *(.glue_7)
+ *(.glue_7t)
+ *(.gnu.linkonce.t*)
+
+ /* section information for finsh shell */
+ . = ALIGN(4);
+ __fsymtab_start = .;
+ KEEP(*(FSymTab))
+ __fsymtab_end = .;
+ . = ALIGN(4);
+ __vsymtab_start = .;
+ KEEP(*(VSymTab))
+ __vsymtab_end = .;
+ . = ALIGN(4);
+
+ /* section information for initial. */
+ . = ALIGN(4);
+ __rt_init_start = .;
+ KEEP(*(SORT(.rti_fn*)))
+ __rt_init_end = .;
+ . = ALIGN(4);
+
+ . = ALIGN(4);
+ _etext = .;
+ } > CODE
+
+ /*
+ * The .ARM.exidx section is needed for exception handling and stack unwinding.
+ * It should be placed in a loadable region like CODE.
+ */
+ .ARM.exidx :
+ {
+ __exidx_start = .;
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+ __exidx_end = .;
+ } > CODE
+
+ /*
+ * Define the load address for the .data section.
+ * It should immediately follow the .ARM.exidx section in Flash.
+ */
+ _sidata = __exidx_end;
+
+ /* .data section which is used for initialized data */
+ .data : AT (_sidata)
+ {
+ . = ALIGN(4);
+ _sdata = . ;
+ *(.data)
+ *(.data.*)
+ *(.gnu.linkonce.d*)
+ . = ALIGN(4);
+ _edata = . ;
+ } > DATA
+
+ /* Main stack, located at the top of the RAM region */
+ .stack (NOLOAD):
+ {
+ . = ALIGN(8);
+ _sstack = .;
+ . = . + _system_stack_size;
+ . = ALIGN(8);
+ _estack = .;
+ } > DATA
+
+ /* .bss section which is used for uninitialized data */
+ .bss :
+ {
+ . = ALIGN(4);
+ _sbss = .;
+ *(.bss)
+ *(.bss.*)
+ *(COMMON)
+ . = ALIGN(4);
+ _ebss = . ;
+ } > DATA
+
+ /* Define __bss_end for C code to find the heap start. */
+ __bss_end = _ebss;
+
+ _end = .;
+
+ /******************************************************************************
+ * Corrected section to discard unwanted information from the final binary. *
+ ******************************************************************************/
+ /DISCARD/ :
+ {
+ libc.a ( * )
+ libm.a ( * )
+ libgcc.a ( * )
+
+ /* Discard all debugging and comment sections using the correct wildcard syntax */
+ *(.comment)
+ *(.debug*)
+ *(.line)
+ *(.stab)
+ *(.stabstr)
+ *(.note.gnu.build-id)
+ *(.ARM.attributes)
+ }
+} \ No newline at end of file
diff --git a/bsp/gd32/arm/gd32e230-lckfb/board/linker_scripts/link.sct b/bsp/gd32/arm/gd32e230-lckfb/board/linker_scripts/link.sct
new file mode 100644
index 0000000000..16bdcee325
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/board/linker_scripts/link.sct
@@ -0,0 +1,39 @@
+; *************************************************************
+; *** Scatter-Loading Description File for GD32E230 + RT-Thread
+; *** Target: GD32E230C8T6 (64KB Flash, 8KB SRAM)
+; *** This version is more structured and recommended.
+; *************************************************************
+
+#!armclang --cpu=cortex-m23
+
+; Define stack and heap sizes
+define symbol Stack_Size = 0x00000400; ; 1KB for Main Stack
+define symbol Heap_Size = 0x00000100; ; 256B for C-library Heap
+
+; Max size of load region LR_IROM1
+LR_IROM1 0x08000000 0x00010000 { ; Load region: Flash, 64KB
+
+ ; First execution region for exception vectors and startup code
+ ER_IROM1 0x08000000 0x00010000 {
+ *.o (RESET, +First)
+ *(InRoot$$Sections)
+ .ANY (+RO)
+
+ ; --- Special sections for RT-Thread ---
+ * (FSymTab)
+ * (VSymTab)
+ * (rti_fn*)
+ ; --------------------------------------
+ }
+
+ ; RAM region for RW, ZI, Stack, and Heap
+ RW_IRAM1 0x20000000 0x00002000 { ; RW region: SRAM, 8KB
+ ; C-library Stack, placed at the top of RAM, growing downwards
+ ARM_LIB_STACK STACK_TOP(0x20002000) EMPTY -Stack_Size { }
+
+ .ANY (+RW +ZI)
+
+ ; C-library Heap, placed after RW/ZI data
+ ARM_LIB_HEAP +0 EMPTY Heap_Size { }
+ }
+} \ No newline at end of file
diff --git a/bsp/gd32/arm/gd32e230-lckfb/figures/board.png b/bsp/gd32/arm/gd32e230-lckfb/figures/board.png
new file mode 100644
index 0000000000..0cd25b459f
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/figures/board.png
Binary files differ
diff --git a/bsp/gd32/arm/gd32e230-lckfb/rtconfig.h b/bsp/gd32/arm/gd32e230-lckfb/rtconfig.h
new file mode 100644
index 0000000000..9fc76ea327
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/rtconfig.h
@@ -0,0 +1,413 @@
+#ifndef RT_CONFIG_H__
+#define RT_CONFIG_H__
+
+/* RT-Thread Kernel */
+
+/* klibc options */
+
+/* rt_vsnprintf options */
+
+/* end of rt_vsnprintf options */
+
+/* rt_vsscanf options */
+
+/* end of rt_vsscanf options */
+
+/* rt_memset options */
+
+/* end of rt_memset options */
+
+/* rt_memcpy options */
+
+/* end of rt_memcpy options */
+
+/* rt_memmove options */
+
+/* end of rt_memmove options */
+
+/* rt_memcmp options */
+
+/* end of rt_memcmp options */
+
+/* rt_strstr options */
+
+/* end of rt_strstr options */
+
+/* rt_strcasecmp options */
+
+/* end of rt_strcasecmp options */
+
+/* rt_strncpy options */
+
+/* end of rt_strncpy options */
+
+/* rt_strcpy options */
+
+/* end of rt_strcpy options */
+
+/* rt_strncmp options */
+
+/* end of rt_strncmp options */
+
+/* rt_strcmp options */
+
+/* end of rt_strcmp options */
+
+/* rt_strlen options */
+
+/* end of rt_strlen options */
+
+/* rt_strnlen options */
+
+/* end of rt_strnlen options */
+/* end of klibc options */
+#define RT_NAME_MAX 8
+#define RT_CPUS_NR 1
+#define RT_ALIGN_SIZE 8
+#define RT_THREAD_PRIORITY_32
+#define RT_THREAD_PRIORITY_MAX 32
+#define RT_TICK_PER_SECOND 100
+#define RT_USING_OVERFLOW_CHECK
+#define RT_USING_HOOK
+#define RT_HOOK_USING_FUNC_PTR
+#define RT_USING_IDLE_HOOK
+#define RT_IDLE_HOOK_LIST_SIZE 4
+#define IDLE_THREAD_STACK_SIZE 256
+
+/* kservice options */
+
+/* end of kservice options */
+#define RT_USING_DEBUG
+#define RT_DEBUGING_ASSERT
+#define RT_DEBUGING_COLOR
+#define RT_DEBUGING_CONTEXT
+
+/* Inter-Thread communication */
+
+#define RT_USING_SEMAPHORE
+#define RT_USING_MUTEX
+#define RT_USING_EVENT
+#define RT_USING_MAILBOX
+#define RT_USING_MESSAGEQUEUE
+/* end of Inter-Thread communication */
+
+/* Memory Management */
+
+#define RT_USING_MEMPOOL
+#define RT_USING_SMALL_MEM
+#define RT_USING_SMALL_MEM_AS_HEAP
+#define RT_USING_HEAP
+/* end of Memory Management */
+#define RT_USING_DEVICE
+#define RT_USING_CONSOLE
+#define RT_CONSOLEBUF_SIZE 128
+#define RT_CONSOLE_DEVICE_NAME "uart0"
+#define RT_VER_NUM 0x50201
+#define RT_BACKTRACE_LEVEL_MAX_NR 32
+/* end of RT-Thread Kernel */
+#define RT_USING_HW_ATOMIC
+#define ARCH_ARM
+#define ARCH_ARM_CORTEX_M
+#define ARCH_ARM_CORTEX_M23
+
+/* RT-Thread Components */
+
+#define RT_USING_COMPONENTS_INIT
+#define RT_USING_USER_MAIN
+#define RT_MAIN_THREAD_STACK_SIZE 1024
+#define RT_MAIN_THREAD_PRIORITY 10
+
+/* DFS: device virtual file system */
+
+/* end of DFS: device virtual file system */
+
+/* Device Drivers */
+
+#define RT_USING_DEVICE_IPC
+#define RT_UNAMED_PIPE_NUMBER 64
+#define RT_USING_SERIAL
+#define RT_USING_SERIAL_V1
+#define RT_SERIAL_RB_BUFSZ 64
+#define RT_USING_PIN
+/* end of Device Drivers */
+
+/* C/C++ and POSIX layer */
+
+/* ISO-ANSI C layer */
+
+/* Timezone and Daylight Saving Time */
+
+#define RT_LIBC_USING_LIGHT_TZ_DST
+#define RT_LIBC_TZ_DEFAULT_HOUR 8
+#define RT_LIBC_TZ_DEFAULT_MIN 0
+#define RT_LIBC_TZ_DEFAULT_SEC 0
+/* end of Timezone and Daylight Saving Time */
+/* end of ISO-ANSI C layer */
+
+/* POSIX (Portable Operating System Interface) layer */
+
+
+/* Interprocess Communication (IPC) */
+
+
+/* Socket is in the 'Network' category */
+
+/* end of Interprocess Communication (IPC) */
+/* end of POSIX (Portable Operating System Interface) layer */
+/* end of C/C++ and POSIX layer */
+
+/* Network */
+
+/* end of Network */
+
+/* Memory protection */
+
+/* end of Memory protection */
+
+/* Utilities */
+
+/* end of Utilities */
+
+/* Using USB legacy version */
+
+/* end of Using USB legacy version */
+/* end of RT-Thread Components */
+
+/* RT-Thread Utestcases */
+
+/* end of RT-Thread Utestcases */
+
+/* RT-Thread online packages */
+
+/* IoT - internet of things */
+
+
+/* Wi-Fi */
+
+/* Marvell WiFi */
+
+/* end of Marvell WiFi */
+
+/* Wiced WiFi */
+
+/* end of Wiced WiFi */
+
+/* CYW43012 WiFi */
+
+/* end of CYW43012 WiFi */
+
+/* BL808 WiFi */
+
+/* end of BL808 WiFi */
+
+/* CYW43439 WiFi */
+
+/* end of CYW43439 WiFi */
+/* end of Wi-Fi */
+
+/* IoT Cloud */
+
+/* end of IoT Cloud */
+/* end of IoT - internet of things */
+
+/* security packages */
+
+/* end of security packages */
+
+/* language packages */
+
+/* JSON: JavaScript Object Notation, a lightweight data-interchange format */
+
+/* end of JSON: JavaScript Object Notation, a lightweight data-interchange format */
+
+/* XML: Extensible Markup Language */
+
+/* end of XML: Extensible Markup Language */
+/* end of language packages */
+
+/* multimedia packages */
+
+/* LVGL: powerful and easy-to-use embedded GUI library */
+
+/* end of LVGL: powerful and easy-to-use embedded GUI library */
+
+/* u8g2: a monochrome graphic library */
+
+/* end of u8g2: a monochrome graphic library */
+/* end of multimedia packages */
+
+/* tools packages */
+
+/* end of tools packages */
+
+/* system packages */
+
+/* enhanced kernel services */
+
+/* end of enhanced kernel services */
+
+/* acceleration: Assembly language or algorithmic acceleration packages */
+
+/* end of acceleration: Assembly language or algorithmic acceleration packages */
+
+/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */
+
+/* end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */
+
+/* Micrium: Micrium software products porting for RT-Thread */
+
+/* end of Micrium: Micrium software products porting for RT-Thread */
+/* end of system packages */
+
+/* peripheral libraries and drivers */
+
+/* HAL & SDK Drivers */
+
+/* STM32 HAL & SDK Drivers */
+
+/* end of STM32 HAL & SDK Drivers */
+
+/* Infineon HAL Packages */
+
+/* end of Infineon HAL Packages */
+
+/* Kendryte SDK */
+
+/* end of Kendryte SDK */
+
+/* WCH HAL & SDK Drivers */
+
+/* end of WCH HAL & SDK Drivers */
+
+/* AT32 HAL & SDK Drivers */
+
+/* end of AT32 HAL & SDK Drivers */
+
+/* HC32 DDL Drivers */
+
+/* end of HC32 DDL Drivers */
+
+/* NXP HAL & SDK Drivers */
+
+/* end of NXP HAL & SDK Drivers */
+
+/* NUVOTON Drivers */
+
+/* end of NUVOTON Drivers */
+
+/* GD32 Drivers */
+
+#define PKG_USING_GD32_ARM_CMSIS_DRIVER
+#define PKG_USING_GD32_ARM_CMSIS_DRIVER_LATEST_VERSION
+#define PKG_USING_GD32_ARM_SERIES_DRIVER
+#define PKG_USING_GD32_ARM_SERIES_DRIVER_LATEST_VERSION
+/* end of GD32 Drivers */
+/* end of HAL & SDK Drivers */
+
+/* sensors drivers */
+
+/* end of sensors drivers */
+
+/* touch drivers */
+
+/* end of touch drivers */
+/* end of peripheral libraries and drivers */
+
+/* AI packages */
+
+/* end of AI packages */
+
+/* Signal Processing and Control Algorithm Packages */
+
+/* end of Signal Processing and Control Algorithm Packages */
+
+/* miscellaneous packages */
+
+/* project laboratory */
+
+/* end of project laboratory */
+
+/* samples: kernel and components samples */
+
+/* end of samples: kernel and components samples */
+
+/* entertainment: terminal games and other interesting software packages */
+
+/* end of entertainment: terminal games and other interesting software packages */
+/* end of miscellaneous packages */
+
+/* Arduino libraries */
+
+
+/* Projects and Demos */
+
+/* end of Projects and Demos */
+
+/* Sensors */
+
+/* end of Sensors */
+
+/* Display */
+
+/* end of Display */
+
+/* Timing */
+
+/* end of Timing */
+
+/* Data Processing */
+
+/* end of Data Processing */
+
+/* Data Storage */
+
+/* Communication */
+
+/* end of Communication */
+
+/* Device Control */
+
+/* end of Device Control */
+
+/* Other */
+
+/* end of Other */
+
+/* Signal IO */
+
+/* end of Signal IO */
+
+/* Uncategorized */
+
+/* end of Arduino libraries */
+/* end of RT-Thread online packages */
+#define SOC_FAMILY_GD32
+#define SOC_SERIES_GD32E23x
+
+/* Hardware Drivers Config */
+
+#define SOC_GD32E230C8T6
+
+/* Onboard Peripheral Drivers */
+
+#define BSP_USING_LED
+#define BSP_LED_PIN 45
+/* end of Onboard Peripheral Drivers */
+
+/* On-chip Peripheral Drivers */
+
+#define BSP_USING_GPIO
+#define BSP_USING_UART
+#define BSP_USING_UART0
+
+/* I2C Configuration */
+
+/* end of I2C Configuration */
+/* end of On-chip Peripheral Drivers */
+
+/* Board extended module Drivers */
+
+/* end of Hardware Drivers Config */
+
+#endif
+
diff --git a/bsp/gd32/arm/gd32e230-lckfb/rtconfig.py b/bsp/gd32/arm/gd32e230-lckfb/rtconfig.py
new file mode 100644
index 0000000000..e9949303c8
--- /dev/null
+++ b/bsp/gd32/arm/gd32e230-lckfb/rtconfig.py
@@ -0,0 +1,148 @@
+import os
+
+# toolchains options
+ARCH='arm'
+CPU='cortex-m23'
+CROSS_TOOL='gcc'
+
+# bsp lib config
+BSP_LIBRARY_TYPE = None
+
+if os.getenv('RTT_CC'):
+ CROSS_TOOL = os.getenv('RTT_CC')
+if os.getenv('RTT_ROOT'):
+ RTT_ROOT = os.getenv('RTT_ROOT')
+
+# cross_tool provides the cross compiler
+# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR
+if CROSS_TOOL == 'gcc':
+ PLATFORM = 'gcc'
+ EXEC_PATH = r'/usr/bin'
+elif CROSS_TOOL == 'keil':
+ PLATFORM = 'armcc'
+ EXEC_PATH = r'C:/Keil_v5'
+elif CROSS_TOOL == 'iar':
+ PLATFORM = 'iccarm'
+ EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.3'
+
+if os.getenv('RTT_EXEC_PATH'):
+ EXEC_PATH = os.getenv('RTT_EXEC_PATH')
+
+BUILD = 'release'
+
+if PLATFORM == 'gcc':
+ # toolchains
+ PREFIX = 'arm-none-eabi-'
+ CC = PREFIX + 'gcc'
+ AS = PREFIX + 'gcc'
+ AR = PREFIX + 'ar'
+ CXX = PREFIX + 'g++'
+ LINK = PREFIX + 'gcc'
+ TARGET_EXT = 'elf'
+ SIZE = PREFIX + 'size'
+ OBJDUMP = PREFIX + 'objdump'
+ OBJCPY = PREFIX + 'objcopy'
+
+ DEVICE = ' -mcpu=cortex-m23 -mthumb -ffunction-sections -fdata-sections'
+ CFLAGS = DEVICE + ' -Dgcc'
+ AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb'
+ LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.ld'
+
+ CPATH = ''
+ LPATH = ''
+
+ if BUILD == 'debug':
+ CFLAGS += ' -O0 -gdwarf-2 -g'
+ AFLAGS += ' -gdwarf-2'
+ else:
+ CFLAGS += ' -O2'
+
+ CXXFLAGS = CFLAGS
+
+ POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'
+
+elif PLATFORM == 'armcc':
+ # toolchains
+ CC = 'armcc'
+ CXX = 'armcc'
+ AS = 'armasm'
+ AR = 'armar'
+ LINK = 'armlink'
+ TARGET_EXT = 'axf'
+
+ DEVICE = ' --cpu Cortex-M23 '
+ CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99'
+ AFLAGS = DEVICE + ' --apcs=interwork '
+ LFLAGS = DEVICE + ' --scatter "board/linker_scripts/link.sct" --info sizes --info totals --info unused --info veneers --list rtthread.map --strict'
+ CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include'
+ LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib'
+
+ CFLAGS += ' -D__MICROLIB '
+ AFLAGS += ' --pd "__MICROLIB SETA 1" '
+ LFLAGS += ' --library_type=microlib '
+ EXEC_PATH += '/ARM/ARMCC/bin/'
+
+ if BUILD == 'debug':
+ CFLAGS += ' -g -O0'
+ AFLAGS += ' -g'
+ else:
+ CFLAGS += ' -O2'
+
+ CXXFLAGS = CFLAGS
+ CFLAGS += ' -std=c99'
+
+ POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET'
+
+elif PLATFORM == 'iccarm':
+ # toolchains
+ CC = 'iccarm'
+ CXX = 'iccarm'
+ AS = 'iasmarm'
+ AR = 'iarchive'
+ LINK = 'ilinkarm'
+ TARGET_EXT = 'out'
+
+ DEVICE = '-Dewarm'
+
+ CFLAGS = DEVICE
+ CFLAGS += ' --diag_suppress Pa050'
+ CFLAGS += ' --no_cse'
+ CFLAGS += ' --no_unroll'
+ CFLAGS += ' --no_inline'
+ CFLAGS += ' --no_code_motion'
+ CFLAGS += ' --no_tbaa'
+ CFLAGS += ' --no_clustering'
+ CFLAGS += ' --no_scheduling'
+ CFLAGS += ' --endian=little'
+ CFLAGS += ' --cpu=Cortex-M23'
+ CFLAGS += ' -e'
+ CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"'
+ CFLAGS += ' --silent'
+
+ AFLAGS = DEVICE
+ AFLAGS += ' -s+'
+ AFLAGS += ' -w+'
+ AFLAGS += ' -r'
+ AFLAGS += ' --cpu Cortex-M23'
+ AFLAGS += ' -S'
+
+ if BUILD == 'debug':
+ CFLAGS += ' --debug'
+ CFLAGS += ' -On'
+ else:
+ CFLAGS += ' -Oh'
+
+ LFLAGS = ' --config "board/linker_scripts/link.icf"'
+ LFLAGS += ' --entry __iar_program_start'
+
+ CXXFLAGS = CFLAGS
+
+ EXEC_PATH = EXEC_PATH + '/arm/bin/'
+ POST_ACTION = 'ielftool --bin $TARGET rtthread.bin'
+
+def dist_handle(BSP_ROOT, dist_dir):
+ import sys
+ cwd_path = os.getcwd()
+ sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools'))
+ from sdk_dist import dist_do_building
+ dist_do_building(BSP_ROOT, dist_dir)
diff --git a/bsp/gd32/arm/libraries/Kconfig b/bsp/gd32/arm/libraries/Kconfig
index 869c54ac8a..6cd8bf17f2 100644
--- a/bsp/gd32/arm/libraries/Kconfig
+++ b/bsp/gd32/arm/libraries/Kconfig
@@ -34,4 +34,9 @@ config SOC_SERIES_GD32H7xx
config SOC_SERIES_GD32F5xx
bool
select ARCH_ARM_CORTEX_M33
+ select SOC_FAMILY_GD32
+
+config SOC_SERIES_GD32E23x
+ bool
+ select ARCH_ARM_CORTEX_M23
select SOC_FAMILY_GD32 \ No newline at end of file
diff --git a/bsp/gd32/arm/libraries/gd32_drivers/drv_adc.c b/bsp/gd32/arm/libraries/gd32_drivers/drv_adc.c
index c388da38c8..0a74d7d434 100644
--- a/bsp/gd32/arm/libraries/gd32_drivers/drv_adc.c
+++ b/bsp/gd32/arm/libraries/gd32_drivers/drv_adc.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
+ * Copyright (c) 2006-2025, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -35,6 +35,16 @@ struct rt_adc_device adc2;
static const struct gd32_adc adc_obj[] = {
#ifdef BSP_USING_ADC0
{
+ #if defined SOC_SERIES_GD32E23x
+ ADC,
+ RCU_ADC,
+ {
+ GET_PIN(A, 0), GET_PIN(A, 1), GET_PIN(A, 2), GET_PIN(A, 3),
+ GET_PIN(A, 4), GET_PIN(A, 5), GET_PIN(A, 6), GET_PIN(A, 7),
+ GET_PIN(B, 0), GET_PIN(B, 1), -1, -1,
+ -1, -1, -1, -1,
+ },
+ #else
ADC0,
RCU_ADC0,
{
@@ -43,6 +53,7 @@ static const struct gd32_adc adc_obj[] = {
GET_PIN(B, 0), GET_PIN(B, 1), GET_PIN(C, 0), GET_PIN(C, 1),
GET_PIN(C, 2), GET_PIN(C, 3), GET_PIN(C, 4), GET_PIN(C, 5),
},
+ #endif
&adc0,
"adc0",
},
@@ -89,7 +100,7 @@ static void gd32_adc_gpio_init(rcu_periph_enum adc_clk, rt_base_t pin)
/* enable ADC clock */
rcu_periph_clock_enable(adc_clk);
-#if defined SOC_SERIES_GD32F4xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32E23x
/* configure adc pin */
gpio_mode_set(PIN_GDPORT(pin), GPIO_MODE_ANALOG, GPIO_PUPD_NONE, PIN_GDPIN(pin));
#else
@@ -122,27 +133,47 @@ static rt_err_t gd32_adc_enabled(struct rt_adc_device *device, rt_int8_t channel
{
gd32_adc_gpio_init(adc->adc_clk, adc->adc_pins[channel]);
+ #if defined SOC_SERIES_GD32E23x
+ adc_data_alignment_config(ADC_DATAALIGN_RIGHT);
+ #else
adc_data_alignment_config(adc_periph, ADC_DATAALIGN_RIGHT);
+ #endif
#if defined SOC_SERIES_GD32F4xx
adc_channel_length_config(adc_periph, ADC_ROUTINE_CHANNEL, 1);
adc_external_trigger_source_config(adc_periph, ADC_ROUTINE_CHANNEL, ADC_EXTTRIG_ROUTINE_EXTI_11);
adc_external_trigger_config(adc_periph, ADC_ROUTINE_CHANNEL, ENABLE);
+ #elif defined SOC_SERIES_GD32E23x
+ adc_channel_length_config(ADC_REGULAR_CHANNEL, 1);
+ adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE);
+ adc_external_trigger_config(ADC_REGULAR_CHANNEL, ENABLE);
#else
adc_channel_length_config(adc_periph, ADC_REGULAR_CHANNEL, 1);
adc_external_trigger_source_config(adc_periph, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
adc_external_trigger_config(adc_periph, ADC_REGULAR_CHANNEL, ENABLE);
#endif
+ #if defined SOC_SERIES_GD32E23x
+ adc_enable();
+ #else
adc_enable(adc_periph);
+ #endif
rt_hw_us_delay(1);
/* ADC calibration and reset calibration */
+ #if defined SOC_SERIES_GD32E23x
+ adc_calibration_enable();
+ #else
adc_calibration_enable(adc_periph);
+ #endif
}
else
{
+ #if defined SOC_SERIES_GD32E23x
+ adc_disable();
+ #else
adc_disable(adc_periph);
+ #endif
}
return RT_EOK;
}
@@ -166,20 +197,35 @@ static rt_err_t gd32_adc_convert(struct rt_adc_device *device, rt_int8_t channel
}
adc_periph = (uint32_t)(adc->adc_periph);
+ #if defined SOC_SERIES_GD32E23x
+ adc_flag_clear(ADC_FLAG_EOC | ADC_FLAG_STRC);
+ #else
adc_flag_clear(adc_periph, ADC_FLAG_EOC | ADC_FLAG_STRC);
+ #endif
#if defined SOC_SERIES_GD32F4xx
adc_routine_channel_config(adc_periph, 0, channel, ADC_SAMPLETIME_480);
adc_software_trigger_enable(adc_periph, ADC_ROUTINE_CHANNEL);
+#elif defined SOC_SERIES_GD32E23x
+ adc_regular_channel_config(0, channel, ADC_SAMPLETIME_13POINT5);
+ adc_software_trigger_enable(ADC_REGULAR_CHANNEL);
#else
adc_regular_channel_config(adc_periph, 0, channel, ADC_SAMPLETIME_13POINT5);
adc_software_trigger_enable(adc_periph, ADC_REGULAR_CHANNEL);
#endif
+ #if defined SOC_SERIES_GD32E23x
+ while (!adc_flag_get(ADC_FLAG_EOC))
+ #else
while (!adc_flag_get(adc_periph, ADC_FLAG_EOC))
+ #endif
{
if(timeout >= 100)
{
+ #if defined SOC_SERIES_GD32E23x
+ adc_flag_clear(ADC_FLAG_EOC | ADC_FLAG_STRC);
+ #else
adc_flag_clear(adc_periph, ADC_FLAG_EOC | ADC_FLAG_STRC);
+ #endif
LOG_E("Convert Timeout");
return -RT_ETIMEOUT;
}
@@ -192,11 +238,14 @@ static rt_err_t gd32_adc_convert(struct rt_adc_device *device, rt_int8_t channel
#if defined SOC_SERIES_GD32F4xx
*value = adc_routine_data_read(adc_periph);
+ adc_flag_clear(adc_periph, ADC_FLAG_EOC | ADC_FLAG_STRC);
+#elif defined SOC_SERIES_GD32E23x
+ *value = adc_regular_data_read();
+ adc_flag_clear(ADC_FLAG_EOC | ADC_FLAG_STRC);
#else
*value = adc_regular_data_read(adc_periph);
-#endif
-
adc_flag_clear(adc_periph, ADC_FLAG_EOC | ADC_FLAG_STRC);
+#endif
return RT_EOK;
}
@@ -225,3 +274,4 @@ static int rt_hw_adc_init(void)
}
INIT_BOARD_EXPORT(rt_hw_adc_init);
#endif
+
diff --git a/bsp/gd32/arm/libraries/gd32_drivers/drv_adc.h b/bsp/gd32/arm/libraries/gd32_drivers/drv_adc.h
index b2bc10eb98..8a5c5708bc 100644
--- a/bsp/gd32/arm/libraries/gd32_drivers/drv_adc.h
+++ b/bsp/gd32/arm/libraries/gd32_drivers/drv_adc.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
+ * Copyright (c) 2006-2025, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -35,3 +35,4 @@ struct gd32_adc
#endif
#endif /* __DRV_ADC_H__ */
+
diff --git a/bsp/gd32/arm/libraries/gd32_drivers/drv_dma.h b/bsp/gd32/arm/libraries/gd32_drivers/drv_dma.h
index 48a1eb05a2..cf1afd7793 100644
--- a/bsp/gd32/arm/libraries/gd32_drivers/drv_dma.h
+++ b/bsp/gd32/arm/libraries/gd32_drivers/drv_dma.h
@@ -12,6 +12,28 @@
#define _DRV_DMA_H_
+#if defined SOC_SERIES_GD32E23x
+#define DRV_DMA_CONFIG(chx) \
+ (struct dma_config) { \
+ .periph = DMA, \
+ .rcu = RCU_DMA, \
+ .channel = DMA_CH##chx, \
+ .irq = ((chx) == 0 ? DMA_Channel0_IRQn : \
+ (chx) == 1 ? DMA_Channel1_2_IRQn : \
+ (chx) == 2 ? DMA_Channel1_2_IRQn : \
+ (chx) == 3 ? DMA_Channel3_4_IRQn : \
+ (chx) == 4 ? DMA_Channel3_4_IRQn : (IRQn_Type)0) \
+ }
+struct dma_config
+{
+ uint32_t periph;
+ rcu_periph_enum rcu;
+ dma_channel_enum channel;
+ IRQn_Type irq;
+};
+
+#else
+
#define DRV_DMA_CONFIG(dmax, chx, subx) { \
.periph = DMA##dmax, \
.channel = DMA_CH##chx, \
@@ -29,4 +51,6 @@ struct dma_config
IRQn_Type irq;
};
+#endif
+
#endif /* _DRV_DMA_H_ */
diff --git a/bsp/gd32/arm/libraries/gd32_drivers/drv_gpio.c b/bsp/gd32/arm/libraries/gd32_drivers/drv_gpio.c
index 092ed4aeb6..cb43335dea 100644
--- a/bsp/gd32/arm/libraries/gd32_drivers/drv_gpio.c
+++ b/bsp/gd32/arm/libraries/gd32_drivers/drv_gpio.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
+ * Copyright (c) 2006-2025, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -182,6 +182,27 @@ static const struct pin_index pins[] =
#endif
};
+#if defined SOC_SERIES_GD32E23x
+static const struct pin_irq_map pin_irq_map[] =
+{
+ {GPIO_PIN_0, EXTI0_1_IRQn},
+ {GPIO_PIN_1, EXTI0_1_IRQn},
+ {GPIO_PIN_2, EXTI2_3_IRQn},
+ {GPIO_PIN_3, EXTI2_3_IRQn},
+ {GPIO_PIN_4, EXTI4_15_IRQn},
+ {GPIO_PIN_5, EXTI4_15_IRQn},
+ {GPIO_PIN_6, EXTI4_15_IRQn},
+ {GPIO_PIN_7, EXTI4_15_IRQn},
+ {GPIO_PIN_8, EXTI4_15_IRQn},
+ {GPIO_PIN_9, EXTI4_15_IRQn},
+ {GPIO_PIN_10, EXTI4_15_IRQn},
+ {GPIO_PIN_11, EXTI4_15_IRQn},
+ {GPIO_PIN_12, EXTI4_15_IRQn},
+ {GPIO_PIN_13, EXTI4_15_IRQn},
+ {GPIO_PIN_14, EXTI4_15_IRQn},
+ {GPIO_PIN_15, EXTI4_15_IRQn},
+};
+#else
static const struct pin_irq_map pin_irq_map[] =
{
{GPIO_PIN_0, EXTI0_IRQn},
@@ -201,6 +222,7 @@ static const struct pin_irq_map pin_irq_map[] =
{GPIO_PIN_14, EXTI10_15_IRQn},
{GPIO_PIN_15, EXTI10_15_IRQn},
};
+#endif
struct rt_pin_irq_hdr pin_irq_hdr_tab[] =
{
@@ -257,7 +279,7 @@ static void gd32_pin_mode(rt_device_t dev, rt_base_t pin, rt_uint8_t mode)
const struct pin_index *index = RT_NULL;
rt_uint32_t pin_mode = 0;
-#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx || defined SOC_SERIES_GD32E23x
rt_uint32_t pin_pupd = 0, pin_odpp = 0;
#endif
@@ -269,7 +291,7 @@ static void gd32_pin_mode(rt_device_t dev, rt_base_t pin, rt_uint8_t mode)
/* GPIO Periph clock enable */
rcu_periph_clock_enable(index->clk);
-#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx || defined SOC_SERIES_GD32E23x
pin_mode = GPIO_MODE_OUTPUT;
#else
pin_mode = GPIO_MODE_OUT_PP;
@@ -279,7 +301,7 @@ static void gd32_pin_mode(rt_device_t dev, rt_base_t pin, rt_uint8_t mode)
{
case PIN_MODE_OUTPUT:
/* output setting */
-#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx || defined SOC_SERIES_GD32E23x
pin_mode = GPIO_MODE_OUTPUT;
pin_pupd = GPIO_PUPD_NONE;
pin_odpp = GPIO_OTYPE_PP;
@@ -289,7 +311,7 @@ static void gd32_pin_mode(rt_device_t dev, rt_base_t pin, rt_uint8_t mode)
break;
case PIN_MODE_OUTPUT_OD:
/* output setting: od. */
-#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx || defined SOC_SERIES_GD32E23x
pin_mode = GPIO_MODE_OUTPUT;
pin_pupd = GPIO_PUPD_NONE;
pin_odpp = GPIO_OTYPE_OD;
@@ -299,7 +321,7 @@ static void gd32_pin_mode(rt_device_t dev, rt_base_t pin, rt_uint8_t mode)
break;
case PIN_MODE_INPUT:
/* input setting: not pull. */
-#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx || defined SOC_SERIES_GD32E23x
pin_mode = GPIO_MODE_INPUT;
pin_pupd = GPIO_PUPD_PULLUP | GPIO_PUPD_PULLDOWN;
#else
@@ -308,7 +330,7 @@ static void gd32_pin_mode(rt_device_t dev, rt_base_t pin, rt_uint8_t mode)
break;
case PIN_MODE_INPUT_PULLUP:
/* input setting: pull up. */
-#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx || defined SOC_SERIES_GD32E23x
pin_mode = GPIO_MODE_INPUT;
pin_pupd = GPIO_PUPD_PULLUP;
#else
@@ -317,7 +339,7 @@ static void gd32_pin_mode(rt_device_t dev, rt_base_t pin, rt_uint8_t mode)
break;
case PIN_MODE_INPUT_PULLDOWN:
/* input setting: pull down. */
-#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx || defined SOC_SERIES_GD32E23x
pin_mode = GPIO_MODE_INPUT;
pin_pupd = GPIO_PUPD_PULLDOWN;
#else
@@ -328,7 +350,7 @@ static void gd32_pin_mode(rt_device_t dev, rt_base_t pin, rt_uint8_t mode)
break;
}
-#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx || defined SOC_SERIES_GD32E23x
gpio_mode_set(index->gpio_periph, pin_mode, pin_pupd, index->pin);
if(pin_mode == GPIO_MODE_OUTPUT)
{
@@ -449,6 +471,7 @@ static rt_err_t gd32_pin_attach_irq(struct rt_device *device, rt_base_t pin,
rt_hw_interrupt_enable(level);
return RT_EOK;
}
+
if (pin_irq_hdr_tab[hdr_index].pin != -1)
{
rt_hw_interrupt_enable(level);
@@ -555,15 +578,20 @@ static rt_err_t gd32_pin_irq_enable(struct rt_device *device, rt_base_t pin, rt_
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx
rcu_periph_clock_enable(RCU_SYSCFG);
+#elif defined SOC_SERIES_GD32E23x
+ rcu_periph_clock_enable(RCU_CFGCMP);
#else
rcu_periph_clock_enable(RCU_AF);
#endif
/* enable and set interrupt priority */
+#if defined SOC_SERIES_GD32E23x
+ nvic_irq_enable(irqmap->irqno, 5U);
+#else
nvic_irq_enable(irqmap->irqno, 5U, 0U);
-
+#endif
/* connect EXTI line to GPIO pin */
-#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx || defined SOC_SERIES_GD32E23x
syscfg_exti_line_config(index->port_src, index->pin_src);
#else
gpio_exti_source_select(index->port_src, index->pin_src);
@@ -630,6 +658,47 @@ void GD32_GPIO_EXTI_IRQHandler(rt_int8_t exti_line)
}
}
+#if defined SOC_SERIES_GD32E23x
+void EXTI0_1_IRQHandler(void)
+{
+ rt_interrupt_enter();
+
+ GD32_GPIO_EXTI_IRQHandler(0);
+ GD32_GPIO_EXTI_IRQHandler(1);
+
+ rt_interrupt_leave();
+}
+
+void EXTI2_3_IRQHandler(void)
+{
+ rt_interrupt_enter();
+
+ GD32_GPIO_EXTI_IRQHandler(2);
+ GD32_GPIO_EXTI_IRQHandler(3);
+
+ rt_interrupt_leave();
+}
+
+void EXTI4_15_IRQHandler(void)
+{
+ rt_interrupt_enter();
+
+ GD32_GPIO_EXTI_IRQHandler(4);
+ GD32_GPIO_EXTI_IRQHandler(5);
+ GD32_GPIO_EXTI_IRQHandler(6);
+ GD32_GPIO_EXTI_IRQHandler(7);
+ GD32_GPIO_EXTI_IRQHandler(8);
+ GD32_GPIO_EXTI_IRQHandler(9);
+ GD32_GPIO_EXTI_IRQHandler(10);
+ GD32_GPIO_EXTI_IRQHandler(11);
+ GD32_GPIO_EXTI_IRQHandler(12);
+ GD32_GPIO_EXTI_IRQHandler(13);
+ GD32_GPIO_EXTI_IRQHandler(14);
+ GD32_GPIO_EXTI_IRQHandler(15);
+
+ rt_interrupt_leave();
+}
+#else
void EXTI0_IRQHandler(void)
{
rt_interrupt_enter();
@@ -687,6 +756,7 @@ void EXTI10_15_IRQHandler(void)
GD32_GPIO_EXTI_IRQHandler(15);
rt_interrupt_leave();
}
+#endif
int rt_hw_pin_init(void)
{
@@ -700,3 +770,4 @@ int rt_hw_pin_init(void)
INIT_BOARD_EXPORT(rt_hw_pin_init);
#endif
+
diff --git a/bsp/gd32/arm/libraries/gd32_drivers/drv_gpio.h b/bsp/gd32/arm/libraries/gd32_drivers/drv_gpio.h
index 1c4d8e1feb..7e31b6c72d 100644
--- a/bsp/gd32/arm/libraries/gd32_drivers/drv_gpio.h
+++ b/bsp/gd32/arm/libraries/gd32_drivers/drv_gpio.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
+ * Copyright (c) 2006-2025, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -33,11 +33,13 @@ extern "C" {
#include "gd32e50x_gpio.h"
#elif defined SOC_SERIES_GD32F5xx
#include "gd32f5xx_gpio.h"
+#elif defined SOC_SERIES_GD32E23x
+#include "gd32e23x_gpio.h"
#endif
#define __GD32_PORT(port) GPIO##port
-#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx || defined SOC_SERIES_GD32E23x
#define GD32_PIN(index, port, pin) {index, RCU_GPIO##port, \
GPIO##port, GPIO_PIN_##pin, \
EXTI_SOURCE_GPIO##port, \
diff --git a/bsp/gd32/arm/libraries/gd32_drivers/drv_rtc.c b/bsp/gd32/arm/libraries/gd32_drivers/drv_rtc.c
index 2937f408c2..b8e07954f4 100644
--- a/bsp/gd32/arm/libraries/gd32_drivers/drv_rtc.c
+++ b/bsp/gd32/arm/libraries/gd32_drivers/drv_rtc.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
+ * Copyright (c) 2006-2025, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -24,17 +24,92 @@ typedef struct {
static gd32_rtc_device g_gd32_rtc_dev;
+/**
+ * @brief Helper function: Convert BCD value to binary.
+ * @param val: BCD value.
+ * @return Binary value.
+ */
+static rt_uint8_t bcd_to_bin(rt_uint8_t val)
+{
+ return (val & 0x0F) + ((val >> 4) & 0x0F) * 10;
+}
+
+/**
+ * @brief Helper function: Convert binary to BCD.
+ * @param val: Binary value.
+ * @return BCD value.
+ */
+static rt_uint8_t bin_to_bcd(rt_uint8_t val)
+{
+ return ((val / 10) << 4) | (val % 10);
+}
+
static time_t get_rtc_timestamp(void)
{
+ #if defined SOC_SERIES_GD32E23x
+ struct tm tm_new;
+ rtc_parameter_struct rtc_current_time;
+
+ rtc_current_time_get(&rtc_current_time);
+
+ tm_new.tm_year = bcd_to_bin(rtc_current_time.rtc_year) + 100; /* tm_year: years since 1900 */
+ tm_new.tm_mon = bcd_to_bin(rtc_current_time.rtc_month) - 1; /* tm_mon: month (0 = January, 11 = December) */
+ tm_new.tm_mday = bcd_to_bin(rtc_current_time.rtc_date);
+ tm_new.tm_hour = bcd_to_bin(rtc_current_time.rtc_hour);
+ tm_new.tm_min = bcd_to_bin(rtc_current_time.rtc_minute);
+ tm_new.tm_sec = bcd_to_bin(rtc_current_time.rtc_second);
+
+ return mktime(&tm_new);
+ #else
time_t rtc_counter;
rtc_counter = (time_t)rtc_counter_get();
return rtc_counter;
+ #endif
}
static rt_err_t set_rtc_timestamp(time_t time_stamp)
{
+ #if defined SOC_SERIES_GD32E23x
+ struct tm *p_tm;
+ rtc_parameter_struct rtc_init_struct;
+
+ p_tm = gmtime(&time_stamp);
+
+ /* GD32 RTC uses year starting from 2000; thus tm_year must be at least 100 (i.e., 2000 - 1900) */
+
+ if (p_tm->tm_year < 100)
+ {
+ return -RT_ERROR;
+ }
+
+ rtc_init_struct.rtc_year = bin_to_bcd(p_tm->tm_year - 100);
+ rtc_init_struct.rtc_month = bin_to_bcd(p_tm->tm_mon + 1);
+ rtc_init_struct.rtc_date = bin_to_bcd(p_tm->tm_mday);
+
+ rtc_init_struct.rtc_day_of_week = bin_to_bcd(p_tm->tm_wday == 0 ? 7 : p_tm->tm_wday);
+ rtc_init_struct.rtc_hour = bin_to_bcd(p_tm->tm_hour);
+ rtc_init_struct.rtc_minute = bin_to_bcd(p_tm->tm_min);
+ rtc_init_struct.rtc_second = bin_to_bcd(p_tm->tm_sec);
+ rtc_init_struct.rtc_display_format = RTC_24HOUR;
+
+#if defined(BSP_RTC_USING_LSI)
+ rtc_init_struct.rtc_factor_asyn = 39;
+ rtc_init_struct.rtc_factor_syn = 999;
+#elif defined(BSP_RTC_USING_LSE)
+ rtc_init_struct.rtc_factor_asyn = 127;
+ rtc_init_struct.rtc_factor_syn = 255;
+#endif
+
+ if (rtc_init(&rtc_init_struct) != SUCCESS)
+ {
+ LOG_E("Failed to set RTC time.");
+ return -RT_ERROR;
+ }
+
+ return RT_EOK;
+ #else
uint32_t rtc_counter;
rtc_counter = (uint32_t)time_stamp;
@@ -51,6 +126,7 @@ static rt_err_t set_rtc_timestamp(time_t time_stamp)
rtc_lwoff_wait();
return RT_EOK;
+ #endif
}
static rt_err_t rt_gd32_rtc_control(rt_device_t dev, int cmd, void *args)
@@ -94,7 +170,9 @@ static int rt_hw_rtc_init(void)
rcu_periph_clock_enable(RCU_PMU);
pmu_backup_write_enable();
+#ifndef SOC_SERIES_GD32E23x
rcu_periph_clock_enable(RCU_BKPI);
+#endif
rtc_counter = get_rtc_timestamp();
/* once the rtc clock source has been selected, if can't be changed
@@ -145,3 +223,4 @@ static int rt_hw_rtc_init(void)
}
INIT_DEVICE_EXPORT(rt_hw_rtc_init);
#endif
+
diff --git a/bsp/gd32/arm/libraries/gd32_drivers/drv_spi.c b/bsp/gd32/arm/libraries/gd32_drivers/drv_spi.c
index d62ecc9122..1efeef1b1f 100644
--- a/bsp/gd32/arm/libraries/gd32_drivers/drv_spi.c
+++ b/bsp/gd32/arm/libraries/gd32_drivers/drv_spi.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
+ * Copyright (c) 2006-2025, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -45,6 +45,9 @@ static const struct gd32_spi spi_bus_obj[] = {
#if defined SOC_SERIES_GD32F4xx
GPIO_AF_5,
#endif
+#if defined SOC_SERIES_GD32E23x
+ GPIO_AF_0,
+#endif
GPIO_PIN_5,
GPIO_PIN_6,
GPIO_PIN_7,
@@ -62,7 +65,15 @@ static const struct gd32_spi spi_bus_obj[] = {
#if defined SOC_SERIES_GD32F4xx
GPIO_AF_5,
#endif
+#if defined SOC_SERIES_GD32E23x
+ GPIO_AF_0,
+#endif
+
+#if defined SOC_SERIES_GD32E23x
+ GPIO_PIN_13,
+#else
GPIO_PIN_12,
+#endif
GPIO_PIN_14,
GPIO_PIN_15,
},
@@ -141,12 +152,16 @@ static void gd32_spi_init(struct gd32_spi *gd32_spi)
rcu_periph_clock_enable(gd32_spi->spi_clk);
rcu_periph_clock_enable(gd32_spi->gpio_clk);
-#if defined SOC_SERIES_GD32F4xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32E23x
/*GPIO pin configuration*/
gpio_af_set(gd32_spi->spi_port, gd32_spi->alt_func_num, gd32_spi->sck_pin | gd32_spi->mosi_pin | gd32_spi->miso_pin);
gpio_mode_set(gd32_spi->spi_port, GPIO_MODE_AF, GPIO_PUPD_NONE, gd32_spi->sck_pin | gd32_spi->mosi_pin | gd32_spi->miso_pin);
+ #if defined SOC_SERIES_GD32E23x
+ gpio_output_options_set(gd32_spi->spi_port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, gd32_spi->sck_pin | gd32_spi->mosi_pin | gd32_spi->miso_pin);
+ #else
gpio_output_options_set(gd32_spi->spi_port, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, gd32_spi->sck_pin | gd32_spi->mosi_pin | gd32_spi->miso_pin);
+ #endif
#else
/* Init SPI SCK MOSI */
gpio_init(gd32_spi->spi_port, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, gd32_spi->sck_pin | gd32_spi->mosi_pin);
@@ -168,7 +183,7 @@ static rt_err_t spi_configure(struct rt_spi_device* device,
RT_ASSERT(device != RT_NULL);
RT_ASSERT(configuration != RT_NULL);
- //Init SPI
+ /* Init SPI */
gd32_spi_init(spi_device);
/* data_width */
@@ -197,6 +212,9 @@ static rt_err_t spi_configure(struct rt_spi_device* device,
LOG_D("CK_APB2 freq: %d\n", rcu_clock_freq_get(CK_APB2));
LOG_D("max freq: %d\n", max_hz);
+ #if defined SOC_SERIES_GD32E23x
+ spi_src = CK_APB2;
+ #else
if (spi_periph == SPI1 || spi_periph == SPI2)
{
spi_src = CK_APB1;
@@ -205,6 +223,7 @@ static rt_err_t spi_configure(struct rt_spi_device* device,
{
spi_src = CK_APB2;
}
+ #endif
spi_apb_clock = rcu_clock_freq_get(spi_src);
if(max_hz >= spi_apb_clock/2)
@@ -318,15 +337,15 @@ static rt_ssize_t spixfer(struct rt_spi_device* device, struct rt_spi_message* m
data = *send_ptr++;
}
- // Todo: replace register read/write by gd32f4 lib
- //Wait until the transmit buffer is empty
+ /* Todo: replace register read/write by gd32f4 lib */
+ /* Wait until the transmit buffer is empty */
while(RESET == spi_i2s_flag_get(spi_periph, SPI_FLAG_TBE));
- // Send the byte
+ /* Send the byte */
spi_i2s_data_transmit(spi_periph, data);
- //Wait until a data is received
+ /* Wait until a data is received */
while(RESET == spi_i2s_flag_get(spi_periph, SPI_FLAG_RBNE));
- // Get the received data
+ /* Get the received data */
data = spi_i2s_data_receive(spi_periph);
if(recv_ptr != RT_NULL)
@@ -351,14 +370,14 @@ static rt_ssize_t spixfer(struct rt_spi_device* device, struct rt_spi_message* m
data = *send_ptr++;
}
- //Wait until the transmit buffer is empty
+ /* Wait until the transmit buffer is empty */
while(RESET == spi_i2s_flag_get(spi_periph, SPI_FLAG_TBE));
- // Send the byte
+ /* Send the byte */
spi_i2s_data_transmit(spi_periph, data);
- //Wait until a data is received
+ /* Wait until a data is received */
while(RESET == spi_i2s_flag_get(spi_periph, SPI_FLAG_RBNE));
- // Get the received data
+ /* Get the received data */
data = spi_i2s_data_receive(spi_periph);
if(recv_ptr != RT_NULL)
@@ -438,3 +457,4 @@ INIT_BOARD_EXPORT(rt_hw_spi_init);
#endif /* BSP_USING_SPI0 || BSP_USING_SPI1 || BSP_USING_SPI2 || BSP_USING_SPI3 || BSP_USING_SPI4*/
#endif /* RT_USING_SPI */
+
diff --git a/bsp/gd32/arm/libraries/gd32_drivers/drv_spi.h b/bsp/gd32/arm/libraries/gd32_drivers/drv_spi.h
index fbdaaf745e..cf80884490 100644
--- a/bsp/gd32/arm/libraries/gd32_drivers/drv_spi.h
+++ b/bsp/gd32/arm/libraries/gd32_drivers/drv_spi.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
+ * Copyright (c) 2006-2025, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -34,7 +34,7 @@ struct gd32_spi
rcu_periph_enum gpio_clk;
struct rt_spi_bus *spi_bus;
uint32_t spi_port;
-#if defined SOC_SERIES_GD32F4xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32E23x
uint32_t alt_func_num;
#endif
uint16_t sck_pin;
@@ -49,3 +49,4 @@ rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name,
#endif
#endif /* __DRV_SPI_H__ */
+
diff --git a/bsp/gd32/arm/libraries/gd32_drivers/drv_usart.c b/bsp/gd32/arm/libraries/gd32_drivers/drv_usart.c
index ea4c73143c..8cb2cfdfd3 100644
--- a/bsp/gd32/arm/libraries/gd32_drivers/drv_usart.c
+++ b/bsp/gd32/arm/libraries/gd32_drivers/drv_usart.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
+ * Copyright (c) 2006-2025, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -154,27 +154,31 @@ void UART7_IRQHandler(void)
static const struct gd32_uart uart_obj[] = {
#ifdef BSP_USING_UART0
{
- USART0, // uart peripheral index
- USART0_IRQn, // uart iqrn
- RCU_USART0, // uart periph clock
+ USART0, /* uart peripheral index */
+ USART0_IRQn, /* uart iqrn */
+ RCU_USART0, /* uart periph clock */
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
- RCU_GPIOA, RCU_GPIOA, // tx gpio clock, rx gpio clock
- GPIOA, GPIO_AF_7, GPIO_PIN_9, // tx port, tx alternate, tx pin
- GPIOA, GPIO_AF_7, GPIO_PIN_10, // rx port, rx alternate, rx pin
+ RCU_GPIOA, RCU_GPIOA, /* tx gpio clock, rx gpio clock */
+ GPIOA, GPIO_AF_7, GPIO_PIN_9, /* tx port, tx alternate, tx pin */
+ GPIOA, GPIO_AF_7, GPIO_PIN_10, /* rx port, rx alternate, rx pin */
#elif defined SOC_SERIES_GD32H7xx
- RCU_GPIOF, // periph clock, tx gpio clock
- RCU_GPIOF, // periph clock, rx gpio clock
- GPIOF, GPIO_AF_4, GPIO_PIN_4, // tx port, tx alternate, tx pin
- GPIOF, GPIO_AF_4, GPIO_PIN_5, // rx port, rx alternate, rx pin
+ RCU_GPIOF, /* periph clock, tx gpio clock */
+ RCU_GPIOF, /* periph clock, rx gpio clock */
+ GPIOF, GPIO_AF_4, GPIO_PIN_4, /* tx port, tx alternate, tx pin */
+ GPIOF, GPIO_AF_4, GPIO_PIN_5, /* rx port, rx alternate, rx pin */
#elif defined SOC_SERIES_GD32E50x
- RCU_GPIOA, RCU_GPIOA, // tx gpio clock, rx gpio clock
- GPIOA, 0, GPIO_PIN_9, // tx port, tx alternate, tx pin
- GPIOA, 0, GPIO_PIN_10, // rx port, rx alternate, rx pin
- 0, // afio remap cfg
+ RCU_GPIOA, RCU_GPIOA, /* tx gpio clock, rx gpio clock */
+ GPIOA, 0, GPIO_PIN_9, /* tx port, tx alternate, tx pin */
+ GPIOA, 0, GPIO_PIN_10, /* rx port, rx alternate, rx pin */
+ 0, /* afio remap cfg */
+#elif defined SOC_SERIES_GD32E23x
+ RCU_GPIOA, RCU_GPIOA,
+ GPIOA, GPIO_AF_1, GPIO_PIN_9,
+ GPIOA, GPIO_AF_1, GPIO_PIN_10,
#else
- RCU_GPIOA, RCU_GPIOA, // tx gpio clock, rx gpio clock
- GPIOA, GPIO_PIN_9, // tx port, tx pin
- GPIOA, GPIO_PIN_10, // rx port, rx pin
+ RCU_GPIOA, RCU_GPIOA, /* tx gpio clock, rx gpio clock */
+ GPIOA, GPIO_PIN_9, /* tx port, tx pin */
+ GPIOA, GPIO_PIN_10, /* rx port, rx pin */
#endif
&serial0,
"uart0",
@@ -183,22 +187,26 @@ static const struct gd32_uart uart_obj[] = {
#ifdef BSP_USING_UART1
{
- USART1, // uart peripheral index
- USART1_IRQn, // uart iqrn
- RCU_USART1, // uart periph clock
+ USART1, /* uart peripheral index */
+ USART1_IRQn, /* uart iqrn */
+ RCU_USART1, /* uart periph clock */
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx
- RCU_GPIOA, RCU_GPIOA, // tx gpio clock, rx gpio clock
- GPIOA, GPIO_AF_7, GPIO_PIN_2, // tx port, tx alternate, tx pin
- GPIOA, GPIO_AF_7, GPIO_PIN_3, // rx port, rx alternate, rx pin
+ RCU_GPIOA, RCU_GPIOA, /* tx gpio clock, rx gpio clock */
+ GPIOA, GPIO_AF_7, GPIO_PIN_2, /* tx port, tx alternate, tx pin */
+ GPIOA, GPIO_AF_7, GPIO_PIN_3, /* rx port, rx alternate, rx pin */
#elif defined SOC_SERIES_GD32E50x
- RCU_GPIOA, RCU_GPIOA, // tx gpio clock, rx gpio clock
- GPIOA, 0, GPIO_PIN_2, // tx port, tx alternate, tx pin
- GPIOA, 0, GPIO_PIN_3, // rx port, rx alternate, rx pin
- 0, // afio remap cfg
+ RCU_GPIOA, RCU_GPIOA, /* tx gpio clock, rx gpio clock */
+ GPIOA, 0, GPIO_PIN_2, /* tx port, tx alternate, tx pin */
+ GPIOA, 0, GPIO_PIN_3, /* rx port, rx alternate, rx pin */
+ 0, /* afio remap cfg */
+#elif defined SOC_SERIES_GD32E23x
+ RCU_GPIOA, RCU_GPIOA,
+ GPIOA, GPIO_AF_1, GPIO_PIN_14,
+ GPIOA, GPIO_AF_1, GPIO_PIN_15,
#else
- RCU_GPIOA, RCU_GPIOA, // periph clock, tx gpio clock, rt gpio clock
- GPIOA, GPIO_PIN_2, // tx port, tx pin
- GPIOA, GPIO_PIN_3, // rx port, rx pin
+ RCU_GPIOA, RCU_GPIOA, /* periph clock, tx gpio clock, rt gpio clock */
+ GPIOA, GPIO_PIN_2, /* tx port, tx pin */
+ GPIOA, GPIO_PIN_3, /* rx port, rx pin */
#endif
&serial1,
"uart1",
@@ -207,22 +215,22 @@ static const struct gd32_uart uart_obj[] = {
#ifdef BSP_USING_UART2
{
- USART2, // uart peripheral index
- USART2_IRQn, // uart iqrn
- RCU_USART2, // uart periph clock
+ USART2, /* uart peripheral index */
+ USART2_IRQn, /* uart iqrn */
+ RCU_USART2, /* uart periph clock */
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx
- RCU_GPIOB, RCU_GPIOB, // tx gpio clock, rt gpio clock
- GPIOB, GPIO_AF_7, GPIO_PIN_10, // tx port, tx alternate, tx pin
- GPIOB, GPIO_AF_7, GPIO_PIN_11, // rx port, rx alternate, rx pin
+ RCU_GPIOB, RCU_GPIOB, /* tx gpio clock, rt gpio clock */
+ GPIOB, GPIO_AF_7, GPIO_PIN_10, /* tx port, tx alternate, tx pin */
+ GPIOB, GPIO_AF_7, GPIO_PIN_11, /* rx port, rx alternate, rx pin */
#elif defined SOC_SERIES_GD32E50x
- RCU_GPIOB, RCU_GPIOB, // tx gpio clock, rx gpio clock
- GPIOB, 0, GPIO_PIN_10, // tx port, tx alternate, tx pin
- GPIOB, 0, GPIO_PIN_11, // rx port, rx alternate, rx pin
- 0, // afio remap cfg
+ RCU_GPIOB, RCU_GPIOB, /* tx gpio clock, rx gpio clock */
+ GPIOB, 0, GPIO_PIN_10, /* tx port, tx alternate, tx pin */
+ GPIOB, 0, GPIO_PIN_11, /* rx port, rx alternate, rx pin */
+ 0, /* afio remap cfg */
#else
- RCU_GPIOB, RCU_GPIOB, // tx gpio clock, rt gpio clock
- GPIOB, GPIO_PIN_10, // tx port, tx pin
- GPIOB, GPIO_PIN_11, // rx port, rx pin
+ RCU_GPIOB, RCU_GPIOB, /* tx gpio clock, rt gpio clock */
+ GPIOB, GPIO_PIN_10, /* tx port, tx pin */
+ GPIOB, GPIO_PIN_11, /* rx port, rx pin */
#endif
&serial2,
"uart2",
@@ -231,22 +239,22 @@ static const struct gd32_uart uart_obj[] = {
#ifdef BSP_USING_UART3
{
- UART3, // uart peripheral index
- UART3_IRQn, // uart iqrn
- RCU_UART3, // uart periph clock
+ UART3, /* uart peripheral index */
+ UART3_IRQn, /* uart iqrn */
+ RCU_UART3, /* uart periph clock */
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
- RCU_GPIOC, RCU_GPIOC, // tx gpio clock, rt gpio clock
- GPIOC, GPIO_AF_8, GPIO_PIN_10, // tx port, tx alternate, tx pin
- GPIOC, GPIO_AF_8, GPIO_PIN_11, // rx port, rx alternate, rx pin
+ RCU_GPIOC, RCU_GPIOC, /* tx gpio clock, rt gpio clock */
+ GPIOC, GPIO_AF_8, GPIO_PIN_10, /* tx port, tx alternate, tx pin */
+ GPIOC, GPIO_AF_8, GPIO_PIN_11, /* rx port, rx alternate, rx pin */
#elif defined SOC_SERIES_GD32E50x
- RCU_GPIOC, RCU_GPIOC, // tx gpio clock, rx gpio clock
- GPIOC, 0, GPIO_PIN_10, // tx port, tx alternate, tx pin
- GPIOC, 0, GPIO_PIN_11, // rx port, rx alternate, rx pin
- 0, // afio remap cfg
+ RCU_GPIOC, RCU_GPIOC, /* tx gpio clock, rx gpio clock */
+ GPIOC, 0, GPIO_PIN_10, /* tx port, tx alternate, tx pin */
+ GPIOC, 0, GPIO_PIN_11, /* rx port, rx alternate, rx pin */
+ 0, /* afio remap cfg */
#else
- RCU_GPIOC, RCU_GPIOC, // periph clock, tx gpio clock, rt gpio clock
- GPIOC, GPIO_PIN_10, // tx port, tx pin
- GPIOC, GPIO_PIN_11, // rx port, rx pin
+ RCU_GPIOC, RCU_GPIOC, /* periph clock, tx gpio clock, rt gpio clock */
+ GPIOC, GPIO_PIN_10, /* tx port, tx pin */
+ GPIOC, GPIO_PIN_11, /* rx port, rx pin */
#endif
&serial3,
"uart3",
@@ -255,19 +263,19 @@ static const struct gd32_uart uart_obj[] = {
#ifdef BSP_USING_UART4
{
- UART4, // uart peripheral index
- UART4_IRQn, // uart iqrn
- RCU_UART4, RCU_GPIOC, RCU_GPIOD, // periph clock, tx gpio clock, rt gpio clock
+ UART4, /* uart peripheral index */
+ UART4_IRQn, /* uart iqrn */
+ RCU_UART4, RCU_GPIOC, RCU_GPIOD, /* periph clock, tx gpio clock, rt gpio clock */
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
- GPIOC, GPIO_AF_8, GPIO_PIN_12, // tx port, tx alternate, tx pin
- GPIOD, GPIO_AF_8, GPIO_PIN_2, // rx port, rx alternate, rx pin
+ GPIOC, GPIO_AF_8, GPIO_PIN_12, /* tx port, tx alternate, tx pin */
+ GPIOD, GPIO_AF_8, GPIO_PIN_2, /* rx port, rx alternate, rx pin */
#elif defined SOC_SERIES_GD32E50x
- GPIOC, 0, GPIO_PIN_12, // tx port, tx alternate, tx pin
- GPIOD, 0, GPIO_PIN_2, // rx port, rx alternate, rx pin
- 0, // afio remap cfg
+ GPIOC, 0, GPIO_PIN_12, /* tx port, tx alternate, tx pin */
+ GPIOD, 0, GPIO_PIN_2, /* rx port, rx alternate, rx pin */
+ 0, /* afio remap cfg */
#else
- GPIOC, GPIO_PIN_12, // tx port, tx pin
- GPIOD, GPIO_PIN_2, // rx port, rx pin
+ GPIOC, GPIO_PIN_12, /* tx port, tx pin */
+ GPIOD, GPIO_PIN_2, /* rx port, rx pin */
#endif
&serial4,
"uart4",
@@ -276,19 +284,19 @@ static const struct gd32_uart uart_obj[] = {
#ifdef BSP_USING_UART5
{
- USART5, // uart peripheral index
- USART5_IRQn, // uart iqrn
- RCU_USART5, RCU_GPIOC, RCU_GPIOC, // periph clock, tx gpio clock, rt gpio clock
+ USART5, /* uart peripheral index */
+ USART5_IRQn, /* uart iqrn */
+ RCU_USART5, RCU_GPIOC, RCU_GPIOC, /* periph clock, tx gpio clock, rt gpio clock */
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
- GPIOC, GPIO_AF_8, GPIO_PIN_6, // tx port, tx alternate, tx pin
- GPIOC, GPIO_AF_8, GPIO_PIN_7, // rx port, rx alternate, rx pin
+ GPIOC, GPIO_AF_8, GPIO_PIN_6, /* tx port, tx alternate, tx pin */
+ GPIOC, GPIO_AF_8, GPIO_PIN_7, /* rx port, rx alternate, rx pin */
#elif defined SOC_SERIES_GD32E50x
- GPIOC, AFIO_PC6_USART5_CFG, GPIO_PIN_6, // tx port, tx alternate, tx pin
- GPIOC, AFIO_PC7_USART5_CFG, GPIO_PIN_7, // rx port, rx alternate, rx pin
- 0, // afio remap cfg
+ GPIOC, AFIO_PC6_USART5_CFG, GPIO_PIN_6, /* tx port, tx alternate, tx pin */
+ GPIOC, AFIO_PC7_USART5_CFG, GPIO_PIN_7, /* rx port, rx alternate, rx pin */
+ 0, /* afio remap cfg */
#else
- GPIOC, GPIO_PIN_6, // tx port, tx pin
- GPIOC, GPIO_PIN_7, // rx port, rx pin
+ GPIOC, GPIO_PIN_6, /* tx port, tx pin */
+ GPIOC, GPIO_PIN_7, /* rx port, rx pin */
#endif
&serial5,
"uart5",
@@ -297,15 +305,15 @@ static const struct gd32_uart uart_obj[] = {
#ifdef BSP_USING_UART6
{
- UART6, // uart peripheral index
- UART6_IRQn, // uart iqrn
- RCU_UART6, RCU_GPIOE, RCU_GPIOE, // periph clock, tx gpio clock, rt gpio clock
+ UART6, /* uart peripheral index */
+ UART6_IRQn, /* uart iqrn */
+ RCU_UART6, RCU_GPIOE, RCU_GPIOE, /* periph clock, tx gpio clock, rt gpio clock */
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
- GPIOE, GPIO_AF_8, GPIO_PIN_7, // tx port, tx alternate, tx pin
- GPIOE, GPIO_AF_8, GPIO_PIN_8, // rx port, rx alternate, rx pin
+ GPIOE, GPIO_AF_8, GPIO_PIN_7, /* tx port, tx alternate, tx pin */
+ GPIOE, GPIO_AF_8, GPIO_PIN_8, /* rx port, rx alternate, rx pin */
#else
- GPIOE, GPIO_PIN_7, // tx port, tx pin
- GPIOE, GPIO_PIN_8, // rx port, rx pin
+ GPIOE, GPIO_PIN_7, /* tx port, tx pin */
+ GPIOE, GPIO_PIN_8, /* rx port, rx pin */
#endif
&serial6,
"uart6",
@@ -314,15 +322,15 @@ static const struct gd32_uart uart_obj[] = {
#ifdef BSP_USING_UART7
{
- UART7, // uart peripheral index
- UART7_IRQn, // uart iqrn
- RCU_UART7, RCU_GPIOE, RCU_GPIOE, // periph clock, tx gpio clock, rt gpio clock
+ UART7, /* uart peripheral index */
+ UART7_IRQn, /* uart iqrn */
+ RCU_UART7, RCU_GPIOE, RCU_GPIOE, /* periph clock, tx gpio clock, rt gpio clock */
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
- GPIOE, GPIO_AF_8, GPIO_PIN_0, // tx port, tx alternate, tx pin
- GPIOE, GPIO_AF_8, GPIO_PIN_1, // rx port, rx alternate, rx pin
+ GPIOE, GPIO_AF_8, GPIO_PIN_0, /* tx port, tx alternate, tx pin */
+ GPIOE, GPIO_AF_8, GPIO_PIN_1, /* rx port, rx alternate, rx pin */
#else
- GPIOE, GPIO_PIN_0, // tx port, tx pin
- GPIOE, GPIO_PIN_1, // rx port, rx pin
+ GPIOE, GPIO_PIN_0, /* tx port, tx pin */
+ GPIOE, GPIO_PIN_1, /* rx port, rx pin */
#endif
&serial7,
"uart7",
@@ -347,7 +355,7 @@ void gd32_uart_gpio_init(struct gd32_uart *uart)
rcu_periph_clock_enable(uart->rx_gpio_clk);
rcu_periph_clock_enable(uart->per_clk);
-#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx || defined SOC_SERIES_GD32E23x
/* connect port to USARTx_Tx */
gpio_af_set(uart->tx_port, uart->tx_af, uart->tx_pin);
@@ -598,3 +606,4 @@ int rt_hw_usart_init(void)
}
#endif
+
diff --git a/bsp/gd32/arm/libraries/gd32_drivers/drv_usart.h b/bsp/gd32/arm/libraries/gd32_drivers/drv_usart.h
index 1e81fd12c6..e2fcbe9ab2 100644
--- a/bsp/gd32/arm/libraries/gd32_drivers/drv_usart.h
+++ b/bsp/gd32/arm/libraries/gd32_drivers/drv_usart.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
+ * Copyright (c) 2006-2025, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -24,30 +24,30 @@ extern "C" {
/* GD32 uart driver */
-// Todo: compress uart info
+/* Todo: compress uart info */
struct gd32_uart
{
- uint32_t uart_periph; //Todo: 3bits
- IRQn_Type irqn; //Todo: 7bits
- rcu_periph_enum per_clk; //Todo: 5bits
- rcu_periph_enum tx_gpio_clk; //Todo: 5bits
- rcu_periph_enum rx_gpio_clk; //Todo: 5bits
- uint32_t tx_port; //Todo: 4bits
-#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx
- uint16_t tx_af; //Todo: 4bits
+ uint32_t uart_periph; /* Todo: 3bits */
+ IRQn_Type irqn; /* Todo: 7bits */
+ rcu_periph_enum per_clk; /* Todo: 5bits */
+ rcu_periph_enum tx_gpio_clk; /* Todo: 5bits */
+ rcu_periph_enum rx_gpio_clk; /* Todo: 5bits */
+ uint32_t tx_port; /* Todo: 4bits */
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx || defined SOC_SERIES_GD32E23x
+ uint16_t tx_af; /* Todo: 4bits */
#elif defined SOC_SERIES_GD32E50x
- uint32_t tx_af; //alternate1 cfg
+ uint32_t tx_af; /* alternate1 cfg */
#endif
- uint16_t tx_pin; //Todo: 4bits
- uint32_t rx_port; //Todo: 4bits
-#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx
- uint16_t rx_af; //Todo: 4bits
+ uint16_t tx_pin; /* Todo: 4bits */
+ uint32_t rx_port; /* Todo: 4bits */
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32H7xx || defined SOC_SERIES_GD32F5xx || defined SOC_SERIES_GD32E23x
+ uint16_t rx_af; /* Todo: 4bits */
#elif defined SOC_SERIES_GD32E50x
- uint32_t rx_af; //alternate1 cfg
+ uint32_t rx_af; /* alternate1 cfg */
#endif
- uint16_t rx_pin; //Todo: 4bits
+ uint16_t rx_pin; /* Todo: 4bits */
#if defined SOC_SERIES_GD32E50x
- uint32_t uart_remap; //remap
+ uint32_t uart_remap; /* remap */
#endif
struct rt_serial_device * serial;
@@ -61,3 +61,4 @@ int rt_hw_usart_init(void);
#endif
#endif /* __DRV_USART_H__ */
+
diff --git a/bsp/gd32/arm/libraries/gd32_drivers/drv_usart_v2.c b/bsp/gd32/arm/libraries/gd32_drivers/drv_usart_v2.c
index 37b8090a1f..20853da1c1 100644
--- a/bsp/gd32/arm/libraries/gd32_drivers/drv_usart_v2.c
+++ b/bsp/gd32/arm/libraries/gd32_drivers/drv_usart_v2.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006-2024, RT-Thread Development Team
+ * Copyright (c) 2006-2025, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -53,59 +53,84 @@ static struct gd32_uart uart_obj[] = {
#ifdef BSP_USING_UART0
{
"uart0",
- USART0, // uart peripheral index
- USART0_IRQn, // uart iqrn
- RCU_USART0, RCU_GPIOA, RCU_GPIOA, // periph clock, tx gpio clock, rt gpio clock
+ USART0, /* uart peripheral index */
+ USART0_IRQn, /* uart iqrn */
+ RCU_USART0, RCU_GPIOA, RCU_GPIOA, /* periph clock, tx gpio clock, rt gpio clock */
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
- GPIOA, GPIO_AF_7, GPIO_PIN_9, // tx port, tx alternate, tx pin
- GPIOA, GPIO_AF_7, GPIO_PIN_10, // rx port, rx alternate, rx pin
+ GPIOA, GPIO_AF_7, GPIO_PIN_9, /* tx port, tx alternate, tx pin */
+ GPIOA, GPIO_AF_7, GPIO_PIN_10, /* rx port, rx alternate, rx pin */
+#elif defined SOC_SERIES_GD32E23x
+ GPIOA, GPIO_AF_1, GPIO_PIN_9,
+ GPIOA, GPIO_AF_1, GPIO_PIN_10,
#else
- GPIOA, GPIO_PIN_9, // tx port, tx pin
- GPIOA, GPIO_PIN_10, // rx port, rx pin
+ GPIOA, GPIO_PIN_9, /* tx port, tx pin */
+ GPIOA, GPIO_PIN_10, /* rx port, rx pin */
#endif
+
+#if defined SOC_SERIES_GD32E23x
+#ifdef BSP_UART0_RX_USING_DMA
+ .dma.rx = DRV_DMA_CONFIG(2),
+#endif
+#ifdef BSP_UART0_TX_USING_DMA
+ .dma.tx = DRV_DMA_CONFIG(1),
+#endif
+#else
#ifdef BSP_UART0_RX_USING_DMA
.dma.rx = DRV_DMA_CONFIG(1, 5, 4),
#endif
#ifdef BSP_UART0_TX_USING_DMA
.dma.tx = DRV_DMA_CONFIG(1, 7, 4),
#endif
+#endif
},
#endif
#ifdef BSP_USING_UART1
{
"uart1",
- USART1, // uart peripheral index
- USART1_IRQn, // uart iqrn
- RCU_USART1, RCU_GPIOA, RCU_GPIOA, // periph clock, tx gpio clock, rt gpio clock
+ USART1, /* uart peripheral index */
+ USART1_IRQn, /* uart iqrn */
+ RCU_USART1, RCU_GPIOA, RCU_GPIOA, /* periph clock, tx gpio clock, rt gpio clock */
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
- GPIOA, GPIO_AF_7, GPIO_PIN_2, // tx port, tx alternate, tx pin
- GPIOA, GPIO_AF_7, GPIO_PIN_3, // rx port, rx alternate, rx pin
+ GPIOA, GPIO_AF_7, GPIO_PIN_2, /* tx port, tx alternate, tx pin */
+ GPIOA, GPIO_AF_7, GPIO_PIN_3, /* rx port, rx alternate, rx pin */
+#elif defined SOC_SERIES_GD32E23x
+ GPIOA, GPIO_AF_1, GPIO_PIN_14,
+ GPIOA, GPIO_AF_1, GPIO_PIN_15,
#else
- GPIOA, GPIO_PIN_2, // tx port, tx pin
- GPIOA, GPIO_PIN_3, // rx port, rx pin
+ GPIOA, GPIO_PIN_2, /* tx port, tx pin */
+ GPIOA, GPIO_PIN_3, /* rx port, rx pin */
#endif
+#if defined SOC_SERIES_GD32E23x
+#ifdef BSP_UART1_RX_USING_DMA
+ .dma.rx = DRV_DMA_CONFIG(4),
+#endif
+#ifdef BSP_UART1_TX_USING_DMA
+ .dma.tx = DRV_DMA_CONFIG(3),
+#endif
+#else
#ifdef BSP_UART1_RX_USING_DMA
.dma.rx = DRV_DMA_CONFIG(0, 5, 4),
#endif
#ifdef BSP_UART1_TX_USING_DMA
.dma.tx = DRV_DMA_CONFIG(0, 6, 4),
#endif
+#endif
},
#endif
#ifdef BSP_USING_UART2
{
"uart2",
- USART2, // uart peripheral index
- USART2_IRQn, // uart iqrn
- RCU_USART2, RCU_GPIOB, RCU_GPIOB, // periph clock, tx gpio clock, rt gpio clock
+ USART2, /* uart peripheral index */
+ USART2_IRQn, /* uart iqrn */
+ RCU_USART2, RCU_GPIOB, RCU_GPIOB, /* periph clock, tx gpio clock, rt gpio clock */
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
- GPIOB, GPIO_AF_7, GPIO_PIN_10, // tx port, tx alternate, tx pin
- GPIOB, GPIO_AF_7, GPIO_PIN_11, // rx port, rx alternate, rx pin
+ GPIOB, GPIO_AF_7, GPIO_PIN_10, /* tx port, tx alternate, tx pin */
+ GPIOB, GPIO_AF_7, GPIO_PIN_11, /* rx port, rx alternate, rx pin */
#else
- GPIOB, GPIO_PIN_10, // tx port, tx pin
- GPIOB, GPIO_PIN_11, // rx port, rx pin
+ GPIOB, GPIO_PIN_10, /* tx port, tx pin */
+ GPIOB, GPIO_PIN_11, /* rx port, rx pin */
#endif
#ifdef BSP_UART2_RX_USING_DMA
.dma.rx = DRV_DMA_CONFIG(0, 1, 4),
@@ -119,15 +144,15 @@ static struct gd32_uart uart_obj[] = {
#ifdef BSP_USING_UART3
{
"uart3",
- UART3, // uart peripheral index
- UART3_IRQn, // uart iqrn
- RCU_UART3, RCU_GPIOC, RCU_GPIOC, // periph clock, tx gpio clock, rt gpio clock
+ UART3, /* uart peripheral index */
+ UART3_IRQn, /* uart iqrn */
+ RCU_UART3, RCU_GPIOC, RCU_GPIOC, /* periph clock, tx gpio clock, rt gpio clock */
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
- GPIOC, GPIO_AF_8, GPIO_PIN_10, // tx port, tx alternate, tx pin
- GPIOC, GPIO_AF_8, GPIO_PIN_11, // rx port, rx alternate, rx pin
+ GPIOC, GPIO_AF_8, GPIO_PIN_10, /* tx port, tx alternate, tx pin */
+ GPIOC, GPIO_AF_8, GPIO_PIN_11, /* rx port, rx alternate, rx pin */
#else
- GPIOC, GPIO_PIN_10, // tx port, tx pin
- GPIOC, GPIO_PIN_11, // rx port, rx pin
+ GPIOC, GPIO_PIN_10, /* tx port, tx pin */
+ GPIOC, GPIO_PIN_11, /* rx port, rx pin */
#endif
#ifdef BSP_UART3_RX_USING_DMA
.dma.rx = DRV_DMA_CONFIG(0, 2, 4),
@@ -141,15 +166,15 @@ static struct gd32_uart uart_obj[] = {
#ifdef BSP_USING_UART4
{
"uart4",
- UART4, // uart peripheral index
- UART4_IRQn, // uart iqrn
- RCU_UART4, RCU_GPIOC, RCU_GPIOD, // periph clock, tx gpio clock, rt gpio clock
+ UART4, /* uart peripheral index */
+ UART4_IRQn, /* uart iqrn */
+ RCU_UART4, RCU_GPIOC, RCU_GPIOD, /* periph clock, tx gpio clock, rt gpio clock */
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
- GPIOC, GPIO_AF_8, GPIO_PIN_12, // tx port, tx alternate, tx pin
- GPIOD, GPIO_AF_8, GPIO_PIN_2, // rx port, rx alternate, rx pin
+ GPIOC, GPIO_AF_8, GPIO_PIN_12, /* tx port, tx alternate, tx pin */
+ GPIOD, GPIO_AF_8, GPIO_PIN_2, /* rx port, rx alternate, rx pin */
#else
- GPIOC, GPIO_PIN_12, // tx port, tx pin
- GPIOD, GPIO_PIN_2, // rx port, rx pin
+ GPIOC, GPIO_PIN_12, /* tx port, tx pin */
+ GPIOD, GPIO_PIN_2, /* rx port, rx pin */
#endif
#ifdef BSP_UART4_RX_USING_DMA
.dma.rx = DRV_DMA_CONFIG(0, 0, 4),
@@ -163,15 +188,15 @@ static struct gd32_uart uart_obj[] = {
#ifdef BSP_USING_UART5
{
"uart5",
- USART5, // uart peripheral index
- USART5_IRQn, // uart iqrn
- RCU_USART5, RCU_GPIOC, RCU_GPIOC, // periph clock, tx gpio clock, rt gpio clock
+ USART5, /* uart peripheral index */
+ USART5_IRQn, /* uart iqrn */
+ RCU_USART5, RCU_GPIOC, RCU_GPIOC, /* periph clock, tx gpio clock, rt gpio clock */
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
- GPIOC, GPIO_AF_8, GPIO_PIN_6, // tx port, tx alternate, tx pin
- GPIOC, GPIO_AF_8, GPIO_PIN_7, // rx port, rx alternate, rx pin
+ GPIOC, GPIO_AF_8, GPIO_PIN_6, /* tx port, tx alternate, tx pin */
+ GPIOC, GPIO_AF_8, GPIO_PIN_7, /* rx port, rx alternate, rx pin */
#else
- GPIOC, GPIO_PIN_6, // tx port, tx pin
- GPIOC, GPIO_PIN_7, // rx port, rx pin
+ GPIOC, GPIO_PIN_6, /* tx port, tx pin */
+ GPIOC, GPIO_PIN_7, /* rx port, rx pin */
#endif
#ifdef BSP_UART5_RX_USING_DMA
.dma.rx = DRV_DMA_CONFIG(1, 1, 5),
@@ -185,15 +210,15 @@ static struct gd32_uart uart_obj[] = {
#ifdef BSP_USING_UART6
{
"uart6",
- UART6, // uart peripheral index
- UART6_IRQn, // uart iqrn
- RCU_UART6, RCU_GPIOE, RCU_GPIOE, // periph clock, tx gpio clock, rt gpio clock
+ UART6, /* uart peripheral index */
+ UART6_IRQn, /* uart iqrn */
+ RCU_UART6, RCU_GPIOE, RCU_GPIOE, /* periph clock, tx gpio clock, rt gpio clock */
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
- GPIOE, GPIO_AF_8, GPIO_PIN_7, // tx port, tx alternate, tx pin
- GPIOE, GPIO_AF_8, GPIO_PIN_8, // rx port, rx alternate, rx pin
+ GPIOE, GPIO_AF_8, GPIO_PIN_7, /* tx port, tx alternate, tx pin */
+ GPIOE, GPIO_AF_8, GPIO_PIN_8, /* rx port, rx alternate, rx pin */
#else
- GPIOE, GPIO_PIN_7, // tx port, tx pin
- GPIOE, GPIO_PIN_8, // rx port, rx pin
+ GPIOE, GPIO_PIN_7, /* tx port, tx pin */
+ GPIOE, GPIO_PIN_8, /* rx port, rx pin */
#endif
#ifdef BSP_UART6_RX_USING_DMA
.dma.rx = DRV_DMA_CONFIG(0, 3, 5),
@@ -207,15 +232,15 @@ static struct gd32_uart uart_obj[] = {
#ifdef BSP_USING_UART7
{
"uart7",
- UART7, // uart peripheral index
- UART7_IRQn, // uart iqrn
- RCU_UART7, RCU_GPIOE, RCU_GPIOE, // periph clock, tx gpio clock, rt gpio clock
+ UART7, /* uart peripheral index */
+ UART7_IRQn, /* uart iqrn */
+ RCU_UART7, RCU_GPIOE, RCU_GPIOE, /* periph clock, tx gpio clock, rt gpio clock */
#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
- GPIOE, GPIO_AF_8, GPIO_PIN_0, // tx port, tx alternate, tx pin
- GPIOE, GPIO_AF_8, GPIO_PIN_1, // rx port, rx alternate, rx pin
+ GPIOE, GPIO_AF_8, GPIO_PIN_0, /* tx port, tx alternate, tx pin */
+ GPIOE, GPIO_AF_8, GPIO_PIN_1, /* rx port, rx alternate, rx pin */
#else
- GPIOE, GPIO_PIN_0, // tx port, tx pin
- GPIOE, GPIO_PIN_1, // rx port, rx pin
+ GPIOE, GPIO_PIN_0, /* tx port, tx pin */
+ GPIOE, GPIO_PIN_1, /* rx port, rx pin */
#endif
#ifdef BSP_UART7_RX_USING_DMA
.dma.rx = DRV_DMA_CONFIG(0, 6, 5),
@@ -240,7 +265,11 @@ static void dma_recv_isr (struct rt_serial_device *serial)
recv_len = 0;
level = rt_hw_interrupt_disable();
+ #if defined SOC_SERIES_GD32E23x
+ counter = dma_transfer_number_get(uart->dma.rx.channel);
+ #else
counter = dma_transfer_number_get(uart->dma.rx.periph, uart->dma.rx.channel);
+ #endif
if (counter <= uart->dma.last_index)
{
recv_len = uart->dma.last_index - counter;
@@ -377,6 +406,17 @@ static void dma_rx_isr (struct rt_serial_device *serial)
RT_ASSERT(serial != RT_NULL);
uart = rt_container_of(serial, struct gd32_uart, serial);
+ #if defined SOC_SERIES_GD32E23x
+ if ((dma_interrupt_flag_get(uart->dma.rx.channel, DMA_INT_FLAG_HTF) != RESET) ||
+ (dma_interrupt_flag_get(uart->dma.rx.channel, DMA_INT_FLAG_FTF) != RESET))
+ {
+ dma_recv_isr(serial);
+
+ /* clear dma flag */
+ dma_interrupt_flag_clear(uart->dma.rx.channel, DMA_INT_FLAG_HTF);
+ dma_interrupt_flag_clear(uart->dma.rx.channel, DMA_INT_FLAG_FTF);
+ }
+ #else
if ((dma_interrupt_flag_get(uart->dma.rx.periph, uart->dma.rx.channel, DMA_INT_FLAG_HTF) != RESET) ||
(dma_interrupt_flag_get(uart->dma.rx.periph, uart->dma.rx.channel, DMA_INT_FLAG_FTF) != RESET))
{
@@ -386,6 +426,7 @@ static void dma_rx_isr (struct rt_serial_device *serial)
dma_interrupt_flag_clear(uart->dma.rx.periph, uart->dma.rx.channel, DMA_INT_FLAG_HTF);
dma_interrupt_flag_clear(uart->dma.rx.periph, uart->dma.rx.channel, DMA_INT_FLAG_FTF);
}
+ #endif
}
#endif
@@ -405,6 +446,24 @@ static void dma_tx_isr (struct rt_serial_device *serial)
RT_ASSERT(serial != RT_NULL);
uart = rt_container_of(serial, struct gd32_uart, serial);
+ #if defined SOC_SERIES_GD32E23x
+ {
+ rt_size_t trans_total_index;
+
+ /* clear dma flag */
+ dma_interrupt_flag_clear(uart->dma.tx.channel, DMA_INT_FLAG_FTF);
+
+ /* disable dma tx channel */
+ dma_channel_disable(uart->dma.tx.channel);
+
+ trans_total_index = dma_transfer_number_get(uart->dma.tx.channel);
+
+ if (trans_total_index == 0)
+ {
+ rt_hw_serial_isr(serial, RT_SERIAL_EVENT_TX_DMADONE);
+ }
+ }
+ #else
if (dma_interrupt_flag_get(uart->dma.tx.periph, uart->dma.tx.channel, DMA_INT_FLAG_FTF) != RESET)
{
rt_size_t trans_total_index;
@@ -422,6 +481,7 @@ static void dma_tx_isr (struct rt_serial_device *serial)
rt_hw_serial_isr(serial, RT_SERIAL_EVENT_TX_DMADONE);
}
}
+ #endif
}
#endif
@@ -535,7 +595,35 @@ void UART7_IRQHandler (void)
}
#endif /* BSP_USING_UART7 */
+#if define SOC_SERIES_GD32E23x
+#if define BSP_UART0_RX_USING_DMA || define BSP_UART0_TX_USING_DMA
+void DMA_Channel1_2_IRQHandler(void)
+{
+ /* enter interrupt */
+ rt_interrupt_enter();
+
+ if (dma_interrupt_flag_get(DMA_CH1, DMA_INT_FLAG_FTF) != RESET)
+ {
+ dma_interrupt_flag_clear(DMA_CH1, DMA_INT_FLAG_G);
+ dma_tx_isr(&uart_obj[UART0_INDEX].serial);
+ }
+ if (dma_interrupt_flag_get(DMA_CH2, DMA_INT_FLAG_HTF) != RESET)
+ {
+ dma_interrupt_flag_clear(DMA_CH2, DMA_INT_FLAG_HTF);
+ dma_recv_isr(&uart_obj[UART0_INDEX].serial);
+ }
+ else if (dma_interrupt_flag_get(DMA_CH2, DMA_INT_FLAG_FTF) != RESET)
+ {
+ dma_interrupt_flag_clear(DMA_CH2, DMA_INT_FLAG_FTF);
+ dma_recv_isr(&uart_obj[UART0_INDEX].serial);
+ }
+
+ /* leave interrupt */
+ rt_interrupt_leave();
+}
+#endif
+#else
#ifdef BSP_UART0_RX_USING_DMA
void DMA1_Channel5_IRQHandler (void)
{
@@ -549,7 +637,37 @@ void DMA1_Channel7_IRQHandler (void)
dma_tx_isr(&uart_obj[UART0_INDEX].serial);
}
#endif
+#endif
+
+#if defined SOC_SERIES_GD32E23x
+#if defined BSP_UART1_RX_USING_DMA || defined BSP_UART1_TX_USING_DMA
+void DMA_Channel3_4_IRQHandler(void)
+{
+ rt_interrupt_enter();
+
+ if (dma_interrupt_flag_get(DMA_CH3, DMA_INT_FLAG_FTF) != RESET)
+ {
+ dma_interrupt_flag_clear(DMA_CH3, DMA_INT_FLAG_G);
+ dma_tx_isr(&uart_obj[UART1_INDEX].serial);
+ }
+
+ if (dma_interrupt_flag_get(DMA_CH4, DMA_INT_FLAG_HTF) != RESET)
+ {
+ dma_interrupt_flag_clear(DMA_CH4, DMA_INT_FLAG_HTF);
+ dma_recv_isr(&uart_obj[UART1_INDEX].serial);
+ }
+
+ if (dma_interrupt_flag_get(DMA_CH4, DMA_INT_FLAG_FTF) != RESET)
+ {
+ dma_interrupt_flag_clear(DMA_CH4, DMA_INT_FLAG_FTF);
+ dma_recv_isr(&uart_obj[UART1_INDEX].serial);
+ }
+
+ rt_interrupt_leave();
+}
+#endif
+#else
#ifdef BSP_UART1_RX_USING_DMA
void DMA0_Channel5_IRQHandler (void)
{
@@ -563,6 +681,7 @@ void DMA0_Channel6_IRQHandler (void)
dma_tx_isr(&uart_obj[UART1_INDEX].serial);
}
#endif
+#endif
#ifdef BSP_UART2_RX_USING_DMA
void DMA0_Channel1_IRQHandler (void)
@@ -664,7 +783,7 @@ void gd32_uart_gpio_init (struct gd32_uart *uart)
rcu_periph_clock_enable(uart->rx_gpio_clk);
rcu_periph_clock_enable(uart->per_clk);
-#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32F5xx || defined SOC_SERIES_GD32E23x
/* connect port to USARTx_Tx */
gpio_af_set(uart->tx_port, uart->tx_af, uart->tx_pin);
@@ -756,9 +875,46 @@ static rt_err_t gd32_uart_configure (struct rt_serial_device *serial, struct ser
#ifdef RT_SERIAL_USING_DMA
static void _uart_dma_receive (struct gd32_uart *uart, rt_uint8_t *buffer, rt_uint32_t size)
{
- dma_single_data_parameter_struct dma_init_struct = { 0 };
-
/* clear all the interrupt flags */
+
+ #if defined SOC_SERIES_GD32E23x
+ dma_flag_clear(uart->dma.rx.channel, DMA_FLAG_G);
+ dma_flag_clear(uart->dma.rx.channel, DMA_FLAG_FTF);
+ dma_flag_clear(uart->dma.rx.channel, DMA_FLAG_HTF);
+ dma_flag_clear(uart->dma.rx.channel, DMA_FLAG_ERR);
+ dma_channel_disable(uart->dma.rx.channel);
+ dma_deinit(uart->dma.rx.channel);
+
+ /* configure receive DMA */
+ rcu_periph_clock_enable(uart->dma.rx.rcu);
+ dma_deinit(uart->dma.rx.channel);
+
+ dma_parameter_struct dma_init_struct = { 0 };
+ dma_init_struct.periph_addr = (uint32_t)&USART_RDATA(uart->periph);
+ dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
+ dma_init_struct.memory_addr = (uint32_t)buffer;
+ dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
+ dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;
+ dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;
+ dma_init_struct.direction = DMA_PERIPHERAL_TO_MEMORY;
+ dma_init_struct.number = size;
+ dma_init_struct.priority = DMA_PRIORITY_HIGH;
+ dma_init(uart->dma.rx.channel, &dma_init_struct);
+
+ /* enable transmit complete interrupt */
+ nvic_irq_enable(uart->dma.rx.irq, 2);
+ dma_interrupt_enable(uart->dma.rx.channel, DMA_CHXCTL_HTFIE);
+ dma_interrupt_enable(uart->dma.rx.channel, DMA_CHXCTL_FTFIE);
+
+ /* enable dma channel */
+ dma_channel_enable(uart->dma.rx.channel);
+
+ /* enable usart idle interrupt */
+ usart_interrupt_enable(uart->periph, USART_INT_IDLE);
+
+ /* enable dma receive */
+ usart_dma_receive_config(uart->periph, USART_DENR_ENABLE);
+ #else
dma_flag_clear(uart->dma.rx.periph, uart->dma.rx.channel, DMA_FLAG_FEE);
dma_flag_clear(uart->dma.rx.periph, uart->dma.rx.channel, DMA_FLAG_SDE);
dma_flag_clear(uart->dma.rx.periph, uart->dma.rx.channel, DMA_FLAG_TAE);
@@ -771,6 +927,8 @@ static void _uart_dma_receive (struct gd32_uart *uart, rt_uint8_t *buffer, rt_ui
rcu_periph_clock_enable(uart->dma.rx.rcu);
dma_deinit(uart->dma.rx.periph, uart->dma.rx.channel);
+ dma_single_data_parameter_struct dma_init_struct = { 0 };
+
dma_init_struct.number = size;
dma_init_struct.memory0_addr = (uint32_t)buffer;
dma_init_struct.periph_addr = (uint32_t)&USART_DATA(uart->periph);
@@ -796,10 +954,19 @@ static void _uart_dma_receive (struct gd32_uart *uart, rt_uint8_t *buffer, rt_ui
/* enable dma receive */
usart_dma_receive_config(uart->periph, USART_RECEIVE_DMA_ENABLE);
+ #endif
}
static void _uart_dma_transmit (struct gd32_uart *uart, rt_uint8_t *buffer, rt_uint32_t size)
{
+ #if defined SOC_SERIES_GD32E23x
+ DMA_CHMADDR(uart->dma.tx.channel) = (uint32_t)buffer;
+ DMA_CHCNT(uart->dma.tx.channel) = size;
+
+ usart_dma_transmit_config(uart->periph, USART_DENT_ENABLE);
+
+ dma_channel_enable(uart->dma.tx.channel);
+ #else
/* Set the data length and data pointer */
DMA_CHM0ADDR(uart->dma.tx.periph, uart->dma.tx.channel) = (uint32_t)buffer;
DMA_CHCNT(uart->dma.tx.periph, uart->dma.tx.channel) = size;
@@ -809,12 +976,12 @@ static void _uart_dma_transmit (struct gd32_uart *uart, rt_uint8_t *buffer, rt_u
/* enable dma channel */
dma_channel_enable(uart->dma.tx.periph, uart->dma.tx.channel);
+ #endif
}
static void gd32_dma_config (struct rt_serial_device *serial, rt_ubase_t flag)
{
struct gd32_uart *uart;
- dma_single_data_parameter_struct dma_init_struct = { 0 };
RT_ASSERT(serial != RT_NULL);
uart = rt_container_of(serial, struct gd32_uart, serial);
@@ -824,6 +991,35 @@ static void gd32_dma_config (struct rt_serial_device *serial, rt_ubase_t flag)
/* enable rx dma */
if (flag == RT_DEVICE_FLAG_DMA_TX)
{
+ #if defined SOC_SERIES_GD32E23x
+ dma_flag_clear(uart->dma.tx.channel, DMA_FLAG_G);
+ dma_flag_clear(uart->dma.tx.channel, DMA_FLAG_FTF);
+ dma_flag_clear(uart->dma.tx.channel, DMA_FLAG_HTF);
+ dma_flag_clear(uart->dma.tx.channel, DMA_FLAG_ERR);
+ dma_channel_disable(uart->dma.tx.channel);
+ dma_deinit(uart->dma.tx.channel);
+ /* configure receive DMA */
+ rcu_periph_clock_enable(uart->dma.tx.rcu);
+ dma_deinit( uart->dma.tx.channel);
+
+
+ dma_parameter_struct dma_init_struct = { 0 };
+ dma_init_struct.periph_addr = (uint32_t)&USART_TDATA(uart->periph);
+ dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
+ dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
+ dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;
+ dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;
+ dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL;
+ dma_init_struct.priority = DMA_PRIORITY_HIGH;
+
+ dma_init(uart->dma.tx.channel, &dma_init_struct);
+
+ /* enable tx dma interrupt */
+ nvic_irq_enable(uart->dma.tx.irq, 2);
+
+ /* enable transmit complete interrupt */
+ dma_interrupt_enable(uart->dma.tx.channel, DMA_INT_FTF);
+ #else
/* clear all the interrupt flags */
dma_flag_clear(uart->dma.tx.periph, uart->dma.tx.channel, DMA_FLAG_FEE);
dma_flag_clear(uart->dma.tx.periph, uart->dma.tx.channel, DMA_FLAG_SDE);
@@ -837,6 +1033,8 @@ static void gd32_dma_config (struct rt_serial_device *serial, rt_ubase_t flag)
rcu_periph_clock_enable(uart->dma.tx.rcu);
dma_deinit(uart->dma.tx.periph, uart->dma.tx.channel);
+ dma_single_data_parameter_struct dma_init_struct = { 0 };
+
dma_init_struct.periph_addr = (uint32_t)&USART_DATA(uart->periph);
dma_init_struct.periph_memory_width = DMA_PERIPH_WIDTH_8BIT;
dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
@@ -852,6 +1050,7 @@ static void gd32_dma_config (struct rt_serial_device *serial, rt_ubase_t flag)
/* enable transmit complete interrupt */
dma_interrupt_enable(uart->dma.tx.periph, uart->dma.tx.channel, DMA_CHXCTL_FTFIE);
+ #endif
}
/* enable rx dma */
@@ -918,13 +1117,21 @@ static rt_err_t gd32_uart_control (struct rt_serial_device *serial, int cmd, voi
{
usart_interrupt_disable(uart->periph, USART_INT_RBNE);
NVIC_DisableIRQ(uart->dma.rx.irq);
+ #if defined SOC_SERIES_GD32E23x
+ dma_deinit(uart->dma.rx.channel);
+ #else
dma_deinit(uart->dma.rx.periph, uart->dma.rx.channel);
+ #endif
}
else if(ctrl_arg == RT_DEVICE_FLAG_DMA_TX)
{
usart_interrupt_disable(uart->periph, USART_INT_TBE);
NVIC_DisableIRQ(uart->dma.tx.irq);
+ #if defined SOC_SERIES_GD32E23x
+ dma_deinit(uart->dma.tx.channel);
+ #else
dma_deinit(uart->dma.tx.periph, uart->dma.tx.channel);
+ #endif
}
#endif
break;
@@ -1189,3 +1396,4 @@ int rt_hw_usart_init (void)
}
#endif
+
diff --git a/bsp/gd32/arm/libraries/gd32_drivers/drv_usart_v2.h b/bsp/gd32/arm/libraries/gd32_drivers/drv_usart_v2.h
index 6580791c05..a1fe384b1f 100644
--- a/bsp/gd32/arm/libraries/gd32_drivers/drv_usart_v2.h
+++ b/bsp/gd32/arm/libraries/gd32_drivers/drv_usart_v2.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006-2024, RT-Thread Development Team
+ * Copyright (c) 2006-2025, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -32,12 +32,12 @@ struct gd32_uart
rcu_periph_enum tx_gpio_clk;
rcu_periph_enum rx_gpio_clk;
uint32_t tx_port;
-#if defined SOC_SERIES_GD32F4xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32E23x
uint16_t tx_af;
#endif
uint16_t tx_pin;
uint32_t rx_port;
-#if defined SOC_SERIES_GD32F4xx
+#if defined SOC_SERIES_GD32F4xx || defined SOC_SERIES_GD32E23x
uint16_t rx_af;
#endif
uint16_t rx_pin;
@@ -63,3 +63,4 @@ int rt_hw_usart_init(void);
#endif
#endif /* __DRV_USART_V2_H__ */
+
diff --git a/bsp/gd32/arm/tools/sdk_dist.py b/bsp/gd32/arm/tools/sdk_dist.py
index d6f97a3835..1af1ed2dfb 100644
--- a/bsp/gd32/arm/tools/sdk_dist.py
+++ b/bsp/gd32/arm/tools/sdk_dist.py
@@ -27,8 +27,10 @@ def dist_do_building(BSP_ROOT, dist_dir):
print("=> copy gd32 bsp library")
library_dir = os.path.join(dist_dir, 'libraries')
library_path = os.path.join(os.path.dirname(BSP_ROOT), 'libraries')
- bsp_copy_files(os.path.join(library_path, rtconfig.BSP_LIBRARY_TYPE),
- os.path.join(library_dir, rtconfig.BSP_LIBRARY_TYPE))
+ # Only copy specific library when BSP_LIBRARY_TYPE is not None
+ if rtconfig.BSP_LIBRARY_TYPE is not None:
+ bsp_copy_files(os.path.join(library_path, rtconfig.BSP_LIBRARY_TYPE),
+ os.path.join(library_dir, rtconfig.BSP_LIBRARY_TYPE))
print("=> copy bsp drivers")
bsp_copy_files(os.path.join(library_path, 'gd32_drivers'), os.path.join(library_dir, 'gd32_drivers'))