From 88abde1578578ae5f0af00270331da7ccf532054 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 26 Feb 2021 06:17:22 +0800 Subject: [PATCH 01/17] [libc] beatify getline --- components/libc/getline/README.md | 10 ---------- components/libc/getline/posix_getline.c | 3 +-- components/libc/getline/posix_getline.h | 3 +-- 3 files changed, 2 insertions(+), 14 deletions(-) diff --git a/components/libc/getline/README.md b/components/libc/getline/README.md index 0b279755d3..ef3c19deae 100644 --- a/components/libc/getline/README.md +++ b/components/libc/getline/README.md @@ -18,13 +18,3 @@ For more details, see [Open Group Base Specification for getdelim/getline][openg This code is unlicensed -- free and released into the public domain. See `UNLICENSE` file for more information. [opengroup-spec]: http://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html - - - - -## 联系&维护 -Meco Man - -jiantingman@foxmail.com - -https://github.com/mysterywolf/getline diff --git a/components/libc/getline/posix_getline.c b/components/libc/getline/posix_getline.c index e2ac278242..99bcf5363e 100644 --- a/components/libc/getline/posix_getline.c +++ b/components/libc/getline/posix_getline.c @@ -5,9 +5,8 @@ * https://man7.org/linux/man-pages/man3/getline.3.html * Authors: * https://github.com/ivanrad/getline - * https://github.com/mysterywolf/getline/ * - * Meco Man 2020-09-03 First Version + * Meco Man 2020-09-03 porting to RT-Thread */ #include "posix_getline.h" diff --git a/components/libc/getline/posix_getline.h b/components/libc/getline/posix_getline.h index c7d6021af3..e9e0bf9c2b 100644 --- a/components/libc/getline/posix_getline.h +++ b/components/libc/getline/posix_getline.h @@ -5,9 +5,8 @@ * https://man7.org/linux/man-pages/man3/getline.3.html * Authors: * https://github.com/ivanrad/getline - * https://github.com/mysterywolf/getline/ * - * Meco Man 2020-09-03 First Version + * Meco Man 2020-09-03 porting to RT-Thread */ From 952e35d9d3e544ec4e9bc95f0cbe53dd13e1642a Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 26 Feb 2021 06:34:52 +0800 Subject: [PATCH 02/17] update Kconfig --- components/libc/Kconfig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/libc/Kconfig b/components/libc/Kconfig index 65c8d44225..49b97481d1 100644 --- a/components/libc/Kconfig +++ b/components/libc/Kconfig @@ -54,9 +54,9 @@ if RT_USING_LIBC endif if RT_USING_LIBC != y - config RT_LIBC_USING_TIME - bool "Enable TIME FUNCTIONS WITHOUT COMPILER'S LIBC" - default y + config RT_LIBC_USING_TIME + bool "Enable TIME FUNCTIONS WITHOUT COMPILER'S LIBC" + default y endif endmenu From c271332dd8524e7b9acfb4b1cbf3cf4dbe8107f3 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 26 Feb 2021 10:23:01 +0800 Subject: [PATCH 03/17] [bug][bsp][stm32][pandora] fix a bug that cannot use fatfs in the main thread at starting up --- .../board/ports/sdcard_port.c | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/bsp/stm32/stm32l475-atk-pandora/board/ports/sdcard_port.c b/bsp/stm32/stm32l475-atk-pandora/board/ports/sdcard_port.c index e1af109455..131a4221a5 100644 --- a/bsp/stm32/stm32l475-atk-pandora/board/ports/sdcard_port.c +++ b/bsp/stm32/stm32l475-atk-pandora/board/ports/sdcard_port.c @@ -6,6 +6,7 @@ * Change Logs: * Date Author Notes * 2018-12-14 balanceTWK add sdcard port file + * 2021-02-26 Meco Man fix a bug that cannot use fatfs in the main thread at starting up */ #include @@ -46,16 +47,27 @@ int stm32_sdcard_mount(void) { rt_thread_t tid; - tid = rt_thread_create("sd_mount", sd_mount, RT_NULL, - 1024, RT_THREAD_PRIORITY_MAX - 2, 20); - if (tid != RT_NULL) + if (dfs_mount("sd0", "/", "elm", 0, 0) == RT_EOK) { - rt_thread_startup(tid); + LOG_I("sd card mount to '/'"); } else { - LOG_E("create sd_mount thread err!"); + tid = rt_thread_create("sd_mount", sd_mount, RT_NULL, + 1024, RT_THREAD_PRIORITY_MAX - 2, 20); + if (tid != RT_NULL) + { + rt_thread_startup(tid); + } + else + { + LOG_E("create sd_mount thread err!"); + } } + + + + return RT_EOK; } INIT_APP_EXPORT(stm32_sdcard_mount); From d306e39a551443a3f7c9f921eb01323ad128b423 Mon Sep 17 00:00:00 2001 From: jackis Date: Fri, 26 Feb 2021 17:32:33 +0800 Subject: [PATCH 04/17] [bsp/max32660] add the driver of i2c --- bsp/maxim/MAX32660_EVSYS/.config | 37 +- bsp/maxim/MAX32660_EVSYS/board/Kconfig | 16 + bsp/maxim/MAX32660_EVSYS/project.uvguix.M2019 | 1878 +++++++++++++++++ bsp/maxim/MAX32660_EVSYS/project.uvoptx | 170 +- bsp/maxim/MAX32660_EVSYS/project.uvprojx | 40 +- bsp/maxim/MAX32660_EVSYS/rtconfig.h | 3 +- bsp/maxim/libraries/HAL_Drivers/SConscript | 3 + bsp/maxim/libraries/HAL_Drivers/drv_i2c.c | 182 ++ bsp/maxim/libraries/HAL_Drivers/drv_i2c.h | 16 + 9 files changed, 2268 insertions(+), 77 deletions(-) create mode 100644 bsp/maxim/MAX32660_EVSYS/project.uvguix.M2019 create mode 100644 bsp/maxim/libraries/HAL_Drivers/drv_i2c.c create mode 100644 bsp/maxim/libraries/HAL_Drivers/drv_i2c.h diff --git a/bsp/maxim/MAX32660_EVSYS/.config b/bsp/maxim/MAX32660_EVSYS/.config index 82e0a0d279..94edea6dbf 100644 --- a/bsp/maxim/MAX32660_EVSYS/.config +++ b/bsp/maxim/MAX32660_EVSYS/.config @@ -14,7 +14,7 @@ CONFIG_RT_ALIGN_SIZE=4 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_TICK_PER_SECOND=1000 CONFIG_RT_USING_OVERFLOW_CHECK=y CONFIG_RT_USING_HOOK=y CONFIG_RT_USING_IDLE_HOOK=y @@ -120,7 +120,9 @@ 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_I2C=y +# CONFIG_RT_I2C_DEBUG is not set +# CONFIG_RT_USING_I2C_BITOPS is not set # CONFIG_RT_USING_PHY is not set CONFIG_RT_USING_PIN=y # CONFIG_RT_USING_ADC is not set @@ -272,6 +274,7 @@ CONFIG_RT_USING_PIN=y # 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 # # security packages @@ -300,6 +303,7 @@ CONFIG_RT_USING_PIN=y # CONFIG_PKG_USING_HELIX is not set # CONFIG_PKG_USING_AZUREGUIX is not set # CONFIG_PKG_USING_TOUCHGFX2RTT is not set +# CONFIG_PKG_USING_LVGL is not set # # tools packages @@ -311,6 +315,8 @@ CONFIG_RT_USING_PIN=y # 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 @@ -324,6 +330,16 @@ CONFIG_RT_USING_PIN=y # 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 # # system packages @@ -361,6 +377,13 @@ CONFIG_RT_USING_PIN=y # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_PPOOL is not set +# CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# 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 +# CONFIG_PKG_USING_LPM is not set # # peripheral libraries and drivers @@ -369,6 +392,7 @@ CONFIG_RT_USING_PIN=y # 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_U8G2 is not set @@ -418,7 +442,10 @@ CONFIG_RT_USING_PIN=y # CONFIG_PKG_USING_SSD1306 is not set # CONFIG_PKG_USING_QKEY is not set # CONFIG_PKG_USING_RS485 is not set -# CONFIG_PKG_USING_BSAL 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 # # miscellaneous packages @@ -468,6 +495,9 @@ CONFIG_RT_USING_PIN=y # CONFIG_PKG_USING_TETRIS is not set # CONFIG_PKG_USING_LWGPS is not set # CONFIG_PKG_USING_TENSORFLOWLITEMICRO 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 # # Hardware Drivers Config @@ -485,3 +515,4 @@ CONFIG_BSP_USING_UART1=y # CONFIG_BSP_UART1_RX_USING_DMA is not set # CONFIG_BSP_USING_SPI is not set # CONFIG_BSP_USING_ON_CHIP_FLASH is not set +# CONFIG_BSP_USING_I2C is not set diff --git a/bsp/maxim/MAX32660_EVSYS/board/Kconfig b/bsp/maxim/MAX32660_EVSYS/board/Kconfig index fa4ec1d0cd..01d04ec0f6 100644 --- a/bsp/maxim/MAX32660_EVSYS/board/Kconfig +++ b/bsp/maxim/MAX32660_EVSYS/board/Kconfig @@ -66,6 +66,22 @@ menu "On-chip Peripheral Drivers" select PKG_USING_FAL bool "Enable on-chip FLASH" default n + config BSP_USING_I2C + bool "Enable I2C" + select RT_USING_I2C + default n + + if BSP_USING_I2C + config BSP_USING_I2C0 + bool "Enable I2C0 bus [SCL P0.8; SDA P0.9]" + default y + + config BSP_USING_I2C1 + bool "Enable I2C1 bus [SCL P0.2; SDA P0.3]" + default n + endif + + endmenu diff --git a/bsp/maxim/MAX32660_EVSYS/project.uvguix.M2019 b/bsp/maxim/MAX32660_EVSYS/project.uvguix.M2019 new file mode 100644 index 0000000000..82c04baab6 --- /dev/null +++ b/bsp/maxim/MAX32660_EVSYS/project.uvguix.M2019 @@ -0,0 +1,1878 @@ + + + + -6.1 + +
### uVision Project, (C) Keil Software
+ + + + + + + + + + 38003 + Registers + 150 96 + + + 346 + Code Coverage + 1090 160 + + + 204 + Performance Analyzer + 1250 + + + + + + 35141 + Event Statistics + + 200 50 700 + + + 1506 + Symbols + + 85 85 85 + + + 1936 + Watch 1 + + 200 133 133 + + + 1937 + Watch 2 + + 200 133 133 + + + 1935 + Call Stack + Locals + + 200 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 150 + + + 466 + Source Browser + 500 + 300 + + + + + + + + 1 + 1 + 0 + 0 + -1 + + + + + + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 24 + 355 + 1923 + 1120 + + + + 0 + + 270 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000001000000000000000100000042453A5C4769746875625C72742D7468726561645C6273705C6D6178696D5C6C69627261726965735C48414C5F447269766572735C6472765F736F66745F6932632E63000000000E6472765F736F66745F6932632E6300000000C5D4F200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000006F020000860000007B070000A8030000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 040100004F000000F0050000E8000000 + + + 16 + 6F020000860000005B0700001F010000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000FD00000058030000 + + + 16 + 560000006D0000005601000046010000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000FD00000058030000 + + + 16 + 560000006D00000086010000D2020000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000055020000ED050000D2020000 + + + 16 + 560000006D0000004E03000006010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000055020000ED050000D2020000 + + + 16 + 560000006D0000004E03000006010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000055020000ED050000D2020000 + + + 16 + 560000006D0000004E03000006010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000055020000ED050000D2020000 + + + 16 + 560000006D0000004E03000006010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0701000066000000ED050000CF000000 + + + 16 + 560000006D0000004E03000006010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 0300000055020000ED050000D2020000 + + + 16 + 560000006D0000005601000046010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000055020000ED050000D2020000 + + + 16 + 560000006D0000005601000046010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000055020000ED050000D2020000 + + + 16 + 560000006D0000005601000046010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000055020000ED050000D2020000 + + + 16 + 560000006D0000004E03000006010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000055020000ED050000D2020000 + + + 16 + 560000006D0000004E03000006010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000055020000ED050000D2020000 + + + 16 + 560000006D0000004E03000006010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000055020000ED050000D2020000 + + + 16 + 560000006D0000004E03000006010000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000FD00000058030000 + + + 16 + 560000006D00000086010000D2020000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000FD00000058030000 + + + 16 + 560000006D00000086010000D2020000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 0000000089030000100600000E040000 + + + 16 + 560000006D0000004E03000006010000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000003E020000F0050000EB020000 + + + 16 + 560000006D0000004E03000006010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000008C0300000D060000F5030000 + + + 16 + 560000006D0000004E03000006010000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + 0701000066000000ED050000CF000000 + + + 16 + 560000006D0000004E03000006010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0701000066000000ED050000CF000000 + + + 16 + 560000006D0000004E03000006010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000055020000ED050000D2020000 + + + 16 + 560000006D0000004E03000006010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0701000066000000ED050000CF000000 + + + 16 + 560000006D0000004E03000006010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0701000066000000ED050000CF000000 + + + 16 + 560000006D0000004E03000006010000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0701000066000000ED050000CF000000 + + + 16 + 560000006D0000005601000046010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0701000066000000ED050000CF000000 + + + 16 + 560000006D0000004E03000006010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000FD00000058030000 + + + 16 + 560000006D00000086010000D2020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000008C0300000D060000F5030000 + + + 16 + 560000006D0000004E03000006010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000008C0300000D060000F5030000 + + + 16 + 560000006D00000086010000D2020000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000055020000ED050000D2020000 + + + 16 + 560000006D0000005601000046010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000055020000ED050000D2020000 + + + 16 + 560000006D0000005601000046010000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000008C0300000D060000F5030000 + + + 16 + 560000006D00000086010000D2020000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000008C0300000D060000F5030000 + + + 16 + 560000006D00000086010000D2020000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0701000066000000ED050000CF000000 + + + 16 + 560000006D0000004E03000006010000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F304000066000000ED05000035020000 + + + 16 + 560000006D0000005601000046010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 966 + 0 + 8192 + 0 + + 16 + 0000000000000000D10300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 000000000E0400001006000021040000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 476 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000055020000ED050000D2020000 + + + 16 + 560000006D0000005601000046010000 + + + + 3312 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF04010000E8000000F0050000EC000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000006F020000860000005B0700001F010000040100004F000000F0050000E80000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFEC0400004F000000F00400004E020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000005B060000860000005B07000085020000F00400004F000000F00500004E02000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF000100004F0000000401000071030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000006B010000860000006B020000A8030000000000004F00000000010000710300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF000000003A020000F00500003E02000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000000000006B010000750200005B07000022030000000000003E020000F0050000EB02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFF80200003E020000FC020000EB02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000710300001006000075030000010000000100001004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000006B010000AC0300007B070000450400000000000075030000100600000E0400000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2564 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000075553455F46505596000000000000000200075553455F465055036670750000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 976 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008727474687265616496000000000000000100087274746872656164000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2373 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 2048 + 1152 + + + + + + 1 + 0 + + 100 + 0 + + E:\Github\rt-thread\bsp\maxim\libraries\HAL_Drivers\drv_soft_i2c.c + 20 + 1 + 32 + 1 + + 0 + + + + +
diff --git a/bsp/maxim/MAX32660_EVSYS/project.uvoptx b/bsp/maxim/MAX32660_EVSYS/project.uvoptx index ff7f9de14e..c41a5d3a77 100644 --- a/bsp/maxim/MAX32660_EVSYS/project.uvoptx +++ b/bsp/maxim/MAX32660_EVSYS/project.uvoptx @@ -73,7 +73,7 @@ 0 - 1 + 0 0 1 @@ -117,26 +117,6 @@ BIN\CMSIS_AGDI.dll - - 0 - ARMRTXEVENTFLAGS - -L70 -Z18 -C0 -M0 -T1 - - - 0 - DLGTARM - (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) - - - 0 - ARMDBGFLAGS - - - - 0 - DLGUARM - - 0 CMSIS_AGDI @@ -155,12 +135,12 @@ 0 0 - 1 + 0 0 0 0 0 - 1 + 0 0 0 0 @@ -203,7 +183,7 @@ Applications - 1 + 0 0 0 0 @@ -223,7 +203,7 @@ CPU - 1 + 0 0 0 0 @@ -291,7 +271,7 @@ DeviceDrivers - 1 + 0 0 0 0 @@ -302,6 +282,30 @@ 0 0 0 + ..\..\..\components\drivers\i2c\i2c_core.c + i2c_core.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\i2c\i2c_dev.c + i2c_dev.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 ..\..\..\components\drivers\misc\pin.c pin.c 0 @@ -309,7 +313,7 @@ 3 - 8 + 10 1 0 0 @@ -321,7 +325,7 @@ 3 - 9 + 11 1 0 0 @@ -333,7 +337,7 @@ 3 - 10 + 12 1 0 0 @@ -345,7 +349,7 @@ 3 - 11 + 13 1 0 0 @@ -357,7 +361,7 @@ 3 - 12 + 14 1 0 0 @@ -369,7 +373,7 @@ 3 - 13 + 15 1 0 0 @@ -381,7 +385,7 @@ 3 - 14 + 16 1 0 0 @@ -393,7 +397,7 @@ 3 - 15 + 17 1 0 0 @@ -407,13 +411,13 @@ Drivers - 1 + 0 0 0 0 4 - 16 + 18 1 0 0 @@ -425,7 +429,7 @@ 4 - 17 + 19 2 0 0 @@ -437,7 +441,7 @@ 4 - 18 + 20 1 0 0 @@ -449,7 +453,7 @@ 4 - 19 + 21 1 0 0 @@ -459,17 +463,29 @@ 0 0 + + 4 + 22 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_i2c.c + drv_i2c.c + 0 + 0 + finsh - 1 + 0 0 0 0 5 - 20 + 23 1 0 0 @@ -481,7 +497,7 @@ 5 - 21 + 24 1 0 0 @@ -493,7 +509,7 @@ 5 - 22 + 25 1 0 0 @@ -507,13 +523,13 @@ Kernel - 1 + 0 0 0 0 6 - 23 + 26 1 0 0 @@ -525,7 +541,7 @@ 6 - 24 + 27 1 0 0 @@ -537,7 +553,7 @@ 6 - 25 + 28 1 0 0 @@ -549,7 +565,7 @@ 6 - 26 + 29 1 0 0 @@ -561,7 +577,7 @@ 6 - 27 + 30 1 0 0 @@ -573,7 +589,7 @@ 6 - 28 + 31 1 0 0 @@ -585,7 +601,7 @@ 6 - 29 + 32 1 0 0 @@ -597,7 +613,7 @@ 6 - 30 + 33 1 0 0 @@ -609,7 +625,7 @@ 6 - 31 + 34 1 0 0 @@ -621,7 +637,7 @@ 6 - 32 + 35 1 0 0 @@ -633,7 +649,7 @@ 6 - 33 + 36 1 0 0 @@ -645,7 +661,7 @@ 6 - 34 + 37 1 0 0 @@ -657,7 +673,7 @@ 6 - 35 + 38 1 0 0 @@ -677,7 +693,7 @@ 0 7 - 36 + 39 1 0 0 @@ -689,7 +705,7 @@ 7 - 37 + 40 1 0 0 @@ -701,7 +717,7 @@ 7 - 38 + 41 1 0 0 @@ -713,7 +729,7 @@ 7 - 39 + 42 1 0 0 @@ -725,7 +741,7 @@ 7 - 40 + 43 1 0 0 @@ -737,7 +753,7 @@ 7 - 41 + 44 1 0 0 @@ -749,7 +765,7 @@ 7 - 42 + 45 1 0 0 @@ -761,7 +777,7 @@ 7 - 43 + 46 1 0 0 @@ -773,7 +789,7 @@ 7 - 44 + 47 1 0 0 @@ -785,7 +801,7 @@ 7 - 45 + 48 1 0 0 @@ -797,7 +813,7 @@ 7 - 46 + 49 1 0 0 @@ -809,7 +825,7 @@ 7 - 47 + 50 1 0 0 @@ -821,7 +837,7 @@ 7 - 48 + 51 1 0 0 @@ -833,7 +849,7 @@ 7 - 49 + 52 1 0 0 @@ -843,6 +859,18 @@ 0 0 + + 7 + 53 + 1 + 0 + 0 + 0 + ..\libraries\MAX32660PeriphDriver\Source\i2c.c + i2c.c + 0 + 0 + diff --git a/bsp/maxim/MAX32660_EVSYS/project.uvprojx b/bsp/maxim/MAX32660_EVSYS/project.uvprojx index 7b23a65cbc..b0291ee12d 100644 --- a/bsp/maxim/MAX32660_EVSYS/project.uvprojx +++ b/bsp/maxim/MAX32660_EVSYS/project.uvprojx @@ -185,6 +185,7 @@ 0 2 0 + 0 0 0 8 @@ -338,7 +339,7 @@ TARGET=32660, TARGET_REV=0x4131, __RTTHREAD__ - applications;.;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;..\libraries\HAL_Drivers;..\..\..\components\finsh;.;..\..\..\include;..\libraries\MAX32660PeriphDriver\CMSIS\Device\Maxim\MAX32660\Include;..\libraries\MAX32660PeriphDriver\CMSIS\Core\Include;..\libraries\MAX32660PeriphDriver\Include + applications;.;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;..\libraries\HAL_Drivers;..\..\..\components\finsh;.;..\..\..\include;..\libraries\MAX32660PeriphDriver\CMSIS\Device\Maxim\MAX32660\Include;..\libraries\MAX32660PeriphDriver\CMSIS\Core\Include;..\libraries\MAX32660PeriphDriver\Include @@ -351,7 +352,7 @@ 0 0 0 - 0 + 4 @@ -422,6 +423,16 @@ DeviceDrivers + + i2c_core.c + 1 + ..\..\..\components\drivers\i2c\i2c_core.c + + + i2c_dev.c + 1 + ..\..\..\components\drivers\i2c\i2c_dev.c + pin.c 1 @@ -492,6 +503,11 @@ 1 ..\libraries\HAL_Drivers\drv_uart.c + + drv_i2c.c + 1 + ..\libraries\HAL_Drivers\drv_i2c.c + @@ -657,6 +673,11 @@ 1 ..\libraries\MAX32660PeriphDriver\Source\uart.c + + i2c.c + 1 + ..\libraries\MAX32660PeriphDriver\Source\i2c.c + @@ -669,4 +690,19 @@ + + + + <Project Info> + + + + + + 0 + 1 + + + + diff --git a/bsp/maxim/MAX32660_EVSYS/rtconfig.h b/bsp/maxim/MAX32660_EVSYS/rtconfig.h index a15112c1b2..a8b37a5569 100644 --- a/bsp/maxim/MAX32660_EVSYS/rtconfig.h +++ b/bsp/maxim/MAX32660_EVSYS/rtconfig.h @@ -10,7 +10,7 @@ #define RT_ALIGN_SIZE 4 #define RT_THREAD_PRIORITY_32 #define RT_THREAD_PRIORITY_MAX 32 -#define RT_TICK_PER_SECOND 100 +#define RT_TICK_PER_SECOND 1000 #define RT_USING_OVERFLOW_CHECK #define RT_USING_HOOK #define RT_USING_IDLE_HOOK @@ -79,6 +79,7 @@ #define RT_USING_SERIAL #define RT_SERIAL_USING_DMA #define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_I2C #define RT_USING_PIN /* Using USB */ diff --git a/bsp/maxim/libraries/HAL_Drivers/SConscript b/bsp/maxim/libraries/HAL_Drivers/SConscript index f6262f54da..ae053a38d5 100644 --- a/bsp/maxim/libraries/HAL_Drivers/SConscript +++ b/bsp/maxim/libraries/HAL_Drivers/SConscript @@ -20,6 +20,9 @@ if GetDepend(['RT_USING_PWM']): if GetDepend(['RT_USING_SPI']): src += ['drv_spi.c'] +if GetDepend(['RT_USING_I2C']): + src += ['drv_i2c.c'] + if GetDepend(['RT_USING_I2C', 'RT_USING_I2C_BITOPS']): src += ['drv_soft_i2c.c'] diff --git a/bsp/maxim/libraries/HAL_Drivers/drv_i2c.c b/bsp/maxim/libraries/HAL_Drivers/drv_i2c.c new file mode 100644 index 0000000000..3d143d93aa --- /dev/null +++ b/bsp/maxim/libraries/HAL_Drivers/drv_i2c.c @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2006-2020, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-02-26 Jackistang first version + * + */ + +#include "drv_i2c.h" +#include "i2c.h" +#include +#include +#include "board.h" + +#define RT_USING_I2C +#define BSP_USING_I2C0 + +#ifdef RT_USING_I2C + +#if !defined(BSP_USING_I2C0) && !defined(BSP_USING_I2C1) + #error "Please define at least one BSP_USING_I2Cx" + /* this driver can be disabled at menuconfig -> Hardware Drivers Config -> On-chip Peripheral Drivers -> Enable I2C */ +#endif + +#define DBG_LEVEL DBG_LOG +#include +#define LOG_TAG "drv.i2c" + +/* mxc config class */ +struct mxc_i2c_config +{ + const char *name; + mxc_i2c_regs_t *i2c_periph; + i2c_speed_t speed; + IRQn_Type irq_type; +}; + +struct mxc_i2c +{ + struct rt_i2c_bus_device bus; + struct mxc_i2c_config *config; +}; + +static struct mxc_i2c_config i2c_config[] = +{ +#ifdef BSP_USING_I2C0 + { + .name = "i2c0", + .i2c_periph = MXC_I2C_GET_I2C(0), + .irq_type = MXC_I2C_GET_IRQ(0), + .speed = I2C_STD_MODE, + /*I2C_STD_MODE: 100KHz, I2C_FAST_MODE: 400KHz, I2C_FASTPLUS_MODE: 1MHz, I2C_HS_MODE: 3.4MHz */ + }, +#endif +#ifdef BSP_USING_I2C1 + { + .name = "i2c1", + .i2c_periph = MXC_I2C_GET_I2C(1), + .irq_type = MXC_I2C_GET_IRQ(1), + .speed = I2C_STD_MODE, + /*I2C_STD_MODE: 100KHz, I2C_FAST_MODE: 400KHz, I2C_FASTPLUS_MODE: 1MHz, I2C_HS_MODE: 3.4MHz */ + }, +#endif +}; + +static struct mxc_i2c i2c_obj[sizeof(i2c_config) / sizeof(i2c_config[0])] = {0}; + + +static rt_size_t mxc_i2c_mst_xfer(struct rt_i2c_bus_device *bus, + struct rt_i2c_msg msgs[], + rt_uint32_t num) +{ + rt_uint32_t i, ret; + rt_uint16_t addr; + int error; + int restart = 0; + struct rt_i2c_msg *msg; + struct mxc_i2c *obj = (struct mxc_i2c *)bus; + + for (i = 0; i < num; i++) + { + msg = &msgs[i]; + + if (msg->flags & RT_I2C_ADDR_10BIT || msg->flags & RT_I2C_NO_START || msg->flags & RT_I2C_IGNORE_NACK || msg->flags & RT_I2C_NO_READ_ACK) + { + LOG_E("Not support RT_I2C_ADDR_10BIT or RT_I2C_NO_START or RT_I2C_IGNORE_NACK or RT_I2C_NO_READ_ACK"); + return 0; + } + + if (msg->flags & RT_I2C_NO_STOP) + { + restart = 1; + } + + if (msg->flags & RT_I2C_RD) + { + addr = msg->addr << 1; + if ((error = I2C_MasterRead(obj->config->i2c_periph, (uint8_t)addr, msg->buf, msg->len, restart)) != msg->len) + { + LOG_E("Error writing %d", error); + return 0; + } + } + else /* RT_I2C_WR */ + { + addr = msg->addr << 1; + if ((error = I2C_MasterWrite(obj->config->i2c_periph, (uint8_t)addr, msg->buf, msg->len, restart)) != msg->len) + { + LOG_E("Error writing %d", error); + return 0; + } + } + } + ret = i; + + return ret; +} + +static const struct rt_i2c_bus_device_ops mxc_i2c_ops = +{ + mxc_i2c_mst_xfer, + RT_NULL, + RT_NULL, +}; + +int rt_hw_i2c_init(void) +{ + rt_size_t obj_num; + int index; + rt_err_t result = 0; + +#ifdef BSP_USING_I2C0 + NVIC_EnableIRQ(I2C0_IRQn); +#endif +#ifdef BSP_USING_I2C1 + NVIC_EnableIRQ(I2C1_IRQn); +#endif + + obj_num = sizeof(i2c_obj) / sizeof(struct mxc_i2c); + for (index = 0; index < obj_num; index++) + { + /* init i2c object */ + i2c_obj[index].config = &i2c_config[index]; + i2c_obj[index].bus.ops = &mxc_i2c_ops; + + /* init i2c device */ + I2C_Shutdown(i2c_config[index].i2c_periph); + I2C_Init(i2c_config[index].i2c_periph, i2c_config[index].speed, RT_NULL); + + /* register i2c device */ + result = rt_i2c_bus_device_register(&i2c_obj[index].bus, + i2c_obj[index].config->name + ); + RT_ASSERT(result == RT_EOK); + } + + return 0; +} +INIT_DEVICE_EXPORT(rt_hw_i2c_init); + +#ifdef BSP_USING_I2C0 +void I2C0_IRQHandler(void) +{ + rt_interrupt_enter(); + I2C_Handler(MXC_I2C0); + rt_interrupt_leave(); +} +#endif + +#ifdef BSP_USING_I2C1 +void I2C1_IRQHandler(void) +{ + rt_interrupt_enter(); + I2C_Handler(MXC_I2C1); + rt_interrupt_leave(); +} +#endif + +#endif /* RT_USING_I2C */ diff --git a/bsp/maxim/libraries/HAL_Drivers/drv_i2c.h b/bsp/maxim/libraries/HAL_Drivers/drv_i2c.h new file mode 100644 index 0000000000..f1be28755c --- /dev/null +++ b/bsp/maxim/libraries/HAL_Drivers/drv_i2c.h @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2006-2020, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-02-26 Jackistang first version + * + */ + +#ifndef __DRV_I2C_H__ +#define __DRV_I2C_H__ + + +#endif /* __DRV_I2C_H__ */ From c0c353e7c3d84e3bd8758bff6c1595336327b116 Mon Sep 17 00:00:00 2001 From: jackis Date: Fri, 26 Feb 2021 17:38:53 +0800 Subject: [PATCH 05/17] [bsp/max32660] close i2c --- bsp/maxim/MAX32660_EVSYS/.config | 4 +--- bsp/maxim/MAX32660_EVSYS/rtconfig.h | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/bsp/maxim/MAX32660_EVSYS/.config b/bsp/maxim/MAX32660_EVSYS/.config index 94edea6dbf..c2b026f742 100644 --- a/bsp/maxim/MAX32660_EVSYS/.config +++ b/bsp/maxim/MAX32660_EVSYS/.config @@ -120,9 +120,7 @@ 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=y -# CONFIG_RT_I2C_DEBUG is not set -# CONFIG_RT_USING_I2C_BITOPS 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 diff --git a/bsp/maxim/MAX32660_EVSYS/rtconfig.h b/bsp/maxim/MAX32660_EVSYS/rtconfig.h index a8b37a5569..a2f3204096 100644 --- a/bsp/maxim/MAX32660_EVSYS/rtconfig.h +++ b/bsp/maxim/MAX32660_EVSYS/rtconfig.h @@ -79,7 +79,6 @@ #define RT_USING_SERIAL #define RT_SERIAL_USING_DMA #define RT_SERIAL_RB_BUFSZ 64 -#define RT_USING_I2C #define RT_USING_PIN /* Using USB */ From 2b9d2653641dbaad0661eceae1e6451d13bdd6b0 Mon Sep 17 00:00:00 2001 From: jackis Date: Fri, 26 Feb 2021 17:41:56 +0800 Subject: [PATCH 06/17] [bsp/max32660] modify readme.md --- bsp/maxim/MAX32660_EVSYS/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bsp/maxim/MAX32660_EVSYS/README.md b/bsp/maxim/MAX32660_EVSYS/README.md index 90fea40042..5caa5d9836 100644 --- a/bsp/maxim/MAX32660_EVSYS/README.md +++ b/bsp/maxim/MAX32660_EVSYS/README.md @@ -78,7 +78,7 @@ MAX32660-EVSYS开发板常用 **板载资源** 如下: | SPI | 支持 | SPI0, SPI1 | | RTC | | | | I2S | | | -| I2C | | | +| I2C | 支持 | I2C0, I2C1 | | TIMER | | | | Watchdog | | | From bc133b83a7231d643be5e30e590612db7d9c031a Mon Sep 17 00:00:00 2001 From: supperthomas <78900636@qq.com> Date: Fri, 26 Feb 2021 23:24:30 +0800 Subject: [PATCH 07/17] [bsp/max32660] add the gcc and vscode environment --- .../.cortex-debug.peripherals.state.json | 1 + .../.cortex-debug.registers.state.json | 1 + bsp/maxim/MAX32660_EVSYS/.vscode/launch.json | 24 + bsp/maxim/MAX32660_EVSYS/.vscode/tasks.json | 39 + bsp/maxim/MAX32660_EVSYS/README.md | 32 +- bsp/maxim/MAX32660_EVSYS/board/board.c | 2 +- .../board/linker_scripts/link.lds | 27 + bsp/maxim/MAX32660_EVSYS/max32660.svd | 10650 ++++++++++++++++ bsp/maxim/MAX32660_EVSYS/rtconfig.py | 5 +- .../MAX32660/Source/GCC/startup_max32660.S | 2 +- 10 files changed, 10777 insertions(+), 6 deletions(-) create mode 100644 bsp/maxim/MAX32660_EVSYS/.vscode/.cortex-debug.peripherals.state.json create mode 100644 bsp/maxim/MAX32660_EVSYS/.vscode/.cortex-debug.registers.state.json create mode 100644 bsp/maxim/MAX32660_EVSYS/.vscode/launch.json create mode 100644 bsp/maxim/MAX32660_EVSYS/.vscode/tasks.json create mode 100644 bsp/maxim/MAX32660_EVSYS/max32660.svd diff --git a/bsp/maxim/MAX32660_EVSYS/.vscode/.cortex-debug.peripherals.state.json b/bsp/maxim/MAX32660_EVSYS/.vscode/.cortex-debug.peripherals.state.json new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/bsp/maxim/MAX32660_EVSYS/.vscode/.cortex-debug.peripherals.state.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/bsp/maxim/MAX32660_EVSYS/.vscode/.cortex-debug.registers.state.json b/bsp/maxim/MAX32660_EVSYS/.vscode/.cortex-debug.registers.state.json new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/bsp/maxim/MAX32660_EVSYS/.vscode/.cortex-debug.registers.state.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/bsp/maxim/MAX32660_EVSYS/.vscode/launch.json b/bsp/maxim/MAX32660_EVSYS/.vscode/launch.json new file mode 100644 index 0000000000..138d6ae360 --- /dev/null +++ b/bsp/maxim/MAX32660_EVSYS/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + // 使用 IntelliSense 了解相关属性。 + // 悬停以查看现有属性的描述。 + // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "cwd": "${workspaceRoot}", + "executable": "rt-thread.elf", + "name": "Debug MAX", + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "interface": "swd", + "svdFile": "max32660.svd", + "configFiles": [ + "interface/cmsis-dap.cfg", + "target/max32660.cfg" + ], + "runToMain": true, + //"preLaunchTask": "build" + }, + ] +} \ No newline at end of file diff --git a/bsp/maxim/MAX32660_EVSYS/.vscode/tasks.json b/bsp/maxim/MAX32660_EVSYS/.vscode/tasks.json new file mode 100644 index 0000000000..278b38cf33 --- /dev/null +++ b/bsp/maxim/MAX32660_EVSYS/.vscode/tasks.json @@ -0,0 +1,39 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "scons", + "problemMatcher": [ + "$gcc" + ], + "presentation": { + "echo": true, + "reveal": "always", + "focus": true, + "panel": "shared", + "showReuseMessage": true + }, + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "label": "clean", + "type": "shell", + "command": "scons -c", + "problemMatcher": [], + "presentation": { + "echo": true, + "reveal": "always", + "focus": true, + "panel": "shared", + "showReuseMessage": true + } + }, + ] +} \ No newline at end of file diff --git a/bsp/maxim/MAX32660_EVSYS/README.md b/bsp/maxim/MAX32660_EVSYS/README.md index 90fea40042..35857734c9 100644 --- a/bsp/maxim/MAX32660_EVSYS/README.md +++ b/bsp/maxim/MAX32660_EVSYS/README.md @@ -92,11 +92,39 @@ MAX32660-EVSYS开发板常用 **板载资源** 如下: 2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 -4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 +4. 输入`scons --target=mdk5/vsc命令重新生成工程。 ## 注意事项 -目前仅支持keil5环境 +目前支持keil和GCC环境 + + + +## FAQ + +### GCC环境如何调试使用 + +第一步,需要配置arm-none-eabi-gcc路径到系統环境变量中去或者在rtconfig.py中EXEC_PATH 修改路径 + +第二步,添加openocd的路径,如果你安装了eclipse,添加以下路径到系统环境变量中 + +`C:\Maxim\Toolchain\bin` + +完成这两部就可以用vscode打开bsp目录了。 + +快捷键ctrl+shift+b可以执行scons编译命令 + +快捷键F5可以进入调试命令 + +如果需要调试之前执行build命令,在luanch.json里面打开注释 + +``` + //"preLaunchTask": "build" +``` + + + + ## 联系人信息 diff --git a/bsp/maxim/MAX32660_EVSYS/board/board.c b/bsp/maxim/MAX32660_EVSYS/board/board.c index fc9ff80ad2..5bc5a5f679 100644 --- a/bsp/maxim/MAX32660_EVSYS/board/board.c +++ b/bsp/maxim/MAX32660_EVSYS/board/board.c @@ -40,7 +40,7 @@ void rt_hw_systick_init(void) if (error != E_NO_ERROR) { - printf("ERROR: Ticks is not valid"); + rt_kprintf("ERROR: Ticks is not valid"); } } diff --git a/bsp/maxim/MAX32660_EVSYS/board/linker_scripts/link.lds b/bsp/maxim/MAX32660_EVSYS/board/linker_scripts/link.lds index 8931956648..4736a8d23f 100644 --- a/bsp/maxim/MAX32660_EVSYS/board/linker_scripts/link.lds +++ b/bsp/maxim/MAX32660_EVSYS/board/linker_scripts/link.lds @@ -19,6 +19,33 @@ SECTIONS { /* C++ Exception handling */ KEEP(*(.eh_frame*)) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + + PROVIDE(__ctors_start__ = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE(__ctors_end__ = .); + + . = ALIGN(4); + _etext = .; } > FLASH diff --git a/bsp/maxim/MAX32660_EVSYS/max32660.svd b/bsp/maxim/MAX32660_EVSYS/max32660.svd new file mode 100644 index 0000000000..564a9c89ca --- /dev/null +++ b/bsp/maxim/MAX32660_EVSYS/max32660.svd @@ -0,0 +1,10650 @@ + + + Maxim Integrated + Maxim + max32660 + ARMCM4 + 1.0 + MAX32660 32-bit ARM Cortex-M4 microcontroller with 96KB of system RAM and 256KB of flash memory. + + CM4 + r2p1 + little + true + true + 3 + false + + 8 + 32 + 0x20 + read-write + 0x00000000 + 0xFFFFFFFF + + + BBFC + Battery-Backed Function Control. + 0x40005800 + + 0x00 + 0x400 + registers + + + + BBFCR0 + Function Control Register 0. + 0x00 + read-write + + + CKPDRV + Hyperbus CK Pad Driver Control. + 0 + 4 + + + CKNPDRV + Hyperbus CKN Pad Driver Control. + 4 + 4 + + + RDSDLLEN + Hyperbus RDS DLL Power Up Control. + 8 + 1 + + + dis + Disabled. + 0 + + + en + Enabled. + 1 + + + + + + + + + + BBSIR + Battery-Backed Registers. + 0x40005400 + + 0x00 + 0x400 + registers + + + + rsv0 + RFU + 0x00 + + + BB_SIR2 + System Init. Configuration Register 2. + 0x08 + read-only + + + BB_SIR3 + System Init. Configuration Register 3. + 0x0C + read-only + + + + + + DMA + DMA Controller Fully programmable, chaining capable DMA channels. + 0x40028000 + 32 + + 0x00 + 0x1000 + registers + + + DMA0 + 28 + + + DMA1 + 29 + + + DMA2 + 30 + + + DMA3 + 31 + + + DMA4 + 68 + + + DMA5 + 69 + + + DMA6 + 70 + + + DMA7 + 71 + + + DMA8 + 72 + + + DMA9 + 73 + + + DMA10 + 74 + + + DMA11 + 75 + + + DMA12 + 76 + + + DMA13 + 77 + + + DMA14 + 78 + + + DMA15 + 79 + + + + CN + DMA Control Register. + 0x000 + + + CH0_IEN + Channel 0 Interrupt Enable. + 0 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + CH1_IEN + Channel 1 Interrupt Enable. + 1 + 1 + + + CH2_IEN + Channel 2 Interrupt Enable. + 2 + 1 + + + CH3_IEN + Channel 3 Interrupt Enable. + 3 + 1 + + + + + INTR + DMA Interrupt Register. + 0x004 + read-only + + + CH0_IPEND + Channel Interrupt. To clear an interrupt, all active interrupt bits of the DMA_ST must be cleared. The interrupt bits are set only if their corresponding interrupt enable bits are set in DMA_CN. + 0 + 1 + + ch_ipend_enum + + inactive + No interrupt is pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + CH1_IPEND + 1 + 1 + + + CH2_IPEND + 2 + 1 + + + CH3_IPEND + 3 + 1 + + + + + 4 + 4 + CH[%s] + DMA Channel registers. + dma_ch + 0x100 + read-write + + CFG + DMA Channel Configuration Register. + 0x100 + + + CHEN + Channel Enable. This bit is automatically cleared when DMA_ST.CH_ST changes from 1 to 0. + 0 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + RLDEN + Reload Enable. Setting this bit to 1 enables DMA_SRC, DMA_DST and DMA_CNT to be reloaded with their corresponding reload registers upon count-to-zero. This bit is also writeable in the Count Reload Register. Refer to the description on Buffer Chaining for use of this bit. If buffer chaining is not used this bit must be written with a 0. This bit should be set after the reload registers have been programmed. + 1 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + PRI + DMA Priority. + 2 + 2 + + + high + Highest Priority. + 0 + + + medHigh + Medium High Priority. + 1 + + + medLow + Medium Low Priority. + 2 + + + low + Lowest Priority. + 3 + + + + + REQSEL + Request Select. Select DMA request line for this channel. If memory-to-memory is selected, the channel operates as if the request is always active. + 4 + 6 + + + MEMTOMEM + Memory To Memory + 0x00 + + + SPI0RX + SPI0 RX + 0x01 + + + SPI1RX + SPI1 RX + 0x02 + + + UART0RX + UART0 RX + 0x04 + + + UART1RX + UART1 RX + 0x05 + + + I2C0RX + I2C0 RX + 0x07 + + + I2C1RX + I2C1 RX + 0x08 + + + SPI0TX + SPI0 TX + 0x21 + + + SPI1TX + SPI1 TX + 0x22 + + + UART0TX + UART0 TX + 0x24 + + + UART1TX + UART1 TX + 0x25 + + + I2C0TX + I2C0 TX + 0x27 + + + I2C1TX + I2C1 TX + 0x28 + + + + + REQWAIT + Request Wait Enable. When enabled, delay timer start until DMA request transitions from active to inactive. + 10 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + TOSEL + Time-Out Select. Selects the number of prescale clocks seen by the channel timer before a time-out conditions is generated for this channel. Important note: since the prescaler runs independent of the individual channel timers, the actual number of Pre-Scale clock edges seen has a margin of error equal to a single Pre-Scale clock. + 11 + 3 + + + to4 + Timeout of 3 to 4 prescale clocks. + 0 + + + to8 + Timeout of 7 to 8 prescale clocks. + 1 + + + to16 + Timeout of 15 to 16 prescale clocks. + 2 + + + to32 + Timeout of 31 to 32 prescale clocks. + 3 + + + to64 + Timeout of 63 to 64 prescale clocks. + 4 + + + to128 + Timeout of 127 to 128 prescale clocks. + 5 + + + to256 + Timeout of 255 to 256 prescale clocks. + 6 + + + to512 + Timeout of 511 to 512 prescale clocks. + 7 + + + + + PSSEL + Pre-Scale Select. Selects the Pre-Scale divider for timer clock input. + 14 + 2 + + + dis + Disable timer. + 0 + + + div256 + hclk / 256. + 1 + + + div64k + hclk / 64k. + 2 + + + div16M + hclk / 16M. + 3 + + + + + SRCWD + Source Width. In most cases, this will be the data width of each AHB transactions. However, the width will be reduced in the cases where DMA_CNT indicates a smaller value. + 16 + 2 + + + byte + Byte. + 0 + + + halfWord + Halfword. + 1 + + + word + Word. + 2 + + + + + SRCINC + Source Increment Enable. This bit enables DMA_SRC increment upon every AHB transaction. This bit is forced to 0 for DMA receive from peripherals. + 18 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + DSTWD + Destination Width. Indicates the width of the each AHB transactions to the destination peripheral or memory. (The actual width may be less than this if there are insufficient bytes in the DMA FIFO for the full width). + 20 + 2 + + + byte + Byte. + 0 + + + halfWord + Halfword. + 1 + + + word + Word. + 2 + + + + + DSTINC + Destination Increment Enable. This bit enables DMA_DST increment upon every AHB transaction. This bit is forced to 0 for DMA transmit to peripherals. + 22 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + BRST + Burst Size. The number of bytes to be transferred into and out of the DMA FIFO in a single burst. Burst size equals 1 + value stored in this field. + 24 + 5 + + + CHDIEN + Channel Disable Interrupt Enable. When enabled, the IPEND will be set to 1 whenever CH_ST changes from 1 to 0. + 30 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + CTZIEN + Count-to-zero Interrupts Enable. When enabled, the IPEND will be set to 1 whenever a count-to-zero event occurs. + 31 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + + + ST + DMA Channel Status Register. + 0x104 + + + CH_ST + Channel Status. This bit is used to indicate to the programmer when it is safe to change the configuration, address, and count registers for the channel. Whenever this bit is cleared by hardware, the DMA_CFG.CHEN bit is also cleared (if not cleared already). + 0 + 1 + read-only + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + IPEND + Channel Interrupt. + 1 + 1 + read-only + + + inactive + No interrupt is pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + CTZ_ST + Count-to-Zero (CTZ) Status + 2 + 1 + oneToClear + + ctz_st_enum_rd + read + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + ctz_st_enum_wr + write + + Clear + Clears the interrupt flag + 1 + + + + + RLD_ST + Reload Status. + 3 + 1 + oneToClear + + read + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + write + + Clear + Clears the interrupt flag + 1 + + + + + BUS_ERR + Bus Error. Indicates that an AHB abort was received and the channel has been disabled. + 4 + 1 + oneToClear + + read + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + write + + Clear + Clears the interrupt flag + 1 + + + + + TO_ST + Time-Out Status. + 6 + 1 + oneToClear + + read + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + write + + Clear + Clears the interrupt flag + 1 + + + + + + + SRC + Source Device Address. If SRCINC=1, the counter bits are incremented by 1,2, or 4, depending on the data width of each AHB cycle. For peripheral transfers, some or all of the actual address bits are fixed. If SRCINC=0, this register remains constant. In the case where a count-to-zero condition occurs while RLDEN=1, the register is reloaded with the contents of DMA_SRC_RLD. + 0x108 + + + ADDR + 0 + 32 + + + + + DST + Destination Device Address. For peripheral transfers, some or all of the actual address bits are fixed. If DSTINC=1, this register is incremented on every AHB write out of the DMA FIFO. They are incremented by 1, 2, or 4, depending on the data width of each AHB cycle. In the case where a count-to-zero condition occurs while RLDEN=1, the register is reloaded with DMA_DST_RLD. + 0x10C + + + ADDR + 0 + 32 + + + + + CNT + DMA Counter. The user loads this register with the number of bytes to transfer. This counter decreases on every AHB cycle into the DMA FIFO. The decrement will be 1, 2, or 4 depending on the data width of each AHB cycle. When the counter reaches 0, a count-to-zero condition is triggered. + 0x110 + + + CNT + DMA Counter. + 0 + 24 + + + + + SRC_RLD + Source Address Reload Value. The value of this register is loaded into DMA0_SRC upon a count-to-zero condition. + 0x114 + + + SRC_RLD + Source Address Reload Value. + 0 + 31 + + + + + DST_RLD + Destination Address Reload Value. The value of this register is loaded into DMA0_DST upon a count-to-zero condition. + 0x118 + + + DST_RLD + Destination Address Reload Value. + 0 + 31 + + + + + CNT_RLD + DMA Channel Count Reload Register. + 0x11C + + + CNT_RLD + Count Reload Value. The value of this register is loaded into DMA0_CNT upon a count-to-zero condition. + 0 + 24 + + + RLDEN + Reload Enable. This bit should be set after the address reload registers have been programmed. This bit is automatically cleared to 0 when reload occurs. + 31 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + + + + + + + FLC + Flash Memory Control. + FLSH_ + 0x40029000 + + 0x00 + 0x1000 + registers + + + Flash_Controller + Flash Controller interrupt. + 23 + + + + ADDR + Flash Write Address. + 0x00 + + + ADDR + Address for next operation. + 0 + 32 + + + + + CLKDIV + Flash Clock Divide. The clock (PLL0) is divided by this value to generate a 1 MHz clock for Flash controller. + 0x04 + 0x00000064 + + + CLKDIV + Flash Clock Divide. The clock is divided by this value to generate a 1MHz clock for flash controller. + 0 + 8 + + + + + CN + Flash Control Register. + 0x08 + + + WR + Write. This bit is automatically cleared after the operation. + 0 + 1 + + + complete + No operation/complete. + 0 + + + start + Start operation. + 1 + + + + + ME + Mass Erase. This bit is automatically cleared after the operation. + 1 + 1 + + + PGE + Page Erase. This bit is automatically cleared after the operation. + 2 + 1 + + + WDTH + Data Width. This bits selects write data width. + 4 + 1 + + + size128 + 128-bit. + 0 + + + size32 + 32-bit. + 1 + + + + + ERASE_CODE + Erase Code. The ERASE_CODE must be set up property before erase operation can be initiated. These bits are automatically cleared after the operation is complete. + 8 + 8 + + + nop + No operation. + 0 + + + erasePage + Enable Page Erase. + 0x55 + + + eraseAll + Enable Mass Erase. The debug port must be enabled. + 0xAA + + + + + PEND + Flash Pending. When Flash operation is in progress (busy), Flash reads and writes will fail. When PEND is set, write to all Flash registers, with exception of the Flash interrupt register, are ignored. + 24 + 1 + read-only + + + idle + Idle. + 0 + + + busy + Busy. + 1 + + + + + LVE + Low Voltage Read Enable + 25 + 1 + read-only + + lve_read + read + + dis + Disabled + 0 + + + en + Enabled + 1 + + + + + BRST + Burst Mode Enable. + 27 + 1 + + + disable + Disable + 0 + + + enable + Enable + 1 + + + + + UNLOCK + Flash Unlock. The correct unlock code must be written to these four bits before any Flash write or erase operation is allowed. + 28 + 4 + + + unlocked + Flash Unlocked + 2 + + + locked + Flash Locked + 3 + + + + + + + INTR + Flash Interrupt Register. + 0x024 + + + DONE + Flash Done Interrupt. This bit is set to 1 upon Flash write or erase completion. + 0 + 1 + + + inactive + No interrupt is pending + 0 + + + pending + An interrupt is pending + 1 + + + + + AF + Flash Access Fail. This bit is set when an attempt is made to write the flash while the flash is busy or the flash is locked. This bit can only be set to 1 by hardware. + 1 + 1 + + + noError + No Failure. + 0 + + + error + Failure occurs. + 1 + + + + + DONEIE + Flash Done Interrupt Enable. + 8 + 1 + + + disable + Disable. + 0 + + + enable + Enable. + 1 + + + + + AFIE + 9 + 1 + + + + + 4 + 4 + DATA[%s] + Flash Write Data. + 0x30 + + + DATA + Data next operation. + 0 + 32 + + + + + ACNTL + Access Control Register. Writing the ACNTL register with the following values in the order shown, allows read and write access to the system and user Information block: pflc-acntl = 0x3a7f5ca3; pflc-acntl = 0xa1e34f20; pflc-acntl = 0x9608b2c1. When unlocked, a write of any word will disable access to system and user information block. Readback of this register is always zero. + 0x40 + write-only + + + ACNTL + Access control. + 0 + 32 + + + + + + + + GCR + Global Control Registers. + 0x40000000 + + 0 + 0x400 + registers + + + + SCON + System Control. + 0x00 + 0xFFFFFFFE + + + SBUSARB + System bus abritration scheme. These bits are used to select between Fixed-burst abritration and Round-Robin scheme. The Round-Robin scheme is selected by default. These bits are reset by the system reset. + 1 + 2 + + + fix + Fixed Burst abritration. + 0 + + + round + Round-robin scheme. + 1 + + + + + FLASH_PAGE_FLIP + Flips the Flash bottom and top halves. (Depending on the total flash size, each half is either 256K or 512K). Initiating a flash page flip will cause a flush of both the data buffer on the DCODE bus and the internal instruction buffer. + 4 + 1 + + + normal + Physical layout matches logical layout. + 0 + + + swapped + Bottom half mapped to logical top half and vice versa. + 1 + + + + + FPU_DIS + Floating Point Unit Disable + 5 + 1 + + + enable + enable Floating point unit + 0 + + + disable + disable floating point unit + 1 + + + + + CCACHE_FLUSH + Code Cache Flush. This bit is used to flush the code caches and the instruction buffer of the Cortex-M4. + 6 + 1 + + + normal + Normal Code Cache Operation + 0 + + + flush + Code Caches and CPU instruction buffer are flushed + 1 + + + + + SWD_DIS + Serial Wire Debug Disable + 14 + 1 + + + enable + Enable JTAG SWD + 0 + + + disable + Disable JTAG SWD + 1 + + + + + + + RSTR0 + Reset. + 0x04 + + + DMA + DMA Reset. + 0 + 1 + + dma_write + write + + RFU + Reserved. Do not use. + 0 + + + reset + Starts reset operation. + 1 + + + + dma_read + read + + Reset_Done + Reset Complete + 0 + + + Busy + Reset Busy + 1 + + + + + WDT + Watchdog Timer Reset. + 1 + 1 + + wdt_write + write + + RFU + Reserved. Do not use. + 0 + + + reset + Starts reset operation. + 1 + + + + wdt_read + read + + Reset_Done + Reset Complete + 0 + + + Busy + Reset Busy + 1 + + + + + GPIO0 + GPIO0 Reset. Setting this bit to 1 resets GPIO0 pins to their default states. + 2 + 1 + + gpio0_write + write + + RFU + Reserved. Do not use. + 0 + + + reset + Starts reset operation. + 1 + + + + gpio0_read + read + + Reset_Done + Reset Complete + 0 + + + Busy + Reset Busy + 1 + + + + + TIMER0 + Timer0 Reset. Setting this bit to 1 resets Timer 0 blocks. + 5 + 1 + + timer0_write + write + + RFU + Reserved. Do not use. + 0 + + + reset + Starts reset operation. + 1 + + + + timer0_read + read + + Reset_Done + Reset Complete + 0 + + + Busy + Reset Busy + 1 + + + + + TIMER1 + Timer1 Reset. Setting this bit to 1 resets Timer 1 blocks. + 6 + 1 + + timer1_write + write + + RFU + Reserved. Do not use. + 0 + + + reset + Starts reset operation. + 1 + + + + timer1_read + read + + Reset_Done + Reset Complete + 0 + + + Busy + Reset Busy + 1 + + + + + TIMER2 + Timer2 Reset. Setting this bit to 1 resets Timer 2 blocks. + 7 + 1 + + timer2_write + write + + RFU + Reserved. Do not use. + 0 + + + reset + Starts reset operation. + 1 + + + + timer2_read + read + + Reset_Done + Reset Complete + 0 + + + Busy + Reset Busy + 1 + + + + + UART0 + UART0 Reset. Setting this bit to 1 resets all UART 0 blocks. + 11 + 1 + + uart0_write + write + + RFU + Reserved. Do not use. + 0 + + + reset + Starts reset operation. + 1 + + + + uart0_read + read + + Reset_Done + Reset Complete + 0 + + + Busy + Reset Busy + 1 + + + + + UART1 + UART1 Reset. Setting this bit to 1 resets all UART 1 blocks. + 12 + 1 + + uart1_write + write + + RFU + Reserved. Do not use. + 0 + + + reset + Starts reset operation. + 1 + + + + uart1_read + read + + Reset_Done + Reset Complete + 0 + + + Busy + Reset Busy + 1 + + + + + SPI0 + SPI0 Reset. Setting this bit to 1 resets all SPI 0 blocks. + 13 + 1 + + spi0_write + write + + RFU + Reserved. Do not use. + 0 + + + reset + Starts reset operation. + 1 + + + + spi0_read + read + + Reset_Done + Reset Complete + 0 + + + Busy + Reset Busy + 1 + + + + + SPI1 + SPI1 Reset. Setting this bit to 1 resets all SPI 1 blocks. + 14 + 1 + + spi1_write + write + + RFU + Reserved. Do not use. + 0 + + + reset + Starts reset operation. + 1 + + + + xpi1_read + read + + Reset_Done + Reset Complete + 0 + + + Busy + Reset Busy + 1 + + + + + I2C0 + I2C0 Reset. + 16 + 1 + + i2c0_write + write + + RFU + Reserved. Do not use. + 0 + + + reset + Starts reset operation. + 1 + + + + i2c0_read + read + + Reset_Done + Reset Complete + 0 + + + Busy + Reset Busy + 1 + + + + + RTC + Real Time Clock Reset. + 17 + 1 + + rtc_write + write + + RFU + Reserved. Do not use. + 0 + + + reset + Starts reset operation. + 1 + + + + rtc_read + read + + Reset_Done + Reset Complete + 0 + + + Busy + Reset Busy + 1 + + + + + SRST + Soft Reset.Write 1 to perform a Soft Reset. A soft reset performs a Peripheral Reset and also resets the GPIO peripheral but does not reset the CPU or Watchdog Timer. + 29 + 1 + + srst_write + write + + RFU + Reserved. Do not use. + 0 + + + reset + Starts reset operation. + 1 + + + + srst_read + read + + Reset_Done + Reset Complete + 0 + + + Busy + Reset Busy + 1 + + + + + PRST + Peripheral Reset. Setting this bit to 1 resets all peripherals. The CPU core, the watchdog timer, and all GPIO pins are unaffected by this reset. + 30 + 1 + + prst_write + write + + RFU + Reserved. Do not use. + 0 + + + reset + Starts reset operation. + 1 + + + + prst_read + read + + Reset_Done + Reset Complete + 0 + + + Busy + Reset Busy + 1 + + + + + SYSTEM + System Reset. Setting this bit to 1 resets the CPU core and all peripherals, including the watchdog timer. + 31 + 1 + + system_write + write + + RFU + Reserved. Do not use. + 0 + + + reset + Starts reset operation. + 1 + + + + system_read + read + + Reset_Done + Reset Complete + 0 + + + Busy + Reset Busy + 1 + + + + + + + CLKCN + Clock Control. + 0x08 + 0x00000008 + + + PSC + Prescaler Select. This 3 bit field sets the system operating frequency by controlling the prescaler that divides the output of the PLL0. + 6 + 3 + + + div1 + Divide by 1. + 0 + + + div2 + Divide by 2. + 1 + + + div4 + Divide by 4. + 2 + + + div8 + Divide by 8. + 3 + + + div16 + Divide by 16. + 4 + + + div32 + Divide by 32. + 5 + + + div64 + Divide by 64. + 6 + + + div128 + Divide by 128. + 7 + + + + + CLKSEL + Clock Source Select. This 3 bit field selects the source for the system clock. + 9 + 3 + + + HIRC + The internal 96 MHz oscillator is used for the system clock. + 0 + + + nanoRing + The nano-ring output is used for the system clock. + 3 + + + hfxIn + HFXIN is used for the system clock. + 6 + + + + + CKRDY + Clock Ready. This read only bit reflects whether the currently selected system clock source is running. + 13 + 1 + read-only + + + busy + Switchover to the new clock source (as selected by CLKSEL) has not yet occurred. + 0 + + + ready + System clock running from CLKSEL clock source. + 1 + + + + + X32K_EN + 32kHz Crystal Oscillator Enable. + 17 + 1 + + + dis + Is Disabled. + 0 + + + en + Is Enabled. + 1 + + + + + HIRC_EN + 60MHz High Frequency Internal Reference Clock Enable. + 18 + 1 + + + dis + Is Disabled. + 0 + + + en + Is Enabled. + 1 + + + + + X32K_RDY + 32kHz Crystal Oscillator Ready + 25 + 1 + read-only + + + not + Not Ready + 0 + + + Ready + X32K Ready + 1 + + + + + HIRC_RDY + 60MHz HIRC Ready. + 26 + 1 + + + not + Not Ready + 0 + + + ready + HIRC Ready + 1 + + + + + LIRC8K_RDY + 8kHz Low Frequency Reference Clock Ready. + 29 + 1 + + + not + Not Ready + 0 + + + ready + Clock Ready + 1 + + + + + + + PM + Power Management. + 0x0C + + + MODE + Operating Mode. This two bit field selects the current operating mode for the device. Note that code execution only occurs during ACTIVE mode. + 0 + 3 + + + active + Active Mode. + 0 + + + shutdown + Shutdown Mode. + 3 + + + backup + Backup Mode. + 4 + + + + + GPIOWKEN + GPIO Wake Up Enable. This bit enables all GPIO pins as potential wakeup sources. Any GPIO configured for wakeup is capable of causing an exit from IDLE or STANDBY modes when this bit is set. + 4 + 1 + + + dis + Wake Up Disable. + 0 + + + en + Wake Up Enable. + 1 + + + + + RTCWKEN + RTC Alarm Wake Up Enable. This bit enables RTC alarm as wakeup source. If enabled, the desired RTC alarm must be configured via the RTC control registers. + 5 + 1 + + + dis + Wake Up Disable. + 0 + + + en + Wake Up Enable. + 1 + + + + + HIRCPD + HIRC Power Down. This bit selects HIRC power state in DEEPSLEEP mode. + 15 + 1 + + + active + Mode is Active. + 0 + + + deepsleep + Powered down in DEEPSLEEP. + 1 + + + + + + + PCKDIV + Peripheral Clock Divider. + 0x18 + 0x00000001 + + + AONCD + Always-ON(AON) domain CLock Divider. These bits define the AON domain clock divider. + 0 + 2 + + + div_4 + PCLK divide by 4. + 0 + + + div_8 + PCLK divide by 8. + 1 + + + div_16 + PCLK divide by 16. + 2 + + + div_32 + PCLK divide by 32. + 3 + + + + + + + PERCKCN0 + Peripheral Clock Disable. + 0x24 + + + GPIO0D + GPIO0 Disable. + 0 + 1 + + GPIODisable + + en + enable it. + 0 + + + dis + disable it. + 1 + + + + + DMAD + DMA Disable. + 5 + 1 + + GPIODisable + + en + enable it. + 0 + + + dis + disable it. + 1 + + + + + SPI0D + SPI 0 Disable. + 6 + 1 + + GPIODisable + + en + enable it. + 0 + + + dis + disable it. + 1 + + + + + SPI1D + SPI 1 Disable. + 7 + 1 + + GPIODisable + + en + enable it. + 0 + + + dis + disable it. + 1 + + + + + UART0D + UART 0 Disable. + 9 + 1 + + GPIODisable + + en + enable it. + 0 + + + dis + disable it. + 1 + + + + + UART1D + UART 1 Disable. + 10 + 1 + + GPIODisable + + en + enable it. + 0 + + + dis + disable it. + 1 + + + + + I2C0D + I2C 0 Disable. + 13 + 1 + + GPIODisable + + en + enable it. + 0 + + + dis + disable it. + 1 + + + + + T0D + Timer 0 Disable. + 15 + 1 + + GPIODisable + + en + enable it. + 0 + + + dis + disable it. + 1 + + + + + T1D + Timer 1 Disable. + 16 + 1 + + GPIODisable + + en + enable it. + 0 + + + dis + disable it. + 1 + + + + + T2D + Timer 2 Disable. + 17 + 1 + + GPIODisable + + en + enable it. + 0 + + + dis + disable it. + 1 + + + + + I2C1D + I2C 1 Disable. + 28 + 1 + + GPIODisable + + en + enable it. + 0 + + + dis + disable it. + 1 + + + + + + + MEMCKCN + Memory Clock Control Register. + 0x28 + + + FWS + Flash Wait State. These bits define the number of wait-state cycles per Flash data read access. Minimum wait state is 2. + 0 + 3 + + + SYSRAM0LS + System RAM 0 Light Sleep Mode. + 8 + 1 + + + active + Memory is active. + 0 + + + light_sleep + Memory is in Light Sleep mode. + 1 + + + + + SYSRAM1LS + System RAM 1 Light Sleep Mode. + 9 + 1 + + + active + Memory is active. + 0 + + + light_sleep + Memory is in Light Sleep mode. + 1 + + + + + SYSRAM2LS + System RAM 2 Light Sleep Mode. + 10 + 1 + + + active + Memory is active. + 0 + + + light_sleep + Memory is in Light Sleep mode. + 1 + + + + + SYSRAM3LS + System RAM 3 Light Sleep Mode. + 11 + 1 + + + active + Memory is active. + 0 + + + light_sleep + Memory is in Light Sleep mode. + 1 + + + + + ICACHELS + ICache RAM Light Sleep Mode. + 12 + 1 + + + active + Memory is active. + 0 + + + light_sleep + Memory is in Light Sleep mode. + 1 + + + + + + + MEMZCN + Memory Zeroize Control. + 0x2C + + + SRAM0Z + System RAM Block 0. + 0 + 1 + + + nop + No operation/complete. + 0 + + + start + Start operation. + 1 + + + + + ICACHEZ + Instruction Cache. + 1 + 1 + + + nop + No operation/complete. + 0 + + + start + Start operation. + 1 + + + + + + + SCCK + Smart Card Clock Control. + 0x34 + 0x00001414 + + + MPRI0 + Master Priority Control Register 0. + 0x38 + 0x00001414 + + + MPRI1 + Mater Priority Control Register 1. + 0x3C + 0x00001414 + + + SYSST + System Status Register. + 0x40 + + + ICECLOCK + ARM ICE Lock Status. + 0 + 1 + + + unlocked + ICE is unlocked. + 0 + + + locked + ICE is locked. + 1 + + + + + CODEINTERR + Code Integrity Error Flag. This bit indicates a code integrity error has occured in XiP interface. + 1 + 1 + + + norm + Normal Operating Condition. + 0 + + + code + Code Integrity Error. + 1 + + + + + SCMEMF + System Cache Memory Fault Flag. This bit indicates a memory fault has occured in the System Cache while receiving data from the Hyperbus Interface. + 5 + 1 + + + norm + Normal Operating Condition. + 0 + + + memory + Memory Fault. + 1 + + + + + + + RSTR1 + Reset 1. + 0x44 + + + I2C1 + I2C1 Reset. + 0 + 1 + + reset_write + write + + RFU + Reserved. Do not use. + 0 + + + reset + Starts reset operation. + 1 + + + + reset_read + read + + reset_done + Reset complete. + 0 + + + busy + Reset in progress. + 1 + + + + + + + PERCKCN1 + Peripheral Clock Disable. + 0x48 + + + FLCD + Secure Flash Controller Disable. + 3 + 1 + + + en + Enable. + 0 + + + dis + Disable. + 1 + + + + + ICACHED + ICache Clock Disable. + 11 + 1 + + + en + Enable. + 0 + + + dis + Disable. + 1 + + + + + + + EVTEN + Event Enable Register. + 0x4C + + + DMAEVENT + Enable DMA event. When this bit is set, a DMA event will cause an RXEV event to wake the CPU from WFE sleep mode. + 0 + 1 + + + RXEVENT + Enable RXEV pin event. When this bit is set, a logic high of GPIO0[24] will cause an RXEV event to wake the CPU from WFE sleep mode. + 1 + 1 + + + + + REVISION + Revision Register. + 0x50 + read-only + + + REVISION + Manufacturer Chip Revision. + 0 + 16 + + + + + SYSSIE + System Status Interrupt Enable Register. + 0x54 + + + ICEULIE + ARM ICE Unlock Interrupt Enable. + 0 + 1 + + + dis + disabled. + 0 + + + en + enabled. + 1 + + + + + CIEIE + Code Integrity Error Interrupt Enable. + 1 + 1 + + + dis + disabled. + 0 + + + en + enabled. + 1 + + + + + SCMFIE + System Cache Memory Fault Interrupt Enable. + 5 + 1 + + + dis + disabled. + 0 + + + en + enabled. + 1 + + + + + + + + + + GPIO0 + Individual I/O for each GPIO + GPIO + 0x40008000 + + 0x00 + 0x1000 + registers + + + GPIO0 + GPIO0 interrupt. + 24 + + + + EN + GPIO Function Enable Register. Each bit controls the GPIO_EN setting for one GPIO pin on the associated port. + 0x00 + + + GPIO_EN + Mask of all of the pins on the port. + 0 + 32 + + + alternate + Alternate function enabled. + 0 + + + GPIO + GPIO function is enabled. + 1 + + + + + + + EN_SET + GPIO Set Function Enable Register. Writing a 1 to one or more bits in this register sets the bits in the same positions in GPIO_EN to 1, without affecting other bits in that register. + 0x04 + + + ALL + Mask of all of the pins on the port. + 0 + 32 + + + + + EN_CLR + GPIO Clear Function Enable Register. Writing a 1 to one or more bits in this register clears the bits in the same positions in GPIO_EN to 0, without affecting other bits in that register. + 0x08 + + + ALL + Mask of all of the pins on the port. + 0 + 32 + + + + + OUT_EN + GPIO Output Enable Register. Each bit controls the GPIO_OUT_EN setting for one GPIO pin in the associated port. + 0x0C + + + GPIO_OUT_EN + Mask of all of the pins on the port. + 0 + 32 + + + dis + GPIO Output Disable + 0 + + + en + GPIO Output Enable + 1 + + + + + + + OUT_EN_SET + GPIO Output Enable Set Function Enable Register. Writing a 1 to one or more bits in this register sets the bits in the same positions in GPIO_OUT_EN to 1, without affecting other bits in that register. + 0x10 + + + ALL + Mask of all of the pins on the port. + 0 + 32 + + + + + OUT_EN_CLR + GPIO Output Enable Clear Function Enable Register. Writing a 1 to one or more bits in this register clears the bits in the same positions in GPIO_OUT_EN to 0, without affecting other bits in that register. + 0x14 + + + ALL + Mask of all of the pins on the port. + 0 + 32 + + + + + OUT + GPIO Output Register. Each bit controls the GPIO_OUT setting for one pin in the associated port. This register can be written either directly, or by using the GPIO_OUT_SET and GPIO_OUT_CLR registers. + 0x18 + + + GPIO_OUT + Mask of all of the pins on the port. + 0 + 32 + + + low + Drive Logic 0 (low) on GPIO output. + 0 + + + high + Drive logic 1 (high) on GPIO output. + 1 + + + + + + + OUT_SET + GPIO Output Set. Writing a 1 to one or more bits in this register sets the bits in the same positions in GPIO_OUT to 1, without affecting other bits in that register. + 0x1C + write-only + + + GPIO_OUT_SET + Mask of all of the pins on the port. + 0 + 32 + + + no + No Effect. + 0 + + + set + Set GPIO_OUT bit in this position to '1' + 1 + + + + + + + OUT_CLR + GPIO Output Clear. Writing a 1 to one or more bits in this register clears the bits in the same positions in GPIO_OUT to 0, without affecting other bits in that register. + 0x20 + write-only + + + GPIO_OUT_CLR + Mask of all of the pins on the port. + 0 + 32 + + + + + IN + GPIO Input Register. Read-only register to read from the logic states of the GPIO pins on this port. + 0x24 + read-only + + + GPIO_IN + Mask of all of the pins on the port. + 0 + 32 + + + + + INT_MOD + GPIO Interrupt Mode Register. Each bit in this register controls the interrupt mode setting for the associated GPIO pin on this port. + 0x28 + + + GPIO_INT_MOD + Mask of all of the pins on the port. + 0 + 32 + + + level + Interrupts for this pin are level triggered. + 0 + + + edge + Interrupts for this pin are edge triggered. + 1 + + + + + + + INT_POL + GPIO Interrupt Polarity Register. Each bit in this register controls the interrupt polarity setting for one GPIO pin in the associated port. + 0x2C + + + GPIO_INT_POL + Mask of all of the pins on the port. + 0 + 32 + + + falling + Interrupts are latched on a falling edge or low level condition for this pin. + 0 + + + rising + Interrupts are latched on a rising edge or high condition for this pin. + 1 + + + + + + + INT_EN + GPIO Interrupt Enable Register. Each bit in this register controls the GPIO interrupt enable for the associated pin on the GPIO port. + 0x34 + + + GPIO_INT_EN + Mask of all of the pins on the port. + 0 + 32 + + + dis + Interrupts are disabled for this GPIO pin. + 0 + + + en + Interrupts are enabled for this GPIO pin. + 1 + + + + + + + INT_EN_SET + GPIO Interrupt Enable Set. Writing a 1 to one or more bits in this register sets the bits in the same positions in GPIO_INT_EN to 1, without affecting other bits in that register. + 0x38 + + + GPIO_INT_EN_SET + Mask of all of the pins on the port. + 0 + 32 + + + no + No effect. + 0 + + + set + Set GPIO_INT_EN bit in this position to '1' + 1 + + + + + + + INT_EN_CLR + GPIO Interrupt Enable Clear. Writing a 1 to one or more bits in this register clears the bits in the same positions in GPIO_INT_EN to 0, without affecting other bits in that register. + 0x3C + + + GPIO_INT_EN_CLR + Mask of all of the pins on the port. + 0 + 32 + + + no + No Effect. + 0 + + + clear + Clear GPIO_INT_EN bit in this position to '0' + 1 + + + + + + + INT_STAT + GPIO Interrupt Status Register. Each bit in this register contains the pending interrupt status for the associated GPIO pin in this port. + 0x40 + read-only + + + GPIO_INT_STAT + Mask of all of the pins on the port. + 0 + 32 + + + no + No Interrupt is pending on this GPIO pin. + 0 + + + pending + An Interrupt is pending on this GPIO pin. + 1 + + + + + + + INT_CLR + GPIO Status Clear. Writing a 1 to one or more bits in this register clears the bits in the same positions in GPIO_INT_STAT to 0, without affecting other bits in that register. + 0x48 + + + ALL + Mask of all of the pins on the port. + 0 + 32 + + + + + WAKE_EN + GPIO Wake Enable Register. Each bit in this register controls the PMU wakeup enable for the associated GPIO pin in this port. + 0x4C + + + GPIO_WAKE_EN + Mask of all of the pins on the port. + 0 + 32 + + + dis + PMU wakeup for this GPIO is disabled. + 0 + + + en + PMU wakeup for this GPIO is enabled. + 1 + + + + + + + WAKE_EN_SET + GPIO Wake Enable Set. Writing a 1 to one or more bits in this register sets the bits in the same positions in GPIO_WAKE_EN to 1, without affecting other bits in that register. + 0x50 + + + ALL + Mask of all of the pins on the port. + 0 + 32 + + + + + WAKE_EN_CLR + GPIO Wake Enable Clear. Writing a 1 to one or more bits in this register clears the bits in the same positions in GPIO_WAKE_EN to 0, without affecting other bits in that register. + 0x54 + + + ALL + Mask of all of the pins on the port. + 0 + 32 + + + + + INT_DUAL_EDGE + GPIO Interrupt Dual Edge Mode Register. Each bit in this register selects dual edge mode for the associated GPIO pin in this port. + 0x5C + + + GPIO_INT_DUAL_EDGE + Mask of all of the pins on the port. + 0 + 32 + + + no + No Effect. + 0 + + + en + Dual Edge mode is enabled. If edge-triggered interrupts are enabled on this GPIO pin, then both rising and falling edges will trigger interrupts regardless of the GPIO_INT_POL setting. + 1 + + + + + + + PAD_CFG1 + GPIO Input Mode Config 1. Each bit in this register enables the weak pull-up for the associated GPIO pin in this port. + 0x60 + + + GPIO_PAD_CFG1 + The two bits in GPIO_PAD_CFG1 and GPIO_PAD_CFG2 for each GPIO pin work together to determine the pad mode when the GPIO is set to input mode. + 0 + 32 + + + impedance + High Impedance. + 0 + + + pu + Weak pull-up mode. + 1 + + + pd + weak pull-down mode. + 2 + + + + + + + PAD_CFG2 + GPIO Input Mode Config 2. Each bit in this register enables the weak pull-up for the associated GPIO pin in this port. + 0x64 + + + GPIO_PAD_CFG2 + The two bits in GPIO_PAD_CFG1 and GPIO_PAD_CFG2 for each GPIO pin work together to determine the pad mode when the GPIO is set to input mode. + 0 + 32 + + + impedance + High Impedance. + 0 + + + pu + Weak pull-up mode. + 1 + + + pd + weak pull-down mode. + 2 + + + + + + + EN1 + GPIO Alternate Function Enable Register. Each bit in this register selects between primary/secondary functions for the associated GPIO pin in this port. + 0x68 + + + GPIO_EN1 + Mask of all of the pins on the port. + 0 + 32 + + + primary + Primary function selected. + 0 + + + secondary + Secondary function selected. + 1 + + + + + + + EN1_SET + GPIO Alternate Function Set. Writing a 1 to one or more bits in this register sets the bits in the same positions in GPIO_EN1 to 1, without affecting other bits in that register. + 0x6C + + + ALL + Mask of all of the pins on the port. + 0 + 32 + + + + + EN1_CLR + GPIO Alternate Function Clear. Writing a 1 to one or more bits in this register clears the bits in the same positions in GPIO_EN1 to 0, without affecting other bits in that register. + 0x70 + + + ALL + Mask of all of the pins on the port. + 0 + 32 + + + + + EN2 + GPIO Alternate Function Enable Register. Each bit in this register selects between primary/secondary functions for the associated GPIO pin in this port. + 0x74 + + + GPIO_EN2 + Mask of all of the pins on the port. + 0 + 32 + + + primary + Primary function selected. + 0 + + + secondary + Secondary function selected. + 1 + + + + + + + EN2_SET + GPIO Alternate Function 2 Set. Writing a 1 to one or more bits in this register sets the bits in the same positions in GPIO_EN2 to 1, without affecting other bits in that register. + 0x78 + + + ALL + Mask of all of the pins on the port. + 0 + 32 + + + + + EN2_CLR + GPIO Wake Alternate Function Clear. Writing a 1 to one or more bits in this register clears the bits in the same positions in GPIO_EN2 to 0, without affecting other bits in that register. + 0x7C + + + ALL + Mask of all of the pins on the port. + 0 + 32 + + + + + IS + Input Hysteresis Enable Register + 0xA8 + + + SR + Slew Rate Select Register. + 0xAC + + + DS + GPIO Drive Strength Register. Each bit in this register selects the drive strength for the associated GPIO pin in this port. Refer to the Datasheet for sink/source current of GPIO pins in each mode. + 0xB0 + + + DS + Mask of all of the pins on the port. + 0 + 32 + + + ld + GPIO port pin is in low-drive mode. + 0 + + + hd + GPIO port pin is in high-drive mode. + 1 + + + + + + + DS1 + GPIO Drive Strength 1 Register. Each bit in this register selects the drive strength for the associated GPIO pin in this port. Refer to the Datasheet for sink/source current of GPIO pins in each mode. + 0xB4 + + + ALL + Mask of all of the pins on the port. + 0 + 32 + + + + + PS + GPIO Pull Select Mode. + 0xB8 + + + ALL + Mask of all of the pins on the port. + 0 + 32 + + + + + VSSEL + GPIO Voltage Select. + 0xC0 + + + ALL + Mask of all of the pins on the port. + 0 + 32 + + + + + + + + I2C0 + Inter-Integrated Circuit. + I2C + 0x4001D000 + 32 + + 0x00 + 0x1000 + registers + + + I2C0 + I2C0 IRQ + 13 + + + + CTRL + Control Register0. + 0x00 + + + I2C_EN + I2C Enable. + [0:0] + read-write + + + dis + Disable I2C. + 0 + + + en + enable I2C. + 1 + + + + + MST + Master Mode Enable. + [1:1] + read-write + + + slave_mode + Slave Mode. + 0 + + + master_mode + Master Mode. + 1 + + + + + GEN_CALL_ADDR + General Call Address Enable. + [2:2] + read-write + + + dis + Ignore Gneral Call Address. + 0 + + + en + Acknowledge general call address. + 1 + + + + + RX_MODE + Interactive Receive Mode. + [3:3] + read-write + + + dis + Disable Interactive Receive Mode. + 0 + + + en + Enable Interactive Receive Mode. + 1 + + + + + RX_MODE_ACK + Data Acknowledge. This bit defines the acknowledge bit returned by the I2C receiver while IRXM = 1 HW forces ACK to 0 when IRXM = 0. + [4:4] + read-write + + + ack + return ACK (pulling SDA LOW). + 0 + + + nack + return NACK (leaving SDA HIGH). + 1 + + + + + SCL_OUT + SCL Output. This bits control SCL output when SWOE =1. + [6:6] + read-write + + + drive_scl_low + Drive SCL low. + 0 + + + release_scl + Release SCL. + 1 + + + + + SDA_OUT + SDA Output. This bits control SDA output when SWOE = 1. + [7:7] + read-write + + + drive_sda_low + Drive SDA low. + 0 + + + release_sda + Release SDA. + 1 + + + + + SCL + SCL status. This bit reflects the logic gate of SCL signal. + [8:8] + read-only + + + SDA + SDA status. THis bit reflects the logic gate of SDA signal. + [9:9] + read-only + + + SW_OUT_EN + Software Output Enable. + [10:10] + read-write + + + outputs_disable + I2C Outputs SCLO and SDAO disabled. + 0 + + + outputs_enable + I2C Outputs SCLO and SDAO enabled. + 1 + + + + + READ + Read. This bit reflects the R/W bit of an address match (AMI = 1) or general call match(GCI = 1). This bit is valid 3 cycles after the relevant interrupt bit is set. + [11:11] + read-only + + + write + Write. + 0 + + + read + Read. + 1 + + + + + SCL_CLK_STRECH_DIS + This bit will disable slave clock stretching when set. + [12:12] + read-write + + + en + Slave clock stretching enabled. + 0 + + + dis + Slave clock stretching disabled. + 1 + + + + + SCL_PP_MODE + SCL Push-Pull Mode. This bit controls whether SCL is operated in a the I2C standard open-drain mode, or in a non-standard push-pull mode where the Hi-Z output isreplaced with Drive-1. The non-standard mode should only be used when operating as a master and communicating with slaves that are guaranteed to never drive SCL low. + [13:13] + read-write + + + dis + Standard open-drain operation: drive low for 0, Hi-Z for 1 + 0 + + + en + Non-standard push-pull operation: drive low for 0, drive high for 1 + 1 + + + + + HS_MODE + Hs-mode Enable. + 15 + 1 + + + dis + Hs-mode disabled. + 0 + + + en + Hs-mode enabled. + 1 + + + + + + + STATUS + Status Register. + 0x04 + + + BUS + Bus Status. + [0:0] + read-only + + + idle + I2C Bus Idle. + 0 + + + busy + I2C Bus Busy. + 1 + + + + + RX_EMPTY + RX empty. + [1:1] + read-only + + + not_empty + Not Empty. + 0 + + + empty + Empty. + 1 + + + + + RX_FULL + RX Full. + [2:2] + read-only + + + not_full + Not Full. + 0 + + + full + Full. + 1 + + + + + TX_EMPTY + TX Empty. + [3:3] + + + not_empty + Not Empty. + 0 + + + empty + Empty. + 1 + + + + + TX_FULL + TX Full. + [4:4] + + + not_empty + Not Empty. + 0 + + + empty + Empty. + 1 + + + + + CLK_MODE + Clock Mode. + [5:5] + read-only + + + not_actively_driving_scl_clock + Device not actively driving SCL clock cycles. + 0 + + + actively_driving_scl_clock + Device operating as master and actively driving SCL clock cycles. + 1 + + + + + STATUS + Controller Status. + [11:8] + + + idle + Controller Idle. + 0 + + + mtx_addr + master Transmit address. + 1 + + + mrx_addr_ack + Master Receive address ACK. + 2 + + + mtx_ex_addr + Master Transmit extended address. + 3 + + + mrx_ex_addr + Master Receive extended address ACK. + 4 + + + srx_addr + Slave Receive address. + 5 + + + stx_addr_ack + Slave Transmit address ACK. + 6 + + + srx_ex_addr + Slave Receive extended address. + 7 + + + stx_ex_addr_ack + Slave Transmit extended address ACK. + 8 + + + tx + Transmit data (master or slave). + 9 + + + rx_ack + Receive data ACK (master or slave). + 10 + + + rx + Receive data (master or slave). + 11 + + + tx_ack + Transmit data ACK (master or slave). + 12 + + + nack + NACK stage (master or slave). + 13 + + + by_st + Bystander state (ongoing transaction but not participant- another master addressing another slave). + 15 + + + + + + + INT_FL0 + Interrupt Status Register. + 0x08 + + + DONE + Transfer Done Interrupt. + [0:0] + + INT_FL0_Done + + inactive + No Interrupt is Pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + RX_MODE + Interactive Receive Interrupt. + [1:1] + + + inactive + No Interrupt is Pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + GEN_CALL_ADDR + Slave General Call Address Match Interrupt. + [2:2] + + + inactive + No Interrupt is Pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + ADDR_MATCH + Slave Address Match Interrupt. + [3:3] + + + inactive + No Interrupt is Pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + RX_THRESH + Receive Threshold Interrupt. This bit is automaticcaly cleared when RX_FIFO is below the threshold level. + [4:4] + + + inactive + No interrupt is pending. + 0 + + + pending + An interrupt is pending. RX_FIFO equal or more bytes than the threshold. + 1 + + + + + TX_THRESH + Transmit Threshold Interrupt. This bit is automaticcaly cleared when TX_FIFO is above the threshold level. + [5:5] + + + inactive + No interrupt is pending. + 0 + + + pending + An interrupt is pending. TX_FIFO has equal or less bytes than the threshold. + 1 + + + + + STOP + STOP Interrupt. + [6:6] + + + inactive + No interrupt is pending. + 0 + + + pending + An interrupt is pending. TX_FIFO has equal or less bytes than the threshold. + 1 + + + + + ADDR_ACK + Address Acknowledge Interrupt. + [7:7] + + + inactive + No Interrupt is Pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + ARB_ER + Arbritation error Interrupt. + [8:8] + + + inactive + No Interrupt is Pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + TO_ER + timeout Error Interrupt. + [9:9] + + + inactive + No Interrupt is Pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + ADDR_NACK_ER + Address NACK Error Interrupt. + [10:10] + + + inactive + No Interrupt is Pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + DATA_ER + Data NACK Error Interrupt. + [11:11] + + + inactive + No Interrupt is Pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + DO_NOT_RESP_ER + Do Not Respond Error Interrupt. + [12:12] + + + inactive + No Interrupt is Pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + START_ER + Start Error Interrupt. + [13:13] + + + inactive + No Interrupt is Pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + STOP_ER + Stop Error Interrupt. + [14:14] + + + inactive + No Interrupt is Pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + TX_LOCK_OUT + Transmit Lock Out Interrupt. + [15:15] + + + + + INT_EN0 + Interrupt Enable Register. + 0x0C + read-write + + + DONE + Transfer Done Interrupt Enable. + [0:0] + read-write + + + dis + Interrupt disabled. + 0 + + + en + Interrupt enabled when DONE = 1. + 1 + + + + + RX_MODE + Description not available. + [1:1] + read-write + + + dis + Interrupt disabled. + 0 + + + en + Interrupt enabled when RX_MODE = 1. + 1 + + + + + GEN_CTRL_ADDR + Slave mode general call address match received input enable. + [2:2] + read-write + + + dis + Interrupt disabled. + 0 + + + en + Interrupt enabled when GEN_CTRL_ADDR = 1. + 1 + + + + + ADDR_MATCH + Slave mode incoming address match interrupt. + [3:3] + read-write + + + dis + Interrupt disabled. + 0 + + + en + Interrupt enabled when ADDR_MATCH = 1. + 1 + + + + + RX_THRESH + RX FIFO Above Treshold Level Interrupt Enable. + [4:4] + read-write + + + dis + Interrupt disabled. + 0 + + + en + Interrupt enabled. + 1 + + + + + TX_THRESH + TX FIFO Below Treshold Level Interrupt Enable. + [5:5] + + + dis + Interrupt disabled. + 0 + + + en + Interrupt enabled. + 1 + + + + + STOP + Stop Interrupt Enable + [6:6] + read-write + + + dis + Interrupt disabled. + 0 + + + en + Interrupt enabled when STOP = 1. + 1 + + + + + ADDR_ACK + Received Address ACK from Slave Interrupt. + [7:7] + + + dis + Interrupt disabled. + 0 + + + en + Interrupt enabled. + 1 + + + + + ARB_ER + Master Mode Arbitration Lost Interrupt. + [8:8] + + + dis + Interrupt disabled. + 0 + + + en + Interrupt enabled. + 1 + + + + + TO_ER + Timeout Error Interrupt Enable. + [9:9] + + + dis + Interrupt disabled. + 0 + + + en + Interrupt enabled. + 1 + + + + + ADDR_ER + Master Mode Address NACK Received Interrupt. + [10:10] + + + dis + Interrupt disabled. + 0 + + + en + Interrupt enabled. + 1 + + + + + DATA_ER + Master Mode Data NACK Received Interrupt. + [11:11] + + + dis + Interrupt disabled. + 0 + + + en + Interrupt enabled. + 1 + + + + + DO_NOT_RESP_ER + Slave Mode Do Not Respond Interrupt. + [12:12] + + + dis + Interrupt disabled. + 0 + + + en + Interrupt enabled. + 1 + + + + + START_ER + Out of Sequence START condition detected interrupt. + [13:13] + + + dis + Interrupt disabled. + 0 + + + en + Interrupt enabled. + 1 + + + + + STOP_ER + Out of Sequence STOP condition detected interrupt. + [14:14] + + + dis + Interrupt disabled. + 0 + + + en + Interrupt enabled. + 1 + + + + + TX_LOCK_OUT + TX FIFO Locked Out Interrupt. + [15:15] + + + dis + Interrupt disabled. + 0 + + + en + Interrupt enabled when TXLOIE = 1. + 1 + + + + + + + INT_FL1 + Interrupt Status Register 1. + 0x10 + + + RX_OVERFLOW + Receiver Overflow Interrupt. When operating as a slave receiver, this bit is set when you reach the first data bit and the RX FIFO and shift register are both full. + [0:0] + + + inactive + No Interrupt is Pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + TX_UNDERFLOW + Transmit Underflow Interrupt. When operating as a slave transmitter, this bit is set when you reach the first data bit and the TX FIFO is empty and the master is still asking for more data (i.e the master hasn't sent a NACK yet). + [1:1] + + + inactive + No Interrupt is Pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + + + INT_EN1 + Interrupt Staus Register 1. + 0x14 + read-write + + + RX_OVERFLOW + Receiver Overflow Interrupt Enable. + [0:0] + + + dis + No Interrupt is Pending. + 0 + + + en + An interrupt is pending. + 1 + + + + + TX_UNDERFLOW + Transmit Underflow Interrupt Enable. + [1:1] + + + dis + No Interrupt is Pending. + 0 + + + en + An interrupt is pending. + 1 + + + + + + + FIFO_LEN + FIFO Configuration Register. + 0x18 + + + RX_LEN + Receive FIFO Length. + [7:0] + read-only + + + TX_LEN + Transmit FIFO Length. + [15:8] + read-only + + + + + RX_CTRL0 + Receive Control Register 0. + 0x1C + + + DNR + Do Not Respond. + [0:0] + + + respond + Always respond to address match. + 0 + + + not_respond_rx_fifo_empty + Do not respond to address match when RX_FIFO is not empty. + 1 + + + + + RX_FLUSH + Receive FIFO Flush. This bit is automatically cleared to 0 after the operation. Setting this bit to 1 will affect RX_FIFO status. + [7:7] + + + not_flushed + FIFO not flushed. + 0 + + + flush + Flush RX_FIFO. + 1 + + + + + RX_THRESH + Receive FIFO Threshold. These bits define the RX_FIFO interrupt threshold. + [11:8] + + + + + RX_CTRL1 + Receive Control Register 1. + 0x20 + + + RX_CNT + Receive Count Bits. These bits define the number of bytes to be received in a transaction, except for the case RXCNT = 0. RXCNT = 0 means 256 bytes to be received in a transaction. + [7:0] + + + RX_FIFO + Receive FIFO Count. These bits reflect the number of byte in the RX_FIFO. These bits are flushed when I2CEN = 0. + [11:8] + read-only + + + + + TX_CTRL0 + Transmit Control Register 0. + 0x24 + + + TX_PRELOAD + Transmit FIFO Preaload Mode. Setting this bit will allow for high speed application to preload the transmit FIFO prior to Slave Address Match. + [0:0] + + + TX_READY_MODE + Transmit FIFO Ready Manual Mode. + [1:1] + + + en + HW control of I2CTXRDY enabled. + 0 + + + dis + HW control of I2CTXRDY disabled. + 1 + + + + + TX_FLUSH + Transmit FIFO Flush. This bit is automatically cleared to 0 after the operation. + [7:7] + + + not_flushed + FIFO not flushed. + 0 + + + flush + Flush TX_FIFO. + 1 + + + + + TX_THRESH + Transmit FIFO Threshold. These bits define the TX_FIFO interrupt threshold. + [11:8] + + + + + TX_CTRL1 + Transmit Control Register 1. + 0x28 + + + TX_READY + Transmit FIFO Preload Ready. + [0:0] + + + TX_LAST + Transmit Last. This bit is used in slave mod only. Do not use when preloading (cleared by hardware). + [1:1] + + + hold_scl_low + Hold SCL low on TX_FIFO empty. + 0 + + + end_transaction + End transaction on TX_FIFO empty. + 1 + + + + + TX_FIFO + Transmit FIFO Count. These bits reflect the number of bytes in the TX_FIFO. + [11:8] + read-only + + + + + FIFO + Data Register. + 0x2C + + + DATA + Data is read from or written to this location. Transmit and receive FIFO are separate but both are addressed at this location. + 0 + 8 + + + + + MASTER_CTRL + Master Control Register. + 0x30 + + + START + Setting this bit to 1 will start a master transfer. + [0:0] + + + RESTART + Setting this bit to 1 will generate a repeated START. + [1:1] + + + STOP + Setting this bit to 1 will generate a STOP condition. + [2:2] + + + SL_EX_ADDR + Slave Extend Address Select. + [7:7] + + + 7_bits_address + 7-bit address. + 0 + + + 10_bits_address + 10-bit address. + 1 + + + + + MASTER_CODE + Master Code. These bits set the Master Code used in Hs-mode operation. + [10:8] + + + SCL_SPEED_UP + Serial Clock speed Up. Setting this bit disables the master's monitoring of SCL state for other external masters or slaves. + [11:11] + + + en + Master monitors SCL state. + 0 + + + dis + SCL state monitoring disabled. + 1 + + + + + + + CLK_LO + Clock Low Register. + 0x34 + + + CLK_LO + Clock low. In master mode, these bits define the SCL low period. In slave mode, these bits define the time SCL will be held low after data is outputted. + [8:0] + + + + + CLK_HI + Clock high Register. + 0x38 + + + CKH + Clock High. In master mode, these bits define the SCL high period. + [8:0] + + + + + HS_CLK + HS-Mode Clock Control Register + 0x3C + + + HS_CLK_LO + Slave Address. + [7:0] + + + HS_CLK_HI + Slave Address. + [15:8] + + + + + TIMEOUT + Timeout Register + 0x40 + + + TO + Timeout + [15:0] + + + + + SLAVE_ADDR + Slave Address Register. + 0x44 + + + SLAVE_ADDR + Slave Address. + [9:0] + + + SLAVE_ADDR_DIS + Slave Address DIS. + [10:10] + + + SLAVE_ADDR_IDX + Slave Address Index. + [14:11] + + + EX_ADDR + Extended Address Select. + [15:15] + + + 7_bits_address + 7-bit address. + 0 + + + 10_bits_address + 10-bit address. + 1 + + + + + + + DMA + DMA Register. + 0x48 + + + TX_EN + TX channel enable. + [0:0] + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + RX_EN + RX channel enable. + [1:1] + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + + + + + + I2C1 + Inter-Integrated Circuit. 1 + 0x4001E000 + + I2C1 + I2C1 IRQ + 36 + + + + + ICC0 + Instruction Cache Controller Registers + 0x4002A000 + + 0x00 + 0x1000 + registers + + + + CACHE_ID + Cache ID Register. + 0x0000 + read-only + + + RELNUM + Release Number. Identifies the RTL release version. + 0 + 6 + + + PARTNUM + Part Number. This field reflects the value of C_ID_PART_NUMBER configuration parameter. + 6 + 4 + + + CCHID + Cache ID. This field reflects the value of the C_ID_CACHEID configuration parameter. + 10 + 6 + + + + + MEMCFG + Memory Configuration Register. + 0x0004 + read-only + 0x00080008 + + + CCHSZ + Cache Size. Indicates total size in Kbytes of cache. + 0 + 16 + + + MEMSZ + Main Memory Size. Indicates the total size, in units of 128 Kbytes, of code memory accessible to the cache controller. + 16 + 16 + + + + + CACHE_CTRL + Cache Control and Status Register. + 0x0100 + + + CACHE_EN + Cache Enable. Controls whether the cache is bypassed or is in use. Changing the state of this bit will cause the instruction cache to be flushed and its contents invalidated. + 0 + 1 + + + dis + Cache Bypassed. Instruction data is stored in the line fill buffer but is not written to main cache memory array. + 0 + + + en + Cache Enabled. + 1 + + + + + CACHE_RDY + Cache Ready flag. Cleared by hardware when at any time the cache as a whole is invalidated (including a system reset). When this bit is 0, the cache is effectively in bypass mode (instruction fetches will come from main memory or from the line fill buffer). Set by hardware when the invalidate operation is complete and the cache is ready. + 16 + 1 + read-only + + + notReady + Not Ready. + 0 + + + ready + Ready. + 1 + + + + + + + INVALIDATE + Invalidate All Registers. + 0x0700 + read-write + + + + + + ICC1 + Instruction Cache Controller Registers 1 + 0x4002F000 + + + + PWRSEQ + Power Sequencer / Low Power Control Register. + 0x40006800 + + 0x00 + 0x800 + registers + + + + LP_CTRL + Low Power Control Register. + 0x00 + + + RAMRET_SEL0 + System RAM 0 Data retention in BACKUP mode. + 0 + 1 + + + dis + Disabled. + 0 + + + en + Enabled. + 1 + + + + + RAMRET_SEL1 + System RAM 1 Data retention in BACKUP mode. + 1 + 1 + + + dis + Disabled. + 0 + + + en + Enabled. + 1 + + + + + RAMRET_SEL2 + System RAM 2 Data retention in BACKUP mode. + 2 + 1 + + + dis + Disabled. + 0 + + + en + Enabled. + 1 + + + + + RAMRET_SEL3 + System RAM 3 Data retention in BACKUP mode. + 3 + 1 + + + dis + Disabled. + 0 + + + en + Enabled. + 1 + + + + + OVR + Operating Voltage Range + 4 + 2 + + + 0_9V + 0.9V 24MHz + 0 + + + 1_0V + 1.0V 48MHz + 1 + + + 1_1V + 1.1V 96MHz + 2 + + + + + VCORE_DET_BYPASS + Bypass V CORE External Supply Detection + 6 + 1 + + + enabled + enable + 0 + + + Disable + disable + 1 + + + + + RETREG_EN + Retention Regulator Enable. This bit controls the retention regulator in BACKUP mode. + 8 + 1 + + + dis + Disabled. + 0 + + + en + Enabled. + 1 + + + + + FAST_WK_EN + Fast Wake-Up Mode. This bit enables fast wake-up from DeepSleep mode. + 10 + 1 + + + dis + Disabled. + 0 + + + en + Enabled. + 1 + + + + + BG_OFF + Band Gap Disable for DEEPSLEEP and BACKUP Mode + 11 + 1 + + + on + Bandgap is always ON. + 0 + + + off + Bandgap is OFF in DeepSleep mode(default). + 1 + + + + + VCORE_POR_DIS + V CORE POR Disable for DEEPSLEEP and BACKUP Mode + 12 + 1 + + + dis + Disabled. + 0 + + + en + Enabled. + 1 + + + + + LDO_DIS + LDO Disable + 16 + 1 + + + en + Enable if Bandgap is ON(default) + 0 + + + dis + Disabled. + 1 + + + + + VCORE_SVM_DIS + V CORE Supply Voltage Monitor Disable + 20 + 1 + + + en + Enable if Bandgap is ON(default) + 0 + + + dis + Disabled. + 1 + + + + + VDDIO_POR_DIS + VDDIO Power-On Reset Monitor Disable. This bit controls the Power-On Reset monitor on VDDIO supply in all operating mods. + 25 + 1 + + + en + Enabled. + 0 + + + dis + Disabled. + 1 + + + + + + + LP_WAKEFL + Low Power Mode Wakeup Flags for GPIO0 + 0x04 + + + WAKEST + Wakeup IRQ flags (write ones to clear). One or more of these bits will be set when the corresponding dedicated GPIO pin(s) transition(s) from low to high or high to low. If GPIO wakeup source is selected, using PM.GPIOWKEN register, and the corresponding bit is also selected in LPWKEN register, an interrupt will be gnerated to wake up the CPU from a low power mode. + 0 + 14 + + + + + LPWK_EN + Low Power I/O Wakeup Enable Register 0. This register enables low power wakeup functionality for GPIO0. + 0x08 + + + WAKEEN + Enable wakeup. These bits allow wakeup from the corresponding GPIO pin(s) on transition(s) from low to high or high to low when PM.GPIOWKEN is set. Wakeup status is indicated in PPWKST register. + 0 + 14 + + + + + LPMEMSD + Low Power Memory Shutdown Control. + 0x40 + + + SRAM0_OFF + System RAM block 0 Shut Down. + 0 + 1 + + + normal + Normal Operating Mode. + 0 + + + shutdown + Shutdown Mode. + 1 + + + + + SRAM1_OFF + System RAM block 1 Shut Down. + 1 + 1 + + + normal + Normal Operating Mode. + 0 + + + shutdown + Shutdown Mode. + 1 + + + + + SRAM2_OFF + System RAM block 2 Shut Down. + 2 + 1 + + + normal + Normal Operating Mode. + 0 + + + shutdown + Shutdown Mode. + 1 + + + + + SRAM3_OFF + System RAM block 3 Shut Down. + 3 + 1 + + + normal + Normal Operating Mode. + 0 + + + shutdown + Shutdown Mode. + 1 + + + + + + + + + + RTC + Real Time Clock and Alarm. + 0x40006000 + + 0x00 + 0x400 + registers + + + RTC + RTC interrupt. + 3 + + + + SEC + RTC Second Counter. This register contains the 32-bit second counter. + 0x00 + 0x00000000 + + + SSEC + RTC Sub-second Counter. This counter increments at 256Hz. RTC_SEC is incremented when this register rolls over from 0xFF to 0x00. + 0x04 + 0x00000000 + + + RTSS + RTC Sub-second Counter. + 0 + 8 + + + + + RAS + Time-of-day Alarm. + 0x08 + 0x00000000 + + + RAS + Time-of-day Alarm. + 0 + 20 + + + + + RSSA + RTC sub-second alarm. This register contains the reload value for the sub-second alarm. + 0x0C + 0x00000000 + + + RSSA + This register contains the reload value for the sub-second alarm. + 0 + 32 + + + + + CTRL + RTC Control Register. + 0x10 + 0x00000008 + 0xFFFFFF38 + + + RTCE + Real Time Clock Enable. This bit enables the Real Time Clock. This bit can only be written when WE=1 and BUSY =0. Change to this bit is effective only after BUSY is cleared from 1 to 0. + 0 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + ADE + Alarm Time-of-Day Interrupt Enable. Change to this bit is effective only after BUSY is cleared from 1 to 0. + 1 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + ASE + Alarm Sub-second Interrupt Enable. Change to this bit is effective only after BUSY is cleared from 1 to 0. + 2 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + BUSY + RTC Busy. This bit is set to 1 by hardware when changes to RTC registers required a synchronized version of the register to be in place. This bit is automatically cleared by hardware. + 3 + 1 + read-only + + + idle + Idle. + 0 + + + busy + Busy. + 1 + + + + + RDY + RTC Ready. This bit is set to 1 by hardware when the RTC count registers update. It can be cleared to 0 by software at any time. It will also be cleared to 0 by hardware just prior to an update of the RTC count register. + 4 + 1 + + + busy + Register has not updated. + 0 + + + ready + Ready. + 1 + + + + + RDYE + RTC Ready Interrupt Enable. + 5 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + ALDF + Time-of-Day Alarm Interrupt Flag. This alarm is qualified as wake-up source to the processor. + 6 + 1 + read-only + + + inactive + Not active + 0 + + + Pending + Active + 1 + + + + + ALSF + Sub-second Alarm Interrupt Flag. This alarm is qualified as wake-up source to the processor. + 7 + 1 + read-only + + + inactive + Not active + 0 + + + Pending + Active + 1 + + + + + SQE + Square Wave Output Enable. + 8 + 1 + + + inactive + Not active + 0 + + + Pending + Active + 1 + + + + + FT + Frequency Output Selection. When SQE=1, these bits specify the output frequency on the SQW pin. + 9 + 2 + + + freq1Hz + 1 Hz (Compensated). + 0 + + + freq512Hz + 512 Hz (Compensated). + 1 + + + freq4KHz + 4 KHz. + 2 + + + clkDiv8 + RTC Input Clock / 8. + 3 + + + + + X32KMD + 32KHz Oscillator Mode. + 11 + 2 + + + noiseImmuneMode + Always operate in Noise Immune Mode. Oscillator warm-up required. + 0 + + + quietMode + Always operate in Quiet Mode. No oscillator warm-up required. + 1 + + + quietInStopWithWarmup + Operate in Noise Immune Mode normally, switch to Quiet Mode on Stop Mode entry. Will wait for 32K oscillator warm-up before code execution on Stop Mode exit. + 2 + + + quietInStopNoWarmup + Operate in Noise Immune Mode normally, switch to Quiet Mode on Stop Mode entry. Will not wait for 32K oscillator warm-up before code execution on Stop Mode exit. + 3 + + + + + WE + Write Enable. This register bit serves as a protection mechanism against unintentional writes to critical RTC bits. + 15 + 1 + + + inactive + Not active + 0 + + + Pending + Active + 1 + + + + + + + TRIM + RTC Trim Register. + 0x14 + 0x00000000 + + + TRIM + RTC Trim. This register contains the 2's complement value that specifies the trim resolution. Each increment or decrement of the bit adds or subtracts 1ppm at each 4KHz clock value, with a maximum correction of +/- 127ppm. + 0 + 8 + + + VBATTMR + VBAT Timer Value. When RTC is running off of VBAT, this field is incremented every 32 seconds. + 8 + 24 + + + + + OSCCTRL + RTC Oscillator Control Register. + 0x18 + 0x00000000 + + + FLITER_EN + RTC Oscillator Filter Enable + 0 + 1 + + + IBIAS_SEL + RTC Oscillator 4X Bias Current Select + 1 + 1 + + + 2X + Selects 2X bias current for RTC oscillator + 0 + + + 4X + Selects 4X bias current for RTC oscillator + 1 + + + + + HYST_EN + RTC Oscillator Hysteresis Buffer Enable + 2 + 1 + + + IBIAS_EN + RTC Oscillator Bias Current Enable + 3 + 1 + + + BYPASS + RTC Crystal Bypass + 4 + 1 + + + OUT32K + RTC 32kHz Square Wave Output + 5 + 1 + + + + + + + + SIR + System Initialization Registers. + 0x40000400 + read-only + + 0x00 + 0x400 + registers + + + + SISTAT + System Initialization Status Register. + 0x00 + read-only + + + MAGIC + Magic Word Validation. This bit is set by the system initialization block following power-up. + 0 + 1 + read-only + + read + + magicNotSet + Magic word was not set (OTP has not been initialized properly). + 0 + + + magicSet + Magic word was set (OTP contains valid settings). + 1 + + + + + CRCERR + CRC Error Status. This bit is set by the system initialization block following power-up. + 1 + 1 + read-only + + read + + noError + No CRC errors occurred during the read of the OTP memory block. + 0 + + + error + A CRC error occurred while reading the OTP. The address of the failure location in the OTP memory is stored in the ERRADDR register. + 1 + + + + + + + ERRADDR + Read-only field set by the SIB block if a CRC error occurs during the read of the OTP memory. Contains the failing address in OTP memory (when CRCERR equals 1). + 0x04 + read-only + + + ERRADDR + 0 + 32 + + + + + FSTAT + funcstat register. + 0x100 + read-only + + + FPU + FPU Function. + 0 + 1 + + + no + 0 + + + yes + 1 + + + + + USB + USB Device. + 1 + 1 + + + no + 0 + + + yes + 1 + + + + + ADC + 10-bit Sigma Delta ADC. + 2 + 1 + + + no + 0 + + + yes + 1 + + + + + XIP + XiP function. + 3 + 1 + + + no + 0 + + + yes + 1 + + + + + PBM + PBM function. + 4 + 1 + + + no + 0 + + + yes + 1 + + + + + HBC + HBC function. + 5 + 1 + + + no + 0 + + + yes + 1 + + + + + SDHC + SDHC function. + 6 + 1 + + + no + 0 + + + yes + 1 + + + + + SMPHR + SMPHR function. + 7 + 1 + + + no + 0 + + + yes + 1 + + + + + SCACHE + System Cache function. + 8 + 1 + + + no + 0 + + + yes + 1 + + + + + + + SFSTAT + secfuncstat register. + 0x104 + read-only + + + TRNG + TRNG function. + 2 + 1 + + + no + 0 + + + yes + 1 + + + + + AES + AES function. + 3 + 1 + + + no + 0 + + + yes + 1 + + + + + SHA + SHA function. + 4 + 1 + + + no + 0 + + + yes + 1 + + + + + MAA + MAA function. + 5 + 1 + + + no + 0 + + + yes + 1 + + + + + + + + + + SMON + The Security Monitor block used to monitor system threat conditions. + 0x40004000 + + 0x00 + 0x1000 + registers + + + + EXTSCN + External Sensor Control Register. + 0x00 + 0x3800FFC0 + + + EXTS_EN0 + External Sensor Enable for input/output pair 0. + 0 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + EXTS_EN1 + External Sensor Enable for input/output pair 1. + 1 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + EXTS_EN2 + External Sensor Enable for input/output pair 2. + 2 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + EXTS_EN3 + External Sensor Enable for input/output pair 3. + 3 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + EXTS_EN4 + External Sensor Enable for input/output pair 4. + 4 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + EXTS_EN5 + External Sensor Enable for input/output pair 5. + 5 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + EXTCNT + External Sensor Error Counter. These bits set the number of external sensor accepted mismatches that have to occur within a single bit period before an external sensor alarm is triggered. + 16 + 5 + + + EXTFRQ + External Sensor Frequency. These bits define the frequency at which the external sensors are clocked to/from the EXTS_IN and EXTS_OUT pair. + 21 + 3 + + + freq2000Hz + Div 4 (2000Hz). + 0 + + + freq1000Hz + Div 8 (1000Hz). + 1 + + + freq500Hz + Div 16 (500Hz). + 2 + + + freq250Hz + Div 32 (250Hz). + 3 + + + freq125Hz + Div 64 (125Hz). + 4 + + + freq63Hz + Div 128 (63Hz). + 5 + + + freq31Hz + Div 256 (31Hz). + 6 + + + RFU + Reserved. Do not use. + 7 + + + + + DIVCLK + Clock Divide. These bits are used to divide the 8KHz input clock. The resulting divided clock is used for all logic within the Security Monitor Block. Note: If the input clock is divided with these bits, the error count threshold table and output frequency will be affected accordingly with the same divide factor. + 24 + 3 + + + div1 + Divide by 1 (8000 Hz). + 0 + + + div2 + Divide by 2 (4000 Hz). + 1 + + + div4 + Divide by 4 (2000 Hz). + 2 + + + div8 + Divide by 8 (1000 Hz). + 3 + + + div16 + Divide by 16 (500 Hz). + 4 + + + div32 + Divide by 32 (250 Hz). + 5 + + + div64 + Divide by 64 (125 Hz). + 6 + + + + + BUSY + Busy. This bit is set to 1 by hardware after EXTSCN register is written to. This bit is automatically cleared to 0 after this register information has been transferred to the security monitor domain. + 30 + 1 + read-only + + + idle + Idle. + 0 + + + busy + Update in Progress. + 1 + + + + + LOCK + Lock Register. Once locked, the EXTSCN register can no longer be modified. Only a battery disconnect will clear this bit. VBAT powers this register. + 31 + 1 + + + unlocked + Unlocked. + 0 + + + locked + Locked. + 1 + + + + + + + INTSCN + Internal Sensor Control Register. + 0x04 + 0x7F00FFF7 + + + SHIELD_EN + Die Shield Enable. + 0 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + TEMP_EN + Temperature Sensor Enable. + 1 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + VBAT_EN + Battery Monitor Enable. + 2 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + LOTEMP_SEL + Low Temperature Detection Select. + 16 + 1 + + + neg50C + -50 degrees C. + 0 + + + neg30C + -30 degrees C. + 1 + + + + + VCORELOEN + VCORE Undervoltage Detect Enable. + 18 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + VCOREHIEN + VCORE Overvoltage Detect Enable. + 19 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + VDDLOEN + VDD Undervoltage Detect Enable. + 20 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + VDDHIEN + VDD Overvoltage Detect Enable. + 21 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + VGLEN + Voltage Glitch Detection Enable. + 22 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + LOCK + Lock Register. Once locked, the INTSCN register can no longer be modified. Only a battery disconnect will clear this bit. VBAT powers this register. + 31 + 1 + + + unlocked + Unlocked. + 0 + + + locked + Locked. + 1 + + + + + + + SECALM + Security Alarm Register. + 0x08 + 0x00000000 + 0x00000000 + + + DRS + Destructive Reset Trigger. Setting this bit will generate a DRS. This bit is self-cleared by hardware. + 0 + 1 + + + complete + No operation/complete. + 0 + + + start + Start operation. + 1 + + + + + KEYWIPE + Key Wipe Trigger. Set to 1 to initiate a wipe of the AES key register. It does not reset the part, or log a timestamp. AES and DES registers are not affected by this bit. This bit is automatically cleared to 0 after the keys have been wiped. + 1 + 1 + + + complete + No operation/complete. + 0 + + + start + Start operation. + 1 + + + + + SHIELDF + Die Shield Flag. + 2 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + LOTEMP + Low Temperature Detect. + 3 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + HITEMP + High Temperature Detect. + 4 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + BATLO + Battery Undervoltage Detect. + 5 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + BATHI + Battery Overvoltage Detect. + 6 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTF + External Sensor Flag. This bit is set to 1 when any of the EXTSTAT bits are set. + 7 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + VDDLO + VDD Undervoltage Detect Flag. + 8 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + VCORELO + VCORE Undervoltage Detect Flag. + 9 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + VCOREHI + VCORE Overvoltage Detect Flag. + 10 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + VDDHI + VDD Overvoltage Flag. + 11 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + VGL + Voltage Glitch Detection Flag. + 12 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSTAT0 + External Sensor 0 Detect. The tamper detect is only active when it is enabled. This bits needs to be cleared in software after a tamper event to re-arm the sensor. + 16 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSTAT1 + External Sensor 1 Detect. The tamper detect is only active when it is enabled. This bits needs to be cleared in software after a tamper event to re-arm the sensor. + 17 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSTAT2 + External Sensor 2 Detect. The tamper detect is only active when it is enabled. This bits needs to be cleared in software after a tamper event to re-arm the sensor. + 18 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSTAT3 + External Sensor 3 Detect. The tamper detect is only active when it is enabled. This bits needs to be cleared in software after a tamper event to re-arm the sensor. + 19 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSTAT4 + External Sensor 4 Detect. The tamper detect is only active when it is enabled. This bits needs to be cleared in software after a tamper event to re-arm the sensor. + 20 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSTAT5 + External Sensor 5 Detect. The tamper detect is only active when it is enabled. This bits needs to be cleared in software after a tamper event to re-arm the sensor. + 21 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSWARN0 + External Sensor 0 Warning Ready flag. The tamper detect warning flags are set, regardless of whether the external sensors are enabled. + 24 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSWARN1 + External Sensor 1 Warning Ready flag. The tamper detect warning flags are set, regardless of whether the external sensors are enabled. + 25 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSWARN2 + External Sensor 2 Warning Ready flag. The tamper detect warning flags are set, regardless of whether the external sensors are enabled. + 26 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSWARN3 + External Sensor 3 Warning Ready flag. The tamper detect warning flags are set, regardless of whether the external sensors are enabled. + 27 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSWARN4 + External Sensor 4 Warning Ready flag. The tamper detect warning flags are set, regardless of whether the external sensors are enabled. + 28 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSWARN5 + External Sensor 5 Warning Ready flag. The tamper detect warning flags are set, regardless of whether the external sensors are enabled. + 29 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + + + SECDIAG + Security Diagnostic Register. + 0x0C + read-only + 0x00000001 + 0xFFC0FE02 + + + BORF + Battery-On-Reset Flag. This bit is set once the back up battery is conneted. + 0 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + SHIELDF + Die Shield Flag. + 2 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + LOTEMP + Low Temperature Detect. + 3 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + HITEMP + High Temperature Detect. + 4 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + BATLO + Battery Undervoltage Detect. + 5 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + BATHI + Battery Overvoltage Detect. + 6 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + DYNF + Dynamic Sensor Flag. This bit is set to 1 when any of the EXTSTAT bits are set. + 7 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + AESKT + AES Key Transfer. This bit is set to 1 when AES Key has been transferred from the TRNG to the battery backed AES key register. This bit can only be reset by a BOR. + 8 + 1 + + + incomplete + Key has not been transferred. + 0 + + + complete + Key has been transferred. + 1 + + + + + EXTSTAT0 + External Sensor 0 Detect. + 16 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSTAT1 + External Sensor 1 Detect. + 17 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSTAT2 + External Sensor 2 Detect. + 18 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSTAT3 + External Sensor 3 Detect. + 19 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSTAT4 + External Sensor 4 Detect. + 20 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + EXTSTAT5 + External Sensor 5 Detect. + 21 + 1 + + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + + + DLRTC + DRS Log RTC Value. This register contains the 32 bit value in the RTC second register when the last DRS event occurred. + 0x10 + read-only + 0x00000000 + + + DLRTC + DRS Log RTC Value. This register contains the 32 bit value in the RTC second register when the last DRS event occured. + 0 + 32 + + + + + SECST + Security Monitor Status Register. + 0x34 + read-only + + + EXTSRS + External Sensor Control Register Status. + 0 + 1 + + + allowed + Access authorized. + 0 + + + notAllowed + Access not authorized. + 1 + + + + + INTSRS + Internal Sensor Control Register Status. + 1 + 1 + + + allowed + Access authorized. + 0 + + + notAllowed + Access not authorized. + 1 + + + + + SECALRS + Security Alarm Register Status. + 2 + 1 + + + allowed + Access authorized. + 0 + + + notAllowed + Access not authorized. + 1 + + + + + + + + + + SPI17Y + SPI peripheral. + 0x40046000 + + 0x00 + 0x1000 + registers + + + SPI0 + 16 + + + + DATA32 + Register for reading and writing the FIFO. + 0x00 + 32 + read-write + + + DATA + Read to pull from RX FIFO, write to put into TX FIFO. + 0 + 32 + + + + + 2 + 2 + DATA16[%s] + Register for reading and writing the FIFO. + DATA32 + 0x00 + 16 + read-write + + + DATA + Read to pull from RX FIFO, write to put into TX FIFO. + 0 + 16 + + + + + 4 + 1 + DATA8[%s] + Register for reading and writing the FIFO. + DATA32 + 0x00 + 8 + read-write + + + DATA + Read to pull from RX FIFO, write to put into TX FIFO. + 0 + 8 + + + + + CTRL0 + Register for controlling SPI peripheral. + 0x04 + read-write + + + EN + SPI Enable. + 0 + 1 + + + dis + SPI is disabled. + 0 + + + en + SPI is enabled. + 1 + + + + + MASTER + Master Mode Enable. + 1 + 1 + + + dis + SPI is Slave mode. + 0 + + + en + SPI is Master mode. + 1 + + + + + SS_IO + Slave Select 0, IO direction, to support Multi-Master mode,Slave Select 0 can be input in Master mode. This bit has no effect in slave mode. + 4 + 1 + + + output + Slave select 0 is output. + 0 + + + input + Slave Select 0 is input, only valid if MMEN=1. + 1 + + + + + START + Start Transmit. + 5 + 1 + + + start + Master Initiates a transaction, this bit is self clearing when transactions are done. If a transaction cimpletes, and the TX FIFO is empty, the Master halts, if a transaction completes, and the TX FIFO is not empty, the Master initiates another transaction. + 1 + + + + + SS_CTRL + Start Select Control. Used in Master mode to control the behavior of the Slave Select signal at the end of a transaction. + 8 + 1 + + + DEASSERT + SPI De-asserts Slave Select at the end of a transaction. + 0 + + + ASSERT + SPI leaves Slave Select asserted at the end of a transaction. + 1 + + + + + SS + Slave Select, when in Master mode selects which Slave devices are selected. More than one Slave device can be selected. + 16 + 4 + + + SS0 + SS0 is selected. + 0x1 + + + SS1 + SS1 is selected. + 0x2 + + + SS2 + SS2 is selected. + 0x4 + + + SS3 + SS3 is selected. + 0x8 + + + + + + + CTRL1 + Register for controlling SPI peripheral. + 0x08 + read-write + + + TX_NUM_CHAR + Nubmer of Characters to transmit. + 0 + 16 + + + RX_NUM_CHAR + Nubmer of Characters to receive. + 16 + 16 + + + + + CTRL2 + Register for controlling SPI peripheral. + 0x0C + read-write + + + CPHA + Clock Phase. + 0 + 1 + + + Rising_Edge + Data Sampled on clock rising edge. Use when in SPI Mode 0 and Mode 2 + 0 + + + Falling_Edge + Data Sampled on clock falling edge. Use when in SPI Mode 1 and Mode 3 + 1 + + + + + CPOL + Clock Polarity. + 1 + 1 + + + Normal + Normal Clock. Use when in SPI Mode 0 and Mode 1 + 0 + + + Inverted + Inverted Clock. Use when in SPI Mode 2 and Mode 3 + 1 + + + + + SCLK_INV + Reserved - Must Always Be Cleared to 0. + 4 + 1 + + + NUMBITS + Number of Bits per character. + 8 + 4 + + + 0 + 16 bits per character. + 0 + + + + + DATA_WIDTH + SPI Data width. + 12 + 2 + + + Mono + 1 data pin. + 0 + + + Dual + 2 data pins. + 1 + + + Quad + 4 data pins. + 2 + + + + + THREE_WIRE + Three Wire mode. MOSI/MISO pin(s) shared. Only Mono mode suports Four-Wire. + 15 + 1 + + + dis + Use four wire mode (Mono only). + 0 + + + en + Use three wire mode. + 1 + + + + + SS_POL + Slave Select Polarity, each Slave Select can have unique polarity. + 16 + 8 + + + SS0_high + SS0 active high. + 0x1 + + + SS1_high + SS1 active high. + 0x2 + + + SS2_high + SS2 active high. + 0x4 + + + SS3_high + SS3 active high. + 0x8 + + + + + SRPOL + Slave Ready Polarity, each Slave Ready can have unique polarity. + 24 + 8 + + + SR0_high + SR0 active high. + 0x1 + + + SR1_high + SR1 active high. + 0x2 + + + SR2_high + SR2 active high. + 0x4 + + + SR3_high + SR3 active high. + 0x8 + + + SR4_high + SR4 active high. + 0x10 + + + SR5_high + SR5 active high. + 0x20 + + + SR6_high + SR6 active high. + 0x40 + + + SR7_high + SR7 active high. + 0x80 + + + + + + + SS_TIME + Register for controlling SPI peripheral/Slave Select Timing. + 0x10 + read-write + + + PRE + Slave Select Pre delay 1. + 0 + 8 + + + 256 + 256 system clocks between SS active and first serial clock edge. + 0 + + + + + POST + Slave Select Post delay 2. + 8 + 8 + + + 256 + 256 system clocks between last serial clock edge and SS inactive. + 0 + + + + + INACT + Slave Select Inactive delay. + 16 + 8 + + + 256 + 256 system clocks between transactions. + 0 + + + + + + + CLK_CFG + Register for controlling SPI clock rate. + 0x14 + read-write + + + LO + Low duty cycle control. In timer mode, reload[7:0]. + 0 + 8 + + + Dis + Duty cycle control of serial clock generation is disabled. + 0 + + + + + HI + High duty cycle control. In timer mode, reload[15:8]. + 8 + 8 + + + Dis + Duty cycle control of serial clock generation is disabled. + 0 + + + + + SCALE + System Clock scale factor. Scales the AMBA clock by 2^SCALE before generating serial clock. + 16 + 4 + + + + + DMA + Register for controlling DMA. + 0x1C + read-write + + + TX_FIFO_LEVEL + Transmit FIFO level that will trigger a DMA request, also level for threshold status. When TX FIFO has fewer than this many bytes, the associated events and conditions are triggered. + 0 + 5 + + + TX_FIFO_EN + Transmit FIFO enabled for SPI transactions. + 6 + 1 + + + dis + Transmit FIFO is not enabled. + 0 + + + en + Transmit FIFO is enabled. + 1 + + + + + TX_FIFO_CLEAR + Clear TX FIFO, clear is accomplished by resetting the read and write + pointers. This should be done when FIFO is not being accessed on the SPI side. + . + 7 + 1 + + + CLEAR + Clear the Transmit FIFO, clears any pending TX FIFO status. + 1 + + + + + TX_FIFO_CNT + Count of entries in TX FIFO. + 8 + 6 + read-only + + + TX_DMA_EN + TX DMA Enable. + 15 + 1 + + + DIS + TX DMA requests are disabled, andy pending DMA requests are cleared. + 0 + + + en + TX DMA requests are enabled. + 1 + + + + + RX_FIFO_LEVEL + Receive FIFO level that will trigger a DMA request, also level for threshold status. When RX FIFO has more than this many bytes, the associated events and conditions are triggered. + 16 + 5 + + + RX_FIFO_EN + Receive FIFO enabled for SPI transactions. + 22 + 1 + + + DIS + Receive FIFO is not enabled. + 0 + + + en + Receive FIFO is enabled. + 1 + + + + + RX_FIFO_CLEAR + Clear RX FIFO, clear is accomplished by resetting the read and write pointers. This should be done when FIFO is not being accessed on the SPI side. + 23 + 1 + + + CLEAR + Clear the Receive FIFO, clears any pending RX FIFO status. + 1 + + + + + RX_FIFO_CNT + Count of entries in RX FIFO. + 24 + 6 + read-only + + + RX_DMA_EN + RX DMA Enable. + 31 + 1 + + + dis + RX DMA requests are disabled, any pending DMA requests are cleared. + 0 + + + en + RX DMA requests are enabled. + 1 + + + + + + + INT_FL + Register for reading and clearing interrupt flags. All bits are write 1 to clear. + 0x20 + read-write + + + TX_THRESH + TX FIFO Threshold Crossed. + 0 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + TX_EMPTY + TX FIFO Empty. + 1 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + RX_THRESH + RX FIFO Threshold Crossed. + 2 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + RX_FULL + RX FIFO FULL. + 3 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + SSA + Slave Select Asserted. + 4 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + SSD + Slave Select Deasserted. + 5 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + FAULT + Multi-Master Mode Fault. + 8 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + ABORT + Slave Abort Detected. + 9 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + M_DONE + Master Done, set when SPI Master has completed any transactions. + 11 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + TX_OVR + Transmit FIFO Overrun, set when the AMBA side attempts to write data to a full transmit FIFO. + 12 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + TX_UND + Transmit FIFO Underrun, set when the SPI side attempts to read data from an empty transmit FIFO. + 13 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + RX_OVR + Receive FIFO Overrun, set when the SPI side attempts to write to a full receive FIFO. + 14 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + RX_UND + Receive FIFO Underrun, set when the AMBA side attempts to read data from an empty receive FIFO. + 15 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + + + INT_EN + Register for enabling interrupts. + 0x24 + read-write + + + TX_THRESH + TX FIFO Threshold interrupt enable. + 0 + 1 + + + dis + Interrupt is disabled. + 0 + + + en + Interrupt is enabled. + 1 + + + + + TX_EMPTY + TX FIFO Empty interrupt enable. + 1 + 1 + + + dis + Interrupt is disabled. + 0 + + + en + Interrupt is enabled. + 1 + + + + + RX_THRESH + RX FIFO Threshold Crossed interrupt enable. + 2 + 1 + + + dis + Interrupt is disabled. + 0 + + + en + Interrupt is enabled. + 1 + + + + + RX_FULL + RX FIFO FULL interrupt enable. + 3 + 1 + + + dis + Interrupt is disabled. + 0 + + + en + Interrupt is enabled. + 1 + + + + + SSA + Slave Select Asserted interrupt enable. + 4 + 1 + + + dis + Interrupt is disabled. + 0 + + + en + Interrupt is enabled. + 1 + + + + + SSD + Slave Select Deasserted interrupt enable. + 5 + 1 + + + dis + Interrupt is disabled. + 0 + + + en + Interrupt is enabled. + 1 + + + + + FAULT + Multi-Master Mode Fault interrupt enable. + 8 + 1 + + + dis + Interrupt is disabled. + 0 + + + en + Interrupt is enabled. + 1 + + + + + ABORT + Slave Abort Detected interrupt enable. + 9 + 1 + + + dis + Interrupt is disabled. + 0 + + + en + Interrupt is enabled. + 1 + + + + + M_DONE + Master Done interrupt enable. + 11 + 1 + + + dis + Interrupt is disabled. + 0 + + + en + Interrupt is enabled. + 1 + + + + + TX_OVR + Transmit FIFO Overrun interrupt enable. + 12 + 1 + + + dis + Interrupt is disabled. + 0 + + + en + Interrupt is enabled. + 1 + + + + + TX_UND + Transmit FIFO Underrun interrupt enable. + 13 + 1 + + + dis + Interrupt is disabled. + 0 + + + en + Interrupt is enabled. + 1 + + + + + RX_OVR + Receive FIFO Overrun interrupt enable. + 14 + 1 + + + dis + Interrupt is disabled. + 0 + + + en + Interrupt is enabled. + 1 + + + + + RX_UND + Receive FIFO Underrun interrupt enable. + 15 + 1 + + + dis + Interrupt is disabled. + 0 + + + en + Interrupt is enabled. + 1 + + + + + + + WAKE_FL + Register for wake up flags. All bits in this register are write 1 to clear. + 0x28 + read-write + + + TX_THRESH + Wake on TX FIFO Threshold Crossed. + 0 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + TX_EMPTY + Wake on TX FIFO Empty. + 1 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + RX_THRESH + Wake on RX FIFO Threshold Crossed. + 2 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + RX_FULL + Wake on RX FIFO Full. + 3 + 1 + + + clear + Flag is set when value read is 1. Write 1 to clear this flag. + 1 + + + + + + + WAKE_EN + Register for wake up enable. + 0x2C + read-write + + + TX_THRESH + Wake on TX FIFO Threshold Crossed Enable. + 0 + 1 + + + dis + Wakeup source disabled. + 0 + + + en + Wakeup source enabled. + 1 + + + + + TX_EMPTY + Wake on TX FIFO Empty Enable. + 1 + 1 + + + dis + Wakeup source disabled. + 0 + + + en + Wakeup source enabled. + 1 + + + + + RX_THRESH + Wake on RX FIFO Threshold Crossed Enable. + 2 + 1 + + + dis + Wakeup source disabled. + 0 + + + en + Wakeup source enabled. + 1 + + + + + RX_FULL + Wake on RX FIFO Full Enable. + 3 + 1 + + + dis + Wakeup source disabled. + 0 + + + en + Wakeup source enabled. + 1 + + + + + + + STAT + SPI Status register. + 0x30 + read-only + + + BUSY + SPI active status. In Master mode, set when transaction starts, cleared when last bit of last character is acted upon and Slave Select de-assertion would occur. In Slave mode, set when Slave Select is asserted, cleared when Slave Select is de-asserted. Not used in Timer mode. + 0 + 1 + + + not + SPI not active. + 0 + + + active + SPI active. + 1 + + + + + + + + + + SPIMSS + Serial Peripheral Interface. + SPIMSS0_ + 0x40018000 + + 0x00 + 0x1000 + registers + + + + DATA16 + SPI 16-bit Data Access + 0x00 + 16 + read-write + + + DATA + SPI data. + 0 + 16 + + + + + 2 + 1 + DATA8[%s] + SPI Data 8-bit access + DATA16 + 0x00 + 8 + read-write + + + DATA + SPI data. + 0 + 8 + + + + + CTRL + SPI Control Register. + 0x04 + + + SPIEN + SPI Enable. + 0 + 1 + + dis_en_enum + + disable + 0 + + + enable + 1 + + + + + MMEN + SPI Master Mode Enable. + 1 + 1 + + slv_mst_enum + + slave + 0 + + + master + 1 + + + + + WOR + Wired OR (open drain) Enable. + 2 + 1 + + dis_en_enum + + disable + 0 + + + enable + 1 + + + + + CLKPOL + Clock Polarity. + 3 + 1 + + spi_pol_enum + + idleLo + SCLK idles Low (0) after character transmission/reception. + 0 + + + idleHi + SCLK idles High (1) after character transmission/reception. + 1 + + + + + PHASE + Phase Select. + 4 + 1 + + spi_phase_enum + + activeEdge + Transmit on active edge of SCLK. + 0 + + + inactiveEdge + Transmit on inactive edge of SCLK. + 1 + + + + + BIRQ + Baud Rate Generator Timer Interrupt Request. + 5 + 1 + + dis_en_enum + + disable + 0 + + + enable + 1 + + + + + STR + Start SPI Interrupt. + 6 + 1 + + start_op_enum + + complete + No operation/complete. + 0 + + + start + Start operation. + 1 + + + + + IRQE + Interrupt Request Enable. + 7 + 1 + + dis_en_enum + + disable + 0 + + + enable + 1 + + + + + + + STATUS + SPI Status Register. + 0x08 + 0x00000001 + + + SLAS + Slave Select. If the SPI is in slave mode, this bit indicates if the SPI is selected. If the SPI is in master mode this bit has no meaning. + 0 + 1 + read-only + + sel_enum + + selected + 0 + + + notSelected + 1 + + + + + TXST + Transmit Status. + 1 + 1 + read-only + + busy_enum + + idle + 0 + + + busy + 1 + + + + + TUND + Transmit Underrun. + 2 + 1 + oneToClear + + event_flag_enum + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + ROVR + Receive Overrun. + 3 + 1 + + event_flag_enum + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + ABT + Slave Mode Transaction Abort. + 4 + 1 + + event_flag_enum + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + COL + Collision. + 5 + 1 + + event_flag_enum + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + TOVR + Transmit Overrun. + 6 + 1 + + event_flag_enum + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + IRQ + SPI Interrupt Request. + 7 + 1 + oneToClear + + flag_enum + + inactive + No interrupt is pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + + + MOD + SPI Mode Register. + 0x0C + + + SSV + Slave Select Value. + 0 + 1 + + lo_hi_enum + + lo + The SSEL pin will be driven low. + 0 + + + hi + The SSEL pin will be driven high. + 1 + + + + + SSIO + Slave Select I/O. + 1 + 1 + + input_output_enum + + input + 0 + + + output + 1 + + + + + NUMBITS + 2 + 4 + + spi_bits_enum + + bits16 + 0 + + + bits1 + 1 + + + bits2 + 2 + + + bits3 + 3 + + + bits4 + 4 + + + bits5 + 5 + + + bits6 + 6 + + + bits7 + 7 + + + bits8 + 8 + + + bits9 + 9 + + + bits10 + 10 + + + bits11 + 11 + + + bits12 + 12 + + + bits13 + 13 + + + bits14 + 14 + + + bits15 + 15 + + + + + TX_LJ + Transmit Left Justify. + 7 + 1 + + dis_en_enum + + disable + 0 + + + enable + 1 + + + + + SSL1 + Slave Select 1. If SPI is enabled and in master mode, the SSEL_1 is driven according to this bit. + 8 + 1 + + hi_lo_enum + + hi + High. + 0 + + + lo + Low. + 1 + + + + + SSL2 + Slave Select 2. If SPI is enabled and in master mode, the SSEL_2 is driven according to this bit. + 9 + 1 + + hi_lo_enum + + hi + High. + 0 + + + lo + Low. + 1 + + + + + SSL3 + Slave Select 3. If SPI is enabled and in master mode, the SSEL_3 is driven according to this bit. + 10 + 1 + + hi_lo_enum + + hi + High. + 0 + + + lo + Low. + 1 + + + + + + + BRG + Baud Rate Reload Value. The SPI Baud Rate register is a 16-bit reload value for the SPI Baud Rate Generator. The reload value must be greater than or equal to 0002H for proper SPI operation (maximum baud rate is PCLK frequency divided by 4). + 0x14 + 0x0000FFFF + + + BRG + Baud Rate Reload Value. + 0 + 16 + + + + + DMA + SPI DMA Register. + 0x18 + 0x00070007 + + + TX_FIFO_LEVEL + Transmit FIFO Level. Set the number of free entries in the TxFIFO when a TxDMA request occurs. + 0 + 3 + + fifo_level_enum + + entry1 + 0 + + + entries2 + 1 + + + entries3 + 2 + + + entries4 + 3 + + + entries5 + 4 + + + entries6 + 5 + + + entries7 + 6 + + + entries8 + 7 + + + + + TX_FIFO_CLEAR + Transmit FIFO Clear. + 4 + 1 + write-only + + start_op_enum + + complete + No operation/complete. + 0 + + + start + Start operation. + 1 + + + + + TX_FIFO_CNT + Transmit FIFO Count. + 8 + 4 + read-only + + + TX_DMA_EN + Transmit DMA Enable. + 15 + 1 + + dis_en_enum + + disable + 0 + + + enable + 1 + + + + + RX_FIFO_LEVEL + Receive FIFO Level. Sets the RX FIFO DMA request threshold. This configures the number of filled RxFIFO entries before activating an RxDMA request. + 16 + 3 + + fifo_level_enum + + entry1 + 0 + + + entries2 + 1 + + + entries3 + 2 + + + entries4 + 3 + + + entries5 + 4 + + + entries6 + 5 + + + entries7 + 6 + + + entries8 + 7 + + + + + RX_FIFO_CLEAR + Receive FIFO Clear. + 20 + 1 + + start_op_enum + + complete + No operation/complete. + 0 + + + start + Start operation. + 1 + + + + + RX_FIFO_CNT + Receive FIFO Count. + 24 + 4 + read-only + + + RX_DMA_EN + Receive DMA Enable. + 31 + 1 + + dis_en_enum + + disable + 0 + + + enable + 1 + + + + + + + I2S_CTRL + I2S Control Register. + 0x1C + + + I2S_EN + I2S Mode Enable. + 0 + 1 + + dis_en_enum + + disable + 0 + + + enable + 1 + + + + + I2S_MUTE + I2S Mute transmit. + 1 + 1 + + + normal + Normal Transmit. + 0 + + + replaced + Transmit data is replaced with 0. + 1 + + + + + I2S_PAUSE + I2S Pause transmit/receive. + 2 + 1 + + + normal + Normal Transmit. + 0 + + + halt + Halt transmit and receive FIFO and DMA access, transmit 0's. + 1 + + + + + I2S_MONO + I2S Monophonic Audio Mode. + 3 + 1 + + + stereophonic + Stereophonic audio. + 0 + + + monophonic + Monophonic audio format.Each transmit data word is replicated on both left/right channels. Receive data is taken from left channel, right channel receive data is ignored. + 1 + + + + + I2S_LJ + I2S Left Justify. + 4 + 1 + + + normal + Normal I2S audio protocol. + 0 + + + replaced + Audio data is synchronized with SSEL. + 1 + + + + + + + + + + TMR0 + 32-bit reloadable timer that can be used for timing and event counting. + Timers + 0x40010000 + + 0x00 + 0x1000 + registers + + + TMR0 + TMR0 IRQ + 5 + + + + CNT + Count. This register stores the current timer count. + 0x00 + 0x00000001 + + + CMP + Compare. This register stores the compare value, which is used to set the maximum count value to initiate a reload of the timer to 0x0001. + 0x04 + 0x0000FFFF + + + PWM + PWM. This register stores the value that is compared to the current timer count. + 0x08 + + + INTR + Clear Interrupt. Writing a value (0 or 1) to a bit in this register clears the associated interrupt. + 0x0C + oneToClear + + + IRQ_CLR + Clear Interrupt. + 0 + 1 + + + + + CN + Timer Control Register. + 0x10 + + + TMODE + Timer Mode. + 0 + 3 + + + oneShot + One Shot Mode. + 0 + + + continuous + Continuous Mode. + 1 + + + counter + Counter Mode. + 2 + + + pwm + PWM Mode. + 3 + + + capture + Capture Mode. + 4 + + + compare + Compare Mode. + 5 + + + gated + Gated Mode. + 6 + + + captureCompare + Capture/Compare Mode. + 7 + + + + + PRES + Prescaler. Set the Timer's prescaler value. The prescaler divides the PCLK input to the timer and sets the Timer's Count Clock, F_CNT_CLK = PCLK(HZ)/prescaler. The Timer's prescaler setting is a 4-bit value with pres3:pres[2:0]. + 3 + 3 + + + div1 + Divide by 1. + 0 + + + div2 + Divide by 2. + 1 + + + div4 + Divide by 4. + 2 + + + div8 + Divide by 8. + 3 + + + div16 + Divide by 16. + 4 + + + div32 + Divide by 32. + 5 + + + div64 + Divide by 64. + 6 + + + div128 + Divide by 128. + 7 + + + + + TPOL + Timer input/output polarity bit. + 6 + 1 + + + activeHi + Active High. + 0 + + + activeLo + Active Low. + 1 + + + + + TEN + Timer Enable. + 7 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + PRES3 + MSB of prescaler value. + 8 + 1 + + + PWMSYNC + Timer PWM Synchronization Mode Enable. + 9 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + NOLHPOL + Timer PWM output 0A polarity bit. + 10 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + NOLLPOL + Timer PWM output 0A' polarity bit. + 11 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + PWMCKBD + Timer PWM output 0A Mode Disable. + 12 + 1 + + + dis + Disable. + 1 + + + en + Enable. + 0 + + + + + + + NOLCMP + Timer Non-Overlapping Compare Register. + 0x14 + + + NOLLCMP + Non-overlapping Low Compare. The 8-bit timer count value of non-overlapping time between falling edge of PWM output 0A and next rising edge of PWM output 0A'. + 0 + 8 + + + NOLHCMP + Non-overlapping High Compare. The 8-bit timer count value of non-overlapping time between falling edge of PWM output 0A' and next rising edge of PWM output 0A. + 8 + 8 + + + + + + + + TMR1 + 32-bit reloadable timer that can be used for timing and event counting. 1 + 0x40011000 + + TMR1 + TMR1 IRQ + 6 + + + + + TMR2 + 32-bit reloadable timer that can be used for timing and event counting. 2 + 0x40012000 + + TMR2 + TMR2 IRQ + 7 + + + + + UART0 + UART + 0x40042000 + + 0 + 0x1000 + registers + + + UART0 + UART0 IRQ + 14 + + + + CTRL + Control Register. + 0x00 + 32 + + + ENABLE + UART enabled, to enable UART block, it is used to drive a gated clock in order to save power consumption when UART is not used. FIFOs are flushed when UART is disabled. + 0 + 1 + + + dis + UART disabled. FIFOs are flushed. Clock is gated off for power savings. + 0 + + + en + UART enabled. + 1 + + + + + PARITY_EN + Enable/disable Parity bit (9th character). + 1 + 1 + + + dis + No Parity + 0 + + + en + Parity enabled as 9th bit + 1 + + + + + PARITY + When PARITY_EN=1, selects odd, even, Mark or Space parity. + Mark parity = always 1; Space parity = always 0. + 2 + 2 + + + Even + Even parity selected. + 0 + + + ODD + Odd parity selected. + 1 + + + MARK + Mark parity selected. + 2 + + + SPACE + Space parity selected. + 3 + + + + + PARMD + Selects parity based on 1s or 0s count (when PARITY_EN=1). + 4 + 1 + + + 1 + Parity calculation is based on number of 1s in frame. + 0 + + + 0 + Parity calculation is based on number of 0s in frame. + 1 + + + + + TX_FLUSH + Flushes the TX FIFO buffer. + 5 + 1 + + + RX_FLUSH + Flushes the RX FIFO buffer. + 6 + 1 + + + BITACC + If set, bit accuracy is selected, in this case the bit duration is the same for all the bits with the optimal accuracy. But the frame duration can have a significant deviation from the expected baudrate.If clear, frame accuracy is selected, therefore bits can have different duration in order to guarantee the minimum frame deviation. + 7 + 1 + + + FRAME + Frame accuracy. + 0 + + + BIT + Bit accuracy. + 1 + + + + + CHAR_SIZE + Selects UART character size. + 8 + 2 + + + 5 + 5 bits. + 0 + + + 6 + 6 bits. + 1 + + + 7 + 7 bits. + 2 + + + 8 + 8 bits. + 3 + + + + + STOPBITS + Selects the number of stop bits that will be generated. + 10 + 1 + + + 1 + 1 stop bit. + 0 + + + 1_5 + 1.5 stop bits. + 1 + + + + + FLOW_CTRL + Enables/disables hardware flow control. + 11 + 1 + + + en + HW Flow Control with RTS/CTS enabled + 1 + + + dis + HW Flow Control disabled + 0 + + + + + FLOW_POL + RTS/CTS polarity. + 12 + 1 + + + 0 + RTS/CTS asserted is logic 0. + 0 + + + 1 + RTS/CTS asserted is logic 1. + 1 + + + + + NULL_MODEM + NULL Modem Support (RTS/CTS and TXD/RXD swap). + 13 + 1 + + + DIS + Direct convention. + 0 + + + EN + Null Modem Mode. + 1 + + + + + BREAK + Break control bit. It causes a break condition to be transmitted to receiving UART. + 14 + 1 + + + DIS + Break characters are not generated. + 0 + + + EN + Break characters are sent(all the bits are at '0' including start/parity/stop). + 1 + + + + + CLKSEL + Baud Rate Clock Source Select. Selects the baud rate clock. + 15 + 1 + + + SYSTEM + System clock. + 0 + + + ALTERNATE + Alternate 7.3727MHz internal clock. Useful in low power modes when the system clock is slow. + 1 + + + + + RX_TO + RX Time Out. RX time out interrupt will occur after RXTO Uart + characters if RX-FIFO is not empty and RX FIFO has not been read. + 16 + 8 + + + + + THRESH_CTRL + Threshold Control register. + 0x04 + 32 + + + RX_FIFO_THRESH + RX FIFO Threshold Level.When the RX FIFO reaches this many bytes or higher, UARTn_INFTL.rx_fifo_level is set. + 0 + 6 + + + TX_FIFO_THRESH + TX FIFO Threshold Level. When the TX FIFO reaches this many bytes or higher, UARTn_INTFL.tx_fifo_level is set. + 8 + 6 + + + RTS_FIFO_THRESH + RTS threshold control. When the RX FIFO reaches this many bytes or higher, the RTS output signal is deasserted, informing the transmitting UART to stop sending data to this UART. + 16 + 6 + + + + + STATUS + Status Register. + 0x08 + 32 + read-only + + + TX_BUSY + Read-only flag indicating the UART transmit status. + 0 + 1 + read-only + + + RX_BUSY + Read-only flag indicating the UARTreceiver status. + 1 + 1 + read-only + + + PARITY + 9th Received bit state. This bit identifies the state of the 9th bit of received data. Only available for UART_CTRL.SIZE[1:0]=3. + 2 + 1 + read-only + + + BREAK + Received BREAK status. BREAKS is cleared when UART_STAT register is read. Received data input is held in spacing (logic 0) state for longer than a full word transmission time (that is, the total time of Start bit + data bits + Parity + Stop bits). + 3 + 1 + read-only + + + RX_EMPTY + Read-only flag indicating the RX FIFO state. + 4 + 1 + read-only + + + RX_FULL + Read-only flag indicating the RX FIFO state. + 5 + 1 + read-only + + + TX_EMPTY + Read-only flag indicating the TX FIFO state. + 6 + 1 + read-only + + + TX_FULL + Read-only flag indicating the TX FIFO state. + 7 + 1 + read-only + + + RX_FIFO_CNT + Indicates the number of bytes currently in the RX FIFO. + 8 + 6 + read-only + + + TX_FIFO_CNT + Indicates the number of bytes currently in the TX FIFO. + 16 + 6 + read-only + + + RX_TO + RX Timeout status. + 24 + 1 + read-only + + + + + INT_EN + Interrupt Enable Register. + 0x0C + 32 + + + RX_FRAME_ERROR + Enable for RX Frame Error Interrupt. + 0 + 1 + + + RX_PARITY_ERROR + Enable for RX Parity Error interrupt. + 1 + 1 + + + CTS_CHANGE + Enable for CTS signal change interrupt. + 2 + 1 + + + RX_OVERRUN + Enable for RX FIFO OVerrun interrupt. + 3 + 1 + + + RX_FIFO_THRESH + Enable for interrupt when RX FIFO reaches the number of bytes configured by the RXTHD field. + 4 + 1 + + + TX_FIFO_ALMOST_EMPTY + Enable for interrupt when TX FIFO has only one byte remaining. + 5 + 1 + + + TX_FIFO_THRESH + Enable for interrupt when TX FIFO reaches the number of bytes configured by the TXTHD field. + 6 + 1 + + + BREAK + Enable for received BREAK character interrupt. + 7 + 1 + + + RX_TIMEOUT + Enable for RX Timeout Interrupt. Trigger if there is no RX communication during n UART characters (n=UART_CN.RXTO). + 8 + 1 + + + LAST_BREAK + Enable for Last break character interrupt. + 9 + 1 + + + + + INT_FL + Interrupt Status Flags. + 0x10 + 32 + oneToClear + + + RX_FRAME_ERROR + FLAG for RX Frame Error Interrupt. + 0 + 1 + + + RX_PARITY_ERROR + FLAG for RX Parity Error interrupt. + 1 + 1 + + + CTS_CHANGE + FLAG for CTS signal change interrupt. + 2 + 1 + + + RX_OVERRUN + FLAG for RX FIFO Overrun interrupt. + 3 + 1 + + + RX_FIFO_THRESH + FLAG for interrupt when RX FIFO reaches the number of bytes configured by the RXTHD field. + 4 + 1 + + + TX_FIFO_ALMOST_EMPTY + FLAG for interrupt when TX FIFO has only one byte remaining. + 5 + 1 + + + TX_FIFO_THRESH + FLAG for interrupt when TX FIFO reaches the number of bytes configured by the TXTHD field. + 6 + 1 + + + BREAK + FLAG for received BREAK character interrupt. + 7 + 1 + + + RX_TIMEOUT + FLAG for RX Timeout Interrupt. Trigger if there is no RX communication during n UART characters (n=UART_CN.RXTO). + 8 + 1 + + + LAST_BREAK + FLAG for Last break character interrupt. + 9 + 1 + + + + + BAUD0 + Baud rate register. Integer portion. + 0x14 + 32 + + + IBAUD + Integer portion of baud rate divisor value. IBAUD = InputClock / (factor * Baud Rate Frequency). + 0 + 12 + + + FACTOR + FACTOR must be chosen to have IDIV>0. factor used in calculation = 128 >> FACTOR. + 16 + 2 + + + 128 + Baud Factor 128 + 0 + + + 64 + Baud Factor 64 + 1 + + + 32 + Baud Factor 32 + 2 + + + 16 + Baud Factor 16 + 3 + + + + + + + BAUD1 + Baud rate register. Decimal Setting. + 0x18 + 32 + + + DBAUD + Decimal portion of baud rate divisor value. DIV = InputClock/(factor*Baud Rate Frequency). DDIV=(DIV-IDIV)*128. + 0 + 12 + + + + + FIFO + FIFO Data buffer. + 0x1C + 32 + + + FIFO + Load/unload location for TX and RX FIFO buffers. + 0 + 8 + + + + + DMA + DMA Configuration. + 0x20 + 32 + + + TDMA_EN + TX DMA channel enable. + 0 + 1 + + + dis + DMA is disabled + 0 + + + en + DMA is enabled + 1 + + + + + RXDMA_EN + RX DMA channel enable. + 1 + 1 + + + dis + DMA is disabled + 0 + + + en + DMA is enabled + 1 + + + + + TXDMA_LEVEL + TX threshold for DMA transmission. + 8 + 6 + + + RXDMA_LEVEL + RX threshold for DMA transmission. + 16 + 6 + + + + + TX_FIFO + Transmit FIFO Status register. + 0x24 + 32 + + + DATA + Reading from this field returns the next character available at the + output of the TX FIFO (if one is available, otherwise 00h is returned). + 0 + 7 + + + + + + + + UART1 + UART 1 + 0x40043000 + + UART1 + UART1 IRQ + 15 + + + + + WDT0 + Watchdog Timer 0 + 0x40003000 + + 0x00 + 0x0400 + registers + + + WDT0 + 1 + + + + CTRL + Watchdog Timer Control Register. + 0x00 + 0x7FFFF000 + + + INT_PERIOD + Watchdog Interrupt Period. The watchdog timer will assert an interrupt, if enabled, if the CPU does not write the watchdog reset sequence to the WDT_RST register before the watchdog timer has counted this time period since the last timer reset. + 0 + 4 + + + wdt2pow31 + 2**31 clock cycles. + 0 + + + wdt2pow30 + 2**30 clock cycles. + 1 + + + wdt2pow29 + 2**29 clock cycles. + 2 + + + wdt2pow28 + 2**28 clock cycles. + 3 + + + wdt2pow27 + 2^27 clock cycles. + 4 + + + wdt2pow26 + 2**26 clock cycles. + 5 + + + wdt2pow25 + 2**25 clock cycles. + 6 + + + wdt2pow24 + 2**24 clock cycles. + 7 + + + wdt2pow23 + 2**23 clock cycles. + 8 + + + wdt2pow22 + 2**22 clock cycles. + 9 + + + wdt2pow21 + 2**21 clock cycles. + 10 + + + wdt2pow20 + 2**20 clock cycles. + 11 + + + wdt2pow19 + 2**19 clock cycles. + 12 + + + wdt2pow18 + 2**18 clock cycles. + 13 + + + wdt2pow17 + 2**17 clock cycles. + 14 + + + wdt2pow16 + 2**16 clock cycles. + 15 + + + + + RST_PERIOD + Watchdog Reset Period. The watchdog timer will assert a reset, if enabled, if the CPU does not write the watchdog reset sequence to the WDT_RST register before the watchdog timer has counted this time period since the last timer reset. + 4 + 4 + + + wdt2pow31 + 2**31 clock cycles. + 0 + + + wdt2pow30 + 2**30 clock cycles. + 1 + + + wdt2pow29 + 2**29 clock cycles. + 2 + + + wdt2pow28 + 2**28 clock cycles. + 3 + + + wdt2pow27 + 2^27 clock cycles. + 4 + + + wdt2pow26 + 2**26 clock cycles. + 5 + + + wdt2pow25 + 2**25 clock cycles. + 6 + + + wdt2pow24 + 2**24 clock cycles. + 7 + + + wdt2pow23 + 2**23 clock cycles. + 8 + + + wdt2pow22 + 2**22 clock cycles. + 9 + + + wdt2pow21 + 2**21 clock cycles. + 10 + + + wdt2pow20 + 2**20 clock cycles. + 11 + + + wdt2pow19 + 2**19 clock cycles. + 12 + + + wdt2pow18 + 2**18 clock cycles. + 13 + + + wdt2pow17 + 2**17 clock cycles. + 14 + + + wdt2pow16 + 2**16 clock cycles. + 15 + + + + + WDT_EN + Watchdog Timer Enable. + 8 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + INT_FLAG + Watchdog Timer Interrupt Flag. + 9 + 1 + oneToClear + + + inactive + No interrupt is pending. + 0 + + + pending + An interrupt is pending. + 1 + + + + + INT_EN + Watchdog Timer Interrupt Enable. + 10 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + RST_EN + Watchdog Timer Reset Enable. + 11 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + + + + RST_FLAG + Watchdog Timer Reset Flag. + 31 + 1 + + read-write + + noEvent + The event has not occurred. + 0 + + + occurred + The event has occurred. + 1 + + + + + + + RST + Watchdog Timer Reset Register. + 0x04 + write-only + + + WDT_RST + Writing the watchdog counter 'reset sequence' to this register resets the watchdog counter. If the watchdog count exceeds INT_PERIOD then a watchdog interrupt will occur, if enabled. If the watchdog count exceeds RST_PERIOD then a watchdog reset will occur, if enabled. + 0 + 8 + + + seq0 + The first value to be written to reset the WDT. + 0x000000A5 + + + seq1 + The second value to be written to reset the WDT. + 0x0000005A + + + + + + + + + + diff --git a/bsp/maxim/MAX32660_EVSYS/rtconfig.py b/bsp/maxim/MAX32660_EVSYS/rtconfig.py index 3d7c28a68c..97130e34f5 100644 --- a/bsp/maxim/MAX32660_EVSYS/rtconfig.py +++ b/bsp/maxim/MAX32660_EVSYS/rtconfig.py @@ -13,7 +13,7 @@ if os.getenv('RTT_CC'): if CROSS_TOOL == 'gcc': PLATFORM = 'gcc' - EXEC_PATH = r'C:\Users\XXYYZZ' + EXEC_PATH = r'.' elif CROSS_TOOL == 'keil': PLATFORM = 'armcc' EXEC_PATH = 'C:/Keil_v5' @@ -34,13 +34,14 @@ if PLATFORM == 'gcc': 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 -ffunction-sections -fdata-sections' + DEVICE = ' -mcpu=cortex-m4 -mthumb' CFLAGS = DEVICE AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp' LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' diff --git a/bsp/maxim/libraries/MAX32660PeriphDriver/CMSIS/Device/Maxim/MAX32660/Source/GCC/startup_max32660.S b/bsp/maxim/libraries/MAX32660PeriphDriver/CMSIS/Device/Maxim/MAX32660/Source/GCC/startup_max32660.S index c7ca195d79..9b9c71de9b 100644 --- a/bsp/maxim/libraries/MAX32660PeriphDriver/CMSIS/Device/Maxim/MAX32660/Source/GCC/startup_max32660.S +++ b/bsp/maxim/libraries/MAX32660PeriphDriver/CMSIS/Device/Maxim/MAX32660/Source/GCC/startup_max32660.S @@ -223,7 +223,7 @@ Reset_Handler: blx r0 /* Transfer control to users main program */ - ldr r0, =main + ldr r0, =entry blx r0 .SPIN: From db61c0d3776fb8f9b7de2a8f5c6ad916f49f3933 Mon Sep 17 00:00:00 2001 From: supperthomas <78900636@qq.com> Date: Sat, 27 Feb 2021 00:15:53 +0800 Subject: [PATCH 08/17] [bsp/max32660] remove the microlib about keil --- bsp/maxim/MAX32660_EVSYS/project.uvoptx | 34 ++++------------ bsp/maxim/MAX32660_EVSYS/project.uvprojx | 2 +- bsp/maxim/MAX32660_EVSYS/template.uvprojx | 2 +- .../Maxim/MAX32660/Source/system_max32660.c | 39 ++++++++++--------- 4 files changed, 30 insertions(+), 47 deletions(-) diff --git a/bsp/maxim/MAX32660_EVSYS/project.uvoptx b/bsp/maxim/MAX32660_EVSYS/project.uvoptx index ff7f9de14e..a8359d025b 100644 --- a/bsp/maxim/MAX32660_EVSYS/project.uvoptx +++ b/bsp/maxim/MAX32660_EVSYS/project.uvoptx @@ -117,26 +117,6 @@ BIN\CMSIS_AGDI.dll - - 0 - ARMRTXEVENTFLAGS - -L70 -Z18 -C0 -M0 -T1 - - - 0 - DLGTARM - (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) - - - 0 - ARMDBGFLAGS - - - - 0 - DLGUARM - - 0 CMSIS_AGDI @@ -155,12 +135,12 @@ 0 0 - 1 + 0 0 0 0 0 - 1 + 0 0 0 0 @@ -223,7 +203,7 @@ CPU - 1 + 0 0 0 0 @@ -291,7 +271,7 @@ DeviceDrivers - 1 + 0 0 0 0 @@ -407,7 +387,7 @@ Drivers - 1 + 0 0 0 0 @@ -463,7 +443,7 @@ finsh - 1 + 0 0 0 0 @@ -507,7 +487,7 @@ Kernel - 1 + 0 0 0 0 diff --git a/bsp/maxim/MAX32660_EVSYS/project.uvprojx b/bsp/maxim/MAX32660_EVSYS/project.uvprojx index 7b23a65cbc..5f53b9696b 100644 --- a/bsp/maxim/MAX32660_EVSYS/project.uvprojx +++ b/bsp/maxim/MAX32660_EVSYS/project.uvprojx @@ -188,7 +188,7 @@ 0 0 8 - 1 + 0 0 0 0 diff --git a/bsp/maxim/MAX32660_EVSYS/template.uvprojx b/bsp/maxim/MAX32660_EVSYS/template.uvprojx index 1ea2e5a7ba..47b809b51d 100644 --- a/bsp/maxim/MAX32660_EVSYS/template.uvprojx +++ b/bsp/maxim/MAX32660_EVSYS/template.uvprojx @@ -188,7 +188,7 @@ 0 0 8 - 1 + 0 0 0 0 diff --git a/bsp/maxim/libraries/MAX32660PeriphDriver/CMSIS/Device/Maxim/MAX32660/Source/system_max32660.c b/bsp/maxim/libraries/MAX32660PeriphDriver/CMSIS/Device/Maxim/MAX32660/Source/system_max32660.c index 1d404cc48d..0f3b061e8a 100644 --- a/bsp/maxim/libraries/MAX32660PeriphDriver/CMSIS/Device/Maxim/MAX32660/Source/system_max32660.c +++ b/bsp/maxim/libraries/MAX32660PeriphDriver/CMSIS/Device/Maxim/MAX32660/Source/system_max32660.c @@ -95,6 +95,9 @@ __weak void SystemCoreClockUpdate(void) __weak int PreInit(void) { /* Do nothing */ +#if defined ( __CC_ARM ) + SystemInit(); +#endif return 0; } @@ -145,23 +148,23 @@ __weak void SystemInit(void) Board_Init(); } -#if defined ( __CC_ARM ) -/* Global variable initialization does not occur until post scatterload in Keil tools.*/ +//#if defined ( __CC_ARM ) +///* Global variable initialization does not occur until post scatterload in Keil tools.*/ -/* External function called after our post scatterload function implementation. */ -extern void $Super$$__main_after_scatterload(void); +///* External function called after our post scatterload function implementation. */ +//extern void $Super$$__main_after_scatterload(void); -/** - * @brief Initialization function for SystemCoreClock and Board_Init. - * @details $Sub$$__main_after_scatterload is called during system startup in the Keil - * toolset. Global variable and static variable space must be set up by the compiler - * prior to using these memory spaces. Setting up the SystemCoreClock and Board_Init - * require global memory for variable storage and are called from this function in - * the Keil tool chain. - */ -void $Sub$$__main_after_scatterload(void) -{ - SystemInit(); - $Super$$__main_after_scatterload(); -} -#endif /* __CC_ARM */ +///** +// * @brief Initialization function for SystemCoreClock and Board_Init. +// * @details $Sub$$__main_after_scatterload is called during system startup in the Keil +// * toolset. Global variable and static variable space must be set up by the compiler +// * prior to using these memory spaces. Setting up the SystemCoreClock and Board_Init +// * require global memory for variable storage and are called from this function in +// * the Keil tool chain. +// */ +//void $Sub$$__main_after_scatterload(void) +//{ +// SystemInit(); +// $Super$$__main_after_scatterload(); +//} +//#endif /* __CC_ARM */ From 8c7dd0353a24aacd35646ff94ff8b2ebe8a26851 Mon Sep 17 00:00:00 2001 From: jackis Date: Sat, 27 Feb 2021 09:53:37 +0800 Subject: [PATCH 09/17] Keep the project file as it is, remove test code --- bsp/maxim/MAX32660_EVSYS/project.uvguix.M2019 | 1878 ----------------- bsp/maxim/MAX32660_EVSYS/project.uvoptx | 170 +- bsp/maxim/MAX32660_EVSYS/project.uvprojx | 40 +- bsp/maxim/libraries/HAL_Drivers/drv_i2c.c | 3 - 4 files changed, 73 insertions(+), 2018 deletions(-) delete mode 100644 bsp/maxim/MAX32660_EVSYS/project.uvguix.M2019 diff --git a/bsp/maxim/MAX32660_EVSYS/project.uvguix.M2019 b/bsp/maxim/MAX32660_EVSYS/project.uvguix.M2019 deleted file mode 100644 index 82c04baab6..0000000000 --- a/bsp/maxim/MAX32660_EVSYS/project.uvguix.M2019 +++ /dev/null @@ -1,1878 +0,0 @@ - - - - -6.1 - -
### uVision Project, (C) Keil Software
- - - - - - - - - - 38003 - Registers - 150 96 - - - 346 - Code Coverage - 1090 160 - - - 204 - Performance Analyzer - 1250 - - - - - - 35141 - Event Statistics - - 200 50 700 - - - 1506 - Symbols - - 85 85 85 - - - 1936 - Watch 1 - - 200 133 133 - - - 1937 - Watch 2 - - 200 133 133 - - - 1935 - Call Stack + Locals - - 200 133 133 - - - 2506 - Trace Data - - 75 135 130 95 70 230 200 150 - - - 466 - Source Browser - 500 - 300 - - - - - - - - 1 - 1 - 0 - 0 - -1 - - - - - - - 44 - 0 - 1 - - -1 - -1 - - - -1 - -1 - - - 24 - 355 - 1923 - 1120 - - - - 0 - - 270 - 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000001000000000000000100000042453A5C4769746875625C72742D7468726561645C6273705C6D6178696D5C6C69627261726965735C48414C5F447269766572735C6472765F736F66745F6932632E63000000000E6472765F736F66745F6932632E6300000000C5D4F200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000006F020000860000007B070000A8030000 - - - - 0 - Build - - -1 - -1 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 040100004F000000F0050000E8000000 - - - 16 - 6F020000860000005B0700001F010000 - - - - 1005 - 1005 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000FD00000058030000 - - - 16 - 560000006D0000005601000046010000 - - - - 109 - 109 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000FD00000058030000 - - - 16 - 560000006D00000086010000D2020000 - - - - 1465 - 1465 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000055020000ED050000D2020000 - - - 16 - 560000006D0000004E03000006010000 - - - - 1466 - 1466 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000055020000ED050000D2020000 - - - 16 - 560000006D0000004E03000006010000 - - - - 1467 - 1467 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000055020000ED050000D2020000 - - - 16 - 560000006D0000004E03000006010000 - - - - 1468 - 1468 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000055020000ED050000D2020000 - - - 16 - 560000006D0000004E03000006010000 - - - - 1506 - 1506 - 0 - 0 - 0 - 0 - 32767 - 0 - 16384 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 1913 - 1913 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0701000066000000ED050000CF000000 - - - 16 - 560000006D0000004E03000006010000 - - - - 1935 - 1935 - 0 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 0300000055020000ED050000D2020000 - - - 16 - 560000006D0000005601000046010000 - - - - 1936 - 1936 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000055020000ED050000D2020000 - - - 16 - 560000006D0000005601000046010000 - - - - 1937 - 1937 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000055020000ED050000D2020000 - - - 16 - 560000006D0000005601000046010000 - - - - 1939 - 1939 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000055020000ED050000D2020000 - - - 16 - 560000006D0000004E03000006010000 - - - - 1940 - 1940 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000055020000ED050000D2020000 - - - 16 - 560000006D0000004E03000006010000 - - - - 1941 - 1941 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000055020000ED050000D2020000 - - - 16 - 560000006D0000004E03000006010000 - - - - 1942 - 1942 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000055020000ED050000D2020000 - - - 16 - 560000006D0000004E03000006010000 - - - - 195 - 195 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000FD00000058030000 - - - 16 - 560000006D00000086010000D2020000 - - - - 196 - 196 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000FD00000058030000 - - - 16 - 560000006D00000086010000D2020000 - - - - 197 - 197 - 1 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 0000000089030000100600000E040000 - - - 16 - 560000006D0000004E03000006010000 - - - - 198 - 198 - 0 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 000000003E020000F0050000EB020000 - - - 16 - 560000006D0000004E03000006010000 - - - - 199 - 199 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000008C0300000D060000F5030000 - - - 16 - 560000006D0000004E03000006010000 - - - - 203 - 203 - 0 - 0 - 0 - 0 - 32767 - 0 - 8192 - 0 - - 16 - 0701000066000000ED050000CF000000 - - - 16 - 560000006D0000004E03000006010000 - - - - 204 - 204 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0701000066000000ED050000CF000000 - - - 16 - 560000006D0000004E03000006010000 - - - - 221 - 221 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 00000000000000000000000000000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 2506 - 2506 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 2507 - 2507 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000055020000ED050000D2020000 - - - 16 - 560000006D0000004E03000006010000 - - - - 343 - 343 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0701000066000000ED050000CF000000 - - - 16 - 560000006D0000004E03000006010000 - - - - 346 - 346 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0701000066000000ED050000CF000000 - - - 16 - 560000006D0000004E03000006010000 - - - - 35141 - 35141 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0701000066000000ED050000CF000000 - - - 16 - 560000006D0000005601000046010000 - - - - 35824 - 35824 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0701000066000000ED050000CF000000 - - - 16 - 560000006D0000004E03000006010000 - - - - 35885 - 35885 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35886 - 35886 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35887 - 35887 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35888 - 35888 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35889 - 35889 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35890 - 35890 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35891 - 35891 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35892 - 35892 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35893 - 35893 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35894 - 35894 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35895 - 35895 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35896 - 35896 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35897 - 35897 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35898 - 35898 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35899 - 35899 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35900 - 35900 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35901 - 35901 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35902 - 35902 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35903 - 35903 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35904 - 35904 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 35905 - 35905 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 38003 - 38003 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000066000000FD00000058030000 - - - 16 - 560000006D00000086010000D2020000 - - - - 38007 - 38007 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000008C0300000D060000F5030000 - - - 16 - 560000006D0000004E03000006010000 - - - - 436 - 436 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000008C0300000D060000F5030000 - - - 16 - 560000006D00000086010000D2020000 - - - - 437 - 437 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000055020000ED050000D2020000 - - - 16 - 560000006D0000005601000046010000 - - - - 440 - 440 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000055020000ED050000D2020000 - - - 16 - 560000006D0000005601000046010000 - - - - 463 - 463 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000008C0300000D060000F5030000 - - - 16 - 560000006D00000086010000D2020000 - - - - 466 - 466 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 030000008C0300000D060000F5030000 - - - 16 - 560000006D00000086010000D2020000 - - - - 470 - 470 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0701000066000000ED050000CF000000 - - - 16 - 560000006D0000004E03000006010000 - - - - 50000 - 50000 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50001 - 50001 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50002 - 50002 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50003 - 50003 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50004 - 50004 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50005 - 50005 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50006 - 50006 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50007 - 50007 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50008 - 50008 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50009 - 50009 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50010 - 50010 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50011 - 50011 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50012 - 50012 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50013 - 50013 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50014 - 50014 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50015 - 50015 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50016 - 50016 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50017 - 50017 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50018 - 50018 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 50019 - 50019 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - F304000066000000ED05000035020000 - - - 16 - 560000006D0000005601000046010000 - - - - 59392 - 59392 - 1 - 0 - 0 - 0 - 966 - 0 - 8192 - 0 - - 16 - 0000000000000000D10300001C000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59393 - 0 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 000000000E0400001006000021040000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59399 - 59399 - 1 - 0 - 0 - 0 - 476 - 0 - 8192 - 1 - - 16 - 000000001C000000E701000038000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59400 - 59400 - 0 - 0 - 0 - 0 - 612 - 0 - 8192 - 2 - - 16 - 00000000380000006F02000054000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 824 - 824 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000055020000ED050000D2020000 - - - 16 - 560000006D0000005601000046010000 - - - - 3312 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF04010000E8000000F0050000EC000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000006F020000860000005B0700001F010000040100004F000000F0050000E80000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFEC0400004F000000F00400004E020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000005B060000860000005B07000085020000F00400004F000000F00500004E02000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF000100004F0000000401000071030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000006B010000860000006B020000A8030000000000004F00000000010000710300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF000000003A020000F00500003E02000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000000000006B010000750200005B07000022030000000000003E020000F0050000EB02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFF80200003E020000FC020000EB02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000710300001006000075030000010000000100001004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000006B010000AC0300007B070000450400000000000075030000100600000E0400000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 - - - 59392 - File - - 2564 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000075553455F46505596000000000000000200075553455F465055036670750000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 - - - 1423 - 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 1423 - 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 - - - - 59399 - Build - - 976 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008727474687265616496000000000000000100087274746872656164000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 - - - 583 - 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 583 - 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 - - - - 59400 - Debug - - 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 - - - 898 - 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 898 - 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 - - - - 0 - 2048 - 1152 - - - - - - 1 - 0 - - 100 - 0 - - E:\Github\rt-thread\bsp\maxim\libraries\HAL_Drivers\drv_soft_i2c.c - 20 - 1 - 32 - 1 - - 0 - - - - -
diff --git a/bsp/maxim/MAX32660_EVSYS/project.uvoptx b/bsp/maxim/MAX32660_EVSYS/project.uvoptx index c41a5d3a77..ff7f9de14e 100644 --- a/bsp/maxim/MAX32660_EVSYS/project.uvoptx +++ b/bsp/maxim/MAX32660_EVSYS/project.uvoptx @@ -73,7 +73,7 @@ 0 - 0 + 1 0 1 @@ -117,6 +117,26 @@ BIN\CMSIS_AGDI.dll + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + 0 CMSIS_AGDI @@ -135,12 +155,12 @@ 0 0 - 0 + 1 0 0 0 0 - 0 + 1 0 0 0 @@ -183,7 +203,7 @@ Applications - 0 + 1 0 0 0 @@ -203,7 +223,7 @@ CPU - 0 + 1 0 0 0 @@ -271,7 +291,7 @@ DeviceDrivers - 0 + 1 0 0 0 @@ -282,30 +302,6 @@ 0 0 0 - ..\..\..\components\drivers\i2c\i2c_core.c - i2c_core.c - 0 - 0 -
- - 3 - 8 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\i2c\i2c_dev.c - i2c_dev.c - 0 - 0 - - - 3 - 9 - 1 - 0 - 0 - 0 ..\..\..\components\drivers\misc\pin.c pin.c 0 @@ -313,7 +309,7 @@ 3 - 10 + 8 1 0 0 @@ -325,7 +321,7 @@ 3 - 11 + 9 1 0 0 @@ -337,7 +333,7 @@ 3 - 12 + 10 1 0 0 @@ -349,7 +345,7 @@ 3 - 13 + 11 1 0 0 @@ -361,7 +357,7 @@ 3 - 14 + 12 1 0 0 @@ -373,7 +369,7 @@ 3 - 15 + 13 1 0 0 @@ -385,7 +381,7 @@ 3 - 16 + 14 1 0 0 @@ -397,7 +393,7 @@ 3 - 17 + 15 1 0 0 @@ -411,13 +407,13 @@ Drivers - 0 + 1 0 0 0 4 - 18 + 16 1 0 0 @@ -429,7 +425,7 @@ 4 - 19 + 17 2 0 0 @@ -441,7 +437,7 @@ 4 - 20 + 18 1 0 0 @@ -453,7 +449,7 @@ 4 - 21 + 19 1 0 0 @@ -463,29 +459,17 @@ 0 0 - - 4 - 22 - 1 - 0 - 0 - 0 - ..\libraries\HAL_Drivers\drv_i2c.c - drv_i2c.c - 0 - 0 - finsh - 0 + 1 0 0 0 5 - 23 + 20 1 0 0 @@ -497,7 +481,7 @@ 5 - 24 + 21 1 0 0 @@ -509,7 +493,7 @@ 5 - 25 + 22 1 0 0 @@ -523,13 +507,13 @@ Kernel - 0 + 1 0 0 0 6 - 26 + 23 1 0 0 @@ -541,7 +525,7 @@ 6 - 27 + 24 1 0 0 @@ -553,7 +537,7 @@ 6 - 28 + 25 1 0 0 @@ -565,7 +549,7 @@ 6 - 29 + 26 1 0 0 @@ -577,7 +561,7 @@ 6 - 30 + 27 1 0 0 @@ -589,7 +573,7 @@ 6 - 31 + 28 1 0 0 @@ -601,7 +585,7 @@ 6 - 32 + 29 1 0 0 @@ -613,7 +597,7 @@ 6 - 33 + 30 1 0 0 @@ -625,7 +609,7 @@ 6 - 34 + 31 1 0 0 @@ -637,7 +621,7 @@ 6 - 35 + 32 1 0 0 @@ -649,7 +633,7 @@ 6 - 36 + 33 1 0 0 @@ -661,7 +645,7 @@ 6 - 37 + 34 1 0 0 @@ -673,7 +657,7 @@ 6 - 38 + 35 1 0 0 @@ -693,7 +677,7 @@ 0 7 - 39 + 36 1 0 0 @@ -705,7 +689,7 @@ 7 - 40 + 37 1 0 0 @@ -717,7 +701,7 @@ 7 - 41 + 38 1 0 0 @@ -729,7 +713,7 @@ 7 - 42 + 39 1 0 0 @@ -741,7 +725,7 @@ 7 - 43 + 40 1 0 0 @@ -753,7 +737,7 @@ 7 - 44 + 41 1 0 0 @@ -765,7 +749,7 @@ 7 - 45 + 42 1 0 0 @@ -777,7 +761,7 @@ 7 - 46 + 43 1 0 0 @@ -789,7 +773,7 @@ 7 - 47 + 44 1 0 0 @@ -801,7 +785,7 @@ 7 - 48 + 45 1 0 0 @@ -813,7 +797,7 @@ 7 - 49 + 46 1 0 0 @@ -825,7 +809,7 @@ 7 - 50 + 47 1 0 0 @@ -837,7 +821,7 @@ 7 - 51 + 48 1 0 0 @@ -849,7 +833,7 @@ 7 - 52 + 49 1 0 0 @@ -859,18 +843,6 @@ 0 0 - - 7 - 53 - 1 - 0 - 0 - 0 - ..\libraries\MAX32660PeriphDriver\Source\i2c.c - i2c.c - 0 - 0 - diff --git a/bsp/maxim/MAX32660_EVSYS/project.uvprojx b/bsp/maxim/MAX32660_EVSYS/project.uvprojx index b0291ee12d..7b23a65cbc 100644 --- a/bsp/maxim/MAX32660_EVSYS/project.uvprojx +++ b/bsp/maxim/MAX32660_EVSYS/project.uvprojx @@ -185,7 +185,6 @@ 0 2 0 - 0 0 0 8 @@ -339,7 +338,7 @@ TARGET=32660, TARGET_REV=0x4131, __RTTHREAD__ - applications;.;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;..\libraries\HAL_Drivers;..\..\..\components\finsh;.;..\..\..\include;..\libraries\MAX32660PeriphDriver\CMSIS\Device\Maxim\MAX32660\Include;..\libraries\MAX32660PeriphDriver\CMSIS\Core\Include;..\libraries\MAX32660PeriphDriver\Include + applications;.;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;..\libraries\HAL_Drivers;..\..\..\components\finsh;.;..\..\..\include;..\libraries\MAX32660PeriphDriver\CMSIS\Device\Maxim\MAX32660\Include;..\libraries\MAX32660PeriphDriver\CMSIS\Core\Include;..\libraries\MAX32660PeriphDriver\Include @@ -352,7 +351,7 @@ 0 0 0 - 4 + 0 @@ -423,16 +422,6 @@ DeviceDrivers - - i2c_core.c - 1 - ..\..\..\components\drivers\i2c\i2c_core.c - - - i2c_dev.c - 1 - ..\..\..\components\drivers\i2c\i2c_dev.c - pin.c 1 @@ -503,11 +492,6 @@ 1 ..\libraries\HAL_Drivers\drv_uart.c - - drv_i2c.c - 1 - ..\libraries\HAL_Drivers\drv_i2c.c - @@ -673,11 +657,6 @@ 1 ..\libraries\MAX32660PeriphDriver\Source\uart.c - - i2c.c - 1 - ..\libraries\MAX32660PeriphDriver\Source\i2c.c - @@ -690,19 +669,4 @@ - - - - <Project Info> - - - - - - 0 - 1 - - - - diff --git a/bsp/maxim/libraries/HAL_Drivers/drv_i2c.c b/bsp/maxim/libraries/HAL_Drivers/drv_i2c.c index 3d143d93aa..ddacdf0a12 100644 --- a/bsp/maxim/libraries/HAL_Drivers/drv_i2c.c +++ b/bsp/maxim/libraries/HAL_Drivers/drv_i2c.c @@ -15,9 +15,6 @@ #include #include "board.h" -#define RT_USING_I2C -#define BSP_USING_I2C0 - #ifdef RT_USING_I2C #if !defined(BSP_USING_I2C0) && !defined(BSP_USING_I2C1) From 9da70b7e7617863601d957974e1d57bb2bc77b60 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 26 Feb 2021 10:25:39 +0800 Subject: [PATCH 10/17] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E7=A9=BA=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/stm32/stm32l475-atk-pandora/board/ports/sdcard_port.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/bsp/stm32/stm32l475-atk-pandora/board/ports/sdcard_port.c b/bsp/stm32/stm32l475-atk-pandora/board/ports/sdcard_port.c index 131a4221a5..76272c8de2 100644 --- a/bsp/stm32/stm32l475-atk-pandora/board/ports/sdcard_port.c +++ b/bsp/stm32/stm32l475-atk-pandora/board/ports/sdcard_port.c @@ -65,9 +65,6 @@ int stm32_sdcard_mount(void) } } - - - return RT_EOK; } INIT_APP_EXPORT(stm32_sdcard_mount); From ac275965f2e2d3ff730d06a8962ccaaea4f027ce Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Sun, 28 Feb 2021 11:09:48 +0800 Subject: [PATCH 11/17] =?UTF-8?q?[libc][newlib]=20=E5=AF=B9syscall?= =?UTF-8?q?=E4=B8=ADmalloc=E7=9B=B8=E5=85=B3=E6=A1=A9=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E5=81=9A=E5=87=BA=E7=BC=96=E8=AF=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/libc/compilers/newlib/minilib.c | 53 ++++++++++++++++++++- components/libc/compilers/newlib/syscalls.c | 18 +++---- 2 files changed, 62 insertions(+), 9 deletions(-) diff --git a/components/libc/compilers/newlib/minilib.c b/components/libc/compilers/newlib/minilib.c index 2d07eabe5a..92877bd6c3 100644 --- a/components/libc/compilers/newlib/minilib.c +++ b/components/libc/compilers/newlib/minilib.c @@ -11,8 +11,59 @@ #include #include -void * _sbrk_r(struct _reent *ptr, ptrdiff_t incr) +#ifdef RT_USING_HEAP /* Memory routine */ +void * +_malloc_r (struct _reent *ptr, size_t size) +{ + void* result; + + result = (void*)rt_malloc (size); + if (result == RT_NULL) + { + ptr->_errno = ENOMEM; + } + + return result; +} + +void * +_realloc_r (struct _reent *ptr, void *old, size_t newlen) +{ + void* result; + + result = (void*)rt_realloc (old, newlen); + if (result == RT_NULL) + { + ptr->_errno = ENOMEM; + } + + return result; +} + +void *_calloc_r (struct _reent *ptr, size_t size, size_t len) +{ + void* result; + + result = (void*)rt_calloc (size, len); + if (result == RT_NULL) + { + ptr->_errno = ENOMEM; + } + + return result; +} + +void +_free_r (struct _reent *ptr, void *addr) +{ + rt_free (addr); +} + +#else +void * +_sbrk_r(struct _reent *ptr, ptrdiff_t incr) { /* no use this routine to get memory */ return RT_NULL; } +#endif /*RT_USING_HEAP*/ diff --git a/components/libc/compilers/newlib/syscalls.c b/components/libc/compilers/newlib/syscalls.c index 949d8a61de..444e3960c1 100644 --- a/components/libc/compilers/newlib/syscalls.c +++ b/components/libc/compilers/newlib/syscalls.c @@ -189,13 +189,6 @@ _rename_r(struct _reent *ptr, const char *old, const char *new) #endif } -void * -_sbrk_r(struct _reent *ptr, ptrdiff_t incr) -{ - /* no use this routine to get memory */ - return RT_NULL; -} - int _stat_r(struct _reent *ptr, const char *file, struct stat *pstat) { @@ -258,7 +251,7 @@ _write_r(struct _reent *ptr, int fd, const void *buf, size_t nbytes) #endif } -/* Memory routine */ +#ifdef RT_USING_HEAP /* Memory routine */ void * _malloc_r (struct _reent *ptr, size_t size) { @@ -306,6 +299,15 @@ _free_r (struct _reent *ptr, void *addr) rt_free (addr); } +#else +void * +_sbrk_r(struct _reent *ptr, ptrdiff_t incr) +{ + /* no use this routine to get memory */ + return RT_NULL; +} +#endif /*RT_USING_HEAP*/ + /* for exit() and abort() */ __attribute__ ((noreturn)) void _exit (int status) From 70f5c10262d8d11396557fa5f098d063126819ce Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Sun, 28 Feb 2021 11:12:18 +0800 Subject: [PATCH 12/17] remove comments --- components/libc/compilers/newlib/minilib.c | 1 - components/libc/compilers/newlib/syscalls.c | 1 - 2 files changed, 2 deletions(-) diff --git a/components/libc/compilers/newlib/minilib.c b/components/libc/compilers/newlib/minilib.c index 92877bd6c3..ca1bea0f91 100644 --- a/components/libc/compilers/newlib/minilib.c +++ b/components/libc/compilers/newlib/minilib.c @@ -63,7 +63,6 @@ _free_r (struct _reent *ptr, void *addr) void * _sbrk_r(struct _reent *ptr, ptrdiff_t incr) { - /* no use this routine to get memory */ return RT_NULL; } #endif /*RT_USING_HEAP*/ diff --git a/components/libc/compilers/newlib/syscalls.c b/components/libc/compilers/newlib/syscalls.c index 444e3960c1..e54d7583cb 100644 --- a/components/libc/compilers/newlib/syscalls.c +++ b/components/libc/compilers/newlib/syscalls.c @@ -303,7 +303,6 @@ _free_r (struct _reent *ptr, void *addr) void * _sbrk_r(struct _reent *ptr, ptrdiff_t incr) { - /* no use this routine to get memory */ return RT_NULL; } #endif /*RT_USING_HEAP*/ From 72d7f6c0adf6ef251e7662f09c9dd32579041a19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E4=B8=96=E4=BA=89?= Date: Sun, 28 Feb 2021 12:00:44 +0800 Subject: [PATCH 13/17] =?UTF-8?q?[update][kernel]=E8=A7=84=E8=8C=83rt=5Fob?= =?UTF-8?q?ject=5Ft=E5=BC=BA=E5=88=B6=E8=BD=AC=E6=8D=A2=E7=9A=84=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=EF=BC=8C=E6=B6=88=E9=99=A4=E4=B8=8A=E6=AC=A1=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E7=9A=84=E7=BC=96=E8=AF=91=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/thread.c | 2 -- src/timer.c | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/thread.c b/src/thread.c index 18b5227f5a..beef93f46a 100644 --- a/src/thread.c +++ b/src/thread.c @@ -358,8 +358,6 @@ RTM_EXPORT(rt_thread_startup); */ rt_err_t rt_thread_detach(rt_thread_t thread) { - rt_base_t lock; - /* thread check */ RT_ASSERT(thread != RT_NULL); RT_ASSERT(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread); diff --git a/src/timer.c b/src/timer.c index 747c28c8bd..2eaca225bc 100644 --- a/src/timer.c +++ b/src/timer.c @@ -201,7 +201,7 @@ void rt_timer_init(rt_timer_t timer, RT_ASSERT(timer != RT_NULL); /* timer object initialization */ - rt_object_init((rt_object_t)timer, RT_Object_Class_Timer, name); + rt_object_init(&(timer->parent), RT_Object_Class_Timer, name); _rt_timer_init(timer, timeout, parameter, time, flag); } @@ -298,7 +298,7 @@ rt_err_t rt_timer_delete(rt_timer_t timer) /* enable interrupt */ rt_hw_interrupt_enable(level); - rt_object_delete((rt_object_t)timer); + rt_object_delete(&(timer->parent)); return RT_EOK; } From 5a184c19b21bcc946697b8c83f6a43b6200aa02f Mon Sep 17 00:00:00 2001 From: Howard Su Date: Sun, 28 Feb 2021 16:42:27 +0800 Subject: [PATCH 14/17] Return when i2c transfer 0 messages msg->flags is accessed without proper intialized msg variable. --- components/drivers/i2c/i2c-bit-ops.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/drivers/i2c/i2c-bit-ops.c b/components/drivers/i2c/i2c-bit-ops.c index 96af567a1e..3a9b4efeb3 100644 --- a/components/drivers/i2c/i2c-bit-ops.c +++ b/components/drivers/i2c/i2c-bit-ops.c @@ -375,6 +375,8 @@ static rt_size_t i2c_bit_xfer(struct rt_i2c_bus_device *bus, rt_int32_t i, ret; rt_uint16_t ignore_nack; + if (num == 0) return 0; + for (i = 0; i < num; i++) { msg = &msgs[i]; From 68782205ed891c2a4d6b9f2b4805512e9a6a5ca9 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Mon, 1 Mar 2021 05:51:36 +0800 Subject: [PATCH 15/17] =?UTF-8?q?[bsp][stm32]=20=E7=A7=BB=E9=99=A4mini=20s?= =?UTF-8?q?ystem=20BSP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/stm32/README.md | 1 - bsp/stm32/stm32f103-mini-system/.config | 341 -- bsp/stm32/stm32f103-mini-system/.gitignore | 42 - bsp/stm32/stm32f103-mini-system/Kconfig | 22 - bsp/stm32/stm32f103-mini-system/README.md | 110 - bsp/stm32/stm32f103-mini-system/SConscript | 15 - bsp/stm32/stm32f103-mini-system/SConstruct | 60 - .../applications/SConscript | 11 - .../stm32f103-mini-system/applications/main.c | 33 - .../board/CubeMX_Config/.mxproject | 14 - .../board/CubeMX_Config/CubeMX_Config.ioc | 140 - .../board/CubeMX_Config/Inc/main.h | 71 - .../CubeMX_Config/Inc/stm32f1xx_hal_conf.h | 370 --- .../board/CubeMX_Config/Inc/stm32f1xx_it.h | 69 - .../board/CubeMX_Config/Src/main.c | 325 -- .../CubeMX_Config/Src/stm32f1xx_hal_msp.c | 286 -- .../board/CubeMX_Config/Src/stm32f1xx_it.c | 203 -- .../CubeMX_Config/Src/system_stm32f1xx.c | 448 --- bsp/stm32/stm32f103-mini-system/board/Kconfig | 81 - .../stm32f103-mini-system/board/SConscript | 35 - bsp/stm32/stm32f103-mini-system/board/board.c | 44 - bsp/stm32/stm32f103-mini-system/board/board.h | 50 - .../board/linker_scripts/link.icf | 28 - .../board/linker_scripts/link.lds | 156 - .../board/linker_scripts/link.sct | 15 - .../stm32f103-mini-system/figures/board1.jpg | Bin 188487 -> 0 bytes .../stm32f103-mini-system/figures/board2.jpg | Bin 22228 -> 0 bytes .../stm32f103-mini-system/figures/board3.jpg | Bin 23256 -> 0 bytes bsp/stm32/stm32f103-mini-system/project.ewd | 2834 ----------------- bsp/stm32/stm32f103-mini-system/project.ewp | 2239 ------------- bsp/stm32/stm32f103-mini-system/project.eww | 10 - bsp/stm32/stm32f103-mini-system/project.uvopt | 162 - .../stm32f103-mini-system/project.uvoptx | 199 -- .../stm32f103-mini-system/project.uvproj | 783 ----- .../stm32f103-mini-system/project.uvprojx | 786 ----- bsp/stm32/stm32f103-mini-system/rtconfig.h | 178 -- bsp/stm32/stm32f103-mini-system/rtconfig.py | 151 - bsp/stm32/stm32f103-mini-system/template.ewp | 2032 ------------ bsp/stm32/stm32f103-mini-system/template.eww | 10 - .../stm32f103-mini-system/template.uvopt | 162 - .../stm32f103-mini-system/template.uvoptx | 199 -- .../stm32f103-mini-system/template.uvproj | 407 --- .../stm32f103-mini-system/template.uvprojx | 415 --- 43 files changed, 13537 deletions(-) delete mode 100644 bsp/stm32/stm32f103-mini-system/.config delete mode 100644 bsp/stm32/stm32f103-mini-system/.gitignore delete mode 100644 bsp/stm32/stm32f103-mini-system/Kconfig delete mode 100644 bsp/stm32/stm32f103-mini-system/README.md delete mode 100644 bsp/stm32/stm32f103-mini-system/SConscript delete mode 100644 bsp/stm32/stm32f103-mini-system/SConstruct delete mode 100644 bsp/stm32/stm32f103-mini-system/applications/SConscript delete mode 100644 bsp/stm32/stm32f103-mini-system/applications/main.c delete mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/.mxproject delete mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/CubeMX_Config.ioc delete mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/main.h delete mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h delete mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/stm32f1xx_it.h delete mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/main.c delete mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c delete mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/stm32f1xx_it.c delete mode 100644 bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/system_stm32f1xx.c delete mode 100644 bsp/stm32/stm32f103-mini-system/board/Kconfig delete mode 100644 bsp/stm32/stm32f103-mini-system/board/SConscript delete mode 100644 bsp/stm32/stm32f103-mini-system/board/board.c delete mode 100644 bsp/stm32/stm32f103-mini-system/board/board.h delete mode 100644 bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.icf delete mode 100644 bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.lds delete mode 100644 bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.sct delete mode 100644 bsp/stm32/stm32f103-mini-system/figures/board1.jpg delete mode 100644 bsp/stm32/stm32f103-mini-system/figures/board2.jpg delete mode 100644 bsp/stm32/stm32f103-mini-system/figures/board3.jpg delete mode 100644 bsp/stm32/stm32f103-mini-system/project.ewd delete mode 100644 bsp/stm32/stm32f103-mini-system/project.ewp delete mode 100644 bsp/stm32/stm32f103-mini-system/project.eww delete mode 100644 bsp/stm32/stm32f103-mini-system/project.uvopt delete mode 100644 bsp/stm32/stm32f103-mini-system/project.uvoptx delete mode 100644 bsp/stm32/stm32f103-mini-system/project.uvproj delete mode 100644 bsp/stm32/stm32f103-mini-system/project.uvprojx delete mode 100644 bsp/stm32/stm32f103-mini-system/rtconfig.h delete mode 100644 bsp/stm32/stm32f103-mini-system/rtconfig.py delete mode 100644 bsp/stm32/stm32f103-mini-system/template.ewp delete mode 100644 bsp/stm32/stm32f103-mini-system/template.eww delete mode 100644 bsp/stm32/stm32f103-mini-system/template.uvopt delete mode 100644 bsp/stm32/stm32f103-mini-system/template.uvoptx delete mode 100644 bsp/stm32/stm32f103-mini-system/template.uvproj delete mode 100644 bsp/stm32/stm32f103-mini-system/template.uvprojx diff --git a/bsp/stm32/README.md b/bsp/stm32/README.md index 68920bbb93..ffdf1668f2 100644 --- a/bsp/stm32/README.md +++ b/bsp/stm32/README.md @@ -17,7 +17,6 @@ STM32 系列 BSP 目前支持情况如下表所示: | [stm32f103-fire-arbitrary](stm32f103-fire-arbitrary/) | 野火 F103 霸道开发板 | | [stm32f103-gizwits-gokitv21](stm32f103-gizwits-gokitv21) | GoKit V2.1开发板 | | [stm32f103-hw100k-ibox](stm32f103-hw100k-ibox) | 硬件十万个为什么 STM32F103 iBox 开发板 | -| [stm32f103-mini-system](stm32f103-mini-system) | STM32F103C8T6最小系统板 | | [stm32f103-onenet-nbiot](stm32f103-onenet-nbiot) | STM32F103 OneNET NB-IoT 开发板 | | [stm32f103-yf-ufun](stm32f103-yf-ufun) | STM32F103 yf-ufun 开发板 | | [stm32f107-uc-eval](stm32f107-uc-eval) | uC/Eval STM32F107 评估板(中国版) | diff --git a/bsp/stm32/stm32f103-mini-system/.config b/bsp/stm32/stm32f103-mini-system/.config deleted file mode 100644 index 7f2ef00287..0000000000 --- a/bsp/stm32/stm32f103-mini-system/.config +++ /dev/null @@ -1,341 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# RT-Thread Configuration -# - -# -# RT-Thread Kernel -# -CONFIG_RT_NAME_MAX=8 -# 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=1000 -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 -CONFIG_RT_DEBUG=y -# CONFIG_RT_DEBUG_COLOR is not set -# 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_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_VER_NUM=0x40001 -CONFIG_ARCH_ARM=y -CONFIG_ARCH_ARM_CORTEX_M=y -CONFIG_ARCH_ARM_CORTEX_M3=y -# 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_FINSH_THREAD_NAME="tshell" -CONFIG_FINSH_USING_HISTORY=y -CONFIG_FINSH_HISTORY_LINES=5 -CONFIG_FINSH_USING_SYMTAB=y -CONFIG_FINSH_USING_DESCRIPTION=y -# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set -CONFIG_FINSH_THREAD_PRIORITY=20 -CONFIG_FINSH_THREAD_STACK_SIZE=4096 -CONFIG_FINSH_CMD_SIZE=80 -# CONFIG_FINSH_USING_AUTH is not set -CONFIG_FINSH_USING_MSH=y -CONFIG_FINSH_USING_MSH_DEFAULT=y -CONFIG_FINSH_USING_MSH_ONLY=y -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 is not set -CONFIG_RT_USING_SERIAL=y -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_PIN=y -# CONFIG_RT_USING_ADC 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_MTD 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 - -# -# Using WiFi -# -# CONFIG_RT_USING_WIFI is not set - -# -# Using USB -# -# 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_USING_PTHREADS is not set - -# -# Network -# - -# -# Socket abstraction layer -# -# CONFIG_RT_USING_SAL is not set - -# -# light weight TCP/IP stack -# -# CONFIG_RT_USING_LWIP is not set - -# -# Modbus master and slave stack -# -# CONFIG_RT_USING_MODBUS 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_LOGTRACE is not set -# CONFIG_RT_USING_RYM is not set -# CONFIG_RT_USING_ULOG is not set -# CONFIG_RT_USING_UTEST is not set -# CONFIG_RT_USING_LWP is not set - -# -# RT-Thread online packages -# - -# -# IoT - internet of things -# -# CONFIG_PKG_USING_PAHOMQTT is not set -# CONFIG_PKG_USING_WEBCLIENT is not set -# CONFIG_PKG_USING_MONGOOSE 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_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_COAP is not set -# CONFIG_PKG_USING_NOPOLL is not set -# CONFIG_PKG_USING_NETUTILS is not set -# CONFIG_PKG_USING_AT_DEVICE 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 - -# -# security packages -# -# CONFIG_PKG_USING_MBEDTLS is not set -# CONFIG_PKG_USING_libsodium is not set -# CONFIG_PKG_USING_TINYCRYPT 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 - -# -# multimedia packages -# -# CONFIG_PKG_USING_OPENMV is not set -# CONFIG_PKG_USING_MUPDF 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 - -# -# system packages -# -# CONFIG_PKG_USING_GUIENGINE is not set -# CONFIG_PKG_USING_CAIRO is not set -# CONFIG_PKG_USING_PIXMAN is not set -# CONFIG_PKG_USING_LWEXT4 is not set -# CONFIG_PKG_USING_PARTITION is not set -# CONFIG_PKG_USING_FAL is not set -# CONFIG_PKG_USING_SQLITE is not set -# CONFIG_PKG_USING_RTI is not set -# CONFIG_PKG_USING_LITTLEVGL2RTT is not set - -# -# peripheral libraries and drivers -# -# CONFIG_PKG_USING_STM32F4_HAL is not set -# CONFIG_PKG_USING_STM32F4_DRIVERS is not set -# CONFIG_PKG_USING_REALTEK_AMEBA is not set -# CONFIG_PKG_USING_SHT2X is not set -# CONFIG_PKG_USING_AHT10 is not set -# CONFIG_PKG_USING_AP3216C is not set -# CONFIG_PKG_USING_STM32_SDIO is not set - -# -# miscellaneous packages -# -# CONFIG_PKG_USING_LIBCSV is not set -# CONFIG_PKG_USING_OPTPARSE is not set -# CONFIG_PKG_USING_FASTLZ is not set -# CONFIG_PKG_USING_MINILZO is not set -# CONFIG_PKG_USING_QUICKLZ is not set -# CONFIG_PKG_USING_MULTIBUTTON is not set -# CONFIG_PKG_USING_CANFESTIVAL is not set -# CONFIG_PKG_USING_ZLIB is not set -# CONFIG_PKG_USING_DSTR is not set - -# -# sample package -# - -# -# 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 - -# -# example package: hello -# -# CONFIG_PKG_USING_HELLO is not set -CONFIG_SOC_FAMILY_STM32=y -CONFIG_SOC_SERIES_STM32F1=y - -# -# Hardware Drivers Config -# -CONFIG_SOC_STM32F103C8=y - -# -# Onboard Peripheral Drivers -# -CONFIG_BSP_USING_USB_TO_USART=y - -# -# 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=y -# CONFIG_BSP_USING_SPI is not set -# CONFIG_BSP_USING_ADC is not set - -# -# Board extended module Drivers -# diff --git a/bsp/stm32/stm32f103-mini-system/.gitignore b/bsp/stm32/stm32f103-mini-system/.gitignore deleted file mode 100644 index 7221bde019..0000000000 --- a/bsp/stm32/stm32f103-mini-system/.gitignore +++ /dev/null @@ -1,42 +0,0 @@ -*.pyc -*.map -*.dblite -*.elf -*.bin -*.hex -*.axf -*.exe -*.pdb -*.idb -*.ilk -*.old -build -Debug -documentation/html -packages/ -*~ -*.o -*.obj -*.out -*.bak -*.dep -*.lib -*.i -*.d -.DS_Stor* -.config 3 -.config 4 -.config 5 -Midea-X1 -*.uimg -GPATH -GRTAGS -GTAGS -.vscode -JLinkLog.txt -JLinkSettings.ini -DebugConfig/ -RTE/ -settings/ -*.uvguix* -cconfig.h diff --git a/bsp/stm32/stm32f103-mini-system/Kconfig b/bsp/stm32/stm32f103-mini-system/Kconfig deleted file mode 100644 index 7a400db91f..0000000000 --- a/bsp/stm32/stm32f103-mini-system/Kconfig +++ /dev/null @@ -1,22 +0,0 @@ -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/stm32/stm32f103-mini-system/README.md b/bsp/stm32/stm32f103-mini-system/README.md deleted file mode 100644 index ee163c4beb..0000000000 --- a/bsp/stm32/stm32f103-mini-system/README.md +++ /dev/null @@ -1,110 +0,0 @@ -# STM32F103C8T6最小系统板 BSP 说明 - -## 简介 - -本文档为 STM32F103C8T6最小系统板 的 BSP (板级支持包) 说明。 - -主要内容如下: - -- 开发板资源介绍 -- BSP 快速上手 -- 进阶使用方法 - -通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 - -## 开发板介绍 - -STM32F103C8T6最小系统,采用SWD调试接口,可以用3个接口就能完成调试下载的任务,采用了官方建议的负载RTC晶振方案,小体积高频率的STM32实验板 - -开发板外观如下图所示: - -![board](figures/board.png) - -该开发板常用 **板载资源** 如下: - -- MCU:STM32F103C8T6,主频 72MHz,64KB FLASH ,20KB RAM -- 外部 RAM:无 -- 外部 FLASH:无 -- 常用外设 - - LED:1个,DS0(黄色,PC13) -- 常用接口:无 -- 调试接口,SWD调试接口 - -开发板更多详细信息请参考[STM32F103C8T6最小系统板介绍] - -## 外设支持 - -本 BSP 目前对外设的支持情况如下: - -| **板载外设** | **支持情况** | **备注** | -| :----------------- | :----------: | :------------------------------------- | -| 黄色LED | 支持 | PC13 | -| **片上外设** | **支持情况** | **备注** | -| GPIO | 支持 | PA0, PA1... PC15 ---> PIN: 0, 1...47 | -| UART | 支持 | UART1 | -| **扩展模块** | **支持情况** | **备注** | -| | | | - -## 使用说明 - -使用说明分为如下两个章节: - -- 快速上手 - - 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 - -- 进阶使用 - - 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 - - -### 快速上手 - -本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 - -#### 硬件连接 - -使用数据线连接开发板到 PC,打开电源开关。 - -#### 编译下载 - -双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 - -> 工程默认配置使用 J-Link 仿真器下载程序,在通过 J-Link 连接开发板的基础上,点击下载按钮即可下载程序到开发板 - -#### 运行结果 - -下载程序成功之后,系统会自动运行,LED 闪烁 - -连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: - -```bash - \ | / -- RT - Thread Operating System - / | \ 4.0.1 build Mar 10 2019 - 2006 - 2019 Copyright by rt-thread team -msh > -``` -### 进阶使用 - -此 BSP 默认只开启了 GPIO 和 串口1 的功能,如果需使用 ADC、PWM等更多高级功能,再用 ENV 工具对BSP 进行配置,步骤如下: - -1. 在 bsp 下打开 env 工具。 - -2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 - -3. 输入`pkgs --update`命令更新软件包。 - -4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 - -本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 - -## 注意事项 - -- 只能用USB转TTL连接PC机 ; - -## 联系人信息 - -维护人: - -- [obito0](https://github.com/obito0), 邮箱:<496420502@qq.com> \ No newline at end of file diff --git a/bsp/stm32/stm32f103-mini-system/SConscript b/bsp/stm32/stm32f103-mini-system/SConscript deleted file mode 100644 index 20f7689c53..0000000000 --- a/bsp/stm32/stm32f103-mini-system/SConscript +++ /dev/null @@ -1,15 +0,0 @@ -# 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/stm32/stm32f103-mini-system/SConstruct b/bsp/stm32/stm32f103-mini-system/SConstruct deleted file mode 100644 index 1a9f419db5..0000000000 --- a/bsp/stm32/stm32f103-mini-system/SConstruct +++ /dev/null @@ -1,60 +0,0 @@ -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 = 'rt-thread.' + 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 rt-thread.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) - -stm32_library = 'STM32F1xx_HAL' -rtconfig.BSP_LIBRARY_TYPE = stm32_library - -# include libraries -objs.extend(SConscript(os.path.join(libraries_path_prefix, stm32_library, 'SConscript'))) - -# include drivers -objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'))) - -# make a building -DoBuilding(TARGET, objs) diff --git a/bsp/stm32/stm32f103-mini-system/applications/SConscript b/bsp/stm32/stm32f103-mini-system/applications/SConscript deleted file mode 100644 index ef1c39fd83..0000000000 --- a/bsp/stm32/stm32f103-mini-system/applications/SConscript +++ /dev/null @@ -1,11 +0,0 @@ -Import('RTT_ROOT') -Import('rtconfig') -from building import * - -cwd = GetCurrentDir() -src = Glob('*.c') -CPPPATH = [cwd, ] - -group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) - -Return('group') diff --git a/bsp/stm32/stm32f103-mini-system/applications/main.c b/bsp/stm32/stm32f103-mini-system/applications/main.c deleted file mode 100644 index c5fa5a5958..0000000000 --- a/bsp/stm32/stm32f103-mini-system/applications/main.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2006-2018, RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2019-03-08 obito0 first version - */ - -#include -#include -#include - -/* defined the LED0 pin: PC13 */ -#define LED0_PIN GET_PIN(C, 13) - -int main(void) -{ - int count = 1; - /* set LED0 pin mode to output */ - rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); - - while (count++) - { - rt_pin_write(LED0_PIN, PIN_HIGH); - rt_thread_mdelay(500); - rt_pin_write(LED0_PIN, PIN_LOW); - rt_thread_mdelay(500); - } - - return RT_EOK; -} diff --git a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/.mxproject deleted file mode 100644 index 934c2d572a..0000000000 --- a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/.mxproject +++ /dev/null @@ -1,14 +0,0 @@ -[PreviousGenFiles] -HeaderPath=F:/rt-thread/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc -HeaderFiles=stm32f1xx_it.h;stm32f1xx_hal_conf.h;main.h; -SourcePath=F:/rt-thread/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src -SourceFiles=stm32f1xx_it.c;stm32f1xx_hal_msp.c;main.c; - -[PreviousLibFiles] -LibFiles=Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_spi.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_spi.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h;Drivers/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h;Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h;Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h;Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/core_cmSimd.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h; - -[PreviousUsedKeilFiles] -SourceFiles=..\Src\main.c;..\Src\stm32f1xx_it.c;..\Src\stm32f1xx_hal_msp.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../\Src/system_stm32f1xx.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c;../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c;../\Src/system_stm32f1xx.c;../Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c;null; -HeaderPath=..\Drivers\STM32F1xx_HAL_Driver\Inc;..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F1xx\Include;..\Drivers\CMSIS\Include;..\Inc; -CDefines=USE_HAL_DRIVER;STM32F103xB;USE_HAL_DRIVER;STM32F103xB; - diff --git a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/CubeMX_Config.ioc deleted file mode 100644 index 6dfacfbd4b..0000000000 --- a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/CubeMX_Config.ioc +++ /dev/null @@ -1,140 +0,0 @@ -#MicroXplorer Configuration settings - do not modify -ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_1 -ADC1.IPParameters=Rank-0\#ChannelRegularConversion,master,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag -ADC1.NbrOfConversionFlag=1 -ADC1.Rank-0\#ChannelRegularConversion=1 -ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 -ADC1.master=1 -File.Version=6 -KeepUserPlacement=false -Mcu.Family=STM32F1 -Mcu.IP0=ADC1 -Mcu.IP1=NVIC -Mcu.IP2=RCC -Mcu.IP3=SPI1 -Mcu.IP4=SYS -Mcu.IP5=USART1 -Mcu.IPNb=6 -Mcu.Name=STM32F103C(8-B)Tx -Mcu.Package=LQFP48 -Mcu.Pin0=PC14-OSC32_IN -Mcu.Pin1=PC15-OSC32_OUT -Mcu.Pin10=PA13 -Mcu.Pin11=PA14 -Mcu.Pin12=VP_SYS_VS_Systick -Mcu.Pin2=PD0-OSC_IN -Mcu.Pin3=PD1-OSC_OUT -Mcu.Pin4=PA1 -Mcu.Pin5=PA5 -Mcu.Pin6=PA6 -Mcu.Pin7=PA7 -Mcu.Pin8=PA9 -Mcu.Pin9=PA10 -Mcu.PinsNb=13 -Mcu.ThirdPartyNb=0 -Mcu.UserConstants= -Mcu.UserName=STM32F103C8Tx -MxCube.Version=5.2.1 -MxDb.Version=DB.5.0.21 -NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false -NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false -NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false -NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false -NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false -NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false -NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 -NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false -NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true -NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false -PA1.Signal=ADCx_IN1 -PA10.Mode=Asynchronous -PA10.Signal=USART1_RX -PA13.Mode=Serial_Wire -PA13.Signal=SYS_JTMS-SWDIO -PA14.Mode=Serial_Wire -PA14.Signal=SYS_JTCK-SWCLK -PA5.Mode=Full_Duplex_Master -PA5.Signal=SPI1_SCK -PA6.Mode=Full_Duplex_Master -PA6.Signal=SPI1_MISO -PA7.Mode=Full_Duplex_Master -PA7.Signal=SPI1_MOSI -PA9.Mode=Asynchronous -PA9.Signal=USART1_TX -PC14-OSC32_IN.Mode=LSE-External-Oscillator -PC14-OSC32_IN.Signal=RCC_OSC32_IN -PC15-OSC32_OUT.Mode=LSE-External-Oscillator -PC15-OSC32_OUT.Signal=RCC_OSC32_OUT -PCC.Checker=false -PCC.Line=STM32F103 -PCC.MCU=STM32F103C(8-B)Tx -PCC.PartNumber=STM32F103C8Tx -PCC.Seq0=0 -PCC.Series=STM32F1 -PCC.Temperature=25 -PCC.Vdd=3.3 -PD0-OSC_IN.Mode=HSE-External-Oscillator -PD0-OSC_IN.Signal=RCC_OSC_IN -PD1-OSC_OUT.Mode=HSE-External-Oscillator -PD1-OSC_OUT.Signal=RCC_OSC_OUT -PinOutPanel.RotationAngle=0 -ProjectManager.AskForMigrate=true -ProjectManager.BackupPrevious=false -ProjectManager.CompilerOptimize=6 -ProjectManager.ComputerToolchain=false -ProjectManager.CoupleFile=false -ProjectManager.CustomerFirmwarePackage= -ProjectManager.DefaultFWLocation=true -ProjectManager.DeletePrevious=true -ProjectManager.DeviceId=STM32F103C8Tx -ProjectManager.FirmwarePackage=STM32Cube FW_F1 V1.7.0 -ProjectManager.FreePins=false -ProjectManager.HalAssertFull=false -ProjectManager.HeapSize=0x200 -ProjectManager.KeepUserCode=true -ProjectManager.LastFirmware=true -ProjectManager.LibraryCopy=0 -ProjectManager.MainLocation=Src -ProjectManager.NoMain=false -ProjectManager.PreviousToolchain= -ProjectManager.ProjectBuild=false -ProjectManager.ProjectFileName=CubeMX_Config.ioc -ProjectManager.ProjectName=CubeMX_Config -ProjectManager.StackSize=0x400 -ProjectManager.TargetToolchain=MDK-ARM V5 -ProjectManager.ToolChainLocation= -ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_SPI1_Init-SPI1-false-HAL-true -RCC.ADCFreqValue=8000000 -RCC.AHBFreq_Value=16000000 -RCC.APB1CLKDivider=RCC_HCLK_DIV2 -RCC.APB1Freq_Value=8000000 -RCC.APB1TimFreq_Value=16000000 -RCC.APB2Freq_Value=16000000 -RCC.APB2TimFreq_Value=16000000 -RCC.FCLKCortexFreq_Value=16000000 -RCC.FamilyName=M -RCC.HCLKFreq_Value=16000000 -RCC.IPParameters=ADCFreqValue,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLSourceVirtual,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,VCOOutput2Freq_Value -RCC.MCOFreq_Value=16000000 -RCC.PLLCLKFreq_Value=16000000 -RCC.PLLMCOFreq_Value=8000000 -RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE -RCC.SYSCLKFreq_VALUE=16000000 -RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK -RCC.TimSysFreq_Value=16000000 -RCC.USBFreq_Value=16000000 -RCC.VCOOutput2Freq_Value=8000000 -SH.ADCx_IN1.0=ADC1_IN1,IN1 -SH.ADCx_IN1.ConfNb=1 -SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_8 -SPI1.CalculateBaudRate=2.0 MBits/s -SPI1.Direction=SPI_DIRECTION_2LINES -SPI1.IPParameters=VirtualType,Mode,Direction,BaudRatePrescaler,CalculateBaudRate -SPI1.Mode=SPI_MODE_MASTER -SPI1.VirtualType=VM_MASTER -USART1.IPParameters=VirtualMode -USART1.VirtualMode=VM_ASYNC -VP_SYS_VS_Systick.Mode=SysTick -VP_SYS_VS_Systick.Signal=SYS_VS_Systick -board=custom diff --git a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/main.h deleted file mode 100644 index 75cb6f9a15..0000000000 --- a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/main.h +++ /dev/null @@ -1,71 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file : main.h - * @brief : Header for main.c file. - * This file contains the common defines of the application. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __MAIN_H -#define __MAIN_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f1xx_hal.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -/* Exported types ------------------------------------------------------------*/ -/* USER CODE BEGIN ET */ - -/* USER CODE END ET */ - -/* Exported constants --------------------------------------------------------*/ -/* USER CODE BEGIN EC */ - -/* USER CODE END EC */ - -/* Exported macro ------------------------------------------------------------*/ -/* USER CODE BEGIN EM */ - -/* USER CODE END EM */ - -/* Exported functions prototypes ---------------------------------------------*/ -void Error_Handler(void); - -/* USER CODE BEGIN EFP */ - -/* USER CODE END EFP */ - -/* Private defines -----------------------------------------------------------*/ -/* USER CODE BEGIN Private defines */ - -/* USER CODE END Private defines */ - -#ifdef __cplusplus -} -#endif - -#endif /* __MAIN_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h deleted file mode 100644 index 467a07d1ca..0000000000 --- a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h +++ /dev/null @@ -1,370 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f1xx_hal_conf.h - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2019 STMicroelectronics

- * - * 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 STMicroelectronics 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. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F1xx_HAL_CONF_H -#define __STM32F1xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ - -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -/*#define HAL_CRYP_MODULE_ENABLED */ -/*#define HAL_CAN_MODULE_ENABLED */ -/*#define HAL_CEC_MODULE_ENABLED */ -/*#define HAL_CORTEX_MODULE_ENABLED */ -/*#define HAL_CRC_MODULE_ENABLED */ -/*#define HAL_DAC_MODULE_ENABLED */ -/*#define HAL_DMA_MODULE_ENABLED */ -/*#define HAL_ETH_MODULE_ENABLED */ -/*#define HAL_FLASH_MODULE_ENABLED */ -#define HAL_GPIO_MODULE_ENABLED -/*#define HAL_I2C_MODULE_ENABLED */ -/*#define HAL_I2S_MODULE_ENABLED */ -/*#define HAL_IRDA_MODULE_ENABLED */ -/*#define HAL_IWDG_MODULE_ENABLED */ -/*#define HAL_NOR_MODULE_ENABLED */ -/*#define HAL_NAND_MODULE_ENABLED */ -/*#define HAL_PCCARD_MODULE_ENABLED */ -/*#define HAL_PCD_MODULE_ENABLED */ -/*#define HAL_HCD_MODULE_ENABLED */ -/*#define HAL_PWR_MODULE_ENABLED */ -/*#define HAL_RCC_MODULE_ENABLED */ -/*#define HAL_RTC_MODULE_ENABLED */ -/*#define HAL_SD_MODULE_ENABLED */ -/*#define HAL_MMC_MODULE_ENABLED */ -/*#define HAL_SDRAM_MODULE_ENABLED */ -/*#define HAL_SMARTCARD_MODULE_ENABLED */ -#define HAL_SPI_MODULE_ENABLED -/*#define HAL_SRAM_MODULE_ENABLED */ -/*#define HAL_TIM_MODULE_ENABLED */ -#define HAL_UART_MODULE_ENABLED -/*#define HAL_USART_MODULE_ENABLED */ -/*#define HAL_WWDG_MODULE_ENABLED */ -/*#define HAL_EXTI_MODULE_ENABLED */ - -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 40000U /*!< LSI Typical Value in Hz */ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE ((uint32_t)32768) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE ((uint32_t)3300) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((uint32_t)0) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0 -#define PREFETCH_ENABLE 1 - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2 -#define MAC_ADDR1 0 -#define MAC_ADDR2 0 -#define MAC_ADDR3 0 -#define MAC_ADDR4 0 -#define MAC_ADDR5 0 - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB ((uint32_t)8) /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB ((uint32_t)4) /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848_PHY_ADDRESS Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY ((uint32_t)0x000000FF) -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY ((uint32_t)0x00000FFF) - -#define PHY_READ_TO ((uint32_t)0x0000FFFF) -#define PHY_WRITE_TO ((uint32_t)0x0000FFFF) - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x00) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x01) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ -#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */ - -#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f1xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f1xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f1xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f1xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32f1xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f1xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f1xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f1xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f1xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f1xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f1xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f1xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f1xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f1xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f1xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f1xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f1xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f1xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f1xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED - #include "stm32f1xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32f1xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32f1xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f1xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f1xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f1xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f1xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f1xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f1xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f1xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f1xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f1xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32f1xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F1xx_HAL_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/stm32f1xx_it.h b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/stm32f1xx_it.h deleted file mode 100644 index 101d8aa728..0000000000 --- a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Inc/stm32f1xx_it.h +++ /dev/null @@ -1,69 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32f1xx_it.h - * @brief This file contains the headers of the interrupt handlers. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F1xx_IT_H -#define __STM32F1xx_IT_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -/* Exported types ------------------------------------------------------------*/ -/* USER CODE BEGIN ET */ - -/* USER CODE END ET */ - -/* Exported constants --------------------------------------------------------*/ -/* USER CODE BEGIN EC */ - -/* USER CODE END EC */ - -/* Exported macro ------------------------------------------------------------*/ -/* USER CODE BEGIN EM */ - -/* USER CODE END EM */ - -/* Exported functions prototypes ---------------------------------------------*/ -void NMI_Handler(void); -void HardFault_Handler(void); -void MemManage_Handler(void); -void BusFault_Handler(void); -void UsageFault_Handler(void); -void SVC_Handler(void); -void DebugMon_Handler(void); -void PendSV_Handler(void); -void SysTick_Handler(void); -/* USER CODE BEGIN EFP */ - -/* USER CODE END EFP */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F1xx_IT_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/main.c deleted file mode 100644 index 0fb8a9747d..0000000000 --- a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/main.c +++ /dev/null @@ -1,325 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file : main.c - * @brief : Main program body - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Includes ------------------------------------------------------------------*/ -#include "main.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ - -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ - -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ - -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; - -SPI_HandleTypeDef hspi1; - -UART_HandleTypeDef huart1; - -/* USER CODE BEGIN PV */ - -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_USART1_UART_Init(void); -static void MX_ADC1_Init(void); -static void MX_SPI1_Init(void); -/* USER CODE BEGIN PFP */ - -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - - /* USER CODE END 1 */ - - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_USART1_UART_Init(); - MX_ADC1_Init(); - MX_SPI1_Init(); - /* USER CODE BEGIN 2 */ - - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the CPU, AHB and APB busses clocks - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL2; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - /** Initializes the CPU, AHB and APB busses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - /** Common config - */ - hadc1.Instance = ADC1; - hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 1; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_1; - sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_8BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief USART1 Initialization Function - * @param None - * @retval None - */ -static void MX_USART1_UART_Init(void) -{ - - /* USER CODE BEGIN USART1_Init 0 */ - - /* USER CODE END USART1_Init 0 */ - - /* USER CODE BEGIN USART1_Init 1 */ - - /* USER CODE END USART1_Init 1 */ - huart1.Instance = USART1; - huart1.Init.BaudRate = 115200; - huart1.Init.WordLength = UART_WORDLENGTH_8B; - huart1.Init.StopBits = UART_STOPBITS_1; - huart1.Init.Parity = UART_PARITY_NONE; - huart1.Init.Mode = UART_MODE_TX_RX; - huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; - huart1.Init.OverSampling = UART_OVERSAMPLING_16; - if (HAL_UART_Init(&huart1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN USART1_Init 2 */ - - /* USER CODE END USART1_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - -} - -/* USER CODE BEGIN 4 */ - -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* User can add his own implementation to report the HAL error return state */ - - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* User can add his own implementation to report the file name and line number, - tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c deleted file mode 100644 index 663b3021fa..0000000000 --- a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c +++ /dev/null @@ -1,286 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * File Name : stm32f1xx_hal_msp.c - * Description : This file provides code for the MSP Initialization - * and de-Initialization codes. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN TD */ - -/* USER CODE END TD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN Define */ - -/* USER CODE END Define */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN Macro */ - -/* USER CODE END Macro */ - -/* Private variables ---------------------------------------------------------*/ -/* USER CODE BEGIN PV */ - -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -/* USER CODE BEGIN PFP */ - -/* USER CODE END PFP */ - -/* External functions --------------------------------------------------------*/ -/* USER CODE BEGIN ExternalFunctions */ - -/* USER CODE END ExternalFunctions */ - -/* USER CODE BEGIN 0 */ - -/* USER CODE END 0 */ -/** - * Initializes the Global MSP. - */ -void HAL_MspInit(void) -{ - /* USER CODE BEGIN MspInit 0 */ - - /* USER CODE END MspInit 0 */ - - __HAL_RCC_AFIO_CLK_ENABLE(); - __HAL_RCC_PWR_CLK_ENABLE(); - - /* System interrupt init*/ - - /** NOJTAG: JTAG-DP Disabled and SW-DP Enabled - */ - __HAL_AFIO_REMAP_SWJ_NOJTAG(); - - /* USER CODE BEGIN MspInit 1 */ - - /* USER CODE END MspInit 1 */ -} - -/** -* @brief ADC MSP Initialization -* This function configures the hardware resources used in this example -* @param hadc: ADC handle pointer -* @retval None -*/ -void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(hadc->Instance==ADC1) - { - /* USER CODE BEGIN ADC1_MspInit 0 */ - - /* USER CODE END ADC1_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_ADC1_CLK_ENABLE(); - - __HAL_RCC_GPIOA_CLK_ENABLE(); - /**ADC1 GPIO Configuration - PA1 ------> ADC1_IN1 - */ - GPIO_InitStruct.Pin = GPIO_PIN_1; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /* USER CODE BEGIN ADC1_MspInit 1 */ - - /* USER CODE END ADC1_MspInit 1 */ - } - -} - -/** -* @brief ADC MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param hadc: ADC handle pointer -* @retval None -*/ -void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) -{ - if(hadc->Instance==ADC1) - { - /* USER CODE BEGIN ADC1_MspDeInit 0 */ - - /* USER CODE END ADC1_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_ADC1_CLK_DISABLE(); - - /**ADC1 GPIO Configuration - PA1 ------> ADC1_IN1 - */ - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1); - - /* USER CODE BEGIN ADC1_MspDeInit 1 */ - - /* USER CODE END ADC1_MspDeInit 1 */ - } - -} - -/** -* @brief SPI MSP Initialization -* This function configures the hardware resources used in this example -* @param hspi: SPI handle pointer -* @retval None -*/ -void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(hspi->Instance==SPI1) - { - /* USER CODE BEGIN SPI1_MspInit 0 */ - - /* USER CODE END SPI1_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_SPI1_CLK_ENABLE(); - - __HAL_RCC_GPIOA_CLK_ENABLE(); - /**SPI1 GPIO Configuration - PA5 ------> SPI1_SCK - PA6 ------> SPI1_MISO - PA7 ------> SPI1_MOSI - */ - GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = GPIO_PIN_6; - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /* USER CODE BEGIN SPI1_MspInit 1 */ - - /* USER CODE END SPI1_MspInit 1 */ - } - -} - -/** -* @brief SPI MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param hspi: SPI handle pointer -* @retval None -*/ -void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) -{ - if(hspi->Instance==SPI1) - { - /* USER CODE BEGIN SPI1_MspDeInit 0 */ - - /* USER CODE END SPI1_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_SPI1_CLK_DISABLE(); - - /**SPI1 GPIO Configuration - PA5 ------> SPI1_SCK - PA6 ------> SPI1_MISO - PA7 ------> SPI1_MOSI - */ - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7); - - /* USER CODE BEGIN SPI1_MspDeInit 1 */ - - /* USER CODE END SPI1_MspDeInit 1 */ - } - -} - -/** -* @brief UART MSP Initialization -* This function configures the hardware resources used in this example -* @param huart: UART handle pointer -* @retval None -*/ -void HAL_UART_MspInit(UART_HandleTypeDef* huart) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(huart->Instance==USART1) - { - /* USER CODE BEGIN USART1_MspInit 0 */ - - /* USER CODE END USART1_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_USART1_CLK_ENABLE(); - - __HAL_RCC_GPIOA_CLK_ENABLE(); - /**USART1 GPIO Configuration - PA9 ------> USART1_TX - PA10 ------> USART1_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_9; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = GPIO_PIN_10; - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /* USER CODE BEGIN USART1_MspInit 1 */ - - /* USER CODE END USART1_MspInit 1 */ - } - -} - -/** -* @brief UART MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param huart: UART handle pointer -* @retval None -*/ -void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) -{ - if(huart->Instance==USART1) - { - /* USER CODE BEGIN USART1_MspDeInit 0 */ - - /* USER CODE END USART1_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_USART1_CLK_DISABLE(); - - /**USART1 GPIO Configuration - PA9 ------> USART1_TX - PA10 ------> USART1_RX - */ - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); - - /* USER CODE BEGIN USART1_MspDeInit 1 */ - - /* USER CODE END USART1_MspDeInit 1 */ - } - -} - -/* USER CODE BEGIN 1 */ - -/* USER CODE END 1 */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/stm32f1xx_it.c b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/stm32f1xx_it.c deleted file mode 100644 index 6a95ce4bae..0000000000 --- a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/stm32f1xx_it.c +++ /dev/null @@ -1,203 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32f1xx_it.c - * @brief Interrupt Service Routines. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "stm32f1xx_it.h" -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN TD */ - -/* USER CODE END TD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ - -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ - -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -/* USER CODE BEGIN PV */ - -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -/* USER CODE BEGIN PFP */ - -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ - -/* USER CODE END 0 */ - -/* External variables --------------------------------------------------------*/ - -/* USER CODE BEGIN EV */ - -/* USER CODE END EV */ - -/******************************************************************************/ -/* Cortex-M3 Processor Interruption and Exception Handlers */ -/******************************************************************************/ -/** - * @brief This function handles Non maskable interrupt. - */ -void NMI_Handler(void) -{ - /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ - - /* USER CODE END NonMaskableInt_IRQn 0 */ - /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ - - /* USER CODE END NonMaskableInt_IRQn 1 */ -} - -/** - * @brief This function handles Hard fault interrupt. - */ -void HardFault_Handler(void) -{ - /* USER CODE BEGIN HardFault_IRQn 0 */ - - /* USER CODE END HardFault_IRQn 0 */ - while (1) - { - /* USER CODE BEGIN W1_HardFault_IRQn 0 */ - /* USER CODE END W1_HardFault_IRQn 0 */ - } -} - -/** - * @brief This function handles Memory management fault. - */ -void MemManage_Handler(void) -{ - /* USER CODE BEGIN MemoryManagement_IRQn 0 */ - - /* USER CODE END MemoryManagement_IRQn 0 */ - while (1) - { - /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ - /* USER CODE END W1_MemoryManagement_IRQn 0 */ - } -} - -/** - * @brief This function handles Prefetch fault, memory access fault. - */ -void BusFault_Handler(void) -{ - /* USER CODE BEGIN BusFault_IRQn 0 */ - - /* USER CODE END BusFault_IRQn 0 */ - while (1) - { - /* USER CODE BEGIN W1_BusFault_IRQn 0 */ - /* USER CODE END W1_BusFault_IRQn 0 */ - } -} - -/** - * @brief This function handles Undefined instruction or illegal state. - */ -void UsageFault_Handler(void) -{ - /* USER CODE BEGIN UsageFault_IRQn 0 */ - - /* USER CODE END UsageFault_IRQn 0 */ - while (1) - { - /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ - /* USER CODE END W1_UsageFault_IRQn 0 */ - } -} - -/** - * @brief This function handles System service call via SWI instruction. - */ -void SVC_Handler(void) -{ - /* USER CODE BEGIN SVCall_IRQn 0 */ - - /* USER CODE END SVCall_IRQn 0 */ - /* USER CODE BEGIN SVCall_IRQn 1 */ - - /* USER CODE END SVCall_IRQn 1 */ -} - -/** - * @brief This function handles Debug monitor. - */ -void DebugMon_Handler(void) -{ - /* USER CODE BEGIN DebugMonitor_IRQn 0 */ - - /* USER CODE END DebugMonitor_IRQn 0 */ - /* USER CODE BEGIN DebugMonitor_IRQn 1 */ - - /* USER CODE END DebugMonitor_IRQn 1 */ -} - -/** - * @brief This function handles Pendable request for system service. - */ -void PendSV_Handler(void) -{ - /* USER CODE BEGIN PendSV_IRQn 0 */ - - /* USER CODE END PendSV_IRQn 0 */ - /* USER CODE BEGIN PendSV_IRQn 1 */ - - /* USER CODE END PendSV_IRQn 1 */ -} - -/** - * @brief This function handles System tick timer. - */ -void SysTick_Handler(void) -{ - /* USER CODE BEGIN SysTick_IRQn 0 */ - - /* USER CODE END SysTick_IRQn 0 */ - HAL_IncTick(); - /* USER CODE BEGIN SysTick_IRQn 1 */ - - /* USER CODE END SysTick_IRQn 1 */ -} - -/******************************************************************************/ -/* STM32F1xx Peripheral Interrupt Handlers */ -/* Add here the Interrupt Handlers for the used peripherals. */ -/* For the available peripheral interrupt handler names, */ -/* please refer to the startup file (startup_stm32f1xx.s). */ -/******************************************************************************/ - -/* USER CODE BEGIN 1 */ - -/* USER CODE END 1 */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/system_stm32f1xx.c b/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/system_stm32f1xx.c deleted file mode 100644 index af3759a3b6..0000000000 --- a/bsp/stm32/stm32f103-mini-system/board/CubeMX_Config/Src/system_stm32f1xx.c +++ /dev/null @@ -1,448 +0,0 @@ -/** - ****************************************************************************** - * @file system_stm32f1xx.c - * @author MCD Application Team - * @version V4.2.0 - * @date 31-March-2017 - * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. - * - * 1. This file provides two functions and one global variable to be called from - * user application: - * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier - * factors, AHB/APBx prescalers and Flash settings). - * This function is called at startup just after reset and - * before branch to main program. This call is made inside - * the "startup_stm32f1xx_xx.s" file. - * - * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used - * by the user application to setup the SysTick - * timer or configure other parameters. - * - * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must - * be called whenever the core clock is changed - * during program execution. - * - * 2. After each device reset the HSI (8 MHz) is used as system clock source. - * Then SystemInit() function is called, in "startup_stm32f1xx_xx.s" file, to - * configure the system clock before to branch to main program. - * - * 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depending on - * the product used), refer to "HSE_VALUE". - * When HSE is used as system clock source, directly or through PLL, and you - * are using different crystal you have to adapt the HSE value to your own - * configuration. - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2017 STMicroelectronics

- * - * 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 STMicroelectronics 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. - * - ****************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup stm32f1xx_system - * @{ - */ - -/** @addtogroup STM32F1xx_System_Private_Includes - * @{ - */ - -#include "stm32f1xx.h" - -/** - * @} - */ - -/** @addtogroup STM32F1xx_System_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F1xx_System_Private_Defines - * @{ - */ - -#if !defined (HSE_VALUE) - #define HSE_VALUE 8000000U /*!< Default value of the External oscillator in Hz. - This value can be provided and adapted by the user application. */ -#endif /* HSE_VALUE */ - -#if !defined (HSI_VALUE) - #define HSI_VALUE 8000000U /*!< Default value of the Internal oscillator in Hz. - This value can be provided and adapted by the user application. */ -#endif /* HSI_VALUE */ - -/*!< Uncomment the following line if you need to use external SRAM */ -#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) -/* #define DATA_IN_ExtSRAM */ -#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ - -/*!< Uncomment the following line if you need to relocate your vector Table in - Internal SRAM. */ -/* #define VECT_TAB_SRAM */ -#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. - This value must be a multiple of 0x200. */ - - -/** - * @} - */ - -/** @addtogroup STM32F1xx_System_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F1xx_System_Private_Variables - * @{ - */ - -/******************************************************************************* -* Clock Definitions -*******************************************************************************/ -#if defined(STM32F100xB) ||defined(STM32F100xE) - uint32_t SystemCoreClock = 24000000U; /*!< System Clock Frequency (Core Clock) */ -#else /*!< HSI Selected as System Clock source */ - uint32_t SystemCoreClock = 72000000U; /*!< System Clock Frequency (Core Clock) */ -#endif - -const uint8_t AHBPrescTable[16U] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; -const uint8_t APBPrescTable[8U] = {0, 0, 0, 0, 1, 2, 3, 4}; - -/** - * @} - */ - -/** @addtogroup STM32F1xx_System_Private_FunctionPrototypes - * @{ - */ - -#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) -#ifdef DATA_IN_ExtSRAM - static void SystemInit_ExtMemCtl(void); -#endif /* DATA_IN_ExtSRAM */ -#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ - -/** - * @} - */ - -/** @addtogroup STM32F1xx_System_Private_Functions - * @{ - */ - -/** - * @brief Setup the microcontroller system - * Initialize the Embedded Flash Interface, the PLL and update the - * SystemCoreClock variable. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -void SystemInit (void) -{ - /* Reset the RCC clock configuration to the default reset state(for debug purpose) */ - /* Set HSION bit */ - RCC->CR |= 0x00000001U; - - /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */ -#if !defined(STM32F105xC) && !defined(STM32F107xC) - RCC->CFGR &= 0xF8FF0000U; -#else - RCC->CFGR &= 0xF0FF0000U; -#endif /* STM32F105xC */ - - /* Reset HSEON, CSSON and PLLON bits */ - RCC->CR &= 0xFEF6FFFFU; - - /* Reset HSEBYP bit */ - RCC->CR &= 0xFFFBFFFFU; - - /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */ - RCC->CFGR &= 0xFF80FFFFU; - -#if defined(STM32F105xC) || defined(STM32F107xC) - /* Reset PLL2ON and PLL3ON bits */ - RCC->CR &= 0xEBFFFFFFU; - - /* Disable all interrupts and clear pending bits */ - RCC->CIR = 0x00FF0000U; - - /* Reset CFGR2 register */ - RCC->CFGR2 = 0x00000000U; -#elif defined(STM32F100xB) || defined(STM32F100xE) - /* Disable all interrupts and clear pending bits */ - RCC->CIR = 0x009F0000U; - - /* Reset CFGR2 register */ - RCC->CFGR2 = 0x00000000U; -#else - /* Disable all interrupts and clear pending bits */ - RCC->CIR = 0x009F0000U; -#endif /* STM32F105xC */ - -#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) - #ifdef DATA_IN_ExtSRAM - SystemInit_ExtMemCtl(); - #endif /* DATA_IN_ExtSRAM */ -#endif - -#ifdef VECT_TAB_SRAM - SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ -#else - SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */ -#endif -} - -/** - * @brief Update SystemCoreClock variable according to Clock Register Values. - * The SystemCoreClock variable contains the core clock (HCLK), it can - * be used by the user application to setup the SysTick timer or configure - * other parameters. - * - * @note Each time the core clock (HCLK) changes, this function must be called - * to update SystemCoreClock variable value. Otherwise, any configuration - * based on this variable will be incorrect. - * - * @note - The system frequency computed by this function is not the real - * frequency in the chip. It is calculated based on the predefined - * constant and the selected clock source: - * - * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) - * - * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) - * - * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) - * or HSI_VALUE(*) multiplied by the PLL factors. - * - * (*) HSI_VALUE is a constant defined in stm32f1xx.h file (default value - * 8 MHz) but the real value may vary depending on the variations - * in voltage and temperature. - * - * (**) HSE_VALUE is a constant defined in stm32f1xx.h file (default value - * 8 MHz or 25 MHz, depending on the product used), user has to ensure - * that HSE_VALUE is same as the real frequency of the crystal used. - * Otherwise, this function may have wrong result. - * - * - The result of this function could be not correct when using fractional - * value for HSE crystal. - * @param None - * @retval None - */ -void SystemCoreClockUpdate (void) -{ - uint32_t tmp = 0U, pllmull = 0U, pllsource = 0U; - -#if defined(STM32F105xC) || defined(STM32F107xC) - uint32_t prediv1source = 0U, prediv1factor = 0U, prediv2factor = 0U, pll2mull = 0U; -#endif /* STM32F105xC */ - -#if defined(STM32F100xB) || defined(STM32F100xE) - uint32_t prediv1factor = 0U; -#endif /* STM32F100xB or STM32F100xE */ - - /* Get SYSCLK source -------------------------------------------------------*/ - tmp = RCC->CFGR & RCC_CFGR_SWS; - - switch (tmp) - { - case 0x00U: /* HSI used as system clock */ - SystemCoreClock = HSI_VALUE; - break; - case 0x04U: /* HSE used as system clock */ - SystemCoreClock = HSE_VALUE; - break; - case 0x08U: /* PLL used as system clock */ - - /* Get PLL clock source and multiplication factor ----------------------*/ - pllmull = RCC->CFGR & RCC_CFGR_PLLMULL; - pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; - -#if !defined(STM32F105xC) && !defined(STM32F107xC) - pllmull = ( pllmull >> 18U) + 2U; - - if (pllsource == 0x00U) - { - /* HSI oscillator clock divided by 2 selected as PLL clock entry */ - SystemCoreClock = (HSI_VALUE >> 1U) * pllmull; - } - else - { - #if defined(STM32F100xB) || defined(STM32F100xE) - prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U; - /* HSE oscillator clock selected as PREDIV1 clock entry */ - SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; - #else - /* HSE selected as PLL clock entry */ - if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET) - {/* HSE oscillator clock divided by 2 */ - SystemCoreClock = (HSE_VALUE >> 1U) * pllmull; - } - else - { - SystemCoreClock = HSE_VALUE * pllmull; - } - #endif - } -#else - pllmull = pllmull >> 18U; - - if (pllmull != 0x0DU) - { - pllmull += 2U; - } - else - { /* PLL multiplication factor = PLL input clock * 6.5 */ - pllmull = 13U / 2U; - } - - if (pllsource == 0x00U) - { - /* HSI oscillator clock divided by 2 selected as PLL clock entry */ - SystemCoreClock = (HSI_VALUE >> 1U) * pllmull; - } - else - {/* PREDIV1 selected as PLL clock entry */ - - /* Get PREDIV1 clock source and division factor */ - prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC; - prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U; - - if (prediv1source == 0U) - { - /* HSE oscillator clock selected as PREDIV1 clock entry */ - SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; - } - else - {/* PLL2 clock selected as PREDIV1 clock entry */ - - /* Get PREDIV2 division factor and PLL2 multiplication factor */ - prediv2factor = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4U) + 1U; - pll2mull = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8U) + 2U; - SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull; - } - } -#endif /* STM32F105xC */ - break; - - default: - SystemCoreClock = HSI_VALUE; - break; - } - - /* Compute HCLK clock frequency ----------------*/ - /* Get HCLK prescaler */ - tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4U)]; - /* HCLK clock frequency */ - SystemCoreClock >>= tmp; -} - -#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) -/** - * @brief Setup the external memory controller. Called in startup_stm32f1xx.s - * before jump to __main - * @param None - * @retval None - */ -#ifdef DATA_IN_ExtSRAM -/** - * @brief Setup the external memory controller. - * Called in startup_stm32f1xx_xx.s/.c before jump to main. - * This function configures the external SRAM mounted on STM3210E-EVAL - * board (STM32 High density devices). This SRAM will be used as program - * data memory (including heap and stack). - * @param None - * @retval None - */ -void SystemInit_ExtMemCtl(void) -{ - __IO uint32_t tmpreg; - /*!< FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is - required, then adjust the Register Addresses */ - - /* Enable FSMC clock */ - RCC->AHBENR = 0x00000114U; - - /* Delay after an RCC peripheral clock enabling */ - tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN); - - /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */ - RCC->APB2ENR = 0x000001E0U; - - /* Delay after an RCC peripheral clock enabling */ - tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN); - - (void)(tmpreg); - -/* --------------- SRAM Data lines, NOE and NWE configuration ---------------*/ -/*---------------- SRAM Address lines configuration -------------------------*/ -/*---------------- NOE and NWE configuration --------------------------------*/ -/*---------------- NE3 configuration ----------------------------------------*/ -/*---------------- NBL0, NBL1 configuration ---------------------------------*/ - - GPIOD->CRL = 0x44BB44BBU; - GPIOD->CRH = 0xBBBBBBBBU; - - GPIOE->CRL = 0xB44444BBU; - GPIOE->CRH = 0xBBBBBBBBU; - - GPIOF->CRL = 0x44BBBBBBU; - GPIOF->CRH = 0xBBBB4444U; - - GPIOG->CRL = 0x44BBBBBBU; - GPIOG->CRH = 0x444B4B44U; - -/*---------------- FSMC Configuration ---------------------------------------*/ -/*---------------- Enable FSMC Bank1_SRAM Bank ------------------------------*/ - - FSMC_Bank1->BTCR[4U] = 0x00001091U; - FSMC_Bank1->BTCR[5U] = 0x00110212U; -} -#endif /* DATA_IN_ExtSRAM */ -#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f103-mini-system/board/Kconfig b/bsp/stm32/stm32f103-mini-system/board/Kconfig deleted file mode 100644 index fe4bec029d..0000000000 --- a/bsp/stm32/stm32f103-mini-system/board/Kconfig +++ /dev/null @@ -1,81 +0,0 @@ -menu "Hardware Drivers Config" - -config SOC_STM32F103C8 - bool - select SOC_SERIES_STM32F1 - select RT_USING_COMPONENTS_INIT - select RT_USING_USER_MAIN - default y - -menu "Onboard Peripheral Drivers" - - config BSP_USING_USB_TO_USART - bool "Enable USB TO USART (uart1)" - select BSP_USING_UART - select BSP_USING_UART1 - default y - -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_ADC - bool "Enable ADC" - default n - select RT_USING_ADC - if BSP_USING_ADC - config BSP_USING_ADC1 - bool "Enable ADC1" - default n - - endif - source "../libraries/HAL_Drivers/Kconfig" - -endmenu - -menu "Board extended module Drivers" - -endmenu - -endmenu diff --git a/bsp/stm32/stm32f103-mini-system/board/SConscript b/bsp/stm32/stm32f103-mini-system/board/SConscript deleted file mode 100644 index 713a0e4b8f..0000000000 --- a/bsp/stm32/stm32f103-mini-system/board/SConscript +++ /dev/null @@ -1,35 +0,0 @@ -import os -import rtconfig -from building import * - -Import('SDK_LIB') - -cwd = GetCurrentDir() - -# add general drivers -src = Split(''' -board.c -CubeMX_Config/Src/stm32f1xx_hal_msp.c -''') - -path = [cwd] -path += [cwd + '/CubeMX_Config/Inc'] - -startup_path_prefix = SDK_LIB - -if rtconfig.CROSS_TOOL == 'gcc': - src += [startup_path_prefix + '/STM32F1xx_HAL/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc/startup_stm32f103xb.s'] -elif rtconfig.CROSS_TOOL == 'keil': - src += [startup_path_prefix + '/STM32F1xx_HAL/CMSIS/Device/ST/STM32F1xx/Source/Templates/arm/startup_stm32f103xb.s'] -elif rtconfig.CROSS_TOOL == 'iar': - src += [startup_path_prefix + '/STM32F1xx_HAL/CMSIS/Device/ST/STM32F1xx/Source/Templates/iar/startup_stm32f103xb.s'] - -# STM32F100xB || STM32F100xE || STM32F101x6 -# STM32F101xB || STM32F101xE || STM32F101xG -# STM32F102x6 || STM32F102xB || STM32F103x6 -# STM32F103xB || STM32F103xE || STM32F103xG -# STM32F105xC || STM32F107xC) -# You can select chips from the list above -CPPDEFINES = ['STM32F103xB'] -group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) -Return('group') diff --git a/bsp/stm32/stm32f103-mini-system/board/board.c b/bsp/stm32/stm32f103-mini-system/board/board.c deleted file mode 100644 index b7ca2b8461..0000000000 --- a/bsp/stm32/stm32f103-mini-system/board/board.c +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2006-2018, RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2019-03-08 obito0 first version - */ - -#include "board.h" - -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - - /** Initializes the CPU, AHB and APB busses clocks - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - /** Initializes the CPU, AHB and APB busses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } -} diff --git a/bsp/stm32/stm32f103-mini-system/board/board.h b/bsp/stm32/stm32f103-mini-system/board/board.h deleted file mode 100644 index 7f0ae67d48..0000000000 --- a/bsp/stm32/stm32f103-mini-system/board/board.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2006-2018, RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2018-11-5 SummerGift first version - */ - -#ifndef __BOARD_H__ -#define __BOARD_H__ - -#include -#include -#include "drv_common.h" -#include "drv_gpio.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000) -#define STM32_FLASH_SIZE (64 * 1024) -#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) - -/* Internal SRAM memory size[Kbytes] <8-64>, Default: 64*/ -#define STM32_SRAM_SIZE 20 -#define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024) - -#if defined(__CC_ARM) || defined(__CLANG_ARM) -extern int Image$$RW_IRAM1$$ZI$$Limit; -#define HEAP_BEGIN ((void *)&Image$$RW_IRAM1$$ZI$$Limit) -#elif __ICCARM__ -#pragma section="CSTACK" -#define HEAP_BEGIN (__segment_end("CSTACK")) -#else -extern int __bss_end; -#define HEAP_BEGIN ((void *)&__bss_end) -#endif - -#define HEAP_END STM32_SRAM_END - -void SystemClock_Config(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __BOARD_H__ */ diff --git a/bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.icf b/bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.icf deleted file mode 100644 index 72eeb0ba65..0000000000 --- a/bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.icf +++ /dev/null @@ -1,28 +0,0 @@ -/*###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__ = 0x0800FFFF; -define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; -define symbol __ICFEDIT_region_RAM_end__ = 0x20004FFF; -/*-Sizes-*/ -define symbol __ICFEDIT_size_cstack__ = 0x0400; -define symbol __ICFEDIT_size_heap__ = 0x0000; -/**** End of ICF editor section. ###ICF###*/ - -define memory mem with size = 4G; -define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; -define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; - -define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; - -initialize by copy { readwrite }; -do not initialize { section .noinit }; - -place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; - -place in ROM_region { readonly }; -place in RAM_region { readwrite, last block CSTACK}; diff --git a/bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.lds b/bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.lds deleted file mode 100644 index 22e29d2ed7..0000000000 --- a/bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.lds +++ /dev/null @@ -1,156 +0,0 @@ -/* - * linker script for STM32F10x with GNU ld - */ - -/* Program Entry, set to mark it as "used" and avoid gc */ -MEMORY -{ - ROM (rx) : ORIGIN = 0x08000000, LENGTH = 64k /* 64KB flash */ - RAM (rw) : ORIGIN = 0x20000000, LENGTH = 20k /* 20K 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 = .; - - /* section information for initial. */ - . = ALIGN(4); - __rt_init_start = .; - KEEP(*(SORT(.rti_fn*))) - __rt_init_end = .; - - . = ALIGN(4); - - PROVIDE(__ctors_start__ = .); - KEEP (*(SORT(.init_array.*))) - KEEP (*(.init_array)) - PROVIDE(__ctors_end__ = .); - - . = ALIGN(4); - - _etext = .; - } > ROM = 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 = .; - } > ROM - __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*) - - PROVIDE(__dtors_start__ = .); - KEEP(*(SORT(.dtors.*))) - KEEP(*(.dtors)) - PROVIDE(__dtors_end__ = .); - - . = ALIGN(4); - /* This is used by the startup in order to initialize the .data secion */ - _edata = . ; - } >RAM - - .stack : - { - . = ALIGN(4); - _sstack = .; - . = . + _system_stack_size; - . = ALIGN(4); - _estack = .; - } >RAM - - __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) - } > RAM - __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/stm32/stm32f103-mini-system/board/linker_scripts/link.sct b/bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.sct deleted file mode 100644 index 6930ff4b50..0000000000 --- a/bsp/stm32/stm32f103-mini-system/board/linker_scripts/link.sct +++ /dev/null @@ -1,15 +0,0 @@ -; ************************************************************* -; *** Scatter-Loading Description File generated by uVision *** -; ************************************************************* - -LR_IROM1 0x08000000 0x00010000 { ; load region size_region - ER_IROM1 0x08000000 0x00010000 { ; load address = execution address - *.o (RESET, +First) - *(InRoot$$Sections) - .ANY (+RO) - } - RW_IRAM1 0x20000000 0x00005000 { ; RW data - .ANY (+RW +ZI) - } -} - diff --git a/bsp/stm32/stm32f103-mini-system/figures/board1.jpg b/bsp/stm32/stm32f103-mini-system/figures/board1.jpg deleted file mode 100644 index 47c7221cf739834204556ab85a602b55035b97ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188487 zcmeF4WmFtZ+vkU%K|_LjaQDFiOcFc<*Py|j!5t=n1Pc-%K+p+p0fG!J3GVLh?lL&+ z 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%0D+^&l%evEWW_3=UW(v(Pfn;& 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�#iyua+n@16=F4^3Nz4~Qpyvy%CYC| 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 W|F^N?*O~k}lV2M6|I>iz*~~vh5Rl3M diff --git a/bsp/stm32/stm32f103-mini-system/figures/board3.jpg b/bsp/stm32/stm32f103-mini-system/figures/board3.jpg deleted file mode 100644 index ac5bb43f7443f470a3808df9bc8a94a921b76d6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23256 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ʼ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 F{{|XSaJ>Kk diff --git a/bsp/stm32/stm32f103-mini-system/project.ewd b/bsp/stm32/stm32f103-mini-system/project.ewd deleted file mode 100644 index 5c652a809d..0000000000 --- a/bsp/stm32/stm32f103-mini-system/project.ewd +++ /dev/null @@ -1,2834 +0,0 @@ - - - 3 - - rt-thread - - ARM - - 1 - - C-SPY - 2 - - 29 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ARMSIM_ID - 2 - - 1 - 1 - 1 - - - - - - - - CADI_ID - 2 - - 0 - 1 - 1 - - - - - - - - - CMSISDAP_ID - 2 - - 4 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GDBSERVER_ID - 2 - - 0 - 1 - 1 - - - - - - - - - - - IJET_ID - 2 - - 8 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JLINK_ID - 2 - - 16 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LMIFTDI_ID - 2 - - 2 - 1 - 1 - - - - - - - - - - PEMICRO_ID - 2 - - 3 - 1 - 1 - - - - - - - - STLINK_ID - 2 - - 4 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - THIRDPARTY_ID - 2 - - 0 - 1 - 1 - - - - - - - - TIFET_ID - 2 - - 1 - 1 - 1 - - - - - - - - - - - - - - - - - - - XDS100_ID - 2 - - 6 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin - 0 - - - $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin - 1 - - - $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin - 0 - - - - - Release - - ARM - - 0 - - C-SPY - 2 - - 29 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ARMSIM_ID - 2 - - 1 - 1 - 0 - - - - - - - - CADI_ID - 2 - - 0 - 1 - 0 - - - - - - - - - CMSISDAP_ID - 2 - - 4 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GDBSERVER_ID - 2 - - 0 - 1 - 0 - - - - - - - - - - - IJET_ID - 2 - - 8 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JLINK_ID - 2 - - 16 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LMIFTDI_ID - 2 - - 2 - 1 - 0 - - - - - - - - - - PEMICRO_ID - 2 - - 3 - 1 - 0 - - - - - - - - STLINK_ID - 2 - - 4 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - THIRDPARTY_ID - 2 - - 0 - 1 - 0 - - - - - - - - TIFET_ID - 2 - - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - XDS100_ID - 2 - - 6 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin - 0 - - - $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin - 1 - - - $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin - 0 - - - - diff --git a/bsp/stm32/stm32f103-mini-system/project.ewp b/bsp/stm32/stm32f103-mini-system/project.ewp deleted file mode 100644 index 2a43f432a0..0000000000 --- a/bsp/stm32/stm32f103-mini-system/project.ewp +++ /dev/null @@ -1,2239 +0,0 @@ - - 3 - - rt-thread - - ARM - - 1 - - General - 3 - - 29 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ICCARM - 2 - - 34 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AARM - 2 - - 10 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBJCOPY - 0 - - 1 - 1 - 1 - - - - - - - - - CUSTOM - 3 - - - - 0 - - - - BICOMP - 0 - - - - BUILDACTION - 1 - - - - - - - ILINK - 0 - - 20 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IARCHIVE - 0 - - 0 - 1 - 1 - - - - - - - BILINK - 0 - - - - - Release - - ARM - - 0 - - General - 3 - - 29 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ICCARM - 2 - - 34 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AARM - 2 - - 10 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBJCOPY - 0 - - 1 - 1 - 0 - - - - - - - - - CUSTOM - 3 - - - - 0 - - - - BICOMP - 0 - - - - BUILDACTION - 1 - - - - - - - ILINK - 0 - - 20 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IARCHIVE - 0 - - 0 - 1 - 0 - - - - - - - BILINK - 0 - - - - - Applications - - $PROJ_DIR$\applications\main.c - - - - CPU - - $PROJ_DIR$\..\..\..\libcpu\arm\common\backtrace.c - - - $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c - - - $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c - - - $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m3\cpuport.c - - - $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m3\context_iar.S - - - - DeviceDrivers - - $PROJ_DIR$\..\..\..\components\drivers\misc\pin.c - - - $PROJ_DIR$\..\..\..\components\drivers\serial\serial.c - - - $PROJ_DIR$\..\..\..\components\drivers\src\completion.c - - - $PROJ_DIR$\..\..\..\components\drivers\src\dataqueue.c - - - $PROJ_DIR$\..\..\..\components\drivers\src\pipe.c - - - $PROJ_DIR$\..\..\..\components\drivers\src\ringblk_buf.c - - - $PROJ_DIR$\..\..\..\components\drivers\src\ringbuffer.c - - - $PROJ_DIR$\..\..\..\components\drivers\src\waitqueue.c - - - $PROJ_DIR$\..\..\..\components\drivers\src\workqueue.c - - - - Drivers - - $PROJ_DIR$\board\board.c - - - $PROJ_DIR$\board\CubeMX_Config\Src\stm32f1xx_hal_msp.c - - - $PROJ_DIR$\..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\iar\startup_stm32f103xb.s - - - $PROJ_DIR$\..\libraries\HAL_Drivers\drv_gpio.c - - - $PROJ_DIR$\..\libraries\HAL_Drivers\drv_usart.c - - - $PROJ_DIR$\..\libraries\HAL_Drivers\drv_common.c - - - - finsh - - $PROJ_DIR$\..\..\..\components\finsh\shell.c - - - $PROJ_DIR$\..\..\..\components\finsh\cmd.c - - - $PROJ_DIR$\..\..\..\components\finsh\msh.c - - - - Kernel - - $PROJ_DIR$\..\..\..\src\clock.c - - - $PROJ_DIR$\..\..\..\src\components.c - - - $PROJ_DIR$\..\..\..\src\device.c - - - $PROJ_DIR$\..\..\..\src\idle.c - - - $PROJ_DIR$\..\..\..\src\ipc.c - - - $PROJ_DIR$\..\..\..\src\irq.c - - - $PROJ_DIR$\..\..\..\src\kservice.c - - - $PROJ_DIR$\..\..\..\src\mem.c - - - $PROJ_DIR$\..\..\..\src\mempool.c - - - $PROJ_DIR$\..\..\..\src\object.c - - - $PROJ_DIR$\..\..\..\src\scheduler.c - - - $PROJ_DIR$\..\..\..\src\signal.c - - - $PROJ_DIR$\..\..\..\src\thread.c - - - $PROJ_DIR$\..\..\..\src\timer.c - - - - Libraries - - $PROJ_DIR$\..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c - - - $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c - - - $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c - - - $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c - - - $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c - - - $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c - - - $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c - - - $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c - - - $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c - - - $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c - - - $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c - - - $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c - - - $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c - - - diff --git a/bsp/stm32/stm32f103-mini-system/project.eww b/bsp/stm32/stm32f103-mini-system/project.eww deleted file mode 100644 index c2cb02eb1e..0000000000 --- a/bsp/stm32/stm32f103-mini-system/project.eww +++ /dev/null @@ -1,10 +0,0 @@ - - - - - $WS_DIR$\project.ewp - - - - - diff --git a/bsp/stm32/stm32f103-mini-system/project.uvopt b/bsp/stm32/stm32f103-mini-system/project.uvopt deleted file mode 100644 index 7946319ef9..0000000000 --- a/bsp/stm32/stm32f103-mini-system/project.uvopt +++ /dev/null @@ -1,162 +0,0 @@ - - - - 1.0 - -

### uVision Project, (C) Keil Software
- - - *.c - *.s*; *.src; *.a* - *.obj - *.lib - *.txt; *.h; *.inc - *.plm - *.cpp - - - - 0 - 0 - - - - rt-thread - 0x4 - ARM-ADS - - 8000000 - - 1 - 1 - 1 - 0 - - - 1 - 65535 - 0 - 0 - 0 - - - 79 - 66 - 8 - .\build\keil\List\ - - - 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 - 0 - 1 - 1 - 0 - 0 - 0 - 6 - - - - - - - - - - - Segger\JL2CM3.dll - - - - 0 - JL2CM3 - -U30000299 -O78 -S0 -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 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 - - - 0 - UL2CM3 - UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) - - - - - 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 - - - - - - - diff --git a/bsp/stm32/stm32f103-mini-system/project.uvoptx b/bsp/stm32/stm32f103-mini-system/project.uvoptx deleted file mode 100644 index 2a5ee7712d..0000000000 --- a/bsp/stm32/stm32f103-mini-system/project.uvoptx +++ /dev/null @@ -1,199 +0,0 @@ - - - - 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\keil\List\ - - - 1 - 1 - 1 - 0 - 1 - 1 - 0 - 1 - 0 - 0 - 0 - 0 - - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 0 - - - 1 - 0 - 1 - - 18 - - - 0 - Base Board Schematics (MCBSTM32E) - I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e-base-board-schematics.pdf - - - 1 - Display Board Schematics (MCBSTM32E) - I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e-display-board-schematics.pdf - - - 2 - User Manual (MCBSTM32E) - I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e.chm - - - 3 - MCBSTM32E Evaluation Board Web Page (MCBSTM32E) - http://www.keil.com/mcbstm32e/ - - - - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 1 - 1 - 1 - 1 - 0 - 0 - 1 - - - - - - - - - - - BIN\UL2CM3.DLL - - - - 0 - JL2CM3 - -U30000299 -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 -FN0 - - - 0 - UL2CM3 - UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_128 -FL020000 -FS08000000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.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 - - - - - 1 - 0 - 2 - 10000000 - - - - - - Source Group 1 - 0 - 0 - 0 - 0 - - -
diff --git a/bsp/stm32/stm32f103-mini-system/project.uvproj b/bsp/stm32/stm32f103-mini-system/project.uvproj deleted file mode 100644 index 8e7d7538d5..0000000000 --- a/bsp/stm32/stm32f103-mini-system/project.uvproj +++ /dev/null @@ -1,783 +0,0 @@ - - - 1.1 -
### uVision Project, (C) Keil Software
- - - rt-thread - 0x4 - ARM-ADS - - - STM32F103RB - STMicroelectronics - IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") - - "STARTUP\ST\STM32F10x\startup_stm32f10x_md.s" ("STM32 Medium Density Line Startup Code") - UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) - 4231 - stm32f10x.h - - - - - - - - - - SFD\ST\STM32F1xx\STM32F103xx.sfr - 0 - 0 - - - - ST\STM32F10x\ - ST\STM32F10x\ - - 0 - 0 - 0 - 0 - 1 - - .\build\keil\Obj\ - rt-thread - 1 - 0 - 0 - 1 - 0 - .\build\keil\List\ - 1 - 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 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - - SARMCM3.DLL - - DARMSTM.DLL - -pSTM32F103RB - SARMCM3.DLL - - TARMSTM.DLL - -pSTM32F103RB - - - - 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 - - 0 - 6 - - - - - - - - - - - - - - Segger\JL2CM3.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 - 0 - 0 - 0 - 8 - 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 - 0x5000 - - - 1 - 0x8000000 - 0x20000 - - - 0 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x8000000 - 0x20000 - - - 1 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x20000000 - 0x5000 - - - 0 - 0x0 - 0x0 - - - - - - 1 - 1 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - - - STM32F103xB, USE_HAL_DRIVER, __RTTHREAD__ - - applications;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m3;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\components\finsh;.;..\..\..\include;..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Include;..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Inc;..\libraries\STM32F1xx_HAL\CMSIS\Include - - - - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - 0 - 1 - 0 - 0x08000000 - 0x20000000 - - .\board\linker_scripts\link.sct - - - - - - - - - - - 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-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 - - - - - completion.c - 1 - ..\..\..\components\drivers\src\completion.c - - - - - dataqueue.c - 1 - ..\..\..\components\drivers\src\dataqueue.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 - - - - - workqueue.c - 1 - ..\..\..\components\drivers\src\workqueue.c - - - - - Drivers - - - board.c - 1 - board\board.c - - - - - stm32f1xx_hal_msp.c - 1 - board\CubeMX_Config\Src\stm32f1xx_hal_msp.c - - - - - startup_stm32f103xb.s - 2 - ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm\startup_stm32f103xb.s - - - - - drv_gpio.c - 1 - ..\libraries\HAL_Drivers\drv_gpio.c - - - - - drv_usart.c - 1 - ..\libraries\HAL_Drivers\drv_usart.c - - - - - drv_common.c - 1 - ..\libraries\HAL_Drivers\drv_common.c - - - - - finsh - - - shell.c - 1 - ..\..\..\components\finsh\shell.c - - - - - cmd.c - 1 - ..\..\..\components\finsh\cmd.c - - - - - msh.c - 1 - ..\..\..\components\finsh\msh.c - - - - - Kernel - - - clock.c - 1 - ..\..\..\src\clock.c - - - - - components.c - 1 - ..\..\..\src\components.c - - - - - device.c - 1 - ..\..\..\src\device.c - - - - - idle.c - 1 - ..\..\..\src\idle.c - - - - - ipc.c - 1 - ..\..\..\src\ipc.c - - - - - irq.c - 1 - ..\..\..\src\irq.c - - - - - kservice.c - 1 - ..\..\..\src\kservice.c - - - - - mem.c - 1 - ..\..\..\src\mem.c - - - - - mempool.c - 1 - ..\..\..\src\mempool.c - - - - - object.c - 1 - ..\..\..\src\object.c - - - - - scheduler.c - 1 - ..\..\..\src\scheduler.c - - - - - signal.c - 1 - ..\..\..\src\signal.c - - - - - thread.c - 1 - ..\..\..\src\thread.c - - - - - timer.c - 1 - ..\..\..\src\timer.c - - - - - Libraries - - - system_stm32f1xx.c - 1 - ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c - - - - - stm32f1xx_hal_dma.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c - - - - - stm32f1xx_hal_cortex.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c - - - - - stm32f1xx_hal_crc.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c - - - - - stm32f1xx_hal_pwr.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c - - - - - stm32f1xx_hal_rcc.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c - - - - - stm32f1xx_hal_rcc_ex.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c - - - - - stm32f1xx_hal.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c - - - - - stm32f1xx_hal_cec.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c - - - - - stm32f1xx_hal_gpio.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c - - - - - stm32f1xx_hal_gpio_ex.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c - - - - - stm32f1xx_hal_uart.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c - - - - - stm32f1xx_hal_usart.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c - - - - - - -
diff --git a/bsp/stm32/stm32f103-mini-system/project.uvprojx b/bsp/stm32/stm32f103-mini-system/project.uvprojx deleted file mode 100644 index f719cebbfa..0000000000 --- a/bsp/stm32/stm32f103-mini-system/project.uvprojx +++ /dev/null @@ -1,786 +0,0 @@ - - - 2.1 -
### uVision Project, (C) Keil Software
- - - rt-thread - 0x4 - ARM-ADS - - - STM32F103C8 - STMicroelectronics - Keil.STM32F1xx_DFP.1.0.5 - http://www.keil.com/pack/ - IROM(0x08000000,0x10000) IRAM(0x20000000,0x5000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE - - - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)) - 0 - $$Device:STM32F103C8$Device\Include\stm32f10x.h - - - - - - - - - - $$Device:STM32F103C8$SVD\STM32F103xx.svd - 0 - 0 - - - - - - - 0 - 0 - 0 - 0 - 1 - - .\build\keil\Obj\ - rt-thread - 1 - 0 - 1 - 1 - 0 - .\build\keil\List\ - 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 - 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 - 1 - 1 - - 0 - 1 - - - - - - - - - - - - - - BIN\UL2CM3.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 - 0 - 0 - 0 - 8 - 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 - 0x5000 - - - 1 - 0x8000000 - 0x10000 - - - 0 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x8000000 - 0x10000 - - - 1 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x20000000 - 0x5000 - - - 0 - 0x0 - 0x0 - - - - - - 1 - 1 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 2 - 0 - 0 - 1 - 0 - - - STM32F103xB, USE_HAL_DRIVER, __RTTHREAD__ - - applications;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m3;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\components\finsh;.;..\..\..\include;..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Include;..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Inc;..\libraries\STM32F1xx_HAL\CMSIS\Include - - - - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - 0 - 1 - 0 - 0x08000000 - 0x20000000 - - .\board\linker_scripts\link.sct - - - - - - - - - - - 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-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 - - - - - completion.c - 1 - ..\..\..\components\drivers\src\completion.c - - - - - dataqueue.c - 1 - ..\..\..\components\drivers\src\dataqueue.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 - - - - - workqueue.c - 1 - ..\..\..\components\drivers\src\workqueue.c - - - - - Drivers - - - board.c - 1 - board\board.c - - - - - stm32f1xx_hal_msp.c - 1 - board\CubeMX_Config\Src\stm32f1xx_hal_msp.c - - - - - startup_stm32f103xb.s - 2 - ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm\startup_stm32f103xb.s - - - - - drv_gpio.c - 1 - ..\libraries\HAL_Drivers\drv_gpio.c - - - - - drv_usart.c - 1 - ..\libraries\HAL_Drivers\drv_usart.c - - - - - drv_common.c - 1 - ..\libraries\HAL_Drivers\drv_common.c - - - - - finsh - - - shell.c - 1 - ..\..\..\components\finsh\shell.c - - - - - cmd.c - 1 - ..\..\..\components\finsh\cmd.c - - - - - msh.c - 1 - ..\..\..\components\finsh\msh.c - - - - - Kernel - - - clock.c - 1 - ..\..\..\src\clock.c - - - - - components.c - 1 - ..\..\..\src\components.c - - - - - device.c - 1 - ..\..\..\src\device.c - - - - - idle.c - 1 - ..\..\..\src\idle.c - - - - - ipc.c - 1 - ..\..\..\src\ipc.c - - - - - irq.c - 1 - ..\..\..\src\irq.c - - - - - kservice.c - 1 - ..\..\..\src\kservice.c - - - - - mem.c - 1 - ..\..\..\src\mem.c - - - - - mempool.c - 1 - ..\..\..\src\mempool.c - - - - - object.c - 1 - ..\..\..\src\object.c - - - - - scheduler.c - 1 - ..\..\..\src\scheduler.c - - - - - signal.c - 1 - ..\..\..\src\signal.c - - - - - thread.c - 1 - ..\..\..\src\thread.c - - - - - timer.c - 1 - ..\..\..\src\timer.c - - - - - Libraries - - - system_stm32f1xx.c - 1 - ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c - - - - - stm32f1xx_hal_dma.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c - - - - - stm32f1xx_hal_cortex.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c - - - - - stm32f1xx_hal_crc.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c - - - - - stm32f1xx_hal_pwr.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c - - - - - stm32f1xx_hal_rcc.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c - - - - - stm32f1xx_hal_rcc_ex.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c - - - - - stm32f1xx_hal.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c - - - - - stm32f1xx_hal_cec.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c - - - - - stm32f1xx_hal_gpio.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c - - - - - stm32f1xx_hal_gpio_ex.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c - - - - - stm32f1xx_hal_uart.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c - - - - - stm32f1xx_hal_usart.c - 1 - ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c - - - - - - -
diff --git a/bsp/stm32/stm32f103-mini-system/rtconfig.h b/bsp/stm32/stm32f103-mini-system/rtconfig.h deleted file mode 100644 index ad9281a5d4..0000000000 --- a/bsp/stm32/stm32f103-mini-system/rtconfig.h +++ /dev/null @@ -1,178 +0,0 @@ -#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 1000 -#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 -#define RT_DEBUG - -/* 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 0x40001 -#define ARCH_ARM -#define ARCH_ARM_CORTEX_M -#define ARCH_ARM_CORTEX_M3 - -/* 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 FINSH_THREAD_NAME "tshell" -#define FINSH_USING_HISTORY -#define FINSH_HISTORY_LINES 5 -#define FINSH_USING_SYMTAB -#define FINSH_USING_DESCRIPTION -#define FINSH_THREAD_PRIORITY 20 -#define FINSH_THREAD_STACK_SIZE 4096 -#define FINSH_CMD_SIZE 80 -#define FINSH_USING_MSH -#define FINSH_USING_MSH_DEFAULT -#define FINSH_USING_MSH_ONLY -#define FINSH_ARG_MAX 10 - -/* Device virtual file system */ - - -/* Device Drivers */ - -#define RT_USING_DEVICE_IPC -#define RT_PIPE_BUFSZ 512 -#define RT_USING_SERIAL -#define RT_SERIAL_USING_DMA -#define RT_SERIAL_RB_BUFSZ 64 -#define RT_USING_PIN - -/* Using WiFi */ - - -/* Using USB */ - - -/* POSIX layer and C standard library */ - - -/* Network */ - -/* Socket abstraction layer */ - - -/* light weight TCP/IP stack */ - - -/* Modbus master and slave stack */ - - -/* AT commands */ - - -/* VBUS(Virtual Software BUS) */ - - -/* Utilities */ - - -/* RT-Thread online packages */ - -/* IoT - internet of things */ - - -/* Wi-Fi */ - -/* Marvell WiFi */ - - -/* Wiced WiFi */ - - -/* IoT Cloud */ - - -/* security packages */ - - -/* language packages */ - - -/* multimedia packages */ - - -/* tools packages */ - - -/* system packages */ - - -/* peripheral libraries and drivers */ - - -/* miscellaneous packages */ - - -/* sample package */ - -/* samples: kernel and components samples */ - - -/* example package: hello */ - -#define SOC_FAMILY_STM32 -#define SOC_SERIES_STM32F1 - -/* Hardware Drivers Config */ - -#define SOC_STM32F103C8 - -/* Onboard Peripheral Drivers */ - -#define BSP_USING_USB_TO_USART - -/* On-chip Peripheral Drivers */ - -#define BSP_USING_GPIO -#define BSP_USING_UART -#define BSP_USING_UART1 -#define BSP_UART1_RX_USING_DMA - -/* Board extended module Drivers */ - - -#endif diff --git a/bsp/stm32/stm32f103-mini-system/rtconfig.py b/bsp/stm32/stm32f103-mini-system/rtconfig.py deleted file mode 100644 index b363b752f5..0000000000 --- a/bsp/stm32/stm32f103-mini-system/rtconfig.py +++ /dev/null @@ -1,151 +0,0 @@ -import os - -# toolchains options -ARCH='arm' -CPU='cortex-m3' -CROSS_TOOL='gcc' - -# bsp lib config -BSP_LIBRARY_TYPE = None - -if os.getenv('RTT_CC'): - CROSS_TOOL = os.getenv('RTT_CC') -if os.getenv('RTT_ROOT'): - RTT_ROOT = os.getenv('RTT_ROOT') - -# cross_tool provides the cross compiler -# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR -if CROSS_TOOL == 'gcc': - PLATFORM = 'gcc' - EXEC_PATH = r'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=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' - - 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 ' - 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 rt-thread.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/stm32/stm32f103-mini-system/template.ewp b/bsp/stm32/stm32f103-mini-system/template.ewp deleted file mode 100644 index 3280a547c0..0000000000 --- a/bsp/stm32/stm32f103-mini-system/template.ewp +++ /dev/null @@ -1,2032 +0,0 @@ - - - 3 - - rt-thread - - ARM - - 1 - - General - 3 - - 29 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ICCARM - 2 - - 34 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AARM - 2 - - 10 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBJCOPY - 0 - - 1 - 1 - 1 - - - - - - - - - CUSTOM - 3 - - - - 0 - - - - BICOMP - 0 - - - - BUILDACTION - 1 - - - - - - - ILINK - 0 - - 20 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IARCHIVE - 0 - - 0 - 1 - 1 - - - - - - - BILINK - 0 - - - - - Release - - ARM - - 0 - - General - 3 - - 29 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ICCARM - 2 - - 34 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AARM - 2 - - 10 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBJCOPY - 0 - - 1 - 1 - 0 - - - - - - - - - CUSTOM - 3 - - - - 0 - - - - BICOMP - 0 - - - - BUILDACTION - 1 - - - - - - - ILINK - 0 - - 20 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IARCHIVE - 0 - - 0 - 1 - 0 - - - - - - - BILINK - 0 - - - - diff --git a/bsp/stm32/stm32f103-mini-system/template.eww b/bsp/stm32/stm32f103-mini-system/template.eww deleted file mode 100644 index bd036bb4c9..0000000000 --- a/bsp/stm32/stm32f103-mini-system/template.eww +++ /dev/null @@ -1,10 +0,0 @@ - - - - - $WS_DIR$\template.ewp - - - - - diff --git a/bsp/stm32/stm32f103-mini-system/template.uvopt b/bsp/stm32/stm32f103-mini-system/template.uvopt deleted file mode 100644 index 7946319ef9..0000000000 --- a/bsp/stm32/stm32f103-mini-system/template.uvopt +++ /dev/null @@ -1,162 +0,0 @@ - - - - 1.0 - -
### uVision Project, (C) Keil Software
- - - *.c - *.s*; *.src; *.a* - *.obj - *.lib - *.txt; *.h; *.inc - *.plm - *.cpp - - - - 0 - 0 - - - - rt-thread - 0x4 - ARM-ADS - - 8000000 - - 1 - 1 - 1 - 0 - - - 1 - 65535 - 0 - 0 - 0 - - - 79 - 66 - 8 - .\build\keil\List\ - - - 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 - 0 - 1 - 1 - 0 - 0 - 0 - 6 - - - - - - - - - - - Segger\JL2CM3.dll - - - - 0 - JL2CM3 - -U30000299 -O78 -S0 -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 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 - - - 0 - UL2CM3 - UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) - - - - - 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 - - - - - - -
diff --git a/bsp/stm32/stm32f103-mini-system/template.uvoptx b/bsp/stm32/stm32f103-mini-system/template.uvoptx deleted file mode 100644 index 2a5ee7712d..0000000000 --- a/bsp/stm32/stm32f103-mini-system/template.uvoptx +++ /dev/null @@ -1,199 +0,0 @@ - - - - 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\keil\List\ - - - 1 - 1 - 1 - 0 - 1 - 1 - 0 - 1 - 0 - 0 - 0 - 0 - - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 0 - - - 1 - 0 - 1 - - 18 - - - 0 - Base Board Schematics (MCBSTM32E) - I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e-base-board-schematics.pdf - - - 1 - Display Board Schematics (MCBSTM32E) - I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e-display-board-schematics.pdf - - - 2 - User Manual (MCBSTM32E) - I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e.chm - - - 3 - MCBSTM32E Evaluation Board Web Page (MCBSTM32E) - http://www.keil.com/mcbstm32e/ - - - - 0 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 0 - 1 - 1 - 1 - 1 - 0 - 0 - 1 - - - - - - - - - - - BIN\UL2CM3.DLL - - - - 0 - JL2CM3 - -U30000299 -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 -FN0 - - - 0 - UL2CM3 - UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_128 -FL020000 -FS08000000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.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 - - - - - 1 - 0 - 2 - 10000000 - - - - - - Source Group 1 - 0 - 0 - 0 - 0 - - -
diff --git a/bsp/stm32/stm32f103-mini-system/template.uvproj b/bsp/stm32/stm32f103-mini-system/template.uvproj deleted file mode 100644 index 99e58d3b30..0000000000 --- a/bsp/stm32/stm32f103-mini-system/template.uvproj +++ /dev/null @@ -1,407 +0,0 @@ - - - - 1.1 - -
### uVision Project, (C) Keil Software
- - - - rt-thread - 0x4 - ARM-ADS - - - STM32F103RB - STMicroelectronics - IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") - - "STARTUP\ST\STM32F10x\startup_stm32f10x_md.s" ("STM32 Medium Density Line Startup Code") - UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) - 4231 - stm32f10x.h - - - - - - - - - - SFD\ST\STM32F1xx\STM32F103xx.sfr - 0 - 0 - - - - ST\STM32F10x\ - ST\STM32F10x\ - - 0 - 0 - 0 - 0 - 1 - - .\build\keil\Obj\ - rt-thread - 1 - 0 - 0 - 1 - 0 - .\build\keil\List\ - 1 - 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 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - - SARMCM3.DLL - - DARMSTM.DLL - -pSTM32F103RB - SARMCM3.DLL - - TARMSTM.DLL - -pSTM32F103RB - - - - 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 - - 0 - 6 - - - - - - - - - - - - - - Segger\JL2CM3.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 - 0 - 0 - 0 - 8 - 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 - 0x5000 - - - 1 - 0x8000000 - 0x20000 - - - 0 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x8000000 - 0x20000 - - - 1 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x20000000 - 0x5000 - - - 0 - 0x0 - 0x0 - - - - - - 1 - 1 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - - - - - - - - - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - 0 - 1 - 0 - 0x08000000 - 0x20000000 - - .\board\linker_scripts\link.sct - - - - - - - - - - - -
diff --git a/bsp/stm32/stm32f103-mini-system/template.uvprojx b/bsp/stm32/stm32f103-mini-system/template.uvprojx deleted file mode 100644 index 3f668488e9..0000000000 --- a/bsp/stm32/stm32f103-mini-system/template.uvprojx +++ /dev/null @@ -1,415 +0,0 @@ - - - - 2.1 - -
### uVision Project, (C) Keil Software
- - - - rt-thread - 0x4 - ARM-ADS - - - STM32F103C8 - STMicroelectronics - Keil.STM32F1xx_DFP.1.0.5 - http://www.keil.com/pack/ - IROM(0x08000000,0x10000) IRAM(0x20000000,0x5000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE - - - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)) - 0 - $$Device:STM32F103C8$Device\Include\stm32f10x.h - - - - - - - - - - $$Device:STM32F103C8$SVD\STM32F103xx.svd - 0 - 0 - - - - - - - 0 - 0 - 0 - 0 - 1 - - .\build\keil\Obj\ - rt-thread - 1 - 0 - 1 - 1 - 0 - .\build\keil\List\ - 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 - 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 - 1 - 1 - - 0 - 1 - - - - - - - - - - - - - - BIN\UL2CM3.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 - 0 - 0 - 0 - 8 - 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 - 0x5000 - - - 1 - 0x8000000 - 0x10000 - - - 0 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x0 - 0x0 - - - 1 - 0x8000000 - 0x10000 - - - 1 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - - - 0 - 0x20000000 - 0x5000 - - - 0 - 0x0 - 0x0 - - - - - - 1 - 1 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 2 - 0 - 0 - 1 - 0 - - - - - - - - - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - 0 - 1 - 0 - 0x08000000 - 0x20000000 - - .\board\linker_scripts\link.sct - - - - - - - - - - - Source Group 1 - - - - - -
From 6cf0d54e7d25c3dbb8555c83729406af204ecb79 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Mon, 1 Mar 2021 05:57:08 +0800 Subject: [PATCH 16/17] =?UTF-8?q?=E6=9B=B4=E6=96=B0ci=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/action.yml b/.github/workflows/action.yml index f6499505c3..8f3cf566a5 100644 --- a/.github/workflows/action.yml +++ b/.github/workflows/action.yml @@ -74,7 +74,7 @@ jobs: - {RTT_BSP: "stm32/stm32f103-dofly-M3S", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "stm32/stm32f103-fire-arbitrary", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "stm32/stm32f103-hw100k-ibox", RTT_TOOL_CHAIN: "sourcery-arm"} - - {RTT_BSP: "stm32/stm32f103-mini-system", RTT_TOOL_CHAIN: "sourcery-arm"} + - {RTT_BSP: "stm32/stm32f103-blue-pill", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "stm32/stm32f103-onenet-nbiot", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "stm32/stm32f103-yf-ufun", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "stm32/stm32f107-uc-eval", RTT_TOOL_CHAIN: "sourcery-arm"} From 53dea16e5c6876cc3d133260efb12ebd4b670085 Mon Sep 17 00:00:00 2001 From: thread-liu Date: Mon, 1 Mar 2021 15:56:52 +0800 Subject: [PATCH 17/17] [update] sdio wifi. --- bsp/stm32/libraries/STM32MPxx_HAL/SConscript | 4 + .../CM4/Inc/stm32mp1xx_hal_conf.h | 2 +- .../CM4/Src/stm32mp1xx_hal_msp.c | 118 ++++++++++++ .../stm32mp157a-st-discovery/board/Kconfig | 15 +- .../board/ports/drv_sdio.c | 110 +++++++++-- .../board/ports/drv_sdio.h | 12 +- .../stm32mp157a-st-discovery/project.ewp | 174 +++++++++++++++--- 7 files changed, 387 insertions(+), 48 deletions(-) diff --git a/bsp/stm32/libraries/STM32MPxx_HAL/SConscript b/bsp/stm32/libraries/STM32MPxx_HAL/SConscript index a991e588d0..ce482829bd 100644 --- a/bsp/stm32/libraries/STM32MPxx_HAL/SConscript +++ b/bsp/stm32/libraries/STM32MPxx_HAL/SConscript @@ -119,6 +119,10 @@ if GetDepend(['BSP_USING_CRYP']): src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_cryp.c'] src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_cryp_ex.c'] +if GetDepend(['BSP_USING_RTC']): + src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_rtc.c'] + src += ['STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_rtc_ex.c'] + path = [cwd + '/STM32MP1xx_HAL_Driver/Inc', cwd + '/CMSIS/Device/ST/STM32MP1xx/Include', cwd + '/CMSIS/Core/Include', diff --git a/bsp/stm32/stm32mp157a-st-discovery/board/CubeMX_Config/CM4/Inc/stm32mp1xx_hal_conf.h b/bsp/stm32/stm32mp157a-st-discovery/board/CubeMX_Config/CM4/Inc/stm32mp1xx_hal_conf.h index 3ba077b0b5..b7fd4ce81f 100644 --- a/bsp/stm32/stm32mp157a-st-discovery/board/CubeMX_Config/CM4/Inc/stm32mp1xx_hal_conf.h +++ b/bsp/stm32/stm32mp157a-st-discovery/board/CubeMX_Config/CM4/Inc/stm32mp1xx_hal_conf.h @@ -60,7 +60,7 @@ #define HAL_SAI_MODULE_ENABLED #define HAL_SD_MODULE_ENABLED /*#define HAL_MMC_MODULE_ENABLED */ -/*#define HAL_RTC_MODULE_ENABLED */ +#define HAL_RTC_MODULE_ENABLED /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_SPDIFRX_MODULE_ENABLED */ #define HAL_SPI_MODULE_ENABLED diff --git a/bsp/stm32/stm32mp157a-st-discovery/board/CubeMX_Config/CM4/Src/stm32mp1xx_hal_msp.c b/bsp/stm32/stm32mp157a-st-discovery/board/CubeMX_Config/CM4/Src/stm32mp1xx_hal_msp.c index 3a6fac25d7..5ca08fbbd0 100644 --- a/bsp/stm32/stm32mp157a-st-discovery/board/CubeMX_Config/CM4/Src/stm32mp1xx_hal_msp.c +++ b/bsp/stm32/stm32mp157a-st-discovery/board/CubeMX_Config/CM4/Src/stm32mp1xx_hal_msp.c @@ -1003,7 +1003,66 @@ void HAL_SD_MspInit(SD_HandleTypeDef* hsd) /* USER CODE END SDMMC1_MspInit 1 */ } + if(hsd->Instance==SDMMC2) + { + /* USER CODE BEGIN SDMMC2_MspInit 0 */ + if (IS_ENGINEERING_BOOT_MODE()) + { + /** Initializes the peripherals clock + */ + PeriphClkInit.Sdmmc12ClockSelection = RCC_SDMMC12CLKSOURCE_PLL4; + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_SDMMC12; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + } + /* USER CODE END SDMMC2_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_SDMMC2_CLK_ENABLE(); + + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOE_CLK_ENABLE(); + __HAL_RCC_GPIOG_CLK_ENABLE(); + /**SDMMC2 GPIO Configuration + PB14 ------> SDMMC2_D0 + PB15 ------> SDMMC2_D1 + PB3 ------> SDMMC2_D2 + PB4 ------> SDMMC2_D3 + PE3 ------> SDMMC2_CK + PG6 ------> SDMMC2_CMD + */ + GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_14|GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF9_SDIO2; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + GPIO_InitStruct.Pin = GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF9_SDIO2; + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF10_SDIO2; + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + + __HAL_RCC_SDMMC2_FORCE_RESET(); + __HAL_RCC_SDMMC2_RELEASE_RESET(); + + /* SDMMC2 interrupt Init */ + HAL_NVIC_SetPriority(SDMMC2_IRQn, 2, 0); + HAL_NVIC_EnableIRQ(SDMMC2_IRQn); + /* USER CODE BEGIN SDMMC2_MspInit 1 */ + + /* USER CODE END SDMMC2_MspInit 1 */ + } } /** @@ -1312,6 +1371,65 @@ void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef* hcryp) } #endif + +/** +* @brief RTC MSP Initialization +* This function configures the hardware resources used in this example +* @param hrtc: RTC handle pointer +* @retval None +*/ +void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc) +{ + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + if(hrtc->Instance==RTC) + { + /* USER CODE BEGIN SDMMC1_MspInit 0 */ + if (IS_ENGINEERING_BOOT_MODE()) + { + /** Initializes the peripherals clock + */ + PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + } + /* USER CODE BEGIN RTC_MspInit 0 */ + + /* USER CODE END RTC_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_RTC_ENABLE(); + + /* USER CODE BEGIN RTC_MspInit 1 */ + + /* USER CODE END RTC_MspInit 1 */ + } + +} + +/** +* @brief RTC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hrtc: RTC handle pointer +* @retval None +*/ +void HAL_RTC_MspDeInit(RTC_HandleTypeDef* hrtc) +{ + if(hrtc->Instance==RTC) + { + /* USER CODE BEGIN RTC_MspDeInit 0 */ + + /* USER CODE END RTC_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_RTC_DISABLE(); + + /* USER CODE BEGIN RTC_MspDeInit 1 */ + + /* USER CODE END RTC_MspDeInit 1 */ + } + +} /** * @brief This function is executed in case of error occurrence. * @retval None diff --git a/bsp/stm32/stm32mp157a-st-discovery/board/Kconfig b/bsp/stm32/stm32mp157a-st-discovery/board/Kconfig index 9191443847..36ba61a584 100644 --- a/bsp/stm32/stm32mp157a-st-discovery/board/Kconfig +++ b/bsp/stm32/stm32mp157a-st-discovery/board/Kconfig @@ -58,10 +58,23 @@ menu "Onboard Peripheral Drivers" select RT_USING_LWIP config BSP_USING_SDMMC - bool "Enable SDMMC (SD card)" + bool "Enable SDMMC (sd card or sdio wifi)" + default n select RT_USING_SDIO select RT_USING_DFS select RT_USING_DFS_ELMFAT + if BSP_USING_SDMMC + config BSP_USING_SDIO1 + bool "Enable SDIO1 (sd card)" + default n + config BSP_USING_SDIO2 + select BSP_USING_RTC + bool "Enable SDIO2 (sdio wifi)" + default n + endif + + config BSP_USING_RTC + bool "Enable RTC" default n menuconfig BSP_USING_AUDIO diff --git a/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_sdio.c b/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_sdio.c index 3e5085c3cd..45de04328f 100644 --- a/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_sdio.c +++ b/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_sdio.c @@ -10,11 +10,17 @@ #include "board.h" #include "drv_sdio.h" + +#ifdef BSP_USING_SDIO1 #include +#endif #ifdef BSP_USING_SDMMC -//#define DRV_DEBUG +#ifdef BSP_USING_SDIO2 +#define DRV_DEBUG +#endif + #define DBG_TAG "drv.sdio" #ifdef DRV_DEBUG #define DBG_LVL DBG_LOG @@ -23,8 +29,9 @@ #endif /* DRV_DEBUG */ #include -static SD_HandleTypeDef hsd; -static struct rt_mmcsd_host *host; +static struct rt_mmcsd_host *host1; +static struct rt_mmcsd_host *host2; + #define SDIO_TX_RX_COMPLETE_TIMEOUT_LOOPS (100000) #define RTHW_SDIO_LOCK(_sdio) rt_mutex_take(&_sdio->mutex, RT_WAITING_FOREVER) @@ -47,13 +54,14 @@ struct rthw_sdio }; /* SYSRAM SDMMC1/2 accesses */ +#define SDCARD_ADDR 0x2FFC0000 #if defined(__CC_ARM) || defined(__CLANG_ARM) -rt_uint8_t cache_buf[SDIO_BUFF_SIZE] __attribute__((at(0x2FFC0000))); +__attribute__((at(SDCARD_ADDR))) static rt_uint8_t cache_buf[SDIO_BUFF_SIZE]; +#elif defined ( __GNUC__ ) +static rt_uint8_t cache_buf[SDIO_BUFF_SIZE] __attribute__((section(".SdCardSection"))); #elif defined(__ICCARM__) -#pragma location=0x2FFC0000 -rt_uint8_t cache_buf[SDIO_BUFF_SIZE]; -#elif defined(__GNUC__) -rt_uint8_t cache_buf[SDIO_BUFF_SIZE] __attribute__((at(0x2FFC0000))); +#pragma location = SDCARD_ADDR +__no_init static rt_uint8_t cache_buf[SDIO_BUFF_SIZE]; #endif /** @@ -461,10 +469,20 @@ struct rt_mmcsd_host *sdio_host_create(struct stm32_sdio_des *sdio_des) rt_memcpy(&sdio->sdio_des, sdio_des, sizeof(struct stm32_sdio_des)); - sdio->sdio_des.hw_sdio = (struct stm32_sdio *)SDIO_BASE_ADDRESS; + if(sdio_des->hsd.Instance == SDMMC1) + { + sdio->sdio_des.hw_sdio = (struct stm32_sdio *)SDIO1_BASE_ADDRESS; + rt_event_init(&sdio->event, "sdio1", RT_IPC_FLAG_FIFO); + rt_mutex_init(&sdio->mutex, "sdio1", RT_IPC_FLAG_FIFO); + } + + if(sdio_des->hsd.Instance == SDMMC2) + { + sdio->sdio_des.hw_sdio = (struct stm32_sdio *)SDIO2_BASE_ADDRESS; + rt_event_init(&sdio->event, "sdio2", RT_IPC_FLAG_FIFO); + rt_mutex_init(&sdio->mutex, "sdio2", RT_IPC_FLAG_FIFO); + } - rt_event_init(&sdio->event, "sdio", RT_IPC_FLAG_FIFO); - rt_mutex_init(&sdio->mutex, "sdio", RT_IPC_FLAG_FIFO); /* set host default attributes */ host->ops = &ops; host->freq_min = 400 * 1000; @@ -503,29 +521,83 @@ void SDMMC1_IRQHandler(void) { rt_interrupt_enter(); /* Process All SDIO Interrupt Sources */ - rthw_sdio_irq_process(host); + rthw_sdio_irq_process(host1); rt_interrupt_leave(); } +void SDMMC2_IRQHandler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + /* Process All SDIO Interrupt Sources */ + rthw_sdio_irq_process(host2); + /* leave interrupt */ + rt_interrupt_leave(); +} + +#ifdef BSP_USING_SDIO2 +static RTC_HandleTypeDef hrtc; +static void MX_RTC_Init(void) +{ + hrtc.Instance = RTC; + hrtc.Init.HourFormat = RTC_HOURFORMAT_24; + hrtc.Init.AsynchPrediv = 127; + hrtc.Init.SynchPrediv = 255; + hrtc.Init.OutPut = RTC_OUTPUT_DISABLE; + hrtc.Instance->CFGR = 0x02 << 1; + if (HAL_RTC_Init(&hrtc) != HAL_OK) + { + Error_Handler(); + } +} +static int LBEE5KL1DX_init(void) +{ +#define LBEE5KL1DX_WL_REG_ON GET_PIN(H, 4) + + /* enable the WLAN REG pin */ + rt_pin_mode(LBEE5KL1DX_WL_REG_ON, PIN_MODE_OUTPUT); + rt_pin_write(LBEE5KL1DX_WL_REG_ON, PIN_HIGH); + + return 0; +} +#endif + int rt_hw_sdio_init(void) { - struct stm32_sdio_des sdio_des; - - hsd.Instance = SDMMC1; - HAL_SD_MspInit(&hsd); +#ifdef BSP_USING_SDIO1 + struct stm32_sdio_des sdio_des1; + sdio_des1.hsd.Instance = SDMMC1; + HAL_SD_MspInit(&sdio_des1.hsd); - host = sdio_host_create(&sdio_des); - if (host == RT_NULL) + host1 = sdio_host_create(&sdio_des1); + if (host1 == RT_NULL) { LOG_E("host create fail"); return RT_NULL; } +#endif +#ifdef BSP_USING_SDIO2 + MX_RTC_Init(); + LBEE5KL1DX_init(); + + struct stm32_sdio_des sdio_des2; + sdio_des2.hsd.Instance = SDMMC2; + HAL_SD_MspInit(&sdio_des2.hsd); + + host2 = sdio_host_create(&sdio_des2); + if (host2 == RT_NULL) + { + LOG_E("host2 create fail"); + return RT_NULL; + } +#endif return RT_EOK; } INIT_DEVICE_EXPORT(rt_hw_sdio_init); +#ifdef BSP_USING_SDIO1 int mnt_init(void) { rt_device_t sd = RT_NULL; @@ -552,4 +624,6 @@ int mnt_init(void) } INIT_ENV_EXPORT(mnt_init); +#endif /* BSP_USING_SDIO1 */ + #endif /* BSP_USING_SDMMC */ diff --git a/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_sdio.h b/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_sdio.h index a4428e4e71..da70bf1257 100644 --- a/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_sdio.h +++ b/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_sdio.h @@ -19,11 +19,12 @@ #include #include -#define SDIO_BUFF_SIZE 4096 -#define SDIO_ALIGN_LEN 32 +#ifndef SDIO1_BASE_ADDRESS +#define SDIO1_BASE_ADDRESS (SDMMC1) +#endif -#ifndef SDIO_BASE_ADDRESS -#define SDIO_BASE_ADDRESS (SDMMC1) +#ifndef SDIO2_BASE_ADDRESS +#define SDIO2_BASE_ADDRESS (SDMMC2) #endif #ifndef SDIO_CLOCK_FREQ @@ -39,7 +40,7 @@ #endif #ifndef SDIO_MAX_FREQ -#define SDIO_MAX_FREQ (50 * 1000 * 1000) +#define SDIO_MAX_FREQ (25 * 1000 * 1000) #endif #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) @@ -102,6 +103,7 @@ struct stm32_sdio_des { struct stm32_sdio *hw_sdio; sdio_clk_get clk_get; + SD_HandleTypeDef hsd; }; /* stm32 sdio dirver class */ diff --git a/bsp/stm32/stm32mp157a-st-discovery/project.ewp b/bsp/stm32/stm32mp157a-st-discovery/project.ewp index 3547891da5..3f12a28dbe 100644 --- a/bsp/stm32/stm32mp157a-st-discovery/project.ewp +++ b/bsp/stm32/stm32mp157a-st-discovery/project.ewp @@ -232,6 +232,8 @@ STM32MP157Axx __LOG_TRACE_IO_ __RTTHREAD__ + RT_USING_DLIBC + _DLIB_FILE_DESCRIPTOR USE_HAL_DRIVER
+ + Filesystem + + $PROJ_DIR$\..\..\..\components\dfs\src\dfs.c + + + $PROJ_DIR$\..\..\..\components\dfs\src\dfs_file.c + + + $PROJ_DIR$\..\..\..\components\dfs\src\dfs_fs.c + + + $PROJ_DIR$\..\..\..\components\dfs\src\dfs_posix.c + + + $PROJ_DIR$\..\..\..\components\dfs\src\poll.c + + + $PROJ_DIR$\..\..\..\components\dfs\src\select.c + + + $PROJ_DIR$\..\..\..\components\dfs\filesystems\devfs\devfs.c + + + $PROJ_DIR$\..\..\..\components\dfs\filesystems\elmfat\dfs_elm.c + + + $PROJ_DIR$\..\..\..\components\dfs\filesystems\elmfat\ff.c + + + $PROJ_DIR$\..\..\..\components\dfs\filesystems\elmfat\ffunicode.c + + finsh @@ -2243,6 +2308,9 @@ $PROJ_DIR$\..\..\..\components\finsh\msh.c + + $PROJ_DIR$\..\..\..\components\finsh\msh_file.c + $PROJ_DIR$\..\..\..\components\finsh\finsh_compiler.c @@ -2309,9 +2377,6 @@ $PROJ_DIR$\..\..\..\src\scheduler.c - - $PROJ_DIR$\..\..\..\src\signal.c - $PROJ_DIR$\..\..\..\src\thread.c @@ -2319,6 +2384,54 @@ $PROJ_DIR$\..\..\..\src\timer.c + + libc + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\stdlib.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\time.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\unistd.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\environ.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\libc.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\rmtx.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\stdio.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_close.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_lseek.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_mem.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_open.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_read.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_remove.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_write.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscalls.c + + Libraries @@ -2393,5 +2506,20 @@ $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_uart_ex.c + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_ll_sdmmc.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_sd.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_ll_delayblock.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_rtc.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_rtc_ex.c +