mirror of https://github.com/rusefi/wideband.git
OpenBLT: extract common code for f1 boards (#255)
(cherry picked from commit b892ed7520b20f00f1dbae88001798453a5bb07d) Co-authored-by: Andrey Gusakov <dron0gus@gmail.com>
This commit is contained in:
parent
5ae6cfbb41
commit
d8f8783d8c
|
@ -0,0 +1,195 @@
|
||||||
|
#****************************************************************************************
|
||||||
|
#| Description: Makefile for GNU ARM Embedded toolchain.
|
||||||
|
#| File Name: makefile
|
||||||
|
#|
|
||||||
|
#|---------------------------------------------------------------------------------------
|
||||||
|
#| C O P Y R I G H T
|
||||||
|
#|---------------------------------------------------------------------------------------
|
||||||
|
#| Copyright (c) 2017 by Feaser http://www.feaser.com All rights reserved
|
||||||
|
#|
|
||||||
|
#|---------------------------------------------------------------------------------------
|
||||||
|
#| L I C E N S E
|
||||||
|
#|---------------------------------------------------------------------------------------
|
||||||
|
#| This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
|
||||||
|
#| modify it under the terms of the GNU General Public License as published by the Free
|
||||||
|
#| Software Foundation, either version 3 of the License, or (at your option) any later
|
||||||
|
#| version.
|
||||||
|
#|
|
||||||
|
#| OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||||
|
#| without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
#| PURPOSE. See the GNU General Public License for more details.
|
||||||
|
#|
|
||||||
|
#| You have received a copy of the GNU General Public License along with OpenBLT. It
|
||||||
|
#| should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
|
||||||
|
#|
|
||||||
|
#****************************************************************************************
|
||||||
|
SHELL = sh
|
||||||
|
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
#| Configure project name |
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
PROJ_NAME=openblt_$(BOARD)
|
||||||
|
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
#| Configure OpenBLT path |
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
OPENBLT_PATH=../../../ext/openblt/Target
|
||||||
|
OPENBLT_COMMON_PATH=../../f1_common/openblt
|
||||||
|
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
#| Configure tool path |
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
# Compiler should be in PATH
|
||||||
|
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
#| Collect project files |
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
# Recursive wildcard function implementation. Example usages:
|
||||||
|
# $(call rwildcard, , *.c *.h)
|
||||||
|
# --> Returns all *.c and *.h files in the current directory and below
|
||||||
|
# $(call rwildcard, /lib/, *.c)
|
||||||
|
# --> Returns all *.c files in the /lib directory and below
|
||||||
|
rwildcard = $(strip $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d)))
|
||||||
|
|
||||||
|
# Collect all application files in the current directory and its subdirectories, but
|
||||||
|
# exclude flash-layout.c as this one is directly included in a source file, when used.
|
||||||
|
PROJ_FILES = $(filter-out flash_layout.c, $(call rwildcard, , *.c *.h *.s))
|
||||||
|
# Collect common files
|
||||||
|
PROJ_FILES += $(wildcard $(OPENBLT_COMMON_PATH)/*.c)
|
||||||
|
PROJ_FILES += $(wildcard $(OPENBLT_COMMON_PATH)/*.h)
|
||||||
|
PROJ_FILES += $(wildcard $(OPENBLT_COMMON_PATH)/lib/*.c)
|
||||||
|
PROJ_FILES += $(wildcard $(OPENBLT_COMMON_PATH)/lib/*.h)
|
||||||
|
# Collect bootloader core files
|
||||||
|
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/*.c)
|
||||||
|
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/*.h)
|
||||||
|
# Collect bootloader port files
|
||||||
|
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/ARMCM3_STM32F1/*.c)
|
||||||
|
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/ARMCM3_STM32F1/*.h)
|
||||||
|
# Collect bootloader port compiler specific files
|
||||||
|
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/ARMCM3_STM32F1/GCC/*.c)
|
||||||
|
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/ARMCM3_STM32F1/GCC/*.h)
|
||||||
|
# reuse ST32F1xx HAL and CMSIS from one of OpenBLT exaples to avoid having copy in this git
|
||||||
|
PROJ_FILES += $(filter-out uip, $(call rwildcard, $(OPENBLT_PATH)/Demo/ARMCM3_STM32F1_Nucleo_F103RB_GCC/Boot/lib/CMSIS, *.c *.h *.s))
|
||||||
|
PROJ_FILES += $(filter-out uip, $(call rwildcard, $(OPENBLT_PATH)/Demo/ARMCM3_STM32F1_Nucleo_F103RB_GCC/Boot/lib/STM32F1xx_HAL_Driver/, *.c *.h *.s))
|
||||||
|
|
||||||
|
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
#| Toolchain binaries |
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
RM = rm
|
||||||
|
CC = $(TOOL_PATH)arm-none-eabi-gcc
|
||||||
|
LN = $(TOOL_PATH)arm-none-eabi-gcc
|
||||||
|
OC = $(TOOL_PATH)arm-none-eabi-objcopy
|
||||||
|
OD = $(TOOL_PATH)arm-none-eabi-objdump
|
||||||
|
AS = $(TOOL_PATH)arm-none-eabi-gcc
|
||||||
|
SZ = $(TOOL_PATH)arm-none-eabi-size
|
||||||
|
|
||||||
|
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
#| Filter project files
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
PROJ_ASRCS = $(filter %.s,$(foreach file,$(PROJ_FILES),$(notdir $(file))))
|
||||||
|
PROJ_CSRCS = $(filter %.c,$(foreach file,$(PROJ_FILES),$(notdir $(file))))
|
||||||
|
PROJ_CHDRS = $(filter %.h,$(foreach file,$(PROJ_FILES),$(notdir $(file))))
|
||||||
|
|
||||||
|
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
#| Set important path variables |
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
VPATH = $(foreach path,$(sort $(foreach file,$(PROJ_FILES),$(dir $(file)))) $(subst \,/,$(OBJ_PATH)),$(path) :)
|
||||||
|
OBJ_PATH = obj
|
||||||
|
BIN_PATH = bin
|
||||||
|
INC_PATH += -I../io
|
||||||
|
INC_PATH += $(patsubst %/,%,$(patsubst %,-I%,$(sort $(foreach file,$(filter %.h,$(PROJ_FILES)),$(dir $(file))))))
|
||||||
|
LIB_PATH =
|
||||||
|
|
||||||
|
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
#| Options for toolchain binaries |
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
STDFLAGS = -mcpu=cortex-m3 -mthumb -std=gnu11 -fstack-usage -Wall -specs=nano.specs
|
||||||
|
STDFLAGS += -fdata-sections -ffunction-sections -Wall -g -Wno-strict-aliasing
|
||||||
|
OPTFLAGS = -Os
|
||||||
|
CFLAGS = $(STDFLAGS) $(OPTFLAGS)
|
||||||
|
CFLAGS += -DUSE_FULL_LL_DRIVER -DUSE_HAL_DRIVER -DSTM32F103xB
|
||||||
|
CFLAGS += -D__weak="__attribute__((weak))" -D__packed="__attribute__((__packed__))"
|
||||||
|
CFLAGS += $(INC_PATH)
|
||||||
|
AFLAGS = $(CFLAGS)
|
||||||
|
LFLAGS = $(STDFLAGS) $(OPTFLAGS)
|
||||||
|
LFLAGS += -Wl,-script="$(OPENBLT_COMMON_PATH)/STM32F103RB_FLASH.ld" -Wl,-Map=$(BIN_PATH)/$(PROJ_NAME).map
|
||||||
|
LFLAGS += -Wl,--gc-sections $(LIB_PATH)
|
||||||
|
OFLAGS = -O srec
|
||||||
|
ODFLAGS = -x
|
||||||
|
SZFLAGS = -B -d
|
||||||
|
RMFLAGS = -f
|
||||||
|
|
||||||
|
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
#| Specify library files |
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
LIBS =
|
||||||
|
|
||||||
|
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
#| Define targets |
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
AOBJS = $(patsubst %.s,%.o,$(PROJ_ASRCS))
|
||||||
|
COBJS = $(patsubst %.c,%.o,$(PROJ_CSRCS))
|
||||||
|
|
||||||
|
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
#| Make ALL |
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
.PHONY: all
|
||||||
|
all: $(BIN_PATH)/$(PROJ_NAME).srec $(BIN_PATH)/$(PROJ_NAME).hex $(BIN_PATH)/$(PROJ_NAME).bin
|
||||||
|
|
||||||
|
|
||||||
|
$(BIN_PATH)/$(PROJ_NAME).srec : $(BIN_PATH)/$(PROJ_NAME).elf
|
||||||
|
@$(OC) $< $(OFLAGS) $@
|
||||||
|
@$(OD) $(ODFLAGS) $< > $(BIN_PATH)/$(PROJ_NAME).map
|
||||||
|
@echo +++ Summary of memory consumption:
|
||||||
|
@$(SZ) $(SZFLAGS) $<
|
||||||
|
@echo +++ Build complete [$(notdir $@)]
|
||||||
|
|
||||||
|
$(BIN_PATH)/$(PROJ_NAME).hex : $(BIN_PATH)/$(PROJ_NAME).elf
|
||||||
|
@mkdir -p $(@D)
|
||||||
|
@$(OC) -O ihex $< $@
|
||||||
|
|
||||||
|
$(BIN_PATH)/$(PROJ_NAME).bin : $(BIN_PATH)/$(PROJ_NAME).elf
|
||||||
|
@mkdir -p $(@D)
|
||||||
|
@$(OC) -O binary $< $@
|
||||||
|
|
||||||
|
$(BIN_PATH)/$(PROJ_NAME).elf : $(AOBJS) $(COBJS)
|
||||||
|
@echo +++ Linking [$(notdir $@)]
|
||||||
|
@mkdir -p $(BIN_PATH)
|
||||||
|
@$(LN) $(LFLAGS) -o $@ $(patsubst %.o,$(OBJ_PATH)/%.o,$(^F)) $(LIBS)
|
||||||
|
|
||||||
|
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
#| Compile and assemble |
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
$(AOBJS): %.o: %.s $(PROJ_CHDRS)
|
||||||
|
@mkdir -p $(OBJ_PATH)
|
||||||
|
@echo +++ Assembling [$(notdir $<)]
|
||||||
|
@$(AS) $(AFLAGS) -c $< -o $(OBJ_PATH)/$(@F)
|
||||||
|
|
||||||
|
$(COBJS): %.o: %.c $(PROJ_CHDRS)
|
||||||
|
@mkdir -p $(OBJ_PATH)
|
||||||
|
@echo +++ Compiling [$(notdir $<)]
|
||||||
|
@$(CC) $(CFLAGS) -c $< -o $(OBJ_PATH)/$(@F)
|
||||||
|
|
||||||
|
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
#| Make CLEAN |
|
||||||
|
#|--------------------------------------------------------------------------------------|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
@echo +++ Cleaning build environment
|
||||||
|
@$(RM) $(RMFLAGS) $(foreach file,$(AOBJS),$(OBJ_PATH)/$(file))
|
||||||
|
@$(RM) $(RMFLAGS) $(foreach file,$(COBJS),$(OBJ_PATH)/$(file))
|
||||||
|
@$(RM) $(RMFLAGS) $(patsubst %.o,%.lst,$(foreach file,$(COBJS),$(OBJ_PATH)/$(file)))
|
||||||
|
@$(RM) $(RMFLAGS) $(BIN_PATH)/$(PROJ_NAME).elf $(BIN_PATH)/$(PROJ_NAME).map
|
||||||
|
@$(RM) $(RMFLAGS) $(BIN_PATH)/$(PROJ_NAME).srec
|
||||||
|
@$(RM) $(RMFLAGS) -r $(OBJ_PATH)
|
||||||
|
@$(RM) $(RMFLAGS) -r $(BIN_PATH)
|
||||||
|
@echo +++ Clean complete
|
|
@ -6,7 +6,7 @@
|
||||||
#include "stm32f1xx.h" /* STM32 registers and drivers */
|
#include "stm32f1xx.h" /* STM32 registers and drivers */
|
||||||
#include "stm32f1xx_ll_gpio.h" /* STM32 LL GPIO header */
|
#include "stm32f1xx_ll_gpio.h" /* STM32 LL GPIO header */
|
||||||
|
|
||||||
#include "../io/io_pins.h"
|
#include "io_pins.h"
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* Local data declarations
|
* Local data declarations
|
|
@ -1,189 +1,3 @@
|
||||||
#****************************************************************************************
|
|
||||||
#| Description: Makefile for GNU ARM Embedded toolchain.
|
|
||||||
#| File Name: makefile
|
|
||||||
#|
|
|
||||||
#|---------------------------------------------------------------------------------------
|
|
||||||
#| C O P Y R I G H T
|
|
||||||
#|---------------------------------------------------------------------------------------
|
|
||||||
#| Copyright (c) 2017 by Feaser http://www.feaser.com All rights reserved
|
|
||||||
#|
|
|
||||||
#|---------------------------------------------------------------------------------------
|
|
||||||
#| L I C E N S E
|
|
||||||
#|---------------------------------------------------------------------------------------
|
|
||||||
#| This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
|
|
||||||
#| modify it under the terms of the GNU General Public License as published by the Free
|
|
||||||
#| Software Foundation, either version 3 of the License, or (at your option) any later
|
|
||||||
#| version.
|
|
||||||
#|
|
|
||||||
#| OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
#| without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
||||||
#| PURPOSE. See the GNU General Public License for more details.
|
|
||||||
#|
|
|
||||||
#| You have received a copy of the GNU General Public License along with OpenBLT. It
|
|
||||||
#| should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
|
|
||||||
#|
|
|
||||||
#****************************************************************************************
|
|
||||||
SHELL = sh
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Configure project name |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
BOARD?=f1_rev2
|
BOARD?=f1_rev2
|
||||||
PROJ_NAME=openblt_$(BOARD)
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
include ../../f1_common/openblt/Makefile
|
||||||
#| Configure OpenBLT path |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
OPENBLT_PATH=../../../ext/openblt/Target
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Configure tool path |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
# Compiler should be in PATH
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Collect project files |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
# Recursive wildcard function implementation. Example usages:
|
|
||||||
# $(call rwildcard, , *.c *.h)
|
|
||||||
# --> Returns all *.c and *.h files in the current directory and below
|
|
||||||
# $(call rwildcard, /lib/, *.c)
|
|
||||||
# --> Returns all *.c files in the /lib directory and below
|
|
||||||
rwildcard = $(strip $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d)))
|
|
||||||
|
|
||||||
# Collect all application files in the current directory and its subdirectories, but
|
|
||||||
# exclude flash-layout.c as this one is directly included in a source file, when used.
|
|
||||||
PROJ_FILES = $(filter-out flash_layout.c, $(call rwildcard, , *.c *.h *.s))
|
|
||||||
# Collect bootloader core files
|
|
||||||
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/*.c)
|
|
||||||
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/*.h)
|
|
||||||
# Collect bootloader port files
|
|
||||||
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/ARMCM3_STM32F1/*.c)
|
|
||||||
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/ARMCM3_STM32F1/*.h)
|
|
||||||
# Collect bootloader port compiler specific files
|
|
||||||
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/ARMCM3_STM32F1/GCC/*.c)
|
|
||||||
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/ARMCM3_STM32F1/GCC/*.h)
|
|
||||||
# reuse ST32F1xx HAL and CMSIS from one of OpenBLT exaples to avoid having copy in this git
|
|
||||||
PROJ_FILES += $(filter-out uip, $(call rwildcard, $(OPENBLT_PATH)/Demo/ARMCM3_STM32F1_Nucleo_F103RB_GCC/Boot/lib/CMSIS, *.c *.h *.s))
|
|
||||||
PROJ_FILES += $(filter-out uip, $(call rwildcard, $(OPENBLT_PATH)/Demo/ARMCM3_STM32F1_Nucleo_F103RB_GCC/Boot/lib/STM32F1xx_HAL_Driver/, *.c *.h *.s))
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Toolchain binaries |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
RM = rm
|
|
||||||
CC = $(TOOL_PATH)arm-none-eabi-gcc
|
|
||||||
LN = $(TOOL_PATH)arm-none-eabi-gcc
|
|
||||||
OC = $(TOOL_PATH)arm-none-eabi-objcopy
|
|
||||||
OD = $(TOOL_PATH)arm-none-eabi-objdump
|
|
||||||
AS = $(TOOL_PATH)arm-none-eabi-gcc
|
|
||||||
SZ = $(TOOL_PATH)arm-none-eabi-size
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Filter project files
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
PROJ_ASRCS = $(filter %.s,$(foreach file,$(PROJ_FILES),$(notdir $(file))))
|
|
||||||
PROJ_CSRCS = $(filter %.c,$(foreach file,$(PROJ_FILES),$(notdir $(file))))
|
|
||||||
PROJ_CHDRS = $(filter %.h,$(foreach file,$(PROJ_FILES),$(notdir $(file))))
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Set important path variables |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
VPATH = $(foreach path,$(sort $(foreach file,$(PROJ_FILES),$(dir $(file)))) $(subst \,/,$(OBJ_PATH)),$(path) :)
|
|
||||||
OBJ_PATH = obj
|
|
||||||
BIN_PATH = bin
|
|
||||||
INC_PATH += $(patsubst %/,%,$(patsubst %,-I%,$(sort $(foreach file,$(filter %.h,$(PROJ_FILES)),$(dir $(file))))))
|
|
||||||
LIB_PATH =
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Options for toolchain binaries |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
STDFLAGS = -mcpu=cortex-m3 -mthumb -std=gnu11 -fstack-usage -Wall -specs=nano.specs
|
|
||||||
STDFLAGS += -fdata-sections -ffunction-sections -Wall -g -Wno-strict-aliasing
|
|
||||||
OPTFLAGS = -Os
|
|
||||||
CFLAGS = $(STDFLAGS) $(OPTFLAGS)
|
|
||||||
CFLAGS += -DUSE_FULL_LL_DRIVER -DUSE_HAL_DRIVER -DSTM32F103xB
|
|
||||||
CFLAGS += -D__weak="__attribute__((weak))" -D__packed="__attribute__((__packed__))"
|
|
||||||
CFLAGS += $(INC_PATH)
|
|
||||||
AFLAGS = $(CFLAGS)
|
|
||||||
LFLAGS = $(STDFLAGS) $(OPTFLAGS)
|
|
||||||
LFLAGS += -Wl,-script="STM32F103RB_FLASH.ld" -Wl,-Map=$(BIN_PATH)/$(PROJ_NAME).map
|
|
||||||
LFLAGS += -Wl,--gc-sections $(LIB_PATH)
|
|
||||||
OFLAGS = -O srec
|
|
||||||
ODFLAGS = -x
|
|
||||||
SZFLAGS = -B -d
|
|
||||||
RMFLAGS = -f
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Specify library files |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
LIBS =
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Define targets |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
AOBJS = $(patsubst %.s,%.o,$(PROJ_ASRCS))
|
|
||||||
COBJS = $(patsubst %.c,%.o,$(PROJ_CSRCS))
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Make ALL |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
.PHONY: all
|
|
||||||
all: $(BIN_PATH)/$(PROJ_NAME).srec $(BIN_PATH)/$(PROJ_NAME).hex $(BIN_PATH)/$(PROJ_NAME).bin
|
|
||||||
|
|
||||||
|
|
||||||
$(BIN_PATH)/$(PROJ_NAME).srec : $(BIN_PATH)/$(PROJ_NAME).elf
|
|
||||||
@$(OC) $< $(OFLAGS) $@
|
|
||||||
@$(OD) $(ODFLAGS) $< > $(BIN_PATH)/$(PROJ_NAME).map
|
|
||||||
@echo +++ Summary of memory consumption:
|
|
||||||
@$(SZ) $(SZFLAGS) $<
|
|
||||||
@echo +++ Build complete [$(notdir $@)]
|
|
||||||
|
|
||||||
$(BIN_PATH)/$(PROJ_NAME).hex : $(BIN_PATH)/$(PROJ_NAME).elf
|
|
||||||
@mkdir -p $(@D)
|
|
||||||
@$(OC) -O ihex $< $@
|
|
||||||
|
|
||||||
$(BIN_PATH)/$(PROJ_NAME).bin : $(BIN_PATH)/$(PROJ_NAME).elf
|
|
||||||
@mkdir -p $(@D)
|
|
||||||
@$(OC) -O binary $< $@
|
|
||||||
|
|
||||||
$(BIN_PATH)/$(PROJ_NAME).elf : $(AOBJS) $(COBJS)
|
|
||||||
@echo +++ Linking [$(notdir $@)]
|
|
||||||
@mkdir -p $(BIN_PATH)
|
|
||||||
@$(LN) $(LFLAGS) -o $@ $(patsubst %.o,$(OBJ_PATH)/%.o,$(^F)) $(LIBS)
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Compile and assemble |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
$(AOBJS): %.o: %.s $(PROJ_CHDRS)
|
|
||||||
@mkdir -p $(OBJ_PATH)
|
|
||||||
@echo +++ Assembling [$(notdir $<)]
|
|
||||||
@$(AS) $(AFLAGS) -c $< -o $(OBJ_PATH)/$(@F)
|
|
||||||
|
|
||||||
$(COBJS): %.o: %.c $(PROJ_CHDRS)
|
|
||||||
@mkdir -p $(OBJ_PATH)
|
|
||||||
@echo +++ Compiling [$(notdir $<)]
|
|
||||||
@$(CC) $(CFLAGS) -c $< -o $(OBJ_PATH)/$(@F)
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Make CLEAN |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
.PHONY: clean
|
|
||||||
clean:
|
|
||||||
@echo +++ Cleaning build environment
|
|
||||||
@$(RM) $(RMFLAGS) $(foreach file,$(AOBJS),$(OBJ_PATH)/$(file))
|
|
||||||
@$(RM) $(RMFLAGS) $(foreach file,$(COBJS),$(OBJ_PATH)/$(file))
|
|
||||||
@$(RM) $(RMFLAGS) $(patsubst %.o,%.lst,$(foreach file,$(COBJS),$(OBJ_PATH)/$(file)))
|
|
||||||
@$(RM) $(RMFLAGS) $(BIN_PATH)/$(PROJ_NAME).elf $(BIN_PATH)/$(PROJ_NAME).map
|
|
||||||
@$(RM) $(RMFLAGS) $(BIN_PATH)/$(PROJ_NAME).srec
|
|
||||||
@$(RM) $(RMFLAGS) -r $(OBJ_PATH)
|
|
||||||
@$(RM) $(RMFLAGS) -r $(BIN_PATH)
|
|
||||||
@echo +++ Clean complete
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#include "stm32f1xx_ll_usart.h" /* STM32 LL USART header */
|
#include "stm32f1xx_ll_usart.h" /* STM32 LL USART header */
|
||||||
#include "stm32f1xx_ll_gpio.h" /* STM32 LL GPIO header */
|
#include "stm32f1xx_ll_gpio.h" /* STM32 LL GPIO header */
|
||||||
|
|
||||||
#include "../io/io_pins.h"
|
#include "io_pins.h"
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* Function prototypes
|
* Function prototypes
|
||||||
|
|
|
@ -1,189 +1,3 @@
|
||||||
#****************************************************************************************
|
|
||||||
#| Description: Makefile for GNU ARM Embedded toolchain.
|
|
||||||
#| File Name: makefile
|
|
||||||
#|
|
|
||||||
#|---------------------------------------------------------------------------------------
|
|
||||||
#| C O P Y R I G H T
|
|
||||||
#|---------------------------------------------------------------------------------------
|
|
||||||
#| Copyright (c) 2017 by Feaser http://www.feaser.com All rights reserved
|
|
||||||
#|
|
|
||||||
#|---------------------------------------------------------------------------------------
|
|
||||||
#| L I C E N S E
|
|
||||||
#|---------------------------------------------------------------------------------------
|
|
||||||
#| This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
|
|
||||||
#| modify it under the terms of the GNU General Public License as published by the Free
|
|
||||||
#| Software Foundation, either version 3 of the License, or (at your option) any later
|
|
||||||
#| version.
|
|
||||||
#|
|
|
||||||
#| OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
#| without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
||||||
#| PURPOSE. See the GNU General Public License for more details.
|
|
||||||
#|
|
|
||||||
#| You have received a copy of the GNU General Public License along with OpenBLT. It
|
|
||||||
#| should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
|
|
||||||
#|
|
|
||||||
#****************************************************************************************
|
|
||||||
SHELL = sh
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Configure project name |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
BOARD?=f1_rev3
|
BOARD?=f1_rev3
|
||||||
PROJ_NAME=openblt_$(BOARD)
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
include ../../f1_common/openblt/Makefile
|
||||||
#| Configure OpenBLT path |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
OPENBLT_PATH=../../../ext/openblt/Target
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Configure tool path |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
# Compiler should be in PATH
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Collect project files |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
# Recursive wildcard function implementation. Example usages:
|
|
||||||
# $(call rwildcard, , *.c *.h)
|
|
||||||
# --> Returns all *.c and *.h files in the current directory and below
|
|
||||||
# $(call rwildcard, /lib/, *.c)
|
|
||||||
# --> Returns all *.c files in the /lib directory and below
|
|
||||||
rwildcard = $(strip $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d)))
|
|
||||||
|
|
||||||
# Collect all application files in the current directory and its subdirectories, but
|
|
||||||
# exclude flash-layout.c as this one is directly included in a source file, when used.
|
|
||||||
PROJ_FILES = $(filter-out flash_layout.c, $(call rwildcard, , *.c *.h *.s))
|
|
||||||
# Collect bootloader core files
|
|
||||||
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/*.c)
|
|
||||||
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/*.h)
|
|
||||||
# Collect bootloader port files
|
|
||||||
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/ARMCM3_STM32F1/*.c)
|
|
||||||
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/ARMCM3_STM32F1/*.h)
|
|
||||||
# Collect bootloader port compiler specific files
|
|
||||||
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/ARMCM3_STM32F1/GCC/*.c)
|
|
||||||
PROJ_FILES += $(wildcard $(OPENBLT_PATH)/Source/ARMCM3_STM32F1/GCC/*.h)
|
|
||||||
# reuse ST32F1xx HAL and CMSIS from one of OpenBLT exaples to avoid having copy in this git
|
|
||||||
PROJ_FILES += $(filter-out uip, $(call rwildcard, $(OPENBLT_PATH)/Demo/ARMCM3_STM32F1_Nucleo_F103RB_GCC/Boot/lib/CMSIS, *.c *.h *.s))
|
|
||||||
PROJ_FILES += $(filter-out uip, $(call rwildcard, $(OPENBLT_PATH)/Demo/ARMCM3_STM32F1_Nucleo_F103RB_GCC/Boot/lib/STM32F1xx_HAL_Driver/, *.c *.h *.s))
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Toolchain binaries |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
RM = rm
|
|
||||||
CC = $(TOOL_PATH)arm-none-eabi-gcc
|
|
||||||
LN = $(TOOL_PATH)arm-none-eabi-gcc
|
|
||||||
OC = $(TOOL_PATH)arm-none-eabi-objcopy
|
|
||||||
OD = $(TOOL_PATH)arm-none-eabi-objdump
|
|
||||||
AS = $(TOOL_PATH)arm-none-eabi-gcc
|
|
||||||
SZ = $(TOOL_PATH)arm-none-eabi-size
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Filter project files
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
PROJ_ASRCS = $(filter %.s,$(foreach file,$(PROJ_FILES),$(notdir $(file))))
|
|
||||||
PROJ_CSRCS = $(filter %.c,$(foreach file,$(PROJ_FILES),$(notdir $(file))))
|
|
||||||
PROJ_CHDRS = $(filter %.h,$(foreach file,$(PROJ_FILES),$(notdir $(file))))
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Set important path variables |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
VPATH = $(foreach path,$(sort $(foreach file,$(PROJ_FILES),$(dir $(file)))) $(subst \,/,$(OBJ_PATH)),$(path) :)
|
|
||||||
OBJ_PATH = obj
|
|
||||||
BIN_PATH = bin
|
|
||||||
INC_PATH += $(patsubst %/,%,$(patsubst %,-I%,$(sort $(foreach file,$(filter %.h,$(PROJ_FILES)),$(dir $(file))))))
|
|
||||||
LIB_PATH =
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Options for toolchain binaries |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
STDFLAGS = -mcpu=cortex-m3 -mthumb -std=gnu11 -fstack-usage -Wall -specs=nano.specs
|
|
||||||
STDFLAGS += -fdata-sections -ffunction-sections -Wall -g -Wno-strict-aliasing
|
|
||||||
OPTFLAGS = -Os
|
|
||||||
CFLAGS = $(STDFLAGS) $(OPTFLAGS)
|
|
||||||
CFLAGS += -DUSE_FULL_LL_DRIVER -DUSE_HAL_DRIVER -DSTM32F103xB
|
|
||||||
CFLAGS += -D__weak="__attribute__((weak))" -D__packed="__attribute__((__packed__))"
|
|
||||||
CFLAGS += $(INC_PATH)
|
|
||||||
AFLAGS = $(CFLAGS)
|
|
||||||
LFLAGS = $(STDFLAGS) $(OPTFLAGS)
|
|
||||||
LFLAGS += -Wl,-script="STM32F103RB_FLASH.ld" -Wl,-Map=$(BIN_PATH)/$(PROJ_NAME).map
|
|
||||||
LFLAGS += -Wl,--gc-sections $(LIB_PATH)
|
|
||||||
OFLAGS = -O srec
|
|
||||||
ODFLAGS = -x
|
|
||||||
SZFLAGS = -B -d
|
|
||||||
RMFLAGS = -f
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Specify library files |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
LIBS =
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Define targets |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
AOBJS = $(patsubst %.s,%.o,$(PROJ_ASRCS))
|
|
||||||
COBJS = $(patsubst %.c,%.o,$(PROJ_CSRCS))
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Make ALL |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
.PHONY: all
|
|
||||||
all: $(BIN_PATH)/$(PROJ_NAME).srec $(BIN_PATH)/$(PROJ_NAME).hex $(BIN_PATH)/$(PROJ_NAME).bin
|
|
||||||
|
|
||||||
|
|
||||||
$(BIN_PATH)/$(PROJ_NAME).srec : $(BIN_PATH)/$(PROJ_NAME).elf
|
|
||||||
@$(OC) $< $(OFLAGS) $@
|
|
||||||
@$(OD) $(ODFLAGS) $< > $(BIN_PATH)/$(PROJ_NAME).map
|
|
||||||
@echo +++ Summary of memory consumption:
|
|
||||||
@$(SZ) $(SZFLAGS) $<
|
|
||||||
@echo +++ Build complete [$(notdir $@)]
|
|
||||||
|
|
||||||
$(BIN_PATH)/$(PROJ_NAME).hex : $(BIN_PATH)/$(PROJ_NAME).elf
|
|
||||||
@mkdir -p $(@D)
|
|
||||||
@$(OC) -O ihex $< $@
|
|
||||||
|
|
||||||
$(BIN_PATH)/$(PROJ_NAME).bin : $(BIN_PATH)/$(PROJ_NAME).elf
|
|
||||||
@mkdir -p $(@D)
|
|
||||||
@$(OC) -O binary $< $@
|
|
||||||
|
|
||||||
$(BIN_PATH)/$(PROJ_NAME).elf : $(AOBJS) $(COBJS)
|
|
||||||
@echo +++ Linking [$(notdir $@)]
|
|
||||||
@mkdir -p $(BIN_PATH)
|
|
||||||
@$(LN) $(LFLAGS) -o $@ $(patsubst %.o,$(OBJ_PATH)/%.o,$(^F)) $(LIBS)
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Compile and assemble |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
$(AOBJS): %.o: %.s $(PROJ_CHDRS)
|
|
||||||
@mkdir -p $(OBJ_PATH)
|
|
||||||
@echo +++ Assembling [$(notdir $<)]
|
|
||||||
@$(AS) $(AFLAGS) -c $< -o $(OBJ_PATH)/$(@F)
|
|
||||||
|
|
||||||
$(COBJS): %.o: %.c $(PROJ_CHDRS)
|
|
||||||
@mkdir -p $(OBJ_PATH)
|
|
||||||
@echo +++ Compiling [$(notdir $<)]
|
|
||||||
@$(CC) $(CFLAGS) -c $< -o $(OBJ_PATH)/$(@F)
|
|
||||||
|
|
||||||
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
#| Make CLEAN |
|
|
||||||
#|--------------------------------------------------------------------------------------|
|
|
||||||
.PHONY: clean
|
|
||||||
clean:
|
|
||||||
@echo +++ Cleaning build environment
|
|
||||||
@$(RM) $(RMFLAGS) $(foreach file,$(AOBJS),$(OBJ_PATH)/$(file))
|
|
||||||
@$(RM) $(RMFLAGS) $(foreach file,$(COBJS),$(OBJ_PATH)/$(file))
|
|
||||||
@$(RM) $(RMFLAGS) $(patsubst %.o,%.lst,$(foreach file,$(COBJS),$(OBJ_PATH)/$(file)))
|
|
||||||
@$(RM) $(RMFLAGS) $(BIN_PATH)/$(PROJ_NAME).elf $(BIN_PATH)/$(PROJ_NAME).map
|
|
||||||
@$(RM) $(RMFLAGS) $(BIN_PATH)/$(PROJ_NAME).srec
|
|
||||||
@$(RM) $(RMFLAGS) -r $(OBJ_PATH)
|
|
||||||
@$(RM) $(RMFLAGS) -r $(BIN_PATH)
|
|
||||||
@echo +++ Clean complete
|
|
||||||
|
|
|
@ -1,168 +0,0 @@
|
||||||
/*
|
|
||||||
*****************************************************************************
|
|
||||||
**
|
|
||||||
|
|
||||||
** File : stm32_flash.ld
|
|
||||||
**
|
|
||||||
** Abstract : Linker script for STM32F103RB Device with
|
|
||||||
** 128KByte FLASH, 20KByte 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
|
|
||||||
**
|
|
||||||
** Environment : Atollic TrueSTUDIO(R)
|
|
||||||
**
|
|
||||||
** Distribution: The file is distributed as is, without any warranty
|
|
||||||
** of any kind.
|
|
||||||
**
|
|
||||||
** (c)Copyright Atollic AB.
|
|
||||||
** You may use this file as-is or modify it according to the needs of your
|
|
||||||
** project. This file may only be built (assembled or compiled and linked)
|
|
||||||
** using the Atollic TrueSTUDIO(R) product. The use of this file together
|
|
||||||
** with other tools than Atollic TrueSTUDIO(R) is not permitted.
|
|
||||||
**
|
|
||||||
*****************************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Entry Point */
|
|
||||||
ENTRY(Reset_Handler)
|
|
||||||
|
|
||||||
/* Highest address of the user mode stack */
|
|
||||||
_estack = 0x20005000; /* 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
|
|
||||||
{
|
|
||||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
|
|
||||||
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 8K
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Define output sections */
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
/* The startup code goes first into FLASH */
|
|
||||||
.isr_vector :
|
|
||||||
{
|
|
||||||
. = ALIGN(4);
|
|
||||||
KEEP(*(.isr_vector)) /* Startup code */
|
|
||||||
. = ALIGN(4);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* The program code and other data goes into FLASH */
|
|
||||||
.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 */
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* Constant data goes into FLASH */
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
. = ALIGN(4);
|
|
||||||
*(.rodata) /* .rodata sections (constants, strings, etc.) */
|
|
||||||
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
|
|
||||||
. = ALIGN(4);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
|
|
||||||
.ARM : {
|
|
||||||
__exidx_start = .;
|
|
||||||
*(.ARM.exidx*)
|
|
||||||
__exidx_end = .;
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.preinit_array :
|
|
||||||
{
|
|
||||||
PROVIDE_HIDDEN (__preinit_array_start = .);
|
|
||||||
KEEP (*(.preinit_array*))
|
|
||||||
PROVIDE_HIDDEN (__preinit_array_end = .);
|
|
||||||
} >FLASH
|
|
||||||
.init_array :
|
|
||||||
{
|
|
||||||
PROVIDE_HIDDEN (__init_array_start = .);
|
|
||||||
KEEP (*(SORT(.init_array.*)))
|
|
||||||
KEEP (*(.init_array*))
|
|
||||||
PROVIDE_HIDDEN (__init_array_end = .);
|
|
||||||
} >FLASH
|
|
||||||
.fini_array :
|
|
||||||
{
|
|
||||||
PROVIDE_HIDDEN (__fini_array_start = .);
|
|
||||||
KEEP (*(SORT(.fini_array.*)))
|
|
||||||
KEEP (*(.fini_array*))
|
|
||||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* 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 AT> FLASH
|
|
||||||
|
|
||||||
|
|
||||||
/* 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
|
|
||||||
|
|
||||||
/* User_heap_stack section, used to check that there is enough RAM left */
|
|
||||||
._user_heap_stack :
|
|
||||||
{
|
|
||||||
. = ALIGN(4);
|
|
||||||
PROVIDE ( end = . );
|
|
||||||
PROVIDE ( _end = . );
|
|
||||||
. = . + _Min_Heap_Size;
|
|
||||||
. = . + _Min_Stack_Size;
|
|
||||||
. = ALIGN(4);
|
|
||||||
} >RAM
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Remove information from the standard libraries */
|
|
||||||
/DISCARD/ :
|
|
||||||
{
|
|
||||||
libc.a ( * )
|
|
||||||
libm.a ( * )
|
|
||||||
libgcc.a ( * )
|
|
||||||
}
|
|
||||||
|
|
||||||
.ARM.attributes 0 : { *(.ARM.attributes) }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -1,280 +0,0 @@
|
||||||
/****************************************************************************************
|
|
||||||
* Include files
|
|
||||||
****************************************************************************************/
|
|
||||||
#include "boot.h" /* bootloader generic header */
|
|
||||||
#include "led.h" /* LED driver header */
|
|
||||||
#include "stm32f1xx.h" /* STM32 registers and drivers */
|
|
||||||
#include "stm32f1xx_ll_gpio.h" /* STM32 LL GPIO header */
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* B A C K D O O R E N T R Y H O O K F U N C T I O N S
|
|
||||||
****************************************************************************************/
|
|
||||||
|
|
||||||
#if (BOOT_BACKDOOR_HOOKS_ENABLE > 0)
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Initializes the backdoor entry option.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void BackDoorInitHook(void)
|
|
||||||
{
|
|
||||||
} /*** end of BackDoorInitHook ***/
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Checks if a backdoor entry is requested.
|
|
||||||
** \return BLT_TRUE if the backdoor entry is requested, BLT_FALSE otherwise.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
blt_bool BackDoorEntryHook(void)
|
|
||||||
{
|
|
||||||
/* default implementation always activates the bootloader after a reset */
|
|
||||||
return BLT_TRUE;
|
|
||||||
} /*** end of BackDoorEntryHook ***/
|
|
||||||
#endif /* BOOT_BACKDOOR_HOOKS_ENABLE > 0 */
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* C P U D R I V E R H O O K F U N C T I O N S
|
|
||||||
****************************************************************************************/
|
|
||||||
|
|
||||||
#if (BOOT_CPU_USER_PROGRAM_START_HOOK > 0)
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called when the bootloader is about to exit and
|
|
||||||
** hand over control to the user program. This is the last moment that
|
|
||||||
** some final checking can be performed and if necessary prevent the
|
|
||||||
** bootloader from activiting the user program.
|
|
||||||
** \return BLT_TRUE if it is okay to start the user program, BLT_FALSE to keep
|
|
||||||
** keep the bootloader active.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
blt_bool CpuUserProgramStartHook(void)
|
|
||||||
{
|
|
||||||
/* additional and optional backdoor entry through the pushbutton on the board. to
|
|
||||||
* force the bootloader to stay active after reset, keep it pressed during reset.
|
|
||||||
*/
|
|
||||||
if (LL_GPIO_IsInputPinSet(GPIOC, LL_GPIO_PIN_13) == 0)
|
|
||||||
{
|
|
||||||
/* pushbutton pressed, so do not start the user program and keep the
|
|
||||||
* bootloader active instead.
|
|
||||||
*/
|
|
||||||
return BLT_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* clean up the LED driver */
|
|
||||||
LedBlinkExit();
|
|
||||||
|
|
||||||
/* okay to start the user program */
|
|
||||||
return BLT_TRUE;
|
|
||||||
} /*** end of CpuUserProgramStartHook ***/
|
|
||||||
#endif /* BOOT_CPU_USER_PROGRAM_START_HOOK > 0 */
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* W A T C H D O G D R I V E R H O O K F U N C T I O N S
|
|
||||||
****************************************************************************************/
|
|
||||||
|
|
||||||
#if (BOOT_COP_HOOKS_ENABLE > 0)
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called at the end of the internal COP driver
|
|
||||||
** initialization routine. It can be used to configure and enable the
|
|
||||||
** watchdog.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void CopInitHook(void)
|
|
||||||
{
|
|
||||||
/* this function is called upon initialization. might as well use it to initialize
|
|
||||||
* the LED driver. It is kind of a visual watchdog anyways.
|
|
||||||
*/
|
|
||||||
LedBlinkInit(100);
|
|
||||||
} /*** end of CopInitHook ***/
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called at the end of the internal COP driver
|
|
||||||
** service routine. This gets called upon initialization and during
|
|
||||||
** potential long lasting loops and routine. It can be used to service
|
|
||||||
** the watchdog to prevent a watchdog reset.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void CopServiceHook(void)
|
|
||||||
{
|
|
||||||
/* run the LED blink task. this is a better place to do it than in the main() program
|
|
||||||
* loop. certain operations such as flash erase can take a long time, which would cause
|
|
||||||
* a blink interval to be skipped. this function is also called during such operations,
|
|
||||||
* so no blink intervals will be skipped when calling the LED blink task here.
|
|
||||||
*/
|
|
||||||
LedBlinkTask();
|
|
||||||
} /*** end of CopServiceHook ***/
|
|
||||||
#endif /* BOOT_COP_HOOKS_ENABLE > 0 */
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* N O N - V O L A T I L E M E M O R Y D R I V E R H O O K F U N C T I O N S
|
|
||||||
****************************************************************************************/
|
|
||||||
|
|
||||||
#if (BOOT_NVM_HOOKS_ENABLE > 0)
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called at the start of the internal NVM driver
|
|
||||||
** initialization routine.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void NvmInitHook(void)
|
|
||||||
{
|
|
||||||
} /*** end of NvmInitHook ***/
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called at the start of a firmware update to reinitialize
|
|
||||||
** the NVM driver.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void NvmReinitHook(void)
|
|
||||||
{
|
|
||||||
} /*** end of NvmReinitHook ***/
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called at the start of the NVM driver write
|
|
||||||
** routine. It allows additional memory to be operated on. If the address
|
|
||||||
** is not within the range of the additional memory, then
|
|
||||||
** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't
|
|
||||||
** been written yet.
|
|
||||||
** \param addr Start address.
|
|
||||||
** \param len Length in bytes.
|
|
||||||
** \param data Pointer to the data buffer.
|
|
||||||
** \return BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is
|
|
||||||
** not within the supported memory range, or BLT_NVM_ERROR is the write
|
|
||||||
** operation failed.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data)
|
|
||||||
{
|
|
||||||
return BLT_NVM_NOT_IN_RANGE;
|
|
||||||
} /*** end of NvmWriteHook ***/
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called at the start of the NVM driver erase
|
|
||||||
** routine. It allows additional memory to be operated on. If the address
|
|
||||||
** is not within the range of the additional memory, then
|
|
||||||
** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the memory
|
|
||||||
** hasn't been erased yet.
|
|
||||||
** \param addr Start address.
|
|
||||||
** \param len Length in bytes.
|
|
||||||
** \return BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is
|
|
||||||
** not within the supported memory range, or BLT_NVM_ERROR is the erase
|
|
||||||
** operation failed.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
blt_int8u NvmEraseHook(blt_addr addr, blt_int32u len)
|
|
||||||
{
|
|
||||||
return BLT_NVM_NOT_IN_RANGE;
|
|
||||||
} /*** end of NvmEraseHook ***/
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Callback that gets called at the end of the NVM programming session.
|
|
||||||
** \return BLT_TRUE is successful, BLT_FALSE otherwise.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
blt_bool NvmDoneHook(void)
|
|
||||||
{
|
|
||||||
return BLT_TRUE;
|
|
||||||
} /*** end of NvmDoneHook ***/
|
|
||||||
#endif /* BOOT_NVM_HOOKS_ENABLE > 0 */
|
|
||||||
|
|
||||||
|
|
||||||
#if (BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0)
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Verifies the checksum, which indicates that a valid user program is
|
|
||||||
** present and can be started.
|
|
||||||
** \return BLT_TRUE if successful, BLT_FALSE otherwise.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
blt_bool NvmVerifyChecksumHook(void)
|
|
||||||
{
|
|
||||||
return BLT_TRUE;
|
|
||||||
} /*** end of NvmVerifyChecksum ***/
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Writes a checksum of the user program to non-volatile memory. This is
|
|
||||||
** performed once the entire user program has been programmed. Through
|
|
||||||
** the checksum, the bootloader can check if a valid user programming is
|
|
||||||
** present and can be started.
|
|
||||||
** \return BLT_TRUE if successful, BLT_FALSE otherwise.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
blt_bool NvmWriteChecksumHook(void)
|
|
||||||
{
|
|
||||||
return BLT_TRUE;
|
|
||||||
}
|
|
||||||
#endif /* BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0 */
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* S E E D / K E Y S E C U R I T Y H O O K F U N C T I O N S
|
|
||||||
****************************************************************************************/
|
|
||||||
|
|
||||||
#if (BOOT_XCP_SEED_KEY_ENABLE > 0)
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Provides a seed to the XCP master that will be used for the key
|
|
||||||
** generation when the master attempts to unlock the specified resource.
|
|
||||||
** Called by the GET_SEED command.
|
|
||||||
** \param resource Resource that the seed if requested for (XCP_RES_XXX).
|
|
||||||
** \param seed Pointer to byte buffer wher the seed will be stored.
|
|
||||||
** \return Length of the seed in bytes.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
blt_int8u XcpGetSeedHook(blt_int8u resource, blt_int8u *seed)
|
|
||||||
{
|
|
||||||
/* request seed for unlocking ProGraMming resource */
|
|
||||||
if ((resource & XCP_RES_PGM) != 0)
|
|
||||||
{
|
|
||||||
seed[0] = 0x55;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* return seed length */
|
|
||||||
return 1;
|
|
||||||
} /*** end of XcpGetSeedHook ***/
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Called by the UNLOCK command and checks if the key to unlock the
|
|
||||||
** specified resource was correct. If so, then the resource protection
|
|
||||||
** will be removed.
|
|
||||||
** \param resource resource to unlock (XCP_RES_XXX).
|
|
||||||
** \param key pointer to the byte buffer holding the key.
|
|
||||||
** \param len length of the key in bytes.
|
|
||||||
** \return 1 if the key was correct, 0 otherwise.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
blt_int8u XcpVerifyKeyHook(blt_int8u resource, blt_int8u *key, blt_int8u len)
|
|
||||||
{
|
|
||||||
/* suppress compiler warning for unused parameter */
|
|
||||||
len = len;
|
|
||||||
|
|
||||||
/* the example key algorithm in "libseednkey.dll" works as follows:
|
|
||||||
* - PGM will be unlocked if key = seed - 1
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* check key for unlocking ProGraMming resource */
|
|
||||||
if ((resource == XCP_RES_PGM) && (key[0] == (0x55-1)))
|
|
||||||
{
|
|
||||||
/* correct key received for unlocking PGM resource */
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* still here so key incorrect */
|
|
||||||
return 0;
|
|
||||||
} /*** end of XcpVerifyKeyHook ***/
|
|
||||||
#endif /* BOOT_XCP_SEED_KEY_ENABLE > 0 */
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************** end of hooks.c ************************************/
|
|
|
@ -1,84 +0,0 @@
|
||||||
/****************************************************************************************
|
|
||||||
* Include files
|
|
||||||
****************************************************************************************/
|
|
||||||
#include "boot.h" /* bootloader generic header */
|
|
||||||
#include "led.h" /* module header */
|
|
||||||
#include "stm32f1xx.h" /* STM32 registers and drivers */
|
|
||||||
#include "stm32f1xx_ll_gpio.h" /* STM32 LL GPIO header */
|
|
||||||
|
|
||||||
#include "../io/io_pins.h"
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* Local data declarations
|
|
||||||
****************************************************************************************/
|
|
||||||
/** \brief Holds the desired LED blink interval time. */
|
|
||||||
static blt_int16u ledBlinkIntervalMs;
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Initializes the LED blink driver.
|
|
||||||
** \param interval_ms Specifies the desired LED blink interval time in milliseconds.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void LedBlinkInit(blt_int16u interval_ms)
|
|
||||||
{
|
|
||||||
LL_GPIO_InitTypeDef GPIO_InitStruct;
|
|
||||||
|
|
||||||
/* Configure GPIO pin for the LED. */
|
|
||||||
GPIO_InitStruct.Pin = LL_LED_BLUE_PIN;
|
|
||||||
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
|
|
||||||
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
|
|
||||||
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
|
||||||
LL_GPIO_Init(LED_BLUE_PORT, &GPIO_InitStruct);
|
|
||||||
LL_GPIO_ResetOutputPin(LED_BLUE_PORT, LL_LED_BLUE_PIN);
|
|
||||||
|
|
||||||
/* store the interval time between LED toggles */
|
|
||||||
ledBlinkIntervalMs = interval_ms;
|
|
||||||
} /*** end of LedBlinkInit ***/
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Task function for blinking the LED as a fixed timer interval.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void LedBlinkTask(void)
|
|
||||||
{
|
|
||||||
static blt_bool ledOn = BLT_FALSE;
|
|
||||||
static blt_int32u nextBlinkEvent = 0;
|
|
||||||
|
|
||||||
/* check for blink event */
|
|
||||||
if (TimerGet() >= nextBlinkEvent)
|
|
||||||
{
|
|
||||||
/* toggle the LED state */
|
|
||||||
if (ledOn == BLT_FALSE)
|
|
||||||
{
|
|
||||||
ledOn = BLT_TRUE;
|
|
||||||
LL_GPIO_SetOutputPin(LED_BLUE_PORT,LL_LED_BLUE_PIN);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ledOn = BLT_FALSE;
|
|
||||||
LL_GPIO_ResetOutputPin(LED_BLUE_PORT, LL_LED_BLUE_PIN);
|
|
||||||
}
|
|
||||||
/* schedule the next blink event */
|
|
||||||
nextBlinkEvent = TimerGet() + ledBlinkIntervalMs;
|
|
||||||
}
|
|
||||||
} /*** end of LedBlinkTask ***/
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************************//**
|
|
||||||
** \brief Cleans up the LED blink driver. This is intended to be used upon program
|
|
||||||
** exit.
|
|
||||||
** \return none.
|
|
||||||
**
|
|
||||||
****************************************************************************************/
|
|
||||||
void LedBlinkExit(void)
|
|
||||||
{
|
|
||||||
/* turn the LED off */
|
|
||||||
LL_GPIO_ResetOutputPin(LED_BLUE_PORT, LL_LED_BLUE_PIN);
|
|
||||||
} /*** end of LedBlinkExit ***/
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************** end of led.c **************************************/
|
|
|
@ -1,13 +0,0 @@
|
||||||
#ifndef LED_H
|
|
||||||
#define LED_H
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
* Function prototypes
|
|
||||||
****************************************************************************************/
|
|
||||||
void LedBlinkInit(blt_int16u interval_ms);
|
|
||||||
void LedBlinkTask(void);
|
|
||||||
void LedBlinkExit(void);
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* LED_H */
|
|
||||||
/*********************************** end of led.h **************************************/
|
|
|
@ -10,7 +10,7 @@
|
||||||
#include "stm32f1xx_ll_usart.h" /* STM32 LL USART header */
|
#include "stm32f1xx_ll_usart.h" /* STM32 LL USART header */
|
||||||
#include "stm32f1xx_ll_gpio.h" /* STM32 LL GPIO header */
|
#include "stm32f1xx_ll_gpio.h" /* STM32 LL GPIO header */
|
||||||
|
|
||||||
#include "../io/io_pins.h"
|
#include "io_pins.h"
|
||||||
|
|
||||||
/****************************************************************************************
|
/****************************************************************************************
|
||||||
* Function prototypes
|
* Function prototypes
|
||||||
|
|
Loading…
Reference in New Issue