From 0d929da6caaca258c74cffa2b97715be41119bf6 Mon Sep 17 00:00:00 2001 From: Ouxiaolong <1576690133@qq.com> Date: Sun, 16 Jan 2022 14:58:05 +0800 Subject: [PATCH] [bsp]gd32103c-eval,gd32105c-eval,gd32107c-eval,gd32303e-eval,gd32450z-eval --- .github/workflows/action.yml | 5 + bsp/gd32/README.md | 11 +- bsp/gd32/gd32103c-eval/.config | 636 ++++++++++++++ bsp/gd32/gd32103c-eval/Kconfig | 21 + bsp/gd32/gd32103c-eval/README.md | 94 +++ bsp/gd32/gd32103c-eval/SConscript | 15 + bsp/gd32/gd32103c-eval/SConstruct | 60 ++ .../gd32103c-eval/applications/SConscript | 11 + bsp/gd32/gd32103c-eval/applications/main.c | 35 + bsp/gd32/gd32103c-eval/board/Kconfig | 85 ++ bsp/gd32/gd32103c-eval/board/SConscript | 28 + bsp/gd32/gd32103c-eval/board/board.c | 85 ++ bsp/gd32/gd32103c-eval/board/board.h | 47 ++ .../gd32103c-eval/board/gd32f10x_libopt.h | 64 ++ .../board/linker_scripts/link.icf | 40 + .../board/linker_scripts/link.ld | 142 ++++ .../board/linker_scripts/link.sct | 15 + bsp/gd32/gd32103c-eval/project.uvoptx | 748 ++++++++++++++++ bsp/gd32/gd32103c-eval/project.uvproj | 737 ++++++++++++++++ bsp/gd32/gd32103c-eval/project.uvprojx | 668 +++++++++++++++ bsp/gd32/gd32103c-eval/rtconfig.h | 200 +++++ bsp/gd32/gd32103c-eval/rtconfig.py | 150 ++++ bsp/gd32/gd32103c-eval/template.uvoptx | 180 ++++ bsp/gd32/gd32103c-eval/template.uvproj | 628 ++++++++++++++ bsp/gd32/gd32103c-eval/template.uvprojx | 418 +++++++++ bsp/gd32/gd32105c-eval/.config | 636 ++++++++++++++ bsp/gd32/gd32105c-eval/Kconfig | 21 + bsp/gd32/gd32105c-eval/README.md | 98 +++ bsp/gd32/gd32105c-eval/SConscript | 15 + bsp/gd32/gd32105c-eval/SConstruct | 60 ++ .../gd32105c-eval/applications/SConscript | 11 + bsp/gd32/gd32105c-eval/applications/main.c | 35 + bsp/gd32/gd32105c-eval/board/Kconfig | 85 ++ bsp/gd32/gd32105c-eval/board/SConscript | 28 + bsp/gd32/gd32105c-eval/board/board.c | 85 ++ bsp/gd32/gd32105c-eval/board/board.h | 47 ++ .../gd32105c-eval/board/gd32f10x_libopt.h | 64 ++ .../board/linker_scripts/link.icf | 40 + .../board/linker_scripts/link.ld | 142 ++++ .../board/linker_scripts/link.sct | 15 + bsp/gd32/gd32105c-eval/figures/board.jpg | Bin 0 -> 169187 bytes bsp/gd32/gd32105c-eval/project.uvoptx | 180 ++++ bsp/gd32/gd32105c-eval/project.uvproj | 737 ++++++++++++++++ bsp/gd32/gd32105c-eval/project.uvprojx | 727 ++++++++++++++++ bsp/gd32/gd32105c-eval/rtconfig.h | 200 +++++ bsp/gd32/gd32105c-eval/rtconfig.py | 150 ++++ bsp/gd32/gd32105c-eval/template.uvoptx | 180 ++++ bsp/gd32/gd32105c-eval/template.uvproj | 628 ++++++++++++++ bsp/gd32/gd32105c-eval/template.uvprojx | 418 +++++++++ bsp/gd32/gd32107c-eval/.config | 670 +++++++++++++++ bsp/gd32/gd32107c-eval/Kconfig | 21 + bsp/gd32/gd32107c-eval/README.md | 98 +++ bsp/gd32/gd32107c-eval/SConscript | 15 + bsp/gd32/gd32107c-eval/SConstruct | 60 ++ .../gd32107c-eval/applications/SConscript | 11 + bsp/gd32/gd32107c-eval/applications/main.c | 35 + bsp/gd32/gd32107c-eval/board/Kconfig | 85 ++ bsp/gd32/gd32107c-eval/board/SConscript | 28 + bsp/gd32/gd32107c-eval/board/board.c | 85 ++ bsp/gd32/gd32107c-eval/board/board.h | 47 ++ .../gd32107c-eval/board/gd32f10x_libopt.h | 64 ++ .../board/linker_scripts/link.icf | 40 + .../board/linker_scripts/link.ld | 142 ++++ .../board/linker_scripts/link.sct | 15 + bsp/gd32/gd32107c-eval/figures/board.jpg | Bin 0 -> 128732 bytes bsp/gd32/gd32107c-eval/project.uvoptx | 796 ++++++++++++++++++ bsp/gd32/gd32107c-eval/project.uvproj | 777 +++++++++++++++++ bsp/gd32/gd32107c-eval/project.uvprojx | 757 +++++++++++++++++ bsp/gd32/gd32107c-eval/rtconfig.h | 212 +++++ bsp/gd32/gd32107c-eval/rtconfig.py | 150 ++++ bsp/gd32/gd32107c-eval/template.uvoptx | 180 ++++ bsp/gd32/gd32107c-eval/template.uvproj | 628 ++++++++++++++ bsp/gd32/gd32107c-eval/template.uvprojx | 418 +++++++++ bsp/gd32/gd32303e-eval/.config | 636 ++++++++++++++ bsp/gd32/gd32303e-eval/Kconfig | 21 + bsp/gd32/gd32303e-eval/README.md | 94 +++ bsp/gd32/gd32303e-eval/SConscript | 15 + bsp/gd32/gd32303e-eval/SConstruct | 60 ++ .../gd32303e-eval/applications/SConscript | 11 + bsp/gd32/gd32303e-eval/applications/main.c | 35 + bsp/gd32/gd32303e-eval/board/Kconfig | 85 ++ bsp/gd32/gd32303e-eval/board/SConscript | 28 + bsp/gd32/gd32303e-eval/board/board.c | 85 ++ bsp/gd32/gd32303e-eval/board/board.h | 47 ++ .../gd32303e-eval/board/gd32f30x_libopt.h | 65 ++ .../board/linker_scripts/link.icf | 40 + .../board/linker_scripts/link.ld | 142 ++++ .../board/linker_scripts/link.sct | 15 + bsp/gd32/gd32303e-eval/project.uvoptx | 748 ++++++++++++++++ bsp/gd32/gd32303e-eval/project.uvproj | 737 ++++++++++++++++ bsp/gd32/gd32303e-eval/project.uvprojx | 668 +++++++++++++++ bsp/gd32/gd32303e-eval/rtconfig.h | 200 +++++ bsp/gd32/gd32303e-eval/rtconfig.py | 150 ++++ bsp/gd32/gd32303e-eval/template.uvoptx | 180 ++++ bsp/gd32/gd32303e-eval/template.uvproj | 628 ++++++++++++++ bsp/gd32/gd32303e-eval/template.uvprojx | 418 +++++++++ bsp/gd32/gd32450z-eval/.config | 636 ++++++++++++++ bsp/gd32/gd32450z-eval/Kconfig | 21 + bsp/gd32/gd32450z-eval/README.md | 94 +++ bsp/gd32/gd32450z-eval/SConscript | 15 + bsp/gd32/gd32450z-eval/SConstruct | 60 ++ .../gd32450z-eval/applications/SConscript | 11 + bsp/gd32/gd32450z-eval/applications/main.c | 35 + bsp/gd32/gd32450z-eval/board/Kconfig | 85 ++ bsp/gd32/gd32450z-eval/board/SConscript | 28 + bsp/gd32/gd32450z-eval/board/board.c | 85 ++ bsp/gd32/gd32450z-eval/board/board.h | 47 ++ .../gd32450z-eval/board/gd32f4xx_libopt.h | 45 + .../board/linker_scripts/link.icf | 40 + .../board/linker_scripts/link.ld | 142 ++++ .../board/linker_scripts/link.sct | 15 + bsp/gd32/gd32450z-eval/project.uvoptx | 778 +++++++++++++++++ bsp/gd32/gd32450z-eval/project.uvproj | 747 ++++++++++++++++ bsp/gd32/gd32450z-eval/project.uvprojx | 677 +++++++++++++++ bsp/gd32/gd32450z-eval/rtconfig.h | 200 +++++ bsp/gd32/gd32450z-eval/rtconfig.py | 150 ++++ bsp/gd32/gd32450z-eval/template.uvoptx | 190 +++++ bsp/gd32/gd32450z-eval/template.uvproj | 628 ++++++++++++++ bsp/gd32/gd32450z-eval/template.uvprojx | 417 +++++++++ 119 files changed, 25310 insertions(+), 3 deletions(-) create mode 100644 bsp/gd32/gd32103c-eval/.config create mode 100644 bsp/gd32/gd32103c-eval/Kconfig create mode 100644 bsp/gd32/gd32103c-eval/README.md create mode 100644 bsp/gd32/gd32103c-eval/SConscript create mode 100644 bsp/gd32/gd32103c-eval/SConstruct create mode 100644 bsp/gd32/gd32103c-eval/applications/SConscript create mode 100644 bsp/gd32/gd32103c-eval/applications/main.c create mode 100644 bsp/gd32/gd32103c-eval/board/Kconfig create mode 100644 bsp/gd32/gd32103c-eval/board/SConscript create mode 100644 bsp/gd32/gd32103c-eval/board/board.c create mode 100644 bsp/gd32/gd32103c-eval/board/board.h create mode 100644 bsp/gd32/gd32103c-eval/board/gd32f10x_libopt.h create mode 100644 bsp/gd32/gd32103c-eval/board/linker_scripts/link.icf create mode 100644 bsp/gd32/gd32103c-eval/board/linker_scripts/link.ld create mode 100644 bsp/gd32/gd32103c-eval/board/linker_scripts/link.sct create mode 100644 bsp/gd32/gd32103c-eval/project.uvoptx create mode 100644 bsp/gd32/gd32103c-eval/project.uvproj create mode 100644 bsp/gd32/gd32103c-eval/project.uvprojx create mode 100644 bsp/gd32/gd32103c-eval/rtconfig.h create mode 100644 bsp/gd32/gd32103c-eval/rtconfig.py create mode 100644 bsp/gd32/gd32103c-eval/template.uvoptx create mode 100644 bsp/gd32/gd32103c-eval/template.uvproj create mode 100644 bsp/gd32/gd32103c-eval/template.uvprojx create mode 100644 bsp/gd32/gd32105c-eval/.config create mode 100644 bsp/gd32/gd32105c-eval/Kconfig create mode 100644 bsp/gd32/gd32105c-eval/README.md create mode 100644 bsp/gd32/gd32105c-eval/SConscript create mode 100644 bsp/gd32/gd32105c-eval/SConstruct create mode 100644 bsp/gd32/gd32105c-eval/applications/SConscript create mode 100644 bsp/gd32/gd32105c-eval/applications/main.c create mode 100644 bsp/gd32/gd32105c-eval/board/Kconfig create mode 100644 bsp/gd32/gd32105c-eval/board/SConscript create mode 100644 bsp/gd32/gd32105c-eval/board/board.c create mode 100644 bsp/gd32/gd32105c-eval/board/board.h create mode 100644 bsp/gd32/gd32105c-eval/board/gd32f10x_libopt.h create mode 100644 bsp/gd32/gd32105c-eval/board/linker_scripts/link.icf create mode 100644 bsp/gd32/gd32105c-eval/board/linker_scripts/link.ld create mode 100644 bsp/gd32/gd32105c-eval/board/linker_scripts/link.sct create mode 100644 bsp/gd32/gd32105c-eval/figures/board.jpg create mode 100644 bsp/gd32/gd32105c-eval/project.uvoptx create mode 100644 bsp/gd32/gd32105c-eval/project.uvproj create mode 100644 bsp/gd32/gd32105c-eval/project.uvprojx create mode 100644 bsp/gd32/gd32105c-eval/rtconfig.h create mode 100644 bsp/gd32/gd32105c-eval/rtconfig.py create mode 100644 bsp/gd32/gd32105c-eval/template.uvoptx create mode 100644 bsp/gd32/gd32105c-eval/template.uvproj create mode 100644 bsp/gd32/gd32105c-eval/template.uvprojx create mode 100644 bsp/gd32/gd32107c-eval/.config create mode 100644 bsp/gd32/gd32107c-eval/Kconfig create mode 100644 bsp/gd32/gd32107c-eval/README.md create mode 100644 bsp/gd32/gd32107c-eval/SConscript create mode 100644 bsp/gd32/gd32107c-eval/SConstruct create mode 100644 bsp/gd32/gd32107c-eval/applications/SConscript create mode 100644 bsp/gd32/gd32107c-eval/applications/main.c create mode 100644 bsp/gd32/gd32107c-eval/board/Kconfig create mode 100644 bsp/gd32/gd32107c-eval/board/SConscript create mode 100644 bsp/gd32/gd32107c-eval/board/board.c create mode 100644 bsp/gd32/gd32107c-eval/board/board.h create mode 100644 bsp/gd32/gd32107c-eval/board/gd32f10x_libopt.h create mode 100644 bsp/gd32/gd32107c-eval/board/linker_scripts/link.icf create mode 100644 bsp/gd32/gd32107c-eval/board/linker_scripts/link.ld create mode 100644 bsp/gd32/gd32107c-eval/board/linker_scripts/link.sct create mode 100644 bsp/gd32/gd32107c-eval/figures/board.jpg create mode 100644 bsp/gd32/gd32107c-eval/project.uvoptx create mode 100644 bsp/gd32/gd32107c-eval/project.uvproj create mode 100644 bsp/gd32/gd32107c-eval/project.uvprojx create mode 100644 bsp/gd32/gd32107c-eval/rtconfig.h create mode 100644 bsp/gd32/gd32107c-eval/rtconfig.py create mode 100644 bsp/gd32/gd32107c-eval/template.uvoptx create mode 100644 bsp/gd32/gd32107c-eval/template.uvproj create mode 100644 bsp/gd32/gd32107c-eval/template.uvprojx create mode 100644 bsp/gd32/gd32303e-eval/.config create mode 100644 bsp/gd32/gd32303e-eval/Kconfig create mode 100644 bsp/gd32/gd32303e-eval/README.md create mode 100644 bsp/gd32/gd32303e-eval/SConscript create mode 100644 bsp/gd32/gd32303e-eval/SConstruct create mode 100644 bsp/gd32/gd32303e-eval/applications/SConscript create mode 100644 bsp/gd32/gd32303e-eval/applications/main.c create mode 100644 bsp/gd32/gd32303e-eval/board/Kconfig create mode 100644 bsp/gd32/gd32303e-eval/board/SConscript create mode 100644 bsp/gd32/gd32303e-eval/board/board.c create mode 100644 bsp/gd32/gd32303e-eval/board/board.h create mode 100644 bsp/gd32/gd32303e-eval/board/gd32f30x_libopt.h create mode 100644 bsp/gd32/gd32303e-eval/board/linker_scripts/link.icf create mode 100644 bsp/gd32/gd32303e-eval/board/linker_scripts/link.ld create mode 100644 bsp/gd32/gd32303e-eval/board/linker_scripts/link.sct create mode 100644 bsp/gd32/gd32303e-eval/project.uvoptx create mode 100644 bsp/gd32/gd32303e-eval/project.uvproj create mode 100644 bsp/gd32/gd32303e-eval/project.uvprojx create mode 100644 bsp/gd32/gd32303e-eval/rtconfig.h create mode 100644 bsp/gd32/gd32303e-eval/rtconfig.py create mode 100644 bsp/gd32/gd32303e-eval/template.uvoptx create mode 100644 bsp/gd32/gd32303e-eval/template.uvproj create mode 100644 bsp/gd32/gd32303e-eval/template.uvprojx create mode 100644 bsp/gd32/gd32450z-eval/.config create mode 100644 bsp/gd32/gd32450z-eval/Kconfig create mode 100644 bsp/gd32/gd32450z-eval/README.md create mode 100644 bsp/gd32/gd32450z-eval/SConscript create mode 100644 bsp/gd32/gd32450z-eval/SConstruct create mode 100644 bsp/gd32/gd32450z-eval/applications/SConscript create mode 100644 bsp/gd32/gd32450z-eval/applications/main.c create mode 100644 bsp/gd32/gd32450z-eval/board/Kconfig create mode 100644 bsp/gd32/gd32450z-eval/board/SConscript create mode 100644 bsp/gd32/gd32450z-eval/board/board.c create mode 100644 bsp/gd32/gd32450z-eval/board/board.h create mode 100644 bsp/gd32/gd32450z-eval/board/gd32f4xx_libopt.h create mode 100644 bsp/gd32/gd32450z-eval/board/linker_scripts/link.icf create mode 100644 bsp/gd32/gd32450z-eval/board/linker_scripts/link.ld create mode 100644 bsp/gd32/gd32450z-eval/board/linker_scripts/link.sct create mode 100644 bsp/gd32/gd32450z-eval/project.uvoptx create mode 100644 bsp/gd32/gd32450z-eval/project.uvproj create mode 100644 bsp/gd32/gd32450z-eval/project.uvprojx create mode 100644 bsp/gd32/gd32450z-eval/rtconfig.h create mode 100644 bsp/gd32/gd32450z-eval/rtconfig.py create mode 100644 bsp/gd32/gd32450z-eval/template.uvoptx create mode 100644 bsp/gd32/gd32450z-eval/template.uvproj create mode 100644 bsp/gd32/gd32450z-eval/template.uvprojx diff --git a/.github/workflows/action.yml b/.github/workflows/action.yml index 082cd01807..91a3f88a1a 100644 --- a/.github/workflows/action.yml +++ b/.github/workflows/action.yml @@ -35,10 +35,15 @@ jobs: - {RTT_BSP: "asm9260t", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "at91sam9260", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "allwinner_tina", RTT_TOOL_CHAIN: "sourcery-arm"} + - {RTT_BSP: "gd32/gd32103c-eval", RTT_TOOL_CHAIN: "sourcery-arm"} + - {RTT_BSP: "gd32/gd32105c-eval", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "gd32/gd32105r-start", RTT_TOOL_CHAIN: "sourcery-arm"} + - {RTT_BSP: "gd32/gd32107c-eval", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "gd32/gd32205r-start", RTT_TOOL_CHAIN: "sourcery-arm"} + - {RTT_BSP: "gd32/gd32303e-eval", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "gd32/gd32305r-start", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "gd32/gd32407v-start", RTT_TOOL_CHAIN: "sourcery-arm"} + - {RTT_BSP: "gd32/gd32450z-eval", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "gd32e230k-start", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "gd32vf103v-eval", RTT_TOOL_CHAIN: "sourcery-riscv-none-embed"} - {RTT_BSP: "gd32303e-eval", RTT_TOOL_CHAIN: "sourcery-arm"} diff --git a/bsp/gd32/README.md b/bsp/gd32/README.md index fb706c2723..5937be20aa 100644 --- a/bsp/gd32/README.md +++ b/bsp/gd32/README.md @@ -6,13 +6,18 @@ GD32 系列 BSP 目前支持情况如下表所示: | **BSP 文件夹名称** | **开发板名称** | |:------------------------- |:-------------------------- | | **F1 系列** | | -| [gd32105r-start](gd32105r-start) | 兆易创新 官方 GD32105r-START 开发板 | +| [gd32103c-eval](gd32103c-eval) | 兆易创新 官方 GD32103C-EVAL 开发板 | +| [gd32105c-eval](gd32105c-eval) | 兆易创新 官方 GD32105C-EVAL 开发板 | +| [gd32105r-start](gd32105r-start) | 兆易创新 官方 GD32105R-START 开发板 | +| [gd32107c-eval](gd32107c-eval) | 兆易创新 官方 GD32107C-EVAL 开发板 | | **F2 系列** | | -| [gd32205r-start](gd32205r-start) | 兆易创新 官方 GD32205r-START 开发板 | +| [gd32205r-start](gd32205r-start) | 兆易创新 官方 GD32205R-START 开发板 | | **F3 系列** | | -| [gd32305r-start](gd32305r-start) | 兆易创新 官方 GD32305r-START 开发板 | +| [gd32303e-eval](gd32303e-eval) | 兆易创新 官方 GD32303E-EVAL 开发板 | +| [gd32305r-start](gd32305r-start) | 兆易创新 官方 GD32305R-START 开发板 | | **F4 系列** | | | [gd32407v-start](gd32407v-start) | 兆易创新 官方 GD32407V-START 开发板 | +| [gd32450z-eval](gd32450z-eval) | 兆易创新 官方 GD32450Z-EVAL 开发板 | 可以通过阅读相应 BSP 下的 README 来快速上手,如果想要使用 BSP 更多功能可参考 docs 文件夹下提供的说明文档,如下表所示: diff --git a/bsp/gd32/gd32103c-eval/.config b/bsp/gd32/gd32103c-eval/.config new file mode 100644 index 0000000000..2b86e3f13b --- /dev/null +++ b/bsp/gd32/gd32103c-eval/.config @@ -0,0 +1,636 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_BIG_ENDIAN is not set +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# 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_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 + +# +# kservice optimization +# +# CONFIG_RT_KSERVICE_USING_STDLIB is not set +# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set +# CONFIG_RT_USING_ASM_MEMCPY is not set +CONFIG_RT_DEBUG=y +CONFIG_RT_DEBUG_COLOR=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG 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_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +# CONFIG_RT_USING_MEMHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" +# CONFIG_RT_PRINTF_LONGLONG is not set +CONFIG_RT_VER_NUM=0x40004 +# CONFIG_RT_USING_CPU_FFS is not set +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_RT_USING_MSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +CONFIG_RT_USING_SYSTEM_WORKQUEUE=y +CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=2048 +CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_USING_SERIAL_V1=y +# CONFIG_RT_USING_SERIAL_V2 is not set +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER 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_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_PWM 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_HWCRYPTO is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB is not set +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +# CONFIG_RT_USING_LIBC is not set +CONFIG_RT_LIBC_USING_TIME=y +CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 +# CONFIG_RT_USING_PTHREADS is not set + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# Network interface device +# +# CONFIG_RT_USING_NETDEV is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS is not set + +# +# 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_RT_LINK is not set + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES is not set + +# +# 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_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LIBMODBUS is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_RW007 is not set +# 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_NIMBLE 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_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK 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_RAPIDJSON 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_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 + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_LIBSODIUM 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 + +# +# language packages +# +# 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 + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# 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 + +# +# PainterEngine: A cross-platform graphics application framework written in C language +# +# CONFIG_PKG_USING_PAINTERENGINE is not set +# CONFIG_PKG_USING_PAINTERENGINE_AUX is not set + +# +# 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_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_ULOG_FILE 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 + +# +# system packages +# + +# +# enhanced kernel services +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_VSNPRINTF_FULL 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 + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set + +# +# 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 +# CONFIG_RT_USING_ARDUINO is not set +# CONFIG_PKG_USING_GUIENGINE 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_FAL 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_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_WCWIDTH is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB is not set +# CONFIG_PKG_USING_USB_STACK is not set + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_SENSORS_DRIVERS is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 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_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_WM_LIBRARIES is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# CONFIG_PKG_USING_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_AD7746 is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_TOUCH_DRIVERS is not set +# CONFIG_PKG_USING_MAX17048 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_EMBARC_BSP 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_PAJ7620 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_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_STM32WB55_SDK 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_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_BL_MCU_SDK is not set +# CONFIG_PKG_USING_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set + +# +# 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 + +# +# miscellaneous packages +# + +# +# 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 + +# +# 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_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_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_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_DIGITALCTRL 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_VT100 is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_COWSAY is not set +# CONFIG_PKG_USING_TERMBOX is not set + +# +# Hardware Drivers Config +# +CONFIG_SOC_SERIES_GD32F10x=y +CONFIG_SOC_GD32103V=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_UART1_RX_USING_DMA is not set +# CONFIG_BSP_USING_SPI is not set +# CONFIG_BSP_USING_I2C1 is not set + +# +# Board extended module Drivers +# diff --git a/bsp/gd32/gd32103c-eval/Kconfig b/bsp/gd32/gd32103c-eval/Kconfig new file mode 100644 index 0000000000..8cbc7b71a8 --- /dev/null +++ b/bsp/gd32/gd32103c-eval/Kconfig @@ -0,0 +1,21 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "../../.." + +config PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +source "../libraries/Kconfig" +source "board/Kconfig" diff --git a/bsp/gd32/gd32103c-eval/README.md b/bsp/gd32/gd32103c-eval/README.md new file mode 100644 index 0000000000..bb7e51279b --- /dev/null +++ b/bsp/gd32/gd32103c-eval/README.md @@ -0,0 +1,94 @@ +# GD32103C-EVAL开发板BSP说明 + +## 简介 + +GD3103C-EVAL是-兆易创新推出的一款GD32F10X系列的评估板,最高主频高达108M,该开发板具有丰富的板载资源,可以充分发挥 GD32103VCT6的芯片性能。 + +该开发板常用 **板载资源** 如下: + +- GD32103VCT6,主频 108MHz,256KB FLASH ,48KB RAM + +- 常用外设 + + - LED :5个,LED1 (电源指示灯),LED2(PC0),LED3(PC2),LED4(PE0),LED5(PE1) + - 按键:3个,K1(用户按键,PA0),K2(用户按键,PC13),K3(用户按键,PB14) + +- 常用接口:USB 接口 + +- 调试接口:GD-LINK + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **片上外设** | **支持情况** | **备注** | +|:--------- |:--------:|:------------------------------------- | +| GPIO | 支持 | PA0, PA1... PK15 ---> PIN: 0, 1...144 | +| UART | 支持 | UART0 - UART7 | +| I2C | 支持 | I2C1 | +| SPI | 支持 | SPI0 - SPI2 | +| SPI FLASH | 支持 | | +| **扩展模块** | **支持情况** | **备注** | +| 暂无 | 暂不支持 | 暂不支持 | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + +### 快速上手 + +本 BSP 为开发者提供 MDK5 工程,并且支持 GCC 开发环境,也可使用RT-Thread Studio开发。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,使用USB转TTL模块连接PA2(MCU TX)和PA3(MCU RX),打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 GD-Link 仿真器下载程序,在通过 GD-Link 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,LED 闪烁。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.4 build Dec 19 2021 10:00:27 + 2006 - 2021 Copyright by rt-thread team +msh > +``` + +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口1的功能,如果需使用高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5` 命令重新生成工程。 + +## 注意事项 + +暂无 + +## 联系人信息 + +维护人: + +- [BruceOu](https://github.com/Ouxiaolong/), 邮箱: \ No newline at end of file diff --git a/bsp/gd32/gd32103c-eval/SConscript b/bsp/gd32/gd32103c-eval/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/gd32/gd32103c-eval/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/gd32103c-eval/SConstruct b/bsp/gd32/gd32103c-eval/SConstruct new file mode 100644 index 0000000000..49074397d0 --- /dev/null +++ b/bsp/gd32/gd32103c-eval/SConstruct @@ -0,0 +1,60 @@ +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) + +TARGET = 'rtthread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = 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 == 'iar': + env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rtthread.map') + +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) + +gd32_library = 'GD32F10x_Firmware_Library' +rtconfig.BSP_LIBRARY_TYPE = gd32_library + +# include libraries +objs.extend(SConscript(os.path.join(libraries_path_prefix, gd32_library, 'SConscript'))) + +# 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/gd32103c-eval/applications/SConscript b/bsp/gd32/gd32103c-eval/applications/SConscript new file mode 100644 index 0000000000..01eb940dfb --- /dev/null +++ b/bsp/gd32/gd32103c-eval/applications/SConscript @@ -0,0 +1,11 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = os.path.join(str(Dir('#')), 'applications') +src = Glob('*.c') +CPPPATH = [cwd, str(Dir('#'))] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/gd32/gd32103c-eval/applications/main.c b/bsp/gd32/gd32103c-eval/applications/main.c new file mode 100644 index 0000000000..d13b24ab50 --- /dev/null +++ b/bsp/gd32/gd32103c-eval/applications/main.c @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-12-18 BruceOu first implementation + */ + +#include +#include +#include +#include + +/* defined the LED2 pin: PC0 */ +#define LED2_PIN GET_PIN(C, 0) + +int main(void) +{ + int count = 1; + + /* set LED2 pin mode to output */ + rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(LED2_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED2_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + + return RT_EOK; +} diff --git a/bsp/gd32/gd32103c-eval/board/Kconfig b/bsp/gd32/gd32103c-eval/board/Kconfig new file mode 100644 index 0000000000..01d1240fce --- /dev/null +++ b/bsp/gd32/gd32103c-eval/board/Kconfig @@ -0,0 +1,85 @@ +menu "Hardware Drivers Config" + +config SOC_SERIES_GD32F10x + bool + default y + +config SOC_GD32103V + bool + select SOC_SERIES_GD32F10x + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +menu "Onboard Peripheral Drivers" + +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" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART1 + bool "Enable UART1" + default y + + config BSP_UART1_RX_USING_DMA + bool "Enable UART1 RX DMA" + depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA + default n + endif + + menuconfig BSP_USING_SPI + bool "Enable SPI BUS" + default n + select RT_USING_SPI + if BSP_USING_SPI + config BSP_USING_SPI1 + bool "Enable SPI1 BUS" + 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 + select BSP_SPI1_TX_USING_DMA + default n + 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 + source "../libraries/gd32_drivers/Kconfig" + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/gd32/gd32103c-eval/board/SConscript b/bsp/gd32/gd32103c-eval/board/SConscript new file mode 100644 index 0000000000..95b0a6e9ac --- /dev/null +++ b/bsp/gd32/gd32103c-eval/board/SConscript @@ -0,0 +1,28 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +''') + +path = [cwd] + +startup_path_prefix = SDK_LIB + +if rtconfig.CROSS_TOOL == 'gcc': + src += [startup_path_prefix + '/GD32F10x_Firmware_Library/CMSIS/GD/GD32F10x/Source/GCC/startup_gd32f10x_hd.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/GD32F10x_Firmware_Library/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_hd.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/GD32F10x_Firmware_Library/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_hd.s'] + +CPPDEFINES = ['GD32F10X_HD'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/gd32/gd32103c-eval/board/board.c b/bsp/gd32/gd32103c-eval/board/board.c new file mode 100644 index 0000000000..c409645b37 --- /dev/null +++ b/bsp/gd32/gd32103c-eval/board/board.c @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-12-18 BruceOu first implementation + */ +#include +#include +#include +#include + +/** + * @brief This function is executed in case of error occurrence. + * @param None + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler */ + /* User can add his own implementation to report the HAL error return state */ + while (1) + { + } + /* USER CODE END Error_Handler */ +} + +/** System Clock Configuration +*/ +void SystemClock_Config(void) +{ + SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND); + NVIC_SetPriority(SysTick_IRQn, 0); +} + +/** + * This is the timer interrupt service routine. + * + */ +void SysTick_Handler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + rt_tick_increase(); + + /* leave interrupt */ + rt_interrupt_leave(); +} + +/** + * This function will initial GD32 board. + */ +void rt_hw_board_init() +{ + /* NVIC Configuration */ +#define NVIC_VTOR_MASK 0x3FFFFF80 +#ifdef VECT_TAB_RAM + /* Set the Vector Table base location at 0x10000000 */ + SCB->VTOR = (0x10000000 & NVIC_VTOR_MASK); +#else /* VECT_TAB_FLASH */ + /* Set the Vector Table base location at 0x08000000 */ + SCB->VTOR = (0x08000000 & NVIC_VTOR_MASK); +#endif + + SystemClock_Config(); + +#ifdef RT_USING_COMPONENTS_INIT + rt_components_board_init(); +#endif + +#ifdef RT_USING_CONSOLE + rt_console_set_device(RT_CONSOLE_DEVICE_NAME); +#endif + +#ifdef BSP_USING_SDRAM + rt_system_heap_init((void *)EXT_SDRAM_BEGIN, (void *)EXT_SDRAM_END); +#else + rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); +#endif +} + +/*@}*/ diff --git a/bsp/gd32/gd32103c-eval/board/board.h b/bsp/gd32/gd32103c-eval/board/board.h new file mode 100644 index 0000000000..2eb804a9af --- /dev/null +++ b/bsp/gd32/gd32103c-eval/board/board.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-12-18 BruceOu first implementation + */ +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include "gd32f10x.h" +#include "drv_usart.h" +#include "drv_gpio.h" + +#include "gd32f10x_exti.h" + +#define EXT_SDRAM_BEGIN (0xC0000000U) /* the begining address of external SDRAM */ +#define EXT_SDRAM_END (EXT_SDRAM_BEGIN + (32U * 1024 * 1024)) /* the end address of external SDRAM */ + +// Internal SRAM memory size[Kbytes] <8-48> +// Default: 48 +#ifdef __ICCARM__ +// Use *.icf ram symbal, to avoid hardcode. +extern char __ICFEDIT_region_RAM_end__; +#define GD32_SRAM_END &__ICFEDIT_region_RAM_end__ +#else +#define GD32_SRAM_SIZE 48 +#define GD32_SRAM_END (0x20000000 + GD32_SRAM_SIZE * 1024) +#endif + +#ifdef __CC_ARM +extern int Image$$RW_IRAM1$$ZI$$Limit; +#define HEAP_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit) +#elif __ICCARM__ +#pragma section="HEAP" +#define HEAP_BEGIN (__segment_end("HEAP")) +#else +extern int __bss_end; +#define HEAP_BEGIN (&__bss_end) +#endif + +#define HEAP_END GD32_SRAM_END + +#endif + diff --git a/bsp/gd32/gd32103c-eval/board/gd32f10x_libopt.h b/bsp/gd32/gd32103c-eval/board/gd32f10x_libopt.h new file mode 100644 index 0000000000..5292c8eca7 --- /dev/null +++ b/bsp/gd32/gd32103c-eval/board/gd32f10x_libopt.h @@ -0,0 +1,64 @@ +/*! + \file gd32f10x_libopt.h + \brief library optional for gd32f10x + + \version 2014-12-26, V1.0.0, demo for GD32F10x + \version 2017-06-30, V2.0.0, demo for GD32F10x + \version 2021-04-30, V2.1.0, demo for GD32F10x +*/ + +/* + Copyright (c) 2021, 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 GD32F10X_LIBOPT_H +#define GD32F10X_LIBOPT_H + +#include "gd32f10x_fmc.h" +#include "gd32f10x_pmu.h" +#include "gd32f10x_bkp.h" +#include "gd32f10x_rcu.h" +#include "gd32f10x_exti.h" +#include "gd32f10x_gpio.h" +#include "gd32f10x_crc.h" +#include "gd32f10x_dma.h" +#include "gd32f10x_dbg.h" +#include "gd32f10x_adc.h" +#include "gd32f10x_dac.h" +#include "gd32f10x_fwdgt.h" +#include "gd32f10x_wwdgt.h" +#include "gd32f10x_rtc.h" +#include "gd32f10x_timer.h" +#include "gd32f10x_usart.h" +#include "gd32f10x_i2c.h" +#include "gd32f10x_spi.h" +#include "gd32f10x_sdio.h" +#include "gd32f10x_exmc.h" +#include "gd32f10x_can.h" +#include "gd32f10x_enet.h" +#include "gd32f10x_misc.h" + +#endif /* GD32F10X_LIBOPT_H */ diff --git a/bsp/gd32/gd32103c-eval/board/linker_scripts/link.icf b/bsp/gd32/gd32103c-eval/board/linker_scripts/link.icf new file mode 100644 index 0000000000..c1b7bfa182 --- /dev/null +++ b/bsp/gd32/gd32103c-eval/board/linker_scripts/link.icf @@ -0,0 +1,40 @@ +/*###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-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x0803FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000BFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x200; +define symbol __ICFEDIT_size_heap__ = 0x200; +/**** End of ICF editor section. ###ICF###*/ + +export symbol __ICFEDIT_region_RAM_end__; + +define symbol __region_RAM1_start__ = 0x10000000; +define symbol __region_RAM1_end__ = 0x1000FFFF; + +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__]; +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 { 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 }; +place in RAM1_region { section .sram }; \ No newline at end of file diff --git a/bsp/gd32/gd32103c-eval/board/linker_scripts/link.ld b/bsp/gd32/gd32103c-eval/board/linker_scripts/link.ld new file mode 100644 index 0000000000..7bacb5ab4a --- /dev/null +++ b/bsp/gd32/gd32103c-eval/board/linker_scripts/link.ld @@ -0,0 +1,142 @@ +/* + * linker script for GD32F30x with GNU ld + * BruceOu 2021-12-18 + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + CODE (rx) : ORIGIN = 0x08000000, LENGTH = 256k /* 256KB flash */ + DATA (rw) : ORIGIN = 0x20000000, LENGTH = 48k /* 48KB sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +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 = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > CODE + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >DATA + + .stack : + { + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >DATA + + __bss_start = .; + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + + *(.bss.init) + } > DATA + __bss_end = .; + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/gd32/gd32103c-eval/board/linker_scripts/link.sct b/bsp/gd32/gd32103c-eval/board/linker_scripts/link.sct new file mode 100644 index 0000000000..99f1f72a75 --- /dev/null +++ b/bsp/gd32/gd32103c-eval/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00040000 { ; load region size_region + ER_IROM1 0x08000000 0x00040000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x0000C000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/gd32/gd32103c-eval/project.uvoptx b/bsp/gd32/gd32103c-eval/project.uvoptx new file mode 100644 index 0000000000..3cd7319e9d --- /dev/null +++ b/bsp/gd32/gd32103c-eval/project.uvoptx @@ -0,0 +1,748 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0GD32F10x_CL -FL040000 -FS08000000 -FP0($$Device:GD32F105RC$Flash\GD32F10x_CL.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Applications + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + CPU + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 2 + 5 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + context_rvds.S + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + cpuport.c + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 4 + 16 + 2 + 0 + 0 + 0 + ..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Source\ARM\startup_gd32f10x_hd.s + startup_gd32f10x_hd.s + 0 + 0 + + + 4 + 17 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 4 + 18 + 1 + 0 + 0 + 0 + ..\libraries\gd32_drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 4 + 19 + 1 + 0 + 0 + 0 + ..\libraries\gd32_drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + + + Finsh + 0 + 0 + 0 + 0 + + 5 + 20 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 5 + 21 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 5 + 22 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 6 + 23 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 6 + 24 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 6 + 25 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 6 + 26 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 6 + 27 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 6 + 28 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 6 + 29 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 6 + 30 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + 6 + 31 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 6 + 32 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 6 + 33 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 6 + 34 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 6 + 35 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + + + libc + 0 + 0 + 0 + 0 + + 7 + 36 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\time.c + time.c + 0 + 0 + + + + + Libraries + 0 + 0 + 0 + 0 + + 8 + 37 + 1 + 0 + 0 + 0 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_exti.c + gd32f10x_exti.c + 0 + 0 + + + 8 + 38 + 1 + 0 + 0 + 0 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_gpio.c + gd32f10x_gpio.c + 0 + 0 + + + 8 + 39 + 1 + 0 + 0 + 0 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_misc.c + gd32f10x_misc.c + 0 + 0 + + + 8 + 40 + 1 + 0 + 0 + 0 + ..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Source\system_gd32f10x.c + system_gd32f10x.c + 0 + 0 + + + 8 + 41 + 1 + 0 + 0 + 0 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_rcu.c + gd32f10x_rcu.c + 0 + 0 + + + 8 + 42 + 1 + 0 + 0 + 0 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_usart.c + gd32f10x_usart.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/gd32/gd32103c-eval/project.uvproj b/bsp/gd32/gd32103c-eval/project.uvproj new file mode 100644 index 0000000000..a9b71eca4c --- /dev/null +++ b/bsp/gd32/gd32103c-eval/project.uvproj @@ -0,0 +1,737 @@ + + + 1.1 +
### uVision Project, (C) Keil Software
+ + + rt-thread + 0x4 + ARM-ADS + 0 + + + GD32F103VC + GigaDevice + IRAM(0x20000000-0x20018000) IROM(0x08000000-0x08040000) CLOCK(10800000) CPUTYPE("Cortex-M3") + + "Startup\GD\GD32F10x\startup_gd32f10x.s" ("GD32F10x Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0GD32F10x_3MB -FS08000000 -FL0100000) + 0 + gd32f10x0.h + + + + + + + + + + SFD\GD\GD32F10x\GD32F10x.SFR + 0 + 0 + + + + GD\GD32F10x\ + GD\GD32F10x\ + + 0 + 0 + 0 + 0 + 1 + + .\output\ + rtthread + 1 + 0 + 1 + 1 + 1 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 3 + + + + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + GD32F10X_HD, USE_STDPERIPH_DRIVER, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND + + applications;.;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m3;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;..\libraries\gd32_drivers;..\..\..\components\finsh;.;..\..\..\include;..\..\..\components\libc\compilers\common;..\..\..\components\libc\compilers\common\nogcc;..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Include;..\libraries\GD32F10x_Firmware_Library\CMSIS;..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Include;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\posix\ipc;..\..\..\examples\utest\testcases\kernel + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + CPU + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + + + Drivers + + + startup_gd32f10x_hd.s + 2 + ..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Source\ARM\startup_gd32f10x_hd.s + + + + + board.c + 1 + board\board.c + + + + + drv_gpio.c + 1 + ..\libraries\gd32_drivers\drv_gpio.c + + + + + drv_usart.c + 1 + ..\libraries\gd32_drivers\drv_usart.c + + + + + Finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + Kernel + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + + + clock.c + 1 + ..\..\..\src\clock.c + + + + + object.c + 1 + ..\..\..\src\object.c + + + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + + + device.c + 1 + ..\..\..\src\device.c + + + + + components.c + 1 + ..\..\..\src\components.c + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + + + libc + + + time.c + 1 + ..\..\..\components\libc\compilers\common\time.c + + + + + Libraries + + + gd32f10x_exti.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_exti.c + + + + + gd32f10x_gpio.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_gpio.c + + + + + gd32f10x_misc.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_misc.c + + + + + system_gd32f10x.c + 1 + ..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Source\system_gd32f10x.c + + + + + gd32f10x_rcu.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_rcu.c + + + + + gd32f10x_usart.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_usart.c + + + + + + +
diff --git a/bsp/gd32/gd32103c-eval/project.uvprojx b/bsp/gd32/gd32103c-eval/project.uvprojx new file mode 100644 index 0000000000..297c9fc433 --- /dev/null +++ b/bsp/gd32/gd32103c-eval/project.uvprojx @@ -0,0 +1,668 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + GD32F103VC + GigaDevice + GigaDevice.GD32F10x_DFP.2.0.1 + http://www.keil.com/pack/ + IRAM(0x20000000,0x0000C000) IROM(0x08000000,0x00040000) CPUTYPE("Cortex-M3") CLOCK(10800000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F10x_CL -FS08000000 -FL040000 -FP0($$Device:GD32F103VC$Flash\GD32F10x_CL.FLM)) + 0 + $$Device:GD32F103VC$Device\Include\gd32f10x.h + + + + + + + + + + $$Device:GD32F103VC$SVD\GD32F10x\GD32F10x_CL.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\ + rtthread + 1 + 0 + 0 + 1 + 0 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0xc000 + + + 1 + 0x8000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x18000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + GD32F10X_HD, USE_STDPERIPH_DRIVER, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND + + applications;.;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m3;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;..\libraries\gd32_drivers;..\..\..\components\finsh;.;..\..\..\include;..\..\..\components\libc\compilers\common;..\..\..\components\libc\compilers\common\nogcc;..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Include;..\libraries\GD32F10x_Firmware_Library\CMSIS;..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Include;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\posix\ipc;..\..\..\examples\utest\testcases\kernel + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\gd32_rom.ld + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + CPU + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + + + Drivers + + + startup_gd32f10x_hd.s + 2 + ..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Source\ARM\startup_gd32f10x_hd.s + + + board.c + 1 + board\board.c + + + drv_gpio.c + 1 + ..\libraries\gd32_drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\gd32_drivers\drv_usart.c + + + + + Finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + components.c + 1 + ..\..\..\src\components.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + idle.c + 1 + ..\..\..\src\idle.c + + + device.c + 1 + ..\..\..\src\device.c + + + timer.c + 1 + ..\..\..\src\timer.c + + + object.c + 1 + ..\..\..\src\object.c + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + mem.c + 1 + ..\..\..\src\mem.c + + + irq.c + 1 + ..\..\..\src\irq.c + + + thread.c + 1 + ..\..\..\src\thread.c + + + + + libc + + + time.c + 1 + ..\..\..\components\libc\compilers\common\time.c + + + + + Libraries + + + gd32f10x_exti.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_exti.c + + + gd32f10x_gpio.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_gpio.c + + + gd32f10x_misc.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_misc.c + + + system_gd32f10x.c + 1 + ..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Source\system_gd32f10x.c + + + gd32f10x_rcu.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_rcu.c + + + gd32f10x_usart.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_usart.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/bsp/gd32/gd32103c-eval/rtconfig.h b/bsp/gd32/gd32103c-eval/rtconfig.h new file mode 100644 index 0000000000..c461a768e1 --- /dev/null +++ b/bsp/gd32/gd32103c-eval/rtconfig.h @@ -0,0 +1,200 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Configuration */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_ALIGN_SIZE 4 +#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_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 + +/* kservice optimization */ + +#define RT_DEBUG +#define RT_DEBUG_COLOR + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart1" +#define RT_VER_NUM 0x40004 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 + +/* C++ features */ + + +/* Command shell */ + +#define RT_USING_FINSH +#define RT_USING_MSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SYSTEM_WORKQUEUE +#define RT_SYSTEM_WORKQUEUE_STACKSIZE 2048 +#define RT_SYSTEM_WORKQUEUE_PRIORITY 23 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN + +/* Using USB */ + + +/* POSIX layer and C standard library */ + +#define RT_LIBC_USING_TIME +#define RT_LIBC_DEFAULT_TIMEZONE 8 + +/* Network */ + +/* Socket abstraction layer */ + + +/* Network interface device */ + + +/* light weight TCP/IP stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* RT-Thread Utestcases */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + + +/* u8g2: a monochrome graphic library */ + + +/* PainterEngine: A cross-platform graphics application framework written in C language */ + + +/* tools packages */ + + +/* system packages */ + +/* enhanced kernel services */ + + +/* acceleration: Assembly language or algorithmic acceleration packages */ + + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + + +/* Micrium: Micrium software products porting for RT-Thread */ + + +/* peripheral libraries and drivers */ + + +/* AI packages */ + + +/* miscellaneous packages */ + +/* samples: kernel and components samples */ + + +/* entertainment: terminal games and other interesting software packages */ + + +/* Hardware Drivers Config */ + +#define SOC_SERIES_GD32F10x +#define SOC_GD32103V + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART1 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/gd32/gd32103c-eval/rtconfig.py b/bsp/gd32/gd32103c-eval/rtconfig.py new file mode 100644 index 0000000000..4285e6b03c --- /dev/null +++ b/bsp/gd32/gd32103c-eval/rtconfig.py @@ -0,0 +1,150 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m3' +CROSS_TOOL='keil' + +# 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'C:\Users\XXYYZZ' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iar' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +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-m3 -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-M3.fp ' + 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 == 'iar': + # 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-M3' + CFLAGS += ' -e' + CFLAGS += ' --fpu=None' + 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-M3' + AFLAGS += ' --fpu None' + 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/gd32103c-eval/template.uvoptx b/bsp/gd32/gd32103c-eval/template.uvoptx new file mode 100644 index 0000000000..e99a756fe7 --- /dev/null +++ b/bsp/gd32/gd32103c-eval/template.uvoptx @@ -0,0 +1,180 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0GD32F10x_CL -FL040000 -FS08000000 -FP0($$Device:GD32F105RC$Flash\GD32F10x_CL.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/gd32/gd32103c-eval/template.uvproj b/bsp/gd32/gd32103c-eval/template.uvproj new file mode 100644 index 0000000000..33458e05f7 --- /dev/null +++ b/bsp/gd32/gd32103c-eval/template.uvproj @@ -0,0 +1,628 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 0 + + + GD32F103VC + GigaDevice + IRAM(0x20000000-0x20018000) IROM(0x08000000-0x08040000) CLOCK(10800000) CPUTYPE("Cortex-M3") + + "Startup\GD\GD32F10x\startup_gd32f10x.s" ("GD32F10x Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0GD32F10x_3MB -FS08000000 -FL0100000) + 0 + gd32f10x0.h + + + + + + + + + + SFD\GD\GD32F10x\GD32F10x.SFR + 0 + 0 + + + + GD\GD32F10x\ + GD\GD32F10x\ + + 0 + 0 + 0 + 0 + 1 + + .\output\ + rtthread + 1 + 0 + 1 + 1 + 1 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 3 + + + + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Include;..\..\..\Library\Firmware\CMSIS\GD\GD32F10x\Include;..\..\..\Library\Utilities;..\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Application + + + main.c + 1 + ..\main.c + + + gd32f10x_it.c + 1 + ..\gd32f10x_it.c + + + + + CMSIS + + + system_gd32f10x.c + 1 + ..\..\..\Library\Firmware\CMSIS\GD\GD32F10x\Source\system_gd32f10x.c + + + + + GD32F10x_Peripherals + + + gd32f10x_adc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_adc.c + + + gd32f10x_can.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_can.c + + + gd32f10x_crc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_crc.c + + + gd32f10x_ctc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_ctc.c + + + gd32f10x_dac.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_dac.c + + + gd32f10x_dbg.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_dbg.c + + + gd32f10x_dci.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_dci.c + + + gd32f10x_dma.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_dma.c + + + gd32f10x_enet.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_enet.c + + + gd32f10x_exmc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_exmc.c + + + gd32f10x_exti.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_exti.c + + + gd32f10x_fmc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_fmc.c + + + gd32f10x_fwdgt.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_fwdgt.c + + + gd32f10x_gpio.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_gpio.c + + + gd32f10x_i2c.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_i2c.c + + + gd32f10x_ipa.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_ipa.c + + + gd32f10x_iref.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_iref.c + + + gd32f10x_misc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_misc.c + + + gd32f10x_pmu.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_pmu.c + + + gd32f10x_rcu.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_rcu.c + + + gd32f10x_rtc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_rtc.c + + + gd32f10x_sdio.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_sdio.c + + + gd32f10x_spi.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_spi.c + + + gd32f10x_syscfg.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_syscfg.c + + + gd32f10x_timer.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_timer.c + + + gd32f10x_tli.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_tli.c + + + gd32f10x_trng.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_trng.c + + + gd32f10x_usart.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_usart.c + + + gd32f10x_wwdgt.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_wwdgt.c + + + + + GD32F10x_EVAL + + + gd32f103c_eval.c + 1 + ..\..\..\Library\Utilities\gd32f103c_eval.c + + + + + Startup + + + startup_gd32f10x.s + 2 + ..\..\..\Library\Firmware\CMSIS\GD\GD32F10x\Source\ARM\startup_gd32f10x.s + + + + + Doc + + + readme.txt + 5 + ..\readme.txt + + + + + + + +
diff --git a/bsp/gd32/gd32103c-eval/template.uvprojx b/bsp/gd32/gd32103c-eval/template.uvprojx new file mode 100644 index 0000000000..efc072e87e --- /dev/null +++ b/bsp/gd32/gd32103c-eval/template.uvprojx @@ -0,0 +1,418 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + GD32F103VC + GigaDevice + GigaDevice.GD32F10x_DFP.2.0.1 + http://www.keil.com/pack/ + IRAM(0x20000000,0x0000C000) IROM(0x08000000,0x00040000) CPUTYPE("Cortex-M3") CLOCK(10800000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F10x_CL -FS08000000 -FL040000 -FP0($$Device:GD32F103VC$Flash\GD32F10x_CL.FLM)) + 0 + $$Device:GD32F103VC$Device\Include\gd32f10x.h + + + + + + + + + + $$Device:GD32F103VC$SVD\GD32F10x\GD32F10x_CL.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\ + rtthread + 1 + 0 + 0 + 1 + 0 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0xc000 + + + 1 + 0x8000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x18000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\gd32_rom.ld + + + + + + + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/bsp/gd32/gd32105c-eval/.config b/bsp/gd32/gd32105c-eval/.config new file mode 100644 index 0000000000..84090ac74e --- /dev/null +++ b/bsp/gd32/gd32105c-eval/.config @@ -0,0 +1,636 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_BIG_ENDIAN is not set +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# 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_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 + +# +# kservice optimization +# +# CONFIG_RT_KSERVICE_USING_STDLIB is not set +# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set +# CONFIG_RT_USING_ASM_MEMCPY is not set +CONFIG_RT_DEBUG=y +CONFIG_RT_DEBUG_COLOR=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG 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_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +# CONFIG_RT_USING_MEMHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" +# CONFIG_RT_PRINTF_LONGLONG is not set +CONFIG_RT_VER_NUM=0x40004 +# CONFIG_RT_USING_CPU_FFS is not set +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_RT_USING_MSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +CONFIG_RT_USING_SYSTEM_WORKQUEUE=y +CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=2048 +CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_USING_SERIAL_V1=y +# CONFIG_RT_USING_SERIAL_V2 is not set +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER 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_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_PWM 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_HWCRYPTO is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB is not set +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +# CONFIG_RT_USING_LIBC is not set +CONFIG_RT_LIBC_USING_TIME=y +CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 +# CONFIG_RT_USING_PTHREADS is not set + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# Network interface device +# +# CONFIG_RT_USING_NETDEV is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS is not set + +# +# 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_RT_LINK is not set + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES is not set + +# +# 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_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LIBMODBUS is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_RW007 is not set +# 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_NIMBLE 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_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK 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_RAPIDJSON 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_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 + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_LIBSODIUM 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 + +# +# language packages +# +# 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 + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# 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 + +# +# PainterEngine: A cross-platform graphics application framework written in C language +# +# CONFIG_PKG_USING_PAINTERENGINE is not set +# CONFIG_PKG_USING_PAINTERENGINE_AUX is not set + +# +# 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_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_ULOG_FILE 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 + +# +# system packages +# + +# +# enhanced kernel services +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_VSNPRINTF_FULL 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 + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set + +# +# 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 +# CONFIG_RT_USING_ARDUINO is not set +# CONFIG_PKG_USING_GUIENGINE 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_FAL 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_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_WCWIDTH is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB is not set +# CONFIG_PKG_USING_USB_STACK is not set + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_SENSORS_DRIVERS is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 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_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_WM_LIBRARIES is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# CONFIG_PKG_USING_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_AD7746 is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_TOUCH_DRIVERS is not set +# CONFIG_PKG_USING_MAX17048 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_EMBARC_BSP 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_PAJ7620 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_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_STM32WB55_SDK 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_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_BL_MCU_SDK is not set +# CONFIG_PKG_USING_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set + +# +# 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 + +# +# miscellaneous packages +# + +# +# 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 + +# +# 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_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_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_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_DIGITALCTRL 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_VT100 is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_COWSAY is not set +# CONFIG_PKG_USING_TERMBOX is not set + +# +# Hardware Drivers Config +# +CONFIG_SOC_SERIES_GD32F10x=y +CONFIG_SOC_GD32105V=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_UART1_RX_USING_DMA is not set +# CONFIG_BSP_USING_SPI is not set +# CONFIG_BSP_USING_I2C1 is not set + +# +# Board extended module Drivers +# diff --git a/bsp/gd32/gd32105c-eval/Kconfig b/bsp/gd32/gd32105c-eval/Kconfig new file mode 100644 index 0000000000..8cbc7b71a8 --- /dev/null +++ b/bsp/gd32/gd32105c-eval/Kconfig @@ -0,0 +1,21 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "../../.." + +config PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +source "../libraries/Kconfig" +source "board/Kconfig" diff --git a/bsp/gd32/gd32105c-eval/README.md b/bsp/gd32/gd32105c-eval/README.md new file mode 100644 index 0000000000..623501ef26 --- /dev/null +++ b/bsp/gd32/gd32105c-eval/README.md @@ -0,0 +1,98 @@ +# GD32105C-EVAL开发板BSP说明 + +## 简介 + +GD3105C-EVAL是-兆易创新推出的一款GD32F10X系列的评估板,最高主频高达108M,该开发板具有丰富的板载资源,可以充分发挥 GD32105VCT6 的芯片性能。 + +开发板外观如下图所示: + +![board](figures/board.jpg) + +该开发板常用 **板载资源** 如下: + +- GD32105VCT6,主频 108MHz,256KB FLASH ,96KB RAM + +- 常用外设 + + - LED :5个,LED1 (电源指示灯),LED2(PC0),LED3(PC2),LED4(PE0),LED5(PE1) + - 按键:3个,K1(用户按键,PA0),K2(用户按键,PC13),K3(用户按键,PB14) + +- 常用接口:USB 接口 + +- 调试接口:GD-LINK + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **片上外设** | **支持情况** | **备注** | +|:--------- |:--------:|:------------------------------------- | +| GPIO | 支持 | PA0, PA1... PK15 ---> PIN: 0, 1...144 | +| UART | 支持 | UART0 - UART7 | +| I2C | 支持 | I2C1 | +| SPI | 支持 | SPI0 - SPI2 | +| SPI FLASH | 支持 | | +| **扩展模块** | **支持情况** | **备注** | +| 暂无 | 暂不支持 | 暂不支持 | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + +### 快速上手 + +本 BSP 为开发者提供 MDK5 工程,并且支持 GCC 开发环境,也可使用RT-Thread Studio开发。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,使用USB转TTL模块连接PA2(MCU TX)和PA3(MCU RX),打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 GD-Link 仿真器下载程序,在通过 GD-Link 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,LED 闪烁。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.4 build Dec 19 2021 10:00:27 + 2006 - 2021 Copyright by rt-thread team +msh > +``` + +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口1的功能,如果需使用高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5` 命令重新生成工程。 + +## 注意事项 + +暂无 + +## 联系人信息 + +维护人: + +- [BruceOu](https://github.com/Ouxiaolong/), 邮箱: \ No newline at end of file diff --git a/bsp/gd32/gd32105c-eval/SConscript b/bsp/gd32/gd32105c-eval/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/gd32/gd32105c-eval/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/gd32105c-eval/SConstruct b/bsp/gd32/gd32105c-eval/SConstruct new file mode 100644 index 0000000000..49074397d0 --- /dev/null +++ b/bsp/gd32/gd32105c-eval/SConstruct @@ -0,0 +1,60 @@ +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) + +TARGET = 'rtthread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = 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 == 'iar': + env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rtthread.map') + +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) + +gd32_library = 'GD32F10x_Firmware_Library' +rtconfig.BSP_LIBRARY_TYPE = gd32_library + +# include libraries +objs.extend(SConscript(os.path.join(libraries_path_prefix, gd32_library, 'SConscript'))) + +# 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/gd32105c-eval/applications/SConscript b/bsp/gd32/gd32105c-eval/applications/SConscript new file mode 100644 index 0000000000..01eb940dfb --- /dev/null +++ b/bsp/gd32/gd32105c-eval/applications/SConscript @@ -0,0 +1,11 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = os.path.join(str(Dir('#')), 'applications') +src = Glob('*.c') +CPPPATH = [cwd, str(Dir('#'))] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/gd32/gd32105c-eval/applications/main.c b/bsp/gd32/gd32105c-eval/applications/main.c new file mode 100644 index 0000000000..4a528128b4 --- /dev/null +++ b/bsp/gd32/gd32105c-eval/applications/main.c @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-08-20 BruceOu first implementation + */ + +#include +#include +#include +#include + +/* defined the LED2 pin: PC6 */ +#define LED2_PIN GET_PIN(C, 6) + +int main(void) +{ + int count = 1; + + /* set LED2 pin mode to output */ + rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(LED2_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED2_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + + return RT_EOK; +} diff --git a/bsp/gd32/gd32105c-eval/board/Kconfig b/bsp/gd32/gd32105c-eval/board/Kconfig new file mode 100644 index 0000000000..72f7f9634a --- /dev/null +++ b/bsp/gd32/gd32105c-eval/board/Kconfig @@ -0,0 +1,85 @@ +menu "Hardware Drivers Config" + +config SOC_SERIES_GD32F10x + bool + default y + +config SOC_GD32105V + bool + select SOC_SERIES_GD32F10x + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +menu "Onboard Peripheral Drivers" + +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" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART1 + bool "Enable UART1" + default y + + config BSP_UART1_RX_USING_DMA + bool "Enable UART1 RX DMA" + depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA + default n + endif + + menuconfig BSP_USING_SPI + bool "Enable SPI BUS" + default n + select RT_USING_SPI + if BSP_USING_SPI + config BSP_USING_SPI1 + bool "Enable SPI1 BUS" + 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 + select BSP_SPI1_TX_USING_DMA + default n + 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 + source "../libraries/gd32_drivers/Kconfig" + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/gd32/gd32105c-eval/board/SConscript b/bsp/gd32/gd32105c-eval/board/SConscript new file mode 100644 index 0000000000..c1f4a6001b --- /dev/null +++ b/bsp/gd32/gd32105c-eval/board/SConscript @@ -0,0 +1,28 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +''') + +path = [cwd] + +startup_path_prefix = SDK_LIB + +if rtconfig.CROSS_TOOL == 'gcc': + src += [startup_path_prefix + '/GD32F10x_Firmware_Library/CMSIS/GD/GD32F10x/Source/GCC/startup_gd32f10x_cl.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/GD32F10x_Firmware_Library/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_cl.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/GD32F10x_Firmware_Library/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_cl.s'] + +CPPDEFINES = ['GD32F10X_CL'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/gd32/gd32105c-eval/board/board.c b/bsp/gd32/gd32105c-eval/board/board.c new file mode 100644 index 0000000000..c409645b37 --- /dev/null +++ b/bsp/gd32/gd32105c-eval/board/board.c @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-12-18 BruceOu first implementation + */ +#include +#include +#include +#include + +/** + * @brief This function is executed in case of error occurrence. + * @param None + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler */ + /* User can add his own implementation to report the HAL error return state */ + while (1) + { + } + /* USER CODE END Error_Handler */ +} + +/** System Clock Configuration +*/ +void SystemClock_Config(void) +{ + SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND); + NVIC_SetPriority(SysTick_IRQn, 0); +} + +/** + * This is the timer interrupt service routine. + * + */ +void SysTick_Handler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + rt_tick_increase(); + + /* leave interrupt */ + rt_interrupt_leave(); +} + +/** + * This function will initial GD32 board. + */ +void rt_hw_board_init() +{ + /* NVIC Configuration */ +#define NVIC_VTOR_MASK 0x3FFFFF80 +#ifdef VECT_TAB_RAM + /* Set the Vector Table base location at 0x10000000 */ + SCB->VTOR = (0x10000000 & NVIC_VTOR_MASK); +#else /* VECT_TAB_FLASH */ + /* Set the Vector Table base location at 0x08000000 */ + SCB->VTOR = (0x08000000 & NVIC_VTOR_MASK); +#endif + + SystemClock_Config(); + +#ifdef RT_USING_COMPONENTS_INIT + rt_components_board_init(); +#endif + +#ifdef RT_USING_CONSOLE + rt_console_set_device(RT_CONSOLE_DEVICE_NAME); +#endif + +#ifdef BSP_USING_SDRAM + rt_system_heap_init((void *)EXT_SDRAM_BEGIN, (void *)EXT_SDRAM_END); +#else + rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); +#endif +} + +/*@}*/ diff --git a/bsp/gd32/gd32105c-eval/board/board.h b/bsp/gd32/gd32105c-eval/board/board.h new file mode 100644 index 0000000000..11fb4fa084 --- /dev/null +++ b/bsp/gd32/gd32105c-eval/board/board.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-12-18 BruceOu first implementation + */ +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include "gd32f10x.h" +#include "drv_usart.h" +#include "drv_gpio.h" + +#include "gd32f10x_exti.h" + +#define EXT_SDRAM_BEGIN (0xC0000000U) /* the begining address of external SDRAM */ +#define EXT_SDRAM_END (EXT_SDRAM_BEGIN + (32U * 1024 * 1024)) /* the end address of external SDRAM */ + +// Internal SRAM memory size[Kbytes] <8-96> +// Default: 96 +#ifdef __ICCARM__ +// Use *.icf ram symbal, to avoid hardcode. +extern char __ICFEDIT_region_RAM_end__; +#define GD32_SRAM_END &__ICFEDIT_region_RAM_end__ +#else +#define GD32_SRAM_SIZE 96 +#define GD32_SRAM_END (0x20000000 + GD32_SRAM_SIZE * 1024) +#endif + +#ifdef __CC_ARM +extern int Image$$RW_IRAM1$$ZI$$Limit; +#define HEAP_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit) +#elif __ICCARM__ +#pragma section="HEAP" +#define HEAP_BEGIN (__segment_end("HEAP")) +#else +extern int __bss_end; +#define HEAP_BEGIN (&__bss_end) +#endif + +#define HEAP_END GD32_SRAM_END + +#endif + diff --git a/bsp/gd32/gd32105c-eval/board/gd32f10x_libopt.h b/bsp/gd32/gd32105c-eval/board/gd32f10x_libopt.h new file mode 100644 index 0000000000..5292c8eca7 --- /dev/null +++ b/bsp/gd32/gd32105c-eval/board/gd32f10x_libopt.h @@ -0,0 +1,64 @@ +/*! + \file gd32f10x_libopt.h + \brief library optional for gd32f10x + + \version 2014-12-26, V1.0.0, demo for GD32F10x + \version 2017-06-30, V2.0.0, demo for GD32F10x + \version 2021-04-30, V2.1.0, demo for GD32F10x +*/ + +/* + Copyright (c) 2021, 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 GD32F10X_LIBOPT_H +#define GD32F10X_LIBOPT_H + +#include "gd32f10x_fmc.h" +#include "gd32f10x_pmu.h" +#include "gd32f10x_bkp.h" +#include "gd32f10x_rcu.h" +#include "gd32f10x_exti.h" +#include "gd32f10x_gpio.h" +#include "gd32f10x_crc.h" +#include "gd32f10x_dma.h" +#include "gd32f10x_dbg.h" +#include "gd32f10x_adc.h" +#include "gd32f10x_dac.h" +#include "gd32f10x_fwdgt.h" +#include "gd32f10x_wwdgt.h" +#include "gd32f10x_rtc.h" +#include "gd32f10x_timer.h" +#include "gd32f10x_usart.h" +#include "gd32f10x_i2c.h" +#include "gd32f10x_spi.h" +#include "gd32f10x_sdio.h" +#include "gd32f10x_exmc.h" +#include "gd32f10x_can.h" +#include "gd32f10x_enet.h" +#include "gd32f10x_misc.h" + +#endif /* GD32F10X_LIBOPT_H */ diff --git a/bsp/gd32/gd32105c-eval/board/linker_scripts/link.icf b/bsp/gd32/gd32105c-eval/board/linker_scripts/link.icf new file mode 100644 index 0000000000..283881a728 --- /dev/null +++ b/bsp/gd32/gd32105c-eval/board/linker_scripts/link.icf @@ -0,0 +1,40 @@ +/*###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-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x0803FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x20017FFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x200; +define symbol __ICFEDIT_size_heap__ = 0x200; +/**** End of ICF editor section. ###ICF###*/ + +export symbol __ICFEDIT_region_RAM_end__; + +define symbol __region_RAM1_start__ = 0x10000000; +define symbol __region_RAM1_end__ = 0x1000FFFF; + +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__]; +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 { 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 }; +place in RAM1_region { section .sram }; \ No newline at end of file diff --git a/bsp/gd32/gd32105c-eval/board/linker_scripts/link.ld b/bsp/gd32/gd32105c-eval/board/linker_scripts/link.ld new file mode 100644 index 0000000000..8ba4a0e9f2 --- /dev/null +++ b/bsp/gd32/gd32105c-eval/board/linker_scripts/link.ld @@ -0,0 +1,142 @@ +/* + * linker script for GD32F30x with GNU ld + * BruceOu 2021-12-14 + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + CODE (rx) : ORIGIN = 0x08000000, LENGTH = 256k /* 256KB flash */ + DATA (rw) : ORIGIN = 0x20000000, LENGTH = 96k /* 96KB sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +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 = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > CODE + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >DATA + + .stack : + { + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >DATA + + __bss_start = .; + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + + *(.bss.init) + } > DATA + __bss_end = .; + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/gd32/gd32105c-eval/board/linker_scripts/link.sct b/bsp/gd32/gd32105c-eval/board/linker_scripts/link.sct new file mode 100644 index 0000000000..0529ba2b9c --- /dev/null +++ b/bsp/gd32/gd32105c-eval/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00040000 { ; load region size_region + ER_IROM1 0x08000000 0x00040000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00018000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/gd32/gd32105c-eval/figures/board.jpg b/bsp/gd32/gd32105c-eval/figures/board.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3cec090a59b3f4a29df5070bc0df0112b8e8105e GIT binary patch literal 169187 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%0A6ys*Q>g1K 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 literal 0 HcmV?d00001 diff --git a/bsp/gd32/gd32105c-eval/project.uvoptx b/bsp/gd32/gd32105c-eval/project.uvoptx new file mode 100644 index 0000000000..d691bf54c0 --- /dev/null +++ b/bsp/gd32/gd32105c-eval/project.uvoptx @@ -0,0 +1,180 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0GD32F10x_CL -FL040000 -FS08000000 -FP0($$Device:GD32F105VC$Flash\GD32F10x_CL.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/gd32/gd32105c-eval/project.uvproj b/bsp/gd32/gd32105c-eval/project.uvproj new file mode 100644 index 0000000000..e93bac770b --- /dev/null +++ b/bsp/gd32/gd32105c-eval/project.uvproj @@ -0,0 +1,737 @@ + + + 1.1 +
### uVision Project, (C) Keil Software
+ + + rt-thread + 0x4 + ARM-ADS + 0 + + + GD32F105VC + GigaDevice + IRAM(0x20000000-0x20018000) IROM(0x08000000-0x08040000) CLOCK(10800000) CPUTYPE("Cortex-M3") + + "Startup\GD\GD32F10x\startup_gd32f10x.s" ("GD32F10x Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0GD32F10x_3MB -FS08000000 -FL0100000) + 0 + gd32f10x0.h + + + + + + + + + + SFD\GD\GD32F10x\GD32F10x.SFR + 0 + 0 + + + + GD\GD32F10x\ + GD\GD32F10x\ + + 0 + 0 + 0 + 0 + 1 + + .\output\ + rtthread + 1 + 0 + 1 + 1 + 1 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 3 + + + + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + GD32F10X_CL, USE_STDPERIPH_DRIVER, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND + + applications;.;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m3;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;..\libraries\gd32_drivers;..\..\..\components\finsh;.;..\..\..\include;..\..\..\components\libc\compilers\common;..\..\..\components\libc\compilers\common\nogcc;..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Include;..\libraries\GD32F10x_Firmware_Library\CMSIS;..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Include;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\posix\ipc;..\..\..\examples\utest\testcases\kernel + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + CPU + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + + + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + + + startup_gd32f10x_cl.s + 2 + ..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Source\ARM\startup_gd32f10x_cl.s + + + + + drv_gpio.c + 1 + ..\libraries\gd32_drivers\drv_gpio.c + + + + + drv_usart.c + 1 + ..\libraries\gd32_drivers\drv_usart.c + + + + + Finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + Kernel + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + + + object.c + 1 + ..\..\..\src\object.c + + + + + components.c + 1 + ..\..\..\src\components.c + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + + + device.c + 1 + ..\..\..\src\device.c + + + + + clock.c + 1 + ..\..\..\src\clock.c + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + libc + + + time.c + 1 + ..\..\..\components\libc\compilers\common\time.c + + + + + Libraries + + + gd32f10x_exti.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_exti.c + + + + + gd32f10x_gpio.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_gpio.c + + + + + gd32f10x_misc.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_misc.c + + + + + system_gd32f10x.c + 1 + ..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Source\system_gd32f10x.c + + + + + gd32f10x_rcu.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_rcu.c + + + + + gd32f10x_usart.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_usart.c + + + + + + +
diff --git a/bsp/gd32/gd32105c-eval/project.uvprojx b/bsp/gd32/gd32105c-eval/project.uvprojx new file mode 100644 index 0000000000..2600998e70 --- /dev/null +++ b/bsp/gd32/gd32105c-eval/project.uvprojx @@ -0,0 +1,727 @@ + + + 2.1 +
### uVision Project, (C) Keil Software
+ + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + GD32F105VC + GigaDevice + GigaDevice.GD32F10x_DFP.2.0.1 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00018000) IROM(0x08000000,0x00040000) CPUTYPE("Cortex-M3") CLOCK(10800000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F10x_CL -FS08000000 -FL040000 -FP0($$Device:GD32F105VC$Flash\GD32F10x_CL.FLM)) + 0 + $$Device:GD32F105VC$Device\Include\gd32f10x.h + + + + + + + + + + $$Device:GD32F105VC$SVD\GD32F10x\GD32F10x_CL.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\ + rtthread + 1 + 0 + 0 + 1 + 0 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x18000 + + + 1 + 0x8000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x18000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + GD32F10X_CL, USE_STDPERIPH_DRIVER, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND + + applications;.;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m3;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;..\libraries\gd32_drivers;..\..\..\components\finsh;.;..\..\..\include;..\..\..\components\libc\compilers\common;..\..\..\components\libc\compilers\common\nogcc;..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Include;..\libraries\GD32F10x_Firmware_Library\CMSIS;..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Include;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\posix\ipc;..\..\..\examples\utest\testcases\kernel + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\gd32_rom.ld + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + CPU + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + + + startup_gd32f10x_cl.s + 2 + ..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Source\ARM\startup_gd32f10x_cl.s + + + + + drv_gpio.c + 1 + ..\libraries\gd32_drivers\drv_gpio.c + + + + + drv_usart.c + 1 + ..\libraries\gd32_drivers\drv_usart.c + + + + + Finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + Kernel + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + + + clock.c + 1 + ..\..\..\src\clock.c + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + + + object.c + 1 + ..\..\..\src\object.c + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + + + components.c + 1 + ..\..\..\src\components.c + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + + + device.c + 1 + ..\..\..\src\device.c + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + + + libc + + + time.c + 1 + ..\..\..\components\libc\compilers\common\time.c + + + + + Libraries + + + gd32f10x_exti.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_exti.c + + + + + gd32f10x_gpio.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_gpio.c + + + + + gd32f10x_misc.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_misc.c + + + + + system_gd32f10x.c + 1 + ..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Source\system_gd32f10x.c + + + + + gd32f10x_rcu.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_rcu.c + + + + + gd32f10x_usart.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_usart.c + + + + + + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + +
diff --git a/bsp/gd32/gd32105c-eval/rtconfig.h b/bsp/gd32/gd32105c-eval/rtconfig.h new file mode 100644 index 0000000000..67fb740e3b --- /dev/null +++ b/bsp/gd32/gd32105c-eval/rtconfig.h @@ -0,0 +1,200 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Configuration */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_ALIGN_SIZE 4 +#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_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 + +/* kservice optimization */ + +#define RT_DEBUG +#define RT_DEBUG_COLOR + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart1" +#define RT_VER_NUM 0x40004 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 + +/* C++ features */ + + +/* Command shell */ + +#define RT_USING_FINSH +#define RT_USING_MSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SYSTEM_WORKQUEUE +#define RT_SYSTEM_WORKQUEUE_STACKSIZE 2048 +#define RT_SYSTEM_WORKQUEUE_PRIORITY 23 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN + +/* Using USB */ + + +/* POSIX layer and C standard library */ + +#define RT_LIBC_USING_TIME +#define RT_LIBC_DEFAULT_TIMEZONE 8 + +/* Network */ + +/* Socket abstraction layer */ + + +/* Network interface device */ + + +/* light weight TCP/IP stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* RT-Thread Utestcases */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + + +/* u8g2: a monochrome graphic library */ + + +/* PainterEngine: A cross-platform graphics application framework written in C language */ + + +/* tools packages */ + + +/* system packages */ + +/* enhanced kernel services */ + + +/* acceleration: Assembly language or algorithmic acceleration packages */ + + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + + +/* Micrium: Micrium software products porting for RT-Thread */ + + +/* peripheral libraries and drivers */ + + +/* AI packages */ + + +/* miscellaneous packages */ + +/* samples: kernel and components samples */ + + +/* entertainment: terminal games and other interesting software packages */ + + +/* Hardware Drivers Config */ + +#define SOC_SERIES_GD32F10x +#define SOC_GD32105V + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART1 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/gd32/gd32105c-eval/rtconfig.py b/bsp/gd32/gd32105c-eval/rtconfig.py new file mode 100644 index 0000000000..4285e6b03c --- /dev/null +++ b/bsp/gd32/gd32105c-eval/rtconfig.py @@ -0,0 +1,150 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m3' +CROSS_TOOL='keil' + +# 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'C:\Users\XXYYZZ' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iar' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +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-m3 -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-M3.fp ' + 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 == 'iar': + # 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-M3' + CFLAGS += ' -e' + CFLAGS += ' --fpu=None' + 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-M3' + AFLAGS += ' --fpu None' + 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/gd32105c-eval/template.uvoptx b/bsp/gd32/gd32105c-eval/template.uvoptx new file mode 100644 index 0000000000..d691bf54c0 --- /dev/null +++ b/bsp/gd32/gd32105c-eval/template.uvoptx @@ -0,0 +1,180 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0GD32F10x_CL -FL040000 -FS08000000 -FP0($$Device:GD32F105VC$Flash\GD32F10x_CL.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/gd32/gd32105c-eval/template.uvproj b/bsp/gd32/gd32105c-eval/template.uvproj new file mode 100644 index 0000000000..8ad9e1c662 --- /dev/null +++ b/bsp/gd32/gd32105c-eval/template.uvproj @@ -0,0 +1,628 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 0 + + + GD32F105VC + GigaDevice + IRAM(0x20000000-0x20018000) IROM(0x08000000-0x08040000) CLOCK(10800000) CPUTYPE("Cortex-M3") + + "Startup\GD\GD32F10x\startup_gd32f10x.s" ("GD32F10x Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0GD32F10x_3MB -FS08000000 -FL0100000) + 0 + gd32f10x0.h + + + + + + + + + + SFD\GD\GD32F10x\GD32F10x.SFR + 0 + 0 + + + + GD\GD32F10x\ + GD\GD32F10x\ + + 0 + 0 + 0 + 0 + 1 + + .\output\ + rtthread + 1 + 0 + 1 + 1 + 1 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 3 + + + + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Include;..\..\..\Library\Firmware\CMSIS\GD\GD32F10x\Include;..\..\..\Library\Utilities;..\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Application + + + main.c + 1 + ..\main.c + + + gd32f10x_it.c + 1 + ..\gd32f10x_it.c + + + + + CMSIS + + + system_gd32f10x.c + 1 + ..\..\..\Library\Firmware\CMSIS\GD\GD32F10x\Source\system_gd32f10x.c + + + + + GD32F10x_Peripherals + + + gd32f10x_adc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_adc.c + + + gd32f10x_can.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_can.c + + + gd32f10x_crc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_crc.c + + + gd32f10x_ctc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_ctc.c + + + gd32f10x_dac.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_dac.c + + + gd32f10x_dbg.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_dbg.c + + + gd32f10x_dci.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_dci.c + + + gd32f10x_dma.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_dma.c + + + gd32f10x_enet.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_enet.c + + + gd32f10x_exmc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_exmc.c + + + gd32f10x_exti.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_exti.c + + + gd32f10x_fmc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_fmc.c + + + gd32f10x_fwdgt.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_fwdgt.c + + + gd32f10x_gpio.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_gpio.c + + + gd32f10x_i2c.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_i2c.c + + + gd32f10x_ipa.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_ipa.c + + + gd32f10x_iref.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_iref.c + + + gd32f10x_misc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_misc.c + + + gd32f10x_pmu.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_pmu.c + + + gd32f10x_rcu.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_rcu.c + + + gd32f10x_rtc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_rtc.c + + + gd32f10x_sdio.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_sdio.c + + + gd32f10x_spi.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_spi.c + + + gd32f10x_syscfg.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_syscfg.c + + + gd32f10x_timer.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_timer.c + + + gd32f10x_tli.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_tli.c + + + gd32f10x_trng.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_trng.c + + + gd32f10x_usart.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_usart.c + + + gd32f10x_wwdgt.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_wwdgt.c + + + + + GD32F10x_EVAL + + + gd32f105c_eval.c + 1 + ..\..\..\Library\Utilities\gd32f105c_eval.c + + + + + Startup + + + startup_gd32f10x.s + 2 + ..\..\..\Library\Firmware\CMSIS\GD\GD32F10x\Source\ARM\startup_gd32f10x.s + + + + + Doc + + + readme.txt + 5 + ..\readme.txt + + + + + + + +
diff --git a/bsp/gd32/gd32105c-eval/template.uvprojx b/bsp/gd32/gd32105c-eval/template.uvprojx new file mode 100644 index 0000000000..2b0da81501 --- /dev/null +++ b/bsp/gd32/gd32105c-eval/template.uvprojx @@ -0,0 +1,418 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + GD32F105VC + GigaDevice + GigaDevice.GD32F10x_DFP.2.0.1 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00018000) IROM(0x08000000,0x00040000) CPUTYPE("Cortex-M3") CLOCK(10800000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F10x_CL -FS08000000 -FL040000 -FP0($$Device:GD32F105VC$Flash\GD32F10x_CL.FLM)) + 0 + $$Device:GD32F105VC$Device\Include\gd32f10x.h + + + + + + + + + + $$Device:GD32F105VC$SVD\GD32F10x\GD32F10x_CL.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\ + rtthread + 1 + 0 + 0 + 1 + 0 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x18000 + + + 1 + 0x8000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x18000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\gd32_rom.ld + + + + + + + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/bsp/gd32/gd32107c-eval/.config b/bsp/gd32/gd32107c-eval/.config new file mode 100644 index 0000000000..595bf9bc01 --- /dev/null +++ b/bsp/gd32/gd32107c-eval/.config @@ -0,0 +1,670 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_BIG_ENDIAN is not set +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# 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_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 + +# +# kservice optimization +# +# CONFIG_RT_KSERVICE_USING_STDLIB is not set +# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set +# CONFIG_RT_USING_TINY_FFS is not set +# CONFIG_RT_PRINTF_LONGLONG is not set +CONFIG_RT_DEBUG=y +CONFIG_RT_DEBUG_COLOR=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG 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_SIGNALS is not set + +# +# 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 + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" +CONFIG_RT_VER_NUM=0x40100 +# CONFIG_RT_USING_CPU_FFS is not set +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 +# CONFIG_RT_USING_LEGACY is not set + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_RT_USING_MSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_USING_SYSTEM_WORKQUEUE=y +CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=2048 +CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_USING_SERIAL_V1=y +# CONFIG_RT_USING_SERIAL_V2 is not set +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER 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_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_PWM 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=y +# CONFIG_RT_USING_QSPI is not set +# CONFIG_RT_USING_SPI_MSD is not set +# CONFIG_RT_USING_SFUD is not set +# CONFIG_RT_USING_ENC28J60 is not set +# CONFIG_RT_USING_SPI_WIFI 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_HWCRYPTO is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB is not set +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +# CONFIG_RT_USING_LIBC is not set +CONFIG_RT_LIBC_USING_TIME=y +CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 + +# +# 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_GETLINE is not set +# CONFIG_RT_USING_PTHREADS 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 +# + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# Network interface device +# +# CONFIG_RT_USING_NETDEV is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS is not set + +# +# 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_RT_LINK is not set + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES is not set + +# +# 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_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LIBMODBUS is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_RW007 is not set +# 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_NIMBLE 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_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK 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_RAPIDJSON 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_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 + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_LIBSODIUM 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 + +# +# language packages +# +# 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 + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# 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 + +# +# PainterEngine: A cross-platform graphics application framework written in C language +# +# CONFIG_PKG_USING_PAINTERENGINE is not set +# CONFIG_PKG_USING_PAINTERENGINE_AUX is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_TERMBOX is not set +# CONFIG_PKG_USING_VT100 is not set + +# +# 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_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_ULOG_FILE 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 + +# +# system packages +# +# CONFIG_PKG_USING_LUATOS_SOC is not set + +# +# enhanced kernel services +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_VSNPRINTF_FULL 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 + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set + +# +# 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 +# CONFIG_RT_USING_ARDUINO is not set +# CONFIG_PKG_USING_GUIENGINE 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_FAL 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_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_WCWIDTH is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB is not set +# CONFIG_PKG_USING_USB_STACK is not set + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_SENSORS_DRIVERS is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 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_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_WM_LIBRARIES is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# CONFIG_PKG_USING_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_AD7746 is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_TOUCH_DRIVERS is not set +# CONFIG_PKG_USING_MAX17048 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_EMBARC_BSP 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_PAJ7620 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_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_STM32WB55_SDK 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_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_BL_MCU_SDK is not set +# CONFIG_PKG_USING_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set + +# +# 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 + +# +# miscellaneous packages +# + +# +# 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 + +# +# 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_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_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_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_DIGITALCTRL 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_UKAL is not set +# CONFIG_PKG_USING_CRCLIB 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 + +# +# Hardware Drivers Config +# +CONFIG_SOC_SERIES_GD32F10x=y +CONFIG_SOC_GD32107V=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_UART1_RX_USING_DMA is not set +CONFIG_BSP_USING_SPI=y +CONFIG_BSP_USING_SPI1=y +# CONFIG_BSP_SPI1_TX_USING_DMA is not set +# CONFIG_BSP_SPI1_RX_USING_DMA is not set +# CONFIG_BSP_USING_I2C1 is not set + +# +# Board extended module Drivers +# diff --git a/bsp/gd32/gd32107c-eval/Kconfig b/bsp/gd32/gd32107c-eval/Kconfig new file mode 100644 index 0000000000..8cbc7b71a8 --- /dev/null +++ b/bsp/gd32/gd32107c-eval/Kconfig @@ -0,0 +1,21 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "../../.." + +config PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +source "../libraries/Kconfig" +source "board/Kconfig" diff --git a/bsp/gd32/gd32107c-eval/README.md b/bsp/gd32/gd32107c-eval/README.md new file mode 100644 index 0000000000..a5dd4a3132 --- /dev/null +++ b/bsp/gd32/gd32107c-eval/README.md @@ -0,0 +1,98 @@ +# GD32107C-EVAL开发板BSP说明 + +## 简介 + +GD3107C-EVAL是-兆易创新推出的一款GD32F10X系列的评估板,最高主频高达108M,该开发板具有丰富的板载资源,可以充分发挥 GD32107VCT6 的芯片性能。 + +开发板外观如下图所示: + +![board](figures/board.jpg) + +该开发板常用 **板载资源** 如下: + +- GD32107VCT6,主频 108MHz,256KB FLASH ,96KB RAM + +- 常用外设 + + - LED :5个,LED1 (电源指示灯),LED2(PC0),LED3(PC2),LED4(PE0),LED5(PE1) + - 按键:3个,K1(用户按键,PA0),K2(用户按键,PC13),K3(用户按键,PB14) + +- 常用接口:USB 接口 + +- 调试接口:GD-LINK + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **片上外设** | **支持情况** | **备注** | +|:--------- |:--------:|:------------------------------------- | +| GPIO | 支持 | PA0, PA1... PK15 ---> PIN: 0, 1...144 | +| UART | 支持 | UART0 - UART7 | +| I2C | 支持 | I2C1 | +| SPI | 支持 | SPI0 - SPI2 | +| SPI FLASH | 支持 | | +| **扩展模块** | **支持情况** | **备注** | +| 暂无 | 暂不支持 | 暂不支持 | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + +### 快速上手 + +本 BSP 为开发者提供 MDK5 工程,并且支持 GCC 开发环境,也可使用RT-Thread Studio开发。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,使用USB转TTL模块连接PA2(MCU TX)和PA3(MCU RX),打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 GD-Link 仿真器下载程序,在通过 GD-Link 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,LED 闪烁。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.4 build Dec 19 2021 10:00:27 + 2006 - 2021 Copyright by rt-thread team +msh > +``` + +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口1的功能,如果需使用高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5` 命令重新生成工程。 + +## 注意事项 + +暂无 + +## 联系人信息 + +维护人: + +- [BruceOu](https://github.com/Ouxiaolong/), 邮箱: \ No newline at end of file diff --git a/bsp/gd32/gd32107c-eval/SConscript b/bsp/gd32/gd32107c-eval/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/gd32/gd32107c-eval/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/gd32107c-eval/SConstruct b/bsp/gd32/gd32107c-eval/SConstruct new file mode 100644 index 0000000000..49074397d0 --- /dev/null +++ b/bsp/gd32/gd32107c-eval/SConstruct @@ -0,0 +1,60 @@ +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) + +TARGET = 'rtthread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = 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 == 'iar': + env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rtthread.map') + +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) + +gd32_library = 'GD32F10x_Firmware_Library' +rtconfig.BSP_LIBRARY_TYPE = gd32_library + +# include libraries +objs.extend(SConscript(os.path.join(libraries_path_prefix, gd32_library, 'SConscript'))) + +# 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/gd32107c-eval/applications/SConscript b/bsp/gd32/gd32107c-eval/applications/SConscript new file mode 100644 index 0000000000..01eb940dfb --- /dev/null +++ b/bsp/gd32/gd32107c-eval/applications/SConscript @@ -0,0 +1,11 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = os.path.join(str(Dir('#')), 'applications') +src = Glob('*.c') +CPPPATH = [cwd, str(Dir('#'))] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/gd32/gd32107c-eval/applications/main.c b/bsp/gd32/gd32107c-eval/applications/main.c new file mode 100644 index 0000000000..4a528128b4 --- /dev/null +++ b/bsp/gd32/gd32107c-eval/applications/main.c @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-08-20 BruceOu first implementation + */ + +#include +#include +#include +#include + +/* defined the LED2 pin: PC6 */ +#define LED2_PIN GET_PIN(C, 6) + +int main(void) +{ + int count = 1; + + /* set LED2 pin mode to output */ + rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(LED2_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED2_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + + return RT_EOK; +} diff --git a/bsp/gd32/gd32107c-eval/board/Kconfig b/bsp/gd32/gd32107c-eval/board/Kconfig new file mode 100644 index 0000000000..c20447d8e7 --- /dev/null +++ b/bsp/gd32/gd32107c-eval/board/Kconfig @@ -0,0 +1,85 @@ +menu "Hardware Drivers Config" + +config SOC_SERIES_GD32F10x + bool + default y + +config SOC_GD32107V + bool + select SOC_SERIES_GD32F10x + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +menu "Onboard Peripheral Drivers" + +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" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART1 + bool "Enable UART1" + default y + + config BSP_UART1_RX_USING_DMA + bool "Enable UART1 RX DMA" + depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA + default n + endif + + menuconfig BSP_USING_SPI + bool "Enable SPI BUS" + default n + select RT_USING_SPI + if BSP_USING_SPI + config BSP_USING_SPI1 + bool "Enable SPI1 BUS" + 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 + select BSP_SPI1_TX_USING_DMA + default n + 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 + source "../libraries/gd32_drivers/Kconfig" + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/gd32/gd32107c-eval/board/SConscript b/bsp/gd32/gd32107c-eval/board/SConscript new file mode 100644 index 0000000000..c1f4a6001b --- /dev/null +++ b/bsp/gd32/gd32107c-eval/board/SConscript @@ -0,0 +1,28 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +''') + +path = [cwd] + +startup_path_prefix = SDK_LIB + +if rtconfig.CROSS_TOOL == 'gcc': + src += [startup_path_prefix + '/GD32F10x_Firmware_Library/CMSIS/GD/GD32F10x/Source/GCC/startup_gd32f10x_cl.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/GD32F10x_Firmware_Library/CMSIS/GD/GD32F10x/Source/ARM/startup_gd32f10x_cl.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/GD32F10x_Firmware_Library/CMSIS/GD/GD32F10x/Source/IAR/startup_gd32f10x_cl.s'] + +CPPDEFINES = ['GD32F10X_CL'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/gd32/gd32107c-eval/board/board.c b/bsp/gd32/gd32107c-eval/board/board.c new file mode 100644 index 0000000000..c409645b37 --- /dev/null +++ b/bsp/gd32/gd32107c-eval/board/board.c @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-12-18 BruceOu first implementation + */ +#include +#include +#include +#include + +/** + * @brief This function is executed in case of error occurrence. + * @param None + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler */ + /* User can add his own implementation to report the HAL error return state */ + while (1) + { + } + /* USER CODE END Error_Handler */ +} + +/** System Clock Configuration +*/ +void SystemClock_Config(void) +{ + SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND); + NVIC_SetPriority(SysTick_IRQn, 0); +} + +/** + * This is the timer interrupt service routine. + * + */ +void SysTick_Handler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + rt_tick_increase(); + + /* leave interrupt */ + rt_interrupt_leave(); +} + +/** + * This function will initial GD32 board. + */ +void rt_hw_board_init() +{ + /* NVIC Configuration */ +#define NVIC_VTOR_MASK 0x3FFFFF80 +#ifdef VECT_TAB_RAM + /* Set the Vector Table base location at 0x10000000 */ + SCB->VTOR = (0x10000000 & NVIC_VTOR_MASK); +#else /* VECT_TAB_FLASH */ + /* Set the Vector Table base location at 0x08000000 */ + SCB->VTOR = (0x08000000 & NVIC_VTOR_MASK); +#endif + + SystemClock_Config(); + +#ifdef RT_USING_COMPONENTS_INIT + rt_components_board_init(); +#endif + +#ifdef RT_USING_CONSOLE + rt_console_set_device(RT_CONSOLE_DEVICE_NAME); +#endif + +#ifdef BSP_USING_SDRAM + rt_system_heap_init((void *)EXT_SDRAM_BEGIN, (void *)EXT_SDRAM_END); +#else + rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); +#endif +} + +/*@}*/ diff --git a/bsp/gd32/gd32107c-eval/board/board.h b/bsp/gd32/gd32107c-eval/board/board.h new file mode 100644 index 0000000000..11fb4fa084 --- /dev/null +++ b/bsp/gd32/gd32107c-eval/board/board.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-12-18 BruceOu first implementation + */ +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include "gd32f10x.h" +#include "drv_usart.h" +#include "drv_gpio.h" + +#include "gd32f10x_exti.h" + +#define EXT_SDRAM_BEGIN (0xC0000000U) /* the begining address of external SDRAM */ +#define EXT_SDRAM_END (EXT_SDRAM_BEGIN + (32U * 1024 * 1024)) /* the end address of external SDRAM */ + +// Internal SRAM memory size[Kbytes] <8-96> +// Default: 96 +#ifdef __ICCARM__ +// Use *.icf ram symbal, to avoid hardcode. +extern char __ICFEDIT_region_RAM_end__; +#define GD32_SRAM_END &__ICFEDIT_region_RAM_end__ +#else +#define GD32_SRAM_SIZE 96 +#define GD32_SRAM_END (0x20000000 + GD32_SRAM_SIZE * 1024) +#endif + +#ifdef __CC_ARM +extern int Image$$RW_IRAM1$$ZI$$Limit; +#define HEAP_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit) +#elif __ICCARM__ +#pragma section="HEAP" +#define HEAP_BEGIN (__segment_end("HEAP")) +#else +extern int __bss_end; +#define HEAP_BEGIN (&__bss_end) +#endif + +#define HEAP_END GD32_SRAM_END + +#endif + diff --git a/bsp/gd32/gd32107c-eval/board/gd32f10x_libopt.h b/bsp/gd32/gd32107c-eval/board/gd32f10x_libopt.h new file mode 100644 index 0000000000..5292c8eca7 --- /dev/null +++ b/bsp/gd32/gd32107c-eval/board/gd32f10x_libopt.h @@ -0,0 +1,64 @@ +/*! + \file gd32f10x_libopt.h + \brief library optional for gd32f10x + + \version 2014-12-26, V1.0.0, demo for GD32F10x + \version 2017-06-30, V2.0.0, demo for GD32F10x + \version 2021-04-30, V2.1.0, demo for GD32F10x +*/ + +/* + Copyright (c) 2021, 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 GD32F10X_LIBOPT_H +#define GD32F10X_LIBOPT_H + +#include "gd32f10x_fmc.h" +#include "gd32f10x_pmu.h" +#include "gd32f10x_bkp.h" +#include "gd32f10x_rcu.h" +#include "gd32f10x_exti.h" +#include "gd32f10x_gpio.h" +#include "gd32f10x_crc.h" +#include "gd32f10x_dma.h" +#include "gd32f10x_dbg.h" +#include "gd32f10x_adc.h" +#include "gd32f10x_dac.h" +#include "gd32f10x_fwdgt.h" +#include "gd32f10x_wwdgt.h" +#include "gd32f10x_rtc.h" +#include "gd32f10x_timer.h" +#include "gd32f10x_usart.h" +#include "gd32f10x_i2c.h" +#include "gd32f10x_spi.h" +#include "gd32f10x_sdio.h" +#include "gd32f10x_exmc.h" +#include "gd32f10x_can.h" +#include "gd32f10x_enet.h" +#include "gd32f10x_misc.h" + +#endif /* GD32F10X_LIBOPT_H */ diff --git a/bsp/gd32/gd32107c-eval/board/linker_scripts/link.icf b/bsp/gd32/gd32107c-eval/board/linker_scripts/link.icf new file mode 100644 index 0000000000..283881a728 --- /dev/null +++ b/bsp/gd32/gd32107c-eval/board/linker_scripts/link.icf @@ -0,0 +1,40 @@ +/*###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-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x0803FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x20017FFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x200; +define symbol __ICFEDIT_size_heap__ = 0x200; +/**** End of ICF editor section. ###ICF###*/ + +export symbol __ICFEDIT_region_RAM_end__; + +define symbol __region_RAM1_start__ = 0x10000000; +define symbol __region_RAM1_end__ = 0x1000FFFF; + +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__]; +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 { 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 }; +place in RAM1_region { section .sram }; \ No newline at end of file diff --git a/bsp/gd32/gd32107c-eval/board/linker_scripts/link.ld b/bsp/gd32/gd32107c-eval/board/linker_scripts/link.ld new file mode 100644 index 0000000000..8ba4a0e9f2 --- /dev/null +++ b/bsp/gd32/gd32107c-eval/board/linker_scripts/link.ld @@ -0,0 +1,142 @@ +/* + * linker script for GD32F30x with GNU ld + * BruceOu 2021-12-14 + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + CODE (rx) : ORIGIN = 0x08000000, LENGTH = 256k /* 256KB flash */ + DATA (rw) : ORIGIN = 0x20000000, LENGTH = 96k /* 96KB sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +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 = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > CODE + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >DATA + + .stack : + { + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >DATA + + __bss_start = .; + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + + *(.bss.init) + } > DATA + __bss_end = .; + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/gd32/gd32107c-eval/board/linker_scripts/link.sct b/bsp/gd32/gd32107c-eval/board/linker_scripts/link.sct new file mode 100644 index 0000000000..0529ba2b9c --- /dev/null +++ b/bsp/gd32/gd32107c-eval/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00040000 { ; load region size_region + ER_IROM1 0x08000000 0x00040000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00018000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/gd32/gd32107c-eval/figures/board.jpg b/bsp/gd32/gd32107c-eval/figures/board.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7eec2d53d55e60efa377e3b748f252bbe8ba942f GIT binary patch literal 128732 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

~E~@JOjnwAtNRWMP3Z)4Z2^n9RF#Wl0 zRIw+nRBIICnf(1&tucCz4Y?X*aqe1vYW(%eUE~%~2FDpq92mf&qWt2|fiBrVFD@)u zZq@21&n-eEIOu3{)Lgn>U4WiM(y3wnf(KGDzcB%%(f(y14ZsC-1u<+ry;ra4(-(SI z7Z1bSD9_BQ}&cpa7nCS7-hi}l3(E{6=qn2ePPCpC!_=qgCjm`V`-Gfii z^t^CdO6|PH+Dq)D{)!c`D0{J~yRo^>WzgTZ?{gBO&xJ z%FBSazd- zjwLn@V1992av9*k_6MgMmqpRfte<}IxIV7aad%9HGbrivKPGYe)cXmKH_E>L`m;X= zBEQ4XGqltx0sT+sushFwH$F4cj9-I!@erDw4)f-3IvL!&P!>KUnmQRekE%N=A_S6h z#JHg?%1g11j)n7EPuT{qCm-w#yM9<0U6<~4lBN28EuK}d7jeCJ$f6l!M%T2(pYb;o zlh?@Hw)7kMc`TW2!qcZxnf8-J|HmXRliuI{uLcHWp>QviW#9Xo$4WIs&VKM{=( zWi3RmQ!QvrL{yg?OV?#LEvZRm0=W0w_PlwWYb4`Fz|+6M1Y;dL>xZz|_#QRw^Ddpv zQiFdYVZpF>)q|oIXGZupeb8%qK?8(rsyRTP)TK~DLsVvZ&0WE1WLT6kbS3#FugilE zy<<1!Fp|`0G`E_%#dXXPw{yMOoC-OPJIBg}<+pwi>8L1jJ=P>u&R0{0%tGqVA|8@c z>Zj_136g!~yYiy_axd=GO?nRZG1u2c4t^?zDY1Bg_K7UM%2 z<3?HBj*m^s7Oj-`zMZ^Q_3n}#s>WJ{M;QsQ0tE1t#MVN6lmbl+M|bSfl1wxu9&J?Q zy9+4vdA;1L6>F{5P5fMq6$-QSLl1yOdtiY@+gj2jiReIyWLuks(dIQpk=+`@m6pAv zg@Y$Se)mdxpQjpuTxAscku6HUx#rTz4wL{qIFh4uSv8VoR64)Sm-)CQEdv+Lm`l8F zgv)q6uookFz@LiM8XXj{rI7^<*hi=xsW$5<%!9!Jz*x9tj+7z=_vTy~yD{-6JHULR z?ytBL%ovu!9xVI~(NK!#EY}smOq=!C@yEr&y{EUS>|Z4hW*X(0ZI3l|=^wUNHo0tX94F4pQ%{3G zoU$@H2TY^A9bDG#Sg!wQ&&s!g-pQt^`jcOe*}Lvv0rkDRb? zZmpM%^uG#;X&!qLlUaSR+%1nq_lec2#8U6mo)RlEm+g_aLL47UJ&SNG*l%ucKlIp0 zIxp0#8p&?sPiP|8>yp6aiWv>vmE|aGFf@&PV$lcYwxP5>)rWSB6*k)BvR|x=6txkW zi~jC^gGEGU+eFNaf?fgQ8ki%(;H$<0b#`2Rqj;g=}rA7SSkazC&(YQ`vhyInz+Kv zXPX|28Il?zxFY&z6bv16g6^+i(U}0)>r4<$%0k6nI1~P@tDeBSVU#9+ODE#MsVV8h zt*hzSAG}$>?7&tteHYAyRGT_-Js=>T!BCaFF>`XSJw2U*b!MI#v^CU4J+0xcUP1o1 zW)VX4Av0A|9Eel{N|g_8l;3K!zw7xqY+k9+dk!a>*RVeVObbl2o88XkJkH#TUJngbDL2!>Z2)+xAh{H+o!;U61#QH{ysd4W{?BK!GIGU9 z%*7AG9MYV#^OM&7ph}5v^MO5=3Jv8st|d|)AzsucjA=n|955}m3lMGXl_>^+et8hf zejrjZ#G%x(YVN(psMp!3wC8rbf9>^R1NAfg=pSJZjtQmEe}#d2g)xO5%~*I?Ht zOAvdgM-U=B{*NkzXao*_(?1YWGWGQ%k2p-k`lx!pizS9?-45VAVLpQ>AU)+j27rM- znPU0jGx4ltBxK(HhFkGSzVCC&Q!}-vQKFS*!C{{=tGC}3bA<^Zz(H_jo4%_m8WTattBIRYW;PPBGRA zNs{x~lC$M}8fHs!K7|ls$tlO>oa1sPBG5D5yZ7FGU)Sq; zUC)=#a4>H)-U4Aw4Wm6I4X;Of&@2{iHBU-=RO~Je);GTYwX+X?!++y`Ax{e55dX?K zJ0g{pVl<7PCWaHdIA(y*`_3skXsoW>>tL;Mzuw!iDb_1CGMo3Rla^~|t^A7lUz+vy zs;=%19@I~&QLX1gu3+onNpgvHl8I?AlV5n6C*`x4VI!3XKI3>+UPH$#4S}4U1`2?| zcvxB&oN^Y@_CdezK*_H|R8s)hdho^GP4IXs@f#bPU9D`I#$TMqQtaa#o*SSGNqOmK0q?Fv3T&zyYAX<-J(ZnX{CVQl)zdHEU2XEG^?d}r^72{z=`fiep1Yb&)cH!c*O(Yjjn z$Mwv0qg?l=zIv?DD*~R7{RH)(^F^N~z5cnuWlw3H> zzEq?h-idHh9p8p*;d??xwwZ49ks1j;zjRVK=&>IGc!vSGh||9f0?fKH8$huecIDJF z+g{OF?ljQdM@)lGF}ym4jI8 zn4L=XfO(J`#WS>@Uy{^;^^qruraSQQeq0 zGg-MqHsvkd`Z#6Mw))Uh8O-RI)`M%Z)`L#I$|-TQLlVN{^y4D&$&$H88O?m!Y!UDe zla*V>S4fiyIL$2C9O)@@DbM}7JmV3eoKK!9IbtYwwJD>5U+EDz-v z3e|OP_;(?+)%1jEbw>x~4fEA|W6=;K+lGulU{gnv4z%A$9iuBnqNL8@K)xqd+WN^$6e<8OaIJmZw;o~UhQf3g8!a$v6L0$ zKY4oYuq!)pWybA>$9#Q|NGP6TugvaR^S&rslS#(I#XB4IeTP^2m4x>ft5&;xJhx`u zIo8;MEutl4lAnI6`&})-OIB(LwD3k^A(Xf^XYJ&NwTz!Mb|J?-{=8#PaP_4)YSz7< zDVCmJY!yH`A6n-W?#MR^hXhol50no7j((9g^qs6c1(BUwaVRK;IWGj#yT|@xn0ezu zUX05RwHKRi#zXGjVY~x^^FD;!hdu9|tWq3&oG3iopX|yU4A|ZFiMAgt)n`6UdchQ= zZsqN5h$cD)^#cUNo&nV}KF7)5hC?Jecf*k~l$2%lWOmnP;SKWn#N7Fze;yMaUO__M z-D5Q;`cVq+%&whDOJFd#0{nM{pPL*w75rRa^=$tZK}spo^9~s?ocd%(YI8ABMWF93 zcBy=SbAfGAR(hMJ;Q|BbcYTb_;W>Iq+-v1p%;n7ugd&cSE!)Xzp=>G6=W@<)gYEwq zzCaP0r(gVerWL7)yj!{xM288@S=buOr69>__~Nm3xYNniN;&D^d6K|&X}*&>{hdCC;#2YhRyUe6qXXhgrC)m?ue<+i z&3+B+jhJQJs;JBlw)Z|}rR!zRC@+bv5ZZl7&|XX=6H_7JD~vN6@`UPEupySnJp zltqA!t$CYfIZkt-iqJGjuVF0kWL>PA#JC5qdhwoU-2Fy&E{HOpqeqT)0^2++ixNzB zFrzq;sGSWW*BVBv6i^0_Yja=R8(fUI1(wU;G!m%&L z+eP81PP)Lfl4X@Yl*6t0O{(5h(*1^vG2x;m%lsEA>%KcD>9CPJjo!eNX@RgLsU=im zA;o|^*tsB`Wz{>PJ>lW}y~Wxkg+8*Te0?8Eg=b&T?N*GUbUuoZ_k6lQDk?3otaS?I^_k z94~5pYI2MEETv-XiFc5?) zuA!;u&*lPXU#7z0dyQLR>zkUZgok&|Ko@93_tl%H=#2!qXn=#ZO5os!iHN3k1me=$ zrNI(KuE#8Ft);v&W=^rG5YZw1Rh5RjZy!{aIUC2DJsvOO^|ljFtZ;Np`RrVuvYa*; zcrs(l;z2)t)ZeeTc=6YeaL6YqzdvUmoIa@9B{Y=!kg(UA8HUj&Td7ZgSllZ-J^Jz8dxnzX4I)&2gR8=9unW5tjqj?2Z_bPH3pX6UtxMQ*{HIt!RrT%$JenvtQZqH+J6BC$ad zq?Ga5(?!qve_m8BI&R?xxo;a=3-CylHQM{`SjeSyy&%+f`GW3ZHdr;k*{0D~bi6SIB`W$fdg3fYF0c z8HMrZkFLiNc;HaKpViy!EwgLX^>az}>p&u^=iqM4Vr_5AQgExf7q?p=2If{K({C&} z=yQJf=RhQG;q`A?D}7t!aDUD!YVw3XhjR}VA2eMQa@?~x6St37+1|oKg>}E$0ucg7 z^7k66Qx|^CJhpDl3^uj1uAK8S-HZJ@nec5waqUq+5sz~Kz+o7P34z2OE=GqSBP-xg zo7%C1TWeIa#4@Fc(blyEOPS(?WEn=ecBPBY4Y~O-V-XlQv}ci|h2@27&svb^xr9o{ zk8if~*7N5)LTXS>xYlQdn(JKJJWNCPHGCqVZ@00|PO0;jhB8H7X|Jsk{c*|O1nTg&v(v}Xu^l4lYaWoPq~FJ&r9F1P3T6RZB6L?Bw%JG;Y+HwadHfq zrg1U#wqGSL0)XJ%O)6?G7t z5j(fI8UPOYx7JR>By>X-`VUJH*G=ayX&;yKh@b*&_Hb*7widML*0Jg5K(qMJK<%I@R9J+Hz*LXhqF5ZgXD; zY`r53KC$-CnA+3lX>BoWl>2z;oOH~bc{Fkq%bZC74vI^6h;%kb^x>9NuI-K|ekvPI zT#L2W@j8UIxt*bY(S-hz9yGQc^kgmkL`oA>?i#l<+8K2U$r%qa%E}xK} zF{V6scxiXDgMTINlqps$ml-ij1rnD!1`gJe-4s3O(=QyB*JD-K7F&TCk;rpNgR_Gz zT@9ZDZX3~OZrW3ht59_fL-3u;E+=tCBzzW4-nARiaS!uLR2?61!O>^ z1PbWWj*Cv({$o(Hk^Lv|jqOX6pj)88`x^m!Z5!<`fn3`PoAX~0wWqsd#rH+OKd)!m zku#78vSN8@63)7);0;6(z22;AhYn`P1*a!lF}TxCCGWNS@AVn%n!L|{UN4Afb3Ky@ zM*3%crk%R|v0@O=&o#>~Ks_}-rJMwR0j2ncyf`~sCe_db+y#$Zv(6n9Hma6*USY^{ zp(;)a{xjNEd>9yT`1yS2gleh$^OvPlX)nD|fcgYIM zkU*AKD3&1Of76)=kJ-~m*OQZX%LyS>Oj~xqtdo)4vVXu4GrE1>sP}B&#D~e18L z1LqI6#n`H^G+*FwY;;5LVQ@w5mWLaeZ@6jq=Y6132%|>pFfSd62=NGeama$s$Ue{i zEO1+ zKe3EsCv)(78K@Gzol{Wpt1g}A9q4rcrlC8RN;(D)S*eV7Jes)zM~KBC*9 z-&?eG_z$ZbIvbH@Xdkg?fA8VjIF07%BKS1ktcgSr*4#I)_4>ADR_bFPz%=X?SfQ}W z;r*rTQ$>Z#O+Q9W3*_##B?cx52_g1F9lUrH{l-*&HC1{#4GOjH{ALvy=LYUW&42d# z01;gi;|L*&Q>@EoY2b0%%Wr)?`8MFP+Ma9wG2Hj@_LyQ?zfO^0LJygPNS4c*(zUwF ztuXlR=cGptyjwLq6pPM}10OjQ|4aYpFnU*CUvcz}^EI1<_k}OO` zA#Y!`KyXWn|1t0@iRVq5jeAz*$0G!yGG)=h@6S1QDJEZkc~L!UE_7Oj>Zc=wzD$#n z_(OYeCAs)VqIi7~%2}gR`kh?*K41EC_M3rXM?6J4Cr{UQg4)jkN5ywzk;~tU%|@5} z$Y307NbtG@tmB#j`9upjcs6sJ*6{=4F7?E2M)_q>*hk_1vOJE{_;z5oyL&1`GmZKL z9%?ofa0#3f1~DLsl=}oo0Wr^y6=sBcRo7KJFt+2G5Q->(#lu7+g~*LDtv*Xwq8BsV zp=U}B;DMCHdIj)TIDA044E-`c*7{KATh80~-jnkg(rTZBjlLjqnG7NZkYT-cl4FN* zj1&~1A=js{em8PLwiGWGEb65;uX}Om35!CMh`mb}^KwZ-x2$8cXtCl(i?R_pdOMhe z>B1fMMb{hP1aN)byp6wS^@<0VJS;uOg06|#nWwk-d0u7kWe@Q)r%TW~p=`*D@Yrpd z2f5aWl)IMyQg#U-eBsyXxeYv_E*~QXPBMdjKKTn*lISs*b@_4pA43DC3lk&4RZrH5 zqsft|THk(0_O=q({JJkcfXNhQ?)>c5QN5dKJHya(Rpt|O0o9g131LV0ky`MOaLua& z%gKU|0Kch4>r}}!B8(A+`f6imqjT${84P^;{dnjG&@;&hd+dp4Di3VdtMYBu)V_-c) z!mS@6P_cUCy9E8dE{Yr{wEHqbyxmr1$obD_0Qv%`m*V(zw!O5Lxard}l-FVumJfLj zuvqB+eoen^1D_@2H928mFW^ag{EE9Qr&+5y@do}Wg&!S1nC}&wRl2CXE#m@E+jl5_ z`3R}+9*?>-A(?~_nz~n1hJf$0eZe@%pW%muOAp zeY-T^UbsWyq=G0dJt4(ugp0^~$lsZ1mQgj;z*UVveOn$|p1)E1Y}u$g@(+*ctHN)% zGhp)+WGAX2xoh#Q8dLZzfhn36_7#edn34lO!iVE$Dbm{kE=?dZ5n039bv1L>fD7QO z%tsP!47QJ{&nV_P)s%2NG-g4V%(MQM7F=cptHngsW4BwVQZ0Ty((n&xj_i|IlP1>%3`YVXsz+-!bnt=lJSwl~DqA z6>v&P@$uk#8+V29U|+YX{0rrn>d;440TP|76tU5bbV0I2-}!n29(Yn{mh-rhR`p4N zzVf{*7xfgP)BMoV`KC*8%el-)MhQXtDo5V>1%h4Zn#0C!^gEg5cs4!4Lj4jIzLKKE zM9PiGx*n6F-dnsC+QH9w_eQ#HiA01keHc`omrgY-##B)3ykfIg)WQg}V*48*ni*ag zi2sX-RjnqH&Y(54c9B>L>VigR%OwPOMKt%tgDnBHrV$0w*)BoQlhI|IsEPjqkMZH$VJxs0dxn(-_TxwtGor8b9k|qOO;yERY0OEw}bebW- zO-*B~fPo9R>A#D3@LRNT{1x}r{}@m{VenGEU(EPFTyqX!Q#m1oYAqSkGo#673)kzN zqRUQIi6$OUz%qDiUei6z(Y2iVhi2C~c3HnbWsFmQm_a&FI6Xs3Bsrc?pVzp=P3C?~ znF*AmJ;LkDhQ_NmIa^w-dPxN;vEwk7@3tHZiX*nZ{{d-|g+^365jtwkBI3u&zb+8Kh1^oK^{ zrh5`!E%zy8DTakWh#L-d%~@u@)F~#~?^=Y`of(9CgExMbe?ZJ2d*z?^tVIk}_ArX`nEt}o~bfr)9& zGjMDNirs&g3#!;Ca%J*HTxe*&9AZmp-}=T(gr?C8r0uM?f`YcTA5B;aBt-EPPtaxk zxBAI*JCISknV;?u_isq!p6X_>k^6cza&B7LV~KAX6 z2dmhv2b=wBTpT?6nu)>dR{do;Sq`u6gA)#x7aK9|{~V6~{l-A>b`%4{)+ydikB2)) z;$zNZgod=|e;Bw8)Ijodql;W+T5#M9Yz{wNEvsvUdPWH^w|MiOIzNbTgFpLmSa<6zvfwn zeWcc3yBFlHGp%mf6**9aY5L7%p0$K_-tTE9=S$Etp<{Z#|vAX0S+%dEdp-D%cjfHur=v2;)z_GWBo1amH@g`j@>r__JaH-)CW|?B;K>M%S z9d#z0^P41thG1pzL91$kk;(_+F)HPNldyrCL!(d70yN3f7@7~+xMzPO=wAp$^OvwB zP>W9X&N}tYC-UoxIECsE{Rn`K1b)1XeoJSh1a(e}+-$d~i+`fo=d&_rx2flTSq&q} zopGWoEVaQAy?B=9M7A5-fpAbzW)t`Z=}L8-)!8b)??i_|?-27G%GMG`Hzo>AGFfCn zJdWs887_bu7>!pg{MF-%5Hj24ZtfnF@*G?N5qiy)PIh@;`c^1$*hf~Bm_oH2Hhrx= zZq}a`xj$F@rxBp}lT<BIDb@-(Ebuz}lv(Fqc8o!?3FIr0zzNTcVoP9qP{ z6mfJnmYL!?ZZUx{_928x5cjl?A6}AyAYSsj9tU)YCWQjg;%`w)U-YWnV8VUTug(j` z$~wx|^-+hiPVYjqK_n~a%q$^@xJtFzXqP1gMc~7(`@>i+yoYvOOm^HpfvP?JHJAA3 z5YwxW9Z*L28#?fqS^5+DE}4EQpr{n0LKCz4sLJ1K2X+~+M8-|8VQ2y)6?5)b zl0HjLuxO&WE;%XRMNooP2Nj>$TTCd~!;FPtiD0bLLpUee7wZMZ3*+?4Ou$ZKBRFW%77(9hXSQeNU!*OlR4N`+%IfnR*rQT71% zh&jj%qaFcLiN*mnR*7o31-+@j>SR|#)c{1(nSrafdw}luTV68R`sry=T~_;@MH^io zpU;n!6S;LI1#sXW^b$-RPyY*6d0q4_+D#}VslJKorH<(noHER?wqRZgqxJgG z68*63HXt@@Y1rOsFB{VQIW2B|R4-JRcX?NfS>@nM(yK=(>cly8XKrKx%YNwCcLt-7 zv7IZ6Ig9&6dm|@`Z&+U!h^`gxV`mf>m#DqyHB_zfHBlzfoe3kz4xOkmIwtgOP9ssN zz&RF$+c08O|3$=h>BALHO2rKM76|{_U}m^$|Fz^sH@jOFi(Xz>g2s!f>V!Cm8t7H9n1d zh50>R_&VeBEval7Z&g&Hp%-bm2^8#NL+AgG;hbGM&<3oXM0Y>wn@@XQ4@nx(**Bw= zk7(Y#1!XD_!Md_g-mjmSe@1nv9gCqa%hS|sOEvpWC7XPbkL5<`TE=uS^Q@Eb{}`Cg z{|#Y}C+xD+bOkndr>Tz5NNAdvQRn6h`jSlg4I5p=MD9ia%ruGWbi|$c=&0>i4tY5* z-k|Ql4pitYyAH*aG;NY{n^N~crFeO;Jx`q6piI>n*qe}(oH#@qJNy?LG5~Qu*QJI; zAFVdmj(ke>OaY=oL>SF=7#BBh>xI^~#LAM{y#iBG@RtCEfOC_1md7E=3k_19u1ET9 z*h%2?Yjs|rR`buGaFPl>hr$}6&TSZcPirbo>$?;5-f~J{SMK0-Wz4%D>t2mkU1$T+ zwulf}yV?s+Rfp6+D$22btnJ_gZg{UNDjsr1Ed0d*kRt@!kT<<21~q*!_b zUwms4<4$e`y7+Gzutm)~I#m|5OQf5{l>w#hFZz7oN50tIhU>Opgclqm3z(WrMGjZ# z7i)jh*uKnCB23K4Jf*S4-^WsyW_SIrBr=14vN+v`-g#9(L3;uo8>AqdqdU{?8VMRJ zN2F~(7S43Y(1e^G2|7tIv+ z&x>H*>BT^^AXQ@G>)JRv{$mgd@Dloa$6fPkHi#RZH}=nZVrpAaqM_Nkr8mpa>PWw+ z|60$;U}TlL9Z4dZuCdTi5|EF$3+xI~Edr9+-0j3h>yx?b``#&8d)(MHtc&CPI)7py zIPAE3lQSJ9Yf~b6WBB&I6w@R%gU;a=lGiof zTCM+xcp2_=O?i*uT8b#w%D~E}H^Qs4d*7}h!hyW*GD=Y?a$3L)9YnS!fZiPdi1()t z)pbH|4rR+*I$b~CB&|s@+4~~`?}fQr1S{Qsu%lOb(Q3V%W=%4SuR?V^YURh+z*#KF zE^iOM*9}4iVQLcZb_E|y2e=Ya)pNCPF+K`I;}R6W4kF$$Bn3%;X-p;w+L0U3q@!Ma z-sNScq&m3M1VW1-cL8ptXRCay?>1(wewO@zOM~#ZLgnP;=de#p+4~%nTggP7cwYR2lHHff9p*3C%^IRUlxeRHcrS4m82V7Rw9Q~1fX_k ziqS5%*8ldmUKF(6vb$dMopd3#fWi*rZx{LdHB&d}Lc#S0OFb2|K(K+>oB9UQ^9L$2 z$V>2Sjz9W!Q>2kNOr51B$l6U5Z;ZHywRHyZDsFJQ=eafVCrIkaxANJ!CeqR_Z$UNa zqo8_~*vunVid69*%JTC0RT|%Mt<5H`xWLcNEpYE)#nDl1Mclp?WAfXPRA2c|an&U1 zQ5sn(lg8!MhYN*w5sr#9)?+-XJmo|-wMM}Z#UR-)=bL4P1{EbjJ>Ez3_dehm7LqY( z3P$^xS}DvO8&D*4I^+at*C@I$cEFDsBf{25qBoYh+ubAm$|o(pX!DAlQpi_sc;7E$ zt8o9$iC?p{ENe%SyiEy>`xwBx<>PGy38u{y2qF5%2q*l@^0SuT-~hRBuN}g;|7xm1 z-G+XHI9yLk8>zowuV3+#%?~idVFlr}rX(*STLr4qlFVVM59tizH4hB@M+l2z35{`f zP_OKMvzt(QB6@GN=_C{EMdQrr6^M?(ddhM1mAT_8d)oS<51F!emMt=F*S&2w?g;Yo zUHQ1~@+UmTVj$%{IL^4s#G_H-cj>DuR<6e!9Q0wNM$Qr7Kl{ z+h$<FH5L+;N%! z9sBC6;!f;e&N7bPUl&s>z0S{&eF9rHr(Ib-dV5*|KKB)FOG%QqUW8YAQ82h=SqSOQpkr%Vw~ek**x^W~epHR>{8Kc#QcnJt6K zk_L5BcOl*4lPiby5Q`l!n9m}n(Wr?dUHv7%(pi|&L;RQ(?#NefQ zRClJKR-wh_-XNR~BmhohsmVeJbRz&;y8D~!PvNTr45|{uxFJ6Yct_)ct>>K!0 zQNBG8{~{;a6nSo*7%Z?iSK%R$SNquT{<`WKdP00P$S2HYepM55S^{w~h_y0L&}5#$ zL^@9@V&Cqu#nP&52RkjnR}J+j0D+J-#FQL=k_5xYoO~iSgl7A267&VnYC*^Lb-38#)&2 zHkD~GSumw|3ejn3Xn0W3S5bGdH0?^VKw0@Noy(CqSfL*oau`kGdqhUeYT$}q=RA?-H`t|N=pW?4UmJ8p`0~44$|7bV;qWjl59{V;u$}n)0{1~gN2-pph zfwBn7umSnjkW4z(B{wvFrNnJnMjKD~S8DgFj_X{kAfDBm=xK}4_CbG)?j5yZ+9u`$ z8fbhw-0*ng+I&bt)f*$i`~ zpJ{FcH2CNWMf63A@`xR_p}l>aSe5;64fYkM6O)t9fggs-8rHz=S_~81Vzr08+QMwK`*+i z{I=XQ)4WkXRrh2kKpP0eO4z&9V0rEO^bKWk+czHSx|q*cH@Sp735xy_nj5BK48$T$ zfNv5wF2d}D=;NfK+`J;-RzkFuGS1f1>xnhy^N!NGUYqr5H||8xlCnsM-xYDslguGp zC~zy=Xxvb0Yf5R&iGGEjlMeMRyQqGNA&&`c(s$>r%~a6cQf-evRF-Zc2KgJnQOo_< z<#!9oKrdsN;a30pblb@6x#ASF02j*}uKh1^bosSpI+#@NVGOFtvhl@;$5T~GY%rbi zh=pg}wu@b7UQ|)=e?$oF79_qN54k1uc4jfKx3t*Zk_aW7Z*O!9Q;rWPxG0_RcW&1$ zaWHY(pz#(d|JrBcPv`912q+xRfD1aHxX6rT?34cWESc{e`*yA4-gw^R@h7Riw4Wy> zPtkV+=W(-W;qEz6p|MYHCTPj&5x-p^sqHcXyl@6uONn^!J%{>OclFWNF45kyPh4f) z)0guUYMN5kl1*w&&5Xrf*xV?57q$?6h{?jbVB$4Fl;mapxSc%+afF0DNunsOZW7X=U;dw;yJv zuu*G;ZD`3ce5ySa8#n2$KFE$Gi4G1T?iIcJ^3|}^Ke>$9s>cOo!6=NbB|iLox8O|L zn+qH=XuJ^Bu+(lKKx*DjS`)Ri=NRzf3}eE6?|qGs=^+TarY7y-IE{lNp>AFfFBi2^ zud5V#A^r!}Axnh+V&-7(i^toAA|=(mJ~jqKZop-(e_D*-IE^4ATI<*XIL{h?q6iEB z%@osj_IW&ys&$2esw^qFlJC8bZc7v&Yh3g;F4=wRLX6%{q`sm+x)&~tzgDVrctBbx zFT7A!|1A~1lzKV{{_mOmz_zjY<8cLAw_RAJ7xzg+Ho zMSP;Lp*`kQEy_0IoPIGt1DA9;f>mR_L3eBR#eC1 zcD|8frM|@aQvaOli`jcSeO*Tt)ivesZ)m@qQ`o<5_)Bd%2|2mQjnn`VuVV2KHku(h zGY)LvK~OCj!yM?=wJA^S>A_+ui}#*o3~_H)0Z@vdh+bROdFa>U`tU~(fI7CN zK8GVmIv05hztxZW11X?$vpDOpMuYL4{MN>#Lqg(uDy#0D#Aok>-x_rl-|g|vsA!aG zmRl%$DQ}R&Shb`|zoEunNS=;6ZAg|bEtP3GhTJO+o!NHN66tZK{vfUdj)-cezrs0R zZ})7wBlVSXj|Axk33@t3KhPI{;yw6}3G#*+p% zHt_}25*mH^_`)2PTh1h3141w?^oA_mrw9Big@WSfipfUNKi-xda!r<%l_wr18+(4G zc>rYu_D2J>J~^@AyGa`Hg@x|7pq@HQ=krg|&GQT!Hj6aQ-Z5(wt_EM3Zj4O3lBRH% z*CMIl)sS|GG7K>7y&c{7iLTG66o*U$z$ge^+h8Sq4Mlo_xvKIGfE9sc(r2lU^iqe` zDVf8K=?0CL@?b}-0ar(&H|}|sE|N73ij4Ox;t@>Vx~bQx>mRr49=Ty*x8}k&pD-J}V;wU|{`rFOHC1gbadDeoxA9)xL)h)} zTG~tXA)xL^d5^KOPtn0^bswsn8B_V7d}!tCk!YoDFTU`${FlW9{HpOU=-0wC3K?lW z)Wrp%ar^(hxTI|{=N>uP>Q$t}{fnBe$4Ux>bNutkhiJIV&iKer#0V`gN4njKL7{N2 z-5i0H5Bk$!Do@7ei-9{ctod*TJIe))1L3a1Zts>lb)!jDg z4X+reXOHmF@r9~l5!3K~z*kzv%-9=YFR!&EwA`_4+=z4+MDp;cL@bKK9rlC?UEdC1 z%0if*uJe(DuFO#!WHW#w06TQNb`dx&~WB{702>xX)p)` z+B@ajz|ypW08+IQ8-YVu&Y|G(-Gg8$G*6{+mf~SH1O$k{HH-CA>0~HDDY>)7R$+5t zA8%I@dZE;JyIsEz=TMh=&a)t8k5|D-3%u-$oTS^{#=Im3tk(zt4qoGe4Dp=~b~?B_RCBaMZu) zdf=P6+nlr3#Pv6qW)@m7kyReZ+w(s)y<~_D9J_a1jQ?@k$aQltY;rGj1-vQ^aDd@+ zuhw;HC4n3At}e-+Z_?h#LqBcpBIw8p*VW0mA#cG(*k#lFGsr)hEc31f{qNAcOn~5S zW(NQDJFI9~j1E-JyWYrlS~g~T_Em5pJii%dn&VIbf4@4x^<3dcK=EIZD=n>~OW9A> z#E$WyHtf_Ytg z&uI4k?0*dRu1Ti6h4UO4Y_pITtw}qv0kY99Www+8!>KwftA$(k^K_>&mhLc-wO<65 zk8+=MRs^j*hOfVj^Bp?-7WM|`>`3o!`)B^BN z>qlREj)K?k5Dey?cDad_{l^ecUQLlFN4B4XLwYi&Lcp50#w%OByb2avk5l^_aP{>) zd02Ztcc+9)+`|o@v=gGeJyGwLvweJZwDbxVAh3~StLZKXuB?EieX_T_&SmQW)2q(z$DnX@9V1Y8 zuHr$=mIy(B5~$}u7>1gV+xitYImEH*f2XJZPW2w34@@j?UK3wC>9s5?V6602bAR<0 z%ju8ip={xI(4-)n`Wg?3N8i=zr)f80#V$V*oz)Y{e9;**)-o^VvbwlBu*wr?)D2hZ z7+k!pM|}zp+}vECz92t>CoNdMf`d*oWF%@ zX!FWXR53`wH)W3zP7v!!TosHrg`P4RDR6Z&ne_AXcab=HI4C+0S3&3%w|_mW34wXn z>AxE%S9BV4Z%`lA`9V@IOuf|h8T97|n`5I(2U$b{Z^*PI0ZrlEC0oBvPyt?3GOh&%v1AuX!923k+qMIW+yP=6c*@$c&;UQZz zp7d6+sc!Y%AhY!_*U-=7i#H^PzhCZ4=jT~P)%7JV5?lamCO14z!)o8cdh6?y`U%&I zv5)yt$^+kxC2Q)QGuNKI!+z(1h6*vAu*gK|>dq5^UZT_(@LSDnh^qt7OgE>v?O||2 zul4&ed4Kp!!&{ZO14*4cd3uY`!KUg?AgC@VG9U)~QtqAR?MaWd@!oud|JPSJU50K( zVBQSZZ~8|Q=?iNh=?u1Ov5lS%O(p_CU5gjor_n%=Va#+T+d_KDM*EHEpSd)3k-@!v zZ84J;goeWJ~$Jf^~VG8Ew$(cRv{B5T>t>+3i)Q*ozVy>HHn$~M!*_>in9eh5< zJMB$K-smpmk!!9wfW+WrqPOcYfA6}p;|>p3>&(nLt--jZa_Sq=XGmdE7dJkrnsk2!&I+&m#p!dg-@A#i$MyYI?JLiqN&!+Ep9httb zGE57!d>C;fvI0GWIVwlZ?04pY$EG`*d0E^%e7=IqaALie9H_Q+hTjZSrGFK+ z-`{NF8AJ$E%Kb<|J-1778#udfrOrpj8~+j;sG)^{#?;?ch1HT*)p*3-y=)0D{p8hD zn30o8v#Noz(X7bYXr=kdakuRH3GubVKHS=Ee{w8z5?zi8ZGh#34!`%5NHYgJ5TeQE zarL%_MB;1h(g3CIjH&Ju<)8cDC^06n&;2;vId#If!IocwiRIIbq5m<2W9*bf`>VWr zGa6mKBVeb62k3b8S@5|fYM7u!V=F20`&$@Mn<)GKoENLd`EP=Vau0G{4!gCViiT8Q zev`i?AC_t}>FRluguP7{u-sv>0>{j(17q|%dJZKXBgI%}uRr6ulzb`=&5BZ8igUj_ z2fxz69vdc-@5NR$aT23@?uTy5jG4usCzqJ2RaLQoW;An}?2n!0AehHVBeWa>LO)Xs z9-_@)Z7L>FgH+{ZSrUU7t2pbxHA&_4mn^CbDP3@>qqu1>4;AbVVc*_9F#CPDVYL&y zz)N-XgUn=WvwcErISGYnLY4ZLvxg`gR6R=a(d!AYUJ!mZj5ippU)YcqdWvDOJ#&Fz zYH0FRJ^W-j&EMtR^`pdJs^-^AZ^+F=;E&?T#>;EbMU=P&KfLARV=EwIX7|r<1DZ=d z`|pB{R4?xpvk%Eq5?2`-d1}cKc#&ul1`vRCq7Gblf8`W!jcu3_=pKz{IsK}^1HXCZ z2D=nGE%M@EBgk_I=mf+C8;_Gqtc$l*-ZJ~`lHqDU;nA~NfsvLGJbAw+e0x6g?AxIA+Tx8+H6K%*hATU>?wBd;b%-&v26OI0^V%&>%TcZ)yvPYG zuN>HzuoW+u=)7Sc6?-}pe&Z^dsS)}r= zRk1PTb%w;?o%7n?Glp4*y?=fd9T2@`=KaJt8{a*VDSM=tNDR#*QmqhjWYdv8TZ!%| z6yWN@8&S+nNF|Z25|CKT%J-!8Zu8{g*;b#hjJZ;Ci+4ugNaH~+hLUUH`=D@?Gdc!T z8%cyu>DHqt(ZY@YlYnwnZyPA@}jKpK(Tp+-ING40OJIz_Xuu zoYSoFaiCMarfJIzz}{2kX&RK+ukf-p2xtHR(07FlHxvjj&*@ZIZiYN>e$}4#>r88> zgyjX2@)bs(xRWGkBrbhAR?f2sN@P=cm@Ne>&RBibnpHG-o!#47n#J+`7dj*NN z5e0*hCD)IV#+3xOLQw(~x5F^CQC=Qcz?c$+Xdf|nllSbR6DQ+M<)EeIRW!e)Tr6GO z-DhK~0{8dq=Ht*em3OUWH&`V*6!bjL-)BH~RvBbS*;0jm8sO9m<}pZ481@qOWg=f6 zt}(jq6r?+$ltbk0Gpx;!Yj7{WmB~3YEdTz7^3uhI7ls#EVe7(YcZnG<>Y|TRS?Nj# zyjf%>1Crb}rvttvnT>Y;8#c%6duyh3Yqgudhe@zwmlv;tenkZ>O^V~={yr<9jD{l_ z;Kvp~Zf7LsZL6hE(fdfx@h9J1leU*(ue-vgz%FNWRT-wf3sm-H6k&dsYWt2!6w`YR zgaj7qjvv@iffxtTZ} z+0NzmFA@+1>dVV#Zo*VwgVA+5(!M{xtXZ19OPO z9PG;tJojx-j#{NXoDI2!MjN71#R}aDYPGsuHlrhz4Of3GIz?bq5V@uin!H3C!)_Iom))p?6jE8DFtFnjsg6d^=+i*y+_N- zF7GN2S_;PxuO5DN2yabM4D?v@e6V`&qz1l1hCW38Q9JI6N55UXB#pR82f^awJs$2G z*VT=^s%ftePJBbv_^b0$EOE*^&f0q`;f};llnXXW?YJAApb4rbwJqehm0MO%;Ir3E zk_4aNhoUcbUjn(RM)-)46yTWWxsxg?6DzAWIMIVgN5lV5GkGf_Pq8K#T%n}(SUF*j zGS-x*16hP5F}xfzV>?gQsH0Wljy4VILc!C-YCJkFPx`cm&ZWD&$Z4autpAX(wB92k zR2S<%Ty0%D62wzCymo(TmcLl{a&Ps{4=2SYj$<9iKAFdsonsuF%wwEm9?tmu-rwIJAdeo-x$paR zy{_wdorBU$;7%0nugX!N@QL)fFFEa;J43}JuK*;gpr4y{Rrilu4qKvJPW=G7}35vJ1N$<+Y;S zlM>DclrC!p$i=#@BDLpHZG_MUn+bRFbQ|D&XwHf~&R=b*ALEMIs^Rvo-C6H}SFvC9 z5cKY@Jvr7@36jZseGUb<+uzDvh5c$j$eci{cRP`Bks8V+qV4XS=;qS5qxec|-^jac z$w}M~+k1~JC&fvt`Y7tHl(0o3uA1YxwpB@rSkGk}OIZ}A?a-gQe>5lXIUjzYr2BEU zgDWN?k6+Yji!_4_E1xlyi4{;Tb{$0Dq&n$PBsW}vvl!3T{=p`gm!cX<7v(s%-8e=L z)Tru;g=}7Lsfqcnv2js&{l`VNm#T2=+mO7WUSy-!wICwYI=D|neWK+iT!h-WsOd5Y z9O8{O*)PU6JU!kkz9V^w$E%IwUC!n zN<#wz5T(wcnd89c+ecG)Pk`NLJ1p8VmU z9#Zu^;sJr|jIOU?d~AaEt1xmGO-U#$U2hLdRz8l0e#eqsz6wI-v%r!sArr8JBP_Rl zVGdIZYgoEWfp*1DKbn8=jQgDlnOHj9}!GA12 zccGeyR#oMInr-~(V{030#;>^*$?ZjDt=}t*VW=*m_3fgyCq8@dEk$tEtba3$R&IWD zhfZ3`{>uwE67a4%0WBs6>YZ_(rz6Z+W1BmJadsmM>xg~QKKRjz0tM(IBIg(o#!jC$ zHH!M+VZO}lvtjb_aUiszLnJ!{IlAo6Y=~zA-4FEy(7!?of~8i6{$tTpsy>D&FK3^7 zh;xSZ=f|bRN>k3e{L!A$uP2;6G_i0aJ$~}tcm`qhIKuda&Z1!wAfCTES(14R=#{)d%57gbQ{iJ_-)$Zo|RXINRx@``ER`1uXty%u`a^c!0D~g1eN#( z#@p!umK!M!?!R|8jXtqr2X;n-{}7Uu-~3g0%i?>R7WhK>rHVrd_2;P>Dd!gJ4AB7U~t{~}}<2Ru{;~(F*Li5cnrdn|x zXhqIU=RYBj-453tnhOs?h%l4+{r^}{9iDBCz{>v0cM2$G(o-f6Xy?EH)+ZaIE(}|1 zwMdVWL$KukBq!BZLs3mH3QJd4jUbzoU}>H6S&7=az!&qhBE}UcMV7;z_29>-pgbPl z`ufb;AUc+9O!Yq&yLzL@L+D$wdAr|HBr5FRv%-3Tn0fUeFquTMivWH&z^D?@`U0%t z5w|Rm9Odx7r{X?@@&~I*$Lr5BqF; z?RKmJY0*FRYJckGc1%`u43PYjE_lMo@Cop&;lp@;+~f$>74o)bq?h?BOG$qpPK?xfwxbrYi?YcVP72EitQDqd5#%p3P+FWxITUO!t^Yt!^{STiP8qX<4wj#on z5FNQC@$iZkBXkg~Hw^Yfl@E9ZZ8l;EWlqlMOFZ*4g2fP~GR zZbXyEm=b^7HD3967T7drW+!>Zi#z`ek-VCIE%CN{h{Is8n~z-vO^TWhnrgsx%w3~A zR?7pCW2h)SzUsHX<_xqAXoeZc$8s{le_Ic}8;lI9UNL>o@(qT{fXkFmuQBSf^juj7BTL3f{Ioqy*GV1I_b;Nb4an}Vs?A6~? zxyS4&Vx(IanJYA7@sYX;MPglkpMFI476^B#`m4m4OWK1DLKqc*avw27_BX1mqxg5Y z^UafHbdFb|xnGYfFV{CmE+8}Q6FjS1xu2MtrN2f>XPujZ>I1f=2D%_+lz2K7h+-AN z0Z-~2m_nk~??bNE+#?6LN-wGKK9mx_uWbwgWsoceX6N0{7b5hQIg}S@yhdClg_V8>JfV`clz=@epC^_rj%arj0~2g znsxfdh1tnd-fYL3tt{-#ohSc0)`!`*gPiIt%h2aIE^bMv#2C*+Sb%pNS-x1j2hhpe zL0qX!PQViIyvc-2Xb%R3z@_II-jnUWI^8zPk^YYa#G9Un+g{NGC1g4Vr{=9BR{(3$!qUwZCj0-yIM91nVd5T4C4 zy-=P}hykc^o@JKSQ?0iXXPZ#PdX>vN4nYgoAIX6Y+XjEY3nS4$fC|gnBt;QeKi*x~ z%3q8-UmkWvrIycs*Scy>xvjK&>+0oj)1(XkUOG_hkZS4Tj^1M#HyDLj51B^?wdA4D z_YD2^VBtSRa(pV#hyhjmpL^6IMc#YqS@nrCkL)G;)hiz0z6pLhiL0yTUZ0My$35j* zK$%go6xM|cNTe%>97z>eA1=R9$Lmv^GIv)9-!QHApy|lkVduwZ-K%h-GSLjfv=4yc zhf~bhDurFgawG9FLZ+|xl;E9j-aJ4%xc5VvGzEdu98>&k;yn<28=`tXNM$bv`j*zy z&2jdn_qpH2qIEjC3eo}bMKc!ObwmxCgVSh>bip6*CB-k*VXZ6(7K6JX=_WMD>)rin13Tv=W6thzFNm?4^u;_3I19e>rhvz2@F z#f+nm^G62J!8SkbyZu%EYaf3235|DI<=Gn>Z}>_FDB*)pDbxP45P{O-Gq*eF^_#|P zg>d0uJ8fEBk+15kgzIGF^GHWEWdFSA=M^vL;-F@!(UY;{37x5LaSPYOl#_bx3C^OOGr10M2ZfO}Q8Bl= z++~l2!K5Mom`@SQx2jrZ|8?c@zN$!Gvtuo>RZ5T2#gxzZtW7jeGtXg&oS^@0?G;5T z%j`($daZf32JVRbwYY#HXLDVCM2%KuY0b-iW1;5omjd1<7n$8vj0Lo=$pG=0KuOfqoZl_92JvFvUekN?lcla`wrDGCD z;6k`=x-Lp~4n;&Qa-GCo zP75A%lI7Y^k?FQE0Pe(jUb$(sNsg#*4TN%Ah1|<6j%06)E}O-}E24I_IyONa=TNas z{@}4-j?rL6y32$zNyc?yE{^ifPCWlG^u{Gy>V4fnp5D%rJvWx#JiG3lr;wwrbpn-n z;K6su^;&U6N^u&@YwH544GV3u<%+4X4Q!oY?VP(fEb|_EVQs|DZdJ`UG_|DD$t`6| zqo>~`Qm{00s_P!=a^gH&G~IN8a1|ESs+O65_^C|JF>CAC-&Vr9039~ysIPmzw@dun zB~u--`AaZV8TbN|Fn5_^mby3;fp5k{+=k071bG5^(OS4(h%g``LjZ-^;l{rATtaN6?18sEK)xRp6b6p;HTVbkQY=R`JFUr|ycK5sc zGmHONE|&M+^>jTA`@7I#P^_-F7Dp8~`$ADa=%#v>%)r)39ni~QUi#&o74k}m70yyffz{v}6y*uzuUS~+jP2U7UxYBa?44x_ z_(hqm@P8~H%Bli9EXVKUxAQ&+;wof!HLEzPq!aE}pP0+!VVNFh{7(UA0IKq`=$c4Z z%jnoO{WvzN%Do>-Da^~mqv92Y?!y_v4L(r8&Sc4l*);_lTk-os>W0cCHwWH(Zb8I> zjvPqkaw6HtjGWpLG3Cp7OVf-!$p2ZR4s*)OZLkdKU5TsGGD_C?a{@NKVh)c4JoRo| zU$GZ7oXObM(YG@8IY44MPv!7~X3j{8fmNH%KUGCXsI1s-wECFDW|&l6Od-e-(Q5mi zB&>a)-WW=GRTpZ2(EpV3U`NR_$aP1xgiOK})}dm7eO->7>PRpzU6c%mTv%bYhbt<`kUhjBLWBGvqb_&n?o{+uBgJEChAw7#OENy(^^jGbD3HV9FQwm}VXn_bp zIAE{BP;DPFN7wDxfqY+~!G+=gH%V)GiEOnaJ~J|Ah!wwn`St^bgq+HZZL_6OGw zj{O5vJxtHJB+6%bAspV60tS{IlNC8=XZV^5+~dO|e_Ed9mvgz6pFYmYaEmdhu7S^V{Hg`#O~8|0RgxUa|BTQbU-vg_$xseynk z_%Pyn!$^7h;^c-u)+tsn^o_z(idOOEr6iQpC&tXn$$Vx%q6QNMmJJ>ymBJrRdNkRV zx}?MLa6YT?*?JoHC2?Gun9qz=UgPl&f zya+A|F2i=t{_+iqX~b(waDu%2Iou4%=1B^AA&0y}G60yNBd`S5&nA}cCJd1&wti#v zD-kF95fWA(NV$eF^@|CL#kW!_?E$g#2{sD*c3T8$(eC6_KyckPaKB=H&g*1h+RZk7 zK@D%&7xeC>AX0oad*i*umN4oA8aK=b2r*x#;Rph9fRyP}3VV29a6|Zvu#|*rgbz!& zuJ3Y8!rcV3^WT6znaLquKSC2kwOf6%)UZb2(C}Voq2GJ3AT}g8rN=GnA5VuG93_x@Gd}(6aOb zXljcBpy>skPA0q@P`}+@!6h$h`{}a-gYsoakCF1#)KI8^u%jD<>t2|YRnzsy&IJSW z(SwWni&zdlEJHC3dfORK64mL*d|}U)xQeI6p*&UsJSQ2b?dM($=ZdE}{!Y;&{nN*O$_5sXpV7&i zw3hu_Rdw@wMN>LPDVZEkBd3I21W!ITWdUgH6FF&?$LCWuYWd_h2op`yvV8-9b^ z2p5&?-b4gVX~jLid5z_-|LvHpy?F)VTr_nDGT{W zmOgvRoGf|??r|Q3uC$Os6BPj#+oW02I^tGBx-f8y>=&Kroo)cIE#Gv%9DXo4JfBy7 z^3<91U>N1l<)PwXi;GL!AnpEg%tr^Kods;NvI=0VG}Wa;0uK?ho$9@w+rdfYr!K27 zvs#jF&gI2^E{v5(-Kupa)2kFV7aE?wyE_z3mLh8oG2VX-Rwto>W5(-rTo+Tq%trBT z#61Ig$cVqP9}eAbG*Ez~Eaz5fEuv)1-vDOG+7ITsw^>#GtY zFBr4M%R-2H-3ybWplsq0Q!||ez6}?kX#Wl}COx8Lg%!c&M;-5JUc<@rwv+jD1#JeSNszI+HNtIf@K2r=6rL z{bAmri%d2_7G1HT+7lWWEtEr&MXg&q&sr=SOR`rWfihCLtrI#{qj3Y+8{~ocC z4olaz|9+Xz2p$Gidq&YO$hP2s^Oh~9=8a;0PD8T2zI0C>_k(YanFpVQ?gu(jEc_A$Y(S^$~zBBphazH}C{Wa)3EO22ZS_ugL;MZDCqbn%Tg9U2bFD1o{7`>&( zRhu_UFEet$L)@~@uD|OAn=^7D_Rup_lZBO50x$gTM3W^?b{G3JQbk4-=SQA)v3gN4 zD_-A_*mE0eAD{i!O$zdUn`cjZBbjyr=DASV6{Cuq6KJAzB3Ih50)=0d`=C5)@s`@< zw)#%6u0Y{WdarW6G186XYcEb$X~A2Zwq~*GIQ_&%@Vls1P_=D#d*%dFh0%tTiyu<_g*F4N#vspsn4W}7i^_i{+@EECYHu@b^qypPn) zOY*?y2@h-as@*f`v|j~PYKLieij%ivTI8sF_eZugG(~FC^W*4GMJ*lbXll-bk&wyQ zDzA_C04zYM)+J~4>f|0@Ss1YmTHPF*i+WT5OSDaAw|4D$om`%^Ja^z*`_1Y|riT9v z;}d=M<8q5<0^Ufpf3}wLQRY7ugLAaGb_%Mn$$-WMtYOERo_k<%$E!WU98gFS-(dM1;Nb536ZR zN+io`KKR#@gYz5*XPPF?+{sJ4MejRjta+AyAm|VPO0`NgUBp%=1uJ1F=21wryW#^T zK2SeXp$F-E27ji5vEgR_FQ`>9(2R$|{c|j1Jo&s0;k+6YSm1L~`H0XdY@5JjxKj2- zQhH1A&(4zB84KZuuI8C3^GcQxmo%7Lat(zj^#4af07=eKa5_ghE(C6>;p$UsF(GXA z6nF6b9uczBD-}j(n{nFZ^%PhSzNC{AW<7y?h4!P#)TkwuRFYagv5kDtYa< z>=@fD8_swfbs)${y6tO5gM8e#M5fs0&pNCfpoP^KV~Nb8L;fBL*M>Fi-ZWLN!(70q zjbY#s8|AO^qklxJf)M3iDlwDDtd0)Wyoc)luJOF&q&3al+`atlG(!4}Smg$ysjD1M z4SV)xRwbv@-OTMv;GMqg=C19Lnq0MY_(-CJsdJBY5|J*0WK?TMiRZ=VhNnF9Nj!{I zBNFo8_8Z_mI2sM_w0<(lMv$OygWCyYgKgH}5yB}Mx-C*Js-P~+EJIhN!6C~at=2B# zD85r^&Z)NFypyR}6ZeoZhc1|!HQ*5N9jmRV8FWZ{Z5hd8`S}}6)2yXYZlKtlL3j}W z~w@jR#SufiKt^ZiDw|6e)7~JZW&G6noiUVqW9#Z5|cc1?Ja1;f|;e``u4Ql7E zi-Im*YZl*<0NjW!&JBf;@Ha$v_4bwY8)*$$FGqGHW?+kHaO>iyPtg{ zEUwsgYd>=xLluGui|sr$f{Jm-`dnPI8DpPPGX3 z5s2C8YgRiRr&z!Gt z(qiw*rmC*%&7moFUisL~T@DmLKv+bDnFot9a(p-Wo>5f7gm+yhc`@lryZKoui2I*J$RS8=57k$< zsrx9|Uwi7^57cvrvvFaW2?d*N;o=&H!Y)3rX9pyPd(Rrjh zVz@T2t`ch}3!{|2h-n!~*@8zpo7#I=Usv`JS=XQnh*o2;5+Qg5d*QvX>QkD3gu{zb znHo(G!GOJ46((1WqF~_L^6Q~0u{ZLXx=$7@ediD$&L77ZKex7JhCwd@X1ITGu~>Jb z3(g|!j9=(kNPCMg^z7Q(ioP?k31S6Pmj2&+bJez{r~LwbQSu{br7*Lq&?hvT0iV;A zMvX!_Gj9TpV?P8=3`N1EOJQss{^_!f_TsVmF3$@iwJ!8e%?hS)v>wWxU+n}Mlv2~D zH`O+qq($$S|Cx?Z`OzW#=jfxan_rhVOlXpH@fW@keBNZ~11L9}1sH9te+OW^BJk~iHs@Bwg<%T?fO&&%r%a+ha_hR@S%G*{0#mTjZyaPOwR$U7~xb z&8os%F6ST!{G>Kf2ZT)2^a`C#?X zPc1ZtE$-`ce1BingayaBYuBMGx61CXzH^mB8j7r|zDPa@$&fBC^lUK$0{o zp6IIS4I4FfmssZs^bwD)vOf1KNWsi9O_t{bpTSv`Mfu(>W%7RX0&)t&g8Y-E2#hHQ z<)M=YNfhN+luYJ9v2RcgP$Zd8YVb?1#B*A8hY&n7v!!`XKT3XG_|v72n!4!82_%@a z(1G*KY|qH3knKXwf;H7ttb4;K5z;P({30FrjjcH_Em$#)Aub(p z$z>$YYq^N&BE6@D1p~7b{%$a^Z9Rn~H`=EuH$(TZ$wsTZ*ay=8C=g%{e+JCqe)FnW zy~<~h{=>7>vzj-QM;@)SH zzcXNHYXKme<5)NAq$lg8-9W0%O1v?us(J|#I-{u%8m0QD)rOyb-(Djrelj3Jdq4n+j`g zoil2DI=}*XmtQotwPyT*=KJ&HnO(Kfm!<&#|05nd0+}j)74!7o^zMb4E6JVizqF_C%+h^;8$EiyvuQ$qgyK<6BFr(Q;3>>~V{_JIYMZDh%S`wnTQ--hrrIR%2RXHR zA1py~r;9$Y*xjp}LFlan-)UWjgX=bFd)wP_E4JqJ%Uv9B-SGwJkyG9~L^JI-q^KOO zXOsHBVf!NR!FtoL3L%?9qT>X5>Uv(5U0wOdn=5@BxdRcLDuG|32Di32hMBS)FEYjv zdixNnw6iBQ0MRL@c<5swo|=~B#f%aTaEi-$1EhI2^Jpc?kFUoPGH8aTIL$t37WMcp z*VQWEbJO_)otHE_2wIpe8K9&LI2iwF9&;-i`|FXx>u0*hC&Xn}bGOJmf$>mb>K%I`_(y_HZGmg)ok4m4 zAPMvnW^r($Fa??eBI|)RGFc6&o4#J0nzP+aZ@kyb7I33p(?O`j2DS z@a_&nY3wIC5b`uayA2^6_#Z}Eh2glS`q~gzfC|J$hIR)Y5~Z}gDM4o#Toj^YLwo^ANBuV~tUq(w#32-^C#w(lDs_9s594$(>u z9>QE6KlV^nSSQcF#Ew)f`Dvh>0L-T&#V;M($rX{pYvtg;NHJhpa}KzjI%@k_;4U%7 zA!zk3D_g<|3Md-H-vmf?r*ATljuZQ?K_ZhKOqIr(QTLqcugJW!-?}S*UJFPN{#iQD z=QMwE#(c&sn4OZ^x=p>2+CI&7a!%Ka!v2UlsbnS8@KojlsYd!_3h`olUkiMYiO*EK{9DktS; z-l&sxP2`(Q+gx?|-Q070-W2E)W*?NL$qR_Kd6GRyHq@R1`U^A}6-gu;qTQ4Qk0x8q z6Y(>7cRqQa)NqLSqk96RbQ`>N?r7!UaD*xQ)=rGvF$Woit1iq+%&|3*m#|+%E8^NK zQTXtB8oPzwpL37rw|(RDcD1e+a2t(fpYX-v&tY8&Qxn8RcWme$<2-3GC>)C+uRGr{ z@G1{@!0Y~6oy|!g5x4v;^_9bK@3hx#l}qr-afF%5`cU-$79dj%qysRcfbK;mSd7;& ztc}UBIhskB+RC7miPt#T%X-k{_du&Nhn!G##Z!)m3Sx| z(fX3fIs;2QXk-*LIe9J{`TnGKiN88i%HcS||Ml8YZHr}gfBc+EMCw_sQ0+hdxDlu~c&yl*e} z_Dhf+t0WPyqixBFo>%K^J{$Lnkynr}3ndN(14Wcb*(pzsKvb?n=>y^ea%~ahwSl!q zc8QoD^E_sEi6*m($&9$)yLFpe8$w9OUQ#}L)p=5yZVjTc9fHxcH}i!fXs*A>!GDfV zIfB^Rg|h`LZ5GAxQ3pL1D*V=N(kE8(;ajeyar=J{D!i(kh?wxb<{HoUs>A zKHJ0H>$Lu08*Q;iQ$iyCN4^|}yM zNU+7PBRmacx1^=NGdm`#lm>oO49y9NnBPDLv+7HJVv6be7tOi|a7-MStJGpHo{4=9 zD~lAp9ocDeg88zZIAfj@{HHdsNjyMImCxMjbd|8 z9=g4*C!_dFX>kaNm{0w1B^6Pb`6Ju$V;=KHmXu=y267G2fEcUV{g1^KhU!NMS|VOk zcRT##`-Cdniwz6z{}$zbx8Ywj!zB^}EzBnC39AWaPpO>ZsITnzG7q< z>`E@O%W|5L4w0QxjtM&bL3_hnVCA5T`sh4PRGu;zf0^Ygz3cck7ahih45-hB-NHuj z>;ov3xC5oJra<3$qv$*9eV+ML&qZ)p0q!mSU45)~LrnZl$C*`CCk) zT}%u)Yit~6l7}h~^B7RIERY*up8vGix6SP`cXM=epB4jZ6M)b~)8AqnXbvg0TUPV* zMt58~TWSvp#|Fv{W@lv8(6}POK&;mhS!Ux5I=6Ya&beU0ob)fMZ`rwMy(Mv%C_F>_ zM}qzWWN=%qMH66lVv5?rv=`k`?SetUoPzCdJ(Qg{COgcx?Ok41N4AFtTAt8F7GCDgzA2siCHk~*CG<4VBUil#sm4TWKwMoLH$K$HpT?i_y}HjH zuXtT6bL!mL1clTXq0k))?nd)QO5=0?4?pgOb~At(^~)Qq8v#HnE@XGceQa37@m4Nc zijCJ?h5xQv|I;L5FrFt$Eq`_+^UI2Q9a}n0aWNJpd=Qp9`>1S)rbpl5o0wep9)O_~U}#=@ zd=R4#0759ohxeI7o{?D+$#1U4QU!g-97K*|+x-CP0;Zcz+1=vF0^7_?SXVdR9Be7v zwziEwG^g_n;aUVKMxUE_$g*5~&eeb>Iww(O>oH`IG33c%c~j;}s)DSktbmqShqZU% z=?9B|?S?AN*6Il;Eubp%R#K28PSs9!OyfMFN*2KQeVeu(a`wIQZJ_dBtj>gUf`XpH zJ>w7O>CNNB3}bA1fLOX~&v*UXqk4`F>4?R&q0<<|IY-Xe`z6))w_aK1Iqv+6x&N){ zV|_OVyY82`Z6dX(4`z4u4G&wj=MINs(5-!;WsDguwv@=$K|@4BF3O_yEqv8Am49I{ zRbO5-s$xb2nL=>gu-}lHOjL(D_T1ZQ!dvjkNTNmcuo$KxblC`F*EV^!TRYQ@Uq9?x z$^}IzE8b<8ios#5@)~4Q1)m3Pu^%lUrFSGb|SN>u&I$D{Mrrx^!tE`)umh|72@3Xu$7HfegkX8e~7y+pPDU1b!9TcH9ULJO^Y2B*!_1Lf& zoLjP0dV4n@!UlpI_e@(Smbq zw(r4oDlU6O(slHC$a%Rr3A-Tg`Lb{^zMoJCs{L`Nmw1>7e8NpCdf1X_%zw2{6J9x#z zvH2Eo>2H)d>yvgvoXQRKW-oY9+?}8bby;hYb6tkYVa&=J+3)_AEYNh#Bcl_wy>o3xBPGB&ZK&Fol3Q8 zM+rX|->!sun)fb3Vnj!NApxT2NTIT_a+iI10FO-EP#jfuD`hg6n~J#0St}T|&o=h` z*Q;Y`P#abe%ss2khLhuLs$l%geE#}v#MH7hZ+N*O8|5ZIG~5SxjM4Hy;quN=WLZN~ zWtL*IL0%{JF{%&rHAMk}!?KqdELBcy{5lc35!QI$2)uthr;XwQdH|b`vn8!(`-S3< zDKxA5qjXN{s~a~@lnp=V{)aA8M`#G_a((sCAPu$eui0hN4DSyI4G2Oy~j8pZ!LuoaTKJG`h`7d3mTTp(cKIU^feVm@oIEj%2`@v_nID z$laNKV=&10R5`&+5<7&W-$N%vd7jUbj4Qp({#1_BfT`ivl(TbmhC zrHndK;{9|Lrm91U&b)T_9 zQV7@+S*WDN^RT#%)QJ(O|3WJ(hOQpD|;Y+GKOMLn-#pRfFKCZ))mjnTU&roAMzoO36%@$~tN$#2Y=Y=K1zTN^aY z?!w3dH5qWMK4=(Ic87F9E?;|#M%rYA#JXNh(kNzRvOg^Ot<&$A+;g_c{15mHqZrsP z#2tJg%OV$K^uroBauB%z-JsJQT=7IP{loEutgc;IZ+>u^e5=HcE=~AM-@64 z*1q>|w7I)cyR6Vt&8Q!^mO1n$7K6ieGLQ(jp>P6s*?a2&kP*eP@ZhgoxdiR;H&At% zh4&e?uDlQ1r`|mY;D`{(LW=cQmWhg0b_K8kYhh5Brt})QGTK=zPN1fIE4rBbhMD7{ z^14fz7Y1+k5WLX4xj^*XmMSfYD$gp{QU8C2z zf-a`@HFBq@w8E4%42>VIjY(HR?V5vN!kO(XBr@+T(u?Vp-VH8%UZSum*H4!)dn zu-Ln^KDTZl;#w2A2os&DclP_HX$bqhZL6U=p|+GGUIlV_-PfIy&Bose>&z?ysy?Ot_*?*CPrh;b5p`Xg2uE!$v?xoJvy7}vPgC>lG zwWXF!Yf@>wKbz0z^$Xhk#Vt2sU%IRgJ{@ddZY^y3(9yeN6QF<4Bd)W2=cvwewo$C_ z+L1P!rlQqAaXIoJNQGa_8tF2)Yh-`>%&g3tZ z8^zNckuwAu+b3x$P!$Zoo_v8Fq?ZDME-EM&#qUAQVmY?r18-EDBX%N#ndLWg~0G6ts-9oAv z(F+Yt);fE{#lVLu}5C9u@r0K^r#jc5XIjBnt~_q0<`${t|z zcZAYEG*m$j)8Ns&TnpOA8$L3ZuOEfVKWmb{0ng|A0iQMk9gf?X?&P^6h0>U`I7$&< zUdJ#s5Yz^ma#*=v2j3yY8oJEtKRF+!Dm_BqGnzFiiuNy{OepX#^@YDk~{qOj)OwYWR)Gg@_H5 zXe?AcXeE99N(6J^wV;OYBK9$2z8ZM#nk*dBc~o({fM?{wmPP8qPbYjs%Dc_rNibyj1ODx((`p?3@~9Oh70{+%Zc}e+6;p2U zLV53uUN)`$n?fl}X6y6hZ4asCcGGE#$vC_Gzde#W1n<{(P)^xOEwfxx8xK1O&gT4@ zK;o;MwR4eBbu!N+p3v%)64+#0GJ*brR)TP@s5mIu2tmE+6oFC_BR7x!bvApphEN1& zpU#h);ub{oL*46U8-JiQwGd*Kel-C7ifb0-DgM<)XtQ`_nMWjiwS}Fo)I=SkNa~ZD zLpEc6q%QiYntLnx#kZdF))&3iA^guh{@&S7Y2=fkw|{QIwWuJ;k1YUnh$qZ$*tdTF zU=-iQa12!Ux894@N8BrTkw92V=J@s4xc=^vwa6@RSDG=>WFaow(+Z_F%Oi8x5Sl2Ue-h-$#{a()~2Mhet#q?8T3Pw)2xd(svVD{ar zq+Hlg^C`*L1zxr)%1CE|W~l0Blq(Rv+%ctDuIJUG+q`mYHn+nM_0>gX9ogbp=lzf4 zv!b*Z5pYQ){XUs5lt|5Q*3QeNv;?%@n zh3!}_8`Ve+NhHbcPBWR5H>oR}xj&BmEBiH7>+i?fJNM2Q{7KMG`||m0`O_zhHA>N@ zBM>me)#&eKGsZU!)n6n$va8tL7hK36inACA9(Z^3CSLZ1VnzB5(hZ+zg=7ti4I2&; zCvdoV?f4ey7!i8gov!INQLA#Sm6USvVcDj1@ANqZ_3n;J%_l*?cldM)MF=cMHC<@z zR=&BPmthqycBp#VDdA>m* zaS5cOi-Fxp_-2zk%?Q>9Jd$nYT0i7>#i@klb~?E_EvgNAGm*-iVT`P=5ENYk;o!Be%E1TCTd)x9`8E6xnTmPhpmMec`^uO{}}UNMOB z10ym%%hwfb&$$t*5qF1%Y?fkU4pL4({AvH$+rQ{|yifmn=&g*pA(7a>A?rgzxPf~`3+s{9 z5HbwP4+?;CT3f|bj~9}E7Hl1P&1F8%-cOFk+@^Xm*%QwIybV%Y6@rg0rYk_(s%jkC zQ9d#u)67#JQ2Q39iwUZ9G32v^VjT1ip&6!dDwtFJ^%!$(=|NPF4@&w z?SYvC3P%wlq_`%;Z~?8;C%Ycsl(?YOi;rn{m+Y~5d2C(;H+39?yoQ7wvhOUesT896 zys|Fwa7KxP>(8i?xqoSjN-zuy_>`M7!3nYbVpxllMZ}2)LF&HYOFb;P zi~JHqG{0v04PLXwniKId!mIB>P31Jl*hFoA`?ByY*e{Dw2Sg^{Nv@4;q&~;fwRY1S ziS32L2OdJid|7ulHaUvgsQ+iV%0r_m#GX9!1{(XS2p$(PqT47~qn~g_(+OPwHwjfH zi_Z%)ho*-|A>9*&8%~ZgEjNz7|5nrJhVUbStL~4{lI82g%p1-<^`KBF*)GUK)BJzJ zduJ%o`!5xtgZ>RrK&)0V|D-!Kq)vCHeuc9G+|E7-|C~x?sjla*K4;Aifq40;%*Jb; z;77Y67ag0SO!j-QMBusoyya#|wTH?FpKA)jAG6V3(dK+)p9R2~vWEz3aDn{-oxx7; z)21_n-6}_kv4T=fe>)siXO}*IR4kVK3E=t=jUhTKNTfcHlchYz+lRs|D)(E+?xE}Fpi3#G$<_$ zNhL%{$%#mbh@x~%r5PbTU@!#0LPk1qPn*L=uW>?cG#A469bKbvJQH|9}kZ7{&sO+D-hht9HtEF z0TM8CUr)(jcXb&1XK?f7yk(Dw=329!DoRGXJTv*;O#OrHSZ`~&m4tA834Tw`y|?s~ zYBk1?7|H;mCa3EmcquLWI^GajzA{-#rY9s0K?o)(e96^c<%&kr7`w~=)w6uoz_3-m zi_$TYJsa}=g+>d@=*fA0rm|<4d8pK<Z&+$`~T1izi_GNO&wA8zd#`k;I(tmm_;Qh7xbb8gg8+B^}X@e}SYUI`%0u zhrvMvSwliy9F94PpTCJ{|D71r>5(he?e<__DtsaCXpWU7)85JA+Hgn1;pbPq@NVEl zVZxt=snX;1mro<%T1$w_WOib$Gd4?4UYeN*vT}RZ*WbN%^*X|9NOh($;N|7DX9GO@ zZ(5tqq0Pke@g_T#NQG5SKmCIb$ z+M@MZT_{DNuUKYk686(@c5VH|q~yD1LKrN%%PZ|*OIp@)aXzy#ZV=r|FIf8P5t6CX z{5o1+JbH=34F%D;hTJEH9`IMT(>CMlhl@rgNupZAeQeoVj4NB}7CHAJy+A>KEZ|jerG1 zyS~<-RBT%pGu zZSm{;cNyrNzV4HCNXHv*msZNB;>{;*v;Wj)>QV=YaV;)LoD?p{w_fCus5jhvPt2Ae zkz=Y3dwAVQj)YZP85hfx-@g#4qzt?FGtnGwgk){&pUP8Cs$tku@)qgc)! zdIQNhgyWDcXH*5xUnnB&RO-r8+XKoA1u9ySakgWsGXD9!Y32K{UW3|uxo`_Ye=&x< z&3SIAq%FWgpWU9~YXOS3jd?;+>uY_>SaI^CQu`;D>YSI*mnds)|EiCt3YC3?RIZ2T z&=Y%L!9O1%J*Es(K*Udr3e$4a1or%?Ez9nFEl;jHC^5zdsq(6pU|o{wcWE-q*DRd@ zbvc5pHp+n7jUVZ{tZ8j+fz13ny1=o%Evg)G1zRaEbp1d*a_nV6K0h>vc?2urS6wwJ zIw^!S%3ecnZREG3@3~L$nXd-C=M*305^|q^C?pRtM+r2IFW0xVOh~z=?DkbL{N zof^0CL9l|?dll3eqzVXi_`rYnB8wtsN%oqi2sk(ODBJ1dPaoq~FXm13yxufRNe;0d z#I^<0^V`jN#Z838+iWk3MU0YfU<^@`WVOQ0^M$hU{t}Fh&aDX-Qv;tl`|5;!f03rg zuY3^i9@`$&X91ZfTqK zK&|2k1@jv$a!K`Ry!#vXwGkF(N3b1t4tt2$(0^2>;*8@uM@H{4alucV23$tDpDM`p z*gPxYsoP-hWiVx~Gs*TI9e)WY{Cp917Q z{4=RE)T`_y?awmwuwvPC_r`J#Gi)2HonMCN0s!@z1oWB7X*O%vg+#Y*THO1(FCOq; z4|bxe*g6EnE`3F9ijmpFu#VkXS15FzI7>C#7kK`(5}gvKQQQOUg3|HzT0`ctlm=)p z_*6O_;yQKrOl{e+0tVQeX@`%N#A#t;8qwU5R zkN&54CtIX$hT^2VUWd0hT2JCEKu|BBv*NEgi$Q3+tiazTWeWRA+OEM*m;`Qgrx16C za&1G=d!s3>XMs_DAaAy{MLCOX!SpjN%`dg3%3?rtot4nBWZK=1k2YM&Bn<`l%$DxC z=|!yZmi-v(?3?EGDpYT%u$20>%q!B^9Uq-=Doy6aEU8Gd17SsSS*9;0<@xTa-YC>B z*WpWEzF{P29PYL!qfJ~WeAwsDg}WlgzW;yWfZ=R8<|H22(-w&mnzaPKAB7chl0q%k zT2y9F>O9$AK3`wpws)<1`g*d|HlxVk>66P~h6g?xL@5QQHryl$OnU^5fOsYgBw6bjc4l zQK}rXnK@!+BAPBcq>)63O)7}b$`>Oguy(+cRoFR1FA<#fYUYR50PQ}1mW*s{?0J7T z@)}uXvfUl@Q8~CGPF2glOgc>N>rQW5Xu@aC9nQGWfIN+lA zmK;`9#v*I2xAyf0XkEs7xn+rxs+9h7+2O6zc-?v2^Y%fDj zY+8Xq5Gum{-(FlKGQYV7n!|a+U+kOV?8|qTr#?n;yy#TwQ!0PP=qx@cIvy$0JWpJd zxEiMc3V42ad{jcSVCP^@if)cZE`xW@jlX_3U@7K<&JMp%=YNdwFCRER2sU@=hw6uU*@XCfPQVf$*TW7VJeW#NAbTY{;Pim z=e3`Md7=hio?6`1Y5dpk&d*nNK#F%+OsAKN3<`izR_)P4m43Mhi|OCqLUou-^^_Jr zk3S0F{C1+?REY(^Hwn2RI!rUZ>PcL*;<(@n@jZ5f|9@s4QO5yTv@oCOTEV}kkW=Xc zzcTR|$u zqy&JvnHQmH58^YGQAJzV+yU@+$c>Bjtd+&v(%J2;4Un}hFsLlRquU;gPn@@n`{PM8 z#f=kJT1Jakt8{W{#r)f!`lrtRoIMR*En+!C9-NeZh_^RUea*{6NpVgVI(#Bz_T)v*F7sd}z3W4{EvjULgz*GNriXlY|J)SO^5Avz2&76I2Ccj* z%S1eNDInVti}kP7_RdOMx^QvNoNRu<)7trNeOtzcjAA~=+nU-)29p`D z_3PO7zh5gWQ^m9%U`x^FXNKd26KBPb}WlM7r{d)(w5065i znkRZ7!h2H}a{Fw&?3@aqKTyG{ReI3aLUF zbOB8ziWM$y^8iQG&M1pH%+{=OTHbO_Vz$h_DMK$tD8SP~yVU;6FQvGgLHYp!Z<|F% za7hXGbX+k#$!4TvE2FTR&(?;(9NFSlX60;=Xa%bgo)Fv<4R^#z&Ae-x?1|6R$;P(zUKF_dO0xoqHlp>wwN)xeXHrtQZk#CrSpM(O zo5V&)t@Nxy)cE5bM`|3msyF2JP+?cLB4ND#Z>7rwyHekhdk%Z6MW8kX@nh7mL<;8r zk}{N)Htc*mrCtWNSAR-r-#Mxn1AL>7J6g+-c<}H3p534qgwx2QOeBj{&+pB9ZYvQz z)Ue)#aeZIrX*rns;5V?^Rb3(SKRCi z=go%%`z~KKH+gbvHAZJRp?vYUJ8B(5rTup#i*{E~4)V!HecYqmtwz5noNVFN!$Ghd zptI<76>=6-c|Yq*t#oFl@H$~6(7zjeZ3ci@s*JaRHvKKsvg(nNM|^Ty+l-}_nIyM# z;V<8H^E|n)eYaD(g&I{?0zv?g5r~`WLgpLl%wuFNdz>M2=W>18%klUhqDj}I*(PRn z!ISfSbB_mqw3+nDW*iyLlq^AFfF7(N)wVKwdE_sPg}Kgrr_{q1Mcy}3MVVjsL=s*| z(v@D9ye9CzQPosAxolrHSDz2Fiy?^u;z%vLeus@H9`UJ7m@G=*uf~=D5s?^J5LVJD z&6H*C0|t#Rn4)*j3x`t`lbQEXV>!&=rK~m@q5-y{mYz=x%lVOPj)(MS+yRaTWN#N5 z^N9FGG{OHKa<#ask-A1uNo0X;rEQ1q?DXXLBE3bigna8CMP{QN1kCx-mkl%lp#c8l z))lMxwdup>Eupe8P-pkAL&6M~aSyx5!+I6w_==qZv{)Qj);oaE{DP1ct9}W3E@^WQ zUtX(F1a(~IDql7G>88B31*C_{igS_kB>U+edz+5@NqW*};uwRWjDYCK2Bq@`zJz#% z>Ai}3O!W?_Uo`EPN$DQ$U4PuUA{*l$hK8|S_CK_7Tt^4+Kc1-*Pfq^d=2YH9_5ls0l*F_kF}tR<^>}>Qw6f3w&G) z`gulEu6)~1u?(}k+Mt}|;`OLMCjAm(i@iXO?bU9Z&YRn}a@t?~MmS@I-BsrgnQ!M-XNM{OpK(W6Ys@Ex^gOFO zNw{YD$CRY~*j|yDNK7LBM-|`nr+w)cxaNLSWgUpUMTgh?X@#9F>(%JDUiM8O^>-BCc*ll~a5VX#s^#7T#<;%6 zciqx4r|r#?zP-=9$lwFPtbn${S}ov-G8aE>NV_@s232=yO~(<%sBuJTv`x6*e^jO6 zR~@#&_51xEyg;39KdCN3L~n_Hc>J>BiMo@BHtL$v<6;^>z6canHahP|1oNIE;${>H zj^EewojbojPF2*ccR$oEeoL46?y+)z(kO0XvFSbWmU7nF%ebdgQqZiz9SzbGBI3m2 zB2QHs2c%Fi4Pl>0F0Up${}^=tU^X^LF!}nGCwp1%w{D`qBn`M(H4#NfvmqEDBaU+D zX0}k{qi%V#0tZJ!es0^$Uw`oZ-7{OU!>ijsqoDy(VUgN2iVqTE6T8dRLUND;@i5YPgom$oqsSf8l-OO>X-2(rv*r{o+^Y4$d?W)E=h=`{X zJ~6wN<}h+f^wrwO8#d1ACO6+P@5g!>fbhAdVNq3nj=neNbQTeuKs+He{5^5*C*W=U z=LQchhHPfv7*~Dn>v5A&jKX4l&y8(d&(|0tqmW^0@-_EC5+l<@ggq^;efIFg7w-`t zB2PA{#yjLV65RVcPnkJGkJPj;JQXk#F%AHoQ>TVOiu z2eB`qq~SW);48~~9b>Cuolf_TrCI0oz1(tBXU)i|xT|@>A9MzGZP*fgf`{Yl}Yra0p?dOf1qFGKGxiut@fm z{Mv#R5<|DB+a?`!np#z=kV5?j)i{a;)q{Du^ILT5ZPCO zM(Gd{OYJPq{CtspCTz1VgzZ3{ZDqBK!^ivYG{ktdJuULClaYZggNU~g z9nu_d2H?S2aFGUrL(09-MbWY2pk`kEB6bgvT77K^Phs=L1eT7Hs&D{K$xcck$*N|v z5~fwRJ2e~QRQtK^9GZp%g-N{x8$;meTq9r@-bsn_~Y>2 zCjt2Op7z-ZV*nCbp?(LN@wW(@dG~g0Ojq4>y=jo7`{-cBeFhq4v5ymFLA*rTj&@)W zy7WVx5$K73zNZRn695XAoi}Y`b`w&c?o09ng2C5K<92hY(3jUu1Yf~Jhj zmTLo4=b~0XElG|9)%1Qms^pfY=c)kpA4x;0hPRLaJA# zCP+}jk8XS1{L@O6yb|ek4PKWtq7OmDJBqtk0HGcoA_83)UJIBSL(eC)vN4uCYbkDp z!O^x7>=C?{YN?yN?vf+iBF%@^NHY6GPa3}@bDag%uota-4W_0I!230wXF&oT2% z#2;nbFA^&wOcT2bScg?hC4p5GAM_dD!=UHTi2M@Wx}IUZ`9KAUZ4aVY1(|ib7gE>X zt&h1iidBC9WOw#Y0gGcju;oeAVQbM4-K(_fWwCTr7fX-VU>688xaM7syT zwJu6da3?Go`^#cvwu&W&jAww@xq(1~^bYp)rqmBEsO)Mn_OU|}CUFJOE}Z0foB5}c znxO1Hz0^{7p;_4j-jhneX=+H~g4?#@{i7M1Z7gNdY`B`{&utY=QlZcTY~9yw7xis?TQ{uq zez{~kk15o5^JgrUL*3x5cl#+ss&{`Re*H>2J3x5qeBCCoox=^c##0V^MzBM{foeR6 z8Z+oQT-gpUG@ry3!DXLrtV>%&?cW>N$nU87oFhw5rLO54cLC$So~LQHYt}Mk9gl|k z)Y<-Lhn5*nN`F)*{I=WOwW?v&TfaG%W-`z@aAkA48AM-gmDd5_oep_gNQWwrh4YER_+5`m|1M*mP zxZ)q}-g13fH~siQ&Ku~dEQQV`CV<2Qe`L5fBXK1jYbQ@M$0_B;n+qSBvh+5_2Q6hI zsG!I3teM&R7R+ZDY{DUTXq~d;MHGHwZXWpGlw2=MbDYvuDxO+ddr1tc^Xb+t-brfz zbG(URvL)$|Z-gxP$w5!XL@_4@eM<=OL(nBr_>1ey8ia#zA#u=1D^(>WM*>NdU z*pBn`e^jEo3mcIu+N0jRcZ{Z@=;b>?l1I97s^XHVCeO}aSpePXor%by@wk>3R3Yv) zmgLNO|DVxR+;zSMd%*bLDFHrqa2PhCB1e_F8*aa6$S%k5rO=9Uvj+(sca^&&mUggC zY`x35e#@^&_GMQ%d-dW6kr`(<6evr{67f{`o3sU0Hu~23MO*vMWU7XL<&KMzJ;b^_ zTzMeO0J;2~9)BCuJAp2nLng%UG1qFa8d(`PI{}LSh!2vFi~HFF`!IhNdW|QR59a(| zKrOiZ_j{@I3N4fBv$Lo2Jqj!EY2`(l}U6lj&xS|{yy2?k(a1WFkM|{ zGAuv$-C8wp4TxR+!N+CX41bj;+KOr+r9(1uS37WpB(gmEAx2M(@*7^ z0R1Zya7M(PnO?`6?3?`lr+OLvJgP z?n~AaPZ=kA8wW@U<+^(kW8inpL@@}Ejdq7KrnXgjc`7?c9u={yS!`Hj6P&2Rw_|L3 zNUI~vTF;Hk5B^bs=;TzFgVCM8`Z48Mamr7!cSTzMWDTQ@lW0*3^UpY zq+hpGVP~4Ac`(iA(=8$dv3|@gxPV>dq`Yk|tVHj3bDgZFJO8c;SBB!^Ut|~;bxA^> ztj+7m#=n316ejoDmkQdc+QePjt4AXNH5ow9|Ij7?3mG!adDbui=k;`u%VBW&#F05{ zDa_hR(#`jGm!UZ`pVgJ0f~|Mu)I|33f-ey>`?D4C?a^{Mk!>RXkWp~O?-)SQ1cik- zX3NzyPhsn0<$7QI6dICj5c_hA)vA6MgHHoUB$!YezVtQ*C&=YC?rnZSelcbDm+QAP{AaD~j0 zEp$ZT)zwmxt**hg=9PUDrp5+A0lmxBsw#k{7T3=&gVe12=kD&SzinO%7T5n2m%-~@ zr)M6$a1-StwFf^3c z5>#b1Dk+M6C^>sM&o22tDiaM}orNb48S68uNsoy`y&-@LiNaR*!(&;+gKpE)Y7>2V z(|<^f9D#B9lg66;y5MF~;-#~YU8qI*e1T{5hPSfx&O#m(fI^6URu^0t{bdeCo0PcO z=g+hr$;@HqIA^_OwRO|(%)5(U+RbPr3Bl>{m_BeMAa0fSU>zxS#^572s;!;8EL>9G z_Xoj?THhq1aXyK6ZFG{m)vC=TNE#R&(nD*wOp@W)o}6(bXO8pYe^l7wv4ui$E`;FZYxJU+ekjzvhfc7tDSMw9!R$8 z!R$dctXyf(q;}w5(P|(%gHc`ryh0X_G`t3O7?iVPL@#*D4vqGb6zv00}J7?kS7d`Ru zN@p77>nFm*c3j15W`9#;tg6uR!xk-1+x*eOziG@@4+So; z87Y`4HQF}=`KJl?ndnx%&x`^o7*;$#9w!GAk};q*C0KXwzYQ)B<_6g{XUiuEkjZ zhsD%?(2B)ykXfoj?DF@tHRD&q0l>S1KHBIcy8W|IDSRhvMl$J z+{*jJKDJj0aw4FspRd|&e;TL|^Bvv=5$<+Eu%i=Yj@M_>c=rMwI}x+iKzp^~3XEh@ zP2f-Zxjhl+e|eQc+M)woSF5^#*2Eji0H_K;%y|9YE-QQzD2YOMXX0*yh2CDWIsXc_3}~ zVKhcNRYXGQSteK0aHfV;XyNyzDF{&%a22E#hx9|Z$y(*;4RsMha$rs*NJ~N4jif!+ zMKdP3!;+N{&w^}%oyGa+aNp5b>>&wzVt&^c!4yx>c&_G_#J>h&uUq4}hePMtDhGco znOhE}Q;f#?9+~sf4S$c$CBdvT5F|U|8Lo-*G0BVxbvL~rO~_kc**-l_&F+ydP)=yQ zA~F(aK(v%`H0X0JBWF*xz{K*DNJHbeoG+$mF(6&QqLJ1+;!Xc;|6QR~F?MMHh&R2B zMeL>o;~I~G1OK945cpbqOwy`kt-A%E#@2bOX#35xKWF(c*e`H@t-vffzhnb4wd)W; znFLiA)RRPE)w+O>w$yxUq{Nw{O`x)+D&D95z=8X^u>W=5{eG(ofQh4l=v1Q6kRKB* z39_05jx>*@m~H8J8)g(7oM%06Jyc{dz)}lai(j(5BrMInEu_#f?>@>74D33sC}LYV zHHN$58N2JDWVa&vL;)`~qPCqd&cZoVUQabEg*%MI85^mKIA@uZl*86yvg2;q&N z=!MMjNQdu9!NJZaPw)n1vrag_x(IS9(yy#CPx_0Um}*$YdasR7aGnLKv6aXD9M}+{ zh*=btlPniJ$B-KA^~Y9n(KXX09c^@@vwG_TAvoFNq2IoK==OP5tp%RjOTbs2&}sr$9nZ z3mBT^e-bf`fM(+Gfo^;?nR9%MHAg7R=OcAZXt$O~lA!)i1on-sK=l)L^AB%R1x%$$ zjO0u0L@|=QSWi(N!TpCn?w5Nx+%F@wB7b&+$E)|(d@r@>P;ip`#Pc6L(SeDwHEimE z^4|o<6V>bunyuz8azd!ddKbxXK9A))EttwrDjMjCAd$);KL9@^TCvyfymmFB_Sfb)xx(Mmp4SqMd7kKwkb3_d1->`$ z(Ee;>uN6;&GpMZt*s$`3(b+=8dQW>SJ@^I@JN|duEMxm|ZT8ig$uiVXgb?ptvq`2` z9*HER69kcTIXj-b7ljgdj<$)3|Jq;c(h&QkU_Cmw{-t=P3)LoSGby?sCP2 zb@BPNFNh_4VbXz{j+mV6uXwCd~MSaz=zl^9rnVT^PSiRN$K`4DL?~=t`#0r z*kSANI+=wog^o;O3T|uht#BKQPgQaoX>27uBU@Jz+EN^;ZImY4gkTZd=8Y)%EE~65 z8-J`iSE6FghCV25Tn*?C-#O0Vheb?uxABbc)y6$NXNUdx?3c)l@d^~LAjqP z%UNq;K`}=cR~}afzcQIBV6k{|KpmdRFdl$R2-nhfc=xzCw(?5G`KvAngO7O|mlYAx znNe+JW@Y^wC9i8M=)r0Igv1`PTiWDRPfwS^=Icc(-)YHx46SoEWEMv*s8S%G+PH}! z(`DGWSH^_tRxUvUiEdMUk3uvnK*-vY*Q>uG*4ko(3?!8RdaULW7f_XAH#5^_ARoY8 z0!M6$M%23%(dVam9wxVu^&7IUxT1rh>tIIsy~&zUmPNA#edsS24vryD$sN<36Bg<7 zq0e@=jbHm5GXF88N`kzE%U*o+nTz4wY_a$DEZ;JHnequeILh})sq^L9Wt+#XmhQCp zBuEay#9wm;QM1+T8xlG9e$g< zl%`;H6}dQd-;dLGU#6TFkMJ`)$ghA|Lg+1tqJI`(K{ko!eG3UTU3=_66yjLNgQ||} z@yqlaXWvuo`2Lxq0T%*@%yvFxj!#CTy0bKU_(6n%6nhCRk=6M$zw_`sPZjy*v^S=o z-16>q#5I${)vgJ&d#5DFeaAWWN$2U9cft?gZMJTs zR&+-Owo8MsT8#1d%HhveUbYveZo>_K7B8Kd9WkjJ!Kkw({vOkhL8fnpNJFYnq6OvnTfY4^_u+xuhuWW5(&C_&d&!-l32q=E@CKx_ZB*R zy4GiC0SvtmhQ^t)EgU;I<&kyrHerOKH1A$WDfgV6I8^YaTl(h>r&>y^kuPE#R$ zQrAyKmZbnr5h{hqiM(09pXpAUQ|=Ar+KfIGbgz$Rrc-V=bi%n{4gs}=xuv~ z6+C!h1~~uJBo10$zxI@OBM+Zn!z5T8*_~1LT|D2b?;jM*!85DL*5U^L7kV^mb7Nx< zO;l@VqbpYGD9KbK5our%<+ydy&ksUBliuflzb-Weug`TPX&w}GEepAx79wc&myf?+ zj(uq)x!ivxpGsvIFe_(jG9qh^e}16%=Th%Wd0qcBeo+Cvc&vK!(rx6f7%O?oYjI*I zF?V9=AXD;z#kFG5UMiMf=DZkmxq08BDM_eR%b`naE?&)Lp*VTIu$9WH`dP0S;3%<} zHeh8u4Bq=@%zG1<)cFmy1g@2Bj@fg@CtoULkR1Kua{SXxoR=6#dhHioENd#&$^bkMut(GA{L8(c^U85oU-Z)8BOQi zl6w?>)_DteP|kT0h|fm;fQUf!z}Bl*6z=&#JAOw5TsxtlSeH0_qRpCFY;40AvEpH7~9hQnvCUIdTw^Q-P!vf zr2#5WNCp`HTzd8|P<8c!V;1iO^Yc9=JtaJ^aP(w2ub{*JdEo5C0VmChobl3+Y*SSl@U*LutA0WBO|g=8*!N*tWwdb>>z|ifC5; zK#?`tqP2r<(?+4rxaJezpx*#!s9)(z^cpZ}QCqZ{=@(6@fbx9*Drrj3`B~1~0>$=W zL%*kRm`+EHWRg&!ZF#I@f43LJ2WPyFw5!857lxMy2Zb#<6~dSIUpCYJRu zB>yDBe)mQPf?=mc3tDCcv&FJ!)K!!?p-WGGGul4S_BX3IO838-qVYvXlDSPI_G3IW zJMXsG&lH?e~S0AT-yDrnw z2kp@dy426~BVVL9I|kv*or=B!E8t4n-yQTHW|5Qc0B z^7-rGzKB?U_J+Diw~>s6f#r=K`g6|T+rO%1_Vkohn!SB;BO-y#DMlQXM7AA2w!4U@ z@C^k7@H(Zj-HqmjI&n-dgeQCML~Dt@l1yh-Up_tCf$kWh!Mzz%^*hH)K$S}LA?p!U zunVs&+Q!{gm9PuahAj9d1gHnoUuU~cXP=VIXOSW20xnIRwKJ?yU=m@20H%s;te`sTi z%Za%A%LXXvACesbUurp@q6tAH&r7wA?To`nvXtA+o9VvotCkq#{Q)xXH8K4YIeu-s8^m$cw6hg>ucA(p{DCNLhk%)qrF~1 zHYRxe-2+9OU|1z7cQt+AWb?O9T7Nf}<0=!Xe=*$WSU;Mze*K-8`!#v!36Lt;gNVW~ zlKFfqU@GMWq?_1hvGWoG_7`;o0AT<>IWP;@%h zA#inAXPqhvh4x<{gfPn)!BltK9sD84Jh@Ha&rgt0yqnV2#na z9n^`X&mMKikCz>D5Cz4rMsNsUmX7pC7xs9>KrX>OaSH}+z7^El{Nhd1uR1e=TxWn3nQ|M53XyR-0C&IT6?lFtn3?2cLqsl%bux27dD5cPrQo6{Ro>!)&r99jxJF+QVz+}( zLhjTxwydgTb$G%c`u#(x+eLMZuA3nvK4nvoK>XpnI))|QG2ATn@Et;iHZTBZk z_3-4=4C`U#q>bsF&Xxk_yx>r%@fB~X>!vH%)`=56enDb4-m>$&_B6KbF05LI;A$h- zL~!g8B}RHfL0x_|0l3<@w+!qtr7v~69`zX~-|1g02A}t_^7c0{nqr)Ahi_o4=?Hp@!jb zw7ZA6vVf3VuqKkmw5qPC7E&+FNij=whmr61Z2qoW-v=Juw z*6%tJVmcK-?CN*m_HB5nxC0_>Hz)W;t%L{B(Bt+L!)*(va-o1l2`$Ngy@GNdZiHEj zkwxS1Hz;)1rMug2!Ziri@kpGk9<#>vC^}&Cvc)x02p|aQGqt$dBmrC>{C9wbcc{hIn!_ELwB3v zeOdb$wBHL$wwW8L{?5B`*uKkLya=OzMRbH#z<|*hO)Y}=A{F#mofmjBzGVOn$}q_! zULvTn3F{ZHC#C=FpK9q`oA;zt@B@7Na(;g}1qcf=YpAXz1_1~XdYbh|_};cm+yGoh ztcRH?OM#rZ9kqxx8~yvMKLvz6P`*RT6o?{?i!9N#|@m-|_(TGE552Y7~2i^BNP zICSpEolwCqy7p7ykB03mg&?Tt`86qm(8F{FW|kzPG&X&RTO9thp* z9H||C$h|yec`Gn_t1x-IxJEWr{ACcxAN~lqTmFPAj)e#yoHR>pDn28Yg_|b#*!q{r z7(4u{{({Xqj=@ya_F6!u>wKz^*Z#wb(VV!p`;plFzEK`nqC$EpS>xBd&65d>02_~V zm9}SkU8}mPJZaW4urTA6rWTXQTKY!n>JgR9&*dV0=J~E+LbeTmioG{Y>MGOoBDlVr zvZlTL#1P1^&c5;XVCG+Kol?oWTLV5r%_IXE`@?d|@aDJj&NWfli1nPz-)rqw;H8{) zJn-d5gIExb11%u2u1o}*1@XRf)6MgO2<2<~)%kNJs9p1eNtW+bVvf z+_vdwEH4Yd8oYJ&IlD*T;Wpy3W!f005^gfjbM8R?DJH{BRwaJ)n!84 z@1htd1oEwCdQK}8eSWG3EEop>^?-jqO~iqF?+Q8o%d{|HG1va5mz60w?S0R}<`xI* zm#Vu1?8_my|J_r)TVb{7Zv#P>+9!^CbMs!;(>*$-X?&lfJ7{duk4B6;aVig|YT<~KVl^*{x+pl%Khe!7EW3E_tNhFbO4 z9D@pT1B~YjrGd^Q(cHqVjMd>EsvS1g7G|uMjs;Pw zKE~^p({PIw&?RIpB zQSMR3n{uL6Z~THe^lhnFGryQJ*j;{>|2J>=3P>p)>>J9QaH@#fHrz!yiY8%yEyo|g zrZL^hB7H|mJIgUcza%Q>CIqRsr`zu!?5%^AC>2G-nCFC(aDv#YslrLOGM}%icfG0K zM_InhIr3M@HoOl+-;TH2wmV@in*j{On&XqSA{+Ao#x#I`tgV>6rNV2@Hemt_Q;qe5 z$9M&;Rv)ajOJi$CqVn~8+Bbqn>98Wtk42BRY$-iotYI-$1ZscNR|}H-^eqQQ&M_>{ z(!dXCD_*qt{HgeZiCv_P>}eC6lyd)J{9!;K+SGdHT2DkL?z{Ri=`K)il+`q#;39>X zt-#*$%3uHE=-lI({NF#WC?P55Lrfu+Q{+?*tDFg`9CA$Ld_Es$E9HDx2q9L^=kv^Q z%Q=J`#~fyJK5rD0+2?nEfB)OPx$npQe!s8ldcB^n?Zpdlv(%B!E^GbzhdR<5pKcZ= zNlLc`zvlk)pk^4@yBFEm9xtyqjH|O#atQOkwZ{$0+|5yPiY+3#1&%(037k#}b159^ z!N-*pvx1_;T=6D^+OTqVeNXuBFqt1fP2lXFq|wFQs`WKhVLHJ*tWK>k`3a=kMHHUn z1YOz!rM(~ahEA$;A;;_tCbM1@wYFw2I_n-uZfHBmBxeb>PRn!;thmo@n+W`@@*09tN#pgJo`cuDqbj3eNa+r2dnS5jkB#x z&sx)YU8?EfxG=}1pm2rrrLJ>26iZ@(&zcjT%k3=?s-C`6tFpyhP<6d;jStPUJ8l*_ zllVt}_AQ{H3UZa4p0R*;8>_iNKdIJMb6B&!-Q#h5=Wa2%1KqHCsP{ z8n2ffwgA`;*N>R$n63Vu$MnE$XBeL>2vz-o3wVAWP}3z?d1C%us@CaDXy}<9hjIIK z|6T?UqA*KeaS3iPl94xipK<0R~ZeZGGl8U=Jt9Keg^ zGAano+$H#9Eh&^>>jW0iSQY=6DS1)^h^$&HYdIncj>Cg!@}Im+4#|}9Qu9rd7Bj=P zma=n=ZLDHopKq6%p38mSHUzO#r@dZQ7rD0SYU$}$mpsG!Znl38KGEq|`cTY07`&uZ^<>P%@x z_22YM){mf_KUG%h*5OlPJ_@_npL`1(Ev*RJa)f0f&E9`ZV_-?QEv}jy9Ba!(n$>cv z>iBVV9_#jB*?7FX_vsPM@r63aJ#}F-8eq-D*pT0lhJ+wM|zRz$Vss5db@DsI;)VYhCr@5j$N6}rma&#&*@g(Yw;z&hUsw%q|Q zedk}Ejc%Q6j1V_KPNog9pIp}ZRcdM#DqL9iHBWA4C zVGV;9zCPcp{~#y(T)$@TA6)-$=|Ddlp9nvq4{VB72zl`W3v&b<|18k zU}^UNIzrIXSY>OT2aL;M=78#vq&dv)ie{jiHAVII09%Pt5S2DN+h9v(tX&-E3@oaT62e-BW8x2uf=9{20c60;aK&C?SWm0qDaPCDc8D z{lXELS}SSND5*dD?$@Oexq{UZiHxGN+=SJ3c;IiabBDp{d0sPvU4`PP8=;c>Rafoy z`u0C3^;{6%ea(h^Nx__|Z<$SJ_`jN2yqWVkKBTUsQ`o8P>7ZiGub{)UK8Y1Pz{R8T zD7`w1QdilwW1)hV!d+zo1Z-3-DbWYF+GZSe3%`Vh46wR&33fe=yRrwA_6X9`{kiZL zz=j!1`^h7ukfT{QMt$rK^Dmb4yW_5%;-HiKsK1;mi--OzR_%d=?Q&Uk!pw>HQTEtq z7c2pMWh65nzs19I&ARJ2HI!Y0P<8YhR>FyTQOliW&vaw8koWp^NH`fqsHIfW*jgJL ze9Nm#h!^t~pg*w^QcYzH(BKS5ZQZQmE}!r4g%@^VzzPUNq52kt40VI9s)`e3*tc;3 z25&tpD8b!zRc)1|%2g?%Rf^1<`Hp>twqM+}#kmlL6XRvOIi+sIIT@ZG>Y@~r%5LZ4 z#)lax;T5jeM$3m>CFWIY)8#5|>K;hkbu3<)|JC_2tK^P$ut$uJfe4E1++9Wg119LH zs#fO4?+MiOP6?i+Dx5BVN}XNbuyPnN=&eTCujS5MUrD@fOZmQB6NP5+3=9weu`VoX zR9KFdR3|Ac%*{U%P3DOi{+X?vp)Gf_oNjQ>GK`84~F7ICJWUeS>B13+jun-z1&BqFUJVf=@L_#IWPlf)MRqyb9>*yb?EijNj zx-n#Y@p$n4Ei`*uRU^6Cr`zK>JL90lc!t`7=xu^W&CC&eHr4JT)%GkS@IN}fkOt#g z%5(fhZ<+QdfeI5cE0ZgAh7TtPRK->}+WUvK{JoJa}tDkS)DS9 zc~9O|N)#b>9|9syIEOlidc%CM-}#nYneO-ddy9_MLi%xW?)K`5xS)K)nwh1>mlhVoA&X9=w)Fdh#YPHZ!_sfkeiQ#-E{4d# zI3f2bKE3py3%{SF zYMy0D?ef@?xZ&h(qIsee?E)ovt~>80X?LpV7x%yG*jpC6nELcDRRbn`QNQn^GJ?O| zIW$kC0??MOQFv<}0+gVx;D#2?@~kdw0B9E1&9>R)v4*E#IGJpciIfG|SQ&aw3_I8b z9z_!aLY1JZ6vDC$yQ^X_i(eUA?7mp5UJA3wydG<8w(AruDAhn@NlEniQR1xT-x@f$ zUZ=YQ0Fd4aUN-JGM0YEi<8yWl>vVvGDK0wtjg=K3^~ zUGM1K;X8g~u<}i+?PYV z+jWYTUybipYxVxl3)i)IihA#X7&P_cE2iT}vF`7$nPoI0@BhF@|3}BA%DC*!71E$V zX{cGGyzX2cmKIRcQ@FIE74PiwGud4`iRSuHeBlQyqqPPQ0yf!o;kkii9pg9vF9PPD z-NNHOm|#_{N~n*fs*zP<`7S+jb1hkVSubDT(sbb^U5MZy?*nl{A299)6`ltDc{hP% zAy?@ymWyM1f#Mmgsu|CME@V17*2nn2(>sYa&ra5_OEp6S<51>j&chf%@aqLo7p4K; z17i>I?nAIk|AoCn->4%w$9kx~DpW+c!#Iq#DvB?7F6tW#=+@PWJ~}5NdVcg8^hXeg znRd;cLvNW)@D=6o2klY=r4%dU1;hr2yEmcmte;Ou=6*M5=RcCYlSDGY=WM~?2qfE1 zI9Y%Ik1{6;l>vE*HC;S3$5zRQO%0;c2Wkx`+D|11gFi$q+*xSkcqt7DJXNAPo}~p! z$#kg;oRz4$F2NW$lP9#NRZV=|i#PrEq&Nl>WIsKL)_Hw#DTi+ED|2jldl_zy7CrLJ z<3xu5i2s4OFrG$CG^@gKl01l$>O`V_FLy;9WiTnl1eD2-`Em%_MhtE_W)IBW{-$w# z>~9qacnIg90+a%RanydhW}bAk6^z}2!q0>jnCtc}v$5Icf17@iy8kO8iNRk!rQhql zP1BddK6mt4F;pDFe3lLL=>(S65aMw8QKn7Hg~gmQV6`v@sEA6o28Et$cXitzma+1e z;+xZ^+Z!y;TEWiY2yT4H2LPB-@`2~sgd|ld@F+yVz#z_Z*Yg|7La<7~Dlp_x!d+e- z=5LLOzqI@&d-OJv3Jkpx7C~n*?E(ZAe7vPyq5`W^o=vEN3n&wPKq`hurn!(v z$F!suemHVPYUPDarS7PxUpL?KIc^W%k^4u0aH7~X0QJB)9$zn=zGQ{}z}T&nCrN_E zz+4zkRW@l4EO!1HU*QcDZ93JOm@B+dW%Jp9W7jxE@od7*kTwD%8K2QFVfyeal;y5k zswF7^&qfm-C4g(GPm)!aoN zk7kBEAe+?%h!`X+7}#O=t4oq%@22S~=3CwVDA%Mrs$5;63v7IO_z>?NoNY%jZndCn_t{Q9Y1{1(N3bLYi>{BysLZ8IuIOMkxWT3Mu$ppkgg5@q+G^o4l6`BjpMY zdqXv!=}1(sr8NEdNgupw=L+<$)!CI|VQ=l?aox5yGmCDd(YJ+jIYVFAk6ySf|4LT= zboM>lE}cnOGWXGSY}v4~MowLK<*GxEG@v|y^Upv>|H<@PZA;0jau8W!ccf%Q(1%}! z*5tiJKQ2YKSt)NO``R!j0v#|AN8^6dB4Cg7$>V|Bl5IZNZ0fi67(2_oV~!JFh)QFK zpayd7<|&+IKuim1J$V-<{>%gp8`vndIsxv3FZ;i6Aus%|Z+IS^C~ng0@;`2Dd*5~; zv_^v*vqK;joci7>`#$d;78BiQcX{-!Jy8X}OLq46?sjoHIL=*m`F2Ny z6Xv3r`rDXIVum8pZ+9Wk`#p?3(3pi1C#4hHD1mBdjvgV%5aKmA$Y`kV{#WzOW9rqI z&ah(SsWR2fj$^?!7{e0ij;I^Rx6u=)evFxQY)+q~tBjoN<4W+^oJg?)2u(;#w707G zsdh+T|1*QX?p2SgzlX<4OHnsO(;$BN)(H8YnY*f3kEMU+HmA}M3(D*_DnI3Y5%mE& z8QTfHHUZ>%#@z@PxFg(z3YA()`D#=M`I&H9+xti(gRkoTQW%iXsV$vq1h|&4tngnmF&A-d-g}Ek0!n+tV$@qXjSVuOpXBwQZE7R!d;ss z?>O!{in@kF4a8$yjPl-7?RP`2*Un8n!F?9>WsfKCUfzB-W4+ti4In!OPhVQlenEN2 z(M80LTVOg$nn~+;BbGK&=bk2(_8`Sft=VF#F#TENk5G*ZO43j-Wxm!reRE5puiMgA zGbb-BPJOX89A=*fB97whTb!1VT@6`mlS=Dz3P+e-y)tp?gX16S0tz zpf=QG|M*>~G<3#}9W772ISvtD26MYD-XiVCyv3JP7YMgx|I}g2P_({xnWuQ=O)$YP z3_DM(ZU6mI`9y)jh!vaSB(_ zXcP6U?z7_E>gs?yGJG#z?I2SX><>N79U1Zvp|NLS{yIB1h;4RE8&FjYnd{F(nGe)g zQcWL9Sd;GS)!45hQ+%%cTu!Ra2({wXyF{0IZd=vANQVf!vfz50G2}EhAoeu}1knY3 ze6ZmYx{T?7D7p$+CeunLUW*OuXbi!eW#%wMot=onZ69EKFcC1M=A?ygLA8u|)?jz< z@T9jYeO2jEq&B~xVHa!0F@T%1$Bt(cPXg+|4@bnlKCA(`Kjs^0-uJDoL5_{ls_F55 z*L%TE?dOl^Zt2lyQ-jI2IlhEpjb{znw_K$hL%s$zPr9y5P z8z8m#k1h$yL6Sy%3kkdZE%}^lgx70lJ^PtO$kR&3p#cVvKJ_@(?L~oEdRW=Pc2N3m z-S%7L-P_GNhpLB1S4buCFsJ|M;7}D3^&#>I@s09$Zx{PCl{Rg{8eN#SU?q3r^|R_S z>A@VY52M;8@xw#n`mWeAIGI1ekci-PxBSC&w>9B3i72&KY<%0{_Hf;U4Mptc{toOE z43P(3qi`LvOfL@j3;_?a4as@rDW?$_;Zjwvke-6U4ojw;Uww4>N*`eHpdc(FyL)-+ zB_j;(0Jj56f4aS>icJqQ2^t@+u!F8^+dp^9PEdb;mML!lzNS~EnL!>X zcTct2eCQ!$ad&yxAR#ie&s1uOadNoPF`9nEn{wN><{LzHOhB*EyQ$I_oyiHgyP!{) z2uns=FtxVF97&ThsW%@cXAuRx&$tEE8IyZoQpYY1q^=bUMk5-g==90Eqw)v$@3++RPuP5YNaYXy~qNQPKX<0JY>$ar&(*6k<7 z3uwEqQ6by8xnbr^ge<|oL#n~E$?m1VgEQV{-?poz6_wOOGQu=8;b;HRWv|px>1Ecf zYocCC7rg0h^{5%Xf9YV^t>*rQ2vr#)GI^7EN^$uNKmG09GP#Vp3JCXTCkp+->>Ld> zRT{NG9&t)j=E!o9?lltw)aJ?fn|I8~h~}5!*wdkt$w9Mood(aB*Napmro2yA#*cuf zZ^CEI7|IH7ztgf-$Z-R{Ut%3Wn9j!qJ0qWQ;L2Vbf6q6)L9<RxkLt88=Sae#E^eVvX< zOt`gM8Kb6d|A?pR3uJg^YD47h^M&{25_d)D3e&x{6r5P1KcVlVHeaUyz`U8YMtZn9 zvbMn&wk;H8I#AH8DtA{%$B77OE$Q8c{BqWZAX~()S$e#rO5LGT-Je-SVTZ9+v!b*L z#d&{2S;bdmM*|@3067tg5S|?Y&y}ikbxoshH!L6)Uk#$$Bj3@!jS=}EqinX)en0Na zQY~2XK0~CN4FhEz@mYD07-_Xa|P919oJa_Q@Pid0%N-WKhc1Ad!I!KE-!fh zS!?ndhkVeu)qqr)#jH`#&W+mneZCq+Ky5!N(>(`j)H#ZEAm3pB(P}l%^!e3KMS0iS zR#HbVAOI)%@bt4P^@353>O9em>=f|h#>hSMd65i*;_%NaY@-G#b?qV}wPDHqj-$tZJ^Ik5y4{BK^i`rG~?&`6{O_JbA&7eRBtZv&!G-XIH<{w-iTA+q_A|B z+K5j^)N*x{L`B1wc5mrp^US^@@N`5xQbOiYZ zdDH+(03a`~AOU#xzfwwia1Iqumn{t@uj(GH6I7f)rXg7^_45A1q>@E~7Bt4l`ACiRo1_lR<*whXV-9)zg zd_8xNSz~*ahn8d$qV=gulNJCz)TO{(C$^o0oYHi_N_0@AVdmAiEr#r%*?ts?*B-M;4$ z(*6@)#W^7oM44#wyh~#_CTYge?iO7qyBu+ey1%v@MIt$6nIqga2sJ;fM&q0EoDv)k zB*Ctq@Y*-LMG*MJh!tgF*`>U5!x1)sV*Qjr#S+qSFYPwm0{NS&WPb$# zIkq*OD%X!d4Di~VReUBn_YHw#VdrvwKzS$s4y*i7XPtgMEjp%9TJ={VC*kuU zbG@BrPU?crt;=7I566p5`J?{ja8}VkZV$a<(fl$o?c#*fU9j$N(aaao5;rZ6*>1Fk zmyZ6M)=bj>^ytw%vBT;}3BaLJZjGqDIoR%nd3vfoskeM+E&oYUu8(XjIUIGx>|U~x zXaD*3;~qOs+6@Q?8QYDx8e(8N4N)q>TP$v1aKC;_=V4rv#;vsd^xv=EURbkF-jf&y zzxj_&(1JFEd%o4W9`~2^LTcCIrTj*u+${0dVP?+r_Rox3;X_zh&@i2sM!vi{BR})cZWd{w6G2db@|^Sr-YFH2;s| ztUsCnW~QA(^|En>m~~;hXuQ+Am4Df;0G>yyc{f&%VbFe1w@8JyMeKq>Xw3cvi9_@M zfp%|_e&x|qhU|-tm16cq8yi~!5Ss6+yrg#XmLrfw^ZI#~2F{+R(J$xu(1+$}8+bld zEr%s57`+W8(-uykwr;s&!=4-MdkS`?n<#y%Zo|Jxu6F>qPr1OgL6k87=l35S&mT31 zuCS!VqLP`-H@^xPxsPr>00*xCG22-W-p-uI+{kXbGgihN*9J*kRdDY~JIczN!Z_M} zI96=JspbBO6Q8r3R)HbiL_0-v-ZQkgP;=u?OoKkJ&|8B#fpd0~ItN9HxKH0nC;-K( z->|l_C`sUWnL2%_gB-moshcSJ{6D(;6=0D9{)0omPkJJdejl8o?1_%;rP%dh&YE%Q`=(g!wIwe`YwxF_Dv`vnfO^vyCeiW*2}Br--5rf-lLV>#>=VAV4g z`kwn<1pKvZMH6_Qu_V`_gwUUssSZ?==*)m+E;jII>Y$e`%1nTZBnzSs>as1))!| zBW{DaAqLa(tX5`i4J7j(Q3FqyQNy%$j(e#V=e{q89`Z?@ws3v}oepbqx_B>wo8sMR z%P<8*2~2NW113{cZ7X}S3dvr1}hIR|NXFX}RISI?v zH(70aV22awTon00T+BzyO^ISvpW>ZQwWt@x-XGl+#*ML-ygA=~CETeQ;O?iTsL!>aydms_2TOEl>853~(=`{%i-sdIOr;}^N!y2o*gEl(~%k$)(f3-W77)%bd^ zC$BcI=Jy4y`_hH4EK{@3*w0eHF7KCM6fxsi`6H5aS!iiUu!U=*joBUFqo$-hLeN*Q z+ZG>tUgw@wEP1+jVbwY6#`dcB3chSBzE}v=z2|ZCl;oifSb2oh)YJcQoYFz3)$dX~ zPg!k3{IG;Uw|m;j*%!{b0P0tl#{J=p(rZmuPQTsxIUbV*}xf{h%LNB%}IT}d$ z4!lwq$cjbF#vg5!8z>@WbKBX6ThH9WbnQ8wWR5K)M5hNuTFyLV;(tVE(m5OmzVsiR zhm>&-7>Vt*xq>IyER23c=H8UjH#9VRASLfUdcZ>vo`<+ZjVJu+-z#EPbjg~Q{`xZ+*d_T zB?^iIMeoPz_6v?j4zI`&)y++$&3Y|o|GRUePTCB#CBpebasZ7X6ZH-lv;JaXQ@A9 zBBJL=jD5M`z2L_FKJQp{S(06sp%9J$QSz2>&%C$w&wBcB-ZtWk<$O_Ne_&5)#-Mi4 zHB>Ya{e)6d;uaRXD?zp#ru92qhTd zYo9Y9$9C_-aYHS5R)fwD6Q_99CS7AN3Btew#Zy z^WzP6i3sXfbN4c;3i(#a5)-x?K>N6F1Z{C&lW(fE#I<-!6{ael9Dh8~wW+|DD6Atu zsv1NY7RZC~0B?3X_i6Q;o=@h?@7d^h9DOPuZfuQGK?(0r%ytYRK&-J_oXA)eC!uVV zDnbzmmRFjy`?5+y z{GYm8EM1EGM(>(dyceq@z}uGoL~VQjHnDs%EKfn-ceUN9=16k9k%D=9_I&hZV_j>u zH(#^f+pqV#w7;%Wk*Z#@5-JX5%6wiD-u-rLRILJv85u%PXhBw}^y(rFvJ?{BO&cN`$M@4T8PYmgTkR};Rz2sh1=qa9bJBvi!GWQ z$?{!nd_&pfiKVJImrxqCQDn}4{*pnc`o7fW#LzRY<|nG1$G+3;*C*~&nHlz%Z7uo! zF1f%RfPQ!uLldJKlZKO#JTX)?=dw_Qqhmr(P=leb*G1Exddy{JG%^GBF(A{sG(f&j zx_wd*Vr4)8|uW%!6OtHUHq|MZ2_2)2=FF)Us%rkP>ZFMf2% z%9ghG4?Vg5#gPD~AICB{@_3PvEYl4WwA>(35)3DhZRyEMbvG*j`!b+6!ZVtSRd8@M`v$aR0)Mqp8@3=6i1aHx4nXOxh@5bzi>1x-{RlPD*P#C ziZk&{Tr*BVzc}<3PvqzgxJUZ|W2y;=Y6c<2yW1ij5p_^VUB`njf9w<=d`0}=-v)ab zCs-VSMj87>k zByi6)*VPr;LTg7`ZEmuhy?cm5fCpR4-BcYPi7ZOPQVxidqGB+8YmzEZ>2B6Kh5Xh+ zYBx8$hP-~lbDkg)1XKDl`}l(LNJ#a??xQI5GVilrXN394yfqQr!w)` zsN}#7Mgs|NXIJ&Yw1`yDqK=3JTqe{RYhEMl{lMIenh$>E zm?8B}pjp$k20CBBwPN?x+0QUS6wq`;lvQ=U9gyq(jxXS z`{jR`FmDWR`2(A1AA<7g5$tpNOkVm7C(;8{i)d1oDTw-k zlLKz3nRJrF=I33?L|DCdsEaLtg5e(r#FkLQ6fD*kx$oSA#`LZB#z>;XEgG**WalLd|2cJNPXMS2_@Z5$S<)^q3P=~){7vgwy#57(x#}RIeDa**Ke`4J z{>e-nl{Z{5^f6^5RS<9AeBD{d8#V}xZdh`IVEvVd+^`;49Vo{0@?1Lv7BRt1{t9gb z_IL+l=Fzqx%DaQz?NuD0;rclh?iK-B>eOffvLRX~doUX;&4Fix;$d=O^Upfi=|5Ok zhb3rMppz6xiLZhixWNCG?t`7c=QpQMtJQC5cwrVZl%KKnAfHxf0RW?m=D@x7tm%u( zGaM@U8PPsL<6Nc8i2xlqA!o#^QHpsnFjTQ)+bfU)_55_w+8R4irXIgcg$~2ms*3Eu zL^z4;>IAA8ozJ90|8N`(-Kg)|H%mf=en51ar%EgpRrmPc_ZCoLT@&YF8 zDw6$yxL0;Q!(GM4uCyD19HYScXu?w>i%nN64ac=FaD#i6UgC6Op{yGoJtBHqRmxTD4@-dh zu&h}~6;9VGDggc)`)MPOw+&DTnr3LLTjvQgaJE0aHRsI0-qOi;UC14HvP&4t&vyJ6 zZ#6~(ioZNfo-9;W^fwGEc%df}>HE#tDrx z0l98qZYvvOPe0-wj<~pN9Jl=TGW3vJx#s&&x#eAU%db-f`)<%!ssW|KorlVCs*$u` zC7msEVcTr&0rg3yxyHpw$N*@;?w_NN+V%wSW9E$oG+-o|$x{fSTI}%PF15*^r_WNC^adoD-=JE|gmi7)_x9wBPOQ)-~De?4mY< zDLW@@)k@Csr)jiH3a2icu*UTrfU!MH$QA$bF!LQ?i*Bhy)!E$Y+e|lLdX2g~=WwIm zXE>>yh`EkgS`zd!z6QlE-kXGuo}~e&ckTuUk$#o@MiYhlP)7oq{LCoq9F_~ndL|IP zLC{~Y`VK@=yLe5AgMl5}_CK|f>yE1@(_!veFL&ymu|T~J@~@# z!{|3 z2-%n@v!hiJk_u*^DowTvR3}tvkBmzNNPnX{eIhk6t5!8t=*Ja!HV+uVmfk()0@8p- zd%1<~ll$_dsK!J)E;q$6!wz(VdIP(L_uEp@F-YJ0{H_UCZm&b1(58t(jGqNQq zIN;RfVVy2WU~j>khZryI$`Gz35O}GNS0l>zW_0dk+}=~&{ovvI+06Dj{ip|ae373F z?qlPmb^eoi53wiMeFU)vNGU3->M`IJQCyffh32EeI7zd)#mC$N!OE^rmgvVZ@->om z4n7XLJxLt5&5ajUN(BF-vphu{8Jr7e(#^85b-HG@V7ExhtQk6QE9~#=ICIPtQg3vc8tVBaMjl%8hh@+}f*KCHa zJG*P`_vYmI*cb0TO&q^^UL8^&?0AL)AV+<+%sHA_8N6#v?tzH|UMu_27Oja6sRGFo z`+(0C7*+_o;~RqG(1M${q%LARC;BTlE$3XuwytfX;E;R+m*UU0*ASAGi62vqB)Z!r zPL(KgN8f=dJ-h~T-@!rjpWvSfH!`wYL#jX}so#s~ksPD2Bk4hnKVw{x=?Ir(=1HE1 z>%(Wp9e|5*wPIJtf>O04b1ej9J6Rdf!T78_{$IB_8r9s9{WJgV5-R$teoR_!KZEJ6 zhA#RnN1e?TU=&j`JgfA46a?VctY+{o$5>1E+FJ_+>8dT?10*3`+7H=T!(ct$ANc#b z5Zqgq>d3ci)-LFmnNrLG3E`&crUhb@gKmjC0(H}Eh|4n+hocXq{Z33Y7P|d#IVyaSb{k*JoNM&0_LIsb1d7i}Ls&fuilH?2&$aEBE zpzU=vFiFOMJdG?5$%{|~JOW|JUnu^7=|jtQS6?4FfsvJ~ORWgYzcM)RkvIv}Z5*9Y z;S$_>;P!;KrqTfo-`Qj>YqmgDI^CxBz3FzEy)riNg8}Oev=|I2pn?*>Ww*_})0DD_ z{RfV6iX3#gfy`$5A~|p^aaYg8=;e7wdU0L`tj4J!bc7$Y^PN;oB;qYR%@)U}C*!`~ z5$uv%tSHGaj6=Sd!t@6jPBxETMw~w>Wmb7GN4n(Pz`Hb)Xz~;h(os*9mMcaQN5F6{mK#? zoq+-62RhByvdmZa;}4Bv@t2$_%cnMOI9QTAn4e;-kIgtZ$!|-!h2_~v84&4Rmp#Be zB7Yuu>i8y~uLvBqzv8-MSHI>$nW2>LWeQPmz z4j&kL5He>m6|ilwr{Lc4*fWh;X#W?$<^w=fETC1JfUuIT`*LT9E(Ax@9`1xJ)(*A* zkM3QcTYD?e5}WcH0>*f;C}!|FD&ch!hCJkU=sLZcld2+SSmcnBX4#zQS_r_91DCa)3sN!oqy+sC_HT2!H0EHUeDr9) zEA;*vM2Vc3^KZSM9q+oV`$%gT7NSyZd zRd7bAABpnO9J1H{?1QMHsEBdM9kTU0MKez&9R)QbB9Ux7fCQcBw`I#(k8MO;)(B*s z>WD7!%QUYgMNN#%Fm=<9Jg6?W=$GP4(&wHMWQ2PyXB%8COykV_X^=>gu7+9%smyAt zok{$iqg{$2?LVggZ#+XIxg-o`T^2q2x-arq(VGrpO7`BdCrwyQ?WuBO z8jGsBENyK0Zl=oAsjY4QEb#onbfH9yNf{P)WPphR`sNsKmv-a)T;@?iOu`?5FI4-> z(*)_iYBq{GuJU%bY@S|O7Ear?ORGA41kq|c%cQa`t10y_3c*b$Wg3%|ET7dkb(H4h zjH8&Z!|N-Zu3G9YUjPC)!mbpN!-+i6|IxYCT;5nG%DnS}D3rPK=Y21+wA|zwE!=GA zzI#cuLyxW{lq(c}&Q`_zmyTHVr1e_Z)jkR2ZxS#M_J%`Xr;@NvlXh?CqL5_^5>sny zV;$UNtaw(EU;a>jEQ`6?ZqQ8b=H1Ao-$&Jl`e)HF=d%}mczz)Nb~JABE@haoe=+2| zF_&9wdPV_PdnPWep}PNTLI15K&BE8$fi8S=4WLc&V7t1le(x;5{Z$0f(67G-m%oq@ z`q%T}7@;=TLEsH{9qQh9!7nSpy`jB%MZOMPe|!ONh0u5Qxq068yIuv1pSF{dl^`?r z6Y-~a-m1^B@g54f^=iHJa|TuyCd^VU^coq}V?2xL{FfP9y`Dof{;0qP3MoHObJ3xn z&G%}W*mYn#&FmjMO!W&r-)^-Wywka4#|rHf0#S-e_^KgV%Rupqx7f_suTkiMf+i{* zGnB`cRoYKL%#c3eaPv{72+=1pcZw6W(bo2YpJERqo7s}h$3BO@NI^T9+WcyJPX{Rp zWfh?_ViH9?L#`7-TqnwYIx^;adjeRQl zyEg;&?aI^JLxQt(5pI16uqzE=O-J>8V$GiKbQdicw`S-MtAh#HuHo=yogPyX_M?ZD z8Ma1sg7vFk{%ze!`J@|8%v>)c^_00b&4BZvAt*_yzHi)x#{Q}#jUJXL|0f9{>X6lU z+aac$`$Wm36b>X=2wQ3Drvt0U-S5^r1u}zYz!UgQsxMtL~sM+2daZZRS4|W z_|6{z$Cma`O`jj0-!#)jMU$d0aG9zJ7WBjTj_ENV!pGlIwFgTA+nV}21Xz04Rb z`FSKqeOkMVoZP{9W8$(I`)cMuM5VY!fuDg=Y%iyUbY=brM&2lYcTe>48fcURZqBDhN&j@;W%o;GOqsPDio z>h8xAYc2-fvKcI|{P_7r|Detvg+E^&%9dzfHB^xhg5E96)t*(0&N$F5=UKB)`B@Do zOn(s|#zZZf3;Da5l{1r5*0eAO^BC*tmjaOVlez=@(c_9zii%SM#F?aD4;gn?bjLQ> z;64D!K-luKB5waa&jFEtwWL8fMZ0mzHqMh*9WM>ebvN^h;+g#uZo1jT$yH>>HI>&M z7;B=%c{%yO^S z52)J)YTUBS>nOc1KcZ>2AsQ6wmC=4U*UI@4s2YFb8O{`8k<*>p~l8URa(Zq#JQ}gC4Uj&y^{O$Z9yg=tvimF0N zj`3QQ$+0ABSHFxXTIz^UpUMs6w0PynvNO`xY=^U>T~Z;iU2_?C16_9VWVAv#<;w3q zS<`DgT?coKvpd1hmU>~Ex&96fl2=4H0y5`4jnZ|;kF!XccJyc^%cd2wT2b>cC7}d$ z&|Wz-`tCnE0g;o@xXPmgCAL^@QC}>g(fr&pp4FNn(34%9RAFgY>}DBoU}b}QdXXZU z_-R?~itHqi@4&~vzrH7Ed7E&xFGVLBSFYHAXkT#0m3;WPlq(U@4{l1OWNil9U4Y6L zM&$Rqa57O)n#&XGZ7`-*sEt~ zZQ;9`eA-7U@4MC$^WLS5N}|(I<|kK_<7)~YxLE_NQz#Xg1h4svf7WFCG5Wx^RnmvWX2{M`#Cv&$%8jP89g0)8P+nPwZ(`Hwd5)lmgu`o);Y?bc21-f^Dwc^w!qzqK@95{(PwCVFT@4{eC5atRRzbe_E+5 z$v5+@?pNk?=iRzr2g3<;l^Q=n-)RQAqjwW&OjF`q#e|Sox=q9ViU<}rNeIn?-`TcMx)z+~TADH<)fohLs2w{2Tc z#H6*JG|w7dKFMZk5*sUjTu_;zD@hxmi&Fl}HgmYl(>pq|Y=b0Y-v2?|fP~m} zTSiQ+WgW%-eU)l4WH~3|;D1uzFSM#GR?F1cYu45G>})cfX15}QGglKh0!)vQ`jm+y zT~ZRdV;LR`cQ0O$Kp;18HjDWgIX+KpJpxUz`$B5l>lHPZLZr6@hsgfVFlNfHZjgp2 zboQe;JeBu9^h3<|0b@Nt){937(3rP>Q=ufIOu|CQ;*eA8>o`YbM}ur1@rmke3Oe|$ z@Yl%p_q~wt|CPePmkWWD6#y)cI`f8Qn5}M3pf^jG2rAxAuS)y8WDI5U6PpJ%A-ebR z%cH<-Ouo`*XR(m`hg|LSOI*g%#__gNd8!=spex2GDJ;!$DjabhB9kGr2+=3kSMM%b z+X{TD_D|kD!)-xcoN_{JNX}Vj-%0&_)9MBn-ULiYGyO+b{kC2WkVVazjAi$QauXMc zi!N{Pwcmf_@JU%o&iWJK0>#i!BDWB(YIGJMC>DyJUukn&2@WN;BoZX7ZG{JmW@ z&q>Yb#2l2QxZaIm4LHR}h7=G*6RVmY3nh4z0u2Rvi3^@LI`5wh3n(87UUyvoohQ3@ zH)rO}^Px{%2TY(4GtBJ0?K9~AQFI-SQ2u{hsU)OiWnEUv%-*h2MlvFMRkm{^>u_Ai zULh3al07fuoGm*$^Emsg>^s77=f1z^_Xphb+}-nhKA-pd^?r>@!RC|SLNg2DQXk4} zw(ME%n*M!LT^&0MFnSYx6>h;5$Dy~iDu^$r#;lt139lUX&N~)|nRK07%FxS)QH9eqK+Q zBW_afj_sShV5$0ipGExrg{Jg3(;~{Kj~e`NK0t*;ku7!2;F9WPdUvRg&9(#NB+Ukn z6MGV?)_xeBh;|yfH6y(*ATL53xs!S|5@@2v{!s72%)s$>YE==|ReB8-YTyE!@4=1_ zezR3ta#lB7Pbe<0|201mcWyKOkMrNGa}?*BsQHLnECQvgXV;NAkTuB5qUegCpxK7M zJ=w(#`3MDjwjFWbkw~0pXa4gZ?k+cR@q9Oe1BO4x`AzRm0Za?Sol|L&0-aOz~41e{vjh)J{&8I@p zNOUPA)pRNxEX=n<>J}EwFs4#>U=uqooKk6+I}T~xp-vPT5)_Y$$&n|;qJSkf^^=su zd!>I|YtlI}fVYGv_*K$UwXV<~#;Tr6@1et130nMSMeHe=HNI)C#F1IOmBJE2=W)zL zs3^=@JNYHnZ8I=eQE+vTmgx4kD7NIRk2Um2M`d_;(j zQ8OjVwg+XDd0)xpf(7!eQ_uD;cva(f2lX*GMAFfZnb2z*42ID`*xj2Iz-Wmjl-qWw zXwhC9DiWPx;^;d&;Wgh}p8rwMW$v*Hjj1|AZxA?4L(JW5w@fZbqGfIFf=hL9@lt|E ztm!9N%=~2;<~9S!&{;CN#Hp&LtGL_V2ixWbwO<~JPF8dC#)G)wAyqXQ*7nRWpKcYU zrn)M^>Z+J+U|q(^1J8H)Pg6-Vl8?l%f@lD8#>3E?Fw8G72SqU-uzDMVyD{d_jZ4*9 z`flq&^TvGLG&w6A%?H?@yc$zZ30sv7zly4AbMaz>i<7>PpKmb}X*C?z$V7FWrYbm?bLdWvHfeRi`$ARlO)TVU15$(=?g7ygZ(D z^VHBjV5lwq)_gc;K8s+Y(0Z*b0y{F%JRVpQ9;C=h8#n(P5MlL9D_#N_xl@=b7bhXG zzHVs_FFgp961{w_q4U9|B-s`7E(r!aIIdRR{#k2FbE}L^NR>;C>%y#$a)K06;@55F z69>Nphjg|Xo6w0+ndoEJw59p=0#CT0OQ<{~+blM8%5v@2J-0m7?i&s#c^Q!ghy&d!P*P*`ug30{RcxbQU4d{#_t5y~1-1-7?p0H}x3Y&=5LqL1 zlq(=ogKIm8IR=H+#iK_JvX>oe(RKB!ma{1vMB&Bc0`Z9flI{`;0?X!vVANnl8%WM73jN=?5Q z&Oz*{DuHAbR_1Vxqs;VTmNe{gS^wbrJVabxx1B&hZM+C}vRo8?Ll@li@qqP%Jjs}+AAJb6*W8J8^Um42H}S^a{*7NY$ns=e`x#(mOX zcb4f-vY;z_0V#s@2&r?|j#G@}R{*{S*tWM2ONEK}A%<>$h80w-%7oQqPIhY*- zB$(3hKwH);WhL41CWmN2(g`mNrON!}WdgP#7po?2qmC`Xx7}1z6>b^C0tirJ(t@fk zKLn1K5A|StWbZ#A#PD5=-H zY;!W4y-Pk;Ce;Ms01j4V`PfP($c$!u`!E`XH}YM)sGI6-quHsqN4G{IQ!Y$>$^zC{`#p zlaEttNSFe+Be6D1e<4i`hi=9`&=kjg9iOumv(W?Zr97PHce>`#w<89)NGzd3MQTaA zWGE04p)hSyLVB9xmbt$M=AFYo*qUS&-vHA933`yqF}X*?WeUW>ovZILRI6HG^pCRf#3;;O=@`Yh8@f zHc#lKKSDsig%HOznJJf{Z{-vy^_8iD1`yE{8NY8%&=to+){lP&Zf* zPmX=LeXL?B+-$MRH0z@WNP#X{k*pp3cv`t3`!utq#lccc)0-t;;+++p+}Umg^SiCp z)aja<_vatj$H1RHgACtUsXrb>nckPd9LN{sZYxY-z2`Si>hMpEe?=W?Uckmti;IB! zOOrI#_jHkX#clz|w84Y1v$0Ej({VG9e1a5(CAvNIGLexhnj*BIHkH8t3AfEvx-c_G z%U!ge3mbeFLixvge?;X4S>X6VaLuWgO6nXg*LH^e&tq>627x|>HIX`h#kD=LdGMS4 zq#Rxnc&QEa6wiFKE?WL%|KIP{!Mni&bwC!~mro@u)=dA=sBuR<{4HE|Tm$4pl6e8M zN*~~7w~#7=U6#)U7WNhvaKV8;YITI7w3=h}=$?+~=CpmCb%yvm8*QU4d z%rHOX{Z%&u1T56st!4b~Ba>syiiiX`{t9(-f0lL;PHPnP08DKXs!pIgR94h z9zngkpp{v0TpLL3HQt&VwHvH%ZIo)^ng5|Yt(PKlk_Q{f+mr9*y)a}KOs&a^sTSOsYA^;e|;NS zE38<>!twX;weKm<6pW&c0%&A{X>Gg!;?Vmuo<&x#W??SC32vZp3-PA5{$pxf`L9BP zGXDj&^Oae7L;Z>MKj`~j{8{+h6?vaycMD;ApHj8hCc-Zm1z{WDfh14?T#ckm0D_yE z2@AQEbe8fC1>0j=nOR?xw%=u@%~nT1SOR0OD=X(Nwc)F-|A3P&4%SWBcbhZE;4nFMP^Z zQ#4;i9Gv6kN!El#ym=y(ePm_G+KLEH1_TOM+-k)t1dWML`}^3&!-Nzye>q43vvVlCyS#><1SxAi6?#&iav+zlx72#p&M z0$J{kO9)c?$tjST?fUq9JxQh)0;=!>=-yt}NgKVHT$vx>Ajpyg|BploUkfz7S6;P% zdiAIJkM!JdBzUmd9Fx(LZ&swi|2R+o_OWrG%Os?p#I7+(T>SL{HCVl!A!>M{+k~b) zs=O}t;6W~>8{9qC)Haj;1Yr82IzKTV>3f%?c;UuGp^UP-1$ZyE1<-@@Wl!Zq zpYuOfT7sxyZ9*|BS2TgkwJtEc7w!D%cbCJuc>Uck7B3&XBU_*>~bh)@ItdcH&r-de}Jj{T5dL^`S%?NRffp z5u?^?+vF80+nIuSWXZEnFGrW~VkYmJ4a(s&r|DIDqD}7Cl2ajxX}#DNmVF{K&K56= zl~bY^q>W^g@*{dz#&R1-VI`tv2$x~a#DQps2Jf#)Dh_SWjzdNwd2n71+koCFnGjFy zYxL^0eRkNBYOhh7)s+cy4%_|55M#V5GIMLMSzIVl4P%%o!7rmYV6lka=uPBU0VVq0 zZWb(sO&vb}<6G~soZa=*Aon;7V806*w#>)t-Oq+erw8D|OrOGMT<{@pR-R{>j_;X5 ziI{gE9p60UMzl=$4w+^4at(S6oM*lptbSL({gxt~wSHD{Sy%(A?_gC>t37jqAQ+X+ zLP1?d(-w=1?kf9HaOLIhY^(a;e9f>mU9`$0tAqyy_#b~c@K*hwG?fb^G@Cf<8V_L!P-$A4X6 zjqXwDiVZ6mG?4w4NM)00Uv?tOoTE*)Q6$&o=q!%+lFh1l-9)=#b+FZ>{I294uNiK5 z!zkOR?#7T8oS5(#@ScXv4nq84RAV0#ivM{XT$M=I9TYO0o=?hxN^bZ1Yp73&%YS<; z77ud{Gghdoilw2v)8XIR+F%9-(S*RcbqXj-+*>@gYEVJ0ri)&B8M%S3bWr+x6h% z;bw^NsGv*f(b^B)b;>g^OOoO3DdTb9ro!m+MZ^Lu8-@XW#LY{#UO`qHAReN!;%MN`dCz)$C67@IRl4r%bu+d>_Ie})Z1efi`vy=a9uyV zzJ{wvpmSB~lSqeH-eFUd-zN1m0lf2&ZqHXl;hN_)ypr?ze}x*J2ySPr5Q~A46-M~m zYmO}DFM_9`I`s+7(Mn5RLpBZ{;?RBPt92THVwnts+mVzD-7`XYNwIhcL|vy1mzVK( zp5x>1%CW9tJ#E1UA_z{NSLT1X%qbj;E4!$$g0c0qc8t|~?$=Y!N*hDuV>#bCDN3O$H!05he_&>RSuZ>L-k$*SygYE5^g*;B_xNINj(q z#)l%KbZT_cd9&NWnj!pKWjZ;Xt0rpWpCVA@jh?sFB4?3Hp8_~;S>s@{&kU=#tsFEq zgb{0vv_OW|>hZ8DzEuj?j0gULnL?$gV?Ho@W28O_LZs6|V;aXPnjy}+1*FmiKNqsv zxB#Ah+1EdDTBUC4(&`PcSnXyrl;F8F()ED!gPCzoaPQ~D>j`TAST&pZL5v6V@+UTB zo^!}HDr%8n%3zq(cFk`;vaNO`u@>+EbLnEobAveDAh#fPpd1nBx^I+1kZbZF;4u1j zDCJNdzWVcLr@1L>%R-%t7y8q3Raa4m)Q3=7bOWG_D#Ax%W8`CVQw_i$4$D|^XInz&vPL1 zR8TyoI(%h)&%zw!y;8wGsey>K;~mC-wl470woCu_8Scd3DgAaIwM)?nN-4 zg^umxb8^fs-3W&YXI?FPukm*soud+AX8bh7&gCD#sJoQeJidci$^kK$T@Ln5))Ny@ z`PT75m0m_=Pg3Vdgmd_5h~h@&x^3sXgpXpUhrlCyfoS*F;HGw|IAJ5;fh+k$?f3h8 z`E6)O@coU(F;8pm-?}$nc1v2um9d~wuP}I>%Qgcu@>qb6u4>4vkl)7BtSD2u^pv+? z1IJChu)23Hc1ZD)v>ICYd-U^Utwtl_91TY}EHTe0;+=~EWjc9LQBsc<{O`GhrN{(3 zebF+!t%TaxI0i(+;RPgwF|jDFSr!j<(5)f>3OBFU!Ee(vN(8V;^~Lr43yb~O2} zv{N3JBiaFG+|rUO!V7!_(+U32h(<++a;g2WH8gIMsm!hXIox#)%{+dZI zvDJ|*UU98tUVv$^>1RmL@en*0Z#@kU#6vZ$r&{kkDur;2w{*|X4<*ix*{CY$RZVvW zEZZt}s6#pt*WoX-3W^eTM6xbrDMb20s)eB$5CqB!R713;gm(w3gFP(k?W{jBKN6YMEp2mmfZH@Jb zKbdkONPOTfuZ- zw~)sgliHs))l{8F0{D6u6IEXK&TrA#m$0?q-6Z9PM7M&ub@n82bG4VA)s5kF*R6`b zUPK@w=dzVO6ujT-2ik|h5rwb~qX`Z}EK0Byoq8j~WYf)6D9MiDv`j9ahD>+IZ^QsH zqj3i=K1C68@GjiSurjD9#*K*L<{uS5m2ak62SVOOi8u&U_jE#bm6dzh<_)S>n;D@( zdn3<*Oln{xO7iJkV4r}y0kJhV6uZRYy_la@Z-QJff0))jG2PAM?oF>x1=rQb(sPI3 z7xcNO+z8s?06yjt3-`NRh{i(|4GE!0rhfrIVT4jebtc_vzVo@>SB^gM}??m~{uz@iXRkxbxVa#d&wa4u3f9I-yO|{?h{E_?y;7 zF^L3hs*rW+)q#5>d{lg!DO{r;vGfhW1X#bvZJR)^bAC&q41}W`{Ns4dMTBJjqhaPm z4S*w0B#N4akM7GI!LEDW%2?vx|0ll+6kMq)j;V1~eIA1)n=^r z2+FiUxh3@!oyyv%+syVh-g_-7=|20EVTSTGL%t&_TU>D9EpiHQfsttDW5-0^@-Zum zFxk5E1s(CLBD^ZeJb)UmulW)y(14Yz zsxcgOG=n~~c22bnuc`ii4H+1F8P;ocCWfbLM_r&mC(u#}M*1s50Y>$cN6b-;>=}(e zHp^HdbNbiy`W!mbgaVk{z0sxyOFs4zi1xcc0=#`YxYqX!6U(nfWNP_fX2+Z8ArhQj zHiTmR`2nNtB|CuI$-lT9xNS!!*dNDu(NO1tiaJ}a>sh1dVRZllv|01JZjtO$hst{s zDE{XAN?J)P{c$t46F{&qfa8`)ci`;=407W2gW{R3kToyTTw19k$O~%nWGNV?z4gY} z>J-_En@U4LB>GoS-^7l>i=!P2ps-$F@@pC1- z6?1Ccw_|3LvCT(zTkM5S-riF5!+(<fLz&-0pX1-i?kWAqS z-3NrT;Z|^~=YTI&BH)VCxBY^$eVX|5FvIy5?LgFvChRo}>UZovfMalZ8jfg})(~S} zh64V_)IZceXmEd97Q?MC&b(a#m#Fth)Hkh%QCqsB6NladrYwye1wUh!Z(J<+ty(Pu ze)dzm8RPZ!6f)r{x1Jy-CM9&)hS^8~iH*CRMQ^TF=7*{*tSDKXNQ{0GR~_gA-rEBY zx7<25BAMsHUy+D;z}VK*i*Bf7F+uPt`;40W#k_{n@9Oe=s-s*#v?9ogCg`MkN%ukZc zlvn}7fwrH$ADTmQ;YP&E$+41^&5FzODz@ew*eu$Xp`2W=wLxOL&vDH2t{;WHLS5IV zfC#}g6_MSQ{7rv_pS^^D<*#oR#FRW~tsW%3!^j#aFs`%Ttj0xMe{Liz6s#$)TNFBV zV+K~%i<{8ku)n?l>(xC#Phv=OFTG`LPmN7j;86ykw8*7V}CN?9Q zsGD5Ian)*tW`{GOCfv+H9`7h?-m}Wb#dgHX;dPtR_qul8$iuPxu+UKkk*6Y|;DQji zOF^=9!8;|1#NOHT)}8+THN#=u#U#ikGtLCh5k_$$tHagpuj5F@h+DEx71}hAt{zf% zo2?=+pAhzXF$S>NI-#>J5kk-xjt5lXrHgE5>YauA(uqX z4oSJ(R*jel+LgFFNng9CYF-xXGu8;Ar|1%;J~XSA{0;JKDsekgsH(NIupWxpi`kpu z?A^nkY)nt_HV1bFx7wd)6=1Z;X5PQHHS;e2VHr_JeJmKSb(88NR+R7jORUy_3Q*r?3N z@IZHpiq(V6^FzC>0%pM;;7ISG+g_xS+V&5ER0P!B{pr0r;k&CT=X$tY9dq?eHg&D9 z!n*c1&`s)}D=x;}E4=WO)#!qK+#A)888UtJPwv0BuXfuW*%V~rXT4U<{A zj)P&J{1^YDnaZ!8eBCyo z?}~k{UY^;+>DgE<+Zpm1wIhoy>BoXf*6c&VQ~_ScW0%{YmB{r3Cz-^x%c9jNQ;quk zn=H7YTEA@v&_yn@ky0wC!+Z*)l6;c&!}xappikvo+)*!z-K=049Es4vPSI#+q;+m= z4?U_Fv6OJ;`Gu&rk{qvgze2t?2Q(o^>l08o-^n&qm`|K5ds5vqNUM{?hK2Abio~6| zP_H#C4;fmK)`+stFwtFHIaPrn!uc=IV~chRa`B!HHnWsy(WH2;TR%mwGqVxC?1>g| zB@OqY!wL)Zefa1Jnt)l;KF)ZIJNfDyX~kFvFPo8Md}qANu_+_vlfbLX%Q649yG@Cp zPN`Tsj>d+X3ANWN5?4;O*21>{(K7f&gFT&C`)TWbix-TpWAU~)6$nIpG%42-y7IWX zE$b4YB{mDUcO~`lzC^#)qk(&ZL*nhhVYY_53}ks&>Hcy7HntgDsSx{PM5zi>J?WBV z`*^IYP(kctC-+H$i<%2(H{4;cthBi_hz~ni(k&*qY9C{NL+wS;R<+wl(ri~|_?-pE zQTH*!8@(2%J)wDVD@Z%6_u+P9{^#esCzaszpqAvFk}~TKR{gw>G|IBiSZ|$FUtIsD zxYJbDs30k47ZiHnMZMd!5{I;u1-WqiA*NMsw*$>cY{7PUgxcJ*Cc`E7bZo4AEGz0b z{a;GWYH@vL(S{usyn`%fW8tp2tm(&@y>@JcshZUrfl6q$?L}NHBT@PmURvs(2mRRD=bzWO276lw_1Oa5jaoN}G=zi<<#~AN$eYb|jmQGd~i8@1Bl3B(5ap zX9r&%45Pvs-y)J)W9(D2>=5gBqn6-GVZj z@cIf^z52-?n1io#wwraSbA9X-LVsDuSKeh^5ww#Dn|Z^FJnpT;d8uQapObR>&vwyJ z_I5dsijmo)n+(r8sg_UX!b6L)Hk!Q%KNf$TSuONO6iDe>~==RT2z>b$tJ`k z)RM5rp;doY(a!Zrw>t*bqd?7mGYQF=e3tXcEjf@)@CO+P7IC5W_np>gLl{M>65%pa z@NKY8C9z5SUIu=*Axaf(BG6s$h!ju2w<;0XTL+fOe#ya_plt37^ve;gqhEvL&JLGA z@y#s%(Nwj?%jv~e$irVwotTe6{0ish*KV=~4zLDl_73Pgkm!%zI^h^SmovdU(B=4lTeqFDWBw#iV%K|owR~Y#;_x%XUiu0 zfzGN3+4T`e_0l!u4gkK$YB8O}2r>NW3o2_mu=?`m)-5K(u0vQk^>e+ zIV@W&n0YPm_R>m)QOY(U$umWI+$Xx_*S!bxiq=dv0Xu@CNVBOq8|!Tj4(UGf(8=W& z|IzSkPn8?iXb;|+k^h8YxF+8W9rfqQk)@Qio_|#nb^~0B=Oxy^;=Zt#sdT=j+E~8f z)G+x96$CavyT0Z9nf(p|EZT24v)oowWFF0t^E||R;-dDzwq4i~1Bj7wiGYZp=r7ye zG8k=sTB2K`tv-=}Wzpep(-{p=9H<%C;4Fu{3Cw%5ayb}j650nspR|KWBA6Xse6c)= z{;$RzK%=*KtIYLG?Z%G*xr;-rBNAPsx~nsLbgR$%auhb=2r!L%n+O1ycGU;}T4bs9 zVkBvKu^7^2;*r-!xMnv;ZJt!HW=dve+Io4t#+ty1S8H?{*Beb4gE^cmmjG0o)# zJ!yV#CVfyWap;ROC)gY#nFNx%tU_|)bB7eN`M&YRhlm`VUdE!87#AG|&4}vFQViAH zQPYdcKDCTt;Y_gJU(D}KLT49w0WT>xsY-E*h@byS083!U)R{I-Ci*>*)#JTa>KdVL zlx<|V-S9P;1JSNU;U`N@Lrh3N7L?Ju&(2m}*6LZic7JR35qL`OCJ#P*{?<@LzL(;9 zjyjUM;RaS;Ip1WBbWk@s0)hRef9Kd<8LGuDa_H}$VZ^XHOb0 z&L3>B5kMb8Z$WSwkqp|oTUc^l!mOSPb2d{4^wnTduF;Fu*S-CaeW_`151%9e=F3rx z>j{z-#p;#0?sDgLQ{Wn%WA9T%{bNj^<+F?Q_VdxoZ~cjO!GP1xH7*TWiU8oe_5ra> zH+EE_rs#F7Q~7jrXueKL= z?#VO9gCW@?e6CrAnE_r)5C+?z1w78VW?txHubiTELqg3F*d2bQBk@Q5&lyjdcg;V_ zZHO;ZV)0xVV$3?2>vn;S|xFeCd^k{I*%H+GWoEjNPqwWIwy2W_yAQg(Zr4=GIEl z2S46`9`>LpWCi75db*oc;Vk3xpLpJ<4BWB2l6MtFJ1_Uw=&-KdtGsm_Ncc4h9J7_) zZo46VB{P4I6>-i;xoZB;xVvF;5Aug@TC9H56zFX*wTw%h_7p1v9zzz8-wa5aLvO%* zjHlF0LdyOI@qNmAc4{uUG>mv_{)h`XiqEzH z@`mia1h2m9O-_rTVy(_6GJG-4F3|5^uTlNlmNM$b+z}jVyk1w%#~w=d#q7OaTito1 zL>G~8w3|hZ_Io%+DV1qIj5}rAGWhD5Y|Sh*^r$cWAFBIkcprk>O>o}@Xo z8olq)C0B#+#e#+-E8k6V1-{1c3#1?>Y zS|y~i6SJP*xplse#wCRMQFf>U3(6CK<(Bh+aZO##XNz7HJzk2jwo3>UooekZ5Uwc0 zZr1|YBl(+k&Jn6c;eXfG!?_i0=sDot&l*gAi=`siH@9cy?RL(;?s@F<#&r9E_$Vfd z@l5jKLyO3odJc@%qvt#*qjptWl9YhsD_ZOKDbI%^AD;GC2kd-E4v7{q&dZtNxas==T*!@9C7W{!i#_ia{gsO2Zp*mx;U9 z){w3Ri5}X($5K)Qkq*Q2Gnf7;mm6M(n~-+%U^U%YJ-Gx#*D>I@!DuGjQaw5YjW|u! z6v}xM7`N!l!PE6i8U9qQeRcx$7|2S0%%`VX|(k~WX<&c)> zALPF%0~!Q3i?+%5IZ+8CH(9%x`}?Q=d0;2nSeh+~4977fp+>$m!imwS!<6pigjC|c z^|1oy=2Qo<$4-YgkE^w#+B>fFyfptfL+x#2mA5pz=j+ALEBE=f7pFzd)0{8#_vQCr z^h!B5oT#1tsrj?yOU|g5YFdL0%WhL^FjnK3MEE)o~j{WJvZd$!yGmR zTbmUSN$^lxBLmqRzN;1E(~rIBe(tqWb{T%X?Y;;0sapT107o+W zy9`*PO;7*!*ZY@VAuDV(*Hz)O0lxT_TV3Glq8JJ{q3i__4k-MNY{B|j3kyWKZ=tis zjp)NgN8uldecajay|I;I(NoRJfy*IQdQ8uzg1P_Vb#e56dPOq+Rtqj2qEpf%eD7=& zLJF0(7x+hE9`{m@FbXLfZc)ygu1fPM#7L}x6vT;u~M)qfleW>n+=dks` z(Z1a>nHN~O>Y<|48A4z1k}b1g4FNY7k`oeamZK*jKSHV136DzM{6uJH?I{Xhn&K?) zPvS$WyWKm>deJeQw-(-{7E0&jmuL;qiGBqRB%ZugL3XtG9Mebd0z8loi_A3_qDF>6 z$i74}wSO@^IJ(D>#19x-erUasW;V7;KqZ&&{2B0rF0BU$r_@%#x`#f#Qmc$e#6M=cuGn$~~pjoq)T z`r`7rFpiy&Y3tu_B|%oCaO%jeOlll{gPL9M7^RNu2D&=TZmTYNyi5V9ry#QktY# zH~Btvq=KefaZh``^h&;GK94UGFn|0%Ke_Fvf6Iy#uj_v_JfN4DF^X*N;)11>r9|uI zk^sI z>k$Z9{R_(#_|NLw9UH4#oFRlj!IYGt5GSD9Xv0#NiK>?!=2CrIO;Hq86}bE>I7c8Jc|&`-DOf^s>Vmh!?d)AcT0Or@=FE3Y zwcXg#-tp#Y(bL5p25QJz!JW@j;E1Aj*^nQ-FB>!PU^GMetlZj4&)aDsP!ZgG1KML8 zAFh$=T^BuAcNN8OG4ZPl=LTzUWSW=#XO;)DV-<5lZ=rb>zY?_S=dRe6YUv_(Hr+=% zDyyQ!wSObx8s)uAGNxobFK&3*d3T$CtX%vIr9kod@!KmO^}~)qs1Y*}Z?Zo{tBwtaqdM^?WH1tLgL1r;yl7VzMHs z@6Yie-c!~824Z%lUYl^+pEhb#=2&b?Zrg<-6Ty*xRgp4(GqZUA8Lk~q+p0=Pgz1vD<1!BZmgX#0zs(>`Q>pi8?H@P2RVXJ>9ff%NFu-?r~ZRNPjbQ+ z5EYX&)F93v9$17;6_-NVvL0*Ln5)EU))Po9PO9GW*A?`qmIY^}ZK34*04D=@L6*KB zBWuieBLeeCIDLngWAGP0It$!n=%miS$l7*=h0QkKf2hT}Lbq=oOPwS3D(*6qA6uU$ zGS5(j-R+zFaIZ|8w14fezDhQHwxhuSXC#1jipUVwRJ@xrVI)SPwL75bQ=2s`uUWXO zk3sF?!;44t41Xchh^1x_edtw~;0h?FS(AY2&bgP?!zVFlx^H{XZCc(6?{+2dp) zDxAWt7+s5GarY16U1fQs9@*0Q)Z_1eG$GdEtBNO@ugt^UQn`_wbyE^+b}Geu*$2BM z=HZqr3l@0VoYu*s7c+NZ#zDxJh;|`)$R(iQ`$)MSWqTNbr*Sg2OgEUhWUKY|1J6d- zBHI|SU`9c#@}S5zf_WRmq8n6BA+MwH`H9|YUio{w=e-$^%RYX0B_e8oj7%mw z82C7WR6&$sru`dwn<#`sMEic%@*|hIYASttZ&7+%>taNc+6f8(Rl-L@0Y1k0PeyR9 z+M?4WI$kJEZ}eX+x?V4MKqvn-&xus60)FS=1%E0Jc3`D2&pyMNZ;uZtcS~uJBx%2! zvJ9HlTwdH+Ss7up++uH3KN^XVBVY)ZzBtE;Io*3qpt)vEo0cTDhU6rD_=^K~V6y?_ zuv^O8qfcOuCcb*$q%OJf6!pFB4U!hl27H}JYI`U>NfSTtf25?Nn_y5-u?-1WX7J5f z>FlxOl7qZAaq2RxeIu`Yg34|c`Xb(Zn?Pkie%akcb1OgB>~oS{kl7PVZN9g3Xz`*p z@Ab>XxS-0~1wApT8As2O#NrCmj05fHK7ZR$!c061s8@c#?G3l(?TpjBcLBS`1HG&6 z_su51C+QTV;DAk|rlTh$z^Yaj?{P=S%1^L;LsZ?X}%CpU~ZtaWyyC96ve5ZiaoG z3YqAcJT5=pP9lC>R9vyyY)z@m^17><5Gj5jHTc1AX47=+U_qvT!F}y4C5z@Sz~xM7 z3qBNGQ9>+e1o_xFEmVS+FA$JtngW}cpv3ad;khqvqe+i=SRVDFJf>QsONDz%xO#fu z{QmAjdap$F`$aLwdU&+nAc?9*)suNgV)tH6T3rl(n!M`*OW4S~M*kSbriO7Xt~oZO zUJWF&h5o-VQ3Sg(-`FI!7fVF;59Ur^`iO2Y7H) zIfk;pq(aBJB{#_M%dG4|(H+Vo53lIZvK<8^v@I1QYLM;!(M&t^*fUePlp&n>S^!Ni2A|gA>E`;7=1c5o80ur7|TdAO1?jx!L zHcxxyt5vO&o(H$bw(x(iIxz_)$SnVQx@`j+G*!_{-@$2{@x^~RJtaS;Xhi@wt+VeI z8@ipFwKdY+SpIZ{p><62U6*dtR|ST5T4Jf$J=mUwEVXdmm?TzqR zL`!$bK5)9(66V01h$Unrb2o||7SO5C#x9}u`g&SmsoOCGDl`?~x)-aX4#Fzq426|>T0<KU!23U}bmO~-DeAZimeg#90BR@25ZP~M_aRa5yW1>PdzD!-Q{l$PB*KoR9FssRY zPw7jM%s!`6Vx$ltH6dD$hjwKd#!>jcw?pqDb4gk2i=BULwiHixs&xHI`UC@qu5wyb ztUP&mVF@!**RUVe#`X_&o!ZW)@JCY3A%CdYeh%TjN#$xZ%48qwg(bvt?VjTe!)F6n zDo)^l$iFYg`F$^U4G7Wm$$;0YgY_sKG8p3@n-rx{1g_5 zhCdM|=LcDaaM?qV50En)Jyv!NOCg}AX@@*CF~kM-31EA;`Q4AKdG z2^+KtQ|hSp{TQz3F3V;P-W(*rgnAN-yzeER!8x9?cDhDE%0?V`&F|V9lQ@ni#t<%0 z#g4OdY;v<3(HLUSX%7KF_m*nYAR9Dt!V>@o5neDW)LmH8P_;dLff2 zV9#(~*fFKpP#>0;v}oMgYO&}Laoe>{_6E3FHSPhLxc6=1F?M>gRc^hJgK$ zHy$!YsEC{yMM=o}SKBk5=YW*pAUALMqr(fWsjc5ju(yy)3C_X()6%HOvJwfw5%8sYyxm|!&)E$5#!ST`G^ z3d(f+K46-rRx`~k`H9@U9+GCe(B{5tkDtHa_uyTT$Abt4j*jOoYS({u3d}Cf*|x7f z-22M)+| zZFTjsDTK4(j9%B`Ww0waB1fjxR%4}8Lk`oFtzVBxUuldo8<$*z;iQ%>gukD;oE_PR z$9z*7?WjjXs@3yK#J(YSA_O zu+W7PnY*IQ7~3>^R3*TWlO82;;vVJ4gX|5Izj6{ znr5fX8dB-4Vo^{2x=Hqw{{2MjwmY7i|4=a{!YyO!ldLI$N3r=@KKvo^Vn3ju2lh=b zX6(Ysk-vMoJrm!e7Jz!TXCDjDeReA8xm=H~d&f z8;eTLavf*pypc2%On+`izR86!y2PNRrfkZ9kdq68@5QS;{zI?EU^n zW~Tjv(UX*Raq3&L)-s4YFlPzWEhTC=DJQ{CXE5Pxjo+<&+S0P0YcX+B<~2)OUMa_l{8JeQ>J+E6uJ-1TC)B+{O3w-i)Py%^}F7s)FB zwVs2(HNfSZtz~Ar*Jt*L#U?8dSvugZV^^aRr`~d;VtVY&>5)-%2J{>a?kqobNV*H& zmDfrr@c#)(kvbF*R!~T7C!`0aBP9)oktO=Xp#vAUZW=iKAsm>ym!Sqg;d0qI^E*jk zpw^IWlk>K6=p)S;r0}{=q~gmsfotq(L4-2n8shwVLykW(v@u>>I`qNk2O2Og@6Dn!;1Xrd?f5Ax*jm`8d-(RTjbT=`uCkp6Av741tDqM zCxkRAXVgbP*&|z+&>rqBd#+O}JXsrytD2qfjiaO&{R0mYJg5MH+9%ApHr7=&FjhjMK>u5%53sagtc5Eso9IjflehHBc^2IUvZh5nI^L;vH63%_- zsAl2#@sP6QjgdnYlfh$)jSUhv<@ZZJ+^j0fYP~uny~a%^&>CWvPj(>*t1^98-)|&y3BpVS?`je7Sg%XSUDDow~do`$DSyian?^7Sn3+&T3Q}mb`B$;UgoQ^We z>#NwpUqLazUv^YO)k*P7aOP;0FVM&3({4_`4-A(l;qK9oa=+ldU;oyU3|Tb}QHX&~d_ zxN9a+5aCYwLqYtd@n)f=&ViU^n|B`A)c=Nh96ygW8@tn>?Z@EpVSi|~Z-p)*^CWX3 zpzv*PV2daHuV1B24s=E({9H4rw!33JtL`ru35;}duKOt z+{yc-5`u{iDF6syg9McfUn6Wc(*4Z8_1ICsJZ2+SGJ)n#`Sa@%JMfP%B?8O#NWOI- zqHjUCsw$B^^TAIAW@&Mo$<|X+Ll%Fzw)IGEr0V+W^Zeb>IoVgYj<-ynUxrrfnP4U+ zruS1jHEzE6-zBs)2$|Dx3GorKBt@`A_-4t64B0aEl-nqtaNP;pmxy3JQ}emt-K3mB zQAB3Ly=`YCo>NMwEUIa_Tdc0L^Cb>fHq0#-da%$Tw@JVFIz&M*x3!-Z8~2cB&hSdV z=F`|W^ZYE^c;d-pN*RzQ!24|YS`swUjdgNeD69G3{aaYy|5}98AF(&$T*s9q-sF5* zbik-)ACY<&fpdMpaW>@(+378O5y1o~&;-YKIyNTd}xdm(5h(q`UN@&jeg4X zARO3N7GRS~3OhpQ1{-JKDDbx_U)u}jfL6;h)$^cT$00*u&k6ePCIRY`tPhdZ?TZlt zU~{1IkkiIHVP}Qi%2MdXpaVo?73-NKbQSmWzF6^h{CnT8jAd514|`L|`{r2X0~?3ZW#ZUQ%B);YN5feqSXNBJ^S9+|ikJY~A zJCSQafq1__*!yz_*J`pNQ8Y50L(z|yed6%2uJPPEk!Qer^}90-x$I`tqZ3Szo$D_a z6KsWvHOrlh(9wFSdPu#XqraC#f80ped=JN4CBGjj7`%F}D6zr;&7kDVa+Wp=#E zPdZS1FtqjQTc3p;PqtM!ii~Y|xR$uf>Swp^^~$;sdd{{@;u% zId;zmmKoUgwL;y8nmw-1Gf6-1n9W|%6U8OdI39GfRJ>@JjMH*;VWMoKLr0@)68YTg zW7l@O<@e^_Q$t?ZlC%$JM4o}adCuPl{A$dZBr+ot%_TTG22nYgazoJPL~I~KcWUq# zdsCAT?-u#-OIR9BEq-mTqp|~!GoR{+wpj4Ql}20)8xXt~E+7of;nPRj-f_!1SGH{L zq}-QJ2-u@V#n~5PE)Bw@p^{T7`~kTm@`<5*?e;Yuoo`r@gfpP}LeF074A8h#z~W$i zxaztR__-xiBC5kO0C6;W)3r$lt$GXF|GnE8XrlX8N_wiG6CCb23DKL_9U@0h>a0#Z zohMaHt10gz`>^smgV)RUS%&l3)v;}~p)ThDCaUwf9B3LSV#T)jEp36WZBYe@1)u$u z;+lFZ)~3fFG(vNe(mCHOwK?q6<>tS{|BQ)9UfT`^6xG2q9(_Eb{iE!GdA(GA%%LsQ zHRd#LfGM*lZP(n;1aXd3oT*rff?Z`qy9ope@*IIk(vXOn9ALE(o+6`6W=S@WBy30p z%bA=>%R9H~+s5rCc0TS8_6={R+cP`jy%mv(ZGb|(g-R$9+YAsuXsx-f zSw&dxcT!2zUcT$q(q;LWEwO%Blw|;)afpnCplo+|f%TwGuzg213Met(QsweJjU;@1cOT3KI~PxU_+~|Vm-nEHtKUC~?7VxDL_3|%Yf{9%&$Ve>W|ARV zrCB5#WM~J3H5S;gfCzy-tuMqwxdN<3`mkuA>R}h{CcW@m1T-F{Y(>Gl)%Yjas{6hY-9MJz$Cxt;_sq~FZo3lPU# zRJ)b3))*8J-aqi}pG~)=jlugqX^C=o-rf>2&j~KA{t$Qm{I|R2oTqC*kb}Q=AD;9) zz($A=rxe@oQHjM_X=Nc*4XnjYo*JSjSRN7e7C?|sSSbLoM=G$zvh7g$* zzElte&|Gm*hHwX+g#l3L34bfi0fF=y)HO)pjL@x%2MI;L(LTvmf-0rg@+ZI!iO-?c zOkYeQhgRNV5talHf0;+>g2<0d6Zw08P&%cSd6h2;oUcA-ZtQg4uyug?Qp%_oHj~sA zSjJ(3kA>}q3iDjpOS{a9Qg0@~7hfDi0EWnh;b-l!yK+({U8;hUX-0_|YvWQHp7!Y< zXRk>l<$)B~pJUS=yM-D~{-q&_ooqYgQb!@QaF-kgEcVY(G1++XkaA_~`Pkvm&&r8k zsCX~0;XXB(gNT})d2)xM+_6g+XyzZ-kc}{5uR92UiOq*LcQGygsXRn5j}#2JGTh>1 z5l4Ew^KT6&4)-|9+1!}i80D2}2fZR6l1v)kvgzFHtosy*9MrS0 zI~VzLIHQt0mhuGtZ2)NrtfpWRzSFi2v*SisUuvseWMRY3lENsy-DMVA^#LUpUp2aE z-cdFF_kOV;G=IfxCp3r5i#mT~wS!}ccQyiWxj(3SHphC#imnZVdsf;0su^XfuAtGK z>~B9#V`SG&Z5oY?JA-PmektRgTZ6#94_A8z>=Nw|RJr!s{J>JRdA-2M;A{{{5WKxk zXUIZ&e}M6Cgpe?eeB;^2E}15@k9Z*2%^}fv&moUn31-sK!n)Sx{DVPUM%kTZGpaXW zzvbnX`m(7?;}vqvj~MjZlLpavL$=Vi<4yJT(^I20L-DHK!}4*>*!Ns2W;<(HKuqJM zWNyD{?ovqJ*;sRbn?uP!&I0$u40jIk;cnyYegHO9c-8tp&xVzX8$XH>Hc zIXl0_nHI~O$6*AC<-HlX!NH^w=Ti)e*MS z;ih^|`(+*H)HPy}_kGjZaoPCIe(w1*Rx%DM^)BG4m_YYM#A+}qLg{?)M(=hEK(aJfAF`i!3T zWWPqEj;n?v*(oP!+qgvvxQjt-tSACfc9rp{(Y$#Xjp(-Lnh>Qh zy3~b~vw0AijrTYx=202Jduj78%^VMyP$mF0LV%JA2O+hL|2UI?>^SE9ROMPJIBu_F zHy3f$bW`=IYGgxIdXIS5T={H*t=Jl z>p$72IgmJlA8TT~{D9OD+jWwbW~P8)v*1W_%NNnIlZ|?KM$5kN2UL~Q4ZpJW8|T(` ziBOm6*J^#I?nlD?d{!*N_UrYQm;>+($5c)G46dsVcd+NWfhk!yB5VNLt zw9b*)WE=T{T|4g!Cf6E3xo)5qn!+OkhShd8GPrs1a^IdAfWEx2EKVHR&y;*ds>80$ut$xmrGdT`}K0geQ16Tz#BC~y@BH%TFRIPN!6noIfO+76(vh-=3>`M?zjsyHNp#I@=i9AKW~Dn>3R(#?m8@&sIcSXMb#6C8E4B93}2k98kLE!<=?6Ks4mH& z-9ZF>5MnkvDg=-!0K)u@b;iWGm(?2q*N(r$HMjH*COP(x9Pm-)DEhXf;76vz>W`WR z7?_Z3p40gA@|Lh#dx+{VwCD!%ky#vQ9CdsjBtzbU0@-F5C)tq{gq&FbaJvi5@;ON1*R=(|P_(P)XkX4X ztjKbO`{==qq4y_`D}Wj@yz>H89yppXO8I3%uE3p1)g7&M1^>#0x5e6ODMxf^n==GG zIElO$;@tkN+iTr>K{-&dW3=7!b>05SW$VVhNw^Y+z~f=KDi4Uv+e+N)72rTvW@?T3 zW)1~Hu`hB=5?oRs>*1v=Ow`}_g*qr3aLmO){fU*S{{rIbQ8n@90%-H2z}1XFzYRf# z{Zsh%(J>O|ROgC~n15fB6l7=Ou(}a5D?4i$B}3vQ>`|G1k~Wr=w~A~3sDNFH$~(B7 zriQL{oG0}(Bz^#&J32RAg)Gj2W7`SI1BKJ>*__rYJ>@3>`=|aZ(=G5|X9d%?An2D|K|d?&Hyel@2(FPNx0aEGH%hrl*CANgT)D@O>L`g$shfy(rS zROCKZv!Fz{%nD{KuJ`GqI~R55gIAlepId17Yw=t3ry3fngX~i>+M-rOfQr$TKTzG| zXY(acJpw%WtG9vDnw!ja#q9_(Q)t>b9k4M;wkVw6w4U>*2n|@qaa&_4sRmC^S>VtK zaTmA~t0(XMD#;2f91PVuam znLaMo7Ift4VGMBmzikec2EMP=#sIV|rzEcUjE*Z@JK$FJbvc3!5?EG}l*JLv#p3df3JjDf&N{`aWH(2n!YdMr}Ws8R> z1Z@EjX+NxRdw%!|4~bby@Q6${3Qu-<@UQ&>RH`O~RR{TBH_ zU6Nsh$Gv$Vm2+62g@BiAzbhfhyr;zaClgZ6?G1z%WiR1nY_C8ZQ0+Js0W6 z1k)_0yWvFsH_oHc>*2QGsDq^*NXK<0j*66riWWhICUPgFX8BFb&!0=By4uLS3@&AS zx3IEYf+h1;B~5s^^K>LUXkLj2*e|tb>_7%|nVHlXBmq9|f9GHPOTT`+%7PminM8R*h!d{icr>iq3Vz&ehLq)ek7VdEz0R0v9% z=(O7Jj7otFB(!&*O%BO^CwC`sd_TprbYgEbQ$=|4U;U*CkXEGJHSC}Wtg&RAm;`*f zVsY!lL%sT#$hv9YPDmmdnj_t3SeasMT?qi}0!_7F6}Y-cxxM9%D=kZm{0Fvm7hmcA8AR}2 zN67icSCE4iH&QiCP42WVuiT@Buckp`AT@5vw$6}Jo%tsux?@SoXB8&m1N?f7Eac>sbFW0WFG;P5#N7xJAq_Ty+uoy34Xzx9u$0n0TLr>hM4F+>6}x)yYOPMC)H% zX1k=2I>asNDtb|^_6%_@4*Qkiy*)$#b+^%tJ11>o9@k#4otqm95aYF;^F57Pwdm5j z5%cuyGDcD|xOn3wc!wpoe;N5sRer)t$W3amhG8o}V=3KoK|>rOa5QfUj+14`xlZzU zUWK5?pb;14wFWKBL2DAT$NWA}jP{KnCBs^d`jknFw!L3t$zebRY@yt@q>f8qdO z3Xzj6ksyNF5EArqw%>)Q*Tw0xV6SLjSKs3O;1NSI2gLG_Ux>;yGbsmW#r-)3ju*0i zlQp3^?&0RT4hEatFlVlZmj$j>Dg}KNt{jXP8SUSK&zy88X%CJRt3-hmX1j|ZA@4t! zO2KIU$m^PIpWq(O7F2%u7w9~wnQhUYka<^2wL;$Tkp2KPF@tIomME7jGos`LvN$>u z2>)c9?a&H$DwtiX5igw;XL z4|auQeaUNFb9Ga|A%hY(*1kBCCo8o^e$ryW-6<(+?hxlvcyUf)!&=}2aDh43U`JFk zQOLN(JojeXE{H3`_R=ufkER{X=N4E|zsBy*7sK}`> zHEY#II0|w&ziAh})XsMXP*VZGz~vi+fXHq1Qp@AzKY0l%bw4W@yrfV+<5CHREO@3(O%qKr!{sg<^C!)6Js~-Y%*mwYbV|z`7 zA0Kborw8I*2r|)QY_rL8;2ElE;5B+h$hphUWGA`&`S$7~IXBp)g4Dsh)#&{I^7W!F zOQ2;5t6IqqUdtj%FHg>?U99;r;2Py1wpE*RIf1iH;_T|Q$5Q)r8ui*8LeA2o?C9lq z6;jc&NG3H9>qfADK}ouO)#UZdoYM9;GNUJ*JE5l(% zC*)0CF{FNvbGK%Ri*~ZGL?l|d%fDX4-*2EgnqgjaZ$K_V<-TL3S_?Ce%^ehd^5un$u_ z@fs4R-9i|4Q%@_z&lv0Jj)HAQnzKE1V||!#;`;Zdk%ma+e_9Ox z=PM2H)Bklmsp1;tt@}PZ`Nz^?>V2m+0`!HQ< zIo?$2%kvlXocqY6p+K(!o;Eb9YTF*={Kab6Z>OJl+ zrTp^8NQ!mtj@%jXb4aUh@MzVv7Bbr3Ww&^)%}FO(;Nx+wurRRPD0fZn*h4w$q8`^y z@}LZ0@36aN?G*M>Ax=0eH}Z*_#e3#fKseIczN5)eZ-q((eBeTZUv#tRYQGRwlucZv zvL@JGBNbFQJ2~Cc|ERn4(TAh*d=dd7WQ|5GU8@cG zlAraxHUZ7bW0ri9?p2F8zfFQ~r`d>2LGi-D5yLn7ImQ`njDPTl2JnnBXi*C9S$Ui> z*JKth^oJ5~n$%wg9w$Ei$7Q{ybBdon-c}b~9@JWT$&te98gOG~PWJV{<$F)m+hl5= z$&5a|Dz_uQiQ>oI+x};7@A(nrl3No#9W3d&me};wtldP^Cy!lcCzSk)N3l$Idj%$N zO-|yG+0ZL720lQFBy#&Njf{0plw_rp>^w?jMxm;2G5D|;Dz~@=Vzm01$^jhk51y{g zt~QcA+^*0D{Cj^&<6vMu(Xu-8w-*p@VvZi_U!IoeY+w8)GgJl}61W}18zikKhm!T+ z)xH=#HX!5`_)O;z8C?Fzs#|6gkcj)OC7~IY^WZD3cUv=T%cU;ZOj?3v)S#1{*H2ZP z61KftNq$lI(z0*dO6@zJ)>X&(3b_V~qIYt7{-U zac@0!bD~p0S6VnhPuuY-Nw^pRks-(bJ3_e9Z-9o>eFqF;GB)RG$eUb|Y9aR+MwhJP zZ1^3DbR2}hGhRZzDX}nO{oW|#V_7|qiq?~Jt^jj1_>PVW9^LfE$jA6NOa5NU(|$01 zEAR-yFgt@&n7x&>xu9GUaFe+pEIaF=ps7e6U`Pz_esz|b?oL<`4>!E;FH;F4_WCPT zq*T@d7b-UJmMd>yWC#~^lVq`dR_oCtAU4iAl8QI}5f0k>RYvhpi24xTSg~TQl(e=9 z#h&ZGtV>%ARX4P+Ht>+W|7GAV@1CMj@~8VAb5O`)UE?^JO@z}ciXKG^+0wIYp#y@o z96kpmI0h3em$%d(DIE!Y!(gq$uxIdbW(KiktG_Ypv(e-$Pm~r47k{7Kg&KGrP$DW- z*=~}@Z9Enq$0Zx$&9r6t>&IAq8uXT%?ybb?cSw!P*%vW`fR{|jGB|ocWl~N`q5G`n z-sS^6VJSaX!p`VZu1lwwnXdV;i%*YjKJ30XFsIL@Y@Z(>&`l@-P*JpQMw1TCkmSH8 zqFN{bC6b?-En*_PRrm=*S`%JrobvZhy-KxCP?#d!ox7z)E(J<$u`C+KVPSvX{4xsw zwuU<4|H;Jv=TjUalArrdXy47BC-i3HGe%(VHPRBN0hmZW?{H!!#ks{7W5mAwKaBjT z4(D#26>>b;0@%TSHoYGvVLPOjDdNi7yZJxNpRW2|09I!fV$r$a>TH|jRM^=o%flFn zjKV8%^K%A5raBe^{;F4SEX{b9>!RmnKw@^osJ^2@X9rqO?2q|+wgyxO;xPF}MwF~5 zs&Q-0iApWRh2a~}^ITFS=GLDpy#7l=EUn_)J`xh$Q?bT#!*OkwPU#Oz@AiYg^XGy+ zl^532=3v9$Ns;ekKvEzdn}U;Uk5zo`8t$LlKUs88W-`RK1c~Saqa`? zMI``F_7Z25H!?g18_Ny>ZTBy6{iRv$BDOC~dO=95O13k|E`@tLIa*f0@!Fu$DH$+& zV*hi~IMP-P#HcZR#>a%*o>^?RZCr{MhPMjrt-1HscYv>ArOmo|Zs!=H!~lQNo#G1B zGQCr+ojX%sloYxt5^Ar}!Jb)VV$+O9;>0bh;(K>pEAEbkv*(tJik#5PXs{QQYyZbj L`~NsD{GIt + + + 1.0 + +

### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0GD32F10x_CL -FL040000 -FS08000000 -FP0($$Device:GD32F107VC$Flash\GD32F10x_CL.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Applications + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + CPU + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + cpuport.c + 0 + 0 + + + 2 + 6 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + context_rvds.S + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\spi\spi_core.c + spi_core.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\spi\spi_dev.c + spi_dev.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 4 + 18 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 4 + 19 + 2 + 0 + 0 + 0 + ..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Source\ARM\startup_gd32f10x_cl.s + startup_gd32f10x_cl.s + 0 + 0 + + + 4 + 20 + 1 + 0 + 0 + 0 + ..\libraries\gd32_drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 4 + 21 + 1 + 0 + 0 + 0 + ..\libraries\gd32_drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 4 + 22 + 1 + 0 + 0 + 0 + ..\libraries\gd32_drivers\drv_spi.c + drv_spi.c + 0 + 0 + + + + + Finsh + 0 + 0 + 0 + 0 + + 5 + 23 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 5 + 24 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 5 + 25 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 6 + 26 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 6 + 27 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 6 + 28 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 6 + 29 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 6 + 30 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 6 + 31 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 6 + 32 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 6 + 33 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 6 + 34 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 6 + 35 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 6 + 36 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + + + libc + 0 + 0 + 0 + 0 + + 7 + 39 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\time.c + time.c + 0 + 0 + + + + + Libraries + 0 + 0 + 0 + 0 + + 8 + 40 + 1 + 0 + 0 + 0 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_spi.c + gd32f10x_spi.c + 0 + 0 + + + 8 + 41 + 1 + 0 + 0 + 0 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_exti.c + gd32f10x_exti.c + 0 + 0 + + + 8 + 42 + 1 + 0 + 0 + 0 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_gpio.c + gd32f10x_gpio.c + 0 + 0 + + + 8 + 43 + 1 + 0 + 0 + 0 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_misc.c + gd32f10x_misc.c + 0 + 0 + + + 8 + 44 + 1 + 0 + 0 + 0 + ..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Source\system_gd32f10x.c + system_gd32f10x.c + 0 + 0 + + + 8 + 45 + 1 + 0 + 0 + 0 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_rcu.c + gd32f10x_rcu.c + 0 + 0 + + + 8 + 46 + 1 + 0 + 0 + 0 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_usart.c + gd32f10x_usart.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + diff --git a/bsp/gd32/gd32107c-eval/project.uvproj b/bsp/gd32/gd32107c-eval/project.uvproj new file mode 100644 index 0000000000..695885d4ba --- /dev/null +++ b/bsp/gd32/gd32107c-eval/project.uvproj @@ -0,0 +1,777 @@ + + + 1.1 +
### uVision Project, (C) Keil Software
+ + + rt-thread + 0x4 + ARM-ADS + 0 + + + GD32F107VC + GigaDevice + IRAM(0x20000000-0x20018000) IROM(0x08000000-0x08040000) CLOCK(12000000) CPUTYPE("Cortex-M3") + + "Startup\GD\GD32F10x\startup_gd32f10x.s" ("GD32F10x Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0GD32F10x_3MB -FS08000000 -FL0100000) + 0 + gd32f10x0.h + + + + + + + + + + SFD\GD\GD32F10x\GD32F10x.SFR + 0 + 0 + + + + GD\GD32F10x\ + GD\GD32F10x\ + + 0 + 0 + 0 + 0 + 1 + + .\output\ + rtthread + 1 + 0 + 1 + 1 + 1 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 3 + + + + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + GD32F10X_CL, USE_STDPERIPH_DRIVER, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND + + applications;.;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m3;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\spi;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;..\libraries\gd32_drivers;..\..\..\components\finsh;.;..\..\..\include;..\..\..\components\libc\compilers\common;..\..\..\components\libc\compilers\common\nogcc;..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Include;..\libraries\GD32F10x_Firmware_Library\CMSIS;..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Include;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\posix\ipc;..\..\..\examples\utest\testcases\kernel + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + CPU + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + + + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + + + spi_core.c + 1 + ..\..\..\components\drivers\spi\spi_core.c + + + + + spi_dev.c + 1 + ..\..\..\components\drivers\spi\spi_dev.c + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + + + + + + + + + + + + + + + Drivers + + + board.c + 1 + board\board.c + + + + + startup_gd32f10x_cl.s + 2 + ..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Source\ARM\startup_gd32f10x_cl.s + + + + + drv_gpio.c + 1 + ..\libraries\gd32_drivers\drv_gpio.c + + + + + drv_usart.c + 1 + ..\libraries\gd32_drivers\drv_usart.c + + + + + drv_spi.c + 1 + ..\libraries\gd32_drivers\drv_spi.c + + + + + Finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + Kernel + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + clock.c + 1 + ..\..\..\src\clock.c + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + + + object.c + 1 + ..\..\..\src\object.c + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + + + components.c + 1 + ..\..\..\src\components.c + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + + + device.c + 1 + ..\..\..\src\device.c + + + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + + + libc + + + time.c + 1 + ..\..\..\components\libc\compilers\common\time.c + + + + + Libraries + + + gd32f10x_spi.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_spi.c + + + + + gd32f10x_exti.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_exti.c + + + + + gd32f10x_gpio.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_gpio.c + + + + + gd32f10x_misc.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_misc.c + + + + + system_gd32f10x.c + 1 + ..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Source\system_gd32f10x.c + + + + + gd32f10x_rcu.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_rcu.c + + + + + gd32f10x_usart.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_usart.c + + + + + + +
diff --git a/bsp/gd32/gd32107c-eval/project.uvprojx b/bsp/gd32/gd32107c-eval/project.uvprojx new file mode 100644 index 0000000000..3d5ae39245 --- /dev/null +++ b/bsp/gd32/gd32107c-eval/project.uvprojx @@ -0,0 +1,757 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + GD32F107VC + GigaDevice + GigaDevice.GD32F10x_DFP.2.0.1 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00018000) IROM(0x08000000,0x00040000) CPUTYPE("Cortex-M3") CLOCK(10800000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F10x_CL -FS08000000 -FL040000 -FP0($$Device:GD32F107VC$Flash\GD32F10x_CL.FLM)) + 0 + $$Device:GD32F107VC$Device\Include\gd32f10x.h + + + + + + + + + + $$Device:GD32F107VC$SVD\GD32F10x\GD32F10x_CL.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\ + rtthread + 1 + 0 + 0 + 1 + 0 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x18000 + + + 1 + 0x8000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x18000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + GD32F10X_CL, USE_STDPERIPH_DRIVER, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND + + applications;.;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m3;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\spi;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;..\libraries\gd32_drivers;..\..\..\components\finsh;.;..\..\..\include;..\..\..\components\libc\compilers\common;..\..\..\components\libc\compilers\common\nogcc;..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Include;..\libraries\GD32F10x_Firmware_Library\CMSIS;..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Include;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\posix\ipc;..\..\..\examples\utest\testcases\kernel + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\gd32_rom.ld + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + CPU + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + + + + + DeviceDrivers + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 0 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + + + + + + + + + + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + spi_core.c + 1 + ..\..\..\components\drivers\spi\spi_core.c + + + spi_dev.c + 1 + ..\..\..\components\drivers\spi\spi_dev.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + startup_gd32f10x_cl.s + 2 + ..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Source\ARM\startup_gd32f10x_cl.s + + + drv_gpio.c + 1 + ..\libraries\gd32_drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\gd32_drivers\drv_usart.c + + + drv_spi.c + 1 + ..\libraries\gd32_drivers\drv_spi.c + + + + + Finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + Kernel + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + thread.c + 1 + ..\..\..\src\thread.c + + + irq.c + 1 + ..\..\..\src\irq.c + + + mem.c + 1 + ..\..\..\src\mem.c + + + components.c + 1 + ..\..\..\src\components.c + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + device.c + 1 + ..\..\..\src\device.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + clock.c + 1 + ..\..\..\src\clock.c + + + idle.c + 1 + ..\..\..\src\idle.c + + + timer.c + 1 + ..\..\..\src\timer.c + + + object.c + 1 + ..\..\..\src\object.c + + + + + libc + + + time.c + 1 + ..\..\..\components\libc\compilers\common\time.c + + + + + Libraries + + + gd32f10x_spi.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_spi.c + + + gd32f10x_exti.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_exti.c + + + gd32f10x_gpio.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_gpio.c + + + gd32f10x_misc.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_misc.c + + + system_gd32f10x.c + 1 + ..\libraries\GD32F10x_Firmware_Library\CMSIS\GD\GD32F10x\Source\system_gd32f10x.c + + + gd32f10x_rcu.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_rcu.c + + + gd32f10x_usart.c + 1 + ..\libraries\GD32F10x_Firmware_Library\GD32F10x_standard_peripheral\Source\gd32f10x_usart.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/bsp/gd32/gd32107c-eval/rtconfig.h b/bsp/gd32/gd32107c-eval/rtconfig.h new file mode 100644 index 0000000000..21caecd9ee --- /dev/null +++ b/bsp/gd32/gd32107c-eval/rtconfig.h @@ -0,0 +1,212 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Configuration */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_ALIGN_SIZE 4 +#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_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 + +/* kservice optimization */ + +#define RT_DEBUG +#define RT_DEBUG_COLOR + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_SMALL_MEM_AS_HEAP +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart1" +#define RT_VER_NUM 0x40100 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 + +/* C++ features */ + + +/* Command shell */ + +#define RT_USING_FINSH +#define RT_USING_MSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_USING_SYSTEM_WORKQUEUE +#define RT_SYSTEM_WORKQUEUE_STACKSIZE 2048 +#define RT_SYSTEM_WORKQUEUE_PRIORITY 23 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN +#define RT_USING_SPI + +/* Using USB */ + + +/* POSIX layer and C standard library */ + +#define RT_LIBC_USING_TIME +#define RT_LIBC_DEFAULT_TIMEZONE 8 + +/* POSIX (Portable Operating System Interface) layer */ + + +/* Interprocess Communication (IPC) */ + + +/* Socket is in the 'Network' category */ + +/* Network */ + +/* Socket abstraction layer */ + + +/* Network interface device */ + + +/* light weight TCP/IP stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* RT-Thread Utestcases */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + + +/* u8g2: a monochrome graphic library */ + + +/* PainterEngine: A cross-platform graphics application framework written in C language */ + + +/* tools packages */ + + +/* system packages */ + + +/* enhanced kernel services */ + + +/* acceleration: Assembly language or algorithmic acceleration packages */ + + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + + +/* Micrium: Micrium software products porting for RT-Thread */ + + +/* peripheral libraries and drivers */ + + +/* AI packages */ + + +/* miscellaneous packages */ + +/* samples: kernel and components samples */ + + +/* entertainment: terminal games and other interesting software packages */ + + +/* Hardware Drivers Config */ + +#define SOC_SERIES_GD32F10x +#define SOC_GD32107V + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART1 +#define BSP_USING_SPI +#define BSP_USING_SPI1 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/gd32/gd32107c-eval/rtconfig.py b/bsp/gd32/gd32107c-eval/rtconfig.py new file mode 100644 index 0000000000..4285e6b03c --- /dev/null +++ b/bsp/gd32/gd32107c-eval/rtconfig.py @@ -0,0 +1,150 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m3' +CROSS_TOOL='keil' + +# 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'C:\Users\XXYYZZ' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iar' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +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-m3 -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-M3.fp ' + 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 == 'iar': + # 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-M3' + CFLAGS += ' -e' + CFLAGS += ' --fpu=None' + 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-M3' + AFLAGS += ' --fpu None' + 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/gd32107c-eval/template.uvoptx b/bsp/gd32/gd32107c-eval/template.uvoptx new file mode 100644 index 0000000000..4dfb02c5ad --- /dev/null +++ b/bsp/gd32/gd32107c-eval/template.uvoptx @@ -0,0 +1,180 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0GD32F10x_CL -FL040000 -FS08000000 -FP0($$Device:GD32F107VC$Flash\GD32F10x_CL.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/gd32/gd32107c-eval/template.uvproj b/bsp/gd32/gd32107c-eval/template.uvproj new file mode 100644 index 0000000000..a165464790 --- /dev/null +++ b/bsp/gd32/gd32107c-eval/template.uvproj @@ -0,0 +1,628 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 0 + + + GD32F107VC + GigaDevice + IRAM(0x20000000-0x20018000) IROM(0x08000000-0x08040000) CLOCK(12000000) CPUTYPE("Cortex-M3") + + "Startup\GD\GD32F10x\startup_gd32f10x.s" ("GD32F10x Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0GD32F10x_3MB -FS08000000 -FL0100000) + 0 + gd32f10x0.h + + + + + + + + + + SFD\GD\GD32F10x\GD32F10x.SFR + 0 + 0 + + + + GD\GD32F10x\ + GD\GD32F10x\ + + 0 + 0 + 0 + 0 + 1 + + .\output\ + rtthread + 1 + 0 + 1 + 1 + 1 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 3 + + + + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Include;..\..\..\Library\Firmware\CMSIS\GD\GD32F10x\Include;..\..\..\Library\Utilities;..\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Application + + + main.c + 1 + ..\main.c + + + gd32f10x_it.c + 1 + ..\gd32f10x_it.c + + + + + CMSIS + + + system_gd32f10x.c + 1 + ..\..\..\Library\Firmware\CMSIS\GD\GD32F10x\Source\system_gd32f10x.c + + + + + GD32F10x_Peripherals + + + gd32f10x_adc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_adc.c + + + gd32f10x_can.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_can.c + + + gd32f10x_crc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_crc.c + + + gd32f10x_ctc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_ctc.c + + + gd32f10x_dac.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_dac.c + + + gd32f10x_dbg.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_dbg.c + + + gd32f10x_dci.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_dci.c + + + gd32f10x_dma.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_dma.c + + + gd32f10x_enet.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_enet.c + + + gd32f10x_exmc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_exmc.c + + + gd32f10x_exti.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_exti.c + + + gd32f10x_fmc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_fmc.c + + + gd32f10x_fwdgt.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_fwdgt.c + + + gd32f10x_gpio.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_gpio.c + + + gd32f10x_i2c.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_i2c.c + + + gd32f10x_ipa.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_ipa.c + + + gd32f10x_iref.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_iref.c + + + gd32f10x_misc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_misc.c + + + gd32f10x_pmu.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_pmu.c + + + gd32f10x_rcu.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_rcu.c + + + gd32f10x_rtc.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_rtc.c + + + gd32f10x_sdio.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_sdio.c + + + gd32f10x_spi.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_spi.c + + + gd32f10x_syscfg.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_syscfg.c + + + gd32f10x_timer.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_timer.c + + + gd32f10x_tli.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_tli.c + + + gd32f10x_trng.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_trng.c + + + gd32f10x_usart.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_usart.c + + + gd32f10x_wwdgt.c + 1 + ..\..\..\Library\Firmware\GD32F10x_standard_peripheral\Source\gd32f10x_wwdgt.c + + + + + GD32F10x_EVAL + + + gd32f107c_eval.c + 1 + ..\..\..\Library\Utilities\gd32f107c_eval.c + + + + + Startup + + + startup_gd32f10x.s + 2 + ..\..\..\Library\Firmware\CMSIS\GD\GD32F10x\Source\ARM\startup_gd32f10x.s + + + + + Doc + + + readme.txt + 5 + ..\readme.txt + + + + + + + +
diff --git a/bsp/gd32/gd32107c-eval/template.uvprojx b/bsp/gd32/gd32107c-eval/template.uvprojx new file mode 100644 index 0000000000..a80f13ffb9 --- /dev/null +++ b/bsp/gd32/gd32107c-eval/template.uvprojx @@ -0,0 +1,418 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + GD32F107VC + GigaDevice + GigaDevice.GD32F10x_DFP.2.0.1 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00018000) IROM(0x08000000,0x00040000) CPUTYPE("Cortex-M3") CLOCK(10800000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F10x_CL -FS08000000 -FL040000 -FP0($$Device:GD32F107VC$Flash\GD32F10x_CL.FLM)) + 0 + $$Device:GD32F107VC$Device\Include\gd32f10x.h + + + + + + + + + + $$Device:GD32F107VC$SVD\GD32F10x\GD32F10x_CL.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\ + rtthread + 1 + 0 + 0 + 1 + 0 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x18000 + + + 1 + 0x8000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x18000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\gd32_rom.ld + + + + + + + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/bsp/gd32/gd32303e-eval/.config b/bsp/gd32/gd32303e-eval/.config new file mode 100644 index 0000000000..c8f9feac51 --- /dev/null +++ b/bsp/gd32/gd32303e-eval/.config @@ -0,0 +1,636 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_BIG_ENDIAN is not set +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# 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_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 + +# +# kservice optimization +# +# CONFIG_RT_KSERVICE_USING_STDLIB is not set +# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set +# CONFIG_RT_USING_ASM_MEMCPY is not set +CONFIG_RT_DEBUG=y +CONFIG_RT_DEBUG_COLOR=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG 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_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +# CONFIG_RT_USING_MEMHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" +# CONFIG_RT_PRINTF_LONGLONG is not set +CONFIG_RT_VER_NUM=0x40004 +# CONFIG_RT_USING_CPU_FFS is not set +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_RT_USING_MSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +CONFIG_RT_USING_SYSTEM_WORKQUEUE=y +CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=2048 +CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_USING_SERIAL_V1=y +# CONFIG_RT_USING_SERIAL_V2 is not set +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER 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_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_PWM 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_HWCRYPTO is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB is not set +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +# CONFIG_RT_USING_LIBC is not set +CONFIG_RT_LIBC_USING_TIME=y +CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 +# CONFIG_RT_USING_PTHREADS is not set + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# Network interface device +# +# CONFIG_RT_USING_NETDEV is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS is not set + +# +# 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_RT_LINK is not set + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES is not set + +# +# 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_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LIBMODBUS is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_RW007 is not set +# 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_NIMBLE 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_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK 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_RAPIDJSON 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_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 + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_LIBSODIUM 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 + +# +# language packages +# +# 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 + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# 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 + +# +# PainterEngine: A cross-platform graphics application framework written in C language +# +# CONFIG_PKG_USING_PAINTERENGINE is not set +# CONFIG_PKG_USING_PAINTERENGINE_AUX is not set + +# +# 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_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_ULOG_FILE 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 + +# +# system packages +# + +# +# enhanced kernel services +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_VSNPRINTF_FULL 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 + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set + +# +# 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 +# CONFIG_RT_USING_ARDUINO is not set +# CONFIG_PKG_USING_GUIENGINE 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_FAL 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_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_WCWIDTH is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB is not set +# CONFIG_PKG_USING_USB_STACK is not set + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_SENSORS_DRIVERS is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 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_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_WM_LIBRARIES is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# CONFIG_PKG_USING_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_AD7746 is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_TOUCH_DRIVERS is not set +# CONFIG_PKG_USING_MAX17048 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_EMBARC_BSP 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_PAJ7620 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_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_STM32WB55_SDK 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_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_BL_MCU_SDK is not set +# CONFIG_PKG_USING_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set + +# +# 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 + +# +# miscellaneous packages +# + +# +# 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 + +# +# 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_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_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_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_DIGITALCTRL 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_VT100 is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_COWSAY is not set +# CONFIG_PKG_USING_TERMBOX is not set + +# +# Hardware Drivers Config +# +CONFIG_SOC_SERIES_GD32F30x=y +CONFIG_SOC_GD32305R=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_UART1_RX_USING_DMA is not set +# CONFIG_BSP_USING_SPI is not set +# CONFIG_BSP_USING_I2C1 is not set + +# +# Board extended module Drivers +# diff --git a/bsp/gd32/gd32303e-eval/Kconfig b/bsp/gd32/gd32303e-eval/Kconfig new file mode 100644 index 0000000000..8cbc7b71a8 --- /dev/null +++ b/bsp/gd32/gd32303e-eval/Kconfig @@ -0,0 +1,21 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "../../.." + +config PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +source "../libraries/Kconfig" +source "board/Kconfig" diff --git a/bsp/gd32/gd32303e-eval/README.md b/bsp/gd32/gd32303e-eval/README.md new file mode 100644 index 0000000000..dd789e8394 --- /dev/null +++ b/bsp/gd32/gd32303e-eval/README.md @@ -0,0 +1,94 @@ +# GD32303E-EVAL开发板BSP说明 + +## 简介 + +GD3303E-EVAL是-兆易创新推出的一款GD32F30X系列的评估板,最高主频高达120M,该开发板具有丰富的板载资源,可以充分发挥 GD32303ZET6 的芯片性能。 + +该开发板常用 **板载资源** 如下: + +- GD32303ZET6,主频 120MHz,512KB FLASH ,64KB RAM + +- 常用外设 + + - LED :5个,LED1 (电源指示灯),LED2(PC0),LED3(PC2),LED4(PE0),LED5(PE1) + - 按键:3个,K1(用户按键,PA0),K2(用户按键,PC13),K3(用户按键,PB14) + +- 常用接口:USB 接口 + +- 调试接口:GD-LINK + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **片上外设** | **支持情况** | **备注** | +|:--------- |:--------:|:------------------------------------- | +| GPIO | 支持 | PA0, PA1... PK15 ---> PIN: 0, 1...144 | +| UART | 支持 | UART0 - UART7 | +| I2C | 支持 | I2C1 | +| SPI | 支持 | SPI0 - SPI2 | +| SPI FLASH | 支持 | | +| **扩展模块** | **支持情况** | **备注** | +| 暂无 | 暂不支持 | 暂不支持 | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + +### 快速上手 + +本 BSP 为开发者提供 MDK5 工程,并且支持 GCC 开发环境,也可使用RT-Thread Studio开发。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,使用USB转TTL模块连接PA2(MCU TX)和PA3(MCU RX),打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 GD-Link 仿真器下载程序,在通过 GD-Link 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,LED 闪烁。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.4 build Jan 9 2021 + 2006 - 2021 Copyright by rt-thread team +msh > +``` + +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口1的功能,如果需使用高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5` 命令重新生成工程。 + +## 注意事项 + +暂无 + +## 联系人信息 + +维护人: + +- [BruceOu](https://github.com/Ouxiaolong/), 邮箱: \ No newline at end of file diff --git a/bsp/gd32/gd32303e-eval/SConscript b/bsp/gd32/gd32303e-eval/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/gd32/gd32303e-eval/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/gd32303e-eval/SConstruct b/bsp/gd32/gd32303e-eval/SConstruct new file mode 100644 index 0000000000..f32e96f624 --- /dev/null +++ b/bsp/gd32/gd32303e-eval/SConstruct @@ -0,0 +1,60 @@ +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) + +TARGET = 'rtthread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = 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 == 'iar': + env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rtthread.map') + +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) + +gd32_library = 'GD32F30x_Firmware_Library' +rtconfig.BSP_LIBRARY_TYPE = gd32_library + +# include libraries +objs.extend(SConscript(os.path.join(libraries_path_prefix, gd32_library, 'SConscript'))) + +# 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/gd32303e-eval/applications/SConscript b/bsp/gd32/gd32303e-eval/applications/SConscript new file mode 100644 index 0000000000..01eb940dfb --- /dev/null +++ b/bsp/gd32/gd32303e-eval/applications/SConscript @@ -0,0 +1,11 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = os.path.join(str(Dir('#')), 'applications') +src = Glob('*.c') +CPPPATH = [cwd, str(Dir('#'))] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/gd32/gd32303e-eval/applications/main.c b/bsp/gd32/gd32303e-eval/applications/main.c new file mode 100644 index 0000000000..3e85fc86ca --- /dev/null +++ b/bsp/gd32/gd32303e-eval/applications/main.c @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-08-20 BruceOu first implementation + */ + +#include +#include +#include +#include + +/* defined the LED2 pin: PF0 */ +#define LED2_PIN GET_PIN(F, 0) + +int main(void) +{ + int count = 1; + + /* set LED2 pin mode to output */ + rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(LED2_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED2_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + + return RT_EOK; +} diff --git a/bsp/gd32/gd32303e-eval/board/Kconfig b/bsp/gd32/gd32303e-eval/board/Kconfig new file mode 100644 index 0000000000..c4b496f179 --- /dev/null +++ b/bsp/gd32/gd32303e-eval/board/Kconfig @@ -0,0 +1,85 @@ +menu "Hardware Drivers Config" + +config SOC_SERIES_GD32F30x + bool + default y + +config SOC_GD32303Z + bool + select SOC_SERIES_GD32F30x + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +menu "Onboard Peripheral Drivers" + +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" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART1 + bool "Enable UART1" + default y + + config BSP_UART1_RX_USING_DMA + bool "Enable UART1 RX DMA" + depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA + default n + endif + + menuconfig BSP_USING_SPI + bool "Enable SPI BUS" + default n + select RT_USING_SPI + if BSP_USING_SPI + config BSP_USING_SPI1 + bool "Enable SPI1 BUS" + 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 + select BSP_SPI1_TX_USING_DMA + default n + 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 + source "../libraries/gd32_drivers/Kconfig" + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/gd32/gd32303e-eval/board/SConscript b/bsp/gd32/gd32303e-eval/board/SConscript new file mode 100644 index 0000000000..1d4c0408eb --- /dev/null +++ b/bsp/gd32/gd32303e-eval/board/SConscript @@ -0,0 +1,28 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +''') + +path = [cwd] + +startup_path_prefix = SDK_LIB + +if rtconfig.CROSS_TOOL == 'gcc': + src += [startup_path_prefix + '/GD32F30x_Firmware_Library/CMSIS/GD/GD32F30x/Source/GCC/startup_gd32f30x_hd.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/GD32F30x_Firmware_Library/CMSIS/GD/GD32F30x/Source/ARM/startup_gd32f30x_hd.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/GD32F30x_Firmware_Library/CMSIS/GD/GD32F30x/Source/IAR/startup_gd32f30x_hd.s'] + +CPPDEFINES = ['GD32F30X_HD'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/gd32/gd32303e-eval/board/board.c b/bsp/gd32/gd32303e-eval/board/board.c new file mode 100644 index 0000000000..c409645b37 --- /dev/null +++ b/bsp/gd32/gd32303e-eval/board/board.c @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-12-18 BruceOu first implementation + */ +#include +#include +#include +#include + +/** + * @brief This function is executed in case of error occurrence. + * @param None + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler */ + /* User can add his own implementation to report the HAL error return state */ + while (1) + { + } + /* USER CODE END Error_Handler */ +} + +/** System Clock Configuration +*/ +void SystemClock_Config(void) +{ + SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND); + NVIC_SetPriority(SysTick_IRQn, 0); +} + +/** + * This is the timer interrupt service routine. + * + */ +void SysTick_Handler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + rt_tick_increase(); + + /* leave interrupt */ + rt_interrupt_leave(); +} + +/** + * This function will initial GD32 board. + */ +void rt_hw_board_init() +{ + /* NVIC Configuration */ +#define NVIC_VTOR_MASK 0x3FFFFF80 +#ifdef VECT_TAB_RAM + /* Set the Vector Table base location at 0x10000000 */ + SCB->VTOR = (0x10000000 & NVIC_VTOR_MASK); +#else /* VECT_TAB_FLASH */ + /* Set the Vector Table base location at 0x08000000 */ + SCB->VTOR = (0x08000000 & NVIC_VTOR_MASK); +#endif + + SystemClock_Config(); + +#ifdef RT_USING_COMPONENTS_INIT + rt_components_board_init(); +#endif + +#ifdef RT_USING_CONSOLE + rt_console_set_device(RT_CONSOLE_DEVICE_NAME); +#endif + +#ifdef BSP_USING_SDRAM + rt_system_heap_init((void *)EXT_SDRAM_BEGIN, (void *)EXT_SDRAM_END); +#else + rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); +#endif +} + +/*@}*/ diff --git a/bsp/gd32/gd32303e-eval/board/board.h b/bsp/gd32/gd32303e-eval/board/board.h new file mode 100644 index 0000000000..aecf8beaad --- /dev/null +++ b/bsp/gd32/gd32303e-eval/board/board.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-12-18 BruceOu first implementation + */ +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include "gd32f30x.h" +#include "drv_usart.h" +#include "drv_gpio.h" + +#include "gd32f30x_exti.h" + +#define EXT_SDRAM_BEGIN (0xC0000000U) /* the begining address of external SDRAM */ +#define EXT_SDRAM_END (EXT_SDRAM_BEGIN + (32U * 1024 * 1024)) /* the end address of external SDRAM */ + +// Internal SRAM memory size[Kbytes] <8-64> +// Default: 64 +#ifdef __ICCARM__ +// Use *.icf ram symbal, to avoid hardcode. +extern char __ICFEDIT_region_RAM_end__; +#define GD32_SRAM_END &__ICFEDIT_region_RAM_end__ +#else +#define GD32_SRAM_SIZE 64 +#define GD32_SRAM_END (0x20000000 + GD32_SRAM_SIZE * 1024) +#endif + +#ifdef __CC_ARM +extern int Image$$RW_IRAM1$$ZI$$Limit; +#define HEAP_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit) +#elif __ICCARM__ +#pragma section="HEAP" +#define HEAP_BEGIN (__segment_end("HEAP")) +#else +extern int __bss_end; +#define HEAP_BEGIN (&__bss_end) +#endif + +#define HEAP_END GD32_SRAM_END + +#endif + diff --git a/bsp/gd32/gd32303e-eval/board/gd32f30x_libopt.h b/bsp/gd32/gd32303e-eval/board/gd32f30x_libopt.h new file mode 100644 index 0000000000..e026fd658a --- /dev/null +++ b/bsp/gd32/gd32303e-eval/board/gd32f30x_libopt.h @@ -0,0 +1,65 @@ +/*! + \file gd32f30x_libopt.h + \brief library optional for gd32f30x + + \version 2021-03-23, V2.0.0, demo for GD32F30x +*/ + +/* + Copyright (c) 2021, 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 GD32F30X_LIBOPT_H +#define GD32F30X_LIBOPT_H + +#include "gd32f30x_rcu.h" +#include "gd32f30x_adc.h" +#include "gd32f30x_can.h" +#include "gd32f30x_crc.h" +#include "gd32f30x_ctc.h" +#include "gd32f30x_dac.h" +#include "gd32f30x_dbg.h" +#include "gd32f30x_dma.h" +#include "gd32f30x_exti.h" +#include "gd32f30x_fmc.h" +#include "gd32f30x_fwdgt.h" +#include "gd32f30x_gpio.h" +#include "gd32f30x_i2c.h" +#include "gd32f30x_pmu.h" +#include "gd32f30x_bkp.h" +#include "gd32f30x_rtc.h" +#include "gd32f30x_sdio.h" +#include "gd32f30x_spi.h" +#include "gd32f30x_timer.h" +#include "gd32f30x_usart.h" +#include "gd32f30x_wwdgt.h" +#include "gd32f30x_misc.h" +#include "gd32f30x_exmc.h" +#ifdef GD32F30X_CL +#include "gd32f30x_enet.h" +#endif /* GD32F30X_CL */ + +#endif /* GD32F30X_LIBOPT_H */ diff --git a/bsp/gd32/gd32303e-eval/board/linker_scripts/link.icf b/bsp/gd32/gd32303e-eval/board/linker_scripts/link.icf new file mode 100644 index 0000000000..f68fd14425 --- /dev/null +++ b/bsp/gd32/gd32303e-eval/board/linker_scripts/link.icf @@ -0,0 +1,40 @@ +/*###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-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x0807FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x200FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x200; +define symbol __ICFEDIT_size_heap__ = 0x200; +/**** End of ICF editor section. ###ICF###*/ + +export symbol __ICFEDIT_region_RAM_end__; + +define symbol __region_RAM1_start__ = 0x10000000; +define symbol __region_RAM1_end__ = 0x1000FFFF; + +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__]; +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 { 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 }; +place in RAM1_region { section .sram }; \ No newline at end of file diff --git a/bsp/gd32/gd32303e-eval/board/linker_scripts/link.ld b/bsp/gd32/gd32303e-eval/board/linker_scripts/link.ld new file mode 100644 index 0000000000..357cefe333 --- /dev/null +++ b/bsp/gd32/gd32303e-eval/board/linker_scripts/link.ld @@ -0,0 +1,142 @@ +/* + * linker script for GD32F30x with GNU ld + * BruceOu 2021-12-14 + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + CODE (rx) : ORIGIN = 0x08000000, LENGTH = 512k /* 512KB flash */ + DATA (rw) : ORIGIN = 0x20000000, LENGTH = 64k /* 64KB sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +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 = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > CODE + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >DATA + + .stack : + { + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >DATA + + __bss_start = .; + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + + *(.bss.init) + } > DATA + __bss_end = .; + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/gd32/gd32303e-eval/board/linker_scripts/link.sct b/bsp/gd32/gd32303e-eval/board/linker_scripts/link.sct new file mode 100644 index 0000000000..0835abf43e --- /dev/null +++ b/bsp/gd32/gd32303e-eval/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00080000 { ; load region size_region + ER_IROM1 0x08000000 0x00080000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00010000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/gd32/gd32303e-eval/project.uvoptx b/bsp/gd32/gd32303e-eval/project.uvoptx new file mode 100644 index 0000000000..904a7c0f0e --- /dev/null +++ b/bsp/gd32/gd32303e-eval/project.uvoptx @@ -0,0 +1,748 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F30x_CL -FS08000000 -FL040000 -FP0($$Device:GD32F305RC$Flash\GD32F30x_CL.FLM)) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Applications + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + CPU + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + cpuport.c + 0 + 0 + + + 2 + 6 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + context_rvds.S + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 4 + 16 + 2 + 0 + 0 + 0 + ..\libraries\GD32F30x_Firmware_Library\CMSIS\GD\GD32F30x\Source\ARM\startup_gd32f30x_hd.s + startup_gd32f30x_hd.s + 0 + 0 + + + 4 + 17 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 4 + 18 + 1 + 0 + 0 + 0 + ..\libraries\gd32_drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 4 + 19 + 1 + 0 + 0 + 0 + ..\libraries\gd32_drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + + + Finsh + 0 + 0 + 0 + 0 + + 5 + 20 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 5 + 21 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 5 + 22 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 6 + 23 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 6 + 24 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 6 + 25 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 6 + 26 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 6 + 27 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 6 + 28 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 6 + 29 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 6 + 30 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 6 + 31 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + 6 + 32 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 6 + 33 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 6 + 34 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 6 + 35 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + + + libc + 0 + 0 + 0 + 0 + + 7 + 36 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\time.c + time.c + 0 + 0 + + + + + Libraries + 0 + 0 + 0 + 0 + + 8 + 37 + 1 + 0 + 0 + 0 + ..\libraries\GD32F30x_Firmware_Library\CMSIS\GD\GD32F30x\Source\system_gd32f30x.c + system_gd32f30x.c + 0 + 0 + + + 8 + 38 + 1 + 0 + 0 + 0 + ..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Source\gd32f30x_rcu.c + gd32f30x_rcu.c + 0 + 0 + + + 8 + 39 + 1 + 0 + 0 + 0 + ..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Source\gd32f30x_usart.c + gd32f30x_usart.c + 0 + 0 + + + 8 + 40 + 1 + 0 + 0 + 0 + ..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Source\gd32f30x_exti.c + gd32f30x_exti.c + 0 + 0 + + + 8 + 41 + 1 + 0 + 0 + 0 + ..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Source\gd32f30x_gpio.c + gd32f30x_gpio.c + 0 + 0 + + + 8 + 42 + 1 + 0 + 0 + 0 + ..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Source\gd32f30x_misc.c + gd32f30x_misc.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/gd32/gd32303e-eval/project.uvproj b/bsp/gd32/gd32303e-eval/project.uvproj new file mode 100644 index 0000000000..aabe6bfeb4 --- /dev/null +++ b/bsp/gd32/gd32303e-eval/project.uvproj @@ -0,0 +1,737 @@ + + + 1.1 +
### uVision Project, (C) Keil Software
+ + + rt-thread + 0x4 + ARM-ADS + 0 + + + GD32F303ZE + GigaDevice + IRAM(0x20000000-0x20010000) IROM(0x08000000-0x08080000) CLOCK(12000000) CPUTYPE("Cortex-M4") FPU2 + + "Startup\GD\GD32F30x\startup_gd32f30x.s" ("GD32F30x Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0GD32F30x_3MB -FS08000000 -FL0300000) + 0 + gd32f30x0.h + + + + + + + + + + SFD\GD\GD32F30x\GD32F30x.SFR + 0 + 0 + + + + GD\GD32F30x\ + GD\GD32F30x\ + + 0 + 0 + 0 + 0 + 1 + + .\output\ + rtthread + 1 + 0 + 1 + 1 + 1 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 3 + + + + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x30000 + + + 1 + 0x8000000 + 0x300000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x300000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x30000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + GD32F30X_HD, USE_STDPERIPH_DRIVER, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND + + applications;.;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;..\libraries\gd32_drivers;..\..\..\components\finsh;.;..\..\..\include;..\..\..\components\libc\compilers\common;..\..\..\components\libc\compilers\common\nogcc;..\libraries\GD32F30x_Firmware_Library\CMSIS\GD\GD32F30x\Include;..\libraries\GD32F30x_Firmware_Library\CMSIS;..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Include;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\posix\ipc;..\..\..\examples\utest\testcases\kernel + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + CPU + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + + + Drivers + + + startup_gd32f30x_hd.s + 2 + ..\libraries\GD32F30x_Firmware_Library\CMSIS\GD\GD32F30x\Source\ARM\startup_gd32f30x_hd.s + + + + + board.c + 1 + board\board.c + + + + + drv_gpio.c + 1 + ..\libraries\gd32_drivers\drv_gpio.c + + + + + drv_usart.c + 1 + ..\libraries\gd32_drivers\drv_usart.c + + + + + Finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + Kernel + + + thread.c + 1 + ..\..\..\src\thread.c + + + + + components.c + 1 + ..\..\..\src\components.c + + + + + device.c + 1 + ..\..\..\src\device.c + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + + + object.c + 1 + ..\..\..\src\object.c + + + + + clock.c + 1 + ..\..\..\src\clock.c + + + + + libc + + + time.c + 1 + ..\..\..\components\libc\compilers\common\time.c + + + + + Libraries + + + system_gd32f30x.c + 1 + ..\libraries\GD32F30x_Firmware_Library\CMSIS\GD\GD32F30x\Source\system_gd32f30x.c + + + + + gd32f30x_rcu.c + 1 + ..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Source\gd32f30x_rcu.c + + + + + gd32f30x_usart.c + 1 + ..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Source\gd32f30x_usart.c + + + + + gd32f30x_exti.c + 1 + ..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Source\gd32f30x_exti.c + + + + + gd32f30x_gpio.c + 1 + ..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Source\gd32f30x_gpio.c + + + + + gd32f30x_misc.c + 1 + ..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Source\gd32f30x_misc.c + + + + + + +
diff --git a/bsp/gd32/gd32303e-eval/project.uvprojx b/bsp/gd32/gd32303e-eval/project.uvprojx new file mode 100644 index 0000000000..126600ce4b --- /dev/null +++ b/bsp/gd32/gd32303e-eval/project.uvprojx @@ -0,0 +1,668 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + GD32F303ZE + GigaDevice + GigaDevice.GD32F30x_DFP.2.1.0 + http://gd32mcu.com/data/documents/pack/ + IRAM(0x20000000,0x010000) IROM(0x08000000,0x080000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F30x_CL -FS08000000 -FL040000 -FP0($$Device:GD32F303ZE$Flash\GD32F30x_CL.FLM)) + 0 + $$Device:GD32F303ZE$Device\Include\gd32f30x.h + + + + + + + + + + $$Device:GD32F303ZE$SVD\GD32F30x_CL.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\ + rtthread + 1 + 0 + 0 + 1 + 0 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x18000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + GD32F30X_HD, USE_STDPERIPH_DRIVER, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND + + applications;.;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;..\libraries\gd32_drivers;..\..\..\components\finsh;.;..\..\..\include;..\..\..\components\libc\compilers\common;..\..\..\components\libc\compilers\common\nogcc;..\libraries\GD32F30x_Firmware_Library\CMSIS\GD\GD32F30x\Include;..\libraries\GD32F30x_Firmware_Library\CMSIS;..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Include;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\posix\ipc;..\..\..\examples\utest\testcases\kernel + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\gd32_rom.ld + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + CPU + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + + + Drivers + + + startup_gd32f30x_hd.s + 2 + ..\libraries\GD32F30x_Firmware_Library\CMSIS\GD\GD32F30x\Source\ARM\startup_gd32f30x_hd.s + + + board.c + 1 + board\board.c + + + drv_gpio.c + 1 + ..\libraries\gd32_drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\gd32_drivers\drv_usart.c + + + + + Finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + Kernel + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + device.c + 1 + ..\..\..\src\device.c + + + thread.c + 1 + ..\..\..\src\thread.c + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + irq.c + 1 + ..\..\..\src\irq.c + + + components.c + 1 + ..\..\..\src\components.c + + + mem.c + 1 + ..\..\..\src\mem.c + + + timer.c + 1 + ..\..\..\src\timer.c + + + clock.c + 1 + ..\..\..\src\clock.c + + + object.c + 1 + ..\..\..\src\object.c + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + idle.c + 1 + ..\..\..\src\idle.c + + + + + libc + + + time.c + 1 + ..\..\..\components\libc\compilers\common\time.c + + + + + Libraries + + + system_gd32f30x.c + 1 + ..\libraries\GD32F30x_Firmware_Library\CMSIS\GD\GD32F30x\Source\system_gd32f30x.c + + + gd32f30x_rcu.c + 1 + ..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Source\gd32f30x_rcu.c + + + gd32f30x_usart.c + 1 + ..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Source\gd32f30x_usart.c + + + gd32f30x_exti.c + 1 + ..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Source\gd32f30x_exti.c + + + gd32f30x_gpio.c + 1 + ..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Source\gd32f30x_gpio.c + + + gd32f30x_misc.c + 1 + ..\libraries\GD32F30x_Firmware_Library\GD32F30x_standard_peripheral\Source\gd32f30x_misc.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/bsp/gd32/gd32303e-eval/rtconfig.h b/bsp/gd32/gd32303e-eval/rtconfig.h new file mode 100644 index 0000000000..099327af24 --- /dev/null +++ b/bsp/gd32/gd32303e-eval/rtconfig.h @@ -0,0 +1,200 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Configuration */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_ALIGN_SIZE 4 +#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_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 + +/* kservice optimization */ + +#define RT_DEBUG +#define RT_DEBUG_COLOR + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart1" +#define RT_VER_NUM 0x40004 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 + +/* C++ features */ + + +/* Command shell */ + +#define RT_USING_FINSH +#define RT_USING_MSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SYSTEM_WORKQUEUE +#define RT_SYSTEM_WORKQUEUE_STACKSIZE 2048 +#define RT_SYSTEM_WORKQUEUE_PRIORITY 23 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN + +/* Using USB */ + + +/* POSIX layer and C standard library */ + +#define RT_LIBC_USING_TIME +#define RT_LIBC_DEFAULT_TIMEZONE 8 + +/* Network */ + +/* Socket abstraction layer */ + + +/* Network interface device */ + + +/* light weight TCP/IP stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* RT-Thread Utestcases */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + + +/* u8g2: a monochrome graphic library */ + + +/* PainterEngine: A cross-platform graphics application framework written in C language */ + + +/* tools packages */ + + +/* system packages */ + +/* enhanced kernel services */ + + +/* acceleration: Assembly language or algorithmic acceleration packages */ + + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + + +/* Micrium: Micrium software products porting for RT-Thread */ + + +/* peripheral libraries and drivers */ + + +/* AI packages */ + + +/* miscellaneous packages */ + +/* samples: kernel and components samples */ + + +/* entertainment: terminal games and other interesting software packages */ + + +/* Hardware Drivers Config */ + +#define SOC_SERIES_GD32F30x +#define SOC_GD32305R + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART1 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/gd32/gd32303e-eval/rtconfig.py b/bsp/gd32/gd32303e-eval/rtconfig.py new file mode 100644 index 0000000000..a91905a233 --- /dev/null +++ b/bsp/gd32/gd32303e-eval/rtconfig.py @@ -0,0 +1,150 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m4' +CROSS_TOOL='keil' + +# 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'C:\Users\XXYYZZ' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iar' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +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-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -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-M4.fp ' + 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 == 'iar': + # 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-M4' + CFLAGS += ' -e' + CFLAGS += ' --fpu=VFPv4_sp' + 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-M4' + AFLAGS += ' --fpu VFPv4_sp' + 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/gd32303e-eval/template.uvoptx b/bsp/gd32/gd32303e-eval/template.uvoptx new file mode 100644 index 0000000000..18fdad5165 --- /dev/null +++ b/bsp/gd32/gd32303e-eval/template.uvoptx @@ -0,0 +1,180 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F30x_CL -FS08000000 -FL040000 -FP0($$Device:GD32F305RC$Flash\GD32F30x_CL.FLM)) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/gd32/gd32303e-eval/template.uvproj b/bsp/gd32/gd32303e-eval/template.uvproj new file mode 100644 index 0000000000..c42d8a33b1 --- /dev/null +++ b/bsp/gd32/gd32303e-eval/template.uvproj @@ -0,0 +1,628 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 0 + + + GD32F303ZE + GigaDevice + IRAM(0x20000000-0x20010000) IROM(0x08000000-0x08080000) CLOCK(12000000) CPUTYPE("Cortex-M4") FPU2 + + "Startup\GD\GD32F30x\startup_gd32f30x.s" ("GD32F30x Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0GD32F30x_3MB -FS08000000 -FL0300000) + 0 + gd32f30x0.h + + + + + + + + + + SFD\GD\GD32F30x\GD32F30x.SFR + 0 + 0 + + + + GD\GD32F30x\ + GD\GD32F30x\ + + 0 + 0 + 0 + 0 + 1 + + .\output\ + rtthread + 1 + 0 + 1 + 1 + 1 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 3 + + + + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x30000 + + + 1 + 0x8000000 + 0x300000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x300000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x30000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Include;..\..\..\Library\Firmware\CMSIS\GD\GD32F30x\Include;..\..\..\Library\Utilities;..\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Application + + + main.c + 1 + ..\main.c + + + gd32f30x_it.c + 1 + ..\gd32f30x_it.c + + + + + CMSIS + + + system_gd32f30x.c + 1 + ..\..\..\Library\Firmware\CMSIS\GD\GD32F30x\Source\system_gd32f30x.c + + + + + GD32F30x_Peripherals + + + gd32f30x_adc.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_adc.c + + + gd32f30x_can.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_can.c + + + gd32f30x_crc.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_crc.c + + + gd32f30x_ctc.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_ctc.c + + + gd32f30x_dac.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_dac.c + + + gd32f30x_dbg.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_dbg.c + + + gd32f30x_dci.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_dci.c + + + gd32f30x_dma.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_dma.c + + + gd32f30x_enet.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_enet.c + + + gd32f30x_exmc.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_exmc.c + + + gd32f30x_exti.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_exti.c + + + gd32f30x_fmc.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_fmc.c + + + gd32f30x_fwdgt.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_fwdgt.c + + + gd32f30x_gpio.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_gpio.c + + + gd32f30x_i2c.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_i2c.c + + + gd32f30x_ipa.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_ipa.c + + + gd32f30x_iref.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_iref.c + + + gd32f30x_misc.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_misc.c + + + gd32f30x_pmu.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_pmu.c + + + gd32f30x_rcu.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_rcu.c + + + gd32f30x_rtc.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_rtc.c + + + gd32f30x_sdio.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_sdio.c + + + gd32f30x_spi.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_spi.c + + + gd32f30x_syscfg.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_syscfg.c + + + gd32f30x_timer.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_timer.c + + + gd32f30x_tli.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_tli.c + + + gd32f30x_trng.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_trng.c + + + gd32f30x_usart.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_usart.c + + + gd32f30x_wwdgt.c + 1 + ..\..\..\Library\Firmware\GD32F30x_standard_peripheral\Source\gd32f30x_wwdgt.c + + + + + GD32F30x_EVAL + + + gd32f303e_eval.c + 1 + ..\..\..\Library\Utilities\gd32f303e_eval.c + + + + + Startup + + + startup_gd32f30x.s + 2 + ..\..\..\Library\Firmware\CMSIS\GD\GD32F30x\Source\ARM\startup_gd32f30x.s + + + + + Doc + + + readme.txt + 5 + ..\readme.txt + + + + + + + +
diff --git a/bsp/gd32/gd32303e-eval/template.uvprojx b/bsp/gd32/gd32303e-eval/template.uvprojx new file mode 100644 index 0000000000..7f6137db37 --- /dev/null +++ b/bsp/gd32/gd32303e-eval/template.uvprojx @@ -0,0 +1,418 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + GD32F303ZE + GigaDevice + GigaDevice.GD32F30x_DFP.2.1.0 + http://gd32mcu.com/data/documents/pack/ + IRAM(0x20000000,0x010000) IROM(0x08000000,0x080000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F30x_CL -FS08000000 -FL040000 -FP0($$Device:GD32F303ZE$Flash\GD32F30x_CL.FLM)) + 0 + $$Device:GD32F303ZE$Device\Include\gd32f30x.h + + + + + + + + + + $$Device:GD32F303ZE$SVD\GD32F30x_CL.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\ + rtthread + 1 + 0 + 0 + 1 + 0 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x18000 + + + 1 + 0x8000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x18000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\gd32_rom.ld + + + + + + + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/bsp/gd32/gd32450z-eval/.config b/bsp/gd32/gd32450z-eval/.config new file mode 100644 index 0000000000..0acca6c304 --- /dev/null +++ b/bsp/gd32/gd32450z-eval/.config @@ -0,0 +1,636 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_BIG_ENDIAN is not set +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# 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_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 + +# +# kservice optimization +# +# CONFIG_RT_KSERVICE_USING_STDLIB is not set +# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set +# CONFIG_RT_USING_ASM_MEMCPY is not set +CONFIG_RT_DEBUG=y +CONFIG_RT_DEBUG_COLOR=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG 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_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +# CONFIG_RT_USING_MEMHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" +# CONFIG_RT_PRINTF_LONGLONG is not set +CONFIG_RT_VER_NUM=0x40004 +# CONFIG_RT_USING_CPU_FFS is not set +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_RT_USING_MSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +CONFIG_RT_USING_SYSTEM_WORKQUEUE=y +CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=2048 +CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_USING_SERIAL_V1=y +# CONFIG_RT_USING_SERIAL_V2 is not set +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER 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_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_PWM 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_HWCRYPTO is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB is not set +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +# CONFIG_RT_USING_LIBC is not set +CONFIG_RT_LIBC_USING_TIME=y +CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 +# CONFIG_RT_USING_PTHREADS is not set + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# Network interface device +# +# CONFIG_RT_USING_NETDEV is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS is not set + +# +# 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_RT_LINK is not set + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES is not set + +# +# 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_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LIBMODBUS is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_RW007 is not set +# 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_NIMBLE 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_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK 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_RAPIDJSON 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_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 + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_LIBSODIUM 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 + +# +# language packages +# +# 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 + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# 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 + +# +# PainterEngine: A cross-platform graphics application framework written in C language +# +# CONFIG_PKG_USING_PAINTERENGINE is not set +# CONFIG_PKG_USING_PAINTERENGINE_AUX is not set + +# +# 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_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_ULOG_FILE 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 + +# +# system packages +# + +# +# enhanced kernel services +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_VSNPRINTF_FULL 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 + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set + +# +# 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 +# CONFIG_RT_USING_ARDUINO is not set +# CONFIG_PKG_USING_GUIENGINE 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_FAL 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_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_WCWIDTH is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB is not set +# CONFIG_PKG_USING_USB_STACK is not set + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_SENSORS_DRIVERS is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 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_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_WM_LIBRARIES is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# CONFIG_PKG_USING_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_AD7746 is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_TOUCH_DRIVERS is not set +# CONFIG_PKG_USING_MAX17048 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_EMBARC_BSP 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_PAJ7620 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_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_STM32WB55_SDK 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_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_BL_MCU_SDK is not set +# CONFIG_PKG_USING_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set + +# +# 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 + +# +# miscellaneous packages +# + +# +# 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 + +# +# 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_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_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_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_DIGITALCTRL 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_VT100 is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_COWSAY is not set +# CONFIG_PKG_USING_TERMBOX is not set + +# +# Hardware Drivers Config +# +CONFIG_SOC_SERIES_GD32F4xx=y +CONFIG_SOC_GD32450Z=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_UART1_RX_USING_DMA is not set +# CONFIG_BSP_USING_SPI is not set +# CONFIG_BSP_USING_I2C1 is not set + +# +# Board extended module Drivers +# diff --git a/bsp/gd32/gd32450z-eval/Kconfig b/bsp/gd32/gd32450z-eval/Kconfig new file mode 100644 index 0000000000..8cbc7b71a8 --- /dev/null +++ b/bsp/gd32/gd32450z-eval/Kconfig @@ -0,0 +1,21 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "../../.." + +config PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +source "../libraries/Kconfig" +source "board/Kconfig" diff --git a/bsp/gd32/gd32450z-eval/README.md b/bsp/gd32/gd32450z-eval/README.md new file mode 100644 index 0000000000..6b398d8661 --- /dev/null +++ b/bsp/gd32/gd32450z-eval/README.md @@ -0,0 +1,94 @@ +# GD32450Z-EVAL开发板BSP说明 + +## 简介 + +GD32450Z-EVAL是-兆易创新推出的一款GD32F4XX系列的评估板,最高主频高达168M,该开发板具有丰富的板载资源,可以充分发挥 GD32F450ZKT6的芯片性能。 + +该开发板常用 **板载资源** 如下: + +- GD32F450ZKT6,主频 200MHz,3072KB FLASH ,256KB RAM + +- 常用外设 + + - LED :3个,LED1 (PD4),LED2(PD5),LED3(PG3) + - 按键:2个,K1(PA0),K2(PC13),K3(PB14) + +- 常用接口:USB 接口 + +- 调试接口:GD-LINK + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **片上外设** | **支持情况** | **备注** | +|:--------- |:--------:|:------------------------------------- | +| GPIO | 支持 | PA0, PA1... PK15 ---> PIN: 0, 1...144 | +| UART | 支持 | UART0 - UART7 | +| I2C | 支持 | I2C1 | +| SPI | 支持 | SPI0 - SPI2 | +| SPI FLASH | 支持 | | +| **扩展模块** | **支持情况** | **备注** | +| 暂无 | 暂不支持 | 暂不支持 | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + +### 快速上手 + +本 BSP 为开发者提供 MDK5 工程,并且支持 GCC 开发环境,也可使用RT-Thread Studio开发。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,使用USB转TTL模块连接PA2(MCU TX)和PA3(MCU RX),打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 GD-Link 仿真器下载程序,在通过 GD-Link 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,LED 闪烁。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.4 build Jan 9 2021 + 2006 - 2021 Copyright by rt-thread team +msh > +``` + +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口1的功能,如果需使用高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5` 命令重新生成工程。 + +## 注意事项 + +暂无 + +## 联系人信息 + +维护人: + +- [BruceOu](https://github.com/Ouxiaolong/), 邮箱: \ No newline at end of file diff --git a/bsp/gd32/gd32450z-eval/SConscript b/bsp/gd32/gd32450z-eval/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/gd32/gd32450z-eval/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/gd32450z-eval/SConstruct b/bsp/gd32/gd32450z-eval/SConstruct new file mode 100644 index 0000000000..71deeebad1 --- /dev/null +++ b/bsp/gd32/gd32450z-eval/SConstruct @@ -0,0 +1,60 @@ +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) + +TARGET = 'rtthread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = 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 == 'iar': + env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rtthread.map') + +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) + +gd32_library = 'GD32F4xx_Firmware_Library' +rtconfig.BSP_LIBRARY_TYPE = gd32_library + +# include libraries +objs.extend(SConscript(os.path.join(libraries_path_prefix, gd32_library, 'SConscript'))) + +# 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/gd32450z-eval/applications/SConscript b/bsp/gd32/gd32450z-eval/applications/SConscript new file mode 100644 index 0000000000..01eb940dfb --- /dev/null +++ b/bsp/gd32/gd32450z-eval/applications/SConscript @@ -0,0 +1,11 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = os.path.join(str(Dir('#')), 'applications') +src = Glob('*.c') +CPPPATH = [cwd, str(Dir('#'))] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/gd32/gd32450z-eval/applications/main.c b/bsp/gd32/gd32450z-eval/applications/main.c new file mode 100644 index 0000000000..5ce66c9b0c --- /dev/null +++ b/bsp/gd32/gd32450z-eval/applications/main.c @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-08-20 BruceOu first implementation + */ + +#include +#include +#include +#include + +/* defined the LED1 pin: PD4 */ +#define LED1_PIN GET_PIN(D, 4) + +int main(void) +{ + int count = 1; + + /* set LED1 pin mode to output */ + rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(LED1_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED1_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + + return RT_EOK; +} diff --git a/bsp/gd32/gd32450z-eval/board/Kconfig b/bsp/gd32/gd32450z-eval/board/Kconfig new file mode 100644 index 0000000000..6d37255141 --- /dev/null +++ b/bsp/gd32/gd32450z-eval/board/Kconfig @@ -0,0 +1,85 @@ +menu "Hardware Drivers Config" + +config SOC_SERIES_GD32F4xx + bool + default y + +config SOC_GD32450Z + bool + select SOC_SERIES_GD32F4xx + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +menu "Onboard Peripheral Drivers" + +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" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART1 + bool "Enable UART1" + default y + + config BSP_UART1_RX_USING_DMA + bool "Enable UART1 RX DMA" + depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA + default n + endif + + menuconfig BSP_USING_SPI + bool "Enable SPI BUS" + default n + select RT_USING_SPI + if BSP_USING_SPI + config BSP_USING_SPI1 + bool "Enable SPI1 BUS" + 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 + select BSP_SPI1_TX_USING_DMA + default n + 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 + source "../libraries/gd32_drivers/Kconfig" + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/gd32/gd32450z-eval/board/SConscript b/bsp/gd32/gd32450z-eval/board/SConscript new file mode 100644 index 0000000000..77a18f74e1 --- /dev/null +++ b/bsp/gd32/gd32450z-eval/board/SConscript @@ -0,0 +1,28 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +''') + +path = [cwd] + +startup_path_prefix = SDK_LIB + +if rtconfig.CROSS_TOOL == 'gcc': + src += [startup_path_prefix + '/GD32F4xx_Firmware_Library/CMSIS/GD/GD32F4xx/Source/GCC/startup_gd32f4xx.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/GD32F4xx_Firmware_Library/CMSIS/GD/GD32F4xx/Source/ARM/startup_gd32f4xx.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/GD32F4xx_Firmware_Library/CMSIS/GD/GD32F4xx/Source/IAR/startup_gd32f4xx.s'] + +CPPDEFINES = ['GD32F450'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/gd32/gd32450z-eval/board/board.c b/bsp/gd32/gd32450z-eval/board/board.c new file mode 100644 index 0000000000..0e9f89865a --- /dev/null +++ b/bsp/gd32/gd32450z-eval/board/board.c @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-08-20 BruceOu first implementation + */ +#include +#include +#include +#include + +/** + * @brief This function is executed in case of error occurrence. + * @param None + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler */ + /* User can add his own implementation to report the HAL error return state */ + while (1) + { + } + /* USER CODE END Error_Handler */ +} + +/** System Clock Configuration +*/ +void SystemClock_Config(void) +{ + SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND); + NVIC_SetPriority(SysTick_IRQn, 0); +} + +/** + * This is the timer interrupt service routine. + * + */ +void SysTick_Handler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + rt_tick_increase(); + + /* leave interrupt */ + rt_interrupt_leave(); +} + +/** + * This function will initial GD32 board. + */ +void rt_hw_board_init() +{ + /* NVIC Configuration */ +#define NVIC_VTOR_MASK 0x3FFFFF80 +#ifdef VECT_TAB_RAM + /* Set the Vector Table base location at 0x10000000 */ + SCB->VTOR = (0x10000000 & NVIC_VTOR_MASK); +#else /* VECT_TAB_FLASH */ + /* Set the Vector Table base location at 0x08000000 */ + SCB->VTOR = (0x08000000 & NVIC_VTOR_MASK); +#endif + + SystemClock_Config(); + +#ifdef RT_USING_COMPONENTS_INIT + rt_components_board_init(); +#endif + +#ifdef RT_USING_CONSOLE + rt_console_set_device(RT_CONSOLE_DEVICE_NAME); +#endif + +#ifdef BSP_USING_SDRAM + rt_system_heap_init((void *)EXT_SDRAM_BEGIN, (void *)EXT_SDRAM_END); +#else + rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); +#endif +} + +/*@}*/ diff --git a/bsp/gd32/gd32450z-eval/board/board.h b/bsp/gd32/gd32450z-eval/board/board.h new file mode 100644 index 0000000000..59e00a88ca --- /dev/null +++ b/bsp/gd32/gd32450z-eval/board/board.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-08-20 BruceOu first implementation + */ +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include "gd32f4xx.h" +#include "drv_usart.h" +#include "drv_gpio.h" + +#include "gd32f4xx_exti.h" + +#define EXT_SDRAM_BEGIN (0xC0000000U) /* the begining address of external SDRAM */ +#define EXT_SDRAM_END (EXT_SDRAM_BEGIN + (32U * 1024 * 1024)) /* the end address of external SDRAM */ + +// Internal SRAM memory size[Kbytes] <8-256> +// Default: 256 +#ifdef __ICCARM__ +// Use *.icf ram symbal, to avoid hardcode. +extern char __ICFEDIT_region_RAM_end__; +#define GD32_SRAM_END &__ICFEDIT_region_RAM_end__ +#else +#define GD32_SRAM_SIZE 256 +#define GD32_SRAM_END (0x20000000 + GD32_SRAM_SIZE * 1024) +#endif + +#ifdef __CC_ARM +extern int Image$$RW_IRAM1$$ZI$$Limit; +#define HEAP_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit) +#elif __ICCARM__ +#pragma section="HEAP" +#define HEAP_BEGIN (__segment_end("HEAP")) +#else +extern int __bss_end; +#define HEAP_BEGIN (&__bss_end) +#endif + +#define HEAP_END GD32_SRAM_END + +#endif + diff --git a/bsp/gd32/gd32450z-eval/board/gd32f4xx_libopt.h b/bsp/gd32/gd32450z-eval/board/gd32f4xx_libopt.h new file mode 100644 index 0000000000..d26e3d15ec --- /dev/null +++ b/bsp/gd32/gd32450z-eval/board/gd32f4xx_libopt.h @@ -0,0 +1,45 @@ +/*! + \file gd32f4xx_libopt.h + \brief library optional for gd32f4xx +*/ + +/* + Copyright (C) 2016 GigaDevice + + 2016-10-19, V1.0.0, firmware for GD32F4xx +*/ + +#ifndef GD32F4XX_LIBOPT_H +#define GD32F4XX_LIBOPT_H +#include "gd32f4xx_rcu.h" +#include "gd32f4xx_adc.h" +#include "gd32f4xx_can.h" +#include "gd32f4xx_crc.h" +#include "gd32f4xx_ctc.h" +#include "gd32f4xx_dac.h" +#include "gd32f4xx_dbg.h" +#include "gd32f4xx_dci.h" +#include "gd32f4xx_dma.h" +//#include "gd32f4xx_enet.h" +#include "gd32f4xx_exmc.h" +#include "gd32f4xx_exti.h" +#include "gd32f4xx_fmc.h" +#include "gd32f4xx_fwdgt.h" +#include "gd32f4xx_gpio.h" +#include "gd32f4xx_syscfg.h" +#include "gd32f4xx_i2c.h" +#include "gd32f4xx_ipa.h" +#include "gd32f4xx_iref.h" +#include "gd32f4xx_pmu.h" +#include "gd32f4xx_rcu.h" +#include "gd32f4xx_rtc.h" +#include "gd32f4xx_sdio.h" +#include "gd32f4xx_spi.h" +#include "gd32f4xx_timer.h" +#include "gd32f4xx_tli.h" +#include "gd32f4xx_trng.h" +#include "gd32f4xx_usart.h" +#include "gd32f4xx_wwdgt.h" +#include "gd32f4xx_misc.h" + +#endif /* GD32F4XX_LIBOPT_H */ diff --git a/bsp/gd32/gd32450z-eval/board/linker_scripts/link.icf b/bsp/gd32/gd32450z-eval/board/linker_scripts/link.icf new file mode 100644 index 0000000000..be287f2c06 --- /dev/null +++ b/bsp/gd32/gd32450z-eval/board/linker_scripts/link.icf @@ -0,0 +1,40 @@ +/*###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-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x082FFFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2003FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x2000; +define symbol __ICFEDIT_size_heap__ = 0x2000; +/**** End of ICF editor section. ###ICF###*/ + +export symbol __ICFEDIT_region_RAM_end__; + +define symbol __region_RAM1_start__ = 0x10000000; +define symbol __region_RAM1_end__ = 0x1000FFFF; + +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__]; +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 { 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 }; +place in RAM1_region { section .sram }; \ No newline at end of file diff --git a/bsp/gd32/gd32450z-eval/board/linker_scripts/link.ld b/bsp/gd32/gd32450z-eval/board/linker_scripts/link.ld new file mode 100644 index 0000000000..f39b59d02d --- /dev/null +++ b/bsp/gd32/gd32450z-eval/board/linker_scripts/link.ld @@ -0,0 +1,142 @@ +/* + * linker script for GD32F4xx with GNU ld + * bernard.xiong 2009-10-14 + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + CODE (rx) : ORIGIN = 0x08000000, LENGTH = 3072k /* 3072KB flash */ + DATA (rw) : ORIGIN = 0x20000000, LENGTH = 256k /* 256KB sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +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 = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > CODE + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >DATA + + .stack : + { + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >DATA + + __bss_start = .; + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + + *(.bss.init) + } > DATA + __bss_end = .; + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/gd32/gd32450z-eval/board/linker_scripts/link.sct b/bsp/gd32/gd32450z-eval/board/linker_scripts/link.sct new file mode 100644 index 0000000000..fd32503883 --- /dev/null +++ b/bsp/gd32/gd32450z-eval/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00300000 { ; load region size_region + ER_IROM1 0x08000000 0x00300000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00040000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/gd32/gd32450z-eval/project.uvoptx b/bsp/gd32/gd32450z-eval/project.uvoptx new file mode 100644 index 0000000000..8117421f4d --- /dev/null +++ b/bsp/gd32/gd32450z-eval/project.uvoptx @@ -0,0 +1,778 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -O206 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0GD32F4xx_3MB.FLM -FS08000000 -FL0300000 -FP0($$Device:GD32F450ZK$Flash\GD32F4xx_3MB.FLM) + + + 0 + JL2CM3 + -U59401765 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0GD32F4xx_3MB.FLM -FS08000000 -FL0300000 -FP0($$Device:GD32F450ZK$Flash\GD32F4xx_3MB.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F4xx_3MB -FS08000000 -FL0300000 -FP0($$Device:GD32F450ZK$Flash\GD32F4xx_3MB.FLM)) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Applications + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + CPU + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + cpuport.c + 0 + 0 + + + 2 + 6 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + context_rvds.S + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 4 + 16 + 1 + 0 + 0 + 0 + ..\libraries\gd32_drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 4 + 17 + 1 + 0 + 0 + 0 + ..\libraries\gd32_drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + + + Finsh + 0 + 0 + 0 + 0 + + 5 + 18 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 5 + 19 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 5 + 20 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + + + gd32_drivers + 0 + 0 + 0 + 0 + + 6 + 21 + 2 + 0 + 0 + 0 + ..\libraries\GD32F4xx_Firmware_Library\CMSIS\GD\GD32F4xx\Source\ARM\startup_gd32f4xx.s + startup_gd32f4xx.s + 0 + 0 + + + 6 + 22 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 7 + 23 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 7 + 24 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 7 + 25 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + 7 + 26 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 7 + 27 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 7 + 28 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 7 + 29 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 7 + 30 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 7 + 31 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 7 + 32 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 7 + 33 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 7 + 34 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 7 + 35 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + + + libc + 0 + 0 + 0 + 0 + + 8 + 36 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\time.c + time.c + 0 + 0 + + + + + Libraries + 0 + 0 + 0 + 0 + + 9 + 37 + 1 + 0 + 0 + 0 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_syscfg.c + gd32f4xx_syscfg.c + 0 + 0 + + + 9 + 38 + 1 + 0 + 0 + 0 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_exti.c + gd32f4xx_exti.c + 0 + 0 + + + 9 + 39 + 1 + 0 + 0 + 0 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_gpio.c + gd32f4xx_gpio.c + 0 + 0 + + + 9 + 40 + 1 + 0 + 0 + 0 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_rcu.c + gd32f4xx_rcu.c + 0 + 0 + + + 9 + 41 + 1 + 0 + 0 + 0 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_misc.c + gd32f4xx_misc.c + 0 + 0 + + + 9 + 42 + 1 + 0 + 0 + 0 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_usart.c + gd32f4xx_usart.c + 0 + 0 + + + 9 + 43 + 1 + 0 + 0 + 0 + ..\libraries\GD32F4xx_Firmware_Library\CMSIS\GD\GD32F4xx\Source\system_gd32f4xx.c + system_gd32f4xx.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/gd32/gd32450z-eval/project.uvproj b/bsp/gd32/gd32450z-eval/project.uvproj new file mode 100644 index 0000000000..96217840c7 --- /dev/null +++ b/bsp/gd32/gd32450z-eval/project.uvproj @@ -0,0 +1,747 @@ + + + 1.1 +
### uVision Project, (C) Keil Software
+ + + rt-thread + 0x4 + ARM-ADS + 0 + + + GD32F450ZK + GigaDevice + IRAM(0x20000000-0x20030000) IROM(0x08000000-0x08300000) CLOCK(20000000) CPUTYPE("Cortex-M4") FPU2 + + "Startup\GD\GD32F4xx\startup_gd32f4xx.s" ("GD32F4xx Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0GD32F4xx_3MB -FS08000000 -FL0300000) + 0 + gd32f4xx0.h + + + + + + + + + + SFD\GD\GD32F4xx\GD32F4xx.SFR + 0 + 0 + + + + GD\GD32F4xx\ + GD\GD32F4xx\ + + 0 + 0 + 0 + 0 + 1 + + .\output\ + rtthread + 1 + 0 + 1 + 1 + 1 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 3 + + + + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x30000 + + + 1 + 0x8000000 + 0x300000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x300000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x30000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + GD32F450, USE_STDPERIPH_DRIVER, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND + + applications;.;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\libraries\gd32_drivers;..\..\..\components\finsh;board;.;..\..\..\include;..\..\..\components\libc\compilers\common;..\..\..\components\libc\compilers\common\nogcc;..\libraries\GD32F4xx_Firmware_Library\CMSIS\GD\GD32F4xx\Include;..\libraries\GD32F4xx_Firmware_Library\CMSIS;..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Include;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\posix\ipc;..\..\..\examples\utest\testcases\kernel + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + CPU + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + + + Drivers + + + drv_gpio.c + 1 + ..\libraries\gd32_drivers\drv_gpio.c + + + + + drv_usart.c + 1 + ..\libraries\gd32_drivers\drv_usart.c + + + + + Finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + gd32_drivers + + + startup_gd32f4xx.s + 2 + ..\libraries\GD32F4xx_Firmware_Library\CMSIS\GD\GD32F4xx\Source\ARM\startup_gd32f4xx.s + + + + + board.c + 1 + board\board.c + + + + + Kernel + + + object.c + 1 + ..\..\..\src\object.c + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + + + device.c + 1 + ..\..\..\src\device.c + + + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + + + clock.c + 1 + ..\..\..\src\clock.c + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + + + components.c + 1 + ..\..\..\src\components.c + + + + + libc + + + time.c + 1 + ..\..\..\components\libc\compilers\common\time.c + + + + + Libraries + + + gd32f4xx_syscfg.c + 1 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_syscfg.c + + + + + gd32f4xx_exti.c + 1 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_exti.c + + + + + gd32f4xx_gpio.c + 1 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_gpio.c + + + + + gd32f4xx_rcu.c + 1 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_rcu.c + + + + + gd32f4xx_misc.c + 1 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_misc.c + + + + + gd32f4xx_usart.c + 1 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_usart.c + + + + + system_gd32f4xx.c + 1 + ..\libraries\GD32F4xx_Firmware_Library\CMSIS\GD\GD32F4xx\Source\system_gd32f4xx.c + + + + + + +
diff --git a/bsp/gd32/gd32450z-eval/project.uvprojx b/bsp/gd32/gd32450z-eval/project.uvprojx new file mode 100644 index 0000000000..da7049b867 --- /dev/null +++ b/bsp/gd32/gd32450z-eval/project.uvprojx @@ -0,0 +1,677 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 0 + + + GD32F450ZK + GigaDevice + GigaDevice.GD32F4xx_DFP.2.1.0 + http://gd32mcu.com/data/documents/pack/ + IRAM(0x20000000,0x040000) IROM(0x08000000,0x0300000) CPUTYPE("Cortex-M4") FPU2 CLOCK(20000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F4xx_3MB -FS08000000 -FL0300000 -FP0($$Device:GD32F450ZK$Flash\GD32F4xx_3MB.FLM)) + 0 + $$Device:GD32F450ZK$Device\Include\gd32f4xx.h + + + + + + + + + + $$Device:GD32F450ZK$SVD\GD32F4xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\ + rtthread + 1 + 0 + 0 + 1 + 0 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x8000000 + 0x300000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x300000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x30000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + GD32F450, USE_STDPERIPH_DRIVER, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND + + applications;.;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\libraries\gd32_drivers;..\..\..\components\finsh;board;.;..\..\..\include;..\..\..\components\libc\compilers\common;..\..\..\components\libc\compilers\common\nogcc;..\libraries\GD32F4xx_Firmware_Library\CMSIS\GD\GD32F4xx\Include;..\libraries\GD32F4xx_Firmware_Library\CMSIS;..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Include;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\posix\ipc;..\..\..\examples\utest\testcases\kernel + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\gd32_rom.ld + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + CPU + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + + + Drivers + + + drv_gpio.c + 1 + ..\libraries\gd32_drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\gd32_drivers\drv_usart.c + + + + + Finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + gd32_drivers + + + startup_gd32f4xx.s + 2 + ..\libraries\GD32F4xx_Firmware_Library\CMSIS\GD\GD32F4xx\Source\ARM\startup_gd32f4xx.s + + + board.c + 1 + board\board.c + + + + + Kernel + + + thread.c + 1 + ..\..\..\src\thread.c + + + irq.c + 1 + ..\..\..\src\irq.c + + + timer.c + 1 + ..\..\..\src\timer.c + + + components.c + 1 + ..\..\..\src\components.c + + + mem.c + 1 + ..\..\..\src\mem.c + + + object.c + 1 + ..\..\..\src\object.c + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + idle.c + 1 + ..\..\..\src\idle.c + + + device.c + 1 + ..\..\..\src\device.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + clock.c + 1 + ..\..\..\src\clock.c + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + + + libc + + + time.c + 1 + ..\..\..\components\libc\compilers\common\time.c + + + + + Libraries + + + gd32f4xx_syscfg.c + 1 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_syscfg.c + + + gd32f4xx_exti.c + 1 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_exti.c + + + gd32f4xx_gpio.c + 1 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_gpio.c + + + gd32f4xx_rcu.c + 1 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_rcu.c + + + gd32f4xx_misc.c + 1 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_misc.c + + + gd32f4xx_usart.c + 1 + ..\libraries\GD32F4xx_Firmware_Library\GD32F4xx_standard_peripheral\Source\gd32f4xx_usart.c + + + system_gd32f4xx.c + 1 + ..\libraries\GD32F4xx_Firmware_Library\CMSIS\GD\GD32F4xx\Source\system_gd32f4xx.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/bsp/gd32/gd32450z-eval/rtconfig.h b/bsp/gd32/gd32450z-eval/rtconfig.h new file mode 100644 index 0000000000..0fbd373786 --- /dev/null +++ b/bsp/gd32/gd32450z-eval/rtconfig.h @@ -0,0 +1,200 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Configuration */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_ALIGN_SIZE 4 +#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_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 + +/* kservice optimization */ + +#define RT_DEBUG +#define RT_DEBUG_COLOR + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart1" +#define RT_VER_NUM 0x40004 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 + +/* C++ features */ + + +/* Command shell */ + +#define RT_USING_FINSH +#define RT_USING_MSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SYSTEM_WORKQUEUE +#define RT_SYSTEM_WORKQUEUE_STACKSIZE 2048 +#define RT_SYSTEM_WORKQUEUE_PRIORITY 23 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN + +/* Using USB */ + + +/* POSIX layer and C standard library */ + +#define RT_LIBC_USING_TIME +#define RT_LIBC_DEFAULT_TIMEZONE 8 + +/* Network */ + +/* Socket abstraction layer */ + + +/* Network interface device */ + + +/* light weight TCP/IP stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* RT-Thread Utestcases */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + + +/* u8g2: a monochrome graphic library */ + + +/* PainterEngine: A cross-platform graphics application framework written in C language */ + + +/* tools packages */ + + +/* system packages */ + +/* enhanced kernel services */ + + +/* acceleration: Assembly language or algorithmic acceleration packages */ + + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + + +/* Micrium: Micrium software products porting for RT-Thread */ + + +/* peripheral libraries and drivers */ + + +/* AI packages */ + + +/* miscellaneous packages */ + +/* samples: kernel and components samples */ + + +/* entertainment: terminal games and other interesting software packages */ + + +/* Hardware Drivers Config */ + +#define SOC_SERIES_GD32F4xx +#define SOC_GD32450Z + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART1 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/gd32/gd32450z-eval/rtconfig.py b/bsp/gd32/gd32450z-eval/rtconfig.py new file mode 100644 index 0000000000..c0c0b203cf --- /dev/null +++ b/bsp/gd32/gd32450z-eval/rtconfig.py @@ -0,0 +1,150 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m4' +CROSS_TOOL='keil' + +# 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'C:\Users\XXYYZZ' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iar' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +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-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -DGD32F450' + 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-M4.fp ' + 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 == 'iar': + # 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-M4' + CFLAGS += ' -e' + CFLAGS += ' --fpu=VFPv4_sp' + 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-M4' + AFLAGS += ' --fpu VFPv4_sp' + 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/gd32450z-eval/template.uvoptx b/bsp/gd32/gd32450z-eval/template.uvoptx new file mode 100644 index 0000000000..3947c5e208 --- /dev/null +++ b/bsp/gd32/gd32450z-eval/template.uvoptx @@ -0,0 +1,190 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -O206 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0GD32F4xx_3MB.FLM -FS08000000 -FL0300000 -FP0($$Device:GD32F450ZK$Flash\GD32F4xx_3MB.FLM) + + + 0 + JL2CM3 + -U59401765 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0GD32F4xx_3MB.FLM -FS08000000 -FL0300000 -FP0($$Device:GD32F450ZK$Flash\GD32F4xx_3MB.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F4xx_3MB -FS08000000 -FL0300000 -FP0($$Device:GD32F450ZK$Flash\GD32F4xx_3MB.FLM)) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/gd32/gd32450z-eval/template.uvproj b/bsp/gd32/gd32450z-eval/template.uvproj new file mode 100644 index 0000000000..a23ad93c9a --- /dev/null +++ b/bsp/gd32/gd32450z-eval/template.uvproj @@ -0,0 +1,628 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 0 + + + GD32F450ZK + GigaDevice + IRAM(0x20000000-0x20030000) IROM(0x08000000-0x08300000) CLOCK(20000000) CPUTYPE("Cortex-M4") FPU2 + + "Startup\GD\GD32F4xx\startup_gd32f4xx.s" ("GD32F4xx Startup Code") + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC800 -FN1 -FF0GD32F4xx_3MB -FS08000000 -FL0300000) + 0 + gd32f4xx0.h + + + + + + + + + + SFD\GD\GD32F4xx\GD32F4xx.SFR + 0 + 0 + + + + GD\GD32F4xx\ + GD\GD32F4xx\ + + 0 + 0 + 0 + 0 + 1 + + .\output\ + rtthread + 1 + 0 + 1 + 1 + 1 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 3 + + + + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x30000 + + + 1 + 0x8000000 + 0x300000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x300000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x30000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Include;..\..\..\Library\Firmware\CMSIS\GD\GD32F4xx\Include;..\..\..\Library\Utilities;..\ + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Application + + + main.c + 1 + ..\main.c + + + gd32f4xx_it.c + 1 + ..\gd32f4xx_it.c + + + + + CMSIS + + + system_gd32f4xx.c + 1 + ..\..\..\Library\Firmware\CMSIS\GD\GD32F4xx\Source\system_gd32f4xx.c + + + + + GD32F4xx_Peripherals + + + gd32f4xx_adc.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_adc.c + + + gd32f4xx_can.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_can.c + + + gd32f4xx_crc.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_crc.c + + + gd32f4xx_ctc.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_ctc.c + + + gd32f4xx_dac.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_dac.c + + + gd32f4xx_dbg.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_dbg.c + + + gd32f4xx_dci.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_dci.c + + + gd32f4xx_dma.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_dma.c + + + gd32f4xx_enet.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_enet.c + + + gd32f4xx_exmc.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_exmc.c + + + gd32f4xx_exti.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_exti.c + + + gd32f4xx_fmc.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_fmc.c + + + gd32f4xx_fwdgt.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_fwdgt.c + + + gd32f4xx_gpio.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_gpio.c + + + gd32f4xx_i2c.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_i2c.c + + + gd32f4xx_ipa.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_ipa.c + + + gd32f4xx_iref.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_iref.c + + + gd32f4xx_misc.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_misc.c + + + gd32f4xx_pmu.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_pmu.c + + + gd32f4xx_rcu.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_rcu.c + + + gd32f4xx_rtc.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_rtc.c + + + gd32f4xx_sdio.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_sdio.c + + + gd32f4xx_spi.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_spi.c + + + gd32f4xx_syscfg.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_syscfg.c + + + gd32f4xx_timer.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_timer.c + + + gd32f4xx_tli.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_tli.c + + + gd32f4xx_trng.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_trng.c + + + gd32f4xx_usart.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_usart.c + + + gd32f4xx_wwdgt.c + 1 + ..\..\..\Library\Firmware\GD32F4xx_standard_peripheral\Source\gd32f4xx_wwdgt.c + + + + + GD32F4xx_EVAL + + + gd32f450z_eval.c + 1 + ..\..\..\Library\Utilities\gd32f450z_eval.c + + + + + Startup + + + startup_gd32f4xx.s + 2 + ..\..\..\Library\Firmware\CMSIS\GD\GD32F4xx\Source\ARM\startup_gd32f4xx.s + + + + + Doc + + + readme.txt + 5 + ..\readme.txt + + + + + + + +
diff --git a/bsp/gd32/gd32450z-eval/template.uvprojx b/bsp/gd32/gd32450z-eval/template.uvprojx new file mode 100644 index 0000000000..5653f2da1d --- /dev/null +++ b/bsp/gd32/gd32450z-eval/template.uvprojx @@ -0,0 +1,417 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 0 + + + GD32F450ZK + GigaDevice + GigaDevice.GD32F4xx_DFP.2.1.0 + http://gd32mcu.com/data/documents/pack/ + IRAM(0x20000000,0x040000) IROM(0x08000000,0x0300000) CPUTYPE("Cortex-M4") FPU2 CLOCK(20000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F4xx_3MB -FS08000000 -FL0300000 -FP0($$Device:GD32F450ZK$Flash\GD32F4xx_3MB.FLM)) + 0 + $$Device:GD32F450ZK$Device\Include\gd32f4xx.h + + + + + + + + + + $$Device:GD32F450ZK$SVD\GD32F4xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\ + rtthread + 1 + 0 + 0 + 1 + 0 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x40000 + + + 1 + 0x8000000 + 0x300000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x300000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x30000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 1 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\gd32_rom.ld + + + + + + + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
-- GitLab