diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..fe7de82 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,160 @@ +cmake_minimum_required(VERSION 3.10) + +project(STM32H750VBT6_LwESP) + +enable_language(CXX) +enable_language(ASM) + +# Extra CFlags +set(TARGET_CFLAGS_EXTRA "-Og") +set(TARGET_CFLAGS_EXTRA "-Og") +set(TARGET_LDFLAGS_EXTRA "-Wl,--print-memory-usage") + +# Different linker scripts +set(TARGET_LDSCRIPT_FLASH "${CMAKE_SOURCE_DIR}/STM32H750VBTx_FLASH.ld") +set(TARGET_LDSCRIPT_RAM "${CMAKE_SOURCE_DIR}/STM32H750VBTx_RAM.ld") + +# Copy them from Makefile +set(TARGET_C_SOURCES + "Core/Src/main.c" + "Core/Src/stm32h7xx_it.c" + "Core/Src/stm32h7xx_hal_msp.c" + "Core/Src/stm32h7xx_hal_timebase_tim.c" + "Core/Src/system_stm32h7xx.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pcd_ex.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rng.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rng_ex.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rtc.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rtc_ex.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim_ex.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart_ex.c" + "Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_usb.c" + "Middlewares/Third_Party/FreeRTOS/Source/croutine.c" + "Middlewares/Third_Party/FreeRTOS/Source/event_groups.c" + "Middlewares/Third_Party/FreeRTOS/Source/list.c" + "Middlewares/Third_Party/FreeRTOS/Source/queue.c" + "Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c" + "Middlewares/Third_Party/FreeRTOS/Source/tasks.c" + "Middlewares/Third_Party/FreeRTOS/Source/timers.c" + "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c" + "Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c" + "Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c" +) + +# Copy them from Makefile +set(TARGET_ASM_SOURCES + "startup_stm32h750xx.s" +) + +# Copy them from Makefile +set(TARGET_C_DEFINES + "STM32H750xx" + "USE_HAL_DRIVER" +) + +set(TARGET_C_DEFINES_RAM + "VECT_TAB_SRAM" + "USER_VECT_TAB_ADDRESS" + "DATA_IN_D2_SRAM" +) + +# Copy them from Makefile +set(TARGET_C_INCLUDES + "Core/Inc" + "Drivers/STM32H7xx_HAL_Driver/Inc" + "Drivers/STM32H7xx_HAL_Driver/Inc/Legacy" + "Drivers/CMSIS/Device/ST/STM32H7xx/Include" + "Drivers/CMSIS/Include" + "Middlewares/Third_Party/FreeRTOS/Source/include" + "Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2" + "Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F" +) + +# Shared libraries linked with application +set(TARGET_LIBS +) + +# Shared library and linker script search paths +set(TARGET_LIB_DIRECTORIES +) + +# Device specific settings, goes to CFLAGS and LDFLAGS +set(TARGET_CFLAGS_HARDWARE "-mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard -mthumb") + +# Conditional flags +# DEBUG +set(CMAKE_C_FLAGS_DEBUG "-DDEBUG -Og -g") +set(CMAKE_CXX_FLAGS_DEBUG "-DDEBUG -Og -g") +set(CMAKE_ASM_FLAGS_DEBUG "-DDEBUG -Og -g") + +# RELEASE +set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG -O2 -flto") +set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -O2 -flto") +set(CMAKE_ASM_FLAGS_RELEASE "-DNDEBUG -O2 -flto") +set(CMAKE_EXE_LINKER_FLAGS_DEBUG "-flto") + +# Final compiler flags +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TARGET_CFLAGS_HARDWARE} ${TARGET_CFLAGS_EXTRA} -Wall -fdata-sections -ffunction-sections") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TARGET_CFLAGS_HARDWARE} ${TARGET_CXXFLAGS_EXTRA} -Wall -fdata-sections -ffunction-sections") +set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${TARGET_CMAKE_C_FLAGS} -x assembler-with-cpp") +set(CMAKE_EXE_LINKER_FLAGS "-specs=nano.specs -Wl,--gc-sections -lc -lm -lnosys ${TARGET_LDFLAGS_EXTRA}") + +# Include sub directories here + +# Shared sources, includes and definitions +add_compile_definitions(${TARGET_C_DEFINES}) +include_directories(${TARGET_C_INCLUDES}) +link_directories(${TARGET_LIB_DIRECTORIES}) +link_libraries(${TARGET_LIBS}) + +# Main targets are added here + +# **** Internal Flash **** + +# Create ELF +add_executable("${CMAKE_PROJECT_NAME}_FLASH.elf" ${TARGET_C_SOURCES} ${TARGET_ASM_SOURCES}) +target_link_options("${CMAKE_PROJECT_NAME}_FLASH.elf" + PRIVATE "-T${TARGET_LDSCRIPT_FLASH}" + PRIVATE "-Wl,-Map=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}_FLASH.map,--cref" +) + +add_custom_command(OUTPUT "${CMAKE_PROJECT_NAME}_FLASH.hex" + COMMAND ${CMAKE_OBJCOPY} "-O" "ihex" "${CMAKE_PROJECT_NAME}_FLASH.elf" "${CMAKE_PROJECT_NAME}_FLASH.hex" + DEPENDS "${CMAKE_PROJECT_NAME}_FLASH.elf" +) +add_custom_target("${CMAKE_PROJECT_NAME}_FLASH_HEX" DEPENDS "${CMAKE_PROJECT_NAME}_FLASH.hex") + +# **** All In SRAM **** + +# Create ELF +add_executable("${CMAKE_PROJECT_NAME}_RAM.elf" ${TARGET_C_SOURCES} ${TARGET_ASM_SOURCES}) +target_link_options("${CMAKE_PROJECT_NAME}_RAM.elf" + PRIVATE "-T${TARGET_LDSCRIPT_RAM}" + PRIVATE "-Wl,-Map=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}_RAM.map,--cref" +) +target_compile_definitions("${CMAKE_PROJECT_NAME}_RAM.elf" PRIVATE ${TARGET_C_DEFINES_RAM}) + +add_custom_command(OUTPUT "${CMAKE_PROJECT_NAME}_RAM.hex" + COMMAND ${CMAKE_OBJCOPY} "-O" "ihex" "${CMAKE_PROJECT_NAME}_RAM.elf" "${CMAKE_PROJECT_NAME}_RAM.hex" + DEPENDS "${CMAKE_PROJECT_NAME}_RAM.elf" +) +add_custom_target("${CMAKE_PROJECT_NAME}_RAM_HEX" DEPENDS "${CMAKE_PROJECT_NAME}_RAM.hex") \ No newline at end of file diff --git a/Makefile b/Makefile deleted file mode 100644 index 9fc76d7..0000000 --- a/Makefile +++ /dev/null @@ -1,213 +0,0 @@ -########################################################################################################################## -# File automatically-generated by tool: [projectgenerator] version: [3.15.2] date: [Wed Dec 15 21:57:12 CST 2021] -########################################################################################################################## - -# ------------------------------------------------ -# Generic Makefile (based on gcc) -# -# ChangeLog : -# 2017-02-10 - Several enhancements + project update mode -# 2015-07-22 - first version -# ------------------------------------------------ - -###################################### -# target -###################################### -TARGET = STM32H750VBT6_LwESP - - -###################################### -# building variables -###################################### -# debug build? -DEBUG = 1 -# optimization -OPT = -Og - - -####################################### -# paths -####################################### -# Build path -BUILD_DIR = build - -###################################### -# source -###################################### -# C sources -C_SOURCES = \ -Core/Src/main.c \ -Core/Src/freertos.c \ -Core/Src/stm32h7xx_it.c \ -Core/Src/stm32h7xx_hal_msp.c \ -Core/Src/stm32h7xx_hal_timebase_tim.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_uart_ex.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rng.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rng_ex.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim.c \ -Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim_ex.c \ -Core/Src/system_stm32h7xx.c \ -Middlewares/Third_Party/FreeRTOS/Source/croutine.c \ -Middlewares/Third_Party/FreeRTOS/Source/event_groups.c \ -Middlewares/Third_Party/FreeRTOS/Source/list.c \ -Middlewares/Third_Party/FreeRTOS/Source/queue.c \ -Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c \ -Middlewares/Third_Party/FreeRTOS/Source/tasks.c \ -Middlewares/Third_Party/FreeRTOS/Source/timers.c \ -Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c \ -Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c \ -Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c - -# ASM sources -ASM_SOURCES = \ -startup_stm32h750xx.s - - -####################################### -# binaries -####################################### -PREFIX = arm-none-eabi- -# The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx) -# either it can be added to the PATH environment variable. -ifdef GCC_PATH -CC = $(GCC_PATH)/$(PREFIX)gcc -AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp -CP = $(GCC_PATH)/$(PREFIX)objcopy -SZ = $(GCC_PATH)/$(PREFIX)size -else -CC = $(PREFIX)gcc -AS = $(PREFIX)gcc -x assembler-with-cpp -CP = $(PREFIX)objcopy -SZ = $(PREFIX)size -endif -HEX = $(CP) -O ihex -BIN = $(CP) -O binary -S - -####################################### -# CFLAGS -####################################### -# cpu -CPU = -mcpu=cortex-m7 - -# fpu -FPU = -mfpu=fpv5-d16 - -# float-abi -FLOAT-ABI = -mfloat-abi=hard - -# mcu -MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI) - -# macros for gcc -# AS defines -AS_DEFS = - -# C defines -C_DEFS = \ --DUSE_HAL_DRIVER \ --DSTM32H750xx - - -# AS includes -AS_INCLUDES = \ --ICore/Inc - -# C includes -C_INCLUDES = \ --ICore/Inc \ --IDrivers/STM32H7xx_HAL_Driver/Inc \ --IDrivers/STM32H7xx_HAL_Driver/Inc/Legacy \ --IMiddlewares/Third_Party/FreeRTOS/Source/include \ --IMiddlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 \ --IMiddlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F \ --IDrivers/CMSIS/Device/ST/STM32H7xx/Include \ --IDrivers/CMSIS/Include - - -# compile gcc flags -ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections - -CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections - -ifeq ($(DEBUG), 1) -CFLAGS += -g -gdwarf-2 -endif - - -# Generate dependency information -CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" - - -####################################### -# LDFLAGS -####################################### -# link script -LDSCRIPT = STM32H750VBTx_FLASH.ld - -# libraries -LIBS = -lc -lm -lnosys -LIBDIR = -LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections - -# default action: build all -all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin - - -####################################### -# build the application -####################################### -# list of objects -OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o))) -vpath %.c $(sort $(dir $(C_SOURCES))) -# list of ASM program objects -OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o))) -vpath %.s $(sort $(dir $(ASM_SOURCES))) - -$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) - $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@ - -$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR) - $(AS) -c $(CFLAGS) $< -o $@ - -$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile - $(CC) $(OBJECTS) $(LDFLAGS) -o $@ - $(SZ) $@ - -$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR) - $(HEX) $< $@ - -$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR) - $(BIN) $< $@ - -$(BUILD_DIR): - mkdir $@ - -####################################### -# clean up -####################################### -clean: - -rm -fR $(BUILD_DIR) - -####################################### -# dependencies -####################################### --include $(wildcard $(BUILD_DIR)/*.d) - -# *** EOF *** \ No newline at end of file diff --git a/STM32H750VBTx_RAM.ld b/STM32H750VBTx_RAM.ld new file mode 100644 index 0000000..fab23d0 --- /dev/null +++ b/STM32H750VBTx_RAM.ld @@ -0,0 +1,193 @@ +/* +****************************************************************************** +** + +** File : LinkerScript.ld +** +** Author : Auto-generated by System Workbench for STM32 +** +** Abstract : Linker script for STM32H750VBTx series +** 128Kbytes FLASH and 1056Kbytes RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Target : STMicroelectronics STM32 +** +** Distribution: The file is distributed “as is,” without any warranty +** of any kind. +** +***************************************************************************** +** @attention +** +**

© COPYRIGHT(c) 2019 STMicroelectronics

+** +** Redistribution and use in source and binary forms, with or without modification, +** are permitted provided that the following conditions are met: +** 1. Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** 2. Redistributions in binary form must reproduce the above copyright notice, +** this list of conditions and the following disclaimer in the documentation +** and/or other materials provided with the distribution. +** 3. Neither the name of STMicroelectronics nor the names of its contributors +** may be used to endorse or promote products derived from this software +** without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20020000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x200; /* required amount of heap */ +_Min_Stack_Size = 0x400; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +DTCMRAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K +RAM_D1 (xrw) : ORIGIN = 0x24000000, LENGTH = 512K +RAM_D2 (xrw) : ORIGIN = 0x30000000, LENGTH = 288K +RAM_D3 (xrw) : ORIGIN = 0x38000000, LENGTH = 64K +ITCMRAM (xrw) : ORIGIN = 0x00000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 128K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into RAM_D1 */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >RAM_D1 + + /* The program code and other data goes into RAM_D1 */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >RAM_D1 + + /* Constant data goes into RAM_D1 */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >RAM_D1 + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >RAM_D1 + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >RAM_D1 + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >RAM_D1 + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >RAM_D1 + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >RAM_D1 + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM_D2 AT> RAM_D1 + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM_D2 + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM_D2 + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/arm-none-eabi.cmake b/arm-none-eabi.cmake new file mode 100644 index 0000000..83616fe --- /dev/null +++ b/arm-none-eabi.cmake @@ -0,0 +1,4 @@ +set(CMAKE_C_COMPILER arm-none-eabi-gcc) +set(CMAKE_CXX_COMPILER arm-none-eabi-g++) +# Make CMake happy about those compilers +set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY") \ No newline at end of file diff --git a/pyocd_user.py b/pyocd_user.py new file mode 100644 index 0000000..16c258f --- /dev/null +++ b/pyocd_user.py @@ -0,0 +1,18 @@ +DBGMCU_CR = 0xE00E1004 +DBGMCU_VALUE = 0x00700007 + +def will_init_target(target, init_sequence): + def set_traceclken(): + LOG.info("old DBGMCU_CR: " + hex(target.aps[2].read_memory(DBGMCU_CR))) + target.aps[2].write_memory(DBGMCU_CR, DBGMCU_VALUE) + LOG.info("new DBGMCU_CR: " + hex(target.aps[2].read_memory(DBGMCU_CR))) + return + + def wrap(seq): + return seq + + init_sequence.wrap_task('discovery', lambda seq: + seq.insert_before('find_components', + ('set_traceclken', set_traceclken) + ) + ) \ No newline at end of file