From 38e42ad69ad6a47acb3e0550c2016779afe81b2a Mon Sep 17 00:00:00 2001 From: thread-liu Date: Tue, 14 Jul 2020 09:57:26 +0800 Subject: [PATCH] [update] add STM32MP1xx template project. --- .../libraries/templates/stm32mp1xx/.config | 439 +++ .../libraries/templates/stm32mp1xx/.gitignore | 42 + .../libraries/templates/stm32mp1xx/Kconfig | 22 + .../libraries/templates/stm32mp1xx/README.md | 123 + .../libraries/templates/stm32mp1xx/SConscript | 15 + .../libraries/templates/stm32mp1xx/SConstruct | 60 + .../stm32mp1xx/applications/SConscript | 11 + .../templates/stm32mp1xx/applications/main.c | 33 + .../stm32mp1xx/board/CubeMX_Config/.mxproject | 14 + .../board/CubeMX_Config/CM4/Inc/main.h | 77 + .../CM4/Inc/stm32mp1xx_hal_conf.h | 396 +++ .../CubeMX_Config/CM4/Inc/stm32mp1xx_it.h | 77 + .../board/CubeMX_Config/CM4/Src/main.c | 929 ++++++ .../CM4/Src/stm32mp1xx_hal_msp.c | 987 ++++++ .../CubeMX_Config/CM4/Src/stm32mp1xx_it.c | 321 ++ .../Common/System/system_stm32mp1xx.c | 290 ++ .../board/CubeMX_Config/STM32MP157-DK1.ioc | 857 +++++ .../templates/stm32mp1xx/board/Kconfig | 50 + .../templates/stm32mp1xx/board/SConscript | 47 + .../templates/stm32mp1xx/board/board.c | 189 ++ .../templates/stm32mp1xx/board/board.h | 54 + .../stm32mp1xx/board/linker_scripts/link.icf | 28 + .../stm32mp1xx/board/linker_scripts/link.lds | 157 + .../stm32mp1xx/board/linker_scripts/link.sct | 35 + .../templates/stm32mp1xx/figures/board.png | Bin 0 -> 79619 bytes .../stm32mp1xx/figures/boot_switch.png | Bin 0 -> 96544 bytes .../templates/stm32mp1xx/project.ewd | 2966 +++++++++++++++++ .../templates/stm32mp1xx/project.ewp | 2441 ++++++++++++++ .../templates/stm32mp1xx/project.eww | 10 + .../templates/stm32mp1xx/project.uvoptx | 1172 +++++++ .../templates/stm32mp1xx/project.uvprojx | 833 +++++ .../libraries/templates/stm32mp1xx/rtconfig.h | 173 + .../templates/stm32mp1xx/rtconfig.py | 150 + .../templates/stm32mp1xx/template.ewp | 2106 ++++++++++++ .../templates/stm32mp1xx/template.eww | 10 + .../templates/stm32mp1xx/template.uvoptx | 192 ++ .../templates/stm32mp1xx/template.uvprojx | 411 +++ 37 files changed, 15717 insertions(+) create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/.config create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/.gitignore create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/Kconfig create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/README.md create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/SConscript create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/SConstruct create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/applications/SConscript create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/applications/main.c create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Inc/main.h create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Inc/stm32mp1xx_hal_conf.h create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Inc/stm32mp1xx_it.h create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Src/main.c create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Src/stm32mp1xx_hal_msp.c create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Src/stm32mp1xx_it.c create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/Common/System/system_stm32mp1xx.c create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/STM32MP157-DK1.ioc create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/board/Kconfig create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/board/SConscript create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/board/board.c create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/board/board.h create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/board/linker_scripts/link.icf create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/board/linker_scripts/link.lds create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/board/linker_scripts/link.sct create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/figures/board.png create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/figures/boot_switch.png create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/project.ewd create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/project.ewp create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/project.eww create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/project.uvoptx create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/project.uvprojx create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/rtconfig.h create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/rtconfig.py create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/template.ewp create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/template.eww create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/template.uvoptx create mode 100644 bsp/stm32/libraries/templates/stm32mp1xx/template.uvprojx diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/.config b/bsp/stm32/libraries/templates/stm32mp1xx/.config new file mode 100644 index 0000000000..811ea8702a --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/.config @@ -0,0 +1,439 @@ +# +# 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=100 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +CONFIG_RT_USING_TIMER_SOFT=y +CONFIG_RT_TIMER_THREAD_PRIO=4 +CONFIG_RT_TIMER_THREAD_STACK_SIZE=512 +CONFIG_RT_DEBUG=y +CONFIG_RT_DEBUG_COLOR=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +CONFIG_RT_USING_MEMHEAP=y +# CONFIG_RT_USING_NOHEAP is not set +# CONFIG_RT_USING_SMALL_MEM is not set +# CONFIG_RT_USING_SLAB is not set +CONFIG_RT_USING_MEMHEAP_AS_HEAP=y +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="uart4" +CONFIG_RT_VER_NUM=0x40003 +CONFIG_ARCH_ARM=y +CONFIG_RT_USING_CPU_FFS=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M4=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 is not set +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +# CONFIG_RT_USING_SYSTEM_WORKQUEUE 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_DAC is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set +# CONFIG_RT_USING_TOUCH is not set +# CONFIG_RT_USING_HWCRYPTO is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +CONFIG_RT_USING_LIBC=y +# CONFIG_RT_USING_PTHREADS is not set +# CONFIG_RT_USING_MODULE is not set + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# Network interface device +# +# CONFIG_RT_USING_NETDEV is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS is not set + +# +# Utilities +# +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set +# CONFIG_RT_USING_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_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_MYMQTT is not set +# CONFIG_PKG_USING_KAWAII_MQTT is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LIBMODBUS is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_RW007 is not set +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_PPP_DEVICE is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_ATSRV_SOCKET is not set +# CONFIG_PKG_USING_WIZNET is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOTHUB is not set +# CONFIG_PKG_USING_JIOT-C-SDK is not set +# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set +# CONFIG_PKG_USING_JOYLINK is not set +# CONFIG_PKG_USING_NIMBLE is not set +# CONFIG_PKG_USING_OTA_DOWNLOADER is not set +# CONFIG_PKG_USING_IPMSG is not set +# CONFIG_PKG_USING_LSSDP is not set +# CONFIG_PKG_USING_AIRKISS_OPEN is not set +# CONFIG_PKG_USING_LIBRWS is not set +# CONFIG_PKG_USING_TCPSERVER is not set +# CONFIG_PKG_USING_PROTOBUF_C is not set +# CONFIG_PKG_USING_ONNX_PARSER is not set +# CONFIG_PKG_USING_ONNX_BACKEND is not set +# CONFIG_PKG_USING_DLT645 is not set +# CONFIG_PKG_USING_QXWZ is not set +# CONFIG_PKG_USING_SMTP_CLIENT is not set +# CONFIG_PKG_USING_ABUP_FOTA is not set +# CONFIG_PKG_USING_LIBCURL2RTT is not set +# CONFIG_PKG_USING_CAPNP is not set +# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_libsodium is not set +# CONFIG_PKG_USING_TINYCRYPT is not set +# CONFIG_PKG_USING_TFM is not set + +# +# 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 +# CONFIG_PKG_USING_STEMWIN is not set +# CONFIG_PKG_USING_WAVPLAYER is not set +# CONFIG_PKG_USING_TJPGD is not set + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_ADBD is not set +# CONFIG_PKG_USING_COREMARK is not set +# CONFIG_PKG_USING_DHRYSTONE is not set +# CONFIG_PKG_USING_NR_MICRO_SHELL is not set +# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set +# CONFIG_PKG_USING_LUNAR_CALENDAR is not set +# CONFIG_PKG_USING_BS8116A is not set + +# +# system packages +# +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_PERSIMMON 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 +# CONFIG_PKG_USING_CMSIS is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set +# CONFIG_PKG_USING_THREAD_POOL is not set +# CONFIG_PKG_USING_ROBOTS is not set +# CONFIG_PKG_USING_EV is not set +# CONFIG_PKG_USING_SYSWATCH is not set +# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set +# CONFIG_PKG_USING_PLCCORE is not set + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_SENSORS_DRIVERS is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_U8G2 is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_SX12XX is not set +# CONFIG_PKG_USING_SIGNAL_LED is not set +# CONFIG_PKG_USING_LEDBLINK is not set +# CONFIG_PKG_USING_LITTLED is not set +# CONFIG_PKG_USING_LKDGUI is not set +# CONFIG_PKG_USING_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_WM_LIBRARIES is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# CONFIG_PKG_USING_INFRARED is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_AGILE_BUTTON is not set +# CONFIG_PKG_USING_AGILE_LED is not set +# CONFIG_PKG_USING_AT24CXX is not set +# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_TOUCH_DRIVERS is not set +# CONFIG_PKG_USING_MAX17048 is not set +# CONFIG_PKG_USING_RPLIDAR is not set +# CONFIG_PKG_USING_AS608 is not set +# CONFIG_PKG_USING_RC522 is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set +# CONFIG_PKG_USING_MULTI_RTIMER is not set +# CONFIG_PKG_USING_MAX7219 is not set +# CONFIG_PKG_USING_BEEP is not set +# CONFIG_PKG_USING_EASYBLINK is not set +# CONFIG_PKG_USING_PMS_SERIES is not set + +# +# 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_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set + +# +# 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 +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_NNOM is not set +# CONFIG_PKG_USING_LIBANN is not set +# CONFIG_PKG_USING_ELAPACK is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_VT100 is not set +# CONFIG_PKG_USING_ULAPACK is not set +# CONFIG_PKG_USING_UKAL is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32MP1=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32MP157A=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART4=y +# CONFIG_BSP_UART4_RX_USING_DMA is not set +# CONFIG_BSP_UART4_TX_USING_DMA is not set +# CONFIG_BSP_USING_CRC is not set +# CONFIG_BSP_USING_RNG is not set +# CONFIG_BSP_USING_UDID is not set + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/.gitignore b/bsp/stm32/libraries/templates/stm32mp1xx/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/.gitignore @@ -0,0 +1,42 @@ +*.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/libraries/templates/stm32mp1xx/Kconfig b/bsp/stm32/libraries/templates/stm32mp1xx/Kconfig new file mode 100644 index 0000000000..7a400db91f --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/Kconfig @@ -0,0 +1,22 @@ +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/libraries/templates/stm32mp1xx/README.md b/bsp/stm32/libraries/templates/stm32mp1xx/README.md new file mode 100644 index 0000000000..191f1fa5aa --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/README.md @@ -0,0 +1,123 @@ +# BSP README 模板 + +## 简介 + +本文档为 xxx 开发板的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +【此处简单介绍一下开发板】 + +开发板外观如下图所示: + +![board](figures/board.png) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32MP157AACx +- 常用外设 + - LED:4个 ,LD4 (PA14), LD6 (PA13),LD7 (PH7),LD8 (PD11) + - 按键,4个,WAKE_UP,RESET (NRST),USER1(PA14),USER2 (PA13) +- 常用接口:USB 转串口、SD 卡接口、以太网接口、MIPI接口、USB HOST、Audio、HDMI、Arduino +- 调试接口,标准 JTAG/SWD + +开发板更多详细信息请参考【厂商名】 [xxx开发板介绍](https://xxx)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------- | :----------: | :--------------: | +| USB 转串口 | 支持 | | +| SD卡 | 暂不支持 | | +| 以太网 | 暂不支持 | | +| 音频接口 | 暂不支持 | | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | | +| UART | 支持 | UART4 (ST-Link) | +| EXTI | 支持 | | +| SPI | 支持 | | +| TIM | 支持 | | +| LPTIM | 支持 | | +| I2C | 支持 | 软件、硬件都支持 | +| ADC | 支持 | | +| DAC | 支持 | | +| WWDG | 支持 | | +| USB Device | 暂不支持 | | +| USB Host | 暂不支持 | | + + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.eww 文件,打开 IAR 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 xxx 仿真器下载程序,在通过 xxx 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,【这里写开发板运行起来之后的现象,如:LED 闪烁等】。 + + 连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 3.1.1 build Nov 19 2018 + 2006 - 2018 Copyright by rt-thread team +msh > +``` + +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口4 的功能,如果需更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +- xxx + +## 联系人信息 + +维护人: + +- [xxx](https://个人主页), 邮箱: + diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/SConscript b/bsp/stm32/libraries/templates/stm32mp1xx/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/SConscript @@ -0,0 +1,15 @@ +# for module compiling +import os +Import('RTT_ROOT') +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/SConstruct b/bsp/stm32/libraries/templates/stm32mp1xx/SConstruct new file mode 100644 index 0000000000..e1481a896b --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/SConstruct @@ -0,0 +1,60 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = '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 = 'STM32MPxx_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/libraries/templates/stm32mp1xx/applications/SConscript b/bsp/stm32/libraries/templates/stm32mp1xx/applications/SConscript new file mode 100644 index 0000000000..04f04dd543 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/applications/SConscript @@ -0,0 +1,11 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd, str(Dir('#'))] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/applications/main.c b/bsp/stm32/libraries/templates/stm32mp1xx/applications/main.c new file mode 100644 index 0000000000..43f0f648a4 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/applications/main.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-06-05 thread-liu first version + */ + +#include +#include +#include + +/* defined the LD8 pin: PD11 */ +#define LED8_PIN GET_PIN(D, 11) + +int main(void) +{ + int count = 1; + /* set LD8 pin mode to output */ + rt_pin_mode(LED8_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(LED8_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED8_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + + return RT_EOK; +} diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/.mxproject b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..d2274cfbc1 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/.mxproject @@ -0,0 +1,14 @@ +[PreviousGenFiles] +HeaderPath=D:/3_work/GitRepositories/rt-thread/bsp/stm32/stm32mp157a-st-discovery/board/CubeMX_Config/CM4/Inc +HeaderFiles=stm32mp1xx_it.h;stm32mp1xx_hal_conf.h;main.h; +SourcePath=D:/3_work/GitRepositories/rt-thread/bsp/stm32/stm32mp157a-st-discovery/board/CubeMX_Config/CM4/Src +SourceFiles=stm32mp1xx_it.c;stm32mp1xx_hal_msp.c;main.c; + +[PreviousLibFiles] +LibFiles=Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_adc.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_adc_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_ll_adc.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_rcc.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_rcc_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_gpio.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_gpio_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_hsem.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_dma.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_dma_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_mdma.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_pwr.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_pwr_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_cortex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_def.h;Drivers/STM32MP1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_exti.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_dac.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_dac_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_ipcc.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_lptim.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_spi.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_spi_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_tim.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_tim_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_uart.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_uart_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_wwdg.h;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_ll_adc.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_adc.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_adc_ex.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_rcc.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_rcc_ex.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_gpio.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_hsem.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_dma.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_dma_ex.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_mdma.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_pwr.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_pwr_ex.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_cortex.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_exti.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_dac.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_dac_ex.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_ipcc.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_lptim.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_spi.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_spi_ex.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_tim.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_tim_ex.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_uart.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_uart_ex.c;Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_wwdg.c;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_adc.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_adc_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_ll_adc.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_rcc.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_rcc_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_gpio.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_gpio_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_hsem.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_dma.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_dma_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_mdma.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_pwr.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_pwr_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_cortex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_def.h;Drivers/STM32MP1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_exti.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_dac.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_dac_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_ipcc.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_lptim.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_spi.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_spi_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_tim.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_tim_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_uart.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_uart_ex.h;Drivers/STM32MP1xx_HAL_Driver/Inc/stm32mp1xx_hal_wwdg.h;Drivers/CMSIS/Device/ST/STM32MP1xx/Include/stm32mp157axx_cm4.h;Drivers/CMSIS/Device/ST/STM32MP1xx/Include/stm32mp1xx.h;Drivers/CMSIS/Device/ST/STM32MP1xx/Include/system_stm32mp1xx.h;Drivers/CMSIS/Device/ST/STM32MP1xx/Source/Templates/system_stm32mp1xx.c;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/core_armv8mbl.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/tz_context.h; + +[PreviousUsedIarFiles] +SourceFiles=..\CM4\Src\main.c;..\CM4\Src\stm32mp1xx_it.c;..\CM4\Src\stm32mp1xx_hal_msp.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_ll_adc.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_adc.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_adc_ex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_rcc.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_rcc_ex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_gpio.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_hsem.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_dma.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_dma_ex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_mdma.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_pwr.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_pwr_ex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_cortex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_exti.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_dac.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_dac_ex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_ipcc.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_lptim.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_spi.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_spi_ex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_tim.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_tim_ex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_uart.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_uart_ex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_wwdg.c;..\Common/System/system_stm32mp1xx.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_ll_adc.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_adc.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_adc_ex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_rcc.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_rcc_ex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_gpio.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_hsem.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_dma.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_dma_ex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_mdma.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_pwr.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_pwr_ex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_cortex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_exti.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_dac.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_dac_ex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_ipcc.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_lptim.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_spi.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_spi_ex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_tim.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_tim_ex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_uart.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_uart_ex.c;..\Drivers/STM32MP1xx_HAL_Driver/Src/stm32mp1xx_hal_wwdg.c;..\Common/System/system_stm32mp1xx.c;..\Drivers/CMSIS/Device/ST/STM32MP1xx/Source/Templates/system_stm32mp1xx.c;; +HeaderPath=..\Drivers\STM32MP1xx_HAL_Driver\Inc;..\Drivers\STM32MP1xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32MP1xx\Include;..\Drivers\CMSIS\Include;..\CM4\Inc; +CDefines=CORE_CM4;CORE_CM4;CORE_CM4;USE_HAL_DRIVER;STM32MP157Axx;USE_HAL_DRIVER;USE_HAL_DRIVER; + diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Inc/main.h b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Inc/main.h new file mode 100644 index 0000000000..9880e4f884 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Inc/main.h @@ -0,0 +1,77 @@ +/* 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) 2020 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 "stm32mp1xx_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 */ + +void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +#define STLINK_RX_Pin GPIO_PIN_11 +#define STLINK_RX_GPIO_Port GPIOG +#define STLINK_TX_Pin GPIO_PIN_2 +#define STLINK_TX_GPIO_Port GPIOB +/* 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/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Inc/stm32mp1xx_hal_conf.h b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Inc/stm32mp1xx_hal_conf.h new file mode 100644 index 0000000000..424bdc02a2 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Inc/stm32mp1xx_hal_conf.h @@ -0,0 +1,396 @@ +/** + ****************************************************************************** + * @file stm32mp1xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2020 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 + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32MP1xx_HAL_CONF_H +#define STM32MP1xx_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_CEC_MODULE_ENABLED */ +/*#define HAL_CRC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +#define HAL_DAC_MODULE_ENABLED +/*#define HAL_DCMI_MODULE_ENABLED */ +/*#define HAL_DSI_MODULE_ENABLED */ +/*#define HAL_DFSDM_MODULE_ENABLED */ +/*#define HAL_DTS_MODULE_ENABLED */ +/*#define HAL_ETH_MODULE_ENABLED */ +/*#define HAL_FDCAN_MODULE_ENABLED */ +/*#define HAL_HASH_MODULE_ENABLED */ +/*#define HAL_HCD_MODULE_ENABLED */ +#define HAL_HSEM_MODULE_ENABLED +#define HAL_I2C_MODULE_ENABLED +/*#define HAL_I2S_MODULE_ENABLED */ +#define HAL_IPCC_MODULE_ENABLED +/*#define HAL_IWDG_MODULE_ENABLED */ +#define HAL_LPTIM_MODULE_ENABLED +/*#define HAL_LTDC_MODULE_ENABLED */ +/*#define HAL_NAND_MODULE_ENABLED */ +/*#define HAL_NOR_MODULE_ENABLED */ +/*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_QSPI_MODULE_ENABLED */ +/*#define HAL_RNG_MODULE_ENABLED */ +/*#define HAL_SAI_MODULE_ENABLED */ +/*#define HAL_SD_MODULE_ENABLED */ +/*#define HAL_MMC_MODULE_ENABLED */ +/*#define HAL_RTC_MODULE_ENABLED */ +/*#define HAL_SMBUS_MODULE_ENABLED */ +/*#define HAL_SPDIFRX_MODULE_ENABLED */ +#define HAL_SPI_MODULE_ENABLED +/*#define HAL_SRAM_MODULE_ENABLED */ +/*#define HAL_TAMP_MODULE_ENABLED */ +#define HAL_TIM_MODULE_ENABLED +#define HAL_UART_MODULE_ENABLED +/*#define HAL_USART_MODULE_ENABLED */ +/*#define HAL_SMARTCARD_MODULE_ENABLED */ +#define HAL_WWDG_MODULE_ENABLED +#define HAL_GPIO_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_MDMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED + +/* ########################## Register Callbacks selection ############################## */ +/** + * @brief This is the list of modules where register callback can be used + */ +#define USE_HAL_ADC_REGISTER_CALLBACKS 0u +#define USE_HAL_CEC_REGISTER_CALLBACKS 0u +#define USE_HAL_DAC_REGISTER_CALLBACKS 0u +#define USE_HAL_I2C_REGISTER_CALLBACKS 0u +#define USE_HAL_RNG_REGISTER_CALLBACKS 0u +#define USE_HAL_SPI_REGISTER_CALLBACKS 0u +#define USE_HAL_UART_REGISTER_CALLBACKS 0u +#define USE_HAL_USART_REGISTER_CALLBACKS 0u +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u + +/* ########################## 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 (24000000U) /*!< Value of the External oscillator in Hz : FPGA case fixed to 60MHZ */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT (100U) /*!< 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 (64000000U) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief In the following line adjust the Internal High Speed oscillator (HSI) Startup + * Timeout value + */ +#if !defined (HSI_STARTUP_TIMEOUT) + #define HSI_STARTUP_TIMEOUT 5000U /*!< Time out for HSI start up */ +#endif /* HSI_STARTUP_TIMEOUT */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE 32000U +#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)32768U) /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT ((uint32_t)5000U) /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal oscillator (CSI) default value. + * This value is the default CSI value after Reset. + */ +#if !defined (CSI_VALUE) + #define CSI_VALUE 4000000U /*!< Value of the Internal oscillator in Hz*/ +#endif /* CSI_VALUE */ + +/** + * @brief External clock source for I2S peripheral + * This value is used by the I2S HAL module to compute the I2S clock source + * frequency, this source is inserted directly through I2S_CKIN pad. + */ +#if !defined (EXTERNAL_CLOCK_VALUE) + #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External clock in Hz*/ +#endif /* EXTERNAL_CLOCK_VALUE */ + +/* 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 3300U /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY 0U /*!< tick interrupt priority (lowest by default) */ + /* Warning: Must be set to higher priority for HAL_Delay() */ + /* and HAL_GetTick() usage under interrupt context */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 0U +#define INSTRUCTION_CACHE_ENABLE 0U +#define DATA_CACHE_ENABLE 0U + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32mp1xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32mp1xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32mp1xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_HSEM_MODULE_ENABLED + #include "stm32mp1xx_hal_hsem.h" +#endif /* HAL_HSEM_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32mp1xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_MDMA_MODULE_ENABLED + #include "stm32mp1xx_hal_mdma.h" +#endif /* HAL_MDMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32mp1xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32mp1xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32mp1xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32mp1xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32mp1xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32mp1xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED + #include "stm32mp1xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED + #include "stm32mp1xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED + #include "stm32mp1xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32mp1xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_FDCAN_MODULE_ENABLED + #include "stm32mp1xx_hal_fdcan.h" +#endif /* HAL_FDCAN_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED + #include "stm32mp1xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32mp1xx_hal_hcd.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32mp1xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32mp1xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IPCC_MODULE_ENABLED + #include "stm32mp1xx_hal_ipcc.h" +#endif /* HAL_IPCC_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32mp1xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32mp1xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED + #include "stm32mp1xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED + #include "stm32mp1xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32mp1xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32mp1xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32mp1xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32mp1xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED + #include "stm32mp1xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32mp1xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED + #include "stm32mp1xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32mp1xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32mp1xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32mp1xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_SPDIFRX_MODULE_ENABLED + #include "stm32mp1xx_hal_spdifrx.h" +#endif /* HAL_SPDIFRX_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32mp1xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32mp1xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32mp1xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_TAMP_MODULE_ENABLED + #include "stm32mp1xx_hal_tamp.h" +#endif /* HAL_TAMP_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32mp1xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32mp1xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32mp1xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32mp1xx_hal_wwdg.h" +#endif /* HAL_WWDG_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 /* STM32MP1xx_HAL_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Inc/stm32mp1xx_it.h b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Inc/stm32mp1xx_it.h new file mode 100644 index 0000000000..50c502088f --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Inc/stm32mp1xx_it.h @@ -0,0 +1,77 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32mp1xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2020 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 __STM32MP1xx_IT_H +#define __STM32MP1xx_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); +void WWDG1_IRQHandler(void); +void LPTIM1_IRQHandler(void); +void IPCC_RX1_IRQHandler(void); +void IPCC_TX1_IRQHandler(void); +void LPTIM2_IRQHandler(void); +void LPTIM3_IRQHandler(void); +void LPTIM4_IRQHandler(void); +void LPTIM5_IRQHandler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32MP1xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Src/main.c b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Src/main.c new file mode 100644 index 0000000000..32ea4f86c1 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Src/main.c @@ -0,0 +1,929 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2020 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 hadc2; + +DAC_HandleTypeDef hdac1; + +IPCC_HandleTypeDef hipcc; + +LPTIM_HandleTypeDef hlptim1; +LPTIM_HandleTypeDef hlptim2; +LPTIM_HandleTypeDef hlptim3; +LPTIM_HandleTypeDef hlptim4; +LPTIM_HandleTypeDef hlptim5; + +SPI_HandleTypeDef hspi5; + +TIM_HandleTypeDef htim4; +TIM_HandleTypeDef htim14; +TIM_HandleTypeDef htim16; +TIM_HandleTypeDef htim17; + +UART_HandleTypeDef huart4; +UART_HandleTypeDef huart3; + +WWDG_HandleTypeDef hwwdg1; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +void PeriphCommonClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_IPCC_Init(void); +static void MX_SPI5_Init(void); +static void MX_TIM4_Init(void); +static void MX_TIM14_Init(void); +static void MX_TIM16_Init(void); +static void MX_TIM17_Init(void); +static void MX_UART4_Init(void); +static void MX_ADC2_Init(void); +static void MX_DAC1_Init(void); +static void MX_LPTIM1_Init(void); +static void MX_LPTIM2_Init(void); +static void MX_LPTIM3_Init(void); +static void MX_LPTIM4_Init(void); +static void MX_LPTIM5_Init(void); +static void MX_USART3_UART_Init(void); +static void MX_WWDG1_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 */ + + if(IS_ENGINEERING_BOOT_MODE()) + { + /* Configure the system clock */ + SystemClock_Config(); + } + + if(IS_ENGINEERING_BOOT_MODE()) + { + /* Configure the peripherals common clocks */ + PeriphCommonClock_Config(); + } + + /* IPCC initialisation */ + MX_IPCC_Init(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_SPI5_Init(); + MX_TIM4_Init(); + MX_TIM14_Init(); + MX_TIM16_Init(); + MX_TIM17_Init(); + MX_UART4_Init(); + MX_ADC2_Init(); + MX_DAC1_Init(); + MX_LPTIM1_Init(); + MX_LPTIM2_Init(); + MX_LPTIM3_Init(); + MX_LPTIM4_Init(); + MX_LPTIM5_Init(); + MX_USART3_UART_Init(); + MX_WWDG1_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}; + + /** Configure LSE Drive Capability + */ + HAL_PWR_EnableBkUpAccess(); + __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_MEDIUMHIGH); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSE + |RCC_OSCILLATORTYPE_LSE; + RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS_DIG; + RCC_OscInitStruct.LSEState = RCC_LSE_ON; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = 16; + RCC_OscInitStruct.HSIDivValue = RCC_HSI_DIV1; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; + RCC_OscInitStruct.PLL2.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL2.PLLSource = RCC_PLL12SOURCE_HSE; + RCC_OscInitStruct.PLL2.PLLM = 3; + RCC_OscInitStruct.PLL2.PLLN = 66; + RCC_OscInitStruct.PLL2.PLLP = 2; + RCC_OscInitStruct.PLL2.PLLQ = 1; + RCC_OscInitStruct.PLL2.PLLR = 1; + RCC_OscInitStruct.PLL2.PLLFRACV = 0x1400; + RCC_OscInitStruct.PLL2.PLLMODE = RCC_PLL_FRACTIONAL; + RCC_OscInitStruct.PLL3.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL3.PLLSource = RCC_PLL3SOURCE_HSE; + RCC_OscInitStruct.PLL3.PLLM = 2; + RCC_OscInitStruct.PLL3.PLLN = 34; + RCC_OscInitStruct.PLL3.PLLP = 2; + RCC_OscInitStruct.PLL3.PLLQ = 17; + RCC_OscInitStruct.PLL3.PLLR = 37; + RCC_OscInitStruct.PLL3.PLLRGE = RCC_PLL3IFRANGE_1; + RCC_OscInitStruct.PLL3.PLLFRACV = 6660; + RCC_OscInitStruct.PLL3.PLLMODE = RCC_PLL_FRACTIONAL; + RCC_OscInitStruct.PLL4.PLLState = RCC_PLL_NONE; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** RCC Clock Config + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_ACLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2 + |RCC_CLOCKTYPE_PCLK3|RCC_CLOCKTYPE_PCLK4 + |RCC_CLOCKTYPE_PCLK5; + RCC_ClkInitStruct.AXISSInit.AXI_Clock = RCC_AXISSOURCE_PLL2; + RCC_ClkInitStruct.AXISSInit.AXI_Div = RCC_AXI_DIV1; + RCC_ClkInitStruct.MCUInit.MCU_Clock = RCC_MCUSSOURCE_PLL3; + RCC_ClkInitStruct.MCUInit.MCU_Div = RCC_MCU_DIV1; + RCC_ClkInitStruct.APB4_Div = RCC_APB4_DIV2; + RCC_ClkInitStruct.APB5_Div = RCC_APB5_DIV4; + RCC_ClkInitStruct.APB1_Div = RCC_APB1_DIV2; + RCC_ClkInitStruct.APB2_Div = RCC_APB2_DIV2; + RCC_ClkInitStruct.APB3_Div = RCC_APB3_DIV2; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Set the HSE division factor for RTC clock + */ + __HAL_RCC_RTC_HSEDIV(24); +} + +/** + * @brief Peripherals Common Clock Configuration + * @retval None + */ +void PeriphCommonClock_Config(void) +{ + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + + /** Initializes the common periph clock + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_CKPER; + PeriphClkInit.CkperClockSelection = RCC_CKPERCLKSOURCE_HSE; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief ADC2 Initialization Function + * @param None + * @retval None + */ +static void MX_ADC2_Init(void) +{ + + /* USER CODE BEGIN ADC2_Init 0 */ + + /* USER CODE END ADC2_Init 0 */ + + ADC_ChannelConfTypeDef sConfig = {0}; + + /* USER CODE BEGIN ADC2_Init 1 */ + + /* USER CODE END ADC2_Init 1 */ + /** Common config + */ + hadc2.Instance = ADC2; + hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2; + hadc2.Init.Resolution = ADC_RESOLUTION_16B; + hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE; + hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV; + hadc2.Init.LowPowerAutoWait = DISABLE; + hadc2.Init.ContinuousConvMode = DISABLE; + hadc2.Init.NbrOfConversion = 1; + hadc2.Init.DiscontinuousConvMode = DISABLE; + hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START; + hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; + hadc2.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR; + hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED; + hadc2.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE; + hadc2.Init.OversamplingMode = DISABLE; + if (HAL_ADC_Init(&hadc2) != HAL_OK) + { + Error_Handler(); + } + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_6; + sConfig.Rank = ADC_REGULAR_RANK_1; + sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; + sConfig.SingleDiff = ADC_SINGLE_ENDED; + sConfig.OffsetNumber = ADC_OFFSET_NONE; + sConfig.Offset = 0; + if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN ADC2_Init 2 */ + + /* USER CODE END ADC2_Init 2 */ + +} + +/** + * @brief DAC1 Initialization Function + * @param None + * @retval None + */ +static void MX_DAC1_Init(void) +{ + + /* USER CODE BEGIN DAC1_Init 0 */ + + /* USER CODE END DAC1_Init 0 */ + + DAC_ChannelConfTypeDef sConfig = {0}; + + /* USER CODE BEGIN DAC1_Init 1 */ + + /* USER CODE END DAC1_Init 1 */ + /** DAC Initialization + */ + hdac1.Instance = DAC1; + if (HAL_DAC_Init(&hdac1) != HAL_OK) + { + Error_Handler(); + } + /** DAC channel OUT1 config + */ + sConfig.DAC_HighFrequency = DAC_HIGH_FREQUENCY_INTERFACE_MODE_DISABLE; + sConfig.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE; + sConfig.DAC_Trigger = DAC_TRIGGER_NONE; + sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE; + sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_DISABLE; + sConfig.DAC_UserTrimming = DAC_TRIMMING_FACTORY; + if (HAL_DAC_ConfigChannel(&hdac1, &sConfig, DAC_CHANNEL_1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN DAC1_Init 2 */ + + /* USER CODE END DAC1_Init 2 */ + +} + +/** + * @brief IPCC Initialization Function + * @param None + * @retval None + */ +static void MX_IPCC_Init(void) +{ + + /* USER CODE BEGIN IPCC_Init 0 */ + + /* USER CODE END IPCC_Init 0 */ + + /* USER CODE BEGIN IPCC_Init 1 */ + + /* USER CODE END IPCC_Init 1 */ + hipcc.Instance = IPCC; + if (HAL_IPCC_Init(&hipcc) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN IPCC_Init 2 */ + + /* USER CODE END IPCC_Init 2 */ + +} + +/** + * @brief LPTIM1 Initialization Function + * @param None + * @retval None + */ +static void MX_LPTIM1_Init(void) +{ + + /* USER CODE BEGIN LPTIM1_Init 0 */ + + /* USER CODE END LPTIM1_Init 0 */ + + /* USER CODE BEGIN LPTIM1_Init 1 */ + + /* USER CODE END LPTIM1_Init 1 */ + hlptim1.Instance = LPTIM1; + hlptim1.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC; + hlptim1.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1; + hlptim1.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE; + hlptim1.Init.OutputPolarity = LPTIM_OUTPUTPOLARITY_HIGH; + hlptim1.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE; + hlptim1.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL; + hlptim1.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO; + hlptim1.Init.Input2Source = LPTIM_INPUT2SOURCE_GPIO; + if (HAL_LPTIM_Init(&hlptim1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN LPTIM1_Init 2 */ + + /* USER CODE END LPTIM1_Init 2 */ + +} + +/** + * @brief LPTIM2 Initialization Function + * @param None + * @retval None + */ +static void MX_LPTIM2_Init(void) +{ + + /* USER CODE BEGIN LPTIM2_Init 0 */ + + /* USER CODE END LPTIM2_Init 0 */ + + /* USER CODE BEGIN LPTIM2_Init 1 */ + + /* USER CODE END LPTIM2_Init 1 */ + hlptim2.Instance = LPTIM2; + hlptim2.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC; + hlptim2.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1; + hlptim2.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE; + hlptim2.Init.OutputPolarity = LPTIM_OUTPUTPOLARITY_HIGH; + hlptim2.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE; + hlptim2.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL; + hlptim2.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO; + hlptim2.Init.Input2Source = LPTIM_INPUT2SOURCE_GPIO; + if (HAL_LPTIM_Init(&hlptim2) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN LPTIM2_Init 2 */ + + /* USER CODE END LPTIM2_Init 2 */ + +} + +/** + * @brief LPTIM3 Initialization Function + * @param None + * @retval None + */ +static void MX_LPTIM3_Init(void) +{ + + /* USER CODE BEGIN LPTIM3_Init 0 */ + + /* USER CODE END LPTIM3_Init 0 */ + + /* USER CODE BEGIN LPTIM3_Init 1 */ + + /* USER CODE END LPTIM3_Init 1 */ + hlptim3.Instance = LPTIM3; + hlptim3.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC; + hlptim3.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1; + hlptim3.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE; + hlptim3.Init.OutputPolarity = LPTIM_OUTPUTPOLARITY_HIGH; + hlptim3.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE; + hlptim3.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL; + if (HAL_LPTIM_Init(&hlptim3) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN LPTIM3_Init 2 */ + + /* USER CODE END LPTIM3_Init 2 */ + +} + +/** + * @brief LPTIM4 Initialization Function + * @param None + * @retval None + */ +static void MX_LPTIM4_Init(void) +{ + + /* USER CODE BEGIN LPTIM4_Init 0 */ + + /* USER CODE END LPTIM4_Init 0 */ + + /* USER CODE BEGIN LPTIM4_Init 1 */ + + /* USER CODE END LPTIM4_Init 1 */ + hlptim4.Instance = LPTIM4; + hlptim4.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC; + hlptim4.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1; + hlptim4.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE; + hlptim4.Init.OutputPolarity = LPTIM_OUTPUTPOLARITY_HIGH; + hlptim4.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE; + hlptim4.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL; + if (HAL_LPTIM_Init(&hlptim4) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN LPTIM4_Init 2 */ + + /* USER CODE END LPTIM4_Init 2 */ + +} + +/** + * @brief LPTIM5 Initialization Function + * @param None + * @retval None + */ +static void MX_LPTIM5_Init(void) +{ + + /* USER CODE BEGIN LPTIM5_Init 0 */ + + /* USER CODE END LPTIM5_Init 0 */ + + /* USER CODE BEGIN LPTIM5_Init 1 */ + + /* USER CODE END LPTIM5_Init 1 */ + hlptim5.Instance = LPTIM5; + hlptim5.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC; + hlptim5.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1; + hlptim5.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE; + hlptim5.Init.OutputPolarity = LPTIM_OUTPUTPOLARITY_HIGH; + hlptim5.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE; + hlptim5.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL; + if (HAL_LPTIM_Init(&hlptim5) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN LPTIM5_Init 2 */ + + /* USER CODE END LPTIM5_Init 2 */ + +} + +/** + * @brief SPI5 Initialization Function + * @param None + * @retval None + */ +static void MX_SPI5_Init(void) +{ + + /* USER CODE BEGIN SPI5_Init 0 */ + + /* USER CODE END SPI5_Init 0 */ + + /* USER CODE BEGIN SPI5_Init 1 */ + + /* USER CODE END SPI5_Init 1 */ + /* SPI5 parameter configuration*/ + hspi5.Instance = SPI5; + hspi5.Init.Mode = SPI_MODE_MASTER; + hspi5.Init.Direction = SPI_DIRECTION_2LINES_TXONLY; + hspi5.Init.DataSize = SPI_DATASIZE_4BIT; + hspi5.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi5.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi5.Init.NSS = SPI_NSS_SOFT; + hspi5.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4; + hspi5.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi5.Init.TIMode = SPI_TIMODE_DISABLE; + hspi5.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi5.Init.CRCPolynomial = 0x0; + hspi5.Init.NSSPMode = SPI_NSS_PULSE_ENABLE; + hspi5.Init.NSSPolarity = SPI_NSS_POLARITY_LOW; + hspi5.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA; + hspi5.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN; + hspi5.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN; + hspi5.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE; + hspi5.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE; + hspi5.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE; + hspi5.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE; + hspi5.Init.IOSwap = SPI_IO_SWAP_DISABLE; + if (HAL_SPI_Init(&hspi5) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN SPI5_Init 2 */ + + /* USER CODE END SPI5_Init 2 */ + +} + +/** + * @brief TIM4 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM4_Init(void) +{ + + /* USER CODE BEGIN TIM4_Init 0 */ + + /* USER CODE END TIM4_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + TIM_OC_InitTypeDef sConfigOC = {0}; + + /* USER CODE BEGIN TIM4_Init 1 */ + + /* USER CODE END TIM4_Init 1 */ + htim4.Instance = TIM4; + htim4.Init.Prescaler = 0; + htim4.Init.CounterMode = TIM_COUNTERMODE_UP; + htim4.Init.Period = 0; + htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim4) != HAL_OK) + { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_Init(&htim4) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = 0; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM4_Init 2 */ + + /* USER CODE END TIM4_Init 2 */ + HAL_TIM_MspPostInit(&htim4); + +} + +/** + * @brief TIM14 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM14_Init(void) +{ + + /* USER CODE BEGIN TIM14_Init 0 */ + + /* USER CODE END TIM14_Init 0 */ + + /* USER CODE BEGIN TIM14_Init 1 */ + + /* USER CODE END TIM14_Init 1 */ + htim14.Instance = TIM14; + htim14.Init.Prescaler = 0; + htim14.Init.CounterMode = TIM_COUNTERMODE_UP; + htim14.Init.Period = 0; + htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim14.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim14) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM14_Init 2 */ + + /* USER CODE END TIM14_Init 2 */ + +} + +/** + * @brief TIM16 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM16_Init(void) +{ + + /* USER CODE BEGIN TIM16_Init 0 */ + + /* USER CODE END TIM16_Init 0 */ + + /* USER CODE BEGIN TIM16_Init 1 */ + + /* USER CODE END TIM16_Init 1 */ + htim16.Instance = TIM16; + htim16.Init.Prescaler = 0; + htim16.Init.CounterMode = TIM_COUNTERMODE_UP; + htim16.Init.Period = 0; + htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim16.Init.RepetitionCounter = 0; + htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim16) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM16_Init 2 */ + + /* USER CODE END TIM16_Init 2 */ + +} + +/** + * @brief TIM17 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM17_Init(void) +{ + + /* USER CODE BEGIN TIM17_Init 0 */ + + /* USER CODE END TIM17_Init 0 */ + + /* USER CODE BEGIN TIM17_Init 1 */ + + /* USER CODE END TIM17_Init 1 */ + htim17.Instance = TIM17; + htim17.Init.Prescaler = 0; + htim17.Init.CounterMode = TIM_COUNTERMODE_UP; + htim17.Init.Period = 0; + htim17.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim17.Init.RepetitionCounter = 0; + htim17.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim17) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM17_Init 2 */ + + /* USER CODE END TIM17_Init 2 */ + +} + +/** + * @brief UART4 Initialization Function + * @param None + * @retval None + */ +static void MX_UART4_Init(void) +{ + + /* USER CODE BEGIN UART4_Init 0 */ + + /* USER CODE END UART4_Init 0 */ + + /* USER CODE BEGIN UART4_Init 1 */ + + /* USER CODE END UART4_Init 1 */ + huart4.Instance = UART4; + huart4.Init.BaudRate = 115200; + huart4.Init.WordLength = UART_WORDLENGTH_8B; + huart4.Init.StopBits = UART_STOPBITS_1; + huart4.Init.Parity = UART_PARITY_NONE; + huart4.Init.Mode = UART_MODE_TX_RX; + huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart4.Init.OverSampling = UART_OVERSAMPLING_16; + huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart4.Init.ClockPrescaler = UART_PRESCALER_DIV1; + huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart4) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetTxFifoThreshold(&huart4, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetRxFifoThreshold(&huart4, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_DisableFifoMode(&huart4) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN UART4_Init 2 */ + + /* USER CODE END UART4_Init 2 */ + +} + +/** + * @brief USART3 Initialization Function + * @param None + * @retval None + */ +static void MX_USART3_UART_Init(void) +{ + + /* USER CODE BEGIN USART3_Init 0 */ + + /* USER CODE END USART3_Init 0 */ + + /* USER CODE BEGIN USART3_Init 1 */ + + /* USER CODE END USART3_Init 1 */ + huart3.Instance = USART3; + huart3.Init.BaudRate = 115200; + huart3.Init.WordLength = UART_WORDLENGTH_8B; + huart3.Init.StopBits = UART_STOPBITS_1; + huart3.Init.Parity = UART_PARITY_NONE; + huart3.Init.Mode = UART_MODE_TX_RX; + huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart3.Init.OverSampling = UART_OVERSAMPLING_16; + huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart3.Init.ClockPrescaler = UART_PRESCALER_DIV1; + huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart3) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetTxFifoThreshold(&huart3, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetRxFifoThreshold(&huart3, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_DisableFifoMode(&huart3) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART3_Init 2 */ + + /* USER CODE END USART3_Init 2 */ + +} + +/** + * @brief WWDG1 Initialization Function + * @param None + * @retval None + */ +static void MX_WWDG1_Init(void) +{ + + /* USER CODE BEGIN WWDG1_Init 0 */ + + /* USER CODE END WWDG1_Init 0 */ + + /* USER CODE BEGIN WWDG1_Init 1 */ + + /* USER CODE END WWDG1_Init 1 */ + hwwdg1.Instance = WWDG1; + hwwdg1.Init.Prescaler = WWDG_PRESCALER_8; + hwwdg1.Init.Window = 64; + hwwdg1.Init.Counter = 64; + hwwdg1.Init.EWIMode = WWDG_EWI_DISABLE; + if (HAL_WWDG_Init(&hwwdg1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN WWDG1_Init 2 */ + + /* USER CODE END WWDG1_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_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOG_CLK_ENABLE(); + __HAL_RCC_GPIOF_CLK_ENABLE(); + __HAL_RCC_GPIOD_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/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Src/stm32mp1xx_hal_msp.c b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Src/stm32mp1xx_hal_msp.c new file mode 100644 index 0000000000..efb81996fa --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Src/stm32mp1xx_hal_msp.c @@ -0,0 +1,987 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : stm32mp1xx_hal_msp.c + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2020 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 */ +#include "stpmic.h" +#include "rtconfig.h" +/* 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 */ + +void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); + /** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_HSEM_CLK_ENABLE(); + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + if(IS_ENGINEERING_BOOT_MODE()) + { +#if defined(BSP_USING_ADC) || defined(BSP_USING_DAC) + /* Configure PMIC */ + BSP_PMIC_Init(); + BSP_PMIC_InitRegulators(); + + __HAL_RCC_VREF_CLK_ENABLE(); + HAL_SYSCFG_VREFBUF_HighImpedanceConfig(SYSCFG_VREFBUF_HIGH_IMPEDANCE_DISABLE); + HAL_SYSCFG_EnableVREFBUF(); +#endif + } + /* 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}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + if(hadc->Instance==ADC2) + { + /* USER CODE BEGIN ADC2_MspInit 0 */ + + /* USER CODE END ADC2_MspInit 0 */ + if(IS_ENGINEERING_BOOT_MODE()) + { + /** Initializes the peripherals clock + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC; + PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_PER; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + + } + + /* Peripheral clock enable */ + __HAL_RCC_ADC12_CLK_ENABLE(); + + __HAL_RCC_GPIOF_CLK_ENABLE(); + /**ADC2 GPIO Configuration + PF14 ------> ADC2_INP6 + */ + GPIO_InitStruct.Pin = GPIO_PIN_14; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + /* USER CODE BEGIN ADC2_MspInit 1 */ + /* USER CODE END ADC2_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==ADC2) + { + /* USER CODE BEGIN ADC2_MspDeInit 0 */ + + /* USER CODE END ADC2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_ADC12_CLK_DISABLE(); + + /**ADC2 GPIO Configuration + PF14 ------> ADC2_INP6 + */ + HAL_GPIO_DeInit(GPIOF, GPIO_PIN_14); + + /* USER CODE BEGIN ADC2_MspDeInit 1 */ + + /* USER CODE END ADC2_MspDeInit 1 */ + } + +} + +/** +* @brief DAC MSP Initialization +* This function configures the hardware resources used in this example +* @param hdac: DAC handle pointer +* @retval None +*/ +void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hdac->Instance==DAC1) + { + /* USER CODE BEGIN DAC1_MspInit 0 */ + + /* USER CODE END DAC1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_DAC12_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**DAC1 GPIO Configuration + PA4 ------> DAC1_OUT1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_4; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN DAC1_MspInit 1 */ + + /* USER CODE END DAC1_MspInit 1 */ + } + +} + +/** +* @brief DAC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hdac: DAC handle pointer +* @retval None +*/ +void HAL_DAC_MspDeInit(DAC_HandleTypeDef* hdac) +{ + if(hdac->Instance==DAC1) + { + /* USER CODE BEGIN DAC1_MspDeInit 0 */ + + /* USER CODE END DAC1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_DAC12_CLK_DISABLE(); + + /**DAC1 GPIO Configuration + PA4 ------> DAC1_OUT1 + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_4); + + /* USER CODE BEGIN DAC1_MspDeInit 1 */ + + /* USER CODE END DAC1_MspDeInit 1 */ + } + +} + +/** +* @brief IPCC MSP Initialization +* This function configures the hardware resources used in this example +* @param hipcc: IPCC handle pointer +* @retval None +*/ +void HAL_IPCC_MspInit(IPCC_HandleTypeDef* hipcc) +{ + if(hipcc->Instance==IPCC) + { + /* USER CODE BEGIN IPCC_MspInit 0 */ + + /* USER CODE END IPCC_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_IPCC_CLK_ENABLE(); + /* IPCC interrupt Init */ + HAL_NVIC_SetPriority(IPCC_RX1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(IPCC_RX1_IRQn); + HAL_NVIC_SetPriority(IPCC_TX1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(IPCC_TX1_IRQn); + /* USER CODE BEGIN IPCC_MspInit 1 */ + + /* USER CODE END IPCC_MspInit 1 */ + } + +} + +/** +* @brief IPCC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hipcc: IPCC handle pointer +* @retval None +*/ +void HAL_IPCC_MspDeInit(IPCC_HandleTypeDef* hipcc) +{ + if(hipcc->Instance==IPCC) + { + /* USER CODE BEGIN IPCC_MspDeInit 0 */ + + /* USER CODE END IPCC_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_IPCC_CLK_DISABLE(); + + /* IPCC interrupt DeInit */ + HAL_NVIC_DisableIRQ(IPCC_RX1_IRQn); + HAL_NVIC_DisableIRQ(IPCC_TX1_IRQn); + /* USER CODE BEGIN IPCC_MspDeInit 1 */ + + /* USER CODE END IPCC_MspDeInit 1 */ + } + +} + +/** +* @brief LPTIM MSP Initialization +* This function configures the hardware resources used in this example +* @param hlptim: LPTIM handle pointer +* @retval None +*/ +void HAL_LPTIM_MspInit(LPTIM_HandleTypeDef* hlptim) +{ + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + if(hlptim->Instance==LPTIM1) + { + /* USER CODE BEGIN LPTIM1_MspInit 0 */ + + /* USER CODE END LPTIM1_MspInit 0 */ + if(IS_ENGINEERING_BOOT_MODE()) + { + /** Initializes the peripherals clock + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LPTIM1; + PeriphClkInit.Lptim1ClockSelection = RCC_LPTIM1CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + + } + + /* Peripheral clock enable */ + __HAL_RCC_LPTIM1_CLK_ENABLE(); + /* LPTIM1 interrupt Init */ + HAL_NVIC_SetPriority(LPTIM1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(LPTIM1_IRQn); + /* USER CODE BEGIN LPTIM1_MspInit 1 */ + + /* USER CODE END LPTIM1_MspInit 1 */ + } + else if(hlptim->Instance==LPTIM2) + { + /* USER CODE BEGIN LPTIM2_MspInit 0 */ + + /* USER CODE END LPTIM2_MspInit 0 */ + + if(IS_ENGINEERING_BOOT_MODE()) + { + /** Initializes the peripherals clock + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LPTIM23; + PeriphClkInit.Lptim23ClockSelection = RCC_LPTIM23CLKSOURCE_PCLK3; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + + } + + /* Peripheral clock enable */ + __HAL_RCC_LPTIM2_CLK_ENABLE(); + /* LPTIM2 interrupt Init */ + HAL_NVIC_SetPriority(LPTIM2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(LPTIM2_IRQn); + /* USER CODE BEGIN LPTIM2_MspInit 1 */ + + /* USER CODE END LPTIM2_MspInit 1 */ + } + else if(hlptim->Instance==LPTIM3) + { + /* USER CODE BEGIN LPTIM3_MspInit 0 */ + + /* USER CODE END LPTIM3_MspInit 0 */ + + if(IS_ENGINEERING_BOOT_MODE()) + { + /** Initializes the peripherals clock + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LPTIM23; + PeriphClkInit.Lptim23ClockSelection = RCC_LPTIM23CLKSOURCE_PCLK3; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + + } + + /* Peripheral clock enable */ + __HAL_RCC_LPTIM3_CLK_ENABLE(); + /* LPTIM3 interrupt Init */ + HAL_NVIC_SetPriority(LPTIM3_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(LPTIM3_IRQn); + /* USER CODE BEGIN LPTIM3_MspInit 1 */ + + /* USER CODE END LPTIM3_MspInit 1 */ + } + else if(hlptim->Instance==LPTIM4) + { + /* USER CODE BEGIN LPTIM4_MspInit 0 */ + + /* USER CODE END LPTIM4_MspInit 0 */ + + if(IS_ENGINEERING_BOOT_MODE()) + { + /** Initializes the peripherals clock + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LPTIM45; + PeriphClkInit.Lptim45ClockSelection = RCC_LPTIM45CLKSOURCE_PCLK3; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + + } + + /* Peripheral clock enable */ + __HAL_RCC_LPTIM4_CLK_ENABLE(); + /* LPTIM4 interrupt Init */ + HAL_NVIC_SetPriority(LPTIM4_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(LPTIM4_IRQn); + /* USER CODE BEGIN LPTIM4_MspInit 1 */ + + /* USER CODE END LPTIM4_MspInit 1 */ + } + else if(hlptim->Instance==LPTIM5) + { + /* USER CODE BEGIN LPTIM5_MspInit 0 */ + + /* USER CODE END LPTIM5_MspInit 0 */ + + if(IS_ENGINEERING_BOOT_MODE()) + { + /** Initializes the peripherals clock + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LPTIM45; + PeriphClkInit.Lptim45ClockSelection = RCC_LPTIM45CLKSOURCE_PCLK3; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + + } + + /* Peripheral clock enable */ + __HAL_RCC_LPTIM5_CLK_ENABLE(); + /* LPTIM5 interrupt Init */ + HAL_NVIC_SetPriority(LPTIM5_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(LPTIM5_IRQn); + /* USER CODE BEGIN LPTIM5_MspInit 1 */ + + /* USER CODE END LPTIM5_MspInit 1 */ + } + +} + +/** +* @brief LPTIM MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hlptim: LPTIM handle pointer +* @retval None +*/ +void HAL_LPTIM_MspDeInit(LPTIM_HandleTypeDef* hlptim) +{ + if(hlptim->Instance==LPTIM1) + { + /* USER CODE BEGIN LPTIM1_MspDeInit 0 */ + + /* USER CODE END LPTIM1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LPTIM1_CLK_DISABLE(); + + /* LPTIM1 interrupt DeInit */ + HAL_NVIC_DisableIRQ(LPTIM1_IRQn); + /* USER CODE BEGIN LPTIM1_MspDeInit 1 */ + + /* USER CODE END LPTIM1_MspDeInit 1 */ + } + else if(hlptim->Instance==LPTIM2) + { + /* USER CODE BEGIN LPTIM2_MspDeInit 0 */ + + /* USER CODE END LPTIM2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LPTIM2_CLK_DISABLE(); + + /* LPTIM2 interrupt DeInit */ + HAL_NVIC_DisableIRQ(LPTIM2_IRQn); + /* USER CODE BEGIN LPTIM2_MspDeInit 1 */ + + /* USER CODE END LPTIM2_MspDeInit 1 */ + } + else if(hlptim->Instance==LPTIM3) + { + /* USER CODE BEGIN LPTIM3_MspDeInit 0 */ + + /* USER CODE END LPTIM3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LPTIM3_CLK_DISABLE(); + + /* LPTIM3 interrupt DeInit */ + HAL_NVIC_DisableIRQ(LPTIM3_IRQn); + /* USER CODE BEGIN LPTIM3_MspDeInit 1 */ + + /* USER CODE END LPTIM3_MspDeInit 1 */ + } + else if(hlptim->Instance==LPTIM4) + { + /* USER CODE BEGIN LPTIM4_MspDeInit 0 */ + + /* USER CODE END LPTIM4_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LPTIM4_CLK_DISABLE(); + + /* LPTIM4 interrupt DeInit */ + HAL_NVIC_DisableIRQ(LPTIM4_IRQn); + /* USER CODE BEGIN LPTIM4_MspDeInit 1 */ + + /* USER CODE END LPTIM4_MspDeInit 1 */ + } + else if(hlptim->Instance==LPTIM5) + { + /* USER CODE BEGIN LPTIM5_MspDeInit 0 */ + + /* USER CODE END LPTIM5_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LPTIM5_CLK_DISABLE(); + + /* LPTIM5 interrupt DeInit */ + HAL_NVIC_DisableIRQ(LPTIM5_IRQn); + /* USER CODE BEGIN LPTIM5_MspDeInit 1 */ + + /* USER CODE END LPTIM5_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}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + if(hspi->Instance==SPI5) + { + /* USER CODE BEGIN SPI5_MspInit 0 */ + + /* USER CODE END SPI5_MspInit 0 */ + if(IS_ENGINEERING_BOOT_MODE()) + { + /** Initializes the peripherals clock + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_SPI45; + PeriphClkInit.Spi45ClockSelection = RCC_SPI45CLKSOURCE_PCLK2; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + + } + + /* Peripheral clock enable */ + __HAL_RCC_SPI5_CLK_ENABLE(); + + __HAL_RCC_GPIOF_CLK_ENABLE(); + /**SPI5 GPIO Configuration + PF9 ------> SPI5_MOSI + PF7 ------> SPI5_SCK + */ + GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM; + GPIO_InitStruct.Alternate = GPIO_AF5_SPI5; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + /* USER CODE BEGIN SPI5_MspInit 1 */ + + /* USER CODE END SPI5_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==SPI5) + { + /* USER CODE BEGIN SPI5_MspDeInit 0 */ + + /* USER CODE END SPI5_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_SPI5_CLK_DISABLE(); + + /**SPI5 GPIO Configuration + PF9 ------> SPI5_MOSI + PF7 ------> SPI5_SCK + */ + HAL_GPIO_DeInit(GPIOF, GPIO_PIN_9|GPIO_PIN_7); + + /* USER CODE BEGIN SPI5_MspDeInit 1 */ + + /* USER CODE END SPI5_MspDeInit 1 */ + } + +} + +/** +* @brief TIM_Base MSP Initialization +* This function configures the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM4) + { + /* USER CODE BEGIN TIM4_MspInit 0 */ + + /* USER CODE END TIM4_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM4_CLK_ENABLE(); + /* USER CODE BEGIN TIM4_MspInit 1 */ + + /* USER CODE END TIM4_MspInit 1 */ + } + else if(htim_base->Instance==TIM14) + { + /* USER CODE BEGIN TIM14_MspInit 0 */ + + /* USER CODE END TIM14_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM14_CLK_ENABLE(); + /* USER CODE BEGIN TIM14_MspInit 1 */ + + /* USER CODE END TIM14_MspInit 1 */ + } + else if(htim_base->Instance==TIM16) + { + /* USER CODE BEGIN TIM16_MspInit 0 */ + + /* USER CODE END TIM16_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM16_CLK_ENABLE(); + /* USER CODE BEGIN TIM16_MspInit 1 */ + + /* USER CODE END TIM16_MspInit 1 */ + } + else if(htim_base->Instance==TIM17) + { + /* USER CODE BEGIN TIM17_MspInit 0 */ + + /* USER CODE END TIM17_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM17_CLK_ENABLE(); + /* USER CODE BEGIN TIM17_MspInit 1 */ + + /* USER CODE END TIM17_MspInit 1 */ + } + +} + +void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(htim->Instance==TIM4) + { + /* USER CODE BEGIN TIM4_MspPostInit 0 */ + + /* USER CODE END TIM4_MspPostInit 0 */ + + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**TIM4 GPIO Configuration + PD13 ------> TIM4_CH2 + */ + GPIO_InitStruct.Pin = GPIO_PIN_13; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM4_MspPostInit 1 */ + + /* USER CODE END TIM4_MspPostInit 1 */ + } + +} +/** +* @brief TIM_Base MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM4) + { + /* USER CODE BEGIN TIM4_MspDeInit 0 */ + + /* USER CODE END TIM4_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM4_CLK_DISABLE(); + /* USER CODE BEGIN TIM4_MspDeInit 1 */ + + /* USER CODE END TIM4_MspDeInit 1 */ + } + else if(htim_base->Instance==TIM14) + { + /* USER CODE BEGIN TIM14_MspDeInit 0 */ + + /* USER CODE END TIM14_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM14_CLK_DISABLE(); + /* USER CODE BEGIN TIM14_MspDeInit 1 */ + + /* USER CODE END TIM14_MspDeInit 1 */ + } + else if(htim_base->Instance==TIM16) + { + /* USER CODE BEGIN TIM16_MspDeInit 0 */ + + /* USER CODE END TIM16_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM16_CLK_DISABLE(); + /* USER CODE BEGIN TIM16_MspDeInit 1 */ + + /* USER CODE END TIM16_MspDeInit 1 */ + } + else if(htim_base->Instance==TIM17) + { + /* USER CODE BEGIN TIM17_MspDeInit 0 */ + + /* USER CODE END TIM17_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM17_CLK_DISABLE(); + /* USER CODE BEGIN TIM17_MspDeInit 1 */ + + /* USER CODE END TIM17_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}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + if(huart->Instance==UART4) + { + /* USER CODE BEGIN UART4_MspInit 0 */ + + /* USER CODE END UART4_MspInit 0 */ + if(IS_ENGINEERING_BOOT_MODE()) + { + /** Initializes the peripherals clock + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_UART24; + PeriphClkInit.Uart24ClockSelection = RCC_UART24CLKSOURCE_HSI; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + + } + + /* Peripheral clock enable */ + __HAL_RCC_UART4_CLK_ENABLE(); + + __HAL_RCC_GPIOG_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**UART4 GPIO Configuration + PG11 ------> UART4_TX + PB2 ------> UART4_RX + */ + GPIO_InitStruct.Pin = STLINK_RX_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF6_UART4; + HAL_GPIO_Init(STLINK_RX_GPIO_Port, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = STLINK_TX_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Alternate = GPIO_AF8_UART4; + HAL_GPIO_Init(STLINK_TX_GPIO_Port, &GPIO_InitStruct); + + /* USER CODE BEGIN UART4_MspInit 1 */ + + /* USER CODE END UART4_MspInit 1 */ + } + else if(huart->Instance==USART3) + { + /* USER CODE BEGIN USART3_MspInit 0 */ + + /* USER CODE END USART3_MspInit 0 */ + + if(IS_ENGINEERING_BOOT_MODE()) + { + /** Initializes the peripherals clock + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_UART35; + PeriphClkInit.Uart35ClockSelection = RCC_UART35CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + + } + + /* Peripheral clock enable */ + __HAL_RCC_USART3_CLK_ENABLE(); + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**USART3 GPIO Configuration + PB10 ------> USART3_TX + PB12 ------> USART3_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF7_USART3; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Alternate = GPIO_AF8_USART3; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN USART3_MspInit 1 */ + + /* USER CODE END USART3_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==UART4) + { + /* USER CODE BEGIN UART4_MspDeInit 0 */ + + /* USER CODE END UART4_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_UART4_CLK_DISABLE(); + + /**UART4 GPIO Configuration + PG11 ------> UART4_TX + PB2 ------> UART4_RX + */ + HAL_GPIO_DeInit(STLINK_RX_GPIO_Port, STLINK_RX_Pin); + + HAL_GPIO_DeInit(STLINK_TX_GPIO_Port, STLINK_TX_Pin); + + /* USER CODE BEGIN UART4_MspDeInit 1 */ + + /* USER CODE END UART4_MspDeInit 1 */ + } + else if(huart->Instance==USART3) + { + /* USER CODE BEGIN USART3_MspDeInit 0 */ + + /* USER CODE END USART3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART3_CLK_DISABLE(); + + /**USART3 GPIO Configuration + PB10 ------> USART3_TX + PB12 ------> USART3_RX + */ + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10|GPIO_PIN_12); + + /* USER CODE BEGIN USART3_MspDeInit 1 */ + + /* USER CODE END USART3_MspDeInit 1 */ + } + +} + +/** +* @brief WWDG MSP Initialization +* This function configures the hardware resources used in this example +* @param hwwdg: WWDG handle pointer +* @retval None +*/ +void HAL_WWDG_MspInit(WWDG_HandleTypeDef* hwwdg) +{ + if(hwwdg->Instance==WWDG1) + { + /* USER CODE BEGIN WWDG1_MspInit 0 */ + + /* USER CODE END WWDG1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_WWDG1_CLK_ENABLE(); + /* WWDG1 interrupt Init */ + HAL_NVIC_SetPriority(WWDG1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(WWDG1_IRQn); + /* USER CODE BEGIN WWDG1_MspInit 1 */ + + /* USER CODE END WWDG1_MspInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ +/** + * @brief Initializes I2C MSP. + * @param hI2c : I2C handler + * @retval None + */ +void HAL_I2C_MspInit(I2C_HandleTypeDef *hI2c) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + + if(hI2c->Instance == I2C4) + { + if(IS_ENGINEERING_BOOT_MODE()) + { + /*** Configure the I2C peripheral clock ***/ + PeriphClkInit.I2c46ClockSelection = RCC_I2C46CLKSOURCE_HSI; + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_I2C46; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + } + + /* Enable GPIO clock */ + __HAL_RCC_GPIOZ_CLK_ENABLE(); + + /* Configure I2C Tx/RX as alternate function */ + GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF6_I2C4; + HAL_GPIO_Init(GPIOZ, &GPIO_InitStruct); + + /* Enable I2C clock */ + __HAL_RCC_I2C4_CLK_ENABLE(); + /* Force the I2C peripheral clock reset */ + __HAL_RCC_I2C4_FORCE_RESET(); + /* Release the I2C peripheral clock reset */ + __HAL_RCC_I2C4_RELEASE_RESET(); + + HAL_NVIC_SetPriority(I2C4_ER_IRQn, 0, 1); + HAL_NVIC_EnableIRQ(I2C4_ER_IRQn); + HAL_NVIC_SetPriority(I2C4_EV_IRQn, 0, 2); + HAL_NVIC_EnableIRQ(I2C4_EV_IRQn); + } +} + +/** + * @brief DeInitializes I2C MSP. + * @param hI2c : I2C handler + * @retval None + */ +void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hI2c) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + if(hI2c->Instance == I2C4) + { + /* Configure I2C Tx, Rx as alternate function */ + GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5; + HAL_GPIO_DeInit(GPIOZ, GPIO_InitStruct.Pin); + + /* Disable I2C clock */ + __HAL_RCC_I2C4_CLK_DISABLE(); + + /* Disable NVIC for I2C */ + HAL_NVIC_DisableIRQ(I2C4_ER_IRQn); + HAL_NVIC_DisableIRQ(I2C4_EV_IRQn); + } +} + +/** + * @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 */ +} +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Src/stm32mp1xx_it.c b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Src/stm32mp1xx_it.c new file mode 100644 index 0000000000..18c094f48d --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/CM4/Src/stm32mp1xx_it.c @@ -0,0 +1,321 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32mp1xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2020 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 "stm32mp1xx_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 --------------------------------------------------------*/ +extern IPCC_HandleTypeDef hipcc; +extern LPTIM_HandleTypeDef hlptim1; +extern LPTIM_HandleTypeDef hlptim2; +extern LPTIM_HandleTypeDef hlptim3; +extern LPTIM_HandleTypeDef hlptim4; +extern LPTIM_HandleTypeDef hlptim5; +extern WWDG_HandleTypeDef hwwdg1; +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex-M4 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 Pre-fetch 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 */ +} + +/******************************************************************************/ +/* STM32MP1xx 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_stm32mp1xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles Window watchdog interrupt. + */ +void WWDG1_IRQHandler(void) +{ + /* USER CODE BEGIN WWDG1_IRQn 0 */ + + /* USER CODE END WWDG1_IRQn 0 */ + HAL_WWDG_IRQHandler(&hwwdg1); + /* USER CODE BEGIN WWDG1_IRQn 1 */ + + /* USER CODE END WWDG1_IRQn 1 */ +} + +/** + * @brief This function handles LPTIM1 global interrupt. + */ +void LPTIM1_IRQHandler(void) +{ + /* USER CODE BEGIN LPTIM1_IRQn 0 */ + + /* USER CODE END LPTIM1_IRQn 0 */ + HAL_LPTIM_IRQHandler(&hlptim1); + /* USER CODE BEGIN LPTIM1_IRQn 1 */ + + /* USER CODE END LPTIM1_IRQn 1 */ +} + +/** + * @brief This function handles IPCC RX1 occupied interrupt. + */ +void IPCC_RX1_IRQHandler(void) +{ + /* USER CODE BEGIN IPCC_RX1_IRQn 0 */ + + /* USER CODE END IPCC_RX1_IRQn 0 */ + HAL_IPCC_RX_IRQHandler(&hipcc); + /* USER CODE BEGIN IPCC_RX1_IRQn 1 */ + + /* USER CODE END IPCC_RX1_IRQn 1 */ +} + +/** + * @brief This function handles IPCC TX1 free interrupt. + */ +void IPCC_TX1_IRQHandler(void) +{ + /* USER CODE BEGIN IPCC_TX1_IRQn 0 */ + + /* USER CODE END IPCC_TX1_IRQn 0 */ + HAL_IPCC_TX_IRQHandler(&hipcc); + /* USER CODE BEGIN IPCC_TX1_IRQn 1 */ + + /* USER CODE END IPCC_TX1_IRQn 1 */ +} + +/** + * @brief This function handles LPTIM2 global interrupt. + */ +void LPTIM2_IRQHandler(void) +{ + /* USER CODE BEGIN LPTIM2_IRQn 0 */ + + /* USER CODE END LPTIM2_IRQn 0 */ + HAL_LPTIM_IRQHandler(&hlptim2); + /* USER CODE BEGIN LPTIM2_IRQn 1 */ + + /* USER CODE END LPTIM2_IRQn 1 */ +} + +/** + * @brief This function handles LPTIM3 global interrupt. + */ +void LPTIM3_IRQHandler(void) +{ + /* USER CODE BEGIN LPTIM3_IRQn 0 */ + + /* USER CODE END LPTIM3_IRQn 0 */ + HAL_LPTIM_IRQHandler(&hlptim3); + /* USER CODE BEGIN LPTIM3_IRQn 1 */ + + /* USER CODE END LPTIM3_IRQn 1 */ +} + +/** + * @brief This function handles LPTIM4 global interrupt. + */ +void LPTIM4_IRQHandler(void) +{ + /* USER CODE BEGIN LPTIM4_IRQn 0 */ + + /* USER CODE END LPTIM4_IRQn 0 */ + HAL_LPTIM_IRQHandler(&hlptim4); + /* USER CODE BEGIN LPTIM4_IRQn 1 */ + + /* USER CODE END LPTIM4_IRQn 1 */ +} + +/** + * @brief This function handles LPTIM5 global interrupt. + */ +void LPTIM5_IRQHandler(void) +{ + /* USER CODE BEGIN LPTIM5_IRQn 0 */ + + /* USER CODE END LPTIM5_IRQn 0 */ + HAL_LPTIM_IRQHandler(&hlptim5); + /* USER CODE BEGIN LPTIM5_IRQn 1 */ + + /* USER CODE END LPTIM5_IRQn 1 */ +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/Common/System/system_stm32mp1xx.c b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/Common/System/system_stm32mp1xx.c new file mode 100644 index 0000000000..6e606791bf --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/Common/System/system_stm32mp1xx.c @@ -0,0 +1,290 @@ +/** + ****************************************************************************** + * @file system_stm32mp1xx.c + * @author MCD Application Team + * @brief CMSIS Cortex Device Peripheral Access Layer System Source File. + * + * This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32mp1xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock frequency, 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. + * + * + ****************************************************************************** + * + * @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 + * + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32mp1xx_system + * @{ + */ + +/** @addtogroup STM32MP1xx_System_Private_Includes + * @{ + */ + +#include "stm32mp1xx_hal.h" + +/** + * @} + */ + +/** @addtogroup STM32MP1xx_System_Private_TypesDefinitions + * @{ + */ + + +/** + * @} + */ + +/** @addtogroup STM32MP1xx_System_Private_Defines + * @{ + */ + + +/************************* Miscellaneous Configuration ************************/ +/*!< Uncomment the following line if you need to use external SRAM mounted + on EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x400. */ +/******************************************************************************/ + +/** + * @} + */ + +/** @addtogroup STM32MP1xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32MP1xx_System_Private_Variables + * @{ + */ + /* This variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) each time HAL_RCC_ClockConfig() is called to configure the system clock + frequency + Note: If you use this function to configure the system clock; + then there is no need to call the first functions listed above, + since SystemCoreClock variable is updated automatically. + */ + uint32_t SystemCoreClock = HSI_VALUE; +/** + * @} + */ + +/** @addtogroup STM32MP1xx_System_Private_FunctionPrototypes + * @{ + */ + +#if defined (DATA_IN_ExtSRAM) + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32MP1xx_System_Private_Functions + * @{ + */ + + /** + * @brief Setup the microcontroller system + * Initialize the FPU setting, vector table location and External memory + * configuration. + * @param None + * @retval None + */ +void SystemInit (void) +{ + /* FPU settings ------------------------------------------------------------*/ +#if defined (CORE_CM4) + #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ + #endif + + /* Configure the Vector Table location add offset address ------------------*/ +#if defined (VECT_TAB_SRAM) + SCB->VTOR = MCU_AHB_SRAM | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#endif + /* Disable all interrupts and events */ + CLEAR_REG(EXTI_C2->IMR1); + CLEAR_REG(EXTI_C2->IMR2); + CLEAR_REG(EXTI_C2->IMR3); + CLEAR_REG(EXTI_C2->EMR1); + CLEAR_REG(EXTI_C2->EMR2); + CLEAR_REG(EXTI_C2->EMR3); +#else +#error Please #define CORE_CM4 +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock frequency (Hz), + * it can be used by the user application to setup the SysTick timer or + * configure other parameters. + * + * @note Each time the core clock 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 CSI, SystemCoreClock will contain the + * CSI_VALUE(***) + * + * - If SYSCLK source is PLL3_P, SystemCoreClock will contain the + * HSI_VALUE(*) or the HSE_VALUE(*) or the CSI_VALUE(***) + * multiplied/divided by the PLL3 factors. + * + * (*) HSI_VALUE is a constant defined in stm32mp1xx_hal_conf.h file + * (default value 64 MHz) but the real value may vary depending + * on the variations in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32mp1xx_hal_conf.h file + * (default value 24 MHz), user has to ensure that HSE_VALUE is + * same as the real frequency of the crystal used. Otherwise, this + * function may have wrong result. + * + * (***) CSI_VALUE is a constant defined in stm32mp1xx_hal_conf.h file + * (default value 4 MHz)but the real value may vary depending + * on the variations in voltage and temperature. + * + * - 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 pllsource, pll3m, pll3fracen; + float fracn1, pll3vco; + + switch (RCC->MSSCKSELR & RCC_MSSCKSELR_MCUSSRC) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = (HSI_VALUE >> (RCC->HSICFGR & RCC_HSICFGR_HSIDIV)); + break; + + case 0x01: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + + case 0x02: /* CSI used as system clock source */ + SystemCoreClock = CSI_VALUE; + break; + + case 0x03: /* PLL3_P used as system clock source */ + pllsource = (RCC->RCK3SELR & RCC_RCK3SELR_PLL3SRC); + pll3m = ((RCC->PLL3CFGR1 & RCC_PLL3CFGR1_DIVM3) >> RCC_PLL3CFGR1_DIVM3_Pos) + 1U; + pll3fracen = (RCC->PLL3FRACR & RCC_PLL3FRACR_FRACLE) >> 16U; + fracn1 = (float)(pll3fracen * ((RCC->PLL3FRACR & RCC_PLL3FRACR_FRACV) >> 3U)); + pll3vco = (float)((float)((RCC->PLL3CFGR1 & RCC_PLL3CFGR1_DIVN) + 1U) + (fracn1 / (float) 0x1FFF)); + + if (pll3m != 0U) + { + switch (pllsource) + { + case 0x00: /* HSI used as PLL clock source */ + pll3vco *= (float)((HSI_VALUE >> (RCC->HSICFGR & RCC_HSICFGR_HSIDIV)) / pll3m); + break; + + case 0x01: /* HSE used as PLL clock source */ + pll3vco *= (float)(HSE_VALUE / pll3m); + break; + + case 0x02: /* CSI used as PLL clock source */ + pll3vco *= (float)(CSI_VALUE / pll3m); + break; + + case 0x03: /* No clock source for PLL */ + pll3vco = 0; + break; + } + SystemCoreClock = (uint32_t)(pll3vco/ ((float)((RCC->PLL3CFGR2 & RCC_PLL3CFGR2_DIVP) + 1U))); + } + else + { + SystemCoreClock = 0U; + } + break; + } + + /* Compute mcu_ck */ + SystemCoreClock = SystemCoreClock >> (RCC->MCUDIVR & RCC_MCUDIVR_MCUDIV); +} + + +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32mp15xx.s before jump to main. + * This function configures the external SRAM mounted on Eval boards + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + +} +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/STM32MP157-DK1.ioc b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/STM32MP157-DK1.ioc new file mode 100644 index 0000000000..2a094a9c12 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/board/CubeMX_Config/STM32MP157-DK1.ioc @@ -0,0 +1,857 @@ +#MicroXplorer Configuration settings - do not modify +ADC2.Channel-2\#ChannelRegularConversion=ADC_CHANNEL_6 +ADC2.ClockPrescaler=ADC_CLOCK_ASYNC_DIV2 +ADC2.IPParameters=Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,OffsetNumber-2\#ChannelRegularConversion,NbrOfConversionFlag,Resolution,ClockPrescaler +ADC2.NbrOfConversionFlag=1 +ADC2.OffsetNumber-2\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC2.Rank-2\#ChannelRegularConversion=1 +ADC2.Resolution=ADC_RESOLUTION_16B +ADC2.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +BootLoader.IPs=RCC,DDR +BootROM.IPs=RCC +CortexA7NS.IPs=DDR\:I,RCC\:I,RTC\:I,BSEC,ETZPC,GIC,TAMP\:I,DMA\:I,PWR,SPI2\:I,I2S2\:I,IPCC\:I,TIM3\:I,VREFBUF\:I,SAI4\:I,HSEM\:I,RNG1,DMA1\:I,MDMA_A7NS\:I +CortexA7S.IPs=BSEC\:I,ETZPC\:I,GIC\:I,RCC,PWR\:I,RNG1\:I,RTC,DDR,HSEM,TAMP,MDMA_A7S\:I +CortexM4.IPs=IPCC,HSEM,RCC,NVIC\:I,ETZPC,FREERTOS\:I,DMA,PWR,SYS\:I,TIM4\:I,TIM14\:I,TIM16\:I,TIM17\:I,SPI5\:I,UART4\:I,UART5\:I,USART2\:I,ADC1\:I,ADC2\:I,USART3\:I,DAC1\:I,WWDG1\:I,LPTIM1\:I,LPTIM2\:I,LPTIM3\:I,LPTIM4\:I,LPTIM5\:I,DMA2\:I +DDR.ADDRMAP1=0x00070707 +DDR.ADDRMAP3=0x1F000000 +DDR.ADDRMAP5=0x06060606 +DDR.ADDRMAP6=0x0F060606 +DDR.DDR_Frequency=533.0 +DDR.DFITMG0=0x02060105 +DDR.IPParameters=DDR_Frequency,RL,addrmap_col_b9,addrmap_col_b10,addrmap_col_b11,addrmap_bank_b0,addrmap_bank_b1,addrmap_bank_b2,addrmap_row_b0,addrmap_row_b1,addrmap_row_b2_10,addrmap_row_b11,addrmap_row_b12,addrmap_row_b13,addrmap_row_b14,addrmap_row_b15,MSTR,DFITMG0,SCHED,ADDRMAP1,ADDRMAP3,ADDRMAP5,ADDRMAP6 +DDR.MSTR=0x00041401 +DDR.RL=8 +DDR.SCHED=0x00000C01 +DDR.addrmap_bank_b0=7 +DDR.addrmap_bank_b1=7 +DDR.addrmap_bank_b2=7 +DDR.addrmap_col_b10=31 +DDR.addrmap_col_b11=31 +DDR.addrmap_col_b9=31 +DDR.addrmap_row_b0=6 +DDR.addrmap_row_b1=6 +DDR.addrmap_row_b11=6 +DDR.addrmap_row_b12=6 +DDR.addrmap_row_b13=6 +DDR.addrmap_row_b14=6 +DDR.addrmap_row_b15=15 +DDR.addrmap_row_b2_10=6 +DDR_A0.GPIOParameters=GPIO_Label +DDR_A0.GPIO_Label=DDR_A0 [MT41K256M16TW_A0] +DDR_A0.Locked=true +DDR_A0.Mode=DDR3 +DDR_A0.Signal=DDR_A0 +DDR_A1.GPIOParameters=GPIO_Label +DDR_A1.GPIO_Label=DDR_A1 [MT41K256M16TW_A1] +DDR_A1.Locked=true +DDR_A1.Mode=DDR3 +DDR_A1.Signal=DDR_A1 +DDR_A10.GPIOParameters=GPIO_Label +DDR_A10.GPIO_Label=DDR_A10 [MT41K256M16TW_A10] +DDR_A10.Locked=true +DDR_A10.Mode=DDR3 +DDR_A10.Signal=DDR_A10 +DDR_A11.GPIOParameters=GPIO_Label +DDR_A11.GPIO_Label=DDR_A11 [MT41K256M16TW_A11] +DDR_A11.Locked=true +DDR_A11.Mode=DDR3 +DDR_A11.Signal=DDR_A11 +DDR_A12.GPIOParameters=GPIO_Label +DDR_A12.GPIO_Label=DDR_A12 [MT41K256M16TW_A12] +DDR_A12.Locked=true +DDR_A12.Mode=4Gb_16bits +DDR_A12.Signal=DDR_A12 +DDR_A13.GPIOParameters=GPIO_Label +DDR_A13.GPIO_Label=DDR_A13 [MT41K256M16TW_A13] +DDR_A13.Locked=true +DDR_A13.Mode=4Gb_16bits +DDR_A13.Signal=DDR_A13 +DDR_A14.GPIOParameters=GPIO_Label +DDR_A14.GPIO_Label=DDR_A14 [MT41K256M16TW_A14] +DDR_A14.Locked=true +DDR_A14.Mode=4Gb_16bits +DDR_A14.Signal=DDR_A14 +DDR_A2.GPIOParameters=GPIO_Label +DDR_A2.GPIO_Label=DDR_A2 [MT41K256M16TW_A2] +DDR_A2.Locked=true +DDR_A2.Mode=DDR3 +DDR_A2.Signal=DDR_A2 +DDR_A3.GPIOParameters=GPIO_Label +DDR_A3.GPIO_Label=DDR_A3 [MT41K256M16TW_A3] +DDR_A3.Locked=true +DDR_A3.Mode=DDR3 +DDR_A3.Signal=DDR_A3 +DDR_A4.GPIOParameters=GPIO_Label +DDR_A4.GPIO_Label=DDR_A4 [MT41K256M16TW_A4] +DDR_A4.Locked=true +DDR_A4.Mode=DDR3 +DDR_A4.Signal=DDR_A4 +DDR_A5.GPIOParameters=GPIO_Label +DDR_A5.GPIO_Label=DDR_A5 [MT41K256M16TW_A5] +DDR_A5.Locked=true +DDR_A5.Mode=DDR3 +DDR_A5.Signal=DDR_A5 +DDR_A6.GPIOParameters=GPIO_Label +DDR_A6.GPIO_Label=DDR_A6 [MT41K256M16TW_A6] +DDR_A6.Locked=true +DDR_A6.Mode=DDR3 +DDR_A6.Signal=DDR_A6 +DDR_A7.GPIOParameters=GPIO_Label +DDR_A7.GPIO_Label=DDR_A7 [MT41K256M16TW_A7] +DDR_A7.Locked=true +DDR_A7.Mode=DDR3 +DDR_A7.Signal=DDR_A7 +DDR_A8.GPIOParameters=GPIO_Label +DDR_A8.GPIO_Label=DDR_A8 [MT41K256M16TW_A8] +DDR_A8.Locked=true +DDR_A8.Mode=DDR3 +DDR_A8.Signal=DDR_A8 +DDR_A9.GPIOParameters=GPIO_Label +DDR_A9.GPIO_Label=DDR_A9 [MT41K256M16TW_A9] +DDR_A9.Locked=true +DDR_A9.Mode=DDR3 +DDR_A9.Signal=DDR_A9 +DDR_ATO.GPIOParameters=GPIO_Label +DDR_ATO.GPIO_Label=DDR_ATO +DDR_ATO.Locked=true +DDR_ATO.Mode=DDR3 +DDR_ATO.Signal=DDR_ATO +DDR_BA0.GPIOParameters=GPIO_Label +DDR_BA0.GPIO_Label=DDR_BA0 [MT41K256M16TW_BA0] +DDR_BA0.Locked=true +DDR_BA0.Mode=DDR3 +DDR_BA0.Signal=DDR_BA0 +DDR_BA1.GPIOParameters=GPIO_Label +DDR_BA1.GPIO_Label=DDR_BA1 [MT41K256M16TW_BA1] +DDR_BA1.Locked=true +DDR_BA1.Mode=DDR3 +DDR_BA1.Signal=DDR_BA1 +DDR_BA2.GPIOParameters=GPIO_Label +DDR_BA2.GPIO_Label=DDR_BA2 [MT41K256M16TW_BA2] +DDR_BA2.Locked=true +DDR_BA2.Mode=DDR3 +DDR_BA2.Signal=DDR_BA2 +DDR_CASN.GPIOParameters=GPIO_Label +DDR_CASN.GPIO_Label=DDR_CASN [MT41K256M16TW_CAS\#] +DDR_CASN.Locked=true +DDR_CASN.Mode=DDR3 +DDR_CASN.Signal=DDR_CASN +DDR_CKE.GPIOParameters=GPIO_Label +DDR_CKE.GPIO_Label=DDR_CKE [MT41K256M16TW_CKE] +DDR_CKE.Locked=true +DDR_CKE.Mode=DDR3 +DDR_CKE.Signal=DDR_CKE +DDR_CLKN.GPIOParameters=GPIO_Label +DDR_CLKN.GPIO_Label=DDR_CLK_N [MT41K256M16TW_CK\#] +DDR_CLKN.Locked=true +DDR_CLKN.Mode=DDR3 +DDR_CLKN.Signal=DDR_CLKN +DDR_CLKP.GPIOParameters=GPIO_Label +DDR_CLKP.GPIO_Label=DDR_CLK_P [MT41K256M16TW_CK] +DDR_CLKP.Locked=true +DDR_CLKP.Mode=DDR3 +DDR_CLKP.Signal=DDR_CLKP +DDR_CSN.GPIOParameters=GPIO_Label +DDR_CSN.GPIO_Label=DDR_CSN [MT41K256M16TW_CS\#] +DDR_CSN.Locked=true +DDR_CSN.Mode=DDR3 +DDR_CSN.Signal=DDR_CSN +DDR_DQ0.GPIOParameters=GPIO_Label +DDR_DQ0.GPIO_Label=DDR_DQ0 [MT41K256M16TW_DQU5] +DDR_DQ0.Locked=true +DDR_DQ0.Mode=DDR3 +DDR_DQ0.Signal=DDR_DQ0 +DDR_DQ1.GPIOParameters=GPIO_Label +DDR_DQ1.GPIO_Label=DDR_DQ1 [MT41K256M16TW_DQU1] +DDR_DQ1.Locked=true +DDR_DQ1.Mode=DDR3 +DDR_DQ1.Signal=DDR_DQ1 +DDR_DQ10.GPIOParameters=GPIO_Label +DDR_DQ10.GPIO_Label=DDR_DQ10 [MT41K256M16TW_DQL6] +DDR_DQ10.Locked=true +DDR_DQ10.Mode=DDR3 +DDR_DQ10.Signal=DDR_DQ10 +DDR_DQ11.GPIOParameters=GPIO_Label +DDR_DQ11.GPIO_Label=DDR_DQ11 [MT41K256M16TW_DQL1] +DDR_DQ11.Locked=true +DDR_DQ11.Mode=DDR3 +DDR_DQ11.Signal=DDR_DQ11 +DDR_DQ12.GPIOParameters=GPIO_Label +DDR_DQ12.GPIO_Label=DDR_DQ12 [MT41K256M16TW_DQL5] +DDR_DQ12.Locked=true +DDR_DQ12.Mode=DDR3 +DDR_DQ12.Signal=DDR_DQ12 +DDR_DQ13.GPIOParameters=GPIO_Label +DDR_DQ13.GPIO_Label=DDR_DQ13 [MT41K256M16TW_DQL4] +DDR_DQ13.Locked=true +DDR_DQ13.Mode=DDR3 +DDR_DQ13.Signal=DDR_DQ13 +DDR_DQ14.GPIOParameters=GPIO_Label +DDR_DQ14.GPIO_Label=DDR_DQ14 [MT41K256M16TW_DQL7] +DDR_DQ14.Locked=true +DDR_DQ14.Mode=DDR3 +DDR_DQ14.Signal=DDR_DQ14 +DDR_DQ15.GPIOParameters=GPIO_Label +DDR_DQ15.GPIO_Label=DDR_DQ15 [MT41K256M16TW_DQL3] +DDR_DQ15.Locked=true +DDR_DQ15.Mode=DDR3 +DDR_DQ15.Signal=DDR_DQ15 +DDR_DQ2.GPIOParameters=GPIO_Label +DDR_DQ2.GPIO_Label=DDR_DQ2 [MT41K256M16TW_DQU4] +DDR_DQ2.Locked=true +DDR_DQ2.Mode=DDR3 +DDR_DQ2.Signal=DDR_DQ2 +DDR_DQ3.GPIOParameters=GPIO_Label +DDR_DQ3.GPIO_Label=DDR_DQ3 [MT41K256M16TW_DQU3] +DDR_DQ3.Locked=true +DDR_DQ3.Mode=DDR3 +DDR_DQ3.Signal=DDR_DQ3 +DDR_DQ4.GPIOParameters=GPIO_Label +DDR_DQ4.GPIO_Label=DDR_DQ4 [MT41K256M16TW_DQU6] +DDR_DQ4.Locked=true +DDR_DQ4.Mode=DDR3 +DDR_DQ4.Signal=DDR_DQ4 +DDR_DQ5.GPIOParameters=GPIO_Label +DDR_DQ5.GPIO_Label=DDR_DQ5 [MT41K256M16TW_DQU2] +DDR_DQ5.Locked=true +DDR_DQ5.Mode=DDR3 +DDR_DQ5.Signal=DDR_DQ5 +DDR_DQ6.GPIOParameters=GPIO_Label +DDR_DQ6.GPIO_Label=DDR_DQ6 [MT41K256M16TW_DQU0] +DDR_DQ6.Locked=true +DDR_DQ6.Mode=DDR3 +DDR_DQ6.Signal=DDR_DQ6 +DDR_DQ7.GPIOParameters=GPIO_Label +DDR_DQ7.GPIO_Label=DDR_DQ7 [MT41K256M16TW_DQU7] +DDR_DQ7.Locked=true +DDR_DQ7.Mode=DDR3 +DDR_DQ7.Signal=DDR_DQ7 +DDR_DQ8.GPIOParameters=GPIO_Label +DDR_DQ8.GPIO_Label=DDR_DQ8 [MT41K256M16TW_DQL2] +DDR_DQ8.Locked=true +DDR_DQ8.Mode=DDR3 +DDR_DQ8.Signal=DDR_DQ8 +DDR_DQ9.GPIOParameters=GPIO_Label +DDR_DQ9.GPIO_Label=DDR_DQ9 [MT41K256M16TW_DQL0] +DDR_DQ9.Locked=true +DDR_DQ9.Mode=DDR3 +DDR_DQ9.Signal=DDR_DQ9 +DDR_DQM0.GPIOParameters=GPIO_Label +DDR_DQM0.GPIO_Label=DDR_DQM0 [MT41K256M16TW_DMU] +DDR_DQM0.Locked=true +DDR_DQM0.Mode=DDR3 +DDR_DQM0.Signal=DDR_DQM0 +DDR_DQM1.GPIOParameters=GPIO_Label +DDR_DQM1.GPIO_Label=DDR_DQM1 [MT41K256M16TW_DML] +DDR_DQM1.Locked=true +DDR_DQM1.Mode=DDR3 +DDR_DQM1.Signal=DDR_DQM1 +DDR_DQS0N.GPIOParameters=GPIO_Label +DDR_DQS0N.GPIO_Label=DDR_DQS0_N [MT41K256M16TW_DQSU\#] +DDR_DQS0N.Locked=true +DDR_DQS0N.Mode=DDR3 +DDR_DQS0N.Signal=DDR_DQS0N +DDR_DQS0P.GPIOParameters=GPIO_Label +DDR_DQS0P.GPIO_Label=DDR_DQS0_P [MT41K256M16TW_DQSU] +DDR_DQS0P.Locked=true +DDR_DQS0P.Mode=DDR3 +DDR_DQS0P.Signal=DDR_DQS0P +DDR_DQS1N.GPIOParameters=GPIO_Label +DDR_DQS1N.GPIO_Label=DDR_DQS1_N [MT41K256M16TW_DQSL\#] +DDR_DQS1N.Locked=true +DDR_DQS1N.Mode=DDR3 +DDR_DQS1N.Signal=DDR_DQS1N +DDR_DQS1P.GPIOParameters=GPIO_Label +DDR_DQS1P.GPIO_Label=DDR_DQS1_P [MT41K256M16TW_DQSL] +DDR_DQS1P.Locked=true +DDR_DQS1P.Mode=DDR3 +DDR_DQS1P.Signal=DDR_DQS1P +DDR_DTO0.GPIOParameters=GPIO_Label +DDR_DTO0.GPIO_Label=DDR_DTO0 +DDR_DTO0.Locked=true +DDR_DTO0.Mode=DDR3 +DDR_DTO0.Signal=DDR_DTO0 +DDR_DTO1.GPIOParameters=GPIO_Label +DDR_DTO1.GPIO_Label=DDR_DTO1 +DDR_DTO1.Locked=true +DDR_DTO1.Mode=DDR3 +DDR_DTO1.Signal=DDR_DTO1 +DDR_ODT.GPIOParameters=GPIO_Label +DDR_ODT.GPIO_Label=DDR_ODT [MT41K256M16TW_ODT] +DDR_ODT.Locked=true +DDR_ODT.Mode=DDR3 +DDR_ODT.Signal=DDR_ODT +DDR_RASN.GPIOParameters=GPIO_Label +DDR_RASN.GPIO_Label=DDR_RASN [MT41K256M16TW_RAS\#] +DDR_RASN.Locked=true +DDR_RASN.Mode=DDR3 +DDR_RASN.Signal=DDR_RASN +DDR_RESETN.GPIOParameters=GPIO_Label +DDR_RESETN.GPIO_Label=DDR_RESETN [MT41K256M16TW_RESET\#] +DDR_RESETN.Locked=true +DDR_RESETN.Mode=DDR3 +DDR_RESETN.Signal=DDR_RESETN +DDR_VREF.GPIOParameters=GPIO_Label +DDR_VREF.GPIO_Label=VREF_DDR +DDR_VREF.Locked=true +DDR_VREF.Mode=DDR3 +DDR_VREF.Signal=DDR_VREF +DDR_WEN.GPIOParameters=GPIO_Label +DDR_WEN.GPIO_Label=DDR_WEN_P [MT41K256M16TW_WE\#] +DDR_WEN.Locked=true +DDR_WEN.Mode=DDR3 +DDR_WEN.Signal=DDR_WEN +DDR_ZQ.GPIOParameters=GPIO_Label +DDR_ZQ.GPIO_Label=DDR_ZQ +DDR_ZQ.Locked=true +DDR_ZQ.Mode=DDR3 +DDR_ZQ.Signal=DDR_ZQ +File.Version=6 +GIC.IPCC_RX0_IRQn=true\:false\:High level +GIC.IPCC_TX0_IRQn=true\:false\:High level +GIC.PMUIRQ0_IRQn=true\:false\:High level +GIC.PMUIRQ1_IRQn=true\:false\:High level +GIC.RCC_IRQn=true\:false\:High level +GIC.RTC_WKUP_ALARM_IRQn=true\:false\:High level +GIC.WAKEUP_PIN_IRQn=true\:false\:High level +GPIO.groupedBy=Expand Peripherals +KeepUserPlacement=false +Mcu.Context0=BootROM +Mcu.Context1=BootLoader +Mcu.Context2=CortexA7S +Mcu.Context3=CortexA7NS +Mcu.Context4=CortexM4 +Mcu.ContextNb=5 +Mcu.Family=STM32MP1 +Mcu.IP0=ADC2 +Mcu.IP1=BSEC +Mcu.IP10=LPTIM4 +Mcu.IP11=LPTIM5 +Mcu.IP12=NVIC +Mcu.IP13=PWR +Mcu.IP14=RCC +Mcu.IP15=RTC +Mcu.IP16=SPI5 +Mcu.IP17=SYS +Mcu.IP18=TAMP +Mcu.IP19=TIM4 +Mcu.IP2=DAC1 +Mcu.IP20=TIM14 +Mcu.IP21=TIM16 +Mcu.IP22=TIM17 +Mcu.IP23=UART4 +Mcu.IP24=USART3 +Mcu.IP25=VREFBUF +Mcu.IP26=WWDG1 +Mcu.IP3=DDR +Mcu.IP4=GIC +Mcu.IP5=HSEM +Mcu.IP6=IPCC +Mcu.IP7=LPTIM1 +Mcu.IP8=LPTIM2 +Mcu.IP9=LPTIM3 +Mcu.IPNb=27 +Mcu.Name=STM32MP157AACx +Mcu.Package=TFBGA361 +Mcu.Pin0=PH5 +Mcu.Pin1=PF2 +Mcu.Pin10=DDR_DQ3 +Mcu.Pin100=VP_TAMP_VS_TAMP_Activate +Mcu.Pin101=VP_TIM4_VS_ClockSourceINT +Mcu.Pin102=VP_TIM14_VS_ClockSourceINT +Mcu.Pin103=VP_TIM16_VS_ClockSourceINT +Mcu.Pin104=VP_TIM17_VS_ClockSourceINT +Mcu.Pin105=VP_VREFBUF_VS_VREFBUF +Mcu.Pin106=VP_WWDG1_VS_WWDG +Mcu.Pin107=VP_DMA_VS_DMA1_A7NS +Mcu.Pin108=VP_DMA_VS_DMA2_M4 +Mcu.Pin109=VP_MDMA_VS_MDMA_A7NS_8 +Mcu.Pin11=DDR_DQ0 +Mcu.Pin12=DDR_A13 +Mcu.Pin13=DDR_DQ1 +Mcu.Pin14=DDR_A9 +Mcu.Pin15=DDR_DQ7 +Mcu.Pin16=DDR_DQS0P +Mcu.Pin17=DDR_DQS0N +Mcu.Pin18=PZ6 +Mcu.Pin19=DDR_A5 +Mcu.Pin2=PH4 +Mcu.Pin20=DDR_DQ2 +Mcu.Pin21=DDR_DQ6 +Mcu.Pin22=DDR_DQM0 +Mcu.Pin23=PZ7 +Mcu.Pin24=DDR_A2 +Mcu.Pin25=DDR_DQ4 +Mcu.Pin26=DDR_DQ5 +Mcu.Pin27=PC13 +Mcu.Pin28=DDR_DTO0 +Mcu.Pin29=DDR_A3 +Mcu.Pin3=PD0 +Mcu.Pin30=DDR_ZQ +Mcu.Pin31=PC15-OSC32_OUT +Mcu.Pin32=PC14-OSC32_IN +Mcu.Pin33=DDR_A0 +Mcu.Pin34=DDR_DTO1 +Mcu.Pin35=DDR_ODT +Mcu.Pin36=DDR_BA0 +Mcu.Pin37=DDR_WEN +Mcu.Pin38=DDR_BA2 +Mcu.Pin39=DDR_CSN +Mcu.Pin4=PC6 +Mcu.Pin40=PA13 +Mcu.Pin41=DDR_CASN +Mcu.Pin42=DDR_RASN +Mcu.Pin43=DDR_CLKP +Mcu.Pin44=DDR_CLKN +Mcu.Pin45=PH0-OSC_IN +Mcu.Pin46=PI11 +Mcu.Pin47=DDR_A1 +Mcu.Pin48=DDR_A12 +Mcu.Pin49=DDR_A11 +Mcu.Pin5=PA15 +Mcu.Pin50=DDR_A14 +Mcu.Pin51=DDR_A10 +Mcu.Pin52=PA14 +Mcu.Pin53=DDR_CKE +Mcu.Pin54=DDR_DQ8 +Mcu.Pin55=DDR_DQ10 +Mcu.Pin56=DDR_DQ13 +Mcu.Pin57=DDR_BA1 +Mcu.Pin58=DDR_DQ9 +Mcu.Pin59=DDR_DQS1P +Mcu.Pin6=PB7 +Mcu.Pin60=DDR_DQS1N +Mcu.Pin61=PA4 +Mcu.Pin62=DDR_A4 +Mcu.Pin63=DDR_DQM1 +Mcu.Pin64=PG1 +Mcu.Pin65=PH7 +Mcu.Pin66=DDR_A6 +Mcu.Pin67=DDR_DQ11 +Mcu.Pin68=DDR_DQ14 +Mcu.Pin69=DDR_DQ12 +Mcu.Pin7=PE4 +Mcu.Pin70=PB10 +Mcu.Pin71=PG11 +Mcu.Pin72=PG9 +Mcu.Pin73=PB2 +Mcu.Pin74=PA10 +Mcu.Pin75=DDR_ATO +Mcu.Pin76=DDR_A8 +Mcu.Pin77=DDR_DQ15 +Mcu.Pin78=PF9 +Mcu.Pin79=PD13 +Mcu.Pin8=DDR_RESETN +Mcu.Pin80=PA0 +Mcu.Pin81=PF7 +Mcu.Pin82=PF14 +Mcu.Pin83=PB12 +Mcu.Pin84=PA6 +Mcu.Pin85=PD11 +Mcu.Pin86=DDR_VREF +Mcu.Pin87=VP_BSEC_VS_BSEC +Mcu.Pin88=VP_DDR_DDR3 +Mcu.Pin89=VP_DDR_DDR_16_bits +Mcu.Pin9=DDR_A7 +Mcu.Pin90=VP_DDR_DDR3_16_4Gb +Mcu.Pin91=VP_HSEM_VS_HSEM +Mcu.Pin92=VP_IPCC_VS_IPCC +Mcu.Pin93=VP_LPTIM1_VS_LPTIM_counterModeInternalClock +Mcu.Pin94=VP_LPTIM2_VS_LPTIM_counterModeInternalClock +Mcu.Pin95=VP_LPTIM3_VS_LPTIM_counterModeInternalClock +Mcu.Pin96=VP_LPTIM4_VS_LPTIM_counterModeInternalClock +Mcu.Pin97=VP_LPTIM5_VS_LPTIM_counterModeInternalClock +Mcu.Pin98=VP_RTC_VS_RTC_Activate +Mcu.Pin99=VP_SYS_VS_Systick +Mcu.PinsNb=110 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32MP157AACx +MxCube.Version=5.6.1 +MxDb.Version=DB.5.0.60 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.IPCC_RX1_IRQn=true\:0\:0\:false\:false\:true\:true\:true +NVIC.IPCC_TX1_IRQn=true\:0\:0\:false\:false\:true\:true\:true +NVIC.LPTIM1_IRQn=true\:0\:0\:false\:false\:true\:true\:true +NVIC.LPTIM2_IRQn=true\:0\:0\:false\:false\:true\:true\:true +NVIC.LPTIM3_IRQn=true\:0\:0\:false\:false\:true\:true\:true +NVIC.LPTIM4_IRQn=true\:0\:0\:false\:false\:true\:true\:true +NVIC.LPTIM5_IRQn=true\:0\:0\:false\:false\:true\:true\:true +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 +NVIC.WWDG1_IRQn=true\:0\:0\:false\:false\:true\:true\:true +PA0.Locked=true +PA0.Mode=WakeUp1 +PA0.Signal=PWR_WKUP1 +PA10.GPIOParameters=GPIO_Label +PA10.GPIO_Label=HDMI_NRST [SiI9022ACNU_RESET\#] +PA10.Locked=true +PA10.Signal=GPIO_Output +PA13.GPIOParameters=GPIO_Label +PA13.GPIO_Label=PA13 [LD6_RED] +PA13.Locked=true +PA13.Signal=GPIO_Output +PA14.GPIOParameters=GPIO_Label +PA14.GPIO_Label=PA14 [SW-PUSH-TS-02H-Blue] +PA14.Locked=true +PA14.Signal=GPIO_Input +PA15.GPIOParameters=GPIO_Label +PA15.GPIO_Label=BL_CTRL [STLD40DPUR_EN] +PA15.Locked=true +PA15.Signal=GPIO_Output +PA4.Signal=COMP_DAC11_group +PA6.GPIOParameters=GPIO_Label +PA6.GPIO_Label=ETH_MDINT [RTL8211F_INT] +PA6.Locked=true +PA6.Signal=GPIO_Input +PB10.Locked=true +PB10.Mode=Asynchronous +PB10.Signal=USART3_TX +PB12.Locked=true +PB12.Mode=Asynchronous +PB12.Signal=USART3_RX +PB2.GPIOParameters=GPIO_Label +PB2.GPIO_Label=STLINK_TX [STM32F103CBT6_PA2] +PB2.Locked=true +PB2.Mode=Asynchronous +PB2.Signal=UART4_RX +PB7.GPIOParameters=GPIO_Label +PB7.GPIO_Label=uSD_DETECT [PJS008-2003-1] +PB7.Locked=true +PB7.Signal=GPIO_Input +PC13.GPIOParameters=GPIO_Label +PC13.GPIO_Label=PMIC_WAKEUP [STPMU1A_WAKEUP] +PC13.Locked=true +PC13.Signal=GPIO_Output +PC14-OSC32_IN.Locked=true +PC14-OSC32_IN.Mode=LSE-External-Oscillator +PC14-OSC32_IN.Signal=RCC_OSC32_IN +PC15-OSC32_OUT.Locked=true +PC15-OSC32_OUT.Mode=LSE-External-Oscillator +PC15-OSC32_OUT.Signal=RCC_OSC32_OUT +PC6.GPIOParameters=GPIO_Label +PC6.GPIO_Label=TE [FH26W-25S_TE] +PC6.Locked=true +PC6.Signal=GPIO_Output +PD0.GPIOParameters=GPIO_Label +PD0.GPIO_Label=WL_HOST_WAKE [LBEE5KL1DX_WL_HOST_WAKE] +PD0.Locked=true +PD0.Signal=GPIO_Input +PD11.GPIOParameters=GPIO_Label +PD11.GPIO_Label=LED_B [LD8_BLUE] +PD11.Locked=true +PD11.Signal=GPIO_Output +PD13.Signal=S_TIM4_CH2 +PE4.GPIOParameters=GPIO_Label +PE4.GPIO_Label=RSTN [FH26W-25S_RSTN] +PE4.Locked=true +PE4.Signal=GPIO_Output +PF14.Locked=true +PF14.Mode=IN6-Single-Ended +PF14.Signal=ADC2_INP6 +PF2.GPIOParameters=GPIO_Label +PF2.GPIO_Label=INT [FH26W-25S_INT] +PF2.Locked=true +PF2.Signal=GPIO_Input +PF7.Locked=true +PF7.Mode=TX_Only_Simplex_Unidirect_Master +PF7.Signal=SPI5_SCK +PF9.Mode=TX_Only_Simplex_Unidirect_Master +PF9.Signal=SPI5_MOSI +PG1.GPIOParameters=GPIO_Label +PG1.GPIO_Label=HDMI_INT [SiI9022ACNU_INT] +PG1.Locked=true +PG1.Signal=GPIO_Input +PG11.GPIOParameters=GPIO_Label +PG11.GPIO_Label=STLINK_RX [STM32F103CBT6_PA3] +PG11.Locked=true +PG11.Mode=Asynchronous +PG11.Signal=UART4_TX +PG9.GPIOParameters=GPIO_Label +PG9.GPIO_Label=AUDIO_RST [CS42L51-CNZ_RESET] +PG9.Locked=true +PG9.Signal=GPIO_Output +PH0-OSC_IN.Locked=true +PH0-OSC_IN.Mode=HSE-DIG-External-Clock-Source +PH0-OSC_IN.Signal=RCC_OSC_IN +PH4.GPIOParameters=GPIO_Label +PH4.GPIO_Label=WL_REG_ON [LBEE5KL1DX_WL_REG_ON] +PH4.Locked=true +PH4.Signal=GPIO_Output +PH5.GPIOParameters=GPIO_Label +PH5.GPIO_Label=BT_HOST_WAKE [LBEE5KL1DX_BT_HOST_WAKE] +PH5.Locked=true +PH5.Signal=GPIO_Input +PH7.GPIOParameters=GPIO_Label +PH7.GPIO_Label=LED_Y [LD7_ORANGE] +PH7.Locked=true +PH7.Signal=GPIO_Output +PI11.GPIOParameters=GPIO_Label +PI11.GPIO_Label=STUSB1600_IRQOUTn [STUSB1600_ALERT\#] +PI11.Locked=true +PI11.Signal=GPIO_Input +PZ6.GPIOParameters=GPIO_Label +PZ6.GPIO_Label=BT_REG_ON [LBEE5KL1DX_BT_REG_ON] +PZ6.Locked=true +PZ6.Signal=GPIO_Output +PZ7.GPIOParameters=GPIO_Label +PZ7.GPIO_Label=BT_DEV_WAKE [LBEE5KL1DX_BT_DEV_WAKE] +PZ7.Locked=true +PZ7.Signal=GPIO_Output +PinOutPanel.CurrentBGAView=Top +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=STM32MP157AACx +ProjectManager.DeviceTreeLocation=D\:\\3_work\\GitRepositories\\rt-thread\\bsp\\stm32\\stm32mp157a-st-discovery\\board\\CubeMX_Config\\STM32MP157-DK1\\CA7\\DeviceTree\\ +ProjectManager.FirmwarePackage=STM32Cube FW_MP1 V1.2.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=STM32MP157-DK1.ioc +ProjectManager.ProjectName=STM32MP157-DK1 +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=EWARM V8.32 +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_IPCC_Init-IPCC-false-HAL-true,4-MX_SPI5_Init-SPI5-false-HAL-true,5-MX_TIM4_Init-TIM4-false-HAL-true,6-MX_TIM14_Init-TIM14-false-HAL-true,7-MX_TIM16_Init-TIM16-false-HAL-true,8-MX_TIM17_Init-TIM17-false-HAL-true,9-MX_UART4_Init-UART4-false-HAL-true,10-MX_ADC2_Init-ADC2-false-HAL-true,11-MX_DAC1_Init-DAC1-false-HAL-true,12-MX_LPTIM1_Init-LPTIM1-false-HAL-true,13-MX_LPTIM2_Init-LPTIM2-false-HAL-true,14-MX_LPTIM3_Init-LPTIM3-false-HAL-true,15-MX_LPTIM4_Init-LPTIM4-false-HAL-true,16-MX_LPTIM5_Init-LPTIM5-false-HAL-true,17-MX_USART3_UART_Init-USART3-false-HAL-true,18-MX_WWDG1_Init-WWDG1-false-HAL-true,0-MX_PWR_Init-PWR-false-HAL-true +RCC.ADCCLockSelection=RCC_ADCCLKSOURCE_PER +RCC.ADCFreq_Value=24000000 +RCC.AHB1234Freq_Value=208877929.6875 +RCC.APB1DIV=RCC_APB1_DIV2 +RCC.APB1Freq_Value=104438964.84375 +RCC.APB2DIV=RCC_APB2_DIV2 +RCC.APB2Freq_Value=104438964.84375 +RCC.APB3DIV=RCC_APB3_DIV2 +RCC.APB3Freq_Value=104438964.84375 +RCC.APB4DIV=RCC_APB4_DIV2 +RCC.APB4Freq_Value=133250000 +RCC.APB5DIV=RCC_APB5_DIV4 +RCC.APB5DIVClockFreq_Value=66625000 +RCC.AXICLKFreq_VALUE=266500000 +RCC.AXICLKSource=RCC_AXISSOURCE_PLL2 +RCC.AXIDIVFreq_Value=266500000 +RCC.CECFreq_Value=32768 +RCC.CKPERCLKFreq_VALUE=24000000 +RCC.CKPERCLKSource=RCC_CKPERCLKSOURCE_HSE +RCC.CSI_VALUE=4000000 +RCC.CortexFreq_Value=208877929.6875 +RCC.DACCLKFreq_VALUE=32000 +RCC.DDRCFreq_Value=533000000 +RCC.DDRPERFMFreq_Value=533000000 +RCC.DDRPHYFreq_Value=533000000 +RCC.DFSDFAFreq_Value=74250000 +RCC.DFSDMFreq_Value=208877929.6875 +RCC.DIVM1=3 +RCC.DIVM2=3 +RCC.DIVM3=2 +RCC.DIVM4=4 +RCC.DIVN1=81 +RCC.DIVN2=66 +RCC.DIVN3=34 +RCC.DIVN4=99 +RCC.DIVP1Freq_Value=650000000 +RCC.DIVP2Freq_Value=266500000 +RCC.DIVP3Freq_Value=208877929.6875 +RCC.DIVP4=6 +RCC.DIVP4Freq_Value=99000000 +RCC.DIVQ1Freq_Value=325000000 +RCC.DIVQ2=1 +RCC.DIVQ2Freq_Value=533000000 +RCC.DIVQ3=17 +RCC.DIVQ3Freq_Value=24573874.08088235 +RCC.DIVQ4=8 +RCC.DIVQ4Freq_Value=74250000 +RCC.DIVR1Freq_Value=325000000 +RCC.DIVR2=1 +RCC.DIVR2Freq_Value=533000000 +RCC.DIVR3=37 +RCC.DIVR3Freq_Value=11290698.902027028 +RCC.DIVR4=8 +RCC.DIVR4Freq_Value=74250000 +RCC.DSIFreq_Value=60000000 +RCC.DSIPixelFreq_Value=74250000 +RCC.DSITXEscFreq_Value=15000000 +RCC.DSI_VALUE=60000000 +RCC.ETHFreq_Value=99000000 +RCC.FCLKFreq_Value=196000000 +RCC.FDCANFreq_Value=24000000 +RCC.FMCCLockSelection=RCC_FMCCLKSOURCE_ACLK +RCC.FMCFreq_Value=266500000 +RCC.FamilyName=M +RCC.HSE_VALUE=24000000 +RCC.HSIDivClkFreq_Value=64000000 +RCC.HSI_VALUE=64000000 +RCC.Hclk5DIVFreq_Value=266500000 +RCC.Hclk6DIVFreq_Value=266500000 +RCC.I2C12CLockSelection=RCC_I2C12CLKSOURCE_HSI +RCC.I2C12Freq_Value=64000000 +RCC.I2C35CLockSelection=RCC_I2C35CLKSOURCE_PCLK1 +RCC.I2C35Freq_Value=104438964.84375 +RCC.I2C46CLockSelection=RCC_I2C46CLKSOURCE_HSI +RCC.I2C46Freq_Value=64000000 +RCC.IPParameters=ADCCLockSelection,ADCFreq_Value,AHB1234Freq_Value,APB1DIV,APB1Freq_Value,APB2DIV,APB2Freq_Value,APB3DIV,APB3Freq_Value,APB4DIV,APB4Freq_Value,APB5DIV,APB5DIVClockFreq_Value,AXICLKFreq_VALUE,AXICLKSource,AXIDIVFreq_Value,CECFreq_Value,CKPERCLKFreq_VALUE,CKPERCLKSource,CSI_VALUE,CortexFreq_Value,DACCLKFreq_VALUE,DDRCFreq_Value,DDRPERFMFreq_Value,DDRPHYFreq_Value,DFSDFAFreq_Value,DFSDMFreq_Value,DIVM1,DIVM2,DIVM3,DIVM4,DIVN1,DIVN2,DIVN3,DIVN4,DIVP1Freq_Value,DIVP2Freq_Value,DIVP3Freq_Value,DIVP4,DIVP4Freq_Value,DIVQ1Freq_Value,DIVQ2,DIVQ2Freq_Value,DIVQ3,DIVQ3Freq_Value,DIVQ4,DIVQ4Freq_Value,DIVR1Freq_Value,DIVR2,DIVR2Freq_Value,DIVR3,DIVR3Freq_Value,DIVR4,DIVR4Freq_Value,DSIFreq_Value,DSIPixelFreq_Value,DSITXEscFreq_Value,DSI_VALUE,ETHFreq_Value,FCLKFreq_Value,FDCANFreq_Value,FMCCLockSelection,FMCFreq_Value,FamilyName,HSE_VALUE,HSIDivClkFreq_Value,HSI_VALUE,Hclk5DIVFreq_Value,Hclk6DIVFreq_Value,I2C12CLockSelection,I2C12Freq_Value,I2C35CLockSelection,I2C35Freq_Value,I2C46CLockSelection,I2C46Freq_Value,LPTIM1CLockSelection,LPTIM1Freq_Value,LPTIM23CLockSelection,LPTIM23Freq_Value,LPTIM45CLockSelection,LPTIM45Freq_Value,LSI_VALUE,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,MCUCLKFreq_VALUE,MCUCLKSource,MCUClockFreq_Value,MCUDIVCLKFreq_Value,MPUCLKFreq_VALUE,MPUCLKSource,PLL12Source,PLL1FRACV,PLL1UserDefinedConfig,PLL2FRACV,PLL3FRACV,PLL3Source,PLL4FRACV,PLL4PDSIFreq_Value,PLL4Source,PLLDSIFreq_Value,PLLDSIVCOFreq_Value,PUBLFreq_Value,QSPICLockSelection,QSPIFreq_Value,RCC_RTC_Clock_Source_FROM_HSE,RNG1CLockSelection,RNG1Freq_Value,RNG2Freq_Value,RTCClockSelection,RTCFreq_Value,SAI1Freq_Value,SAI2CLockSelection,SAI2Freq_Value,SAI3Freq_Value,SAI4Freq_Value,SDMMC12CLockSelection,SDMMC12Freq_Value,SDMMC3CLockSelection,SDMMC3Freq_Value,SPDIFRXFreq_Value,SPI1CLockSelection,SPI1Freq_Value,SPI23CLockSelection,SPI23Freq_Value,SPI45CLockSelection,SPI45Freq_Value,SPI6CLockSelection,SPI6Freq_Value,STGENCLockSelection,STGENFreq_Value,Tim1OutputFreq_Value,Tim2OutputFreq_Value,UART78CLockSelection,UART78Freq_Value,USART1CLockSelection,USART1Freq_Value,USART24CLockSelection,USART24Freq_Value,USART35CLockSelection,USART35Freq_Value,USART6CLockSelection,USART6Freq_Value,USBOCLKSource,USBOHSFreq_Value,USBPHYCLKSource,USBPHYFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCO4OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value,VCOInput4Freq_Value +RCC.LPTIM1CLockSelection=RCC_LPTIM1CLKSOURCE_PCLK1 +RCC.LPTIM1Freq_Value=104438964.84375 +RCC.LPTIM23CLockSelection=RCC_LPTIM23CLKSOURCE_PCLK3 +RCC.LPTIM23Freq_Value=104438964.84375 +RCC.LPTIM45CLockSelection=RCC_LPTIM45CLKSOURCE_PCLK3 +RCC.LPTIM45Freq_Value=104438964.84375 +RCC.LSI_VALUE=32000 +RCC.LTDCFreq_Value=74250000 +RCC.MCO1PinFreq_Value=64000000 +RCC.MCO2PinFreq_Value=650000000 +RCC.MCUCLKFreq_VALUE=208877929.6875 +RCC.MCUCLKSource=RCC_MCUSSOURCE_PLL3 +RCC.MCUClockFreq_Value=208877929.6875 +RCC.MCUDIVCLKFreq_Value=208877929.6875 +RCC.MPUCLKFreq_VALUE=650000000 +RCC.MPUCLKSource=RCC_MPUSOURCE_PLL1 +RCC.PLL12Source=RCC_PLL12SOURCE_HSE +RCC.PLL1FRACV=0x800 +RCC.PLL1UserDefinedConfig=false +RCC.PLL2FRACV=0x1400 +RCC.PLL3FRACV=6660 +RCC.PLL3Source=RCC_PLL3SOURCE_HSE +RCC.PLL4FRACV=0 +RCC.PLL4PDSIFreq_Value=99000000 +RCC.PLL4Source=RCC_PLL4SOURCE_HSE +RCC.PLLDSIFreq_Value=480000000 +RCC.PLLDSIVCOFreq_Value=960000000 +RCC.PUBLFreq_Value=533000000 +RCC.QSPICLockSelection=RCC_QSPICLKSOURCE_ACLK +RCC.QSPIFreq_Value=266500000 +RCC.RCC_RTC_Clock_Source_FROM_HSE=24 +RCC.RNG1CLockSelection=RCC_RNG1CLKSOURCE_LSI +RCC.RNG1Freq_Value=32000 +RCC.RNG2Freq_Value=4000000 +RCC.RTCClockSelection=RCC_RTCCLKSOURCE_LSE +RCC.RTCFreq_Value=32768 +RCC.SAI1Freq_Value=74250000 +RCC.SAI2CLockSelection=RCC_SAI2CLKSOURCE_PLL3_Q +RCC.SAI2Freq_Value=24573874.08088235 +RCC.SAI3Freq_Value=74250000 +RCC.SAI4Freq_Value=74250000 +RCC.SDMMC12CLockSelection=RCC_SDMMC12CLKSOURCE_PLL4 +RCC.SDMMC12Freq_Value=99000000 +RCC.SDMMC3CLockSelection=RCC_SDMMC3CLKSOURCE_HCLK2 +RCC.SDMMC3Freq_Value=208877929.6875 +RCC.SPDIFRXFreq_Value=99000000 +RCC.SPI1CLockSelection=RCC_SPI1CLKSOURCE_PLL3_Q +RCC.SPI1Freq_Value=24573874.08088235 +RCC.SPI23CLockSelection=RCC_SPI23CLKSOURCE_PLL3_Q +RCC.SPI23Freq_Value=24573874.08088235 +RCC.SPI45CLockSelection=RCC_SPI45CLKSOURCE_PCLK2 +RCC.SPI45Freq_Value=104438964.84375 +RCC.SPI6CLockSelection=RCC_SPI6CLKSOURCE_PCLK5 +RCC.SPI6Freq_Value=66625000 +RCC.STGENCLockSelection=RCC_STGENCLKSOURCE_HSE +RCC.STGENFreq_Value=24000000 +RCC.Tim1OutputFreq_Value=208877929.6875 +RCC.Tim2OutputFreq_Value=208877929.6875 +RCC.UART78CLockSelection=RCC_UART78CLKSOURCE_PCLK1 +RCC.UART78Freq_Value=104438964.84375 +RCC.USART1CLockSelection=RCC_USART1CLKSOURCE_PCLK5 +RCC.USART1Freq_Value=66625000 +RCC.USART24CLockSelection=RCC_UART24CLKSOURCE_HSI +RCC.USART24Freq_Value=64000000 +RCC.USART35CLockSelection=RCC_UART35CLKSOURCE_PCLK1 +RCC.USART35Freq_Value=104438964.84375 +RCC.USART6CLockSelection=RCC_USART6CLKSOURCE_PCLK2 +RCC.USART6Freq_Value=104438964.84375 +RCC.USBOCLKSource=RCC_USBOCLKSOURCE_PHY +RCC.USBOHSFreq_Value=48000000 +RCC.USBPHYCLKSource=RCC_USBPHYCLKSOURCE_HSE +RCC.USBPHYFreq_Value=24000000 +RCC.VCO1OutputFreq_Value=1300000000 +RCC.VCO2OutputFreq_Value=1066000000 +RCC.VCO3OutputFreq_Value=417755859.375 +RCC.VCO4OutputFreq_Value=594000000 +RCC.VCOInput1Freq_Value=8000000 +RCC.VCOInput2Freq_Value=8000000 +RCC.VCOInput3Freq_Value=12000000 +RCC.VCOInput4Freq_Value=6000000 +SH.COMP_DAC11_group.0=DAC1_OUT1,DAC_OUT1 +SH.COMP_DAC11_group.ConfNb=1 +SH.S_TIM4_CH2.0=TIM4_CH2,PWM Generation2 CH2 +SH.S_TIM4_CH2.ConfNb=1 +SPI5.CalculateBaudRate=26.10974 MBits/s +SPI5.Direction=SPI_DIRECTION_2LINES_TXONLY +SPI5.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate +SPI5.Mode=SPI_MODE_MASTER +SPI5.VirtualType=VM_MASTER +TIM4.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 +TIM4.IPParameters=Channel-PWM Generation2 CH2 +USART3.IPParameters=VirtualMode-Asynchronous +USART3.VirtualMode-Asynchronous=VM_ASYNC +VP_BSEC_VS_BSEC.Mode=BSEC_Activate +VP_BSEC_VS_BSEC.Signal=BSEC_VS_BSEC +VP_DDR_DDR3.Mode=DDR3 +VP_DDR_DDR3.Signal=DDR_DDR3 +VP_DDR_DDR3_16_4Gb.Mode=4Gb_16bits +VP_DDR_DDR3_16_4Gb.Signal=DDR_DDR3_16_4Gb +VP_DDR_DDR_16_bits.Mode=16bits +VP_DDR_DDR_16_bits.Signal=DDR_DDR_16_bits +VP_DMA_VS_DMA1_A7NS.Mode=CortexA7NS +VP_DMA_VS_DMA1_A7NS.Signal=DMA_VS_DMA1_A7NS +VP_DMA_VS_DMA2_M4.Mode=CortexM4 +VP_DMA_VS_DMA2_M4.Signal=DMA_VS_DMA2_M4 +VP_HSEM_VS_HSEM.Mode=HSEM_Activate +VP_HSEM_VS_HSEM.Signal=HSEM_VS_HSEM +VP_IPCC_VS_IPCC.Mode=IPCC_Activate +VP_IPCC_VS_IPCC.Signal=IPCC_VS_IPCC +VP_LPTIM1_VS_LPTIM_counterModeInternalClock.Mode=Counts__internal_clock_event_00 +VP_LPTIM1_VS_LPTIM_counterModeInternalClock.Signal=LPTIM1_VS_LPTIM_counterModeInternalClock +VP_LPTIM2_VS_LPTIM_counterModeInternalClock.Mode=Counts__internal_clock_event_00 +VP_LPTIM2_VS_LPTIM_counterModeInternalClock.Signal=LPTIM2_VS_LPTIM_counterModeInternalClock +VP_LPTIM3_VS_LPTIM_counterModeInternalClock.Mode=Counts__internal_clock_event_00 +VP_LPTIM3_VS_LPTIM_counterModeInternalClock.Signal=LPTIM3_VS_LPTIM_counterModeInternalClock +VP_LPTIM4_VS_LPTIM_counterModeInternalClock.Mode=Counts__internal_clock_event_00 +VP_LPTIM4_VS_LPTIM_counterModeInternalClock.Signal=LPTIM4_VS_LPTIM_counterModeInternalClock +VP_LPTIM5_VS_LPTIM_counterModeInternalClock.Mode=Counts__internal_clock_event_00 +VP_LPTIM5_VS_LPTIM_counterModeInternalClock.Signal=LPTIM5_VS_LPTIM_counterModeInternalClock +VP_MDMA_VS_MDMA_A7NS_8.Mode=8\:8 +VP_MDMA_VS_MDMA_A7NS_8.Signal=MDMA_VS_MDMA_A7NS_8 +VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled +VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +VP_TAMP_VS_TAMP_Activate.Mode=TAMP_Enabled +VP_TAMP_VS_TAMP_Activate.Signal=TAMP_VS_TAMP_Activate +VP_TIM14_VS_ClockSourceINT.Mode=Enable_Timer +VP_TIM14_VS_ClockSourceINT.Signal=TIM14_VS_ClockSourceINT +VP_TIM16_VS_ClockSourceINT.Mode=Enable_Timer +VP_TIM16_VS_ClockSourceINT.Signal=TIM16_VS_ClockSourceINT +VP_TIM17_VS_ClockSourceINT.Mode=Enable_Timer +VP_TIM17_VS_ClockSourceINT.Signal=TIM17_VS_ClockSourceINT +VP_TIM4_VS_ClockSourceINT.Mode=Internal +VP_TIM4_VS_ClockSourceINT.Signal=TIM4_VS_ClockSourceINT +VP_VREFBUF_VS_VREFBUF.Mode=VREFBUF_Activate +VP_VREFBUF_VS_VREFBUF.Signal=VREFBUF_VS_VREFBUF +VP_WWDG1_VS_WWDG.Mode=WWDG_Activate +VP_WWDG1_VS_WWDG.Signal=WWDG1_VS_WWDG +WWDG1.IPParameters=Prescaler +WWDG1.Prescaler=WWDG_PRESCALER_8 +board=STM32MP157A-DK1 +boardIOC=true diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/board/Kconfig b/bsp/stm32/libraries/templates/stm32mp1xx/board/Kconfig new file mode 100644 index 0000000000..9be8881802 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/board/Kconfig @@ -0,0 +1,50 @@ +menu "Hardware Drivers Config" + +config SOC_STM32MP157A + bool + select SOC_SERIES_STM32MP1 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +menu "Onboard Peripheral Drivers" + +endmenu + +menu "On-chip Peripheral Drivers" + config BSP_USING_GPIO + bool "Enable GPIO" + select RT_USING_PIN + default y + + menuconfig BSP_USING_UART + bool "Enable UART" + select RT_USING_SERIAL + default y + if BSP_USING_UART + + config BSP_USING_UART4 + bool "Enable UART4" + default y + + config BSP_UART4_RX_USING_DMA + bool "Enable UART4 RX DMA" + depends on BSP_USING_UART4 && RT_SERIAL_USING_DMA + default n + + config BSP_UART4_TX_USING_DMA + bool "Enable UART4 TX DMA" + depends on BSP_USING_UART4 && RT_SERIAL_USING_DMA + default n + + endif + + source "../libraries/HAL_Drivers/Kconfig" + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/board/SConscript b/bsp/stm32/libraries/templates/stm32mp1xx/board/SConscript new file mode 100644 index 0000000000..2a46cd7e98 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/board/SConscript @@ -0,0 +1,47 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +CubeMX_Config/Common/System/system_stm32mp1xx.c +CubeMX_Config/CM4/Src/stm32mp1xx_hal_msp.c +''') + +if GetDepend(['BSP_USING_ADC']): + src += Glob('ports/drv_hard_i2c.c') + src += Glob('ports/stpmic.c') + +if GetDepend(['BSP_USING_DAC']): + src += Glob('ports/drv_hard_i2c.c') + src += Glob('ports/stpmic.c') + +if GetDepend(['BSP_USING_WWDG']): + src += Glob('ports/drv_wwdg.c') + +if GetDepend(['BSP_USING_LPTIM']): + src += Glob('ports/drv_lptim.c') + +path = [cwd] +path += [cwd + '/CubeMX_Config/CM4/Inc'] +path += [cwd + '/ports'] + +startup_path_prefix = SDK_LIB + +if rtconfig.CROSS_TOOL == 'gcc': + src += [startup_path_prefix + '/STM32MPxx_HAL/CMSIS/Device/ST/STM32MP1xx/Source/Templates/gcc/startup_stm32mp15xx.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/STM32MPxx_HAL/CMSIS/Device/ST/STM32MP1xx/Source/Templates/arm/startup_stm32mp15xx.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/STM32MPxx_HAL/CMSIS/Device/ST/STM32MP1xx/Source/Templates/iar/startup_stm32mp15xx.s'] + +CPPDEFINES = ['CORE_CM4','NO_ATOMIC_64_SUPPORT','METAL_INTERNAL','METAL_MAX_DEVICE_REGIONS=2','VIRTIO_SLAVE_ONLY','STM32MP157Axx','__LOG_TRACE_IO_'] + +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/board/board.c b/bsp/stm32/libraries/templates/stm32mp1xx/board/board.c new file mode 100644 index 0000000000..0a7bda208a --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/board/board.c @@ -0,0 +1,189 @@ +/* +* Copyright (c) 2006-2018, RT-Thread Development Team +* +* SPDX-License-Identifier: Apache-2.0 +* +* Change Logs: +* Date Author Notes +* 2018-11-06 SummerGift first version +* 2019-04-09 WillianChan add stm32f469-st-disco bsp +* 2020-06-20 thread-liu add stm32mp157-dk1 bsp +*/ + +#include "board.h" + +/** +* @brief System Clock Configuration +* @retval None +*/ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /**Configure LSE Drive Capability + */ + HAL_PWR_EnableBkUpAccess(); + __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_MEDIUMHIGH); + + /**Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSE + |RCC_OSCILLATORTYPE_LSE; + RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS_DIG; + RCC_OscInitStruct.LSEState = RCC_LSE_ON; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = 16; + RCC_OscInitStruct.HSIDivValue = RCC_HSI_DIV1; + + /**PLL1 Config + */ + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLL12SOURCE_HSE; + RCC_OscInitStruct.PLL.PLLM = 3; + RCC_OscInitStruct.PLL.PLLN = 81; + RCC_OscInitStruct.PLL.PLLP = 1; + RCC_OscInitStruct.PLL.PLLQ = 1; + RCC_OscInitStruct.PLL.PLLR = 1; + RCC_OscInitStruct.PLL.PLLFRACV = 0x800; + RCC_OscInitStruct.PLL.PLLMODE = RCC_PLL_FRACTIONAL; + RCC_OscInitStruct.PLL.RPDFN_DIS = RCC_RPDFN_DIS_DISABLED; + RCC_OscInitStruct.PLL.TPDFN_DIS = RCC_TPDFN_DIS_DISABLED; + + /**PLL2 Config + */ + RCC_OscInitStruct.PLL2.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL2.PLLSource = RCC_PLL12SOURCE_HSE; + RCC_OscInitStruct.PLL2.PLLM = 3; + RCC_OscInitStruct.PLL2.PLLN = 66; + RCC_OscInitStruct.PLL2.PLLP = 2; + RCC_OscInitStruct.PLL2.PLLQ = 1; + RCC_OscInitStruct.PLL2.PLLR = 1; + RCC_OscInitStruct.PLL2.PLLFRACV = 0x1400; + RCC_OscInitStruct.PLL2.PLLMODE = RCC_PLL_FRACTIONAL; + RCC_OscInitStruct.PLL2.RPDFN_DIS = RCC_RPDFN_DIS_DISABLED; + RCC_OscInitStruct.PLL2.TPDFN_DIS = RCC_TPDFN_DIS_DISABLED; + + /**PLL3 Config + */ + RCC_OscInitStruct.PLL3.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL3.PLLSource = RCC_PLL3SOURCE_HSE; + RCC_OscInitStruct.PLL3.PLLM = 2; + RCC_OscInitStruct.PLL3.PLLN = 34; + RCC_OscInitStruct.PLL3.PLLP = 2; + RCC_OscInitStruct.PLL3.PLLQ = 17; + RCC_OscInitStruct.PLL3.PLLR = 37; + RCC_OscInitStruct.PLL3.PLLRGE = RCC_PLL3IFRANGE_1; + RCC_OscInitStruct.PLL3.PLLFRACV = 0x1A04; + RCC_OscInitStruct.PLL3.PLLMODE = RCC_PLL_FRACTIONAL; + RCC_OscInitStruct.PLL3.RPDFN_DIS = RCC_RPDFN_DIS_DISABLED; + RCC_OscInitStruct.PLL3.TPDFN_DIS = RCC_TPDFN_DIS_DISABLED; + + /**PLL4 Config + */ + RCC_OscInitStruct.PLL4.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL4.PLLSource = RCC_PLL4SOURCE_HSE; + RCC_OscInitStruct.PLL4.PLLM = 4; + RCC_OscInitStruct.PLL4.PLLN = 99; + RCC_OscInitStruct.PLL4.PLLP = 6; + RCC_OscInitStruct.PLL4.PLLQ = 8; + RCC_OscInitStruct.PLL4.PLLR = 8; + RCC_OscInitStruct.PLL4.PLLRGE = RCC_PLL4IFRANGE_0; + RCC_OscInitStruct.PLL4.PLLFRACV = 0; + RCC_OscInitStruct.PLL4.PLLMODE = RCC_PLL_INTEGER; + RCC_OscInitStruct.PLL4.RPDFN_DIS = RCC_RPDFN_DIS_DISABLED; + RCC_OscInitStruct.PLL4.TPDFN_DIS = RCC_TPDFN_DIS_DISABLED; + + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /**RCC Clock Config + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_ACLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2 + |RCC_CLOCKTYPE_PCLK3|RCC_CLOCKTYPE_PCLK4 + |RCC_CLOCKTYPE_PCLK5|RCC_CLOCKTYPE_MPU; + RCC_ClkInitStruct.MPUInit.MPU_Clock = RCC_MPUSOURCE_PLL1; + RCC_ClkInitStruct.MPUInit.MPU_Div = RCC_MPU_DIV2; + RCC_ClkInitStruct.AXISSInit.AXI_Clock = RCC_AXISSOURCE_PLL2; + RCC_ClkInitStruct.AXISSInit.AXI_Div = RCC_AXI_DIV1; + RCC_ClkInitStruct.MCUInit.MCU_Clock = RCC_MCUSSOURCE_PLL3; + RCC_ClkInitStruct.MCUInit.MCU_Div = RCC_MCU_DIV1; + RCC_ClkInitStruct.APB4_Div = RCC_APB4_DIV2; + RCC_ClkInitStruct.APB5_Div = RCC_APB5_DIV4; + RCC_ClkInitStruct.APB1_Div = RCC_APB1_DIV2; + RCC_ClkInitStruct.APB2_Div = RCC_APB2_DIV2; + RCC_ClkInitStruct.APB3_Div = RCC_APB3_DIV2; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /**Set the HSE division factor for RTC clock + */ + __HAL_RCC_RTC_HSEDIV(24); +} + + +/** +* @brief Peripherals Common Clock Configuration +* @retval None +*/ +void PeriphCommonClock_Config(void) { + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + + /** Initializes the common periph clock + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_CKPER; + PeriphClkInit.CkperClockSelection = RCC_CKPERCLKSOURCE_HSE; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) { + Error_Handler(); + } +} + +extern void rt_hw_systick_init(void); +extern int rt_hw_usart_init(void); +void rt_hw_board_init() +{ + /* HAL_Init() function is called at the beginning of the program */ + HAL_Init(); + + /* enable interrupt */ + __set_PRIMASK(0); + /* Configure the system clock */ + if (IS_ENGINEERING_BOOT_MODE()) { + /* Configure the system clock */ + SystemClock_Config(); + } + /* disable interrupt */ + __set_PRIMASK(1); + + rt_hw_systick_init(); + + /* Heap initialization */ +#if defined(RT_USING_HEAP) + rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); +#endif + + /* Pin driver initialization is open by default */ +#ifdef RT_USING_PIN + rt_hw_pin_init(); +#endif + + /* USART driver initialization is open by default */ +#ifdef RT_USING_SERIAL + rt_hw_usart_init(); +#endif + + /* Set the shell console output device */ +#ifdef RT_USING_CONSOLE + rt_console_set_device(RT_CONSOLE_DEVICE_NAME); +#endif + + /* Board underlying hardware initialization */ +#ifdef RT_USING_COMPONENTS_INIT + rt_components_board_init(); +#endif +} diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/board/board.h b/bsp/stm32/libraries/templates/stm32mp1xx/board/board.h new file mode 100644 index 0000000000..b23b83ee30 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/board/board.h @@ -0,0 +1,54 @@ +/* + * 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 + * 2019-04-09 WillianChan add stm32f469-st-disco bsp + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include "stm32mp1xx.h" +#include "stm32mp1xx_hal.h" +#include "drv_common.h" +#include "drv_gpio.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define STM32_FLASH_START_ADRESS ((uint32_t)0x10000000) +#define STM32_FLASH_SIZE (256 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +#define STM32_SRAM_SIZE (128) +#define STM32_SRAM_END ((uint32_t)0x10040000 + (STM32_SRAM_SIZE * 1024)) + +#if defined(__CC_ARM) || defined(__CLANG_ARM) +extern int Image$$RW_IRAM1$$ZI$$Limit; +#define HEAP_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit) +#elif __ICCARM__ +#pragma section="CSTACK" +#define HEAP_BEGIN (__segment_end("CSTACK")) +#else +extern int __bss_end__; +#define HEAP_BEGIN (0x10040000 + 64 * 1024) +#endif + +#define HEAP_END STM32_SRAM_END + +void SystemClock_Config(void); + +extern void _Error_Handler(char *s, int num); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/board/linker_scripts/link.icf b/bsp/stm32/libraries/templates/stm32mp1xx/board/linker_scripts/link.icf new file mode 100644 index 0000000000..c24e2cbc45 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/board/linker_scripts/link.icf @@ -0,0 +1,28 @@ +/*###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__ = 0x00000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x10000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x1003FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x10040000; +define symbol __ICFEDIT_region_RAM_end__ = 0x1005FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x400; +define symbol __ICFEDIT_size_heap__ = 0x000; +/**** 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/libraries/templates/stm32mp1xx/board/linker_scripts/link.lds b/bsp/stm32/libraries/templates/stm32mp1xx/board/linker_scripts/link.lds new file mode 100644 index 0000000000..b2ae4c15ec --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/board/linker_scripts/link.lds @@ -0,0 +1,157 @@ +/* + * linker script for STM32F4xx with GNU ld + * bernard.xiong 2009-10-14 + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x10000000, LENGTH = 256k /* 256KB flash */ + RAM (rw) : ORIGIN = 0x10040000, LENGTH = 128k /* 128K 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/libraries/templates/stm32mp1xx/board/linker_scripts/link.sct b/bsp/stm32/libraries/templates/stm32mp1xx/board/linker_scripts/link.sct new file mode 100644 index 0000000000..df7bcadf06 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/board/linker_scripts/link.sct @@ -0,0 +1,35 @@ +; ************************************************************* +; *** Scatter-Loading Description *** +; ************************************************************* + +LR_VECTORS 0x00000000 0x00000400 { ; load region size_region + .isr_vector +0 { + startup*.o (RESET, +First) + } +} + +LR_IROM1 0x10000000 0x00020000 { ; load region size_region + ER_IROM1 0x10000000 0x00020000 { ; load address = execution address + *(InRoot$$Sections) + .ANY (+RO) + .ANY (+XO) + } + RW_IRAM1 0x10020000 0x00050000 { ; RW data + .ANY (+RW +ZI) + } +; RW_IRAM2 0x10020000 0x00020000 { ; RW data +; .ANY (+RW +ZI) +; } +; RW_IRAM3 0x10040000 0x00010000 { ; RW data +; .ANY (+RW +ZI) +; } +; RW_IRAM4 0x10050000 0x00010000 { ; RW data +; .ANY (+RW +ZI) +; } +; ***** To uncomment these 4 lines if OPENAMP used ***** +; *** Create region for OPENAMP *** + .resource_table +0 ALIGN 4 { ; resource table + *(.resource_table) + } + __OpenAMP_SHMEM__ 0x10050000 EMPTY 0x8000 {} ; Shared Memory area used by OpenAMP +} diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/figures/board.png b/bsp/stm32/libraries/templates/stm32mp1xx/figures/board.png new file mode 100644 index 0000000000000000000000000000000000000000..ff133e1d4959453b63cde1db1472c90f0cac0ad9 GIT binary patch literal 79619 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
V{rGDHnbaAZtV zYVLBzO!SNAcnRQKwZeJ8t=Q&FH$BEJ^$0|%qeu}DX&p0$*Ihn1Un(;zKY!}fH;xT2 zE|xc~AM7f6#bVdiO`9*Y zND=@A0yRSv923TEj`-~JN1lHEpkz*Wt|y7Y=bn1vlOO-Z_uPE_b=O==%)am5`+wzE ze(k24-&-y%`hHC*2;DQ2#*{+YI?q(Yw=und~))?{od!^`SzRM z_nuoWzUbm}x0zU7dHY-6`n~(V-}%@g=R?E8ufqaX$2VKd=i?|^@cn!-FD+LHi;%@} z;xf_I+ikgd-)|&Q7}Od`9BQp}qKFg&QxlO0ph>DPGi=TOO=9*;?$&IUX$u^)=5QRx zQ503HRYVj*7&G6pY}>X>V2_lt&L;|H^liLx*x}kI3>+{9J+J%u*>-wF|gKIs< zDb>PL)j6bS=;y9;y4-~Ypd&pdnhH-Gb2|L70?px8aIP_9H#2*?(u zhnZz>Tz_GAcPk?3{Nn4UXHHE|PqEi4NXB%KzW4s`Ke*@Nt(!MraKQy@2L^ubqaSsh zb541`7P(;C1>If6TD{Tspm8ZDrzWE)I@ikb)qg$NCqJJr*se1-JJ$#roD0`>EXRrh zJJG7)`fjnSZ`}q46!?A;_?3l{N)iGc29Z_~B{7gf07aSsfJqMmfMwv-o=0lnti4vu zaxiMWXq{zZKa^6{YSrMraqvnhZCmDYdDnGa*EN~C%|3aGnxz+3gvB=8%<7mGxsEIw z(}M3#ekS{lk?bxfbBY9wU)srQ`%->=mhaTM8>B{*+hK$;BJ5)C97 z$5z#3O#QFScxV}NM9xfKEao{@!L_Fs=3dx;cw%(gb=_#O6jVaes3^U%sgMYqsVXgLA^$#Eg{|fydttJue+x&-`msG-IFi$Si-SwOX(!^{aUS-#Gwk~Bu?Ta z)GAg)pcJP4j?D0?8KK@zaAy~jwVKcHj(MG>KI1r!b04AW{vMeMVpPn8aJsH-0+p;<5O%FXV#(dw8qR4R^$8))mnlvD2t;0r8 zt5ucOuH&F#;>|J;0nr>r0EB>y8C#Y!Mu^e`Ng^U+1Yj}77?K9ix{$Y- z>k9J3;f49dkTV%2ib!)NEYfpxjWCRC$19h$ZCS2om&=X8jRUo+2Iit&n4BzKcG2MC z%uJ!D*z2i@>Dq=hZlzKWl`a(IVwqQ~zJ|mStXivmZ_oYdVK^DNvof@_RT-@p%4GiUFrECE0Pn47&IDV<74M9)@Q|a zU0YfLk))*&P^&0TVwL!divWarVRm|)Tej!s950tE6ngslT*sDDIynz8he|1}Nb4w! z;vkBnFpe5YqO?u`2vGo$CNe!IU?r}j^Cq^LuCN?Kv$zkeCI zx-HzNrjwwx;ebr>vNjf;I@%((7IQk5rVXq!ii9*Xh0j)C`A_%S zTxK>@zcu^P_(WuaN&rl6Spd+P?SlpY)V5;>VLUoKa%yHqYh}9*H1hz=`1N{SYh5T5 zY}+OVh@c6gD5}@$K^zDstXBLSBADC?#*j!;+PIvXh)M#ENDM8;0n+g~^7L*aal!hF zc|YM_f9B-)&^Uku$6HsRUX;KrO^meBUrUB@lM10&2Y#3&Ns@$7LVPq%HgCP;l8d&j zTQh*1ajnvx|+c zVxi_^H4%gTU9*c7bUnLRtj*W2x?;=x!ouWi)v}!%c5lgdKi;oDYs_ReQ;Rix2qH0q5N$yKfO%HkYwJ~m?8u473j=Q(bn;5nX^n1LAQUhhbQ)R%U0x z5X#2nPs8~g+p?@C)sx~rWGr+uU}tmlHZCQ*|LFXYwP~znr=-=>mJU9h@t)lYW%nG} zRkiIWntWPX#>^a>)`v$#L}|%|#q!9|iE6dV7?VOSsXE4@Cvq|^XmEzJ}WOe3%;s>cySB*tt)#sGw+Z6N{N`LdtO=PT7j*g4BB z%$Jf4o7VbZkBm1$73H|ywQfVgG_C~Qf1M6GpBj%&I^g6XncJ9 z^~v&YpE?Y7?%46>>#tv}0e#$FeQgvu)RN zZC6^72_dBf*Uk}BDh~Z1NkXNy(i(|~v{K4g$)pK8is*JSAwN{I2-w;R7>d6c*poCG zjZ&$Ehz9yiY)?L)%egseTU>}{o9ZPqe5p3)X$Yw7n=3xpZKo{bYMN|%_S`n|>U45C zLTPCtLxHylD3c^g#03Y$(XsKdk?}YVO$m6$m{Q6pwlMIu)=tjlQVK4#W=0!UYxTgd z1Aq{ML#r*|3Ri7nX#fC;7$D;u5jk>TCVrlA0A$D*<~_&t>=#Gp?tbtHR6|(TKR&Zy zv%Xwcar-6fFX-mBUw-tyV^y7KLI9oV;DyHDK^me!shAi@Tjt)h{nGA2(T{vY6aWCc zk^m-pXOHFX?0bHrlMqH)3?HB3X|*|RTU=`u$I6s>CLI8Zgc6mo7!)-zNW597?Wa5!Sqc>iE{k7M>Ee!m{xvAOt`R;*DS6;rO zt^LdSBb7>JVR3O~2s_7;#K}!>ee2mZdi>#{wSMTKhu-_%_X;5@n2k( zk&Wzo?6DvWSF9l+gqWM3KS%qCrCC;G6vuWP#}y2Na6$-BY-$cWR3yjk%~=Ju;$#bdtR=nxo39| zY~OX&j zf*{nS7=YszlSFZ1$EPck-}vTFzWF-fY`)%@FZsUjA3d`F(u*!#iYz2DVYIK|d0kDZ z)oMW$z5erRt-E@9uD$NM)f%u~uRr$0<2T)OljnI??b!LL&-`++*!96%Z(WtaYqi?r zPd$0s@KDC;wOSNK=QMtFmH2wwcDx)SOB+xF=&Vx|09pmyHJIWfpiP-s1a6*a2>@ED zMC+*P*DDQTD5P|3+jSfvrDa)`v<2sYfT$Uht}T_)N+rVLq?P16Qi)1pqeWW5@>y`t z(k3es*03C2v(iE(^KXkHq-F+hrCKdls>ZqKIF94Eg@TvQ7hKnE1r)Ze0b0tV6#{q~ zs(ndSKpN-RroCF2p1q1Tr3HX3y1MPe%zyx(0TBpPv&fd2n={53TbN%M9zId8H`2~f zO<|0g%0-rCIgSI2amEyBt&<=KDwPr_vMt%VhuK{YB0^emewlljX#zk(1mrBe4}gpd z#<=7;&zUVX?t1KaZKevF`e4xBy1DOyHSWmpiH&wt%+d3YJ~%Tv6oi3_lt8I;oZifA zGz$`!GKwQj8WD0Z5Tgp9p+jXc8<1I+<+vQAch!z9AN%P~UU2DE ze|z79k34^%J~6+=OWt4T8=s!(?(WHXw&a4d^DE}E-e^Qo^!nE=h~jAH6<4euT=&Bd zJv$j6AAk1w=TDBEyzJ7;Hf-2%#TDEC{LVWZ$9~Vvx4ibj|MjkKj89CQt}q-&towct z1U~{;Z`)Shb6XF7>v^VTxCqmrO+8DN9zZ~hBWM7IWXe67Ksp0zfB=xFq)~5Ft2G8B zq!3bijw7XQNhzchl0#axiZev55rIpKX{~{D8Y>AvDHjjfCj?hYP5PminT6Nv7Qq;{ z2K~+UA_&4p!=Ia*Yo+gco}16-bGe*tTc+-7)~;{caAbD?&_u?Te_|Pk1CZ7&mq2GX zD_HJ7$ZD+4Nt>?_05vY@YmSJ5$68N~jgO6<)LI*JzGcfp+AvZ(UY-k13^?aHA*FSt zQmQu^TuLbrkr7LKk(*UzDm()rabyUfk+>$qP6@`5Gva7`!w4D~w>>GP*grJ=z*ECe zORjv!72DVMj@9TbJ1_UNx}-0z^#=5eYQ|G+sfi$>6ZDCQXmkG<5KXh4i#Z zo5|cM*{A@mb&@1u7?w&UM8-LH9NY6;FYo2Ooa?$mNFjLh6jPrWT49~gjGfQoa`r`Q zgVMH`HUqh3^=B`zbN$QjLvwu27#H<=fDtqFk+BL=AB;(mg+y_XU`Z+RMK4a&z9){qa9|Xa z0^uA!xmd7sypTs`ZNGHAt0o?N^x0c(x%si@C!T%ssN1`-HaVm~b(q8HUdInZWLWnb zL9OETd43S*ateTJtr1AtTnG_HG+&LMKd}f60^5Z~NX71_o~u3egXf?qde`K)UofzF z+m(XH{hJqaj;NH%NmQ>?8nwl6c6PS3Sc{Zqs1t=q$OVrTF~CqoIi6D*f-tmmg_(uM z!6Pp}yl3wZo*OOj-Xfo)*dLpmINojBP^4pGMd!FZc zp6fcU>qsdXa|+Aya)i6Z6gq9GBgYt_e)3QnOWr$YNP@53>ZVy z2#f)^u9Yj~Cr&Ls_}Ibulk;FZVB3%=JvIM$*#{?g_123cEgpDb@quqWP~3ctvt|b* z3lpJNh$Cue>6`Nakk*1TzgDYMDup$hEGbO*591s;_XBk*@oh`wNRp7?xqu8T4{|Q# zdZ6lqUtc)x?>qV;AVA&|J>KTQ?yVbo*R9*qyM;WP8s%DL_Ef_U#!gI!K~P$(0_af3 z1Q^Frt-@^Av29DmF_U~^X5srUjD|Yz4sIIO8)1Gim@Yg+T|MiZ-@N4bySBE>g7X6C z0U%D2v)L1`t`Jeqb=Iy~vswcNL2zPt*z>#-BO`Nja{~hdTQ+ZYbDmPla-1*x^$u1nBLv10O1Jg~%BdO4p%F9z zYx)uyYU3(YY5%+Q7o*ay5d?)ppaomS7F#rG{07*naR3c5tP%9H26GmZB zE>{_6TnHhBZCO%Up6f^{CFh!R0uYFCk{C({(Xc-nfB^$RptaVZK|_=4XPjd*qMr~^ zDdK!(TfP-h-Uj#Ce~qxF7~BuT!1o)Ai;IYibKy9)>pHod>v=iHaco;kDW&8@%urG- zQyMc7KCLCS_5lC@%^rkEpwriemPq-rHtp5Y4K2-qh|;qBIGPw6o0^!`nrz3;oJd-e zMqtRKZK2?XiATm_r4|Y=z{>}v(vhL@!A;xV{!_O-_Qa8sCnl_cZmpu2 zG-UFzmkX+xk|;{FB4rE^9r_U=Shgh*G(Z?qoKTzuJ2&;UGQ?C z69@+&j)06*u*4+tA%TuytTlv3FA?Z>gE7De`?HHZ(LbJTe-` z)uO{=)Qupn)x)DNAD0P1cd@is0wJK#J5?CmvDUhI!$@CpBI4VT8A|tjvFkOx0a;X9 z>#kz4ySHbx2Ar6joSUDQQkKf)$De%i)(?E3tE;P6EY8o*bIu*d`N}{2)A+>Xzx&l+ zSvzpH3Px*v=NJCR0}nrZmi=4KwaQ#IthXJD3&{XAfM#eC(y>|95&$%k0zhI42u<5* zV5S{4Lk0v4Q9;V8FvGBrQ9^95WsTu=bQ^6OXc$L$Vg?e#5uPtv3$p%0hr*XSTPFDjPt$GXq3w3IP#^GjEiO$ zkv0ww2tW}rGazG}F;fhWHDhN90D%}oWGJ}E7m9JD9{K(=hYlVA;9%u|6Bk+~At(hw z;7H#JtVU&)_qmr27O&X2D~X~jw`>d$$6h*k|2Ln*(|9yB=_HCYQ=}P}5`Z`Abrr<` zPeHK03dxN;F1Y5x=G^9}!f?m>zWe(M)lvhH0n=dFKpY$n+=hk&grGHSb>8w57mrmM zqX$o@>4n7!diMA<2%oR_RHLzR)4HvjHxBe$8@F!GUvw&Wv<*bz@gz0%*( z9e?oZ+<|HO!8C&^z~_Utz2z-$`Jn?=DwR9_ z@(T|<@PM1ouht@8qpTX%JFd&Q&}n`OL)6R^GBZysAQB)DvXrq^=J%TB_?t1%6ocgq zftnl$W5%z_0W>0N(%1%1(8OrL0Ei6xL0Tn=(s2?r{05>ahA0IWu4h}8?bx=E647Fe z#Y$=I$X4;n!Ll61;U{ z7>12T0}&aUGljR zgtTcm05BpX4UB*1(Y>iUrt$+ftDRial=U9ibsflHmU% z?@hzxx~g;Gwf5d;sIlj{)h($twq#keEZMRp+wv%kCv0p;7!oo-5(to7AonIbA%k<1 z%X0|{A<4}LfiQ*uF$UXs6qapSvo*G)ZuOv^hnlA|?7hAp`&6kk7zo(LChJE()m5kV z*>z6U+H1e-UGMTrc?rZgudA^m(OBvnCsG`lgv%Hr07$N7kQEXm1ds$AKqx6CnT**w zsREewr0e;R$-rC&KtiYiqER3NVj+kNa0x66Ok?*%2>_vIeq_;tP$^-}O)jl3wi$z6 zSKRW==jV1md;%I`P&*FMFoc>R+yqV*!ZORUVApuko-BpNN-lU|=&0Ymk#BDto|_(T zYFmHjo$p_<=n6Q$b$dhDFJvx=SaM3mLNOY76+Ef$`+N88#x1;t#{n9Y}v9`8t|pPd%y6df9*ScI`W2b^zbVB`mk*a z!vsX7h=8Ds22ij`54t%(rGf>3h!_OS9K8|L;XDB{2)sBEX=g#f5CLMQ0fRCF`}{Nz zQR`DOhFqaSASsD}Ncx`dI!>;TWsF&dDNMt*Y|fc!S%zVlhQUI@^V~u%&zK;EgwWpJ zHZd`+z}FyYRcl+S_T$w)y84<_$6r*Y#9S0jS3g<#2>NtoVh>5F^7%qOUq~i_G2qql`LG-b^-EQxjsGA%JO`1;+_fKuW4*zs2JlMxnbFW zdOvviz@8xkrf(>^ZiyL2EE@5B#SoZa$e6{M0UBX~yz4os3{Y{$oolkG+}@LuYIYi= z2N;6JI*8bS3IxLLLm(7{k)m?vme#ISQ6-JJ@z@R5Z^O>~Up)Uga0vz`0U6Xqz(oKF zJOU6s>^J33d(;Kb3*R6;BH|njAwuDBEEYE{AqMSwh$E$S@;0wO2{pc7-9 z8=8Kil!UUxf^K$r(f;}(*r)nIb(nlnLKUjk38qy6smnK-IOi7w~X&8z%xFVt|Sff(nHrf*Hq-9U2)t zPNdqJY7{5O2hJ%ZC~9&Sh;vujCYce7`}u52^46A)wrC^_KDmyg7$cHyu~<$?>lAl+ zrO`b_5IGkFz&W}lWgB)l7I$4QpU?ZQL!KPXInc}#tsSTRO(mW zIA+PubQqR5c z{I2JBH#XEa)i+p{?R)NQGC4gn0|2&d^Z&|SA|fF~B=p(}g}!<`oN(ASOa>qkH90(Z zK}%VcJ7y?F$dI(VuQ=`UQV@8epgA=vr0SRf5rKdsstfWM!J8402uUI12n;}7tOkR6 zVql^GAV5-F5rC3Pxt=T~)2UQOaLx_GGR=@30UNWKEE7yHfdONOE2S_{xzQU4Q6@@~ zCYV>IdTFMm;$$yybLE#Vddo$>=n5NMJLT%uTBTB{SS%$HDS&Yygk_oGa5x%`Mj~N5 zWD9O^#&q>-b?Oz$-KiA-0CCQVaCCHRc=()BQsXw|8n2*9x?$OXNC1`)q@+#&B$LT( zHj4;`2s(i4U7SJ^#0f9h165}-D){9&zS_%0oWu7mbmAIW;5r~S(IRM{kwaj=+yK`=QXol@6K>yG<%q2lE z0EG5NyR)q{JJVsMYD_;BG73D>T4(hYEZ9=_XIFcaA011<%{zW~$F+BaESt)VhBrt` zwqm+O{PjOCBJSC{_vbHknx36~^obwZRVx-EO5gv#fBPB7_g_g!~Zh#XP*$dO2t!DwIl ze#vo4P9~d0Ktl-2Hf_r^Et_-B1!qhkB52BpuIePEReUR~b1D;Nf{$@wP=8VEf6qFf=SHWZPq7qsNaQk)>QDW-4HUGZc&=_lW^O*x=z1Q;u?!A%tMyGctX| zlYPe;;_;z5f3mpy_FKaZHBE_ZVJeY~+F-ac4;2|4tp3sgpp+g{#rD?5?uGLkjVH-&DU~K?k`r{R0KtigIM!Bk7k&$#_#oO>O(zZrc3llV^ZJ zz@uPrQ1N|~n?A~J@7+8&JwA4N3OZt7Nk|o-qZQg(N`2!-=IF<-EAr&hOTKRJ)KwayYBdnt2gc7dK*;rTYE!UI26*~{MUKEVcPbgg9k@OM!LGXex7l@ z_3z)Dot_C_2&@~XIWjtmjQzxAOb1>+&jbKKDHREa|4W$9&tR_}563b>whaIrK$d^Z zTz8KHfb+>%005wJO%13r=pKxN6tKw=fx!hqC=0gx!4{z!ajy0wS|b4fkRd73tBVIg z39nuX0?!BmNFo6YLS$f|p_G!05h;+K>v<)|%^)E|E==1pZPO4!n6@Ff8HA?D%Pt;t zA9F+yCV(QPq-M*|d1Cv;;eK_DUya^e2$5e9@?Qi5RgZ&ZolYIX7fZ!_A%9-6Clm^Y z?Ql38i9~GM7D8~&0dX#w92^`h=8J}5R8xbLl8m8Y*&LZCeS-_rG<@Gx3iJ8=Y%)QL zgkeCi-IAJ}8e}FkuSPG1Ro5KK>O+-}6EId4pn;)K1Q{GZd91(hC;=GU&gMxNWC(D5 z5{#tpbHRNJl|!CHAgMeMArrZkO(Yh!#dqwyZ5+F2X5Beg$f7J2oik4Jr0A@*N-UL< zO2UOVz~B(KSbIHdtZz8&b@2Muc`Y@?qLWPJh*%+&OwXNr=|@lQe*UHI?ymp&C%^9& z(&^Nc5JFf{F3h@EQ%lGEP&fpj3XTU-f>(e5!9oy`;TIC0dubXPtZmzup)bY4mJ?Gc zlECLivsR)QZTRfrbRApl*3_PeEV}MWao_x@k%?)$cHw(&|Lv8_*Hmu!8w|NQZ=p!U zHqDajzRok`h?#u;8{hi(Klt!Re&#`r9Y6NSV~>R{ak50jU&rEPNfZf3-nf0KE;7R~ zEIUMmitwU1jspPTd1+iKa~#Vcaz(5W00?zJ4*=jJY8i!#qK1kS)GKOryi9>QJRt)m zi6MFc8xS?o6A2^|Fq8m4uZ z7(y6^XqC`YHW^Uy`xS1F zzB1WtHl0obkPsT;wnue0(foB*330&9n6{XY3bSA?& z8m0gsMacBbWl)!lhzu~ORt5k7bqVdVGH1=&G!4s&h6}m;Q2&YP>7lwB3z^6leFdBd zTu%X@4>|)wUO_sp?rQ+iaM)eJU;Dy8cD6U& zd*7|oDLyeZw_st5U`P_YLe^DEaNZ2vBmsG8aA+8u(!32z=EcN|{gX6TfI=2b6S^87 z+`70aZar~yq%Y~JEQ6_2A6a(xrry+%(fof-b?%;A4z-;-H}YHCM*GL++PgO0`woG{DD>EqPxLNde*3Mr{S0p(8yoxUPk-8#(t6#+ zd@eGjWGo(gt)(wswb6wTmTfEY86sV%Hsh7ymr8yNg9<6oESu_$DVFoNI$5dR9;?E7 zsv}t<;tYLBRnN%tKrjahm24aZj3BPZLI+qyPYmso+W zc?JfIGhImwhzdw@VmutnD;Bfm_Dw4mty=%=$(-lR`M#el6d5-XbF8ze=K2+_-|v4e zH#=sBq85*otdQq1DJ%fH;O}ubH0B z93L3p(>KITtK?zP^9Lr9Cz2(YNxS+W{SI@4HH_i=G>wEv{I# z^R2hMr=hlyf)YXqI7Dwe^hR4W8f|ZDo0|Crv@1bGLl~d^hkxLl|5t(g@$vCb{@JI_ zjg5w05jFb6^sH2pOt!9uhR)UjYMB zJYeIYL{|A#aYRW9s1l`WFQpg&5pocOsGtJz7fVjDR6@fC4~L0K^#cJg?fPW2N=SC8=6?gS395IdFZ8t0WeUC zIM=LNL;%8E(HlK;_UxIHL^2WydkUqafPfpQfT5N{Wn6huO38r}NYgU85i4ek&CQ`Z zZ@bPn>OTA3Qxh5QZQIs2)kaOhP?1l5J~4Li*&jf5azSSt01--vzU%lUkIf{VVnG3m zfE9tphUSQyaVV9Vo1#{c2Of zA!1u=+rC4GURwa-6-<}5{GZQ!=GgJ$_uqHlypGPF_!cSUQ%^tjg)e_;dUp1W;OGH> z0W9e5eyz{KKl#Z|zFK3ov@}W2Jw4DrJvmt_I#S2uoO2e?9s}|s(;z-VS^I!#hrslU zB($RkU>NYX%kX*-+i=EIz!A9s!-sO|6${>@ohT4PP0vS$dLbc2z^eQmGD1?MJKbqI zf7#VyfG$(HO%iC81{R!>GcK4ATo6M=%J+QN^@=4YS19CjxniNI z@S6@-c|dnT#&n}|Lj*M23#jN7tH4=Uwu>HL#Bzbl<%FvTsUDdCEXy`+TM=-9f-_PI zlqxxXDw)pY(i~B6!5Ff#D`xRC>0VfC$iW7^2*$le3{Uu(Gel}u+x zkN5RG^X#+Z;}e!?nzp3{1*;EpU3X?~?u8d#_}u3||DErC$ML*h)PyfJB6ZgtZ*6OP z)%2M!Yp*EQ__LYglwN-M$i9914jnppc3>!-$pA3Z3WY);(=rW1DD82|ES=!wK{6I~ zBKJJ7TYjL4nm^{eD)5S`!UmC~w04a4aZ)M_guk&Oz)&r+&k)PUTwoP7E}iMEfDc53 ziZ})hJqU;c68TCILsW`9DFFyckyH|xX$eyp!Za+?G)>Dg4IzXi((jR;AIyzu=!gNJ z0)-@r(D!}aaQCvm`HPYn)i)HYFqz5Q*@ z&bZ(vD5azMGO)mbB!EK3r7v|5U(K%%ZV;luc~HU2IRj-Irm(EZnY`5ytq)1%IqAf- zQhqX>&dilk*`nk4QUc?QacOYV^L)?o?T~0_Yg34q`z@VUTsxJKE9N&2^`9=}CgM#^UwGp5$rFfZf#Pp!EU ze`8fTJwEK)-EX<|1FL#B0R#;CH!NavSvz{{*hfD0KXgIHFK`-4DW_O8OtYpYURzfm zkHx}vC=?2nO2tB(nl5?hr zs-x6$tV)DH015-T5uyM_2*5Z9#sL(PlIVk0HugNoDMaLgn?eX-SRvaoO~W*~A-GoM zB+vJQtb-zD3eLC=`ayGgDy?xV7r#1SuiT4@m#?041;e@MNTn3#+zN#N(DPhGM1E!_nabvK8OM=I`hIuUl6XTyaqiqLcW;X| zcK*w^4h)`|>)o_;LvQy?HrIFb^z6Ce`K`hfJe|xF2?vDbdbJU=C`lG6WD3XiN+rLo zBVH^~!I91NG2~)$G8YQPI~R3l3dPCMq1cu!JMVwsrRR5hcFoe>g>{n&#;oD~pe}wQ*4WW9nVp&u4Xf|D?E{OtmQ*gCzHDzIci-93QCkzwWOKi$ z4&&MwW1&cdh%(t+DxHx^R)RBR$Qdtx$=_J!N!ixcR$Ej1TA%1uj_WTmDi%w{VqtuI zd}wI!`0?W>PxOtBPvo*iA&{GvVOpkP0ApCuwgf~3-Bc6+%Gp^U;$@ft0)0vVDr@W^ zGO6VGa8)SVsbUvBqn*1B^Q#vCsEYK<6ASuaab#G@Mi6*Ni~yC7 zM0%nXEd(M`QUyaZ6kM2wY1yVBglU-E5FCT(yPV!&j8XN*##c(|K6#2HT~Gn5m%~fF zzxKJ8@%2R9Fsx8WD(U-@m$wy;>n0P)g5wCznb7wH0D%QGA|zmhlJt5F#3&e0VbHA* z%J`a25NHse3lTL%QPTe5^z?KQ3O+~)J^?oX01!ZWB4*V!$Ls6N8VlkPUvN+5oP4e@ zF)`KL)Y7wL-o_2<#~te*zxkuo(9D7rEsMIEhK6SPUpm-OZ|vCK+t)ubcxJk>wJBdH z2?0wM)YimIE?6<|C3E?FrbI*ltR&GiI0B_I#Zb7mqq`@Y&BY_~!TaxQ>{#MJ6iWGg zshD>#lb3ndi*q?UJ#lto60zjw^M1=WEpY$^`s(!5Im3u7x#o^^p}&g_P9;;_^S0c2>#sLA z>dkw3lN)4o-c0t1KmK2P_U{c@Z#Yl-#Ad?V4E#ADGKGXPNVx(?UZ#8!fjrNr zEGwXqLO@VTDnbBm2vdk~I2^Xa!W5dO!nABeh0_A4KL-aSrFETUCFEz7{6f&2p9Zly7LRbiZ91t-S zw(4rb`Mg(GXLohf6N9-#KAFguN~&0Jo7>vvEn1XH&UH0L-}b=W@ur61bCVOZtiGj9 zI;9#5&W@#vt_1QM;&zAwl0Pw%DCG0kUbQe1qM?y7DLHU68mX;`*A5O2jE)Yix?deH{ zbiPmkM8*W?To}R>0=O`MDXe(#a;c6YfQ!Q)spNSg3W5hfQes)uMX5mUkqAgBdgk>0lCo)dY;)N}pU8%X5m5bYM*?CKCebe~l$jf^V3ef~S-0rq@+H?-^STx- zUc5LQGGsBIoE`htx4)h#INNT#Nr}m+x$!OQ?%#g(o!k&_F1Y5EZ129kAODj-{xPkW zF12ca@xQGpr9zhV`Okf>x$#vHar^Q1i)>sO4o7=?SN8U<+!w%)|&Zi@Z9Cs&%&*LqP-pK0=_N zuY)?9aZmb1$Dv|LV>nze#+YT=wq**zgbk6KMHz^o6fz86Ce)b> z#yMBM?#ZQDkBG>0s}|Su@|k3@Py)sT*UCdk00b&n5P>8r0%F8LC&5YS3bjBF1A~mZ zA_9hl#1$}(+~5q&b7}8vT7hi?`QQ;aE*KIF29APa32YA10|GDzVj1>^|-%WKPy4OYO6T#;8?%>dC{ZFuQ&G##O79mP+38Y%!5c z6mo^xWG6&RotnB~%auFda%)M-GiOenIn^hu zrcnL-fsyfy?;F^Z$TiX$pdLS5B?DIgYdT%GIxfqlaH?T>nZ|%;pBq4Ue21JaxKnaA;^^YATz} zIF5&eOqhmca&8%%16QaR0ZEb=$kr>+TpXnok&l2xsQpgB#@Aqa@L1DiwBsg4jF)o& z2#6>Z1o#hVd>^2U=a8c6ge?IGMOs^5Q}TTv4xj)8A`)o6jow!909w)Qu{eMP0-|!O z!}1;;lmd;$C{jQGBz+lBaR@j^ZWy*@7?u^X!iL~1P!|qVo-2rr*8MD}vMH!AP+0Nu zh#-C6mwu__q;nbN`J5Y-GGJhYifhi4QV1Fb3ov@kpwvt!#>({%K~AJR0U-n$JXMex zZi8u^nM`|W2Z%w@gAfNxfa2g8;Q3%1FqZ)dAUG%jUqY?5VBP$+9kmM=wP$8#&mK9r zcI|T0G>1+fpWm}&B2hYh?D%ZKNV@*&`gCpUypf4Q;@rTzt`-q8EyJ=cfl7*SSSg=; zMGCS7XKG?PlPji^*_wFl%2msXl5f3c^|jY+ca`irdF1HcLrFI>hHYSmi>Xw^mJ3=N zYC?84n{BSETe_rMDn-6u$d)Fi$B&#maB6s#?D+aMi?3{to;-3WS(HuPy-jsBEp^eQ zT@AaR{?32?=lAOynpdw{z5T}9LNRM9J-TM)^(&XI(_i%p>*gXd)tk{i{h9y!@b|y} z6GdH$#p3*~t{perxT1Ht5XR8Z(9=KKb@0%kNF;LGO*h42ae@onJp%sli6@$xn%1sf zt$+~NzWsYoo<1Xl2wB$cx7=a|>qP$1#~*h*uT&~^b#-l8yUsAgiN3y!GnXt!xu@F`M$q-=9?A;9(5UdIIAwR^Yw3K|mmeEy>!{Ls$Z zZ~ytO{ZD0Yh=%l)N zAj7gk;fQHi91&3GM*+&pYJkK+cM2l?GHALbA_W)^Ljc_h4l}S*fC_L}vV;(20EiI*NOiehD8euiU~D$qmm!b& z00k&22-&~{*gn`M2mu}eFkle?4vGOo;0zoEKCQog(c5occYJv6>{QmI&?M^^%|{}o zT&&}Y;Y5D)+`y)*R_;D@Hb0gaIC<*U#XXTo&BF&?%w^^b(`Kes6OA#3c38wBW;kpc zW+)sMSFT<{hHZ0m?~k58wCf4cvgCsw`Ypr2XMXs@)2D_;bJ0P^p78SFVn2UbFt{&DU&oF+Z0}UASubFFTeSwoBrcmkiUA zzW*D)_TC$|UEe=25DAALc>4pN`=@_=@|mZraVN)duG@Oe_H6-l9twvJ9XY}czV^!1 z?|JvT^^=p+Q{R2~;hsf{-}&H!7tQm)!2^H!SAUf$7Cpx)x$gB_w|?ZqA6823J8+;> zDqTuaQc5+{)~?^M;U`_%SI2%azW$;prkcoDuC)(d4TqykmM&kibU6TI)2WH^@pI=! z&-R}g9vL1Q8JV7)OC_cm6GE7lWf_KnO!pK7)ZH$0ny?JzXu>7v2w3U(KA2DSWQYJ2 z0R!Zyf?al*`h!Si8h(ITYg&$AzElXn2xK{fT%iDQL-!FwQC?6DiMi991GB&JBi42;@Q_XN(C`6U_vppu4UDiIS93%6C0Sy5#vp zzAF_dFb&fbf^-u=0s!C$3P^&|ZA28D*EB*zE=hu_x{s9)5fq0Rrco?8lM~}}$#jfc z4jOrBffWV{gQvhDa7tj=00J0+p+Ndza?tf}rUP}-SMEQ5fB#H6zjN)fGh>Oi?yjXv z=4Bi&ot$$#mB!{tKW0RtlanW$>B98CKGIMZkH>3307>N)ic^__TPifvg){YSW|Y_0 z82NlYl`huT*R}U7*?%Ub{6R0~buG=@RT(Lw%qnX0k z*{r>0)#8>|{jEFiS-t+M>BNXc|N3j**3#G!T&t>Iz%M~i4*<)SEo*6Qot>NeF))tr z`|o<^uQWC`mYmWTzWBxInVH}Ijo)l;ZvNF@{goH@?S0|J7n&NILbl!0)592>nVA_M zALpEBQb|=sep|9+NhlO5l}bGe7FM1tmP(%Iw=}oB|NS5M`q#hq#jkt?2(H?=@u9!? z^J7PjKEG$rO*h{7_P5>tdmsGZp<_pZ;Jxqq)enB)ca9!8l1Qg3UKkN801g1OwX`wL zm9OS^pBFGF6^jhO_kI2E?%lhO9Y3~h+xBHkm#$m8ZpRHbe*1e5-+beZy~}&A-?j|^ z@@4SnQga+<&8k%`uSUC-pT>SMzW&F4vtRM0SWRuLrgq8l-WzVZDU(T0O-)UXpBwBS zICZ*zaA;^|W;T;@qtTcZvVG0=14IBuOqWz?;*IX52LMv3Ak4o|Jx2SiGKf#SBA#49 zCm1TJ7-uL6c)7qz0Rk{8SHUU*h8p0IK%77;`|Cj!5&}a;O6f!{XvkcGJ`X4Y(wGlJ zq(H_Q5p_G1>T8I|b*ptH2>=vH$Cav7ay?J_N=ZfJ0|1rzpyUBC1whETAq-&%(_kn} z&VyF3OkX5KB#De^CcQ+c)Nuw$*9x2zjH_2zh6qX#GdN>LI+Y!p7%dg^VIdF-F%GSU zAt_VL^Mc1q81iac!6$I@U>X1%IB%O5_sMtWMqAvO`SmfclstSqxAB_Z@wv>4yN|9~ zx9IDS9x4^R8#XN(O@l|qk(bZZMMZOC%&uFU9~(P6Hr?6~17JwZv;`@rF=nn_wtObk z`oy7gTqfGBYZUWzIOSUTW`BI=No6ok2ln`Y}s^6ZM^>cm%Qq0{!8HK0U#caUw6$lU-{-Yqp#rW zl~R#Nq`jjZ08XCl`?s%s&69rjyslq)=Q~4oC>Du)>M#FNDYb0LlF$9^XBlJ9KDX=B zpZVKpH0n6c)~(k9KrWZFEUUGprM9MKET8XPwhRC=nM^z$2LRvqdzUQ(qQ{tEda(#QVb4}Y2~ zMnpI7*zvmE{Wk=L^D|gHUK5YkEMB~1>vcDzlgUIfF+Mta?D&bNo_TI|X37kOkTIr^ z1A08jtfB&ifWXSE{0hY_c%VmC5`v925?mPaLz#51fgp}Rk`x5R8l(v=fJ`YwrplQC z&9$%WT~JYF-yT%4BKklKk%0j6bqXLjo&c&#y{goJE5KKIEIoSw5S)`BQqq;=DPJmr zK;0*3x5W)pgFV6&T$lzT*MVkPe>$Km1;LbV6$#}Gq9UEo(5i4$rCq0smJP#1hI7f; z)Z8q9G%QO99gvIj5Q`j#+Ef2NxS}(em+mRqbJJ~28@tq@zC9iqt9rL?T)i!1zagYo zUQ@ey$4w9a;0Kk~W0zV`X93XC+&r(Nb97?-kw<^9_uv5_noG=u!(qqsbj}uZgL}&o zrdf%#Q>hdHbar;m@9LVEob2xIR!SW|eth%h%>ZB+#+iZskNxrgDilkcb5aTc3_}!( zMZ+|Qh6bl5rZh`}bM8s$`@YWcUOLao=_$*yTAG?$nwpZyWLHfW&abpmkUP3r5b@qGZO zsjI80t6Q+J=Ze*9Mn)%2oH*9p(n3fa7-I&a!So(2h&{CmkFE$hKN7s)sx5&}`ciZ2uIna<%7k?#ImIjMqjO>)pk z5=jx35q$t;jB#$do-;c;<9Y?dVgjsu&XWYLuY5&rK}ttP>Kp8ML!_y0V{KD-bKBve z$yDA+rc!CoPZx06!p81yW7U-#hckQI7A~7Ted>ihCu>7$>B823+cj|Z*bvmY$^yvd z>ak(-ufAn$U`W}aFMoH>TW`Dmmb>qN?3w-R*DT#}+g7jOmQvDeTk?gcPCfSR0|4f{ zB}-DQZt(EokN)O^vCie+I`(ad$G}9$6~Gh_6^A_5>#6Sc#t~XGuW5O>z40@T9E`iJ z>CK)Vt80(uuj~$g?B31)_S8U2Qyc|7H<^OYR&YG1kI1=<9CHtzOTyx=`|fXfaHTmh zoz9p19oOE|yKIBt;?2#o`RS~?yL-!~tA6>xUkC z_>u2D``nLSK62DF4LclWmz0pPa`!ZCg<^4V@N8#i=e*9&GyVOGdU_J6 zZpqnt^_KAEF4SveZ%SWZ<>)W?1(~L0+cqLF?O1{0 zJm1^Z(%MiHi<-|J9N@)F-)QEkL&;mG>^Po*w3LqDx#EggP2{2f@6m(L?(1l#_ujWn zG|u1GH`Cf&zo@63Z(Moc=&94AneV>XKfm5websuiw)V;0eeeIxcbjJP{@;2CL}bHT zuSx+NeR;HaY47V^C}n<`d^mM@wINlcX4j;5`tS(M zxqmZDf3yEojOA`vw`y^Z(^MaB3>*LZ`v+kz1GP4o0!kh@C8%wJg>ApLlU>s}H#$-> zBlGXs`L6l%7V8WC%K_B2P7S17Qb#MeZGzEh`ezUk(c*0z?G7R#~@96T^PGg~=8>!3*~fB$!Xch$-( z>Kht9@jw4)yd^M55DYPG7rqYwxnt1CRtC0)0&e zBz665<@0Jh=c0}01<`%E*De64a*Hlf#F#F?4c^HaQ%C|CXN;=r5>!yJpfxH0lx8zQ z`4o%-=`*EO>(%*|kW({L$>eM-YMQZ{bT02p5}b2JKmb12mKCjQ4uzs3Z2Crc@7{B{ zR0e9IVA~LlcQiLFZwb}J%$E+I8PD3M2gZ^IpLqZ8f0*0Rzx&?vscC{#4kD48wy&t4 z-}}$sKX{^lrfX5hv61mmEIz*>vSQ`ZNB8st*lV}F_0;H?Gn@FEZ#;K4SpXis<1Onu zJDU1OXE)!yuDzxCp+^qv`qn}438FD5`4EZ#6+s|i2x^<5w+q^=+cQUegYP;r1bzmj zf)oR3WTEc6-{}Wy06H5Wn}_i^h?S{x83~U$c7khBfQ<9y}1bTwRr67$;Ai`ooWZ>}~hlvv$qe#>U3l+S<3>bI+=k zD?j!>|EN@z7rm@;&POLE0HCw2ZQi_j05CW_VgG5Xv1_>)iWKXBmc&6|Jo*WZ`? zo4+2Ln9v#Hd_LdP)APrl_{8MI#NYqpKfaRGCFer-7H@57(XssC@UXbt4xqEMv$L}k z0A^-pe(>01FYMWKSt`**=9WrtyYsH*=H{Px^q-Ye&6U1@3_xMfqKhGw8Aj*HMYe_{Sy&Q`GvcXD2q^xb51FtFw7|bZB-qnf<~ulkmg;fLsC4 z7)hi@qz|<*Xl(@P!}#36Q=-r{4ehqtCyX07n8Mm;g$_ zz$9=5HiuFPvMvCJ=6SH8=5N=|hWxp)l)rk_tvjxLN64x$&42k_e8rHl`|i1S@BaO- zbbt_|e_-HK4?Wb<)O_tV*Zk@`-&tE*yL9Q&EnBwy;IYSkd?}XTVtisEolY-VvP73w z4G*7-$Ic5gD5VHdFn09VG2i!}c=E}A_`AP<$J^ij=MOz3geVjWS8dqvM<4t6!9$1s z>i_(Wrn}a>dyjl?&%S+1%KozhbBW|n(_36h z*-&49=UdtIb*E4$Uq*nH8#lmuc~!tP8XQLP1v?$(UyQ=nPWpwABU)U`(5idt(u>h z%ccs>+)Q#RTeEj01%ordVP0$WKS&;Qch+VJuB-S(d=2VLLUJuo+LUd8L{(IW$E3e$LY18w2_FM!;ODW^=_(wnZ zp>Qbl;!7`my}mQ2 zuim&xzp50)A`!+}zECtx(=^R&HhbvhL+jVBL&GQ*3mew1`}05j)W7`e7r*w6Z`ii| zN{$`?7~@m3bI1Emu3xvlsj<=Z+~ITQuDWXTrAMCb?|300{4@u@iuOz8>lvbD2n41SdA>_TQYn&U$fNuV<%|Jirb#tSWeYNsOeK>E!SPQ% z`lnYe>G=9TeSS9K&Z>BZMY9Fv`X2cTg$UagXTTLmMG}z%0ufh$2;N1+O;vvIRCv(ZKv?Z z*ESe__{rTbJ#mH~{zm`G?Jr%qu&FT`D-@={S70h21wMiFz=*+uwmY_}d%Mp~%*{!& z<>qa_wszGvsM^*2H#ElByWaULhmIW4I#iYC5x`(<^_5qerkTyzn`f)vt!5QTCJ0C8az&GQ4ra#&9@%>h$Tc$;r#E-=<-NL*dH;R+lx; z^XAW+ch{YF{*=eRiuOz8>jh`FY5A@ylsu(;0wBf}M*u(xN=e2UNrk|Pkp!+-*bMt# zk$hR`ncs2kwrfiHdt39y-qqjUb)u=cmeB9L`u}I|z2oG%t~0@N!;6(ecXdXi5s3zo z34$O%0t9oCM358}NQ$CFS~=Jr2WiHVWqWtM8hf3_V@a#AXwS+@mMn=BlSG092_g_V zbT>NZs;*r1@(ue(bvHqdq_w>=0ZIJ&_v>Gw3jN*y1ws10t6R6uJNMl0eBY|>lzDa} zxA(Wd`k}kGjpgegFm$HDafgpheB$h5_ujMh!P~alf&BX8M}BmCY~|YS5XGlP=e%M~ z<3SA7ZB)Gas->+ly8p%FC;J9Z51`-r%}w{-wOW4hv5{B)?y_J-{+g?wdEwCESC65k zJHSMzA3t(B6Nk10%oahXfFv*hgoB=fWtrdDQQz4#etsq&O{~4^`rlZ-Y+Yj@e@&|M zKMN~Xthn=*TmR{s-!LPQ#U~NQrD}C@YN}`H(oGvTe(<69PfSfc_}=$6UOjU3)t^d< zc>^e+Cr+Jy*E<0KhDSzhtBx1QJA~4cr_a3SzIU%&vEt;J(}>WpVQjnN$`|&(VA=H# z-1(4T{BOVXWsI@sIE_D1RdwEJ`SoZhh)j%6H2yg>G~~L@FXZO!`~Excxu?+(@FwGz zI@T|Ko#r1nKxV2QV*z7+fB={vRA31LAqfmi%y{E}OORMFVS!4hrf8mTLnss`n$Df5 zOso#_1yZZKlP3+(?z>}ew0py=ub%k!W8ZRx!f47zIv0d0lp-V;mr^JaB*A=vi-|B2 zLLw;}5gh;ol0-J*I9lkaU3e1+VF5@Ag0KW6gb-3-G+zf=XyAHX#J@1Fe`7sokqrsJ z77h>SHJe#jAmq%uRtt$S;<6#U1_S|@f;1Kx^JcKZXQEW`s=kkz6j&f2z7Q45(iLQ? z2BDg5yMe^LE1P5hub!B(TuW26P$Eq=Lk&?yH)gYTA{E}eDRbi7m~`uCrf=2yb*>UB zxE4Zgx#}xy=zVuxbz(I5=cis;xjwx-Lsms+4h7j)j}1l*?W&Ed&Wui50p7Z-t*bRr zF4xof`si@(Z@=+8MB*EEuSbmc=Zki}2D!2x35{3y@BZcYDpOfllBod30%?Y+CwLpH zRP*IcZLqw{eBn&q!6w0k3-;JozjN@=vVp#-+0yC%=jzy8Tjelld5?|bmU#`9e8Z+-hagTupARhjQMTtxstp~_;_ zQBep0=(tbnw8UOoEhBQB(j>b)Bl}`GJAP^Apok zAY|i2ny!PC3r3+p2$k^0TSWt^qQdKi&urVi>dGr`yy3=Q+%W$e@Jko#8y|inO+^dt zM+g8ao_ONSNU1!DKnUKDYLN|nc*GmuJ_HR?I~Rbl1kM60tZ7_w&~Pe3oqEmCjFmg@ zb~fDLmb2Q(V69dQE!*Z}Qkb4J+_5IpFd}%8r%p}SisYJMsJfw1f-ph|W7=@4LPAQ6 zu>!z&Lr(?~Kmr;)Q9vaEDLHwqrZ3SvGpDf@SX?M#1Y&+8;57rn*Vs4c{(#MpOXMbwiKEh@yuhR3iQKpj8{4t*n-_HD~(#R7elJLUv7e^QtxG zcwcRLb~ao(<+}QhUqb7y+FcR{GHUpyo3EMmrblKgJFeZbbk$}1PMnV?QmkO*W-DWJ z)xhzb(W6(lILWTdpBO=XCkOA_v-VTBZ=kwbt$L^WMnCZv-&oy}TCuHXq+lPPt7VJU zwzPpeGB3+EFyqUv?63#+AN$9zhLh^Lb=`>j$4-sU?mOBTmaRLl;mD|o47f>f>(FfO zxqQj4%Q8bVrL$QJ92c+xW(qcizqo!v^G8q4@Ga}^x@Gr+vFLpHbzzWyeWQE>sZ{Di zk39PMKl;Lj6HnLl=U&)1H8pkZ?rU2zEg&IZDC|G*^2yVuG*v?Ygpfj^_<#S8uM$G~ z`Ug~92LM&qjvP7axn8+k#u%5%<-h!!zfL8R2M!;O#A3%z92Y{=t$GkJLX|K6Uw^)5 z_jOln*-S7wc<9jge)t2&aZJqsPW@bIB%G`fHP{<&`zs4)--M3{{6GF zvySV!j?-X*#v+jqJ^JXsMhf&l0+*uB<e=PZ!*Jf%!a~ND>UXW`uN2)ik0|gb)a>rJcIZT|M5+B1jxHupsAfN*U1t}mshvGUHVw-08W7tV}yq(Z1t5=faV zS*c9AQmdK}Xw9uJ^c7)f8oFAq-L~q%n>W33cIHc8e-2D~&$a6eO)1vgk_Taewzup5 zo7?81jX(|P=zxi*SAOXux4rA_!&7skBZcDZ%;w9}nG`xVR5iMb2Y7d+k+s8M^svp2hzx{P|!0#lL+2 z`=JXeIRFp@f$#f^*2jdB3&W)l!f_larJ^aisyF7g@B5zTVT>F5y$$ta!!RhNZ+J;c z=`56Jq?CqXG*0ArE)Ur2wgjZqb^XE`4qDJOCWJILS}#0N<0VY6X@*!3xULHTZ#cpt z77v9GGEEa9WY_DT{OHHt_NLQs7V*oM*Q0rk;QUu>vhF{&zyEvBAKld+x_xtElndtD zt{X87wNXe%7$YeqaF8UB9B~dvU_c>N1y#qG5-p@tl&dk{_d|eu&&JFH2?!$$7#PEZ zDu(8BS@UU>QKBPNMODvZLIymr9agK`HNzkP6k}c2bwgJb6|0mWtY8E}0+tjZP9z{C zkOVm|@4g_;BSpiI!(-t@Z26kYy4N=MZnVRhW&iNv z%*)RmPNfv5!mMJkr6sxT`Wt_+f5`Xr@v0mcpDd3K^+vk|lpU+KYwfaiTdsKiT-OAn#~nZGUB3zVrHl1wF~)I#C(mX7`l+LX!{ZU)M^%=?*Z6CQHF+v36c?(1-1ecglLJ_8l=1L{- zNJ@zd@&&PvIMRy3im8aH3J6fytY(DZE0ee$^z5DPWMRBm%c507WdHOKkwPk;Q|Pwbz_)h^%E zTguHY%Y;r&^*LV5)Xhv((-W<=K%5$yt2zv0_1?X=NP?rujz~B@J~}*I3C5>cIBaac zynD-v7DZD+x&Z`Ejpd&{JxfgO?)4p(%YJxb>g?o*k(-02I7BO8L_onHRF4`Lo z{$JkT{lppmxv%v7=)4W7P=d*Gx%&Q@N^8QHE82P6|CeJEkgb9mfzGD;uPSX%OwAUo zNNnky*Z;=q6`LD5<6G7FpM`il{;>~#pXrD;ro7PXXl3>ee`F^1id*R zpZnbBF5>C`t!R|AB|zR`fBw{o|MvKPH&+a)SR<5kalT+5Dy!3w4n^b1u+bDV0TEA9 z0Z0#p&1edzGxbQOL{b7`!lPvl6LrCScKgQI-FsGVx$;U+QcAH#6fP0Q1QUWW0gMOx zPM7#a!5csP!l>Wi zTsABS32FRpSUdurKa*%k@cW!u9wS86i14gJesVITD{Uj^ozq^-85wuT?zT zmY5i!D2g^I(dPcq^3+gvE^nWoDLP21lrC#aHMPc;G(~knMhl)yX0BboG$_rKU0JlO z!QttZ?PjYwclb#Ez?gr2aO(Tt{h?KytJf>T1Lw8USXV;1Y*l+8*wk$4*ojkiy|C-* zEtbuWoEp<~b$F@(gv^%hhEr}#Bbp344W@c_HeXPyvo~}GZm}>rX9LF&Z-(Y%qg(3{r;lUKU#pA3u+Qpq&~eP zyG9$&R=u{C%kR4Lx0ZFUy>N$pVZ-CCaQ{X$H#et~seSwRQ%ZjgS3d#g3L$^=2cPTe z?7X;Fa>?iQvO#K`*VsY;4inD|WWV&|(_{U^VZ@29OC&KO0)n_oU&$Aszj99K07-x_ z5DB`3WD5uZJ_kPl1|T@75~vAb0EdM##-n%kR(J>@QY{u{b7cf_+43H$s3KqzNd}lI ziq9D+pc^Vu2v7_}5`r+HO!!1#DS;?J5RwX36_q25FvbdHfrlmM0xIt(kGRb(rQRK*(0EodV zVWZHyJbCy#{c(yT)O+!0|M_V`kkAZ5lyEjXo1K}aikeC%+?u^_-(dn|dMdkVYp-eG zfsv`nk%3GwHZk+HD_G$=ob$`XLDzB@+;>GZWX{#fFckQY7PhlMjF*`?`p47&jY0^&ftfIBX?nMV=M zH0jl{>u^Z~bv^0X4ilge053N;m=8x%U1nJCjCz9R^4X(@d_5d)Zc21!;-~s1PL%4k zsuLTYz}(5sOh1`pwi8Vy1!v54Jk3yBsHPr0TO^!h$J$b@Ml(^_bb`FXKvqm z*A3UaNB=cYC;o-w1Mh!$CY$~7bI(Oyzfb!s3@N2$S&zQ|{kPtH%f-GHfJ;Bt&sQ-3 zemU72pg4q!H{0#R`fE~R8#T-f%sK)SzRtfa&kH&i;M zlnudpSm?T1?6jIE&Vxh?rDnNcq$Rij!9Y<(AWJjZ{N$(;@O&9F!BmAJ1eGdF#%Nnh zSO5qn&6WryM1ruafMO&u*cLBaK_F4hwj9S|vr{4nw)J+s=kA*i9XtHpmrfeVm0=}l z&4egzdFrYCu4Ox=QcVb5*Xou_6qO4J2vptlEGu6u0)R?22_QHZfg%y{?KuFL(e+$0 z=t+jKWT#J_K|n3rjinQ&nVuUT)I*V;baSz8>pJa7CoISR#kV;&4C4X1@K(?6kP}B8$?%%m>?}ZXa zzlIfwe>X73pZ@qKY|A=$-CM6pOrPK*{NW&DMY&*3|9WX#3fzPW}0uz7`c%H6$y|J3) zPDMn3QP3cgFt%Ub+0~M$THa*dJ~Hl{EV6;3$8jjq)XEffcx)=2ZW^DN`^vXo5^6e@ zZc>bpuHa}mY=lgoF)4)bgL+*8V3j&5Y zu2#9vgpi0Rh!CKZCZc8{sXPmRnmSi{)Rw!VCC?Ums zxm>DqfjEO?A|8&nOwZL)O^Fv@I{D%&WA&_Ioz&K> zTeD-=uJcyt@sm}kJAio4%H-aSZKg`5E5Q@}B`8z@Oz2EKbd7yy%izdtj+o2ecFV`F z+;r2zP&f8V7G~&M_}4+xv@5q>*?+!&e0<_(2~7TKKma)P`faz|`iYNz?BednUWiLJ zubu4-hAWjLRtyjTVBqfhWt|~{2*O=WY7A9Ivd|n0_hh2ElEo=`WwI#zU`2EM z%Re|Vlb>bFuDYzd&9dwel8T~^PEYEXfneZT6r;5(TB)jxj?WQ|RO>a@^5gM{6ha}` z23dLOE z{P_V0++;G8EBNhAYD-2Nnec@~nUsbJ8k=x^%hl_u%lt$%5)SLGQ|N3<5JfpRT&vVw zP6frZT(VlC+6Uix-QD-y*S2EI{+D0bcVsZEN`qK|glah`PUmdTMF=ap!WpBAiZMYL z4Be=f>k1C8-@Um|t{gu;h!DDA&$i~4^yKUu1i}vj$8lng<5<33uVCS<+}_>R*%^yP zN)?vRR&&|B=QtsQB*URiYj1pYAZO{_p)O_T&gGd*^l)F@(K1Ft@9xn?r}G=vbX?n$ zLJB!ORea{;3|I`51gwhx)|T8FV{%}+(%gE*oi{$()3syBG*{nW=lap?qlxK#3bxyWLeuO>7y(`QEV|M=?pmro2- z1_w)}`Xp7PVG4{mK^#*-2vHOalu*=}(ku0V2Mh$tm8;=Ibx z0S6?q81W#mEUP6(SRl1f{MFHlY2b7;oQ@dniD)Kj#!X$-NKbR@x(zFaW~%42m53s8 z6*pU9t`AioO2-?Azm)1(gR40af4t)h(a-7gb~rG#u%C$9iA8+RFI&Qlq!C} zIYwe?#*2oOWI}7pgdJa4Hs7>1uIp;88pL9nW++b0%NDIloz-0*Q;j2BtGOFjq<;S+ z?|#QSAE4MK*(>1w^`2TWJ>k-^c~T#g4))zwUo}!LI7}I1fFMER=O$H zv!bWDwJFn_zN~jyQ%h5Bt}28;NCFn2h>=Lf^pMe%2uDJC!2EKxR;$`XSK7NfR;+5h z<;Lwuk~3!qCPru1FN@xP)B1tBK3q4jlI+X6tGk*v^kl|nOEurw+7{I{a(FQJ!qH){ zIfRR>_$+qT}h_wJ8=_#>AZ$MjN&^%Cao0FglR%)jZH_ZJ5Sesp4B zx_@|LbbQj2xo{{j^eDoJU=R((Uht9Ng!+_%L=Hlrs=k1Ht^$q^On?l4Er>j-3b-5; z1OyhmBM{X5nj7S*L4ZQb+mn>yiS{(J)o!wGse03mzAH?h0MLL?n~Vb2S-_n%8bv@sl%?|MS54>2uS*fU~9g z;i>ZE;0!nbnVz1l>gU!?8$o`mF1K!a#~s%{oQO9qG-roJ%1de&B(JAA0{KmC-kFNz`y8H00_>ebOnjIaREY-7S*w(Zt zB}9UYz?2Y3i6svZl7Mu?11TmLgj5A1Sql_URcOcz_y9ZrCLj>t_zHAm;Mc08~9t1GYKE()0OchKpP)rB} zBA6}DdcNm*enbt&qw!=Srm4D=lyd=?V8jLD2owTR0K!-WkOU(|YwRlo<#K^rm9QR! zh#ilchN)u=iiU`wk+9a@5}%xNeA_WqQg@gg_>7@au@;G_R^XeaW=J|VU3Xkx*L2tC zDP2Bz_s)CX`|f1NW#yXd_;u4Tr*pGJQ3^%pU|((dx*Cc)dL#<@5&%dEt*x1QApL5s zR;?k7HL5C7MF>&N+ow}zakoo9q6C>^5Z9V?A&$5hE)LMaFL%lSA=2#GzxVW>HvWQ zBn(|kZn|3D)iq{YZk_A9cHX<|irZCH2LLqhGT(UcD-xJ4E;LR1txtVAlWF-Mk9|#1 zl#3-1^9zLQxtgkd`jel!{<`Zf_O<+UTmnNZ8$GZX08Q7tuO2#ocw_?S@}uLkgP68t zny5gR>zER9tm>r+_M}h%1VS7nl_)?`3MmNqASqxA0bl_L0VO~%_ykN7>UFRsm|+Pc%3{7Yl|7uRuyD)_83l=} z66P300^W?V5CRbPq!d!BQZfWg3IicUN-hP%vI+tS28;nC-~a-ENl+-n45(Uw5vT-^ z1k8bGV1|G*@Vx%1d|V9>;$cH8yDks7t}42rNyf0CEZ`;2g@{5h=2C#J0M#pF#ftCF z#v_o9WK^1+@&MztOFAkeLI->6_RWV*&vvg|7E7jHJb7-{p6#cH^TWfl*KX?h&U43? z$LYOm*eroM<9XYfvQgfnWvN!UbUop^j+D~#eH0*{VS-S=xL}e6fvQp6G(kwfV9TIp z)q@})gaBhI!af%WpgEI~+#eYj0!mYfP&yQyn#|>LE@1E&a0y{U!HC+9ClLaWnnGjo zsON+425rg2Wh+w0&kmm*Dz&6T%Q|AZs&+S%kfA9Go+((mMpS~mKxl**i7=)L1!U+N z@Zj1l9Upjb?~3)?Yrf)@D?;*ybWhc)06^de-1opVK{ZRG4lEdpI&Sdt{zI=fB%05n z8Hh@yvUK@U#(AYys@BR)>BP=mo8wKXO3`X*)>F*}1+F1x7|QbHmrYI8|K`7cXLLND zYEHPeUCjBFQe|=kOH9^A(zWKM$!f{XlWRiC@UqBc)`5x*7=e<86^Y-!rrs0HP3En5 zV%e=Xd~o^Fb+Di~w5Xf?D^qH?q;SnO*R*%Ef9WeEq{vGZy&%Z8zQW zfrlSXB@!3=a(*5zLcPA>hl(ypk;cmIe|zcdcMqLXv$LlMCXZUan@m%UhB2ZNh!E9) zQz@egb%o$kA|w@rSfjm4B7zVSAh4tu%`pz;8n_+=8~{KiKoD3qFa{vOP$6h|V`C5! z1OihB4zZ}YDih~G>P$>b&3Sc8V6Eu#nhOZ9rqUHr=oDjNQI&S!NGd@E1p{ZGYEW^l zLKU#MtUbJWO$Q6Sfs@D14~*BGAdyU#%HFCKtwPhsrpn!G*H7i^o7IVXH-(u~CMGeA zAa3&Zu-_97R)kqv6dbC8LJFm-2z<}+ynt~QaK=GMLNEYO1cZ_rc%`}}1W+lcloSK^ z0tG=wd&bl?&$0s~yIa#MI>LivxopmjgpsO(sX#cSxvsQ5k75K843i|1reT;Y;HgA- z-HPpQGTGLe=;?~4QX#;as%c0_lfs>QHht*P z2iws@DM^9--SdcLMTU+np}C(>V(Rk4DYT?$zf`7yjgn|4_BPOj9~PGiO;f zCV>l9t6Eq>XH$4}O1WlTTT5F@q2}6-Un7g}g`vgoySZGOjXpIFkq zVzC|J^(qK&;Xee)L~{4FyD>ti&z|)>@8`&(U23o_D;|q|t(|{8vvl>79;AORYJDh78U>jw!KK`IIuf$JsBP}QeY z53yRw6L>{ekJQY*Y<*(Zxnc?3*kQcyuKWJ`SDbxcds0tzwzh}UrW=&AXLAZL3gy&(iwl?lol_Szh3Yz;Rsc z3RRcBsEc|-@r%D8ar`nI9ubYqEv0BDJT(Di#6u4h7}_u;s#O)2I_gN zvo+b>8Gib?qq&N|X|=v26|KAC=wR*qcxhr*VT{F-(N#;EidA<*?{X~t>AYX{>Xl-t zr!DsGTXyWa{Z4FViX}_(KoE>TNG2%8NFWJRfB*yx07Ml)y=-ZGW?*sRNmyVIy*5D> zwwE!&b8~a)WV+E9oJk~7QEE9pgjobgOH+F?8L{m8cmDaMC!To4H1(F2bZ&CSwk)bD zo)`FzLlnBIcYRxXN5Gg{twdE*xc*Ro7C42bmZe*?Pj8&WUU9ri*RH+kmR%3TqVdJc zcq@^A(?BVC--8cs-n{v%k3Dwu*wKb3$;G~?p9kOf8Dlr>+4I1A@9%7Hzu1@aufj#h z>(PAD2K|NlmtH#i?U#<@naQD%*#lKyCX!TFfgldTl%OM26*8kLEhfo%i~!Q4#0W`* zgcO04Tmo)T#--E|0)VK*S)YTBl&B^ubtu&V$@yXq02l-$0WQE)fdL?Nc}t?VyEA5n zN?xGphC-BZIO1XB{A`&Kv^pKy&>c@i%;OWaFFkwC3k**;fAjtuZ@+5A%ln>v|2;Rf zh&eeoRb=X{G)@c^hUdx}^ApX9jZ0J8FI!R;R7GfDcr0+(t*b*HzrJN%cYE107*$j~ zOr)Y9P1h7If?TmUov(0!fS6CbJf04d)~0y>Xucz*SPXPUVn5(QCNoK)V~_a?!kjZ5 zBh0zvqFQm+t?byl_oj3@777_1?ak@9_UiF-!&%QzsUHZ5NOM915#+0aONjtdiBP7k z*)&6r?X@M$Ro$^ehtE#rJw(;9tUo?uBZ?T8fe)HaT|Zd4yd#-P6-#!yxplJOpP#VH zrP7w=O&|NfJy&0M8z%|dbpU`8!h}Fn37ckNE}I?i!>Z{qzg{h$ADkSSt*c4BkS*Jl zxoWxihI#P@E+Ya&F%}?v*FzWyDG(vZOmM6vQpvc+H!W{nxujY8?tlHuZ!>}0+A{e< zpheC$IXdf>hH$1aAO z;J*(Sg>#97gnu|X{CkhTlph?VGx;;K#e!-yC*vwc2oc1&$*E&7urpT}ln30AndZ7l0*FeBK?=SBBMrxq>K^!Sw(ECmiJ35o`d=UH{n%ZXYi4w= z5+D_0Ma7)zT0}RsVl_W7IxttX001G#vE*1?Ysw@CMv5Vmw6w%$W~ylg`_$wCDXD4L;S42F(%Lkk$_x_)kW z`c&U|$UyJ9W$Pmk-M4(*)m2VB*To0~l0ty48C0@?;gN$cKJU-z%q!}t;M2HMU%o}dJo)G1U@BZ-AnbSzhcrwvfFrhi~?(6yOJ=v+; zT!2%zT=&7`bOnxSAKSHje-yR7a?DdmRCyVtB;QLEHT70XnVmN?me=)}YvGj*+0aJjT& zan(>1-zSNtgzMVO^UQEUAjR_8&{(!wcW=IG`SsgZ+rC_7;`B(#T=c^HzvbkjDM|O-w5&;q=be`qXgiB zBS0ZlMrmDQQayLl?d-`nwUtX+#?di=s;QpqGT%4DVZ&5|fGe8T)zK19CHKE@V0>m8 z1C%S}Qq@H(+aKA&x2ALFXG@Xz^1E()q<7U;0FY83K=Q3{e+eL&Og{3#58iy!O;0`Z z%#%+)l`j@AZdJz%0_J;N?VY#XcFUgYu1_bE7wby?|KLp+zIjz*K;Q=OX9q?<^OKih zXc$ZigdXQI9*+vnvlRz~;|O73bX7-FB4+-0sFW)@5?WT?noSEIYd#`0?zWMkI+i$(&cYgQdA9&w;-?3-?-s{_8Zh&x_Ff@UcKxzW( zg{<|=iwDOhW`O{q*z!Rl>2o+YXUzpVE7u|s7@x>jE3T$%Tet6g&j)^2vU+xABtJcR z_RP8CuO2>q?(E=rE}O0H+O*{1NAFj3U03W#Q!_ElXP@3*wz;7yk&x0H*Hq-xd||n` z>i9ja@kc&*AH_2uDMaRFVMZ z2rG*6;d?hE!sxMYK7Hg|>9>FXcVki0vV0)~$0%YN`P|GaFCW%4J=4R{f9P~tGbi8#M?N4c+5*2?c}6;oyBz*xN%Lt8>?i_#P0)mk7m&blL7 z$>kt?P$&cv90?%+se;GB^FY#vclEX=&2zK0!^7G2nb^TU)0RZMiiXJ~K3tovkp1pP4G0$@`G2fJ&h`x?}Uw8!vA?bY`-zWN%&H z9bFRr)-$iRbSwwSzx(2e)@9osc;tO6mX+%RlSDxX5d;hg$25~Oe*Wy>tf~V>z!(7V zauv>(k&Qwcw057m zdw1_Hr!<14G-ApAzH{II&f^H6DP^WiijnXFYB{_fa0TE`KL1-gZ`_%ions7w!1>3& z|Jt!LbDF9!4ou2SLTiqNEY}gLmN4{cp&V;(N~cpurIzKHNIvq8EpxftKRkWrhTCqQ zoyq?3AO7#3|D(?sre=FA8ZpnFI(7We(YCIo9ZQzDednFZ92OV@V2MJe=>#5D>86!U zA=R7e6L}AQR&13ZK?1=DA;g3P03<;GC|Y>wl5}%Z%MtacSFI9mw?+l>1OmVyIcGvj zFK`7`G)e*%*q+a_Im@;cjD?g!U|o|YsZGokdoR1`_8Z@yN@QL)QQyL)hnAL>_doQ| zz4zX8?D+9#fBfSUCr_5ERfLhIYX1=;1X4=ISP%pNkV&Vu?!Io%o;|&*FQe)&4Lj&( z;mueUAvv!;50LxJl_QThv4LV~uomq@v7>%WczVE;0EsaqDOGrgIN7@3;29xX2&mQy zm6{|fX``GvugN1tidVs*RJ+@kHcyp5hLZC>9q zGcho9veKo850Bf=o~~YhMc41&xAwqukM|!Qg7h+IYKB09)b^jv?jI|H=j~Y8dUT|? zB(1IQZYkNp>HZ-g+S;qH{pOSVmu@Yu+5S+j%*lyAGYksxB}9#4lt&0WA52Ch#DK@=0Jv@|zgx99pl{i`po+OQ2_(8KKz zQ-LZ!_~xIC6uq`Ejp~Z$`2;HtCybDC(SLC7o;%{T33K`0s~(WqX|`2qkT#JJ#`d5(tw0@w9D zZaJ=1w|&o}hzKb#rBn$DuDfmXeb--epJ_xExs`9>5=S@`-g)(oomcOeoSyDGckY!# zhtBq$%Vo1n2to;=3PI@Km+v>URD}>h5C|bORqbeP?d@HAB!#LN(4 z5)nLYSyM0m_~FiYVNm}4E9YBRZ8Jsv^w8+AC1WZHnMO%45wM+0quZCaWRj87WxFso z2ONW7fDwd@rOn|;$cRUbeBCaTYUxaQt8_D;wvMi6R+&PYRk2o+IxD^+35kC z$lzEj89Et^&sLYm+dG!Le022gUA>8>$V>Z=OncGx?zS^^36mN`Bl}NeLCBZdW0~Pv zsa*QR?#qf*dpcK%MnWZP&a&-cxah#&29Dm?+G>#2;c|^lOuUJHjU>Ts$-!5 zD6uHQ1Om>huuC3f2ux)AN&)55Ila zJKnzIrF{nuoah^$EtabRrg+Dimf!sCkEx1^Ji|;xz%ULSe6??^NDxL+v^5*eaSedj zoC%4V;?ZO}-qMm*DJj&P6;0`NOQSz}{&>am{?l(h+`D=ET&a#J{^X}W`nUgYd-ok4 z*LB{B|2^lH=^ZoZy^#b6fMBO6iV|fN+OjOkMUG>~C2@pLTY4SF4q=@v%TSY+Ke=cXvq=0Ju#V;+!Bc7L8>$mka5Y)TW}= zYyd#Ow@Tyy=#{3-SD!6cUkSFZ&vFhR$udRmYQ5lcA!ei2_7)p^biK0m=_m)vxkNcJ zEn-twK$fwXFJuX06qqDQiKbYrDRAe}_a55wMoE;xDcSrK>S$~0XluLu*s)5rIy*Nz zH#>J}W;&P4sr9;U=#U;=dn}GW_w2&@Ojc|Q{_O5{j>W2u+Y=GwaoY@< zg0b<@(P-Fjo5tP8ZmR2gZZp{!YALJ8G_~LOldsl2y|=yjZS#u@4dcS!{^5te^yM!} z#Z1f4kfE(UulQ_F3n;~04M0Ty@7FJZVUBET?F_q~tkrhxEW2Vrx7}fi(ozj=Joi$+ zFR2+&QlVId1r=E!`!EqDq*SV6r5cQdy@60L95zW-Q#G4V0FHnQA{MYf0U^#PrC`|_ zv4I1^662IMYD{nZr{DZUFdFhUHQ)Wf`)Z|)*_nmspMBvAfAfXgj~*Esn`F8sAOyZZ zDV=)g>yOwRLSCUQ5sLZ+NfxRNT5C|ixTCWr91D2eo`z}d=nS`orLR5;(^*vj03ZNK zL_t*iQgb5l;g5YN*4CxeRAv(Zh&ILE`@#2qXj73JMO%cJ^ z&4DvS0r?^k?hagDDu6fO@yM!XqAN|=V5@Gwb%k~-@vr@Ub-FG9hhW&fnyS<^``tf( zr&1;9hFeC+WmCjCXPg5dggJ(-iMf(n7DY+d^{tQ7*51@p^CYabrJ{OWRiun!9}Qv70{`+L&J6oJ-{v);Cf}_9PPB z97QeeiN~eRX8i~lZ!tGFE3j6T*7e|q9h#|0U~rB^z#;@ZOz_mKx*(e>W2OMXU;r8x zB802eUpT&#(Q0ySd7{(T?5n-$w!YPpWtrrGJ9oGl({w#k*6x|;{u|Y_R!dI=+^U>h zFSoVTY;Uvq);AyTXo*XnfNj}K^a!HRo@Ox^DL;$u(O74`PJ zkFV9m3n}3ZM~;8!eQ$d2&;7#t4jc|geCJL+Wp!=q+OhkK^95L`Okd7Tw*>s19p?*8 zcODt7)*5P~yqeA`N>!;RE5tQ$%e^hg-&{!RwMs6RD_3hos}Rnj$lh36^?O~6aS=ht z?*RY~NMKxWNiNw1z^P#}LM%c!Clokf5U|9t5NU4ajMVa3K@ff6?gMx2-nI9phElon z&2JZ^5JDmnB|z?%Pd@d}PhAFpmL{LiCvre_om)1Dk|&V}M`B*D&rdCTxH(8k?aTjs ze&6n$_xc zmYpt?%Zl!HxlE0B4UZ`mqmnOKRs{pGYzwY*v*w&%ISX-hAPB$q0$>_!q_1mkwwB&3 zs=mI57R){c(JJ$rZW-goUu=>+`^ zBM=A#0)eisuKoM2{Qq*!HBGZD%c6u63b2*+qDz!ym+bk8KjZqt@T1wr^vZWtG}aM~ zb?lnBQ@5;iW^Fw+UsN`8O0H1L7e#kdtR?7ccKOkuPoL~(x~>?uwyD_3ns=t=U$4q> z=Hh}~);&o>3>pX_!7xRJsMqJFoWHbQUS3?-Gt_?fE&G_7TS%=w^4#X0?cMhs8v61# zPk5rOJzc>H#g@hHKDKSBBXoA7ai+-LHRKy^4o1UGoPw%p7$a)g7NIVe+rkJ5*zXT+ z4+XXjcQrKQ_<7Xg zZNw4gm{F>04W`vG;9vj4KjNHJbE~2xyS*VS;)^d`Xo~tDxO=Z!RW?$2rD`ZT4Fvp6 z;XtA#Az_SdYp5ff&1PRXyKv9(+ipGnCWGO+TH_dT%jAr6kpSbCR%aX`!rdOXUaukm z!Q-<0yBZrT~ zVzD2|6W;M-h7j`keE&g)9sVn!Yh}_OqjIH`E^MrBET>BA1tmooalL(IR~$_j?I1yd zOJE4DA-KB*2?V#`!QFib4k5S)2^N9}83r4M0S1>Kfd>x^8rERo033oA!1 zQOqRsWI}Ejfg7XJO&Y;hc=UT=BN=3udhkdGsyob26v6Cru%{$4?iX4`;{1 zLdWsY83@QV~irE7UYTVdHCAM z(0Wa?@a+SSme#n&IEt}kbapzL9T#3jNAT6(_p3uWW&EqFtotJ%RiU<9oabs6uwJZQ z5m%7IsBg88lvVb{n7CE>SH6MB#QK)}YSYY%WHwH|fTjgLHR!-@quxBUY=pNEDZ}5M zMHVb@oY^QY=>562#is$urU-F@%YT^im3PIY(5C(#;zq#(I9QSld`KD$Bm-Bf@51pM zOzyGugcG)=#-+|^3uXU#uQ``-d|)Dd!Brg2iyF;nUE;a_@Mgr9U3VNyqjLn8nc0%ZTPouzB5p(9&#PSoKT(6Up2sOV)Q6yB#TM2$#FdF0GRDD}ueBRO%$uPj& z{Zq09G1mr3;deF^YR=a&Y_xBk{XUdlGg0c;u)^s%gw)>GE`4rl#>DD0G7Gxand`29 z+EoW<=+U(YT}MQujvU`1W6D!}mFe1{AZtGU&IV2Pbj%1H9rF6$XlhJrfGo^J24_K4 zAdEyg@o($$3ATLXpwHT5zeDGvBNwT-f8B9?#bmwW;uR=3@IAN2cGuw;mVBWpD`?)n z`0Z)WLr>ocz)Ptk}-@c?wU29I~%_LqvX-|v$_o#*MJ_GDq_%`)WR#hCv zW?H-e!9QpJHIoo40+5HN&7ez`Zem*DN+%R?vpavQHIt>6XodqYoPlHVEuiuUT5bO8WiCI`<2=a&Ik?_8%ybop|A$A3-hF~C+EB{@rJn3Q zOjkOWRx3h5L5b9mCO)B;4!kI#e^h$2L;IZe*pgh#7$pYSrm+D1z=A6lAh&4y9rPT6+TYTg9wp2N!AwyQ)6#U?`eq~fJmKAbbgcNU zO|+hOFT-mKtA5Uy>~8G7!ciQbak%okCG@X1_3v}rIJMTu`g&Tgv((^Mpkf4AP1G3% zR*;L40?1fAjTJKl29zQOd-y-W=tCYR1jl8nKXOvyj-`qvU%fUy-L$26EfDY`6^(+E z8vhx?>Uihu{o)ad14U94dT~YcbQcr0TT)?fsMQfrYrq`~{AEXm)vO`r5UcYuN?RVM z7lm9OP|0uv8LAaG;)!8c;xOWm9(t*Lj3Oz{N9K=nu{cnqTRaU82J<*M);ZYP28{RJ zjKvio-$ySjNR(QV0nkS3)OD*3!UgA9t$20_K7z@{j7!W*06aRrpG$frQLC>qLLDF! z3GXQ<_u-*O(41u2fsS)41N`-+L?cvD4O{u9e~OasZpGq%GFiJcJ26#&^e%W8|8}Cl z06PH9o;0wmwI|liI9~x_ex9m&Z~1(2fp5bObTQ3p9-sU&k9Zewt8aam7J{+3GO?vR zt5V~yx)Zop##Dw0K%1=#kJYH!+(XHJw#%#_JUZ@=J8y1BrZ`QAu4oY2ZwQHjKb&Ukgv)2Q#;b~8a-}my*-19QtO)y#^ zq#7I}u>7BMrU_hstfpqvy_AAi^G|Lw-AgR8`Yn}Gcy+I!Ozb{1UGuknWpmn$gWlaO zSMIo~XaUEi%}vm&?AJ_M>srIPhfyAbdJwXvAO zhxYbo#>p?+0(o{8!eD+fUV+a3{;dX(I2x{>D8|UQ+xcDtRA};IMXoMtK)$H% z|6Gx}mw~i6FDSR=U_1uiC=v-zFic{b{HN8zb_E5>g$zCABvSs;@#E;~)a}bR?5m>% zVU!=lJG(GT?udbG<{ohr0#@MLkf0!O`8uk5GXf4~-uLhPmu|DLIa-yZ8BJ%{6_Tn< z*zF~d$b?s$yW3;=l0L?74Hw<1fbWV&(a`u*shAVdigEY}`E;MOcsSm$% zWiH?G{5~=S9MNrXPGDnFmccDrlZh_bXs@;1|LVn0rU+h4x;2jk$G>M z0aGt&1XnVngmBv#)VeSSmO>#TLT*z{>UzxNfOEkLbE#9XawEJ(mp|S3)4O+cyZf{| z!RJLJ9;Lg~lmvC^UFdw_(P*E#kLubxOe(7{{-&9};z0O1v3>jV;rk#{ntYKQ?u*q7 z?NO>VMO!&4SR4Vc1bp(o3&$$aODd#+w>UhI)2Mf=Zk)Ag$;A#w7f~*+{SXbxA5tk-=R?e?Uh3uCHx~Za?(xxicaqp{$Z1~cl3P&>IsF^mgOO`{+ca%!-OyDMZFibGz@`3%+4=oOl22tr+no0AVWa`D5^}>i_ji zF!g9Vlp@4uCl>!*V?WBg-M}OM*PFh7yRG$fKG$I@*qSEj%<<|At-`4a*XzAqEiL2>HmPOHv_%TwPzAxTbK2e@kUuXub@q0)Fl%;uKx+fM&L_AX7Us?KvA7Q_ z+7($ULPCN?GLLVQ_Yz19V4X%KUht?e{T2xCqQb_-Ee;PSYyKD=1LogPM0lq?E)1Q5 z1&oa=J4;79d_P|aTHI9pS`qv^#}5ZtKX+r?qm(E7n`3&c0M1m=R+dpXvFP?0-=i5U z^WK$|8&pAqn_F_#QHuvJe^b6B&YO)bH5S>qEDvwf{O7;!U%aj@hl<+>JgBs%cB7Y!dc}j z%W_DuqQv;{yKr8p{ykfq_8A`_TnaY2!iwN8vGUF%9Yd3o!|BbOm_s?}h^_y2XVdAM zqrZ6$yoA1A>v_PV+}Ik8ID* z3aVA_n*2$%%{EPUQ=N96IsPY52^D%{)^Tz%n&|YJ;dh44a1P4{5$unm`cpNpn+Qxv z_+yydGUag-tL$?{>7|W^>>kni-0YUCwu8$ICbFqu;q%JiJdGD^^esHo_R z!u;X#F$c5{3?IS)LYM?EkAR+(Dwvp}zO13Q5m~TfqF3aNRWmVx{)a0euocSoJ3t-S z|3bFBqN?|lY@>pAAEr5LCT>6k2q%_LXHiRUcMI5VUMonfZ#7Y~Gnktz7i~zG%C<uR(t z)1l(!(qZKfMfSomo=Q5m50H&kGSc2T&a?8sjVklm}|2PEq zE#Oef`=pt7mp=aI-ns)Q{Vc^H7c%G$x>xpap1+<=2|FFirsOFQo!&FSU`Y|hpgW0T zU|N=VJ(O_)FB537P32=CY@iP`k-e1jw0N_?KI=9-fbIU8UYcXLw))-pnkprx16vE~ zV-{XQb~XDgpqdJvc6aA9oiCEbEE5&FJ=t4a22XeZzc(6k4s_YtgrJ@}6t2dexRKKf z^Mh4grj5Wh+*=-X#Av;t_?~N>Xb6aw}=i9`_*otq@2p*$cj{v@N2X}(Ftkt z<5$-zwMm!#;Z|V#9&|n~MuZ7Fm}g>G*P{`lb6%+`IH;q zs?D#Pqf;{jVIBLwuV@iD?M`n4JCT|yyKGJG&&#&f@u!*XXD9BDPA+l%!OOD&wsjD{=Z&2%IY_irnYRY1pAM-*)|}vc z16Nx_9ve1cdN~!Q;y0tdXiFi6h$CmJEq|B5M`IpFVudGQLx#o()4c1|zTFp7;qXh3 znooiDp3{SeK`WjkSZ<%KTXA%Kpq7!p-Wk>{@@bikmQ}H7dQGUvHS*b#iR@{L0` zFANq#^u9QVExJ*H%hmpf8eb`%_i&-wM(+-00{fUUK@bU54 z79?DIRorWZ5z&CB{Q}e2=n&yFT zu~i8aWqtjYLZ{F7gGQ!VhB(}l3Dpx9(_*2$PQA$ z_&X*s31;YiG+zFlwLkDMFhBE=KoR{_I#Z9U9!&I0rxC&_V!z+>h2jTY~PIv zHo@_-d7u9&FZ(zi%PhaHCn;YY&K}OIoVMpNeJcXQ=6dPwAsro{MnjFSdfT&joBhi` zf{&klxWm`Dzyh36rGM3ehSw!tHd@XmZzKl; zoU9{c%SsVrlrx#RJbxYXf*nkAF=z`y{+t?Ebj?jJP`Dog31A79G$J*USLJgf&J8Nw z!k|A@&ySV(HI04U6S37y_YYrUjx{MoEJBaqx&67G(h}*MD%1Bbl(0eq<%5?#yA>~x=SlZkhU4`ww_vwS{ zUV@ecP%ERIYW@Gz(8#VNX#M8tv{@$lAGd^89!c^S%iV)^J1+W zmsxG~&>wxBw`gxdDa&K`%gc<>N%ZnFUnLmmuv_qMjTcCRWU!YoI^KD} zAlp5oXC5JTC4#d}wF9QDUnH*%K5Sn!ir*gKeNC#uTZl{@KVF#e-TpzR)pdS3l`xLT z$NmxyAs9eDt(xB_CtEkT&I!qg_`2F6bzmdsxmnbNsJ>|FKjRcJz$7)tTAj^5Vuk%mgrUU%^T>)1R`FIwBwR=jHQT#++X z^KoIIp$7u@9O=)L?yg!`e+J4F*34wI8Gv_-U579Al}_&$XVl(kZsR5P1cVj4{|Axw z6(I5Q3HOkGXyFAe@K1II1-B!@epWYz+*@`o{2Cn_4?CYw=FLa6gt@M23=(-AJPq48 zXjzQmy3ctk*X2Sma8$Y&RPD;nZpXvQ^bOv61~2VhUV==S`XB}%^NPr@OAuC_@R%|& z|E4}Mzfrpm1cwQ;gyNr>H=HSr4?{*+(r0V(HdmJbb20iwA6qe3Y^*h=UjieG5SKh| z!V9%rP>P!h=Vw-t+n`DTQi6#F-qaokuNzILESAFuF2!0ce~_a6&1wvFF1KqKQE4nJ!f=_ZAw8dB-ImP6*ku(pKU0}5Y)vSv4c*6 zaRnfGEI5lfUV-cK%~xJ7xh>}@=QYOP60MkPa&O6H{6z5ji#>=AQuF6O5cnKvqr;0DI52f^zb>BLTwlWSLQH;&C(g`@>V+nSov!1MZN*raQYoJ{3bzh0GB zJ1dZ2y5_MlFk~^Jc_hcUMH|ei6-W6eU-CjS4d!0@fpYL@}chriWif0=kWd#XYvm87@8HJ76&d1AX2@$} zB@%C2I$aI?^R{=pTpX&%C8Gr`ejY)1d_ISv)b;XGWcG=gMP5iBdaX<)s}n@k4Ma-Jb7`68XO_}i8<7%p@7rM3G6NYO z&6#Omk#9qrfTGlu?MocNbC;Bm`_GLgt()bDD87->STYzxPSmg0Lr(hSeB2&2+^jhi zsOZ8G4vpmBXV-xm$o}f}7k2cmE-^k5zQ_O{CC`up{K!8{8<&j|l6kpUc?$J}%M3z( z^lekm)S{V{8rf%;j=%0tHjwM}nk|7IF!Ql|gec+Qwci&9X>>Ut4BFHz0;6fWq|lo) zoHZzS*rv>$o1L0}T~=!;AMY21(m2npG}xPYIYB)wLiMk&JW4>-GL(M=D8w3>=fo-2oy@7 z2mZYDm&`M!IPE>u{Z}p*Q=&0Ew;-p()#jpSQ^WMcSy*WZ{E?cV(R|-^YgfHwnJ*jz z#brH^Pik!eM*IX<<^oZ{wKW!{FfYGQ|aq4i*cCH2O_+G(f}fG`SPOQ69m7jf zW}vQ>)<_<$re6B}pXK)ZxwF4W^#m`mShMW(27WR81rlEZ9DbzhPI2}h)t-Vn*2S`K z;>ajvPh~r2=8l$RCT;GemblIPzC-529wK@{dCDSsaQN-aCG?N;5bIEjv#>$7U^-qu zx;u(GkD{!>&|$h+rE5RVPvld(7$TkH#tfgV*Pd?4Hj2p-Q!Yc=Ja1lfDez*;MtPQ! zvVpo%zOvLsf>oc~E)fWQ8?s4$*m>jyHyObF%8X;B+O?i_t$}~#x>mhX>0#E%HHPCd+`QuhF#n`jWxs$u9w9CQ3e$PMwc1^PmYRYd=wK`u z+cXGglP0ojQ~+`yso>Jo=Af2bqPE)2M<)ZNScF_y@aWj(gZ{~!fzHEkH#4D`zO6=U zA`B_WH?iM$ql;#^6rf;<##j^4IHxw&Zf){HwVRa`4L53L^jECO1LW;D3T6W2rr?SzWdaMi8Iaemp(&V`H#GqzH zIJ}6H5KZaLP6al||?_RhU`hM%kdXZdR{8;8f4(`iWi^#Tkamx`Ly_o8-yHqX{v`p|7z zS%3eGEr*_cR1tet=|W(0RfZqgQYg}mNajZFZK3q#L*=$s=cpXJ?I=XXSLfnJcmlL7 z?Gd!KnRGrTGlm8a<%dawd2Uk5v6wWh@?HBTPPu-<`}Wd-0Zi78*x#nIXn3{ z&KZG}Jy{JizcdZe^Jck42Y1;Sn!d@Ni2HU-r;AyV?*!8dH>`mvXwxQu* zxoB=MBY}>rZJ~>ZGtT7t>QWCW*q;1TEY->bo1~%-igZ^ zx%`uE7n|14MYgdz;^5OAXBEa`DQG`$-xWXGQe9 z)~&r8$7_sVp67!%-0mA`GQ-Zf4HYv!X>4dAynTj9b0fYh`_GTUAxT0G}6Jan+j#!;+d9=Ds1$npuuAo zmpwm&Bf>$Vv7x)UR$cS~>mWmqAVXdN@kouRGmfViX`4Sr)JgN94WJ86<^qp?eNkSe z`&vb(xE29Q>C9-`E&kMISEh5Y>`G8=*@F_ z!IXaqO?zv|)+Hqqu!aj{v){M7Tbmq(E4%uQ>VxR|T`S+2XTJZrX^;2{}re%QuZMTB0I+`z9!anEzw zb(FtS@PyBOf^{Fsnp;Y#pZGOuQF@pjZVFAd>4D0Z;dU#KH3dQ3;-M8Z#+ z;CDYonQ)uU$?%oY^6BZvc9_%Lw^g^z->)o(WP?6mhux035mVird>I%7ac{T`yT*wO zULVmRL|?lvI0M$EH)xaTQ@>q8z7qd4G-0!d1M2uIZQNA5doHndS8pCyze}kl&qDK( zyJ>Y7GClNza}~`RwF^^V|DF2p!WpdXk)be=p}XJ;yv#M3!pDgVc?n#syQw5z#2DsMts8M>Z>(uO)zoOC{2h#9Hu5_4Xwi00+kl zFktlGJ|X5~S-NiZEE+S!6f3-P7am=1_3pQ8&C@dd)2XPI*;zt>x38ynu&3+x&hNj9 zKFU758=RHx?$st>uf5R=5D&x~RyfiT)=_%(g7IdO)q>^6>-Kw$bM7vi@k|#QIPs*9 z#5gC-29DxO3$cd-3}(uYi-(lzRp8*Wd8F*+8UN1VV<8d8@saV8e#WN6-Vr?H`f8mH z=COb3=Z$K`-Qvd261CG39YF)Za|rsmTo1(6LYH62ceL79tik3fGI%*l^MiZTHL%`y{EG*_ zc#gPi$nL|7yovqJ9`Jq+&ZoEYg5ip$NW^h~i;RT|54T4xgwopy%hFUaopppoJ@x&4 zoBt88^YE%fnwGm>F=1riMrD-p<)-t?Uq8&oW&P}(?cv`YlT^!F8-Do`BxwXiK6^G3 z63EmeLTvN+5c=V$M2IUK02YV*($Z4LSq?&rW`}!P#bNr>Nah~>=d&L%+sWOvTaXT@ zZi%R?~#F^sbl+t=EbMy;q|M)#bqOw?!San z0$fwS^zrs9%b?RWA6%_Pj@s7=(B&!C=jAIW|8q_FsKtg`bnDs*E$g-YOCQ(l=cj4W z?uguI)x-@)LqkVfF3gVld?4o;;|kk{k2uZvDt*b>^ed_*IFJsQ^xwVZz&ZM19=52V;k+n8 z8t6Oq9*N;TR-! zbYT;TWLIrDX9io<6IKz#F#va#q~FLcg!S;^&gWJ$e}5R;JIOO|p&lKQ_OLEQaKDmY zP-TP+7p#-XPAyCy_O(oul%|si@ zuqx5oxLcb>fzt5hcZX>!lV$_Fb8*x>zyF_pPh}M zZ+Vxt3fL>Zj|x0eu+|snebzl6Jb#8weGVK<`8!)qw@QPy&`P6D<@C$XdcV0W;d_8t zI*#S*KyRDPu!pq@&2}L@jtr_7AN;K>(R(s522{FYiS^`mIzXM0bSVxZf|O(CID@5y zpVbOiYzDtbk*8B;seLs;7Jv|(q%Ow!GE-Aal<|t9Q}dNMa6N}H2)OnY!89=j2@3n2 zp)LfQysF*Zd~Jkdy?jl7kh2rFp?}tAeLA`+V2LIrpbcU$xu3b(oQRSj*N9o#s^C!% zzB@p3JiY-3C8ZEJIQt2gP}klZold|$FD+MJ{}spG_k6hbnZ1;qs6G1IXDBh_!(zz~ zOav$bv7M>P%^|rQSr5H7*zVGGNZvI0{=e+(d3InEHzPJQtbDKeZFzwnob(YFsA_@k zOF8b3Dw_dXF@I?Rou;ZZK(Wh7ebx{jns%2!=cmew9}YNWsx#`%a&E~Ras}s^`Vkb< z^|T86MMmzG_zVPxvGmmONQykQYAvvV!#4Rz5Sk(b&aaP@CeQoo)MnERCcAcb&YyAK z=RNNQoIW)l*w?4o>AD=BrWHxDCIWx}Y@YC`g1>7wjGnWXqUiEDwFc6pl!(X%kv2Zm zaCV3CHqQPH58S=)(01Zuq3W~F;+K#(I>+Y9(|;-M@t=p!Q1dSBz4SG`OFW1z6*+S2 zkKDUkN(r-dZ=7uNfgumsqP)7qGskK(>)yeV2!ANZ_|)T=i()Qy29(02De_h4ek{4V z)>emOcA+!8EGDFgaYX-4?M%*v%YZL>+vy*4XIa{AE-gm`U?RJ&g;9(%(f0YUaf?4kZ{Nb+Qi%W#@-jEFZLGp&6O*6)gHn`uit_7MWa zi~n1$i5aV0dzfw$kRt|oVVVx2i!nr%YJH+UI=)!W^^p+P?kJV#G{tW zK3-MgW2=}T3OulJK3qBVLO#c&mf~eA^7s;4K2g}Uk?|#(66-eQxkg$ngxkwY?@KhH z!UT+{pMYmWc>h4ZTqUZ6_OxPzZHLVg-~G7PWVGOH&R6KGlw~||5-q~`W+Q+@E)g%D z3MWM?ae0c=4Wq?>Z?tkjj7HY%fA(ziX30JW_gWYxV|fBvvWlN9kvB%jo4-~g+SRRP zgo%f=b$%Kyi=l&mGSeGco5kDe+S?min;K{cUvMcnG%wTmO?We})>aG8Y_fLPKlf+8 z6e5mw?-KBbA4bm{c*U45u_hOeIce9+kptKRSpF-q$m?Hy&k$5pwyOX$CGusVh6YY{ zNiW5)4Ibg%MtVYtq+JVi{3lW4zm>PMm}o3#CNW{K%g6EC8LApclFrmL6=Ozj)a%&X z{G3=aRU<@sE#!?&y{gVV9F$cOUUfwWff&?wO<`v za!+4ggHW$w#Hy%K!K3VM+3Lw~B-wk4t2b_h866(!;+^YA$Rk9MCd_ z+r4(P=8bA6v7D^OE{97K(2`CFfll@a2G1(7Wro0eS0pA5ZC58g!)yakzJs?@0`Y35Wv$i(R&P7PoUtjI8T^pYc&uhGeDY;EwH$OaV-$IL<7d+0fiI2g7 z7s++sJCTZfVHF0*`v^<8NBoG_%^R6BH>;A#A{kh(Ekx>6^bOB|1J1kLL=hFN%cr?S zM<}>VMt%*bosRI?8(Yc&uvm)Dg zUoYd+(fSbPATILj+az3m8TbH@faygK%LVDW5NK0SUv=chE3QI+>(c@7n z^Fo~p+cilJgN=am1$~#u-#hrBE&+-gAKzS`@$w?f3!ozqJO)_=iw@bp9 zUaxhZhUGO+F?Uo4C`m&&m^3~V7}LAfa*BHF|Gmlozl)EbvHM|K_d{)4`vBDTK}l1w JR^Br5{{Y=Mo$~+y literal 0 HcmV?d00001 diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/figures/boot_switch.png b/bsp/stm32/libraries/templates/stm32mp1xx/figures/boot_switch.png new file mode 100644 index 0000000000000000000000000000000000000000..2145f86e25458ff80205fde0e859445c3dfc3362 GIT binary patch literal 96544 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

8H3RHJ& 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

### 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 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FC1000 -FD10020000 + + + 0 + ST-LINKIII-KEIL_SWO + UL2CM3(-S0 -C0 -P0 ) -FC1000 -FD10020000 + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Applications + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + cpu + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + cpuport.c + 0 + 0 + + + 2 + 6 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + context_rvds.S + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 4 + 16 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 4 + 17 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Common\System\system_stm32mp1xx.c + system_stm32mp1xx.c + 0 + 0 + + + 4 + 18 + 1 + 0 + 0 + 0 + board\CubeMX_Config\CM4\Src\stm32mp1xx_hal_msp.c + stm32mp1xx_hal_msp.c + 0 + 0 + + + 4 + 19 + 2 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\CMSIS\Device\ST\STM32MP1xx\Source\Templates\arm\startup_stm32mp15xx.s + startup_stm32mp15xx.s + 0 + 0 + + + 4 + 20 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 4 + 21 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 4 + 22 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + + + finsh + 0 + 0 + 0 + 0 + + 5 + 23 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 5 + 24 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 5 + 25 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 5 + 26 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_compiler.c + finsh_compiler.c + 0 + 0 + + + 5 + 27 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_error.c + finsh_error.c + 0 + 0 + + + 5 + 28 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_heap.c + finsh_heap.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_init.c + finsh_init.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_node.c + finsh_node.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_ops.c + finsh_ops.c + 0 + 0 + + + 5 + 32 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_parser.c + finsh_parser.c + 0 + 0 + + + 5 + 33 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_var.c + finsh_var.c + 0 + 0 + + + 5 + 34 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_vm.c + finsh_vm.c + 0 + 0 + + + 5 + 35 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_token.c + finsh_token.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 6 + 36 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 6 + 39 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 6 + 40 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 6 + 41 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 6 + 42 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 6 + 43 + 1 + 0 + 0 + 0 + ..\..\..\src\memheap.c + memheap.c + 0 + 0 + + + 6 + 44 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 6 + 45 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 6 + 46 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 6 + 47 + 1 + 0 + 0 + 0 + ..\..\..\src\signal.c + signal.c + 0 + 0 + + + 6 + 48 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 6 + 49 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + libc + 0 + 0 + 0 + 0 + + 7 + 50 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\libc.c + libc.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\mem_std.c + mem_std.c + 0 + 0 + + + 7 + 52 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\stubs.c + stubs.c + 0 + 0 + + + 7 + 53 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\time.c + time.c + 0 + 0 + + + + + STM32_HAL + 0 + 0 + 0 + 0 + + 8 + 54 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal.c + stm32mp1xx_hal.c + 0 + 0 + + + 8 + 55 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_hsem.c + stm32mp1xx_hal_hsem.c + 0 + 0 + + + 8 + 56 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_exti.c + stm32mp1xx_hal_exti.c + 0 + 0 + + + 8 + 57 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_ipcc.c + stm32mp1xx_hal_ipcc.c + 0 + 0 + + + 8 + 58 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_cortex.c + stm32mp1xx_hal_cortex.c + 0 + 0 + + + 8 + 59 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_dma.c + stm32mp1xx_hal_dma.c + 0 + 0 + + + 8 + 60 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_dma_ex.c + stm32mp1xx_hal_dma_ex.c + 0 + 0 + + + 8 + 61 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_mdma.c + stm32mp1xx_hal_mdma.c + 0 + 0 + + + 8 + 62 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_pwr.c + stm32mp1xx_hal_pwr.c + 0 + 0 + + + 8 + 63 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_pwr_ex.c + stm32mp1xx_hal_pwr_ex.c + 0 + 0 + + + 8 + 64 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_rcc.c + stm32mp1xx_hal_rcc.c + 0 + 0 + + + 8 + 65 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_rcc_ex.c + stm32mp1xx_hal_rcc_ex.c + 0 + 0 + + + 8 + 66 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_gpio.c + stm32mp1xx_hal_gpio.c + 0 + 0 + + + 8 + 67 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_adc.c + stm32mp1xx_hal_adc.c + 0 + 0 + + + 8 + 68 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_adc_ex.c + stm32mp1xx_hal_adc_ex.c + 0 + 0 + + + 8 + 69 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_dac.c + stm32mp1xx_hal_dac.c + 0 + 0 + + + 8 + 70 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_dac_ex.c + stm32mp1xx_hal_dac_ex.c + 0 + 0 + + + 8 + 71 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_i2c.c + stm32mp1xx_hal_i2c.c + 0 + 0 + + + 8 + 72 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_i2c_ex.c + stm32mp1xx_hal_i2c_ex.c + 0 + 0 + + + 8 + 73 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_spi.c + stm32mp1xx_hal_spi.c + 0 + 0 + + + 8 + 74 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_tim.c + stm32mp1xx_hal_tim.c + 0 + 0 + + + 8 + 75 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_tim_ex.c + stm32mp1xx_hal_tim_ex.c + 0 + 0 + + + 8 + 76 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_uart.c + stm32mp1xx_hal_uart.c + 0 + 0 + + + 8 + 77 + 1 + 0 + 0 + 0 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_uart_ex.c + stm32mp1xx_hal_uart_ex.c + 0 + 0 + + + + diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/project.uvprojx b/bsp/stm32/libraries/templates/stm32mp1xx/project.uvprojx new file mode 100644 index 0000000000..3d0272526b --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/project.uvprojx @@ -0,0 +1,833 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32MP157AAAx:Cortex-M4 + STMicroelectronics + Keil.STM32MP1xx_DFP.1.3.0 + http://www.keil.com/pack/ + IRAM(0x10020000,0x00020000) IRAM2(0x10040000,0x00020000) IROM(0x10000000,0x00020000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) + + + UL2CM3(-S0 -C0 -P0 -FD10020000 -FC1000) + 0 + $$Device:STM32MP157AAAx$Drivers\CMSIS\Device\ST\STM32MP1xx\Include\stm32mp157axx_cm4.h + + + + + + + + + + $$Device:STM32MP157AAAx$SVD\STM32MP157x.svd + 0 + 0 + + + + + + + 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 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x10020000 + 0x20000 + + + 1 + 0x10000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x10000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x10020000 + 0x20000 + + + 0 + 0x10040000 + 0x20000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + CORE_CM4, __LOG_TRACE_IO_, METAL_MAX_DEVICE_REGIONS=2, VIRTIO_SLAVE_ONLY, NO_ATOMIC_64_SUPPORT, STM32MP157Axx, METAL_INTERNAL, USE_HAL_DRIVER, RT_USING_ARM_LIBC + + applications;.;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;board\CubeMX_Config\CM4\Inc;board\ports;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\components\finsh;.;..\..\..\include;..\..\..\components\libc\compilers\armlibc;..\..\..\components\libc\compilers\common;..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Inc;..\libraries\STM32MPxx_HAL\CMSIS\Device\ST\STM32MP1xx\Include;..\libraries\STM32MPxx_HAL\CMSIS\Core\Include;..\libraries\STM32MPxx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 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-m4\cpuport.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + 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 + + + system_stm32mp1xx.c + 1 + board\CubeMX_Config\Common\System\system_stm32mp1xx.c + + + stm32mp1xx_hal_msp.c + 1 + board\CubeMX_Config\CM4\Src\stm32mp1xx_hal_msp.c + + + startup_stm32mp15xx.s + 2 + ..\libraries\STM32MPxx_HAL\CMSIS\Device\ST\STM32MP1xx\Source\Templates\arm\startup_stm32mp15xx.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 + + + finsh_compiler.c + 1 + ..\..\..\components\finsh\finsh_compiler.c + + + finsh_error.c + 1 + ..\..\..\components\finsh\finsh_error.c + + + finsh_heap.c + 1 + ..\..\..\components\finsh\finsh_heap.c + + + finsh_init.c + 1 + ..\..\..\components\finsh\finsh_init.c + + + finsh_node.c + 1 + ..\..\..\components\finsh\finsh_node.c + + + finsh_ops.c + 1 + ..\..\..\components\finsh\finsh_ops.c + + + finsh_parser.c + 1 + ..\..\..\components\finsh\finsh_parser.c + + + finsh_var.c + 1 + ..\..\..\components\finsh\finsh_var.c + + + finsh_vm.c + 1 + ..\..\..\components\finsh\finsh_vm.c + + + finsh_token.c + 1 + ..\..\..\components\finsh\finsh_token.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 + + + memheap.c + 1 + ..\..\..\src\memheap.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 + + + + + libc + + + libc.c + 1 + ..\..\..\components\libc\compilers\armlibc\libc.c + + + mem_std.c + 1 + ..\..\..\components\libc\compilers\armlibc\mem_std.c + + + stubs.c + 1 + ..\..\..\components\libc\compilers\armlibc\stubs.c + + + time.c + 1 + ..\..\..\components\libc\compilers\common\time.c + + + + + STM32_HAL + + + stm32mp1xx_hal.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal.c + + + stm32mp1xx_hal_hsem.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_hsem.c + + + stm32mp1xx_hal_exti.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_exti.c + + + stm32mp1xx_hal_ipcc.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_ipcc.c + + + stm32mp1xx_hal_cortex.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_cortex.c + + + stm32mp1xx_hal_dma.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_dma.c + + + stm32mp1xx_hal_dma_ex.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_dma_ex.c + + + stm32mp1xx_hal_mdma.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_mdma.c + + + stm32mp1xx_hal_pwr.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_pwr.c + + + stm32mp1xx_hal_pwr_ex.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_pwr_ex.c + + + stm32mp1xx_hal_rcc.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_rcc.c + + + stm32mp1xx_hal_rcc_ex.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_rcc_ex.c + + + stm32mp1xx_hal_gpio.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_gpio.c + + + stm32mp1xx_hal_adc.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_adc.c + + + stm32mp1xx_hal_adc_ex.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_adc_ex.c + + + stm32mp1xx_hal_dac.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_dac.c + + + stm32mp1xx_hal_dac_ex.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_dac_ex.c + + + stm32mp1xx_hal_i2c.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_i2c.c + + + stm32mp1xx_hal_i2c_ex.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_i2c_ex.c + + + stm32mp1xx_hal_spi.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_spi.c + + + stm32mp1xx_hal_tim.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_tim.c + + + stm32mp1xx_hal_tim_ex.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_tim_ex.c + + + stm32mp1xx_hal_uart.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_uart.c + + + stm32mp1xx_hal_uart_ex.c + 1 + ..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_uart_ex.c + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/rtconfig.h b/bsp/stm32/libraries/templates/stm32mp1xx/rtconfig.h new file mode 100644 index 0000000000..8e8e3a09c7 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/rtconfig.h @@ -0,0 +1,173 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Configuration */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_ALIGN_SIZE 4 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 100 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 +#define RT_USING_TIMER_SOFT +#define RT_TIMER_THREAD_PRIO 4 +#define RT_TIMER_THREAD_STACK_SIZE 512 +#define RT_DEBUG +#define RT_DEBUG_COLOR + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_MEMHEAP +#define RT_USING_MEMHEAP_AS_HEAP +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart4" +#define RT_VER_NUM 0x40003 +#define ARCH_ARM +#define RT_USING_CPU_FFS +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M4 + +/* 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_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 USB */ + + +/* POSIX layer and C standard library */ + +#define RT_USING_LIBC + +/* Network */ + +/* Socket abstraction layer */ + + +/* Network interface device */ + + +/* light weight TCP/IP 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 */ + + +/* samples: kernel and components samples */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32MP1 + +/* Hardware Drivers Config */ + +#define SOC_STM32MP157A + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART4 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/rtconfig.py b/bsp/stm32/libraries/templates/stm32mp1xx/rtconfig.py new file mode 100644 index 0000000000..b1cad1d512 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/rtconfig.py @@ -0,0 +1,150 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m4' +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-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections' + CFLAGS = DEVICE + ' -Dgcc' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.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-M4.fp ' + CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --scatter "board\linker_scripts\link.sct" --info sizes --info totals --info unused --info veneers --list rtthread.map --strict' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib' + + CFLAGS += ' -D__MICROLIB ' + AFLAGS += ' --pd "__MICROLIB SETA 1" ' + LFLAGS += ' --library_type=microlib ' + EXEC_PATH += '/ARM/ARMCC/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iar': + # toolchains + CC = 'iccarm' + CXX = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = '-Dewarm' + + CFLAGS = DEVICE + CFLAGS += ' --diag_suppress Pa050' + CFLAGS += ' --no_cse' + CFLAGS += ' --no_unroll' + CFLAGS += ' --no_inline' + CFLAGS += ' --no_code_motion' + CFLAGS += ' --no_tbaa' + CFLAGS += ' --no_clustering' + CFLAGS += ' --no_scheduling' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-M4' + CFLAGS += ' -e' + CFLAGS += ' --fpu=VFPv4_sp' + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' + CFLAGS += ' --silent' + + AFLAGS = DEVICE + AFLAGS += ' -s+' + AFLAGS += ' -w+' + AFLAGS += ' -r' + AFLAGS += ' --cpu Cortex-M4' + AFLAGS += ' --fpu VFPv4_sp' + AFLAGS += ' -S' + + if BUILD == 'debug': + CFLAGS += ' --debug' + CFLAGS += ' -On' + else: + CFLAGS += ' -Oh' + + LFLAGS = ' --config "board/linker_scripts/link.icf"' + LFLAGS += ' --entry __iar_program_start' + + CXXFLAGS = CFLAGS + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' + +def dist_handle(BSP_ROOT, dist_dir): + import sys + cwd_path = os.getcwd() + sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools')) + from sdk_dist import dist_do_building + dist_do_building(BSP_ROOT, dist_dir) diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/template.ewp b/bsp/stm32/libraries/templates/stm32mp1xx/template.ewp new file mode 100644 index 0000000000..492217a0a6 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/template.ewp @@ -0,0 +1,2106 @@ + + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 23 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 23 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/template.eww b/bsp/stm32/libraries/templates/stm32mp1xx/template.eww new file mode 100644 index 0000000000..c62178f07a --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/template.uvoptx b/bsp/stm32/libraries/templates/stm32mp1xx/template.uvoptx new file mode 100644 index 0000000000..443edae6fa --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/template.uvoptx @@ -0,0 +1,192 @@ + + + + 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 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FC1000 -FD10020000 + + + 0 + ST-LINKIII-KEIL_SWO + UL2CM3(-S0 -C0 -P0 ) -FC1000 -FD10020000 + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/template.uvprojx b/bsp/stm32/libraries/templates/stm32mp1xx/template.uvprojx new file mode 100644 index 0000000000..44ebc41d12 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/template.uvprojx @@ -0,0 +1,411 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32MP157AAAx:Cortex-M4 + STMicroelectronics + Keil.STM32MP1xx_DFP.1.3.0 + http://www.keil.com/pack/ + IRAM(0x10020000,0x00020000) IRAM2(0x10040000,0x00020000) IROM(0x10000000,0x00020000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) + + + UL2CM3(-S0 -C0 -P0 -FD10020000 -FC1000) + 0 + $$Device:STM32MP157AAAx$Drivers\CMSIS\Device\ST\STM32MP1xx\Include\stm32mp157axx_cm4.h + + + + + + + + + + $$Device:STM32MP157AAAx$SVD\STM32MP157x.svd + 0 + 0 + + + + + + + 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 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x10020000 + 0x20000 + + + 1 + 0x10000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x10000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x10020000 + 0x20000 + + + 0 + 0x10040000 + 0x20000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Source Group 1 + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +

gTE)@! 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 Hu0mjfQ?48q literal 0 HcmV?d00001 diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/project.ewd b/bsp/stm32/libraries/templates/stm32mp1xx/project.ewd new file mode 100644 index 0000000000..ee078b5a14 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/project.ewd @@ -0,0 +1,2966 @@ + + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 31 + 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 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 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\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\RemedyRtosViewer\RemedyRtosViewer.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.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\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 31 + 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 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 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\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\RemedyRtosViewer\RemedyRtosViewer.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.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\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/project.ewp b/bsp/stm32/libraries/templates/stm32mp1xx/project.ewp new file mode 100644 index 0000000000..57ec23cbd2 --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/project.ewp @@ -0,0 +1,2441 @@ + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 23 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 23 + 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-m4\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m4\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 + + + + dlib + + $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 + + + + Drivers + + $PROJ_DIR$\board\board.c + + + $PROJ_DIR$\board\CubeMX_Config\Common\System\system_stm32mp1xx.c + + + $PROJ_DIR$\board\CubeMX_Config\CM4\Src\stm32mp1xx_hal_msp.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\CMSIS\Device\ST\STM32MP1xx\Source\Templates\iar\startup_stm32mp15xx.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 + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_compiler.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_error.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_heap.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_init.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_node.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_ops.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_parser.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_var.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_vm.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_token.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\memheap.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 + + + + libc + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\time.c + + + + STM32_HAL + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_hsem.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_exti.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_ipcc.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_cortex.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_dma.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_dma_ex.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_mdma.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_pwr.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_pwr_ex.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_rcc.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_rcc_ex.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_gpio.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_adc.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_adc_ex.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_dac.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_dac_ex.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_i2c.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_i2c_ex.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_spi.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_tim.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_tim_ex.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_uart.c + + + $PROJ_DIR$\..\libraries\STM32MPxx_HAL\STM32MP1xx_HAL_Driver\Src\stm32mp1xx_hal_uart_ex.c + + + diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/project.eww b/bsp/stm32/libraries/templates/stm32mp1xx/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/libraries/templates/stm32mp1xx/project.uvoptx b/bsp/stm32/libraries/templates/stm32mp1xx/project.uvoptx new file mode 100644 index 0000000000..1fcc096cdf --- /dev/null +++ b/bsp/stm32/libraries/templates/stm32mp1xx/project.uvoptx @@ -0,0 +1,1172 @@ + + + + 1.0 + +