diff --git a/make/mcu-defs.mk b/make/mcu-defs.mk new file mode 100644 index 00000000..6c575043 --- /dev/null +++ b/make/mcu-defs.mk @@ -0,0 +1,52 @@ +#PROJECT ?= $(shell cd $(TOPDIR); /bin/pwd | xargs notdir) + +#define mcu_check_var +# ifeq ($($(1)),) +# $(error $(1) not specified) +# endif +#endef + +ifeq ($(MCU_BOARD_MODEL),) + error MCU_BOARD_MODEL not specified +endif + +ifeq ($(MCU_FLASH_OFFSET),) + error MCU_FLASH_OFFSET not specified +endif + +ifeq ($(MCU_FLASH_SIZE),) + error MCU_FLASH_SIZE not specified +endif + +MCU_BOARD_MODEL_LC ?= $(shell echo $(MCU_BOARD_MODEL) | tr '[A-Z]' '[a-z]') +MCU_BOARD ?= $(MCU_BOARD_MODEL) +MCU_BOARD_LC ?= $(shell echo $(MCU_BOARD) | tr '[A-Z]' '[a-z]') + +MCU_OPENOCD_CFG_FILE ?= $(TOPDIR)/make/openocd-$(MCU_BOARD_LC).cfg +MCU_OPENOCD_OPTS ?= -f $(MCU_OPENOCD_CFG_FILE) -c "echo \"Started by jw-build\"" -c "gdb_port 3333" -c "telnet_port 4444" -c "tcl_port 6666" +MCU_OPENOCD_BIN ?= openocd +MCU_OPENOCD ?= $(MCU_OPENOCD_BIN) $(MCU_OPENOCD_OPTS) + +MCU_FLASH_FETCH_BANK ?= $(MCU_FLASH_BANK) +MCU_FLASH_FETCH_FILE_BIN ?= $(MCU_FLASH_FILE_BIN) +MCU_FLASH_FETCH_FILE_HEX ?= $(MCU_FLASH_FILE_HEX) +MCU_FLASH_FETCH_OFFSET ?= $(MCU_FLASH_OFFSET) +MCU_FLASH_FETCH_SIZE ?= $(MCU_FLASH_SIZE) + +MCU_FLASH_PUSH_BANK ?= $(MCU_FLASH_BANK) +MCU_FLASH_PUSH_FILE_BIN ?= $(MCU_FLASH_FILE_BIN) +MCU_FLASH_PUSH_FILE_HEX ?= $(MCU_FLASH_FILE_HEX) +MCU_FLASH_PUSH_OFFSET ?= $(MCU_FLASH_OFFSET) +MCU_FLASH_PUSH_SIZE ?= $(MCU_FLASH_SIZE) + +TOOLCHAIN_PREFIX ?= arm-none-eabi- +MCU_OBJCOPY ?= $(TOOLCHAIN_PREFIX)objcopy +MCU_FLASH_BANK ?= 0 +MCU_FLASH_FILE_BIN ?= $(TOPDIR)/bin/$(MCU_BOARD_LC).bin +MCU_FLASH_FILE_HEX ?= $(TOPDIR)/bin/$(MCU_BOARD_LC).hex +#MCU_FLASH_OFFSET ?= 0x0000000 +#MCU_FLASH_SIZE ?= 0x5000 + +ifneq ($(MCU_FLASH_FETCH_OFFSET),) + MCU_OBJCOPY_FETCH_OPTS += --change-addresses $(MCU_FLASH_FETCH_OFFSET) +endif diff --git a/make/mcu-topdir.mk b/make/mcu-topdir.mk new file mode 100644 index 00000000..92412391 --- /dev/null +++ b/make/mcu-topdir.mk @@ -0,0 +1,24 @@ +include $(MODDIR)/make/mcu-defs.mk +include $(MODDIR)/make/topdir.mk + +.PHONY: flash-fetch flash-push flash-clean-fetch flash-clean-push + +all: + +flash-fetch: $(MCU_FLASH_FETCH_FILE_HEX) +clean: flash-clean-fetch +flash-clean-fetch: + rm -f $(MCU_FLASH_FETCH_FILE_BIN) $(MCU_FLASH_FETCH_FILE_HEX) *.tmp +flash-clean-push: + rm -f $(MCU_FLASH_PUSH_FILE_BIN) $(MCU_FLASH_PUSH_FILE_HEX) *.tmp +$(MCU_FLASH_FETCH_FILE_BIN): + $(MCU_OPENOCD) -c "init" -c "reset init" -c "flash read_bank $(MCU_FLASH_FETCH_BANK) $@.tmp $(MCU_FLASH_FETCH_OFFSET) $(MCU_FLASH_FETCH_SIZE)" -c "exit" + mv $@.tmp $@ +%.hex: %.bin + $(MCU_OBJCOPY) $(MCU_OBJCOPY_FETCH_OPTS) -I binary -O ihex $< $@.tmp + mv $@.tmp $@ +flash-push: + # see http://openocd.org/doc/html/Flash-Programming.html + $(MCU_OPENOCD) -c "program $(MCU_FLASH_PUSH_FILE_HEX) verify reset exit $(MCU_FLASH_PUSH_OFFSET)" +%-flash-push: + MCU_FLASH_PUSH_FILE_HEX=$* make flash-push