mirror of
https://github.com/Optiboot/optiboot.git
synced 2025-07-04 16:42:25 +03:00
Custom linker script.
Implement a hack to derive section start addresses from the information like FLASHEND that is present in the source code (via io.h) This requires a custom linker script that uses symbols defined by inline ASM in the C program, the inline ASM itself, and some calculations/guesswork to figure out bootloader size for those VIRTUAL_BOOT platforms that have a bootloader size larger than 512 bytes but significantly smaller than 1024 bytes.
This commit is contained in:
@ -60,7 +60,7 @@ export
|
|||||||
|
|
||||||
# defaults
|
# defaults
|
||||||
MCU_TARGET = atmega168
|
MCU_TARGET = atmega168
|
||||||
LDSECTIONS = -Wl,--section-start=.text=0x3e00 -Wl,--section-start=.version=0x3ffe
|
LDSECTIONS = -Wl,-Tlink_optiboot.ld
|
||||||
|
|
||||||
# Build environments
|
# Build environments
|
||||||
# Start of some ugly makefile-isms to allow optiboot to be built
|
# Start of some ugly makefile-isms to allow optiboot to be built
|
||||||
@ -349,8 +349,6 @@ virboot8: TARGET = atmega8
|
|||||||
virboot8: MCU_TARGET = atmega8
|
virboot8: MCU_TARGET = atmega8
|
||||||
virboot8: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-Dsave_vect_num=EE_RDY_vect_num'
|
virboot8: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-Dsave_vect_num=EE_RDY_vect_num'
|
||||||
virboot8: AVR_FREQ ?= 16000000L
|
virboot8: AVR_FREQ ?= 16000000L
|
||||||
# Start address of 1D80 allows for size up to 640 bytes, app up to 7552
|
|
||||||
virboot8: LDSECTIONS = -Wl,--section-start=.text=0x1d80 -Wl,--section-start=.version=0x1ffe
|
|
||||||
virboot8: $(PROGRAM)_virboot8.hex
|
virboot8: $(PROGRAM)_virboot8.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
virboot8: $(PROGRAM)_virboot8.lst
|
virboot8: $(PROGRAM)_virboot8.lst
|
||||||
@ -362,7 +360,6 @@ virboot328: TARGET = atmega328
|
|||||||
virboot328: MCU_TARGET = atmega328p
|
virboot328: MCU_TARGET = atmega328p
|
||||||
virboot328: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION'
|
virboot328: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION'
|
||||||
virboot328: AVR_FREQ ?= 16000000L
|
virboot328: AVR_FREQ ?= 16000000L
|
||||||
virboot328: LDSECTIONS = -Wl,--section-start=.text=0x7d80 -Wl,--section-start=.version=0x7ffe
|
|
||||||
virboot328: $(PROGRAM)_virboot328.hex
|
virboot328: $(PROGRAM)_virboot328.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
virboot328: $(PROGRAM)_virboot328.lst
|
virboot328: $(PROGRAM)_virboot328.lst
|
||||||
@ -403,11 +400,6 @@ atmega8: TARGET = atmega8
|
|||||||
atmega8: MCU_TARGET = atmega8
|
atmega8: MCU_TARGET = atmega8
|
||||||
atmega8: CFLAGS += $(COMMON_OPTIONS)
|
atmega8: CFLAGS += $(COMMON_OPTIONS)
|
||||||
atmega8: AVR_FREQ ?= 16000000L
|
atmega8: AVR_FREQ ?= 16000000L
|
||||||
ifndef BIGBOOT
|
|
||||||
atmega8: LDSECTIONS = -Wl,--section-start=.text=0x1e00 -Wl,--section-start=.version=0x1ffe -Wl,--gc-sections -Wl,--undefined=optiboot_version
|
|
||||||
else
|
|
||||||
atmega8: LDSECTIONS = -Wl,--section-start=.text=0x1c00 -Wl,--section-start=.version=0x1ffe -Wl,--gc-sections -Wl,--undefined=optiboot_version
|
|
||||||
endif
|
|
||||||
atmega8: $(PROGRAM)_atmega8.hex
|
atmega8: $(PROGRAM)_atmega8.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega8: $(PROGRAM)_atmega8.lst
|
atmega8: $(PROGRAM)_atmega8.lst
|
||||||
@ -432,11 +424,6 @@ atmega168: TARGET = atmega168
|
|||||||
atmega168: MCU_TARGET = atmega168
|
atmega168: MCU_TARGET = atmega168
|
||||||
atmega168: CFLAGS += $(COMMON_OPTIONS)
|
atmega168: CFLAGS += $(COMMON_OPTIONS)
|
||||||
atmega168: AVR_FREQ ?= 16000000L
|
atmega168: AVR_FREQ ?= 16000000L
|
||||||
ifndef BIGBOOT
|
|
||||||
atmega168: LDSECTIONS = -Wl,--section-start=.text=0x3e00 -Wl,--section-start=.version=0x3ffe
|
|
||||||
else
|
|
||||||
atmega168: LDSECTIONS = -Wl,--section-start=.text=0x3c00 -Wl,--section-start=.version=0x3ffe
|
|
||||||
endif
|
|
||||||
atmega168: $(PROGRAM)_atmega168.hex
|
atmega168: $(PROGRAM)_atmega168.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega168: $(PROGRAM)_atmega168.lst
|
atmega168: $(PROGRAM)_atmega168.lst
|
||||||
@ -462,12 +449,6 @@ atmega328: TARGET = atmega328
|
|||||||
atmega328: MCU_TARGET = atmega328p
|
atmega328: MCU_TARGET = atmega328p
|
||||||
atmega328: CFLAGS += $(COMMON_OPTIONS)
|
atmega328: CFLAGS += $(COMMON_OPTIONS)
|
||||||
atmega328: AVR_FREQ ?= 16000000L
|
atmega328: AVR_FREQ ?= 16000000L
|
||||||
ifndef BIGBOOT
|
|
||||||
atmega328: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
else
|
|
||||||
# bigboot version is 1k long; starts earlier
|
|
||||||
atmega328: LDSECTIONS = -Wl,--section-start=.text=0x7c00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
endif
|
|
||||||
atmega328: $(PROGRAM)_atmega328.hex
|
atmega328: $(PROGRAM)_atmega328.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega328: $(PROGRAM)_atmega328.lst
|
atmega328: $(PROGRAM)_atmega328.lst
|
||||||
@ -494,7 +475,6 @@ atmega328_isp: isp
|
|||||||
atmega1280: MCU_TARGET = atmega1280
|
atmega1280: MCU_TARGET = atmega1280
|
||||||
atmega1280: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
atmega1280: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
||||||
atmega1280: AVR_FREQ ?= 16000000L
|
atmega1280: AVR_FREQ ?= 16000000L
|
||||||
atmega1280: LDSECTIONS = -Wl,--section-start=.text=0x1fc00 -Wl,--section-start=.version=0x1fffe
|
|
||||||
atmega1280: $(PROGRAM)_atmega1280.hex
|
atmega1280: $(PROGRAM)_atmega1280.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega1280: $(PROGRAM)_atmega1280.lst
|
atmega1280: $(PROGRAM)_atmega1280.lst
|
||||||
|
@ -12,7 +12,6 @@ atmega644p: TARGET = atmega644p
|
|||||||
atmega644p: MCU_TARGET = atmega644p
|
atmega644p: MCU_TARGET = atmega644p
|
||||||
atmega644p: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT
|
atmega644p: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT
|
||||||
atmega644p: AVR_FREQ ?= 16000000L
|
atmega644p: AVR_FREQ ?= 16000000L
|
||||||
atmega644p: LDSECTIONS = -Wl,--section-start=.text=0xfc00 -Wl,--section-start=.version=0xfffe
|
|
||||||
atmega644p: CFLAGS += $(UART_CMD)
|
atmega644p: CFLAGS += $(UART_CMD)
|
||||||
atmega644p: $(PROGRAM)_atmega644p.hex
|
atmega644p: $(PROGRAM)_atmega644p.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
@ -24,7 +23,6 @@ atmega1284: TARGET = atmega1284p
|
|||||||
atmega1284: MCU_TARGET = atmega1284p
|
atmega1284: MCU_TARGET = atmega1284p
|
||||||
atmega1284: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT
|
atmega1284: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT
|
||||||
atmega1284: AVR_FREQ ?= 16000000L
|
atmega1284: AVR_FREQ ?= 16000000L
|
||||||
atmega1284: LDSECTIONS = -Wl,--section-start=.text=0x1fc00 -Wl,--section-start=.version=0x1fffe
|
|
||||||
atmega1284: CFLAGS += $(UART_CMD)
|
atmega1284: CFLAGS += $(UART_CMD)
|
||||||
atmega1284: $(PROGRAM)_atmega1284p.hex
|
atmega1284: $(PROGRAM)_atmega1284p.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
|
@ -12,7 +12,6 @@ atmega2560: TARGET = atmega2560
|
|||||||
atmega2560: MCU_TARGET = atmega2560
|
atmega2560: MCU_TARGET = atmega2560
|
||||||
atmega2560: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT
|
atmega2560: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT
|
||||||
atmega2560: AVR_FREQ ?= 16000000L
|
atmega2560: AVR_FREQ ?= 16000000L
|
||||||
atmega2560: LDSECTIONS = -Wl,--section-start=.text=0x3fc00 -Wl,--section-start=.version=0x3fffe
|
|
||||||
atmega2560: CFLAGS += $(UART_CMD)
|
atmega2560: CFLAGS += $(UART_CMD)
|
||||||
atmega2560: $(PROGRAM)_atmega2560.hex
|
atmega2560: $(PROGRAM)_atmega2560.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
|
@ -19,7 +19,6 @@ atmega88: TARGET = atmega88
|
|||||||
atmega88: MCU_TARGET = atmega88
|
atmega88: MCU_TARGET = atmega88
|
||||||
atmega88: CFLAGS += $(COMMON_OPTIONS)
|
atmega88: CFLAGS += $(COMMON_OPTIONS)
|
||||||
atmega88: AVR_FREQ ?= 16000000L
|
atmega88: AVR_FREQ ?= 16000000L
|
||||||
atmega88: LDSECTIONS = -Wl,--section-start=.text=0x1e00 -Wl,--section-start=.version=0x1ffe -Wl,--gc-sections -Wl,--undefined=optiboot_version
|
|
||||||
atmega88: $(PROGRAM)_atmega88.hex
|
atmega88: $(PROGRAM)_atmega88.hex
|
||||||
atmega88: $(PROGRAM)_atmega88.lst
|
atmega88: $(PROGRAM)_atmega88.lst
|
||||||
|
|
||||||
@ -82,7 +81,6 @@ atmega32: TARGET = atmega32
|
|||||||
atmega32: MCU_TARGET = atmega32
|
atmega32: MCU_TARGET = atmega32
|
||||||
atmega32: CFLAGS += $(COMMON_OPTIONS)
|
atmega32: CFLAGS += $(COMMON_OPTIONS)
|
||||||
atmega32: AVR_FREQ ?= 11059200L
|
atmega32: AVR_FREQ ?= 11059200L
|
||||||
atmega32: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
atmega32: $(PROGRAM)_atmega32.hex
|
atmega32: $(PROGRAM)_atmega32.hex
|
||||||
atmega32: $(PROGRAM)_atmega32.lst
|
atmega32: $(PROGRAM)_atmega32.lst
|
||||||
|
|
||||||
@ -100,7 +98,6 @@ HELPTEXT += "target atmega128rfa1 - ATmega128RFA1 (100pin, 128k)\n"
|
|||||||
atmega128rfa1: MCU_TARGET = atmega128rfa1
|
atmega128rfa1: MCU_TARGET = atmega128rfa1
|
||||||
atmega128rfa1: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
atmega128rfa1: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
||||||
atmega128rfa1: AVR_FREQ ?= 16000000L
|
atmega128rfa1: AVR_FREQ ?= 16000000L
|
||||||
atmega128rfa1: LDSECTIONS = -Wl,--section-start=.text=0x1fc00 -Wl,--section-start=.version=0x1fffe
|
|
||||||
atmega128rfa1: $(PROGRAM)_atmega128rfa1.hex
|
atmega128rfa1: $(PROGRAM)_atmega128rfa1.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega128rfa1: $(PROGRAM)_atmega128rfa1.lst
|
atmega128rfa1: $(PROGRAM)_atmega128rfa1.lst
|
||||||
|
@ -25,7 +25,6 @@ atmega16: TARGET = atmega16
|
|||||||
atmega16: MCU_TARGET = atmega16
|
atmega16: MCU_TARGET = atmega16
|
||||||
atmega16: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega16: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega16: AVR_FREQ ?= 16000000L
|
atmega16: AVR_FREQ ?= 16000000L
|
||||||
atmega16: LDSECTIONS = -Wl,--section-start=.text=0x3e00 -Wl,--section-start=.version=0x3ffe
|
|
||||||
atmega16: $(PROGRAM)_atmega16_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega16: $(PROGRAM)_atmega16_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega16: $(PROGRAM)_atmega16_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega16: $(PROGRAM)_atmega16_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -37,7 +36,6 @@ atmega64: TARGET = atmega64
|
|||||||
atmega64: MCU_TARGET = atmega64
|
atmega64: MCU_TARGET = atmega64
|
||||||
atmega64: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
atmega64: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
||||||
atmega64: AVR_FREQ ?= 16000000L
|
atmega64: AVR_FREQ ?= 16000000L
|
||||||
atmega64: LDSECTIONS = -Wl,--section-start=.text=0xfc00 -Wl,--section-start=.version=0xfffe
|
|
||||||
atmega64: $(PROGRAM)_atmega64_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega64: $(PROGRAM)_atmega64_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega64: $(PROGRAM)_atmega64_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega64: $(PROGRAM)_atmega64_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -49,7 +47,6 @@ atmega88p: TARGET = atmega88p
|
|||||||
atmega88p: MCU_TARGET = atmega88p
|
atmega88p: MCU_TARGET = atmega88p
|
||||||
atmega88p: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega88p: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega88p: AVR_FREQ ?= 16000000L
|
atmega88p: AVR_FREQ ?= 16000000L
|
||||||
atmega88p: LDSECTIONS = -Wl,--section-start=.text=0x1e00 -Wl,--section-start=.version=0x1ffe -Wl,--gc-sections -Wl,--undefined=optiboot_version
|
|
||||||
atmega88p: $(PROGRAM)_atmega88p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega88p: $(PROGRAM)_atmega88p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega88p: $(PROGRAM)_atmega88p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega88p: $(PROGRAM)_atmega88p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -61,7 +58,6 @@ atmega88pb: TARGET = atmega88pb
|
|||||||
atmega88pb: MCU_TARGET = atmega88pb
|
atmega88pb: MCU_TARGET = atmega88pb
|
||||||
atmega88pb: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega88pb: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega88pb: AVR_FREQ ?= 16000000L
|
atmega88pb: AVR_FREQ ?= 16000000L
|
||||||
atmega88pb: LDSECTIONS = -Wl,--section-start=.text=0x1e00 -Wl,--section-start=.version=0x1ffe -Wl,--gc-sections -Wl,--undefined=optiboot_version
|
|
||||||
atmega88pb: $(PROGRAM)_atmega88pb_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega88pb: $(PROGRAM)_atmega88pb_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega88pb: $(PROGRAM)_atmega88pb_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega88pb: $(PROGRAM)_atmega88pb_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -72,7 +68,6 @@ atmega128: TARGET = atmega128
|
|||||||
atmega128: MCU_TARGET = atmega128
|
atmega128: MCU_TARGET = atmega128
|
||||||
atmega128: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
atmega128: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
||||||
atmega128: AVR_FREQ ?= 16000000L
|
atmega128: AVR_FREQ ?= 16000000L
|
||||||
atmega128: LDSECTIONS = -Wl,--section-start=.text=0x1fc00 -Wl,--section-start=.version=0x1fffe
|
|
||||||
atmega128: $(PROGRAM)_atmega128_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega128: $(PROGRAM)_atmega128_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega128: $(PROGRAM)_atmega128_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega128: $(PROGRAM)_atmega128_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -84,7 +79,6 @@ atmega162: TARGET = atmega162
|
|||||||
atmega162: MCU_TARGET = atmega162
|
atmega162: MCU_TARGET = atmega162
|
||||||
atmega162: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega162: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega162: AVR_FREQ ?= 16000000L
|
atmega162: AVR_FREQ ?= 16000000L
|
||||||
atmega162: LDSECTIONS = -Wl,--section-start=.text=0x3e00 -Wl,--section-start=.version=0x3ffe
|
|
||||||
atmega162: $(PROGRAM)_atmega162_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega162: $(PROGRAM)_atmega162_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega162: $(PROGRAM)_atmega162_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega162: $(PROGRAM)_atmega162_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -95,7 +89,6 @@ atmega164a: TARGET = atmega164a
|
|||||||
atmega164a: MCU_TARGET = atmega164a
|
atmega164a: MCU_TARGET = atmega164a
|
||||||
atmega164a: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega164a: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega164a: AVR_FREQ ?= 16000000L
|
atmega164a: AVR_FREQ ?= 16000000L
|
||||||
atmega164a: LDSECTIONS = -Wl,--section-start=.text=0x3e00 -Wl,--section-start=.version=0x3ffe
|
|
||||||
atmega164a: $(PROGRAM)_atmega164a_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega164a: $(PROGRAM)_atmega164a_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega164a: $(PROGRAM)_atmega164a_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega164a: $(PROGRAM)_atmega164a_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -107,7 +100,6 @@ atmega164p: TARGET = atmega164p
|
|||||||
atmega164p: MCU_TARGET = atmega164p
|
atmega164p: MCU_TARGET = atmega164p
|
||||||
atmega164p: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega164p: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega164p: AVR_FREQ ?= 16000000L
|
atmega164p: AVR_FREQ ?= 16000000L
|
||||||
atmega164p: LDSECTIONS = -Wl,--section-start=.text=0x3e00 -Wl,--section-start=.version=0x3ffe
|
|
||||||
atmega164p: $(PROGRAM)_atmega164p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega164p: $(PROGRAM)_atmega164p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega164p: $(PROGRAM)_atmega164p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega164p: $(PROGRAM)_atmega164p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -119,7 +111,6 @@ atmega164pa: atmega164p
|
|||||||
#atmega168: MCU_TARGET = atmega168
|
#atmega168: MCU_TARGET = atmega168
|
||||||
#atmega168: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
#atmega168: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
#atmega168: AVR_FREQ ?= 16000000L
|
#atmega168: AVR_FREQ ?= 16000000L
|
||||||
#atmega168: LDSECTIONS = -Wl,--section-start=.text=0x3e00 -Wl,--section-start=.version=0x3ffe
|
|
||||||
#atmega168: $(PROGRAM)_atmega168_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
#atmega168: $(PROGRAM)_atmega168_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
#ifndef PRODUCTION
|
#ifndef PRODUCTION
|
||||||
#atmega168: $(PROGRAM)_atmega168_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
#atmega168: $(PROGRAM)_atmega168_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -131,7 +122,6 @@ atmega168p: TARGET = atmega168p
|
|||||||
atmega168p: MCU_TARGET = atmega168p
|
atmega168p: MCU_TARGET = atmega168p
|
||||||
atmega168p: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega168p: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega168p: AVR_FREQ ?= 16000000L
|
atmega168p: AVR_FREQ ?= 16000000L
|
||||||
atmega168p: LDSECTIONS = -Wl,--section-start=.text=0x3e00 -Wl,--section-start=.version=0x3ffe
|
|
||||||
atmega168p: $(PROGRAM)_atmega168p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega168p: $(PROGRAM)_atmega168p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega168p: $(PROGRAM)_atmega168p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega168p: $(PROGRAM)_atmega168p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -143,7 +133,6 @@ atmega168pb: TARGET = atmega168pb
|
|||||||
atmega168pb: MCU_TARGET = atmega168pb
|
atmega168pb: MCU_TARGET = atmega168pb
|
||||||
atmega168pb: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega168pb: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega168pb: AVR_FREQ ?= 16000000L
|
atmega168pb: AVR_FREQ ?= 16000000L
|
||||||
atmega168pb: LDSECTIONS = -Wl,--section-start=.text=0x3e00 -Wl,--section-start=.version=0x3ffe
|
|
||||||
atmega168pb: $(PROGRAM)_atmega168pb_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega168pb: $(PROGRAM)_atmega168pb_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega168pb: $(PROGRAM)_atmega168pb_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega168pb: $(PROGRAM)_atmega168pb_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -154,7 +143,6 @@ atmega169: TARGET = atmega169
|
|||||||
atmega169: MCU_TARGET = atmega169
|
atmega169: MCU_TARGET = atmega169
|
||||||
atmega169: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega169: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega169: AVR_FREQ ?= 16000000L
|
atmega169: AVR_FREQ ?= 16000000L
|
||||||
atmega169: LDSECTIONS = -Wl,--section-start=.text=0x3e00 -Wl,--section-start=.version=0x3ffe
|
|
||||||
atmega169: $(PROGRAM)_atmega169_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega169: $(PROGRAM)_atmega169_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega169: $(PROGRAM)_atmega169_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega169: $(PROGRAM)_atmega169_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -166,7 +154,6 @@ atmega169p: TARGET = atmega169p
|
|||||||
atmega169p: MCU_TARGET = atmega169p
|
atmega169p: MCU_TARGET = atmega169p
|
||||||
atmega169p: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega169p: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega169p: AVR_FREQ ?= 16000000L
|
atmega169p: AVR_FREQ ?= 16000000L
|
||||||
atmega169p: LDSECTIONS = -Wl,--section-start=.text=0x3e00 -Wl,--section-start=.version=0x3ffe
|
|
||||||
atmega169p: $(PROGRAM)_atmega169p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega169p: $(PROGRAM)_atmega169p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega169p: $(PROGRAM)_atmega169p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega169p: $(PROGRAM)_atmega169p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -178,7 +165,6 @@ atmega324a: TARGET = atmega324a
|
|||||||
atmega324a: MCU_TARGET = atmega324a
|
atmega324a: MCU_TARGET = atmega324a
|
||||||
atmega324a: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega324a: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega324a: AVR_FREQ ?= 16000000L
|
atmega324a: AVR_FREQ ?= 16000000L
|
||||||
atmega324a: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
atmega324a: $(PROGRAM)_atmega324a_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega324a: $(PROGRAM)_atmega324a_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega324a: $(PROGRAM)_atmega324a_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega324a: $(PROGRAM)_atmega324a_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -190,7 +176,6 @@ atmega324p: TARGET = atmega324p
|
|||||||
atmega324p: MCU_TARGET = atmega324p
|
atmega324p: MCU_TARGET = atmega324p
|
||||||
atmega324p: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega324p: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega324p: AVR_FREQ ?= 16000000L
|
atmega324p: AVR_FREQ ?= 16000000L
|
||||||
atmega324p: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
atmega324p: $(PROGRAM)_atmega324p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega324p: $(PROGRAM)_atmega324p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega324p: $(PROGRAM)_atmega324p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega324p: $(PROGRAM)_atmega324p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -201,7 +186,6 @@ atmega324pa: TARGET = atmega324pa
|
|||||||
atmega324pa: MCU_TARGET = atmega324pa
|
atmega324pa: MCU_TARGET = atmega324pa
|
||||||
atmega324pa: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega324pa: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega324pa: AVR_FREQ ?= 16000000L
|
atmega324pa: AVR_FREQ ?= 16000000L
|
||||||
atmega324pa: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
atmega324pa: $(PROGRAM)_atmega324pa_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega324pa: $(PROGRAM)_atmega324pa_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega324pa: $(PROGRAM)_atmega324pa_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega324pa: $(PROGRAM)_atmega324pa_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -212,7 +196,6 @@ atmega324pb: TARGET = atmega324pb
|
|||||||
atmega324pb: MCU_TARGET = atmega324pb
|
atmega324pb: MCU_TARGET = atmega324pb
|
||||||
atmega324pb: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega324pb: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega324pb: AVR_FREQ ?= 16000000L
|
atmega324pb: AVR_FREQ ?= 16000000L
|
||||||
atmega324pb: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
atmega324pb: $(PROGRAM)_atmega324pb_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega324pb: $(PROGRAM)_atmega324pb_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega324pb: $(PROGRAM)_atmega324pb_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega324pb: $(PROGRAM)_atmega324pb_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -223,7 +206,6 @@ atmega328pb: TARGET = atmega328pb
|
|||||||
atmega328pb: MCU_TARGET = atmega328pb
|
atmega328pb: MCU_TARGET = atmega328pb
|
||||||
atmega328pb: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega328pb: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega328pb: AVR_FREQ ?= 16000000L
|
atmega328pb: AVR_FREQ ?= 16000000L
|
||||||
atmega328pb: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
atmega328pb: $(PROGRAM)_atmega328pb_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega328pb: $(PROGRAM)_atmega328pb_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega328pb: $(PROGRAM)_atmega328pb_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega328pb: $(PROGRAM)_atmega328pb_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -234,7 +216,6 @@ atmega329: TARGET = atmega329
|
|||||||
atmega329: MCU_TARGET = atmega329
|
atmega329: MCU_TARGET = atmega329
|
||||||
atmega329: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega329: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega329: AVR_FREQ ?= 16000000L
|
atmega329: AVR_FREQ ?= 16000000L
|
||||||
atmega329: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
atmega329: $(PROGRAM)_atmega329_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega329: $(PROGRAM)_atmega329_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega329: $(PROGRAM)_atmega329_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega329: $(PROGRAM)_atmega329_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -246,7 +227,6 @@ atmega329p: TARGET = atmega329p
|
|||||||
atmega329p: MCU_TARGET = atmega329p
|
atmega329p: MCU_TARGET = atmega329p
|
||||||
atmega329p: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega329p: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega329p: AVR_FREQ ?= 16000000L
|
atmega329p: AVR_FREQ ?= 16000000L
|
||||||
atmega329p: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
atmega329p: $(PROGRAM)_atmega329p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega329p: $(PROGRAM)_atmega329p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega329p: $(PROGRAM)_atmega329p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega329p: $(PROGRAM)_atmega329p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -258,7 +238,6 @@ atmega640: TARGET = atmega640
|
|||||||
atmega640: MCU_TARGET = atmega640
|
atmega640: MCU_TARGET = atmega640
|
||||||
atmega640: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
atmega640: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
||||||
atmega640: AVR_FREQ ?= 16000000L
|
atmega640: AVR_FREQ ?= 16000000L
|
||||||
atmega640: LDSECTIONS = -Wl,--section-start=.text=0xfc00 -Wl,--section-start=.version=0xfffe
|
|
||||||
atmega640: $(PROGRAM)_atmega640_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega640: $(PROGRAM)_atmega640_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega640: $(PROGRAM)_atmega640_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega640: $(PROGRAM)_atmega640_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -269,7 +248,6 @@ atmega649: TARGET = atmega649
|
|||||||
atmega649: MCU_TARGET = atmega649
|
atmega649: MCU_TARGET = atmega649
|
||||||
atmega649: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
atmega649: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
||||||
atmega649: AVR_FREQ ?= 16000000L
|
atmega649: AVR_FREQ ?= 16000000L
|
||||||
atmega649: LDSECTIONS = -Wl,--section-start=.text=0xfc00 -Wl,--section-start=.version=0xfffe
|
|
||||||
atmega649: $(PROGRAM)_atmega649_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega649: $(PROGRAM)_atmega649_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega649: $(PROGRAM)_atmega649_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega649: $(PROGRAM)_atmega649_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -280,7 +258,6 @@ atmega649p: TARGET = atmega649p
|
|||||||
atmega649p: MCU_TARGET = atmega649p
|
atmega649p: MCU_TARGET = atmega649p
|
||||||
atmega649p: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
atmega649p: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
||||||
atmega649p: AVR_FREQ ?= 16000000L
|
atmega649p: AVR_FREQ ?= 16000000L
|
||||||
atmega649p: LDSECTIONS = -Wl,--section-start=.text=0xfc00 -Wl,--section-start=.version=0xfffe
|
|
||||||
atmega649p: $(PROGRAM)_atmega649p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega649p: $(PROGRAM)_atmega649p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega649p: $(PROGRAM)_atmega649p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega649p: $(PROGRAM)_atmega649p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -291,7 +268,6 @@ atmega1281: TARGET = atmega1281
|
|||||||
atmega1281: MCU_TARGET = atmega1281
|
atmega1281: MCU_TARGET = atmega1281
|
||||||
atmega1281: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
atmega1281: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
||||||
atmega1281: AVR_FREQ ?= 16000000L
|
atmega1281: AVR_FREQ ?= 16000000L
|
||||||
atmega1281: LDSECTIONS = -Wl,--section-start=.text=0x1fc00 -Wl,--section-start=.version=0x1fffe
|
|
||||||
atmega1281: $(PROGRAM)_atmega1281_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega1281: $(PROGRAM)_atmega1281_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega1281: $(PROGRAM)_atmega1281_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega1281: $(PROGRAM)_atmega1281_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -302,7 +278,6 @@ atmega2561: TARGET = atmega2561
|
|||||||
atmega2561: MCU_TARGET = atmega2561
|
atmega2561: MCU_TARGET = atmega2561
|
||||||
atmega2561: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
atmega2561: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
||||||
atmega2561: AVR_FREQ ?= 16000000L
|
atmega2561: AVR_FREQ ?= 16000000L
|
||||||
atmega2561: LDSECTIONS = -Wl,--section-start=.text=0x3fc00 -Wl,--section-start=.version=0x3fffe
|
|
||||||
atmega2561: $(PROGRAM)_atmega2561_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega2561: $(PROGRAM)_atmega2561_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega2561: $(PROGRAM)_atmega2561_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega2561: $(PROGRAM)_atmega2561_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -313,7 +288,6 @@ atmega3290: TARGET = atmega3290
|
|||||||
atmega3290: MCU_TARGET = atmega3290
|
atmega3290: MCU_TARGET = atmega3290
|
||||||
atmega3290: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega3290: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega3290: AVR_FREQ ?= 16000000L
|
atmega3290: AVR_FREQ ?= 16000000L
|
||||||
atmega3290: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
atmega3290: $(PROGRAM)_atmega3290_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega3290: $(PROGRAM)_atmega3290_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega3290: $(PROGRAM)_atmega3290_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega3290: $(PROGRAM)_atmega3290_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -324,7 +298,6 @@ atmega3290p: TARGET = atmega3290p
|
|||||||
atmega3290p: MCU_TARGET = atmega3290p
|
atmega3290p: MCU_TARGET = atmega3290p
|
||||||
atmega3290p: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega3290p: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega3290p: AVR_FREQ ?= 16000000L
|
atmega3290p: AVR_FREQ ?= 16000000L
|
||||||
atmega3290p: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
atmega3290p: $(PROGRAM)_atmega3290p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega3290p: $(PROGRAM)_atmega3290p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega3290p: $(PROGRAM)_atmega3290p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega3290p: $(PROGRAM)_atmega3290p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -336,7 +309,6 @@ atmega6490: TARGET = atmega6490
|
|||||||
atmega6490: MCU_TARGET = atmega6490
|
atmega6490: MCU_TARGET = atmega6490
|
||||||
atmega6490: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
atmega6490: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
||||||
atmega6490: AVR_FREQ ?= 16000000L
|
atmega6490: AVR_FREQ ?= 16000000L
|
||||||
atmega6490: LDSECTIONS = -Wl,--section-start=.text=0xfc00 -Wl,--section-start=.version=0xfffe
|
|
||||||
atmega6490: $(PROGRAM)_atmega6490_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega6490: $(PROGRAM)_atmega6490_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega6490: $(PROGRAM)_atmega6490_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega6490: $(PROGRAM)_atmega6490_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -347,7 +319,6 @@ atmega6490p: TARGET = atmega6490p
|
|||||||
atmega6490p: MCU_TARGET = atmega6490p
|
atmega6490p: MCU_TARGET = atmega6490p
|
||||||
atmega6490p: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
atmega6490p: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
|
||||||
atmega6490p: AVR_FREQ ?= 16000000L
|
atmega6490p: AVR_FREQ ?= 16000000L
|
||||||
atmega6490p: LDSECTIONS = -Wl,--section-start=.text=0xfc00 -Wl,--section-start=.version=0xfffe
|
|
||||||
atmega6490p: $(PROGRAM)_atmega6490p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega6490p: $(PROGRAM)_atmega6490p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega6490p: $(PROGRAM)_atmega6490p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega6490p: $(PROGRAM)_atmega6490p_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -358,7 +329,6 @@ atmega8515: TARGET = atmega8515
|
|||||||
atmega8515: MCU_TARGET = atmega8515
|
atmega8515: MCU_TARGET = atmega8515
|
||||||
atmega8515: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega8515: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega8515: AVR_FREQ ?= 16000000L
|
atmega8515: AVR_FREQ ?= 16000000L
|
||||||
atmega8515: LDSECTIONS = -Wl,--section-start=.text=0x1e00 -Wl,--section-start=.version=0x1ffe
|
|
||||||
atmega8515: $(PROGRAM)_atmega8515_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega8515: $(PROGRAM)_atmega8515_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega8515: $(PROGRAM)_atmega8515_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega8515: $(PROGRAM)_atmega8515_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
@ -369,7 +339,6 @@ atmega8535: TARGET := atmega8535
|
|||||||
atmega8535: MCU_TARGET = atmega8535
|
atmega8535: MCU_TARGET = atmega8535
|
||||||
atmega8535: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega8535: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega8535: AVR_FREQ ?= 16000000L
|
atmega8535: AVR_FREQ ?= 16000000L
|
||||||
atmega8535: LDSECTIONS = -Wl,--section-start=.text=0x1e00 -Wl,--section-start=.version=0x1ffe
|
|
||||||
atmega8535: $(PROGRAM)_atmega8535_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
atmega8535: $(PROGRAM)_atmega8535_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega8535: $(PROGRAM)_atmega8535_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
atmega8535: $(PROGRAM)_atmega8535_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ).lst
|
||||||
|
@ -10,7 +10,6 @@ attiny1634: MCU_TARGET = attiny1634
|
|||||||
attiny1634: LED_CMD ?= -DLED=C0
|
attiny1634: LED_CMD ?= -DLED=C0
|
||||||
attiny1634: CFLAGS += $(COMMON_OPTIONS) -DVIRTUAL_BOOT_PARTITION -DFOURPAGEERASE $(UART_CMD)
|
attiny1634: CFLAGS += $(COMMON_OPTIONS) -DVIRTUAL_BOOT_PARTITION -DFOURPAGEERASE $(UART_CMD)
|
||||||
attiny1634: AVR_FREQ ?= 8000000L
|
attiny1634: AVR_FREQ ?= 8000000L
|
||||||
attiny1634: LDSECTIONS = -Wl,--section-start=.text=0x3d80 -Wl,--section-start=.version=0x3ffe
|
|
||||||
attiny1634: $(PROGRAM)_attiny1634.hex
|
attiny1634: $(PROGRAM)_attiny1634.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
attiny1634: $(PROGRAM)_attiny1634.lst
|
attiny1634: $(PROGRAM)_attiny1634.lst
|
||||||
@ -178,7 +177,6 @@ attiny841: TARGET = attiny841
|
|||||||
attiny841: MCU_TARGET = attiny841
|
attiny841: MCU_TARGET = attiny841
|
||||||
attiny841: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DFOURPAGEERASE' $(UART_CMD)
|
attiny841: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DFOURPAGEERASE' $(UART_CMD)
|
||||||
attiny841: AVR_FREQ ?= 8000000L
|
attiny841: AVR_FREQ ?= 8000000L
|
||||||
attiny841: LDSECTIONS = -Wl,--section-start=.text=0x1d80 -Wl,--section-start=.version=0x1ffe
|
|
||||||
attiny841: $(PROGRAM)_attiny841.hex
|
attiny841: $(PROGRAM)_attiny841.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
attiny841: $(PROGRAM)_attiny841.lst
|
attiny841: $(PROGRAM)_attiny841.lst
|
||||||
@ -363,21 +361,21 @@ endif
|
|||||||
#-----------------------
|
#-----------------------
|
||||||
|
|
||||||
attiny841at20noLED:
|
attiny841at20noLED:
|
||||||
$(MAKE) attiny841 AVR_FREQ=20000000L LED_START_FLASHES=0 LDSECTIONS = -Wl,--section-start=.text=0x1dc0 -Wl,--section-start=.version=0x1ffe
|
$(MAKE) attiny841 AVR_FREQ=20000000L LED_START_FLASHES=0
|
||||||
mv $(PROGRAM)_attiny841.hex $(PROGRAM)_attiny841_20000000L_noLED.hex
|
mv $(PROGRAM)_attiny841.hex $(PROGRAM)_attiny841_20000000L_noLED.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
mv $(PROGRAM)_attiny841.lst $(PROGRAM)_attiny841_20000000L_noLED.lst
|
mv $(PROGRAM)_attiny841.lst $(PROGRAM)_attiny841_20000000L_noLED.lst
|
||||||
endif
|
endif
|
||||||
|
|
||||||
attiny841at16noLED:
|
attiny841at16noLED:
|
||||||
$(MAKE) attiny841 AVR_FREQ=16000000L LED_START_FLASHES=0 LDSECTIONS = -Wl,--section-start=.text=0x1dc0 -Wl,--section-start=.version=0x1ffe
|
$(MAKE) attiny841 AVR_FREQ=16000000L LED_START_FLASHES=0
|
||||||
mv $(PROGRAM)_attiny841.hex $(PROGRAM)_attiny841_16000000L_noLED.hex
|
mv $(PROGRAM)_attiny841.hex $(PROGRAM)_attiny841_16000000L_noLED.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
mv $(PROGRAM)_attiny841.lst $(PROGRAM)_attiny841_16000000L_noLED.lst
|
mv $(PROGRAM)_attiny841.lst $(PROGRAM)_attiny841_16000000L_noLED.lst
|
||||||
endif
|
endif
|
||||||
|
|
||||||
attiny841at8noLED:
|
attiny841at8noLED:
|
||||||
$(MAKE) attiny841 AVR_FREQ=8000000L BAUD_RATE=57600 LED_START_FLASHES=0 LDSECTIONS = -Wl,--section-start=.text=0x1dc0 -Wl,--section-start=.version=0x1ffe
|
$(MAKE) attiny841 AVR_FREQ=8000000L BAUD_RATE=57600 LED_START_FLASHES=0
|
||||||
mv $(PROGRAM)_attiny841.hex $(PROGRAM)_attiny841_8000000L_noLED.hex
|
mv $(PROGRAM)_attiny841.hex $(PROGRAM)_attiny841_8000000L_noLED.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
mv $(PROGRAM)_attiny841.lst $(PROGRAM)_attiny841_8000000L_noLED.lst
|
mv $(PROGRAM)_attiny841.lst $(PROGRAM)_attiny841_8000000L_noLED.lst
|
||||||
@ -395,7 +393,6 @@ attiny441: TARGET = attiny441
|
|||||||
attiny441: MCU_TARGET = attiny441
|
attiny441: MCU_TARGET = attiny441
|
||||||
attiny441: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DFOURPAGEERASE' $(UART_CMD)
|
attiny441: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DFOURPAGEERASE' $(UART_CMD)
|
||||||
attiny441: AVR_FREQ ?= 8000000L
|
attiny441: AVR_FREQ ?= 8000000L
|
||||||
attiny441: LDSECTIONS = -Wl,--section-start=.text=0x0d80 -Wl,--section-start=.version=0x0ffe
|
|
||||||
attiny441: $(PROGRAM)_attiny441.hex
|
attiny441: $(PROGRAM)_attiny441.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
attiny441: $(PROGRAM)_attiny441.lst
|
attiny441: $(PROGRAM)_attiny441.lst
|
||||||
@ -586,21 +583,21 @@ endif
|
|||||||
#-----------------------
|
#-----------------------
|
||||||
|
|
||||||
attiny441at20noLED:
|
attiny441at20noLED:
|
||||||
$(MAKE) attiny441 AVR_FREQ=20000000L LED_START_FLASHES=0 LDSECTIONS = -Wl,--section-start=.text=0x0dc0 -Wl,--section-start=.version=0x0ffe
|
$(MAKE) attiny441 AVR_FREQ=20000000L LED_START_FLASHES=0
|
||||||
mv $(PROGRAM)_attiny441.hex $(PROGRAM)_attiny441_20000000L_noLED.hex
|
mv $(PROGRAM)_attiny441.hex $(PROGRAM)_attiny441_20000000L_noLED.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
mv $(PROGRAM)_attiny441.lst $(PROGRAM)_attiny441_20000000L_noLED.lst
|
mv $(PROGRAM)_attiny441.lst $(PROGRAM)_attiny441_20000000L_noLED.lst
|
||||||
endif
|
endif
|
||||||
|
|
||||||
attiny441at16noLED:
|
attiny441at16noLED:
|
||||||
$(MAKE) attiny441 AVR_FREQ=16000000L LED_START_FLASHES=0 LDSECTIONS = -Wl,--section-start=.text=0x0dc0 -Wl,--section-start=.version=0x0ffe
|
$(MAKE) attiny441 AVR_FREQ=16000000L LED_START_FLASHES=0
|
||||||
mv $(PROGRAM)_attiny441.hex $(PROGRAM)_attiny441_16000000L_noLED.hex
|
mv $(PROGRAM)_attiny441.hex $(PROGRAM)_attiny441_16000000L_noLED.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
mv $(PROGRAM)_attiny441.lst $(PROGRAM)_attiny441_16000000L_noLED.lst
|
mv $(PROGRAM)_attiny441.lst $(PROGRAM)_attiny441_16000000L_noLED.lst
|
||||||
endif
|
endif
|
||||||
|
|
||||||
attiny441at8noLED:
|
attiny441at8noLED:
|
||||||
$(MAKE) attiny441 AVR_FREQ=8000000L BAUD_RATE=57600 LED_START_FLASHES=0 LDSECTIONS = -Wl,--section-start=.text=0x0dc0 -Wl,--section-start=.version=0x0ffe
|
$(MAKE) attiny441 AVR_FREQ=8000000L BAUD_RATE=57600 LED_START_FLASHES=0
|
||||||
mv $(PROGRAM)_attiny441.hex $(PROGRAM)_attiny441_8000000L_noLED.hex
|
mv $(PROGRAM)_attiny441.hex $(PROGRAM)_attiny441_8000000L_noLED.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
mv $(PROGRAM)_attiny441.lst $(PROGRAM)_attiny441_8000000L_noLED.lst
|
mv $(PROGRAM)_attiny441.lst $(PROGRAM)_attiny441_8000000L_noLED.lst
|
||||||
@ -617,7 +614,6 @@ attiny828: TARGET = attiny828
|
|||||||
attiny828: MCU_TARGET = attiny828
|
attiny828: MCU_TARGET = attiny828
|
||||||
attiny828: CFLAGS += $(COMMON_OPTIONS)
|
attiny828: CFLAGS += $(COMMON_OPTIONS)
|
||||||
attiny828: AVR_FREQ ?= 8000000L
|
attiny828: AVR_FREQ ?= 8000000L
|
||||||
attiny828: LDSECTIONS = -Wl,--section-start=.text=0x1E00 -Wl,--section-start=.version=0x1ffe
|
|
||||||
attiny828: $(PROGRAM)_attiny828.hex
|
attiny828: $(PROGRAM)_attiny828.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
attiny828: $(PROGRAM)_attiny828.lst
|
attiny828: $(PROGRAM)_attiny828.lst
|
||||||
@ -683,7 +679,6 @@ attiny88: TARGET = attiny88
|
|||||||
attiny88: MCU_TARGET = attiny88
|
attiny88: MCU_TARGET = attiny88
|
||||||
attiny88: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DSOFT_UART'
|
attiny88: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DSOFT_UART'
|
||||||
attiny88: AVR_FREQ ?= 8000000L
|
attiny88: AVR_FREQ ?= 8000000L
|
||||||
attiny88: LDSECTIONS = -Wl,--section-start=.text=0x1D80 -Wl,--section-start=.version=0x1ffe
|
|
||||||
attiny88: $(PROGRAM)_attiny88.hex
|
attiny88: $(PROGRAM)_attiny88.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
attiny88: $(PROGRAM)_attiny88.lst
|
attiny88: $(PROGRAM)_attiny88.lst
|
||||||
@ -750,7 +745,6 @@ attiny48: TARGET = attiny48
|
|||||||
attiny48: MCU_TARGET = attiny48
|
attiny48: MCU_TARGET = attiny48
|
||||||
attiny48: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DSOFT_UART'
|
attiny48: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DSOFT_UART'
|
||||||
attiny48: AVR_FREQ ?= 8000000L
|
attiny48: AVR_FREQ ?= 8000000L
|
||||||
attiny48: LDSECTIONS = -Wl,--section-start=.text=0x0D80 -Wl,--section-start=.version=0x0ffe
|
|
||||||
attiny48: $(PROGRAM)_attiny48.hex
|
attiny48: $(PROGRAM)_attiny48.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
attiny48: $(PROGRAM)_attiny48.lst
|
attiny48: $(PROGRAM)_attiny48.lst
|
||||||
@ -817,7 +811,6 @@ attiny85: MCU_TARGET = attiny85
|
|||||||
attiny85: LED_START_FLASHES_CMD = '-DLED_START_FLASHES=0'
|
attiny85: LED_START_FLASHES_CMD = '-DLED_START_FLASHES=0'
|
||||||
attiny85: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DSOFT_UART'
|
attiny85: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DSOFT_UART'
|
||||||
attiny85: AVR_FREQ ?= 8000000L
|
attiny85: AVR_FREQ ?= 8000000L
|
||||||
attiny85: LDSECTIONS = -Wl,--section-start=.text=0x1DC0 -Wl,--section-start=.version=0x1ffe
|
|
||||||
attiny85: $(PROGRAM)_attiny85.hex
|
attiny85: $(PROGRAM)_attiny85.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
attiny85: $(PROGRAM)_attiny85.lst
|
attiny85: $(PROGRAM)_attiny85.lst
|
||||||
@ -904,7 +897,6 @@ attiny45: MCU_TARGET = attiny45
|
|||||||
attiny45: LED_START_FLASHES_CMD = '-DLED_START_FLASHES=0'
|
attiny45: LED_START_FLASHES_CMD = '-DLED_START_FLASHES=0'
|
||||||
attiny45: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DSOFT_UART'
|
attiny45: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DSOFT_UART'
|
||||||
attiny45: AVR_FREQ ?= 8000000L
|
attiny45: AVR_FREQ ?= 8000000L
|
||||||
attiny45: LDSECTIONS = -Wl,--section-start=.text=0x0DC0 -Wl,--section-start=.version=0x0ffe
|
|
||||||
attiny45: $(PROGRAM)_attiny45.hex
|
attiny45: $(PROGRAM)_attiny45.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
attiny45: $(PROGRAM)_attiny45.lst
|
attiny45: $(PROGRAM)_attiny45.lst
|
||||||
@ -991,7 +983,6 @@ attiny84: TARGET = attiny84
|
|||||||
attiny84: MCU_TARGET = attiny84
|
attiny84: MCU_TARGET = attiny84
|
||||||
attiny84: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DSOFT_UART'
|
attiny84: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DSOFT_UART'
|
||||||
attiny84: AVR_FREQ ?= 8000000L
|
attiny84: AVR_FREQ ?= 8000000L
|
||||||
attiny84: LDSECTIONS = -Wl,--section-start=.text=0x1D80 -Wl,--section-start=.version=0x1ffe
|
|
||||||
attiny84: $(PROGRAM)_attiny84.hex
|
attiny84: $(PROGRAM)_attiny84.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
attiny84: $(PROGRAM)_attiny84.lst
|
attiny84: $(PROGRAM)_attiny84.lst
|
||||||
@ -1078,7 +1069,6 @@ attiny44: TARGET = attiny44
|
|||||||
attiny44: MCU_TARGET = attiny44
|
attiny44: MCU_TARGET = attiny44
|
||||||
attiny44: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DSOFT_UART'
|
attiny44: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DSOFT_UART'
|
||||||
attiny44: AVR_FREQ ?= 8000000L
|
attiny44: AVR_FREQ ?= 8000000L
|
||||||
attiny44: LDSECTIONS = -Wl,--section-start=.text=0x0D80 -Wl,--section-start=.version=0x0ffe
|
|
||||||
attiny44: $(PROGRAM)_attiny44.hex
|
attiny44: $(PROGRAM)_attiny44.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
attiny44: $(PROGRAM)_attiny44.lst
|
attiny44: $(PROGRAM)_attiny44.lst
|
||||||
@ -1166,7 +1156,6 @@ attiny861: TARGET = attiny861
|
|||||||
attiny861: MCU_TARGET = attiny861
|
attiny861: MCU_TARGET = attiny861
|
||||||
attiny861: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DSOFT_UART'
|
attiny861: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DSOFT_UART'
|
||||||
attiny861: AVR_FREQ ?= 8000000L
|
attiny861: AVR_FREQ ?= 8000000L
|
||||||
attiny861: LDSECTIONS = -Wl,--section-start=.text=0x1D80 -Wl,--section-start=.version=0x1ffe
|
|
||||||
attiny861: $(PROGRAM)_attiny861.hex
|
attiny861: $(PROGRAM)_attiny861.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
attiny861: $(PROGRAM)_attiny861.lst
|
attiny861: $(PROGRAM)_attiny861.lst
|
||||||
@ -1253,7 +1242,6 @@ attiny461: TARGET = attiny461
|
|||||||
attiny461: MCU_TARGET = attiny461
|
attiny461: MCU_TARGET = attiny461
|
||||||
attiny461: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DSOFT_UART'
|
attiny461: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-DSOFT_UART'
|
||||||
attiny461: AVR_FREQ ?= 8000000L
|
attiny461: AVR_FREQ ?= 8000000L
|
||||||
attiny461: LDSECTIONS = -Wl,--section-start=.text=0x0D80 -Wl,--section-start=.version=0x0ffe
|
|
||||||
attiny461: $(PROGRAM)_attiny461.hex
|
attiny461: $(PROGRAM)_attiny461.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
attiny461: $(PROGRAM)_attiny461.lst
|
attiny461: $(PROGRAM)_attiny461.lst
|
||||||
@ -1341,7 +1329,6 @@ attiny167: TARGET = attiny167
|
|||||||
attiny167: MCU_TARGET = attiny167
|
attiny167: MCU_TARGET = attiny167
|
||||||
attiny167: AVR_FREQ ?= 8000000L
|
attiny167: AVR_FREQ ?= 8000000L
|
||||||
attiny167: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION'
|
attiny167: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION'
|
||||||
attiny167: LDSECTIONS = -Wl,--section-start=.text=0x3d80 -Wl,--section-start=.version=0x3ffe
|
|
||||||
attiny167: $(PROGRAM)_attiny167.hex
|
attiny167: $(PROGRAM)_attiny167.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
attiny167: $(PROGRAM)_attiny167.lst
|
attiny167: $(PROGRAM)_attiny167.lst
|
||||||
@ -1352,7 +1339,6 @@ attiny87: TARGET = attiny87
|
|||||||
attiny87: MCU_TARGET = attiny87
|
attiny87: MCU_TARGET = attiny87
|
||||||
attiny87: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION'
|
attiny87: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION'
|
||||||
attiny87: AVR_FREQ ?= 8000000L
|
attiny87: AVR_FREQ ?= 8000000L
|
||||||
attiny87: LDSECTIONS = -Wl,--section-start=.text=0x1d80 -Wl,--section-start=.version=0x1ffe
|
|
||||||
attiny87: $(PROGRAM)_attiny87.hex
|
attiny87: $(PROGRAM)_attiny87.hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
attiny87: $(PROGRAM)_attiny87.lst
|
attiny87: $(PROGRAM)_attiny87.lst
|
||||||
|
@ -23,11 +23,6 @@ atmega8u2atUART: TARGET = atmega8u2
|
|||||||
atmega8u2atUART: MCU_TARGET = atmega8u2
|
atmega8u2atUART: MCU_TARGET = atmega8u2
|
||||||
atmega8u2atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega8u2atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega8u2atUART: AVR_FREQ ?= 16000000L
|
atmega8u2atUART: AVR_FREQ ?= 16000000L
|
||||||
ifndef BIGBOOT ## standard version is 512 Bytes long; starts earlier
|
|
||||||
atmega8u2atUART: LDSECTIONS = -Wl,--section-start=.text=0x1e00 -Wl,--section-start=.version=0x1ffe
|
|
||||||
else ## bigboot version is 1024 Bytes long; starts earlier
|
|
||||||
atmega8u2atUART: LDSECTIONS = -Wl,--section-start=.text=0x1c00 -Wl,--section-start=.version=0x1ffe
|
|
||||||
endif
|
|
||||||
atmega8u2atUART: $(PROGRAM)_atmega8u2_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
atmega8u2atUART: $(PROGRAM)_atmega8u2_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega8u2atUART: $(PROGRAM)_atmega8u2_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
atmega8u2atUART: $(PROGRAM)_atmega8u2_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
||||||
@ -57,11 +52,6 @@ atmega16u2atUART: TARGET = atmega16u2
|
|||||||
atmega16u2atUART: MCU_TARGET = atmega16u2
|
atmega16u2atUART: MCU_TARGET = atmega16u2
|
||||||
atmega16u2atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega16u2atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega16u2atUART: AVR_FREQ ?= 16000000L
|
atmega16u2atUART: AVR_FREQ ?= 16000000L
|
||||||
ifndef BIGBOOT ## standard version is 512 Bytes long; starts earlier
|
|
||||||
atmega16u2atUART: LDSECTIONS = -Wl,--section-start=.text=0x3e00 -Wl,--section-start=.version=0x3ffe
|
|
||||||
else ## bigboot version is 1024 Bytes long; starts earlier
|
|
||||||
atmega16u2atUART: LDSECTIONS = -Wl,--section-start=.text=0x3c00 -Wl,--section-start=.version=0x3ffe
|
|
||||||
endif
|
|
||||||
atmega16u2atUART: $(PROGRAM)_atmega16u2_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
atmega16u2atUART: $(PROGRAM)_atmega16u2_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega16u2atUART: $(PROGRAM)_atmega16u2_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
atmega16u2atUART: $(PROGRAM)_atmega16u2_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
||||||
@ -91,11 +81,6 @@ atmega32u2atUART: TARGET = atmega32u2
|
|||||||
atmega32u2atUART: MCU_TARGET = atmega32u2
|
atmega32u2atUART: MCU_TARGET = atmega32u2
|
||||||
atmega32u2atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega32u2atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega32u2atUART: AVR_FREQ ?= 16000000L
|
atmega32u2atUART: AVR_FREQ ?= 16000000L
|
||||||
ifndef BIGBOOT ## standard version is 512 Bytes long; starts earlier
|
|
||||||
atmega32u2atUART: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
else ## bigboot version is 1024 Bytes long; starts earlier
|
|
||||||
atmega32u2atUART: LDSECTIONS = -Wl,--section-start=.text=0x7c00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
endif
|
|
||||||
atmega32u2atUART: $(PROGRAM)_atmega32u2_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
atmega32u2atUART: $(PROGRAM)_atmega32u2_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega32u2atUART: $(PROGRAM)_atmega32u2_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
atmega32u2atUART: $(PROGRAM)_atmega32u2_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
||||||
@ -125,11 +110,6 @@ atmega16u4atUART: TARGET = atmega16u4
|
|||||||
atmega16u4atUART: MCU_TARGET = atmega16u4
|
atmega16u4atUART: MCU_TARGET = atmega16u4
|
||||||
atmega16u4atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega16u4atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega16u4atUART: AVR_FREQ ?= 16000000L
|
atmega16u4atUART: AVR_FREQ ?= 16000000L
|
||||||
ifndef BIGBOOT ## standard version is 512 Bytes long; starts earlier
|
|
||||||
atmega16u4atUART: LDSECTIONS = -Wl,--section-start=.text=0x3e00 -Wl,--section-start=.version=0x3ffe
|
|
||||||
else ## bigboot version is 1024 Bytes long; starts earlier
|
|
||||||
atmega16u4atUART: LDSECTIONS = -Wl,--section-start=.text=0x3c00 -Wl,--section-start=.version=0x3ffe
|
|
||||||
endif
|
|
||||||
atmega16u4atUART: $(PROGRAM)_atmega16u4_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
atmega16u4atUART: $(PROGRAM)_atmega16u4_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega16u4atUART: $(PROGRAM)_atmega16u4_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
atmega16u4atUART: $(PROGRAM)_atmega16u4_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
||||||
@ -160,11 +140,6 @@ atmega32u4atUART: TARGET = atmega32u4
|
|||||||
atmega32u4atUART: MCU_TARGET = atmega32u4
|
atmega32u4atUART: MCU_TARGET = atmega32u4
|
||||||
atmega32u4atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega32u4atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega32u4atUART: AVR_FREQ ?= 16000000L
|
atmega32u4atUART: AVR_FREQ ?= 16000000L
|
||||||
ifndef BIGBOOT ## standard version is 512 Bytes long; starts earlier
|
|
||||||
atmega32u4atUART: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
else ## bigboot version is 1024 Bytes long; starts earlier
|
|
||||||
atmega32u4atUART: LDSECTIONS = -Wl,--section-start=.text=0x7c00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
endif
|
|
||||||
atmega32u4atUART: $(PROGRAM)_atmega32u4_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
atmega32u4atUART: $(PROGRAM)_atmega32u4_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega32u4atUART: $(PROGRAM)_atmega32u4_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
atmega32u4atUART: $(PROGRAM)_atmega32u4_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
||||||
@ -195,11 +170,6 @@ atmega32u6atUART: TARGET = atmega32u6
|
|||||||
atmega32u6atUART: MCU_TARGET = atmega32u6
|
atmega32u6atUART: MCU_TARGET = atmega32u6
|
||||||
atmega32u6atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
atmega32u6atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
atmega32u6atUART: AVR_FREQ ?= 16000000L
|
atmega32u6atUART: AVR_FREQ ?= 16000000L
|
||||||
ifndef BIGBOOT ## standard version is 512 Bytes long; starts earlier
|
|
||||||
atmega32u6atUART: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
else ## bigboot version is 1024 Bytes long; starts earlier
|
|
||||||
atmega32u6atUART: LDSECTIONS = -Wl,--section-start=.text=0x7c00 -Wl,--section-start=.version=0x7ffe
|
|
||||||
endif
|
|
||||||
atmega32u6atUART: $(PROGRAM)_atmega32u6_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
atmega32u6atUART: $(PROGRAM)_atmega32u6_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
atmega32u6atUART: $(PROGRAM)_atmega32u6_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
atmega32u6atUART: $(PROGRAM)_atmega32u6_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
||||||
@ -229,11 +199,6 @@ at90usb646atUART: TARGET = at90usb646
|
|||||||
at90usb646atUART: MCU_TARGET = at90usb646
|
at90usb646atUART: MCU_TARGET = at90usb646
|
||||||
at90usb646atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
at90usb646atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
at90usb646atUART: AVR_FREQ ?= 16000000L
|
at90usb646atUART: AVR_FREQ ?= 16000000L
|
||||||
ifndef BIGBOOT ## standard version is 512 Bytes long; starts earlier
|
|
||||||
at90usb646atUART: LDSECTIONS = -Wl,--section-start=.text=0xfc00 -Wl,--section-start=.version=0xfffe
|
|
||||||
else ## bigboot version is 1024 Bytes long; starts earlier
|
|
||||||
at90usb646atUART: LDSECTIONS = -Wl,--section-start=.text=0xf800 -Wl,--section-start=.version=0xfffe
|
|
||||||
endif
|
|
||||||
at90usb646atUART: $(PROGRAM)_at90usb646_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
at90usb646atUART: $(PROGRAM)_at90usb646_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
at90usb646atUART: $(PROGRAM)_at90usb646_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
at90usb646atUART: $(PROGRAM)_at90usb646_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
||||||
@ -244,11 +209,7 @@ at90usb646:
|
|||||||
at90usb646_isp: at90usb646
|
at90usb646_isp: at90usb646
|
||||||
at90usb646_isp: TARGET = at90usb646
|
at90usb646_isp: TARGET = at90usb646
|
||||||
at90usb646_isp: MCU_TARGET = at90usb646
|
at90usb646_isp: MCU_TARGET = at90usb646
|
||||||
ifndef BIGBOOT ## standard version is 1024 Bytes long; starts earlier
|
|
||||||
at90usb646_isp: HFUSE ?= DE# = 1024 byte boot, SPI (ISP!!!) enabled, JTAG disabled
|
at90usb646_isp: HFUSE ?= DE# = 1024 byte boot, SPI (ISP!!!) enabled, JTAG disabled
|
||||||
else ## bigboot version is 2048 Bytes long; starts earlier
|
|
||||||
at90usb646_isp: HFUSE ?= DC# = 2048 byte boot, SPI (ISP!!!) enabled, JTAG disabled
|
|
||||||
endif
|
|
||||||
at90usb646_isp: LFUSE ?= FF# = Full Swing xtal (16MHz) 16KCK/14CK+65ms
|
at90usb646_isp: LFUSE ?= FF# = Full Swing xtal (16MHz) 16KCK/14CK+65ms
|
||||||
at90usb646_isp: EFUSE ?= FB# = 2.6V brownout
|
at90usb646_isp: EFUSE ?= FB# = 2.6V brownout
|
||||||
at90usb646_isp: LOCK ?= 2F# = APP protect mode 1, BL protect mode 2
|
at90usb646_isp: LOCK ?= 2F# = APP protect mode 1, BL protect mode 2
|
||||||
@ -263,11 +224,6 @@ at90usb647atUART: TARGET = at90usb647
|
|||||||
at90usb647atUART: MCU_TARGET = at90usb647
|
at90usb647atUART: MCU_TARGET = at90usb647
|
||||||
at90usb647atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
at90usb647atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
at90usb647atUART: AVR_FREQ ?= 16000000L
|
at90usb647atUART: AVR_FREQ ?= 16000000L
|
||||||
ifndef BIGBOOT ## standard version is 1024 Bytes long; starts earlier
|
|
||||||
at90usb647atUART: LDSECTIONS = -Wl,--section-start=.text=0xfc00 -Wl,--section-start=.version=0xfffe
|
|
||||||
else ## bigboot version is 2048 Bytes long; starts earlier
|
|
||||||
at90usb647atUART: LDSECTIONS = -Wl,--section-start=.text=0xf800 -Wl,--section-start=.version=0xfffe
|
|
||||||
endif
|
|
||||||
at90usb647atUART: $(PROGRAM)_at90usb647_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
at90usb647atUART: $(PROGRAM)_at90usb647_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
at90usb647atUART: $(PROGRAM)_at90usb647_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
at90usb647atUART: $(PROGRAM)_at90usb647_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
||||||
@ -278,11 +234,7 @@ at90usb647:
|
|||||||
at90usb647_isp: at90usb647
|
at90usb647_isp: at90usb647
|
||||||
at90usb647_isp: TARGET = at90usb647
|
at90usb647_isp: TARGET = at90usb647
|
||||||
at90usb647_isp: MCU_TARGET = at90usb647
|
at90usb647_isp: MCU_TARGET = at90usb647
|
||||||
ifndef BIGBOOT ## standard version is 1024 Bytes long; starts earlier
|
|
||||||
at90usb647_isp: HFUSE ?= DE# = 1024 byte boot, SPI (ISP!!!) enabled, JTAG disabled
|
at90usb647_isp: HFUSE ?= DE# = 1024 byte boot, SPI (ISP!!!) enabled, JTAG disabled
|
||||||
else ## bigboot version is 2048 Bytes long; starts earlier
|
|
||||||
at90usb647_isp: HFUSE ?= DC# = 2048 byte boot, SPI (ISP!!!) enabled, JTAG disabled
|
|
||||||
endif
|
|
||||||
at90usb647_isp: LFUSE ?= FF# = Full Swing xtal (16MHz) 16KCK/14CK+65ms
|
at90usb647_isp: LFUSE ?= FF# = Full Swing xtal (16MHz) 16KCK/14CK+65ms
|
||||||
at90usb647_isp: EFUSE ?= FB# = 2.6V brownout
|
at90usb647_isp: EFUSE ?= FB# = 2.6V brownout
|
||||||
at90usb647_isp: LOCK ?= 2F# = APP protect mode 1, BL protect mode 2
|
at90usb647_isp: LOCK ?= 2F# = APP protect mode 1, BL protect mode 2
|
||||||
@ -297,11 +249,6 @@ at90usb1286atUART: TARGET = at90usb1286
|
|||||||
at90usb1286atUART: MCU_TARGET = at90usb1286
|
at90usb1286atUART: MCU_TARGET = at90usb1286
|
||||||
at90usb1286atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
at90usb1286atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
at90usb1286atUART: AVR_FREQ ?= 16000000L
|
at90usb1286atUART: AVR_FREQ ?= 16000000L
|
||||||
ifndef BIGBOOT ## standard version is 1024 Bytes long; starts earlier
|
|
||||||
at90usb1286atUART: LDSECTIONS = -Wl,--section-start=.text=0x1fc00 -Wl,--section-start=.version=0x1fffe
|
|
||||||
else ## bigboot version is 2048 Bytes long; starts earlier
|
|
||||||
at90usb1286atUART: LDSECTIONS = -Wl,--section-start=.text=0x1f800 -Wl,--section-start=.version=0x1fffe
|
|
||||||
endif
|
|
||||||
at90usb1286atUART: $(PROGRAM)_at90usb1286_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
at90usb1286atUART: $(PROGRAM)_at90usb1286_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
at90usb1286atUART: $(PROGRAM)_at90usb1286_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
at90usb1286atUART: $(PROGRAM)_at90usb1286_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
||||||
@ -312,11 +259,7 @@ at90usb1286:
|
|||||||
at90usb1286_isp: at90usb1286
|
at90usb1286_isp: at90usb1286
|
||||||
at90usb1286_isp: TARGET = at90usb1286
|
at90usb1286_isp: TARGET = at90usb1286
|
||||||
at90usb1286_isp: MCU_TARGET = at90usb1286
|
at90usb1286_isp: MCU_TARGET = at90usb1286
|
||||||
ifndef BIGBOOT ## standard version is 1024 Bytes long; starts earlier
|
|
||||||
at90usb1286_isp: HFUSE ?= DE# = 1024 byte boot, SPI (ISP!!!) enabled, JTAG disabled
|
at90usb1286_isp: HFUSE ?= DE# = 1024 byte boot, SPI (ISP!!!) enabled, JTAG disabled
|
||||||
else ## bigboot version is 2048 Bytes long; starts earlier
|
|
||||||
at90usb1286_isp: HFUSE ?= DC# = 2048 byte boot, SPI (ISP!!!) enabled, JTAG disabled
|
|
||||||
endif
|
|
||||||
at90usb1286_isp: LFUSE ?= FF# = Full Swing xtal (16MHz) 16KCK/14CK+65ms
|
at90usb1286_isp: LFUSE ?= FF# = Full Swing xtal (16MHz) 16KCK/14CK+65ms
|
||||||
at90usb1286_isp: EFUSE ?= FB# = 2.6V brownout
|
at90usb1286_isp: EFUSE ?= FB# = 2.6V brownout
|
||||||
at90usb1286_isp: LOCK ?= 2F# = APP protect mode 1, BL protect mode 2
|
at90usb1286_isp: LOCK ?= 2F# = APP protect mode 1, BL protect mode 2
|
||||||
@ -331,11 +274,6 @@ at90usb1287atUART: TARGET = at90usb1287
|
|||||||
at90usb1287atUART: MCU_TARGET = at90usb1287
|
at90usb1287atUART: MCU_TARGET = at90usb1287
|
||||||
at90usb1287atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
at90usb1287atUART: CFLAGS += $(COMMON_OPTIONS) $(UART_CMD)
|
||||||
at90usb1287atUART: AVR_FREQ ?= 16000000L
|
at90usb1287atUART: AVR_FREQ ?= 16000000L
|
||||||
ifndef BIGBOOT ## standard version is 1024 Bytes long; starts earlier
|
|
||||||
at90usb1287atUART: LDSECTIONS = -Wl,--section-start=.text=0x1fc00 -Wl,--section-start=.version=0x1fffe
|
|
||||||
else ## bigboot version is 2048 Bytes long; starts earlier
|
|
||||||
at90usb1287atUART: LDSECTIONS = -Wl,--section-start=.text=0x1f800 -Wl,--section-start=.version=0x1fffe
|
|
||||||
endif
|
|
||||||
at90usb1287atUART: $(PROGRAM)_at90usb1287_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
at90usb1287atUART: $(PROGRAM)_at90usb1287_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).hex
|
||||||
ifndef PRODUCTION
|
ifndef PRODUCTION
|
||||||
at90usb1287atUART: $(PROGRAM)_at90usb1287_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
at90usb1287atUART: $(PROGRAM)_at90usb1287_UART$(UART)_$(BAUD_RATE)_$(AVR_FREQ)_BB$(BIGBOOT).lst
|
||||||
@ -346,11 +284,7 @@ at90usb1287:
|
|||||||
at90usb1287_isp: at90usb1287
|
at90usb1287_isp: at90usb1287
|
||||||
at90usb1287_isp: TARGET = at90usb1287
|
at90usb1287_isp: TARGET = at90usb1287
|
||||||
at90usb1287_isp: MCU_TARGET = at90usb1287
|
at90usb1287_isp: MCU_TARGET = at90usb1287
|
||||||
ifndef BIGBOOT ## standard version is 1024 Bytes long; starts earlier
|
|
||||||
at90usb1287_isp: HFUSE ?= DE# = 1024 byte boot, SPI (ISP!!!) enabled, JTAG disabled
|
at90usb1287_isp: HFUSE ?= DE# = 1024 byte boot, SPI (ISP!!!) enabled, JTAG disabled
|
||||||
else ## bigboot version is 2048 Bytes long; starts earlier
|
|
||||||
at90usb1287_isp: HFUSE ?= DC# = 2048 byte boot, SPI (ISP!!!) enabled, JTAG disabled
|
|
||||||
endif
|
|
||||||
at90usb1287_isp: LFUSE ?= FF# = Full Swing xtal (16MHz) 16KCK/14CK+65ms
|
at90usb1287_isp: LFUSE ?= FF# = Full Swing xtal (16MHz) 16KCK/14CK+65ms
|
||||||
at90usb1287_isp: EFUSE ?= FB# = 2.6V brownout
|
at90usb1287_isp: EFUSE ?= FB# = 2.6V brownout
|
||||||
at90usb1287_isp: LOCK ?= 2F# = APP protect mode 1, BL protect mode 2
|
at90usb1287_isp: LOCK ?= 2F# = APP protect mode 1, BL protect mode 2
|
||||||
|
145
optiboot/bootloaders/optiboot/link_optiboot.ld
Normal file
145
optiboot/bootloaders/optiboot/link_optiboot.ld
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
/* Customized Linker script for Optiboot */
|
||||||
|
|
||||||
|
/* Copyright (C) 2014-2015 Free Software Foundation, Inc.
|
||||||
|
Copyright (C) 2021 by William Westfield
|
||||||
|
Copying and distribution of this script, with or without modification,
|
||||||
|
are permitted in any medium without royalty provided the copyright
|
||||||
|
notice and this notice are preserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* this is based off of the default ATmega328 linker script, but it
|
||||||
|
* has been generalized (since optiboot makes little use of the standard
|
||||||
|
* chip-specific values), and also specialized to based start addresses
|
||||||
|
* of the code on symbols passed from the C program, instead of needing
|
||||||
|
* --section-start commands in the linker command line.
|
||||||
|
* (The C program does this by using asm() statements to define absolute
|
||||||
|
* symbols that the linker can see.
|
||||||
|
* The .data and .bss segments are removed, since the bootloader must not
|
||||||
|
* use them (and does its own memory management) (this has the added
|
||||||
|
* "benefit" of spitting out error messages if the code DOES try to
|
||||||
|
* use data or bss variables.
|
||||||
|
*/
|
||||||
|
|
||||||
|
OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
|
||||||
|
__FUSE_REGION_LENGTH__ = DEFINED(__FUSE_REGION_LENGTH__) ? __FUSE_REGION_LENGTH__ : 1K;
|
||||||
|
/* This makes the disassembly listings prettier */
|
||||||
|
__RAM__ = 0x800000;
|
||||||
|
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
text (rx) : ORIGIN = __BOOT_START__, LENGTH = __BOOT_SIZE__
|
||||||
|
version (rx) : ORIGIN = __VERSION_START__, LENGTH = 2
|
||||||
|
fuse (rw!x) : ORIGIN = 0x820000, LENGTH = __FUSE_REGION_LENGTH__
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
/* Read-only sections, merged into text segment: */
|
||||||
|
/* Internal text space or external memory. */
|
||||||
|
.text :
|
||||||
|
{
|
||||||
|
*(.vectors)
|
||||||
|
KEEP(*(.vectors))
|
||||||
|
/* For data that needs to reside in the lower 64k of progmem. */
|
||||||
|
*(.progmem.gcc*)
|
||||||
|
/* PR 13812: Placing the trampolines here gives a better chance
|
||||||
|
that they will be in range of the code that uses them. */
|
||||||
|
. = ALIGN(2);
|
||||||
|
*(.init0) /* Start here after reset. */
|
||||||
|
KEEP (*(.init0))
|
||||||
|
*(.init1)
|
||||||
|
KEEP (*(.init1))
|
||||||
|
*(.init2) /* Clear __zero_reg__, set up stack pointer. */
|
||||||
|
KEEP (*(.init2))
|
||||||
|
*(.init3)
|
||||||
|
KEEP (*(.init3))
|
||||||
|
*(.init4) /* Initialize data and BSS. */
|
||||||
|
KEEP (*(.init4))
|
||||||
|
*(.init5)
|
||||||
|
KEEP (*(.init5))
|
||||||
|
*(.init6) /* C++ constructors. */
|
||||||
|
KEEP (*(.init6))
|
||||||
|
*(.init7)
|
||||||
|
KEEP (*(.init7))
|
||||||
|
*(.init8)
|
||||||
|
KEEP (*(.init8))
|
||||||
|
*(.init9) /* Call main(). */
|
||||||
|
KEEP (*(.init9))
|
||||||
|
*(.text)
|
||||||
|
. = ALIGN(2);
|
||||||
|
*(.text.*)
|
||||||
|
. = ALIGN(2);
|
||||||
|
*(.fini9) /* _exit() starts here. */
|
||||||
|
KEEP (*(.fini9))
|
||||||
|
*(.fini8)
|
||||||
|
KEEP (*(.fini8))
|
||||||
|
*(.fini7)
|
||||||
|
KEEP (*(.fini7))
|
||||||
|
*(.fini6) /* C++ destructors. */
|
||||||
|
KEEP (*(.fini6))
|
||||||
|
*(.fini5)
|
||||||
|
KEEP (*(.fini5))
|
||||||
|
*(.fini4)
|
||||||
|
KEEP (*(.fini4))
|
||||||
|
*(.fini3)
|
||||||
|
KEEP (*(.fini3))
|
||||||
|
*(.fini2)
|
||||||
|
KEEP (*(.fini2))
|
||||||
|
*(.fini1)
|
||||||
|
KEEP (*(.fini1))
|
||||||
|
*(.fini0) /* Infinite loop after program termination. */
|
||||||
|
KEEP (*(.fini0))
|
||||||
|
_etext = . ;
|
||||||
|
} > text
|
||||||
|
.version __VERSION_START__ :
|
||||||
|
{
|
||||||
|
*(.version)
|
||||||
|
} > text
|
||||||
|
.fuse :
|
||||||
|
{
|
||||||
|
KEEP(*(.fuse))
|
||||||
|
KEEP(*(.lfuse))
|
||||||
|
KEEP(*(.hfuse))
|
||||||
|
KEEP(*(.efuse))
|
||||||
|
} > fuse
|
||||||
|
/* 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) }
|
||||||
|
.note.gnu.build-id : { *(.note.gnu.build-id) }
|
||||||
|
/* 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_line.* .debug_line_end ) }
|
||||||
|
.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) }
|
||||||
|
/* DWARF 3 */
|
||||||
|
.debug_pubtypes 0 : { *(.debug_pubtypes) }
|
||||||
|
.debug_ranges 0 : { *(.debug_ranges) }
|
||||||
|
/* DWARF Extension. */
|
||||||
|
.debug_macro 0 : { *(.debug_macro) }
|
||||||
|
}
|
115
optiboot/bootloaders/optiboot/makeall.everycpu.sh
Normal file
115
optiboot/bootloaders/optiboot/makeall.everycpu.sh
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
#
|
||||||
|
# Makefile to make one image for each chip that optiboot supports.
|
||||||
|
# includes Arduino, Spence Konde ATtinyCore, Hans MCUDude cores, and
|
||||||
|
# some others.
|
||||||
|
# this is mainly used to sanity check modifications, especially those
|
||||||
|
# that are expected to cause "no binary changes" (you can diff the
|
||||||
|
# resulting .hex file with a reference implementation.)
|
||||||
|
#
|
||||||
|
|
||||||
|
make clean
|
||||||
|
|
||||||
|
#Attinycore
|
||||||
|
make attiny841at16
|
||||||
|
make attiny841at16ser1
|
||||||
|
make attiny441at16
|
||||||
|
make attiny441at16ser1
|
||||||
|
make attiny87at16
|
||||||
|
make attiny167at16
|
||||||
|
make attiny1634at16
|
||||||
|
make attiny1634at16ser1
|
||||||
|
make attiny828at16
|
||||||
|
make attiny88at16
|
||||||
|
make attiny48at16
|
||||||
|
make attiny85at16
|
||||||
|
make attiny45at16
|
||||||
|
make attiny84at16
|
||||||
|
make attiny44at16
|
||||||
|
make attiny861at16
|
||||||
|
make attiny461at16
|
||||||
|
|
||||||
|
# mega
|
||||||
|
make mega2560
|
||||||
|
make mega1280
|
||||||
|
|
||||||
|
# usb
|
||||||
|
make atmega8u2 LED=D5 LED_START_FLASHES=2 UART=1
|
||||||
|
make atmega16u2 LED=D5 LED_START_FLASHES=2 UART=1
|
||||||
|
make atmega32u2 LED=D5 LED_START_FLASHES=2 UART=1
|
||||||
|
make atmega16u4 LED=C7 LED_START_FLASHES=0 UART=1
|
||||||
|
make atmega32u4 LED=C7 LED_START_FLASHES=0 UART=1
|
||||||
|
make atmega32u6 LED=C6 LED_START_FLASHES=2 UART=1
|
||||||
|
make at90usb646 LED=C6 LED_START_FLASHES=2 UART=1 NODATE=1 BIGBOOT=1
|
||||||
|
make at90usb647 LED=C6 LED_START_FLASHES=2 UART=1 NODATE=1 BIGBOOT=1
|
||||||
|
make at90usb1286 LED=C6 LED_START_FLASHES=2 UART=1 NODATE=1 BIGBOOT=1
|
||||||
|
make at90usb1287 LED=C6 LED_START_FLASHES=2 UART=1 NODATE=1 BIGBOOT=1
|
||||||
|
|
||||||
|
# buildable platforms of somewhat questionable support level
|
||||||
|
make lilypad
|
||||||
|
make pro8
|
||||||
|
make pro16
|
||||||
|
make pro20
|
||||||
|
make atmega328_pro8
|
||||||
|
make sanguino
|
||||||
|
make mega1280
|
||||||
|
make luminet
|
||||||
|
make diecimila
|
||||||
|
make bobuino
|
||||||
|
make wildfirev2
|
||||||
|
make atmega1284
|
||||||
|
make atmega32
|
||||||
|
make atmega168p
|
||||||
|
|
||||||
|
# Atmel development board targets
|
||||||
|
make xplained168pb
|
||||||
|
make xplained328p
|
||||||
|
make xplained328pb
|
||||||
|
|
||||||
|
# mcudude cores
|
||||||
|
make atmega8 LED=B5 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega16 LED=B0 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega32 LED=B0 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega64 LED=B5 LED_START_FLASHES=2 UART=0 BIGBOOT=1 NODATE=1
|
||||||
|
make atmega88 LED=B5 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega88p LED=B5 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega88pb LED=B5 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega128 LED=B5 LED_START_FLASHES=2 UART=0 BIGBOOT=1 NODATE=1
|
||||||
|
make atmega162 LED=B0 LED_START_FLASHES=0 UART=0
|
||||||
|
make atmega164a LED=B0 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega164p LED=B0 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega168 LED=B5 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega168p LED=B5 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega168pb LED=B5 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega169 LED=B5 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega169p LED=B5 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega324a LED=B0 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega324p LED=B0 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega324pa LED=B0 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega324pb LED=B0 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega328 LED=B5 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega328pb LED=B5 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega329 LED=B5 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega329p LED=B5 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega640 LED=B7 LED_START_FLASHES=2 UART=0 BIGBOOT=1 NODATE=1
|
||||||
|
make atmega644p LED=B0 LED_START_FLASHES=2 UART=0 BIGBOOT=1 NODATE=1
|
||||||
|
make atmega649 LED=B5 LED_START_FLASHES=2 UART=0 BIGBOOT=1 NODATE=1
|
||||||
|
make atmega649p LED=B5 LED_START_FLASHES=2 UART=0 BIGBOOT=1 NODATE=1
|
||||||
|
make atmega1280 LED=B7 LED_START_FLASHES=2 UART=0 BIGBOOT=1 NODATE=1
|
||||||
|
make atmega1281 LED=B5 LED_START_FLASHES=2 UART=0 BIGBOOT=1 NODATE=1
|
||||||
|
make atmega1284 LED=B0 LED_START_FLASHES=2 UART=0 BIGBOOT=1 NODATE=1
|
||||||
|
make atmega1284p LED=B0 LED_START_FLASHES=2 UART=0 BIGBOOT=1 NODATE=1
|
||||||
|
make atmega2560 LED=B7 LED_START_FLASHES=2 UART=0 BIGBOOT=1 NODATE=1
|
||||||
|
make atmega2561 LED=B5 LED_START_FLASHES=2 UART=0 BIGBOOT=1 NODATE=1
|
||||||
|
make atmega3290 LED=B5 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega3290p LED=B5 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega6490 LED=B5 LED_START_FLASHES=2 UART=0 BIGBOOT=1 NODATE=1
|
||||||
|
make atmega6490p LED=B5 LED_START_FLASHES=2 UART=0 BIGBOOT=1 NODATE=1
|
||||||
|
make atmega8515 LED=B0 LED_START_FLASHES=2 UART=0
|
||||||
|
make atmega8535 LED=B0 LED_START_FLASHES=2 UART=0
|
||||||
|
|
||||||
|
# default generic platforms
|
||||||
|
# These need to be built AFTER the platforms, or they'll get renamed
|
||||||
|
make atmega8
|
||||||
|
make atmega168
|
||||||
|
make atmega328
|
||||||
|
|
@ -239,6 +239,10 @@
|
|||||||
/**********************************************************/
|
/**********************************************************/
|
||||||
/* Edit History: */
|
/* Edit History: */
|
||||||
/* */
|
/* */
|
||||||
|
/* Oct 2021 */
|
||||||
|
/* 8.3 WestfW add section-start determination code to */
|
||||||
|
/* the C source. In theory, this causes no changes */
|
||||||
|
/* to the binary, but it's "risky", so ... bump. */
|
||||||
/* Aug 2019 */
|
/* Aug 2019 */
|
||||||
/* 8.1 WestfW Fix bug in calculation of Vboot offset */
|
/* 8.1 WestfW Fix bug in calculation of Vboot offset */
|
||||||
/* Sep 2018 */
|
/* Sep 2018 */
|
||||||
@ -328,7 +332,7 @@
|
|||||||
/**********************************************************/
|
/**********************************************************/
|
||||||
|
|
||||||
#define OPTIBOOT_MAJVER 8
|
#define OPTIBOOT_MAJVER 8
|
||||||
#define OPTIBOOT_MINVER 2
|
#define OPTIBOOT_MINVER 3
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* OPTIBOOT_CUSTOMVER should be defined (by the makefile) for custom edits
|
* OPTIBOOT_CUSTOMVER should be defined (by the makefile) for custom edits
|
||||||
@ -597,6 +601,92 @@ static addr16_t buff = {(uint8_t *)(RAMSTART)};
|
|||||||
|
|
||||||
#endif // VIRTUAL_BOOT_PARTITION
|
#endif // VIRTUAL_BOOT_PARTITION
|
||||||
|
|
||||||
|
void sectionOpts() __attribute__((naked));
|
||||||
|
void sectionOpts() {
|
||||||
|
/*
|
||||||
|
* Mysterious Magic code to allow section-start addresses to be
|
||||||
|
* specifed by the C code (which, after all, has access to CPP symbols
|
||||||
|
* like FLASHEND, and can make a "safer" guess than putting manually
|
||||||
|
* determined constants in the Makefile. This is dependent on a custom
|
||||||
|
* linker script that makes use of the __BOOT_ symbols that we define.
|
||||||
|
* Fortunately, that script can be used to link optiboot on any of its
|
||||||
|
* usual chips.
|
||||||
|
*
|
||||||
|
* with some judicious use of asm directives, we can define symbols
|
||||||
|
* that the linker will look at for positioning our segments (in
|
||||||
|
* combination with a custom linker script) based on the flash size
|
||||||
|
* defined via io.h, instead of requiring magic --section-start
|
||||||
|
* constants on the build line.
|
||||||
|
*
|
||||||
|
* This apparently needs to be inside a function in order to pass
|
||||||
|
* arguments to the asm command (even though the asm doesn't
|
||||||
|
* generate any code) But we can make sure the function (which doesn't
|
||||||
|
* actually contain any code) doesn't actually end up in the binary.
|
||||||
|
*/
|
||||||
|
#if BIGBOOT
|
||||||
|
/*
|
||||||
|
* BIGBOOT images are easy, because they're much smaller than the
|
||||||
|
* flash size that they are defined to occupy (1k)
|
||||||
|
*/
|
||||||
|
asm(" .global __BOOT_SIZE__, __BOOT_START__, __VERSION_START__\n"
|
||||||
|
" .equ __BOOT_SIZE__, 1024\n"
|
||||||
|
" .equ __BOOT_START__, (%0-1023)\n"
|
||||||
|
" .equ __VERSION_START__, (%0-1)\n"
|
||||||
|
::"i"((uint32_t)FLASHEND));
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
* non-BIGBOOT images try to fit in 512bytes, but don't quite fit
|
||||||
|
* on chips that don't have HW support for a boot section. We try
|
||||||
|
* to guess how big the extra bits of code are, and then round up
|
||||||
|
* to the next larger flash page boundry (which can be nearly 4 pages
|
||||||
|
* away on chips with FOURPAGEERASE)
|
||||||
|
* These numbers are determined manually by building a reference
|
||||||
|
* implementation with various options and comparing sizes.
|
||||||
|
*/
|
||||||
|
# if VIRTUAL_BOOT_PARTITION
|
||||||
|
/* VIRTUAL_BOOT_PARTITION code is about 100 bytes */
|
||||||
|
# define VBSIZE 110
|
||||||
|
# else
|
||||||
|
# define VBSIZE 0
|
||||||
|
# endif
|
||||||
|
# if LED_START_FLASHES==0
|
||||||
|
/* if LED_START_FLASHES is 0 (eg on 8pin chips), it saves some code */
|
||||||
|
# define LEDSIZE (-30)
|
||||||
|
# else
|
||||||
|
# define LEDSIZE 0
|
||||||
|
# endif
|
||||||
|
# if SOFT_UART
|
||||||
|
/* But not having a hardware UART costs a bit */
|
||||||
|
# define SOFTUSIZE 16
|
||||||
|
# else
|
||||||
|
# define SOFTUSIZE 0
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if FOURPAGEERASE
|
||||||
|
/* FOURPAGEERASE adds some code, and also affects how we round */
|
||||||
|
# define ERASESIZE 8
|
||||||
|
# define PAGSIZ_B (SPM_PAGESIZE*4)
|
||||||
|
# else
|
||||||
|
# define PAGSIZ_B (SPM_PAGESIZE)
|
||||||
|
# define ERASESIZE 0
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Round our guess up to next page size. So 560 byte images occupy 576bytes,
|
||||||
|
* 600 byte images occupy 640 bytes, etc. Depending on chip.
|
||||||
|
* Note that SPM_PAGESIZE is already in bytes in the .h files.
|
||||||
|
*/
|
||||||
|
# define ROUNDTOPAGE(size) (((size + (PAGSIZ_B/2))/(PAGSIZ_B))*(PAGSIZ_B))
|
||||||
|
/* use 511 here so we don't round up to the next page on normal systems. */
|
||||||
|
# define BOOTSIZE (511+ERASESIZE+VBSIZE+SOFTUSIZE+LEDSIZE)
|
||||||
|
asm(" .global __BOOT_SIZE__, __BOOT_START__, __VERSION_START__\n"
|
||||||
|
" .equ __BOOT_SIZE__, %1\n"
|
||||||
|
" .equ __BOOT_START__, ((%0+1)-%1)\n"
|
||||||
|
" .equ __VERSION_START__, (%0-1)\n"
|
||||||
|
::"i"((uint32_t)FLASHEND), "i"(ROUNDTOPAGE(BOOTSIZE)));
|
||||||
|
#endif
|
||||||
|
/* Wasn't that FUN! */
|
||||||
|
}
|
||||||
|
|
||||||
/* everything that needs to run VERY early */
|
/* everything that needs to run VERY early */
|
||||||
void pre_main(void) {
|
void pre_main(void) {
|
||||||
@ -1566,7 +1656,10 @@ OPT2FLASH(SOFT_UART);
|
|||||||
OPT2FLASH(UART);
|
OPT2FLASH(UART);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (!defined(NODATE)) || (NODATE == 0)
|
||||||
|
// Leave out the date, useful if we want to compare binaries
|
||||||
OPTFLASHSECT const char f_date[] = "Built:" __DATE__ ":" __TIME__;
|
OPTFLASHSECT const char f_date[] = "Built:" __DATE__ ":" __TIME__;
|
||||||
|
#endif
|
||||||
#if BIGBOOT
|
#if BIGBOOT
|
||||||
OPT2FLASH(BIGBOOT);
|
OPT2FLASH(BIGBOOT);
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,55 +1,54 @@
|
|||||||
:020000021000EC
|
:020000021000EC
|
||||||
:10FC000001C022C1112484B7882369F0982F9A700B
|
:10FC000001C01DC1112484B7882369F0982F9A7010
|
||||||
:10FC1000923049F081FF02C097EF94BF282E80E018
|
:10FC1000923049F081FF02C097EF94BF282E80E018
|
||||||
:10FC2000FED00C94000085E08093810082E08093F8
|
:10FC2000F9D00C94000085E08093810082E08093FD
|
||||||
:10FC3000C00088E18093C10086E08093C20080E12B
|
:10FC3000C00088E18093C10086E08093C20080E12B
|
||||||
:10FC40008093C4008EE0EBD0279A86E020E33CEF5F
|
:10FC40008093C4008EE0E6D0279A86E020E33CEF64
|
||||||
:10FC500091E0309385002093840096BBB09BFECF4B
|
:10FC500091E0309385002093840096BBB09BFECF4B
|
||||||
:10FC60001F9AA8954091C00047FD02C0815089F7B6
|
:10FC60001F9AA8954091C00047FD02C0815089F7B6
|
||||||
:10FC7000FF24F39455E0E52E61E1D62EC4D0813403
|
:10FC7000FF24F39455E0E52E61E1D62EBFD0813408
|
||||||
:10FC8000C9F4C1D0C82FD1D0C23811F481E010C05E
|
:10FC800049F4BCD0C82FCCD0C13809F0A6C088E058
|
||||||
:10FC9000C13869F488E00CC0843709F482C0853724
|
:10FC9000AED0AAC0823411F484E103C0853419F4D3
|
||||||
:10FCA00009F0A2C0C2D08EE1A7D087E9A5D083E039
|
:10FCA00085E0C6D0A1C0853579F4A8D0082FA6D0AC
|
||||||
:10FCB000A3D09FC0823411F484E103C0853419F4C9
|
:10FCB000182F87FF03C08BB7816002C08BB78E7F80
|
||||||
:10FCC00085E0BBD096C0853579F49DD0082F9BD0B8
|
:10FCC0008BBF000F111F8FC0863581F497D08D3404
|
||||||
:10FCD000182F87FF03C08BB7816002C08BB78E7F60
|
:10FCD00049F494D0CBB792D0C170880FC82BCBBF5A
|
||||||
:10FCE0008BBF000F111F84C0863581F48CD08D34FA
|
:10FCE00081E001C083E0A4D080E0D2CF843609F067
|
||||||
:10FCF00049F489D0CBB787D0C170880FC82BCBBF50
|
:10FCF00048C084D0C82FD0E0DC2FCC277FD0C82BC1
|
||||||
:10FD000081E001C083E099D080E0D2CF843609F051
|
:10FD00007DD0C82E5E01812C32E0932E77D0F40195
|
||||||
:10FD1000C3CF79D0C82FD0E0DC2FCC2774D0C82B2C
|
:10FD100081934F01F1E0AF1AB108C1F781D085E4BA
|
||||||
:10FD200072D0C82E5E01812C32E0932E6CD0F4018B
|
:10FD2000C81212C0DE5F4801A12C92E0B92EAC16B9
|
||||||
:10FD300081934F01F1E0AF1AB108C1F776D085E4A5
|
:10FD3000BD0609F459C0F50161915F01C40197D076
|
||||||
:10FD4000C81212C0DE5F4801A12C92E0B92EAC1699
|
:10FD4000FFEF8F1A9F0AF3CF83E0F80187BFE89592
|
||||||
:10FD5000BD0609F44EC0F50161915F01C4018CD06C
|
:10FD500007B600FCFDCFA0E0B2E0F8018D919D91C7
|
||||||
:10FD6000FFEF8F1A9F0AF3CF83E0F80187BFE89572
|
:10FD60000C01F7BEE8951124229732962097B1F73F
|
||||||
:10FD700007B600FCFDCFA0E0B2E0F8018D919D91A7
|
:10FD7000F801E7BEE89507B600FCFDCFD7BEE895D1
|
||||||
:10FD80000C01F7BEE8951124229732962097B1F71F
|
:10FD800033C0843719F53AD0C82FD0E0DC2FCC2708
|
||||||
:10FD9000F801E7BEE89507B600FCFDCFD7BEE895B1
|
:10FD900035D05E01A82A32D0982E42D0E801F5E491
|
||||||
:10FDA00028C031D0C82FD0E0DC2FCC272CD05E016A
|
:10FDA0009F120BC0CE015BD022D081E0A81AB1080F
|
||||||
:10FDB000A82A29D0982E39D0E801F5E49F120BC06B
|
:10FDB0002196A114B104B1F717C0FE018791EF019C
|
||||||
:10FDC000CE0152D019D081E0A81AB1082196A11411
|
:10FDC00016D0E1E0AE1AB108C1F70EC0853739F49C
|
||||||
:10FDD000B104B1F70EC0FE018791EF010DD0E1E053
|
:10FDD00027D08EE10CD087E90AD083E059CF813556
|
||||||
:10FDE000AE1AB108C1F705C0813511F488E017D00B
|
:10FDE00011F488E017D01CD080E101D047CF90916A
|
||||||
:10FDF0001CD080E101D042CF9091C00095FFFCCF94
|
:10FDF000C00095FFFCCF8093C60008958091C0009D
|
||||||
:10FE00008093C60008958091C00087FFFCCF809149
|
:10FE000087FFFCCF8091C00084FD01C0A895809140
|
||||||
:10FE1000C00084FD01C0A8958091C6000895E0E669
|
:10FE1000C6000895E0E6F0E098E1908380830895BD
|
||||||
:10FE2000F0E098E1908380830895EDDF803219F04F
|
:10FE2000EDDF803219F088E0F5DFFFCF84E1DFCF2E
|
||||||
:10FE300088E0F5DFFFCF84E1DFCFCF93C82FE3DF8A
|
:10FE3000CF93C82FE3DFC150E9F7CF91F1CFFC0199
|
||||||
:10FE4000C150E9F7CF91F1CFFC010A0167BFE895F6
|
:10FE40000A0167BFE895112407B600FCFDCF667074
|
||||||
:10FE5000112407B600FCFDCF667029F0452B19F47C
|
:10FE500029F0452B19F481E187BFE8950895F999B8
|
||||||
:10FE600081E187BFE8950895F999FECF92BD81BDE4
|
:10FE6000FECF92BD81BDF89A992780B50895262FBF
|
||||||
:10FE7000F89A992780B50895262FF999FECF1FBAD1
|
:10FE7000F999FECF1FBA92BD81BD20BD0FB6F8948F
|
||||||
:10FE800092BD81BD20BD0FB6F894FA9AF99A0FBEC3
|
:10FE8000FA9AF99A0FBE01960895FF566572736942
|
||||||
:10FE90000196089556657273696F6E3D382E310074
|
:10FE90006F6E3D382E33004465766963653D61744D
|
||||||
:10FEA0004F505449424F4F545F435553544F4D5652
|
:10FEA0006D6567613132383000465F4350553D31F2
|
||||||
:10FEB00045523D30004465766963653D61746D650A
|
:10FEB000363030303030304C00424947424F4F549A
|
||||||
:10FEC00067613132383000465F4350553D3136303E
|
:10FEC0003D31004275696C743A4E6F7620203420C3
|
||||||
:10FED00030303030304C00424947424F4F543D3172
|
:10FED000323032313A31383A30333A3033005541EA
|
||||||
:10FEE000004275696C743A4D6179203239203230A4
|
:10FEE00052543D3000424155445F524154453D31EA
|
||||||
:10FEF00032303A30313A30323A343000554152548F
|
:10FEF0003135323030004C45443D4237004C4544AA
|
||||||
:10FF00003D3000424155445F524154453D31313509
|
:10FF00005F53544152545F464C41534845533D332F
|
||||||
:10FF1000323030004C45443D4237004C45445F533D
|
:01FF100000F0
|
||||||
:0FFF2000544152545F464C41534845533D3300C2
|
:02FFFE000308F6
|
||||||
:02FFFE000108F8
|
|
||||||
:040000031000FC00ED
|
:040000031000FC00ED
|
||||||
:00000001FF
|
:00000001FF
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,33 +1,33 @@
|
|||||||
:107E000001C0DEC0112484B7882361F0982F9A70D6
|
:107E000001C0DAC0112484B7882361F0982F9A70DA
|
||||||
:107E1000923041F081FF02C097EF94BF282E80E09E
|
:107E1000923041F081FF02C097EF94BF282E80E09E
|
||||||
:107E2000BAD0EEC085E08093810082E08093C000EC
|
:107E2000B6D0EEC085E08093810082E08093C000F0
|
||||||
:107E300088E18093C10086E08093C20080E1809356
|
:107E300088E18093C10086E08093C20080E1809356
|
||||||
:107E4000C4008EE0A8D0259A86E020E33CEF91E0C4
|
:107E4000C4008EE0A4D0259A86E020E33CEF91E0C8
|
||||||
:107E5000309385002093840096BBB09BFECF1D9A83
|
:107E5000309385002093840096BBB09BFECF1D9A83
|
||||||
:107E6000A8954091C00047FD02C0815089F7EE24DB
|
:107E6000A8954091C00047FD02C0815089F7EE24DB
|
||||||
:107E7000E39495E0D92E21E1C22E81D0813471F4B2
|
:107E7000E39495E0D92E21E1C22E7DD0813451F4D6
|
||||||
:107E80007ED0182F8ED0123811F481E005C0113841
|
:107E80007AD0182F8AD0113811F083E001C088E031
|
||||||
:107E900011F488E001C083E06BD067C0823411F434
|
:107E90006BD067C0823411F484E103C0853419F4D7
|
||||||
:107EA00084E103C0853419F485E083D05EC0853554
|
:107EA00085E083D05EC0853539F465D0C82F63D0B6
|
||||||
:107EB00039F465D0C82F63D0D82FCC0FDD1F54C044
|
:107EB000D82FCC0FDD1F54C0863521F484E075D057
|
||||||
:107EC000863521F484E075D080E0E6CF843609F071
|
:107EC00080E0E6CF843609F02EC055D054D0F82E8D
|
||||||
:107ED0002EC055D054D0F82E52D0B82E00E011E06C
|
:107ED00052D0B82E00E011E04ED0F80181938F010E
|
||||||
:107EE0004ED0F80181938F01FE12FACF5AD0F5E4FB
|
:107EE000FE12FACF5AD0F5E4BF1201C0FFCF83E0F3
|
||||||
:107EF000BF1201C0FFCF83E0FE0187BFE89507B640
|
:107EF000FE0187BFE89507B600FCFDCFA0E0B1E02A
|
||||||
:107F000000FCFDCFA0E0B1E0FE018D919D910C0140
|
:107F0000FE018D919D910C01E7BEE89511243296FA
|
||||||
:107F1000E7BEE89511243296FA12F7CFFE01D7BEDC
|
:107F1000FA12F7CFFE01D7BEE89507B600FCFDCFF9
|
||||||
:107F2000E89507B600FCFDCFC7BEE8951EC08437B4
|
:107F2000C7BEE8951EC0843771F425D024D0F82E42
|
||||||
:107F300071F425D024D0F82E22D033D08E01F80150
|
:107F300022D033D08E01F80185918F0115D0FA94AB
|
||||||
:107F400085918F0115D0FA94F110F9CF0EC08537C5
|
:107F4000F110F9CF0EC0853739F427D08EE10CD06F
|
||||||
:107F500039F427D08EE10CD085E90AD08FE09CCF90
|
:107F500085E90AD08FE09CCF813511F488E017D0F5
|
||||||
:107F6000813511F488E017D01CD080E101D085CF95
|
:107F60001CD080E101D089CF9091C00095FFFCCF5B
|
||||||
:107F70009091C00095FFFCCF8093C600089580913A
|
:107F70008093C60008958091C00087FFFCCF809158
|
||||||
:107F8000C00087FFFCCF8091C00084FD01C0A89590
|
:107F8000C00084FD01C0A8958091C6000895E0E678
|
||||||
:107F90008091C6000895E0E6F0E098E19083808348
|
:107F9000F0E098E1908380830895EDDF803219F05E
|
||||||
:107FA0000895EDDF803219F088E0F5DFFFCF84E13E
|
:107FA00088E0F5DFFFCF84E1DFCFCF93C82FE3DF99
|
||||||
:107FB000DFCFCF93C82FE3DFC150E9F7CF91F1CFE7
|
:107FB000C150E9F7CF91F1CFFC010A0167BFE89505
|
||||||
:107FC000FC010A0167BFE895112407B600FCFDCF4C
|
:107FC000112407B600FCFDCF667029F0452B19F48B
|
||||||
:107FD000667029F0452B19F481E187BFE895089573
|
:087FD00081E187BFE8950895E7
|
||||||
:027FFE00010878
|
:027FFE00030876
|
||||||
:0400000300007E007B
|
:0400000300007E007B
|
||||||
:00000001FF
|
:00000001FF
|
||||||
|
@ -3,29 +3,29 @@ optiboot_atmega328.elf: file format elf32-avr
|
|||||||
|
|
||||||
Sections:
|
Sections:
|
||||||
Idx Name Size VMA LMA File off Algn
|
Idx Name Size VMA LMA File off Algn
|
||||||
0 .data 00000000 00800100 00007fe0 00000274 2**0
|
0 .text 000001d8 00007e00 00007e00 00000074 2**0
|
||||||
CONTENTS, ALLOC, LOAD, DATA
|
|
||||||
1 .text 000001e0 00007e00 00007e00 00000094 2**1
|
|
||||||
CONTENTS, ALLOC, LOAD, READONLY, CODE
|
CONTENTS, ALLOC, LOAD, READONLY, CODE
|
||||||
2 .version 00000002 00007ffe 00007ffe 00000274 2**0
|
1 .trampolines 00000000 00007fd8 00007fd8 0000024c 2**1
|
||||||
|
CONTENTS, ALLOC, LOAD, READONLY, CODE
|
||||||
|
2 .version 00000002 00007ffe 00007ffe 0000024c 2**0
|
||||||
CONTENTS, ALLOC, LOAD, READONLY, DATA
|
CONTENTS, ALLOC, LOAD, READONLY, DATA
|
||||||
3 .comment 0000002f 00000000 00000000 00000276 2**0
|
3 .comment 0000002f 00000000 00000000 0000024e 2**0
|
||||||
CONTENTS, READONLY
|
CONTENTS, READONLY
|
||||||
4 .debug_aranges 00000030 00000000 00000000 000002a5 2**0
|
4 .debug_aranges 00000030 00000000 00000000 0000027d 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
5 .debug_info 000005f9 00000000 00000000 000002d5 2**0
|
5 .debug_info 00000638 00000000 00000000 000002ad 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
6 .debug_abbrev 000002c1 00000000 00000000 000008ce 2**0
|
6 .debug_abbrev 000002e6 00000000 00000000 000008e5 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
7 .debug_line 0000033b 00000000 00000000 00000b8f 2**0
|
7 .debug_line 00000344 00000000 00000000 00000bcb 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
8 .debug_frame 0000009c 00000000 00000000 00000ecc 2**2
|
8 .debug_frame 000000ac 00000000 00000000 00000f10 2**2
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
9 .debug_str 00000200 00000000 00000000 00000f68 2**0
|
9 .debug_str 00000220 00000000 00000000 00000fbc 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
10 .debug_loc 00000359 00000000 00000000 00001168 2**0
|
10 .debug_loc 00000359 00000000 00000000 000011dc 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
11 .debug_ranges 00000080 00000000 00000000 000014c1 2**0
|
11 .debug_ranges 00000068 00000000 00000000 00001535 2**0
|
||||||
CONTENTS, READONLY, DEBUGGING
|
CONTENTS, READONLY, DEBUGGING
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
@ -33,12 +33,12 @@ Disassembly of section .text:
|
|||||||
00007e00 <pre_main>:
|
00007e00 <pre_main>:
|
||||||
/* everything that needs to run VERY early */
|
/* everything that needs to run VERY early */
|
||||||
void pre_main(void) {
|
void pre_main(void) {
|
||||||
// Allow convenient way of calling do_spm function - jump table,
|
// Allow convenient way of calling do_spm function - jump table, so
|
||||||
// so entry to this function will always be here, indepedent of compilation,
|
// entry to this function will always be here, independent of
|
||||||
// features etc
|
// compilation, features etc
|
||||||
asm volatile (
|
asm volatile (
|
||||||
7e00: 01 c0 rjmp .+2 ; 0x7e04 <main>
|
7e00: 01 c0 rjmp .+2 ; 0x7e04 <main>
|
||||||
7e02: de c0 rjmp .+444 ; 0x7fc0 <do_spm>
|
7e02: da c0 rjmp .+436 ; 0x7fb8 <do_spm>
|
||||||
|
|
||||||
00007e04 <main>:
|
00007e04 <main>:
|
||||||
// SP points to RAMEND
|
// SP points to RAMEND
|
||||||
@ -48,37 +48,36 @@ void pre_main(void) {
|
|||||||
// cli();
|
// cli();
|
||||||
asm volatile (" clr __zero_reg__");
|
asm volatile (" clr __zero_reg__");
|
||||||
7e04: 11 24 eor r1, r1
|
7e04: 11 24 eor r1, r1
|
||||||
#if defined(__AVR_ATmega8515__) || defined(__AVR_ATmega8535__) || \
|
# warning "START_APP_ON_EXTR is defined and NO_START_APP_ON_POR isn't"
|
||||||
defined(__AVR_ATmega16__) || defined(__AVR_ATmega162__) || \
|
# define APP_START_REASONS 1 /* Always start rge App. */
|
||||||
defined (__AVR_ATmega128__)
|
# define WDRF_CLR_REASONS 0 /* Never clear WDRF */
|
||||||
ch = MCUCSR;
|
#endif
|
||||||
#else
|
|
||||||
ch = MCUSR;
|
ch = MCUSR;
|
||||||
7e06: 84 b7 in r24, 0x34 ; 52
|
7e06: 84 b7 in r24, 0x34 ; 52
|
||||||
#endif
|
|
||||||
// Skip all logic and run bootloader if MCUSR is cleared (application request)
|
// Skip all logic and run bootloader if MCUSR is cleared (application request)
|
||||||
if (ch != 0) {
|
if (ch != 0) {
|
||||||
7e08: 88 23 and r24, r24
|
7e08: 88 23 and r24, r24
|
||||||
7e0a: 61 f0 breq .+24 ; 0x7e24 <main+0x20>
|
7e0a: 61 f0 breq .+24 ; 0x7e24 <main+0x20>
|
||||||
* 2. we clear WDRF if it's set with EXTRF to avoid loops
|
|
||||||
* One problematic scenario: broken application code sets watchdog timer
|
* One problematic scenario: broken application code sets watchdog timer
|
||||||
* without clearing MCUSR before and triggers it quickly. But it's
|
* without clearing MCUSR before and triggers it quickly. But it's
|
||||||
* recoverable by power-on with pushed reset button.
|
* recoverable by power-on with pushed reset button.
|
||||||
*/
|
*/
|
||||||
if ((ch & (_BV(WDRF) | _BV(EXTRF))) != _BV(EXTRF)) {
|
|
||||||
|
if (APP_START_REASONS) {
|
||||||
7e0c: 98 2f mov r25, r24
|
7e0c: 98 2f mov r25, r24
|
||||||
7e0e: 9a 70 andi r25, 0x0A ; 10
|
7e0e: 9a 70 andi r25, 0x0A ; 10
|
||||||
7e10: 92 30 cpi r25, 0x02 ; 2
|
7e10: 92 30 cpi r25, 0x02 ; 2
|
||||||
7e12: 41 f0 breq .+16 ; 0x7e24 <main+0x20>
|
7e12: 41 f0 breq .+16 ; 0x7e24 <main+0x20>
|
||||||
if (ch & _BV(EXTRF)) {
|
if (WDRF_CLR_REASONS) {
|
||||||
7e14: 81 ff sbrs r24, 1
|
7e14: 81 ff sbrs r24, 1
|
||||||
7e16: 02 c0 rjmp .+4 ; 0x7e1c <main+0x18>
|
7e16: 02 c0 rjmp .+4 ; 0x7e1c <main+0x18>
|
||||||
defined(__AVR_ATmega16__) || defined(__AVR_ATmega162__) || \
|
/*
|
||||||
defined(__AVR_ATmega128__)
|
* Clear WDRF if it was most probably set by wdr in bootloader.
|
||||||
// Fix missing definitions in avr-libc
|
*/
|
||||||
MCUCSR = ~(_BV(WDRF));
|
if ((uint16_t)&MCUSR > 0x1F) {
|
||||||
#else
|
MCUSR = ~(_BV(WDRF)); // optimize to LDI/OUT
|
||||||
MCUSR = ~(_BV(WDRF));
|
|
||||||
7e18: 97 ef ldi r25, 0xF7 ; 247
|
7e18: 97 ef ldi r25, 0xF7 ; 247
|
||||||
7e1a: 94 bf out 0x34, r25 ; 52
|
7e1a: 94 bf out 0x34, r25 ; 52
|
||||||
/*
|
/*
|
||||||
@ -92,11 +91,11 @@ void pre_main(void) {
|
|||||||
// switch off watchdog
|
// switch off watchdog
|
||||||
watchdogConfig(WATCHDOG_OFF);
|
watchdogConfig(WATCHDOG_OFF);
|
||||||
7e1e: 80 e0 ldi r24, 0x00 ; 0
|
7e1e: 80 e0 ldi r24, 0x00 ; 0
|
||||||
7e20: ba d0 rcall .+372 ; 0x7f96 <watchdogConfig>
|
7e20: b6 d0 rcall .+364 ; 0x7f8e <watchdogConfig>
|
||||||
// Note that appstart_vec is defined so that this works with either
|
// Note that appstart_vec is defined so that this works with either
|
||||||
// real or virtual boot partitions.
|
// real or virtual boot partitions.
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
7e22: ee c0 rjmp .+476 ; 0x8000 <optiboot_version+0x2>
|
7e22: ee c0 rjmp .+476 ; 0x8000 <__VERSION_START__+0x2>
|
||||||
#elif defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__)||defined(__AVR_ATtiny85__)
|
#elif defined(__AVR_ATtiny25__)||defined(__AVR_ATtiny45__)||defined(__AVR_ATtiny85__)
|
||||||
TCCR1 = 0x0E; //div 8196 - it's an 8-bit timer.
|
TCCR1 = 0x0E; //div 8196 - it's an 8-bit timer.
|
||||||
#elif defined(__AVR_ATtiny43__)
|
#elif defined(__AVR_ATtiny43__)
|
||||||
@ -104,35 +103,35 @@ void pre_main(void) {
|
|||||||
#else
|
#else
|
||||||
TCCR1B = _BV(CS12) | _BV(CS10); // div 1024
|
TCCR1B = _BV(CS12) | _BV(CS10); // div 1024
|
||||||
7e24: 85 e0 ldi r24, 0x05 ; 5
|
7e24: 85 e0 ldi r24, 0x05 ; 5
|
||||||
7e26: 80 93 81 00 sts 0x0081, r24 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
|
7e26: 80 93 81 00 sts 0x0081, r24 ; 0x800081 <__RAM__+0x81>
|
||||||
LINBTR = (1 << LDISR) | (8 << LBT0);
|
LINBTR = (1 << LDISR) | (8 << LBT0);
|
||||||
LINCR = _BV(LENA) | _BV(LCMD2) | _BV(LCMD1) | _BV(LCMD0);
|
LINCR = _BV(LENA) | _BV(LCMD2) | _BV(LCMD1) | _BV(LCMD0);
|
||||||
LINDAT=0;
|
LINDAT=0;
|
||||||
#else
|
#else
|
||||||
#ifndef SINGLESPEED
|
#if (SINGLESPEED == 0)
|
||||||
UART_SRA = _BV(U2X0); //Double speed mode USART0
|
UART_SRA = _BV(U2X0); //Double speed mode USART0
|
||||||
7e2a: 82 e0 ldi r24, 0x02 ; 2
|
7e2a: 82 e0 ldi r24, 0x02 ; 2
|
||||||
7e2c: 80 93 c0 00 sts 0x00C0, r24 ; 0x8000c0 <__TEXT_REGION_LENGTH__+0x7e00c0>
|
7e2c: 80 93 c0 00 sts 0x00C0, r24 ; 0x8000c0 <__RAM__+0xc0>
|
||||||
#endif
|
#endif
|
||||||
UART_SRB = _BV(RXEN0) | _BV(TXEN0);
|
UART_SRB = _BV(RXEN0) | _BV(TXEN0);
|
||||||
7e30: 88 e1 ldi r24, 0x18 ; 24
|
7e30: 88 e1 ldi r24, 0x18 ; 24
|
||||||
7e32: 80 93 c1 00 sts 0x00C1, r24 ; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
|
7e32: 80 93 c1 00 sts 0x00C1, r24 ; 0x8000c1 <__RAM__+0xc1>
|
||||||
UART_SRC = _BV(UCSZ00) | _BV(UCSZ01);
|
UART_SRC = _BV(UCSZ00) | _BV(UCSZ01);
|
||||||
7e36: 86 e0 ldi r24, 0x06 ; 6
|
7e36: 86 e0 ldi r24, 0x06 ; 6
|
||||||
7e38: 80 93 c2 00 sts 0x00C2, r24 ; 0x8000c2 <__TEXT_REGION_LENGTH__+0x7e00c2>
|
7e38: 80 93 c2 00 sts 0x00C2, r24 ; 0x8000c2 <__RAM__+0xc2>
|
||||||
UART_SRL = (uint8_t)BAUD_SETTING;
|
UART_SRL = (uint8_t)BAUD_SETTING;
|
||||||
7e3c: 80 e1 ldi r24, 0x10 ; 16
|
7e3c: 80 e1 ldi r24, 0x10 ; 16
|
||||||
7e3e: 80 93 c4 00 sts 0x00C4, r24 ; 0x8000c4 <__TEXT_REGION_LENGTH__+0x7e00c4>
|
7e3e: 80 93 c4 00 sts 0x00C4, r24 ; 0x8000c4 <__RAM__+0xc4>
|
||||||
#endif // LIN_UART
|
RS485_PORT &= ~_BV(RS485_BIT);
|
||||||
#endif // mega8/etc
|
#endif
|
||||||
#endif // soft_uart
|
#endif
|
||||||
|
|
||||||
// Set up watchdog to trigger after desired timeout
|
// Set up watchdog to trigger after desired timeout
|
||||||
watchdogConfig(WDTPERIOD);
|
watchdogConfig(WDTPERIOD);
|
||||||
7e42: 8e e0 ldi r24, 0x0E ; 14
|
7e42: 8e e0 ldi r24, 0x0E ; 14
|
||||||
7e44: a8 d0 rcall .+336 ; 0x7f96 <watchdogConfig>
|
7e44: a4 d0 rcall .+328 ; 0x7f8e <watchdogConfig>
|
||||||
|
|
||||||
#if (LED_START_FLASHES > 0) || defined(LED_DATA_FLASH) || defined(LED_START_ON)
|
#if (LED_START_FLASHES > 0) || LED_DATA_FLASH || LED_START_ON
|
||||||
/* Set LED pin as output */
|
/* Set LED pin as output */
|
||||||
LED_DDR |= _BV(LED);
|
LED_DDR |= _BV(LED);
|
||||||
7e46: 25 9a sbi 0x04, 5 ; 4
|
7e46: 25 9a sbi 0x04, 5 ; 4
|
||||||
@ -147,9 +146,14 @@ void pre_main(void) {
|
|||||||
7e4c: 3c ef ldi r19, 0xFC ; 252
|
7e4c: 3c ef ldi r19, 0xFC ; 252
|
||||||
TIFR1 = _BV(TOV1);
|
TIFR1 = _BV(TOV1);
|
||||||
7e4e: 91 e0 ldi r25, 0x01 ; 1
|
7e4e: 91 e0 ldi r25, 0x01 ; 1
|
||||||
|
TIFR = _BV(TOV1);
|
||||||
|
while (!(TIFR & _BV(TOV1)));
|
||||||
|
#elif defined(__AVR_ATtiny43__)
|
||||||
|
#error "LED flash for Tiny43 not yet supported"
|
||||||
|
#else
|
||||||
TCNT1 = -(F_CPU/(1024*16));
|
TCNT1 = -(F_CPU/(1024*16));
|
||||||
7e50: 30 93 85 00 sts 0x0085, r19 ; 0x800085 <__TEXT_REGION_LENGTH__+0x7e0085>
|
7e50: 30 93 85 00 sts 0x0085, r19 ; 0x800085 <__RAM__+0x85>
|
||||||
7e54: 20 93 84 00 sts 0x0084, r18 ; 0x800084 <__TEXT_REGION_LENGTH__+0x7e0084>
|
7e54: 20 93 84 00 sts 0x0084, r18 ; 0x800084 <__RAM__+0x84>
|
||||||
TIFR1 = _BV(TOV1);
|
TIFR1 = _BV(TOV1);
|
||||||
7e58: 96 bb out 0x16, r25 ; 22
|
7e58: 96 bb out 0x16, r25 ; 22
|
||||||
while (!(TIFR1 & _BV(TOV1)));
|
while (!(TIFR1 & _BV(TOV1)));
|
||||||
@ -160,7 +164,7 @@ void pre_main(void) {
|
|||||||
defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__)
|
defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__)
|
||||||
LED_PORT ^= _BV(LED);
|
LED_PORT ^= _BV(LED);
|
||||||
#else
|
#else
|
||||||
LED_PIN |= _BV(LED);
|
LED_PIN |= _BV(LED); // Newer AVRs can toggle by writing PINx
|
||||||
7e5e: 1d 9a sbi 0x03, 5 ; 3
|
7e5e: 1d 9a sbi 0x03, 5 ; 3
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -169,14 +173,29 @@ void pre_main(void) {
|
|||||||
void watchdogReset() {
|
void watchdogReset() {
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
7e60: a8 95 wdr
|
7e60: a8 95 wdr
|
||||||
|
* by the UART hardware, avrdude sends several attempts in rather
|
||||||
|
* quick succession, some of which will be lost and cause us to
|
||||||
|
* get out of sync. So if we see any data; stop blinking.
|
||||||
|
*/
|
||||||
|
#ifndef LIN_UART
|
||||||
if (UART_SRA & _BV(RXC0))
|
if (UART_SRA & _BV(RXC0))
|
||||||
7e62: 40 91 c0 00 lds r20, 0x00C0 ; 0x8000c0 <__TEXT_REGION_LENGTH__+0x7e00c0>
|
7e62: 40 91 c0 00 lds r20, 0x00C0 ; 0x8000c0 <__RAM__+0xc0>
|
||||||
7e66: 47 fd sbrc r20, 7
|
7e66: 47 fd sbrc r20, 7
|
||||||
7e68: 02 c0 rjmp .+4 ; 0x7e6e <main+0x6a>
|
7e68: 02 c0 rjmp .+4 ; 0x7e6e <main+0x6a>
|
||||||
7e6a: 81 50 subi r24, 0x01 ; 1
|
7e6a: 81 50 subi r24, 0x01 ; 1
|
||||||
|
#else
|
||||||
|
// This doesn't seem to work?
|
||||||
|
// if ((UART_PIN & (1<<UART_RX_BIT)) == 0)
|
||||||
|
// break; // detect start bit on soft uart too.
|
||||||
|
#endif
|
||||||
} while (--count);
|
} while (--count);
|
||||||
7e6c: 89 f7 brne .-30 ; 0x7e50 <main+0x4c>
|
7e6c: 89 f7 brne .-30 ; 0x7e50 <main+0x4c>
|
||||||
putch(optiboot_version & 0xFF);
|
|
||||||
|
/*
|
||||||
|
* Copy data from the buffer into the flash write buffer.
|
||||||
|
*/
|
||||||
|
do {
|
||||||
|
__boot_page_fill_short((uint16_t)(void*)addrPtr, *(mybuff.wptr++));
|
||||||
7e6e: ee 24 eor r14, r14
|
7e6e: ee 24 eor r14, r14
|
||||||
7e70: e3 94 inc r14
|
7e70: e3 94 inc r14
|
||||||
} while (len -= 2);
|
} while (len -= 2);
|
||||||
@ -192,282 +211,426 @@ void watchdogReset() {
|
|||||||
// Reenable read access to flash
|
// Reenable read access to flash
|
||||||
__boot_rww_enable_short();
|
__boot_rww_enable_short();
|
||||||
7e76: 21 e1 ldi r18, 0x11 ; 17
|
7e76: 21 e1 ldi r18, 0x11 ; 17
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Forever loop: exits by causing WDT reset */
|
||||||
|
for (;;) {
|
||||||
|
/* get character from UART */
|
||||||
ch = getch();
|
ch = getch();
|
||||||
7e78: c2 2e mov r12, r18
|
7e78: c2 2e mov r12, r18
|
||||||
|
|
||||||
if (ch == STK_GET_PARAMETER) {
|
if (ch == STK_GET_PARAMETER) {
|
||||||
7e7a: 81 d0 rcall .+258 ; 0x7f7e <getch>
|
7e7a: 7d d0 rcall .+250 ; 0x7f76 <getch>
|
||||||
unsigned char which = getch();
|
unsigned char which = getch();
|
||||||
7e7c: 81 34 cpi r24, 0x41 ; 65
|
7e7c: 81 34 cpi r24, 0x41 ; 65
|
||||||
7e7e: 71 f4 brne .+28 ; 0x7e9c <main+0x98>
|
7e7e: 51 f4 brne .+20 ; 0x7e94 <main+0x90>
|
||||||
7e80: 7e d0 rcall .+252 ; 0x7f7e <getch>
|
7e80: 7a d0 rcall .+244 ; 0x7f76 <getch>
|
||||||
verifySpace();
|
verifySpace();
|
||||||
7e82: 18 2f mov r17, r24
|
7e82: 18 2f mov r17, r24
|
||||||
7e84: 8e d0 rcall .+284 ; 0x7fa2 <verifySpace>
|
7e84: 8a d0 rcall .+276 ; 0x7f9a <verifySpace>
|
||||||
|
* Send optiboot version as "SW version"
|
||||||
|
* Note that the references to memory are optimized away.
|
||||||
|
*/
|
||||||
if (which == STK_SW_MINOR) {
|
if (which == STK_SW_MINOR) {
|
||||||
7e86: 12 38 cpi r17, 0x82 ; 130
|
|
||||||
7e88: 11 f4 brne .+4 ; 0x7e8e <main+0x8a>
|
|
||||||
putch(optiboot_version & 0xFF);
|
putch(optiboot_version & 0xFF);
|
||||||
7e8a: 81 e0 ldi r24, 0x01 ; 1
|
|
||||||
7e8c: 05 c0 rjmp .+10 ; 0x7e98 <main+0x94>
|
|
||||||
} else if (which == STK_SW_MAJOR) {
|
} else if (which == STK_SW_MAJOR) {
|
||||||
7e8e: 11 38 cpi r17, 0x81 ; 129
|
7e86: 11 38 cpi r17, 0x81 ; 129
|
||||||
|
/*
|
||||||
|
* Send optiboot version as "SW version"
|
||||||
|
* Note that the references to memory are optimized away.
|
||||||
|
*/
|
||||||
|
if (which == STK_SW_MINOR) {
|
||||||
|
putch(optiboot_version & 0xFF);
|
||||||
|
7e88: 11 f0 breq .+4 ; 0x7e8e <main+0x8a>
|
||||||
|
7e8a: 83 e0 ldi r24, 0x03 ; 3
|
||||||
|
} else if (which == STK_SW_MAJOR) {
|
||||||
putch(optiboot_version >> 8);
|
putch(optiboot_version >> 8);
|
||||||
7e90: 11 f4 brne .+4 ; 0x7e96 <main+0x92>
|
7e8c: 01 c0 rjmp .+2 ; 0x7e90 <main+0x8c>
|
||||||
7e92: 88 e0 ldi r24, 0x08 ; 8
|
7e8e: 88 e0 ldi r24, 0x08 ; 8
|
||||||
|
7e90: 6b d0 rcall .+214 ; 0x7f68 <putch>
|
||||||
|
7e92: 67 c0 rjmp .+206 ; 0x7f62 <main+0x15e>
|
||||||
|
* other parameters - enough to keep Avrdude happy
|
||||||
|
*/
|
||||||
putch(0x03);
|
putch(0x03);
|
||||||
7e94: 01 c0 rjmp .+2 ; 0x7e98 <main+0x94>
|
}
|
||||||
7e96: 83 e0 ldi r24, 0x03 ; 3
|
}
|
||||||
7e98: 6b d0 rcall .+214 ; 0x7f70 <putch>
|
|
||||||
7e9a: 67 c0 rjmp .+206 ; 0x7f6a <main+0x166>
|
|
||||||
else if (ch == STK_SET_DEVICE) {
|
else if (ch == STK_SET_DEVICE) {
|
||||||
7e9c: 82 34 cpi r24, 0x42 ; 66
|
7e94: 82 34 cpi r24, 0x42 ; 66
|
||||||
|
// SET DEVICE is ignored
|
||||||
getNch(20);
|
getNch(20);
|
||||||
7e9e: 11 f4 brne .+4 ; 0x7ea4 <main+0xa0>
|
7e96: 11 f4 brne .+4 ; 0x7e9c <main+0x98>
|
||||||
7ea0: 84 e1 ldi r24, 0x14 ; 20
|
7e98: 84 e1 ldi r24, 0x14 ; 20
|
||||||
|
}
|
||||||
else if (ch == STK_SET_DEVICE_EXT) {
|
else if (ch == STK_SET_DEVICE_EXT) {
|
||||||
7ea2: 03 c0 rjmp .+6 ; 0x7eaa <main+0xa6>
|
7e9a: 03 c0 rjmp .+6 ; 0x7ea2 <main+0x9e>
|
||||||
|
// SET DEVICE EXT is ignored
|
||||||
getNch(5);
|
getNch(5);
|
||||||
7ea4: 85 34 cpi r24, 0x45 ; 69
|
7e9c: 85 34 cpi r24, 0x45 ; 69
|
||||||
7ea6: 19 f4 brne .+6 ; 0x7eae <main+0xaa>
|
7e9e: 19 f4 brne .+6 ; 0x7ea6 <main+0xa2>
|
||||||
7ea8: 85 e0 ldi r24, 0x05 ; 5
|
7ea0: 85 e0 ldi r24, 0x05 ; 5
|
||||||
|
}
|
||||||
else if (ch == STK_LOAD_ADDRESS) {
|
else if (ch == STK_LOAD_ADDRESS) {
|
||||||
7eaa: 83 d0 rcall .+262 ; 0x7fb2 <getNch>
|
7ea2: 83 d0 rcall .+262 ; 0x7faa <getNch>
|
||||||
7eac: 5e c0 rjmp .+188 ; 0x7f6a <main+0x166>
|
7ea4: 5e c0 rjmp .+188 ; 0x7f62 <main+0x15e>
|
||||||
|
// LOAD ADDRESS
|
||||||
address.bytes[0] = getch();
|
address.bytes[0] = getch();
|
||||||
7eae: 85 35 cpi r24, 0x55 ; 85
|
7ea6: 85 35 cpi r24, 0x55 ; 85
|
||||||
7eb0: 39 f4 brne .+14 ; 0x7ec0 <main+0xbc>
|
7ea8: 39 f4 brne .+14 ; 0x7eb8 <main+0xb4>
|
||||||
7eb2: 65 d0 rcall .+202 ; 0x7f7e <getch>
|
7eaa: 65 d0 rcall .+202 ; 0x7f76 <getch>
|
||||||
address.bytes[1] = getch();
|
address.bytes[1] = getch();
|
||||||
7eb4: c8 2f mov r28, r24
|
7eac: c8 2f mov r28, r24
|
||||||
7eb6: 63 d0 rcall .+198 ; 0x7f7e <getch>
|
7eae: 63 d0 rcall .+198 ; 0x7f76 <getch>
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
RAMPZ &= 0xFE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
address.word *= 2; // Convert from word address to byte address
|
address.word *= 2; // Convert from word address to byte address
|
||||||
7eb8: d8 2f mov r29, r24
|
7eb0: d8 2f mov r29, r24
|
||||||
7eba: cc 0f add r28, r28
|
7eb2: cc 0f add r28, r28
|
||||||
7ebc: dd 1f adc r29, r29
|
7eb4: dd 1f adc r29, r29
|
||||||
|
verifySpace();
|
||||||
|
}
|
||||||
else if (ch == STK_UNIVERSAL) {
|
else if (ch == STK_UNIVERSAL) {
|
||||||
7ebe: 54 c0 rjmp .+168 ; 0x7f68 <main+0x164>
|
7eb6: 54 c0 rjmp .+168 ; 0x7f60 <main+0x15c>
|
||||||
getNch(4);
|
getNch(3);
|
||||||
7ec0: 86 35 cpi r24, 0x56 ; 86
|
|
||||||
7ec2: 21 f4 brne .+8 ; 0x7ecc <main+0xc8>
|
|
||||||
putch(0x00);
|
putch(0x00);
|
||||||
7ec4: 84 e0 ldi r24, 0x04 ; 4
|
}
|
||||||
7ec6: 75 d0 rcall .+234 ; 0x7fb2 <getNch>
|
#else
|
||||||
|
// UNIVERSAL command is ignored
|
||||||
|
getNch(4);
|
||||||
|
7eb8: 86 35 cpi r24, 0x56 ; 86
|
||||||
|
7eba: 21 f4 brne .+8 ; 0x7ec4 <main+0xc0>
|
||||||
|
putch(0x00);
|
||||||
|
7ebc: 84 e0 ldi r24, 0x04 ; 4
|
||||||
|
7ebe: 75 d0 rcall .+234 ; 0x7faa <getNch>
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
/* Write memory, length is big endian and is in bytes */
|
||||||
else if (ch == STK_PROG_PAGE) {
|
else if (ch == STK_PROG_PAGE) {
|
||||||
7ec8: 80 e0 ldi r24, 0x00 ; 0
|
7ec0: 80 e0 ldi r24, 0x00 ; 0
|
||||||
7eca: e6 cf rjmp .-52 ; 0x7e98 <main+0x94>
|
7ec2: e6 cf rjmp .-52 ; 0x7e90 <main+0x8c>
|
||||||
|
// PROGRAM PAGE - we support flash programming only, not EEPROM
|
||||||
|
uint8_t desttype;
|
||||||
|
uint8_t *bufPtr;
|
||||||
|
pagelen_t savelength;
|
||||||
|
|
||||||
GETLENGTH(length);
|
GETLENGTH(length);
|
||||||
7ecc: 84 36 cpi r24, 0x64 ; 100
|
7ec4: 84 36 cpi r24, 0x64 ; 100
|
||||||
7ece: 09 f0 breq .+2 ; 0x7ed2 <main+0xce>
|
7ec6: 09 f0 breq .+2 ; 0x7eca <main+0xc6>
|
||||||
7ed0: 2e c0 rjmp .+92 ; 0x7f2e <main+0x12a>
|
7ec8: 2e c0 rjmp .+92 ; 0x7f26 <main+0x122>
|
||||||
7ed2: 55 d0 rcall .+170 ; 0x7f7e <getch>
|
7eca: 55 d0 rcall .+170 ; 0x7f76 <getch>
|
||||||
|
savelength = length;
|
||||||
desttype = getch();
|
desttype = getch();
|
||||||
7ed4: 54 d0 rcall .+168 ; 0x7f7e <getch>
|
7ecc: 54 d0 rcall .+168 ; 0x7f76 <getch>
|
||||||
7ed6: f8 2e mov r15, r24
|
7ece: f8 2e mov r15, r24
|
||||||
7ed8: 52 d0 rcall .+164 ; 0x7f7e <getch>
|
7ed0: 52 d0 rcall .+164 ; 0x7f76 <getch>
|
||||||
7eda: b8 2e mov r11, r24
|
7ed2: b8 2e mov r11, r24
|
||||||
7edc: 00 e0 ldi r16, 0x00 ; 0
|
7ed4: 00 e0 ldi r16, 0x00 ; 0
|
||||||
|
|
||||||
|
// read a page worth of contents
|
||||||
|
bufPtr = buff.bptr;
|
||||||
do *bufPtr++ = getch();
|
do *bufPtr++ = getch();
|
||||||
7ede: 11 e0 ldi r17, 0x01 ; 1
|
7ed6: 11 e0 ldi r17, 0x01 ; 1
|
||||||
7ee0: 4e d0 rcall .+156 ; 0x7f7e <getch>
|
7ed8: 4e d0 rcall .+156 ; 0x7f76 <getch>
|
||||||
7ee2: f8 01 movw r30, r16
|
7eda: f8 01 movw r30, r16
|
||||||
7ee4: 81 93 st Z+, r24
|
7edc: 81 93 st Z+, r24
|
||||||
7ee6: 8f 01 movw r16, r30
|
7ede: 8f 01 movw r16, r30
|
||||||
while (--length);
|
while (--length);
|
||||||
7ee8: fe 12 cpse r15, r30
|
7ee0: fe 12 cpse r15, r30
|
||||||
7eea: fa cf rjmp .-12 ; 0x7ee0 <main+0xdc>
|
7ee2: fa cf rjmp .-12 ; 0x7ed8 <main+0xd4>
|
||||||
|
|
||||||
|
// Read command terminator, start reply
|
||||||
verifySpace();
|
verifySpace();
|
||||||
7eec: 5a d0 rcall .+180 ; 0x7fa2 <verifySpace>
|
7ee4: 5a d0 rcall .+180 ; 0x7f9a <verifySpace>
|
||||||
7eee: f5 e4 ldi r31, 0x45 ; 69
|
7ee6: f5 e4 ldi r31, 0x45 ; 69
|
||||||
|
* void writebuffer(memtype, buffer, address, length)
|
||||||
|
*/
|
||||||
|
static inline void writebuffer(int8_t memtype, addr16_t mybuff,
|
||||||
|
addr16_t address, pagelen_t len)
|
||||||
|
{
|
||||||
switch (memtype) {
|
switch (memtype) {
|
||||||
7ef0: bf 12 cpse r11, r31
|
7ee8: bf 12 cpse r11, r31
|
||||||
7ef2: 01 c0 rjmp .+2 ; 0x7ef6 <main+0xf2>
|
7eea: 01 c0 rjmp .+2 ; 0x7eee <main+0xea>
|
||||||
7ef4: ff cf rjmp .-2 ; 0x7ef4 <main+0xf0>
|
7eec: ff cf rjmp .-2 ; 0x7eec <main+0xe8>
|
||||||
7ef6: 83 e0 ldi r24, 0x03 ; 3
|
7eee: 83 e0 ldi r24, 0x03 ; 3
|
||||||
|
* and we needed the space back.
|
||||||
|
*/
|
||||||
|
#ifdef FOURPAGEERASE
|
||||||
|
if ((address.bytes[0] & ((SPM_PAGESIZE<<2)-1))==0) {
|
||||||
|
#endif
|
||||||
__boot_page_erase_short(address.word);
|
__boot_page_erase_short(address.word);
|
||||||
7ef8: fe 01 movw r30, r28
|
7ef0: fe 01 movw r30, r28
|
||||||
7efa: 87 bf out 0x37, r24 ; 55
|
7ef2: 87 bf out 0x37, r24 ; 55
|
||||||
7efc: e8 95 spm
|
7ef4: e8 95 spm
|
||||||
7efe: 07 b6 in r0, 0x37 ; 55
|
7ef6: 07 b6 in r0, 0x37 ; 55
|
||||||
boot_spm_busy_wait();
|
boot_spm_busy_wait();
|
||||||
7f00: 00 fc sbrc r0, 0
|
7ef8: 00 fc sbrc r0, 0
|
||||||
7f02: fd cf rjmp .-6 ; 0x7efe <main+0xfa>
|
7efa: fd cf rjmp .-6 ; 0x7ef6 <main+0xf2>
|
||||||
7f04: a0 e0 ldi r26, 0x00 ; 0
|
7efc: a0 e0 ldi r26, 0x00 ; 0
|
||||||
7f06: b1 e0 ldi r27, 0x01 ; 1
|
7efe: b1 e0 ldi r27, 0x01 ; 1
|
||||||
7f08: fe 01 movw r30, r28
|
7f00: fe 01 movw r30, r28
|
||||||
7f0a: 8d 91 ld r24, X+
|
7f02: 8d 91 ld r24, X+
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copy data from the buffer into the flash write buffer.
|
||||||
|
*/
|
||||||
|
do {
|
||||||
__boot_page_fill_short((uint16_t)(void*)addrPtr, *(mybuff.wptr++));
|
__boot_page_fill_short((uint16_t)(void*)addrPtr, *(mybuff.wptr++));
|
||||||
7f0c: 9d 91 ld r25, X+
|
7f04: 9d 91 ld r25, X+
|
||||||
7f0e: 0c 01 movw r0, r24
|
7f06: 0c 01 movw r0, r24
|
||||||
7f10: e7 be out 0x37, r14 ; 55
|
7f08: e7 be out 0x37, r14 ; 55
|
||||||
7f12: e8 95 spm
|
7f0a: e8 95 spm
|
||||||
7f14: 11 24 eor r1, r1
|
7f0c: 11 24 eor r1, r1
|
||||||
7f16: 32 96 adiw r30, 0x02 ; 2
|
7f0e: 32 96 adiw r30, 0x02 ; 2
|
||||||
|
addrPtr += 2;
|
||||||
} while (len -= 2);
|
} while (len -= 2);
|
||||||
7f18: fa 12 cpse r15, r26
|
7f10: fa 12 cpse r15, r26
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Actually Write the buffer to flash (and wait for it to finish.)
|
||||||
|
*/
|
||||||
__boot_page_write_short(address.word);
|
__boot_page_write_short(address.word);
|
||||||
7f1a: f7 cf rjmp .-18 ; 0x7f0a <main+0x106>
|
7f12: f7 cf rjmp .-18 ; 0x7f02 <main+0xfe>
|
||||||
7f1c: fe 01 movw r30, r28
|
7f14: fe 01 movw r30, r28
|
||||||
boot_spm_busy_wait();
|
boot_spm_busy_wait();
|
||||||
7f1e: d7 be out 0x37, r13 ; 55
|
7f16: d7 be out 0x37, r13 ; 55
|
||||||
7f20: e8 95 spm
|
7f18: e8 95 spm
|
||||||
|
#if defined(RWWSRE)
|
||||||
|
// Reenable read access to flash
|
||||||
__boot_rww_enable_short();
|
__boot_rww_enable_short();
|
||||||
7f22: 07 b6 in r0, 0x37 ; 55
|
7f1a: 07 b6 in r0, 0x37 ; 55
|
||||||
7f24: 00 fc sbrc r0, 0
|
7f1c: 00 fc sbrc r0, 0
|
||||||
7f26: fd cf rjmp .-6 ; 0x7f22 <main+0x11e>
|
7f1e: fd cf rjmp .-6 ; 0x7f1a <main+0x116>
|
||||||
|
writebuffer(desttype, buff, address, savelength);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
/* Read memory block mode, length is big endian. */
|
||||||
else if (ch == STK_READ_PAGE) {
|
else if (ch == STK_READ_PAGE) {
|
||||||
7f28: c7 be out 0x37, r12 ; 55
|
7f20: c7 be out 0x37, r12 ; 55
|
||||||
7f2a: e8 95 spm
|
7f22: e8 95 spm
|
||||||
|
uint8_t desttype;
|
||||||
GETLENGTH(length);
|
GETLENGTH(length);
|
||||||
7f2c: 1e c0 rjmp .+60 ; 0x7f6a <main+0x166>
|
7f24: 1e c0 rjmp .+60 ; 0x7f62 <main+0x15e>
|
||||||
7f2e: 84 37 cpi r24, 0x74 ; 116
|
7f26: 84 37 cpi r24, 0x74 ; 116
|
||||||
7f30: 71 f4 brne .+28 ; 0x7f4e <main+0x14a>
|
7f28: 71 f4 brne .+28 ; 0x7f46 <main+0x142>
|
||||||
|
|
||||||
desttype = getch();
|
desttype = getch();
|
||||||
7f32: 25 d0 rcall .+74 ; 0x7f7e <getch>
|
7f2a: 25 d0 rcall .+74 ; 0x7f76 <getch>
|
||||||
|
|
||||||
verifySpace();
|
verifySpace();
|
||||||
7f34: 24 d0 rcall .+72 ; 0x7f7e <getch>
|
7f2c: 24 d0 rcall .+72 ; 0x7f76 <getch>
|
||||||
7f36: f8 2e mov r15, r24
|
7f2e: f8 2e mov r15, r24
|
||||||
7f38: 22 d0 rcall .+68 ; 0x7f7e <getch>
|
7f30: 22 d0 rcall .+68 ; 0x7f76 <getch>
|
||||||
// while (--length);
|
// while (--length);
|
||||||
// read a Flash and increment the address (may increment RAMPZ)
|
// read a Flash and increment the address (may increment RAMPZ)
|
||||||
__asm__ (" elpm %0,Z+\n" : "=r" (ch), "=z" (address.bptr): "1" (address));
|
__asm__ (" elpm %0,Z+\n" : "=r" (ch), "=z" (address.bptr): "1" (address));
|
||||||
#else
|
#else
|
||||||
// read a Flash byte and increment the address
|
// read a Flash byte and increment the address
|
||||||
__asm__ (" lpm %0,Z+\n" : "=r" (ch), "=z" (address.bptr): "1" (address));
|
__asm__ (" lpm %0,Z+\n" : "=r" (ch), "=z" (address.bptr): "1" (address));
|
||||||
7f3a: 33 d0 rcall .+102 ; 0x7fa2 <verifySpace>
|
7f32: 33 d0 rcall .+102 ; 0x7f9a <verifySpace>
|
||||||
7f3c: 8e 01 movw r16, r28
|
7f34: 8e 01 movw r16, r28
|
||||||
#endif
|
#endif
|
||||||
putch(ch);
|
putch(ch);
|
||||||
7f3e: f8 01 movw r30, r16
|
7f36: f8 01 movw r30, r16
|
||||||
} while (--length);
|
} while (--length);
|
||||||
7f40: 85 91 lpm r24, Z+
|
7f38: 85 91 lpm r24, Z+
|
||||||
7f42: 8f 01 movw r16, r30
|
7f3a: 8f 01 movw r16, r30
|
||||||
7f44: 15 d0 rcall .+42 ; 0x7f70 <putch>
|
7f3c: 15 d0 rcall .+42 ; 0x7f68 <putch>
|
||||||
7f46: fa 94 dec r15
|
7f3e: fa 94 dec r15
|
||||||
|
|
||||||
|
read_mem(desttype, address, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get device signature bytes */
|
||||||
else if (ch == STK_READ_SIGN) {
|
else if (ch == STK_READ_SIGN) {
|
||||||
7f48: f1 10 cpse r15, r1
|
7f40: f1 10 cpse r15, r1
|
||||||
7f4a: f9 cf rjmp .-14 ; 0x7f3e <main+0x13a>
|
7f42: f9 cf rjmp .-14 ; 0x7f36 <main+0x132>
|
||||||
|
// READ SIGN - return what Avrdude wants to hear
|
||||||
verifySpace();
|
verifySpace();
|
||||||
7f4c: 0e c0 rjmp .+28 ; 0x7f6a <main+0x166>
|
7f44: 0e c0 rjmp .+28 ; 0x7f62 <main+0x15e>
|
||||||
7f4e: 85 37 cpi r24, 0x75 ; 117
|
7f46: 85 37 cpi r24, 0x75 ; 117
|
||||||
putch(SIGNATURE_0);
|
putch(SIGNATURE_0);
|
||||||
7f50: 39 f4 brne .+14 ; 0x7f60 <main+0x15c>
|
7f48: 39 f4 brne .+14 ; 0x7f58 <main+0x154>
|
||||||
7f52: 27 d0 rcall .+78 ; 0x7fa2 <verifySpace>
|
7f4a: 27 d0 rcall .+78 ; 0x7f9a <verifySpace>
|
||||||
7f54: 8e e1 ldi r24, 0x1E ; 30
|
7f4c: 8e e1 ldi r24, 0x1E ; 30
|
||||||
putch(SIGNATURE_1);
|
putch(SIGNATURE_1);
|
||||||
7f56: 0c d0 rcall .+24 ; 0x7f70 <putch>
|
7f4e: 0c d0 rcall .+24 ; 0x7f68 <putch>
|
||||||
7f58: 85 e9 ldi r24, 0x95 ; 149
|
7f50: 85 e9 ldi r24, 0x95 ; 149
|
||||||
7f5a: 0a d0 rcall .+20 ; 0x7f70 <putch>
|
7f52: 0a d0 rcall .+20 ; 0x7f68 <putch>
|
||||||
putch(SIGNATURE_2);
|
putch(SIGNATURE_2);
|
||||||
7f5c: 8f e0 ldi r24, 0x0F ; 15
|
7f54: 8f e0 ldi r24, 0x0F ; 15
|
||||||
7f5e: 9c cf rjmp .-200 ; 0x7e98 <main+0x94>
|
7f56: 9c cf rjmp .-200 ; 0x7e90 <main+0x8c>
|
||||||
|
}
|
||||||
else if (ch == STK_LEAVE_PROGMODE) { /* 'Q' */
|
else if (ch == STK_LEAVE_PROGMODE) { /* 'Q' */
|
||||||
7f60: 81 35 cpi r24, 0x51 ; 81
|
7f58: 81 35 cpi r24, 0x51 ; 81
|
||||||
7f62: 11 f4 brne .+4 ; 0x7f68 <main+0x164>
|
7f5a: 11 f4 brne .+4 ; 0x7f60 <main+0x15c>
|
||||||
|
// Adaboot no-wait mod
|
||||||
watchdogConfig(WATCHDOG_16MS);
|
watchdogConfig(WATCHDOG_16MS);
|
||||||
7f64: 88 e0 ldi r24, 0x08 ; 8
|
7f5c: 88 e0 ldi r24, 0x08 ; 8
|
||||||
7f66: 17 d0 rcall .+46 ; 0x7f96 <watchdogConfig>
|
7f5e: 17 d0 rcall .+46 ; 0x7f8e <watchdogConfig>
|
||||||
7f68: 1c d0 rcall .+56 ; 0x7fa2 <verifySpace>
|
7f60: 1c d0 rcall .+56 ; 0x7f9a <verifySpace>
|
||||||
verifySpace();
|
verifySpace();
|
||||||
7f6a: 80 e1 ldi r24, 0x10 ; 16
|
}
|
||||||
7f6c: 01 d0 rcall .+2 ; 0x7f70 <putch>
|
else {
|
||||||
|
// This covers the response to commands like STK_ENTER_PROGMODE
|
||||||
|
verifySpace();
|
||||||
|
7f62: 80 e1 ldi r24, 0x10 ; 16
|
||||||
|
7f64: 01 d0 rcall .+2 ; 0x7f68 <putch>
|
||||||
|
}
|
||||||
putch(STK_OK);
|
putch(STK_OK);
|
||||||
7f6e: 85 cf rjmp .-246 ; 0x7e7a <main+0x76>
|
7f66: 89 cf rjmp .-238 ; 0x7e7a <main+0x76>
|
||||||
|
|
||||||
00007f70 <putch>:
|
00007f68 <putch>:
|
||||||
7f70: 90 91 c0 00 lds r25, 0x00C0 ; 0x8000c0 <__TEXT_REGION_LENGTH__+0x7e00c0>
|
7f68: 90 91 c0 00 lds r25, 0x00C0 ; 0x8000c0 <__RAM__+0xc0>
|
||||||
}
|
}
|
||||||
7f74: 95 ff sbrs r25, 5
|
7f6c: 95 ff sbrs r25, 5
|
||||||
|
RS485_PORT |= _BV(RS485_BIT);
|
||||||
|
# else
|
||||||
|
RS485_PORT &= ~_BV(RS485_BIT);
|
||||||
|
# endif
|
||||||
|
#else //not RS485
|
||||||
while (!(UART_SRA & _BV(UDRE0))) { /* Spin */ }
|
while (!(UART_SRA & _BV(UDRE0))) { /* Spin */ }
|
||||||
7f76: fc cf rjmp .-8 ; 0x7f70 <putch>
|
7f6e: fc cf rjmp .-8 ; 0x7f68 <putch>
|
||||||
UART_UDR = ch;
|
UART_UDR = ch;
|
||||||
7f78: 80 93 c6 00 sts 0x00C6, r24 ; 0x8000c6 <__TEXT_REGION_LENGTH__+0x7e00c6>
|
7f70: 80 93 c6 00 sts 0x00C6, r24 ; 0x8000c6 <__RAM__+0xc6>
|
||||||
7f7c: 08 95 ret
|
7f74: 08 95 ret
|
||||||
|
|
||||||
00007f7e <getch>:
|
00007f76 <getch>:
|
||||||
|
:
|
||||||
|
"r25"
|
||||||
|
);
|
||||||
|
#else
|
||||||
|
#ifndef LIN_UART
|
||||||
while (!(UART_SRA & _BV(RXC0))) { /* Spin */ }
|
while (!(UART_SRA & _BV(RXC0))) { /* Spin */ }
|
||||||
7f7e: 80 91 c0 00 lds r24, 0x00C0 ; 0x8000c0 <__TEXT_REGION_LENGTH__+0x7e00c0>
|
7f76: 80 91 c0 00 lds r24, 0x00C0 ; 0x8000c0 <__RAM__+0xc0>
|
||||||
7f82: 87 ff sbrs r24, 7
|
7f7a: 87 ff sbrs r24, 7
|
||||||
7f84: fc cf rjmp .-8 ; 0x7f7e <getch>
|
7f7c: fc cf rjmp .-8 ; 0x7f76 <getch>
|
||||||
if (!(UART_SRA & _BV(FE0))) {
|
if (!(UART_SRA & _BV(FE0))) {
|
||||||
7f86: 80 91 c0 00 lds r24, 0x00C0 ; 0x8000c0 <__TEXT_REGION_LENGTH__+0x7e00c0>
|
7f7e: 80 91 c0 00 lds r24, 0x00C0 ; 0x8000c0 <__RAM__+0xc0>
|
||||||
7f8a: 84 fd sbrc r24, 4
|
7f82: 84 fd sbrc r24, 4
|
||||||
7f8c: 01 c0 rjmp .+2 ; 0x7f90 <getch+0x12>
|
7f84: 01 c0 rjmp .+2 ; 0x7f88 <getch+0x12>
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Watchdog functions. These are only safe with interrupts turned off.
|
||||||
|
void watchdogReset() {
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
7f8e: a8 95 wdr
|
7f86: a8 95 wdr
|
||||||
|
while (!(LINSIR & _BV(LRXOK))) { /* Spin */ }
|
||||||
|
if (!(LINSIR & _BV(LFERR))) {
|
||||||
|
watchdogReset(); /* Eventually abort if wrong speed */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
ch = UART_UDR;
|
ch = UART_UDR;
|
||||||
7f90: 80 91 c6 00 lds r24, 0x00C6 ; 0x8000c6 <__TEXT_REGION_LENGTH__+0x7e00c6>
|
7f88: 80 91 c6 00 lds r24, 0x00C6 ; 0x8000c6 <__RAM__+0xc6>
|
||||||
}
|
#if LED_DATA_FLASH
|
||||||
7f94: 08 95 ret
|
toggle_led();
|
||||||
|
#endif
|
||||||
|
|
||||||
00007f96 <watchdogConfig>:
|
return ch;
|
||||||
|
}
|
||||||
|
7f8c: 08 95 ret
|
||||||
|
|
||||||
|
00007f8e <watchdogConfig>:
|
||||||
|
}
|
||||||
|
|
||||||
|
void watchdogConfig(uint8_t x) {
|
||||||
|
#ifdef WDCE //does it have a Watchdog Change Enable?
|
||||||
|
#ifdef WDTCSR
|
||||||
WDTCSR = _BV(WDCE) | _BV(WDE);
|
WDTCSR = _BV(WDCE) | _BV(WDE);
|
||||||
7f96: e0 e6 ldi r30, 0x60 ; 96
|
7f8e: e0 e6 ldi r30, 0x60 ; 96
|
||||||
7f98: f0 e0 ldi r31, 0x00 ; 0
|
7f90: f0 e0 ldi r31, 0x00 ; 0
|
||||||
7f9a: 98 e1 ldi r25, 0x18 ; 24
|
7f92: 98 e1 ldi r25, 0x18 ; 24
|
||||||
7f9c: 90 83 st Z, r25
|
7f94: 90 83 st Z, r25
|
||||||
|
#else //then it must be one of those newfangled ones that use CCP
|
||||||
|
CCP=0xD8; //so write this magic number to CCP
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WDTCSR
|
||||||
WDTCSR = x;
|
WDTCSR = x;
|
||||||
7f9e: 80 83 st Z, r24
|
7f96: 80 83 st Z, r24
|
||||||
7fa0: 08 95 ret
|
7f98: 08 95 ret
|
||||||
|
|
||||||
00007fa2 <verifySpace>:
|
00007f9a <verifySpace>:
|
||||||
if (getch() != CRC_EOP) {
|
|
||||||
7fa2: ed df rcall .-38 ; 0x7f7e <getch>
|
|
||||||
7fa4: 80 32 cpi r24, 0x20 ; 32
|
|
||||||
7fa6: 19 f0 breq .+6 ; 0x7fae <verifySpace+0xc>
|
|
||||||
watchdogConfig(WATCHDOG_16MS); // shorten WD timeout
|
|
||||||
7fa8: 88 e0 ldi r24, 0x08 ; 8
|
|
||||||
7faa: f5 df rcall .-22 ; 0x7f96 <watchdogConfig>
|
|
||||||
7fac: ff cf rjmp .-2 ; 0x7fac <verifySpace+0xa>
|
|
||||||
putch(STK_INSYNC);
|
|
||||||
7fae: 84 e1 ldi r24, 0x14 ; 20
|
|
||||||
7fb0: df cf rjmp .-66 ; 0x7f70 <putch>
|
|
||||||
|
|
||||||
00007fb2 <getNch>:
|
|
||||||
void getNch(uint8_t count) {
|
|
||||||
7fb2: cf 93 push r28
|
|
||||||
7fb4: c8 2f mov r28, r24
|
|
||||||
do getch(); while (--count);
|
do getch(); while (--count);
|
||||||
7fb6: e3 df rcall .-58 ; 0x7f7e <getch>
|
|
||||||
7fb8: c1 50 subi r28, 0x01 ; 1
|
|
||||||
7fba: e9 f7 brne .-6 ; 0x7fb6 <getNch+0x4>
|
|
||||||
}
|
|
||||||
7fbc: cf 91 pop r28
|
|
||||||
verifySpace();
|
verifySpace();
|
||||||
7fbe: f1 cf rjmp .-30 ; 0x7fa2 <verifySpace>
|
}
|
||||||
|
|
||||||
00007fc0 <do_spm>:
|
void verifySpace() {
|
||||||
7fc0: fc 01 movw r30, r24
|
if (getch() != CRC_EOP) {
|
||||||
|
7f9a: ed df rcall .-38 ; 0x7f76 <getch>
|
||||||
|
7f9c: 80 32 cpi r24, 0x20 ; 32
|
||||||
|
7f9e: 19 f0 breq .+6 ; 0x7fa6 <verifySpace+0xc>
|
||||||
|
watchdogConfig(WATCHDOG_16MS); // shorten WD timeout
|
||||||
|
7fa0: 88 e0 ldi r24, 0x08 ; 8
|
||||||
|
7fa2: f5 df rcall .-22 ; 0x7f8e <watchdogConfig>
|
||||||
|
7fa4: ff cf rjmp .-2 ; 0x7fa4 <verifySpace+0xa>
|
||||||
|
while (1) // and busy-loop so that WD causes
|
||||||
|
; // a reset and app start.
|
||||||
|
}
|
||||||
|
putch(STK_INSYNC);
|
||||||
|
7fa6: 84 e1 ldi r24, 0x14 ; 20
|
||||||
|
7fa8: df cf rjmp .-66 ; 0x7f68 <putch>
|
||||||
|
|
||||||
|
00007faa <getNch>:
|
||||||
|
::[count] "M" (UART_B_VALUE)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void getNch(uint8_t count) {
|
||||||
|
7faa: cf 93 push r28
|
||||||
|
7fac: c8 2f mov r28, r24
|
||||||
|
do getch(); while (--count);
|
||||||
|
7fae: e3 df rcall .-58 ; 0x7f76 <getch>
|
||||||
|
7fb0: c1 50 subi r28, 0x01 ; 1
|
||||||
|
7fb2: e9 f7 brne .-6 ; 0x7fae <getNch+0x4>
|
||||||
|
verifySpace();
|
||||||
|
}
|
||||||
|
7fb4: cf 91 pop r28
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void getNch(uint8_t count) {
|
||||||
|
do getch(); while (--count);
|
||||||
|
verifySpace();
|
||||||
|
7fb6: f1 cf rjmp .-30 ; 0x7f9a <verifySpace>
|
||||||
|
|
||||||
|
00007fb8 <do_spm>:
|
||||||
|
7fb8: fc 01 movw r30, r24
|
||||||
* data=0 in WRITE
|
* data=0 in WRITE
|
||||||
*/
|
*/
|
||||||
static void do_spm(uint16_t address, uint8_t command, uint16_t data) __attribute__ ((used));
|
static void do_spm(uint16_t address, uint8_t command, uint16_t data) __attribute__ ((used));
|
||||||
static void do_spm(uint16_t address, uint8_t command, uint16_t data) {
|
static void do_spm(uint16_t address, uint8_t command, uint16_t data) {
|
||||||
// Do spm stuff
|
// Do spm stuff
|
||||||
asm volatile (
|
asm volatile (
|
||||||
7fc2: 0a 01 movw r0, r20
|
7fba: 0a 01 movw r0, r20
|
||||||
7fc4: 67 bf out 0x37, r22 ; 55
|
7fbc: 67 bf out 0x37, r22 ; 55
|
||||||
7fc6: e8 95 spm
|
7fbe: e8 95 spm
|
||||||
7fc8: 11 24 eor r1, r1
|
7fc0: 11 24 eor r1, r1
|
||||||
7fca: 07 b6 in r0, 0x37 ; 55
|
7fc2: 07 b6 in r0, 0x37 ; 55
|
||||||
);
|
);
|
||||||
|
|
||||||
// wait for spm to complete
|
// wait for spm to complete
|
||||||
// it doesn't have much sense for __BOOT_PAGE_FILL,
|
// it doesn't have much sense for __BOOT_PAGE_FILL,
|
||||||
// but it doesn't hurt and saves some bytes on 'if'
|
// but it doesn't hurt and saves some bytes on 'if'
|
||||||
boot_spm_busy_wait();
|
boot_spm_busy_wait();
|
||||||
7fcc: 00 fc sbrc r0, 0
|
7fc4: 00 fc sbrc r0, 0
|
||||||
7fce: fd cf rjmp .-6 ; 0x7fca <do_spm+0xa>
|
7fc6: fd cf rjmp .-6 ; 0x7fc2 <do_spm+0xa>
|
||||||
7fd0: 66 70 andi r22, 0x06 ; 6
|
7fc8: 66 70 andi r22, 0x06 ; 6
|
||||||
#if defined(RWWSRE)
|
#if defined(RWWSRE)
|
||||||
// this 'if' condition should be: (command == __BOOT_PAGE_WRITE || command == __BOOT_PAGE_ERASE)...
|
// this 'if' condition should be: (command == __BOOT_PAGE_WRITE || command == __BOOT_PAGE_ERASE)...
|
||||||
// but it's tweaked a little assuming that in every command we are interested in here, there
|
// but it's tweaked a little assuming that in every command we are interested in here, there
|
||||||
// must be also SELFPRGEN set. If we skip checking this bit, we save here 4B
|
// must be also SELFPRGEN set. If we skip checking this bit, we save here 4B
|
||||||
if ((command & (_BV(PGWRT)|_BV(PGERS))) && (data == 0) ) {
|
if ((command & (_BV(PGWRT)|_BV(PGERS))) && (data == 0) ) {
|
||||||
7fd2: 29 f0 breq .+10 ; 0x7fde <do_spm+0x1e>
|
7fca: 29 f0 breq .+10 ; 0x7fd6 <do_spm+0x1e>
|
||||||
7fd4: 45 2b or r20, r21
|
7fcc: 45 2b or r20, r21
|
||||||
7fd6: 19 f4 brne .+6 ; 0x7fde <do_spm+0x1e>
|
7fce: 19 f4 brne .+6 ; 0x7fd6 <do_spm+0x1e>
|
||||||
7fd8: 81 e1 ldi r24, 0x11 ; 17
|
7fd0: 81 e1 ldi r24, 0x11 ; 17
|
||||||
// Reenable read access to flash
|
// Reenable read access to flash
|
||||||
__boot_rww_enable_short();
|
__boot_rww_enable_short();
|
||||||
7fda: 87 bf out 0x37, r24 ; 55
|
7fd2: 87 bf out 0x37, r24 ; 55
|
||||||
7fdc: e8 95 spm
|
7fd4: e8 95 spm
|
||||||
7fde: 08 95 ret
|
7fd6: 08 95 ret
|
||||||
|
@ -1,52 +1,50 @@
|
|||||||
:10FC000001C00DC1112484B7882361F0982F9A7028
|
:10FC000001C009C1112484B7882361F0982F9A702C
|
||||||
:10FC1000923041F081FF02C097EF94BF282E80E020
|
:10FC1000923041F081FF02C097EF94BF282E80E020
|
||||||
:10FC2000E9D0EEC185E08093810082E08093C0003E
|
:10FC2000E5D0EEC185E08093810082E08093C00042
|
||||||
:10FC300088E18093C10086E08093C20080E18093D8
|
:10FC300088E18093C10086E08093C20080E18093D8
|
||||||
:10FC4000C4008EE0D7D0209A86E020E33CEF91E01C
|
:10FC4000C4008EE0D3D0209A86E020E33CEF91E020
|
||||||
:10FC5000309385002093840096BBB09BFECF189A0A
|
:10FC5000309385002093840096BBB09BFECF189A0A
|
||||||
:10FC6000A8954091C00047FD02C0815089F7FF244C
|
:10FC6000A8954091C00047FD02C0815089F7FF244C
|
||||||
:10FC7000F39455E0E52E61E1D62EB0D0813471F4D5
|
:10FC7000F39455E0E52E61E1D62EACD0813451F4F9
|
||||||
:10FC8000ADD0C82FBDD0C23811F481E005C0C13855
|
:10FC8000A9D0C82FB9D0C13811F083E001C088E0F5
|
||||||
:10FC900011F488E001C083E09AD096C0823411F458
|
:10FC90009AD096C0823411F484E103C0853419F4FB
|
||||||
:10FCA00084E103C0853419F485E0B2D08DC0853578
|
:10FCA00085E0B2D08DC0853539F494D0082F92D03C
|
||||||
:10FCB00039F494D0082F92D0182F000F111F83C051
|
:10FCB000182F000F111F83C0863521F484E0A4D0D3
|
||||||
:10FCC000863521F484E0A4D080E0E6CF843609F0C4
|
:10FCC00080E0E6CF843609F048C084D0C82FD0E069
|
||||||
:10FCD00048C084D0C82FD0E0DC2FCC277FD0C82BE1
|
:10FCD000DC2FCC277FD0C82B7DD0C82E5E01812C95
|
||||||
:10FCE0007DD0C82E5E01812C9924939477D0F401A5
|
:10FCE0009924939477D0F40181934F01F1E0AF1AF6
|
||||||
:10FCF00081934F01F1E0AF1AB108C1F781D085E4DB
|
:10FCF000B108C1F781D085E4C81212C0D39548017C
|
||||||
:10FD0000C81212C0D3954801A12CBB24B394AC16E1
|
:10FD0000A12CBB24B394AC16BD0609F459C0F5016F
|
||||||
:10FD1000BD0609F459C0F50161915F01C40197D096
|
:10FD100061915F01C40197D0FFEF8F1A9F0AF3CF63
|
||||||
:10FD2000FFEF8F1A9F0AF3CF83E0F80187BFE895B2
|
:10FD200083E0F80187BFE89507B600FCFDCFA0E0AF
|
||||||
:10FD300007B600FCFDCFA0E0B1E0F8018D919D91E8
|
:10FD3000B1E0F8018D919D910C01F7BEE895112479
|
||||||
:10FD40000C01F7BEE8951124229732962097B1F75F
|
:10FD4000229732962097B1F7F801E7BEE89507B6FB
|
||||||
:10FD5000F801E7BEE89507B600FCFDCFD7BEE895F1
|
:10FD500000FCFDCFD7BEE89533C0843719F53AD003
|
||||||
:10FD600033C0843719F53AD0C82FD0E0DC2FCC2728
|
:10FD6000C82FD0E0DC2FCC2735D05E01A82A32D0B6
|
||||||
:10FD700035D05E01A82A32D0982E42D0E801F5E4B1
|
:10FD7000982E42D0E801F5E49F120BC0CE015BD073
|
||||||
:10FD80009F120BC0CE015BD022D081E0A81AB1082F
|
:10FD800022D081E0A81AB1082196A114B104B1F7DC
|
||||||
:10FD90002196A114B104B1F717C0FE018591EF01BE
|
:10FD900017C0FE018591EF0116D0E1E0AE1AB1085F
|
||||||
:10FDA00016D0E1E0AE1AB108C1F70EC0853739F4BC
|
:10FDA000C1F70EC0853739F427D08EE10CD086E933
|
||||||
:10FDB00027D08EE10CD086E90AD08AE06DCF81355C
|
:10FDB0000AD08AE06DCF813511F488E017D01CD0CD
|
||||||
:10FDC00011F488E017D01CD080E101D056CF90917B
|
:10FDC00080E101D05ACF9091C00095FFFCCF809385
|
||||||
:10FDD000C00095FFFCCF8093C60008958091C000BD
|
:10FDD000C60008958091C00087FFFCCF8091C000CD
|
||||||
:10FDE00087FFFCCF8091C00084FD01C0A895809161
|
:10FDE00084FD01C0A8958091C6000895E0E6F0E08A
|
||||||
:10FDF000C6000895E0E6F0E098E1908380830895DE
|
:10FDF00098E1908380830895EDDF803219F088E0E8
|
||||||
:10FE0000EDDF803219F088E0F5DFFFCF84E1DFCF4E
|
:10FE0000F5DFFFCF84E1DFCFCF93C82FE3DFC15011
|
||||||
:10FE1000CF93C82FE3DFC150E9F7CF91F1CFFC01B9
|
:10FE1000E9F7CF91F1CFFC010A0167BFE895112402
|
||||||
:10FE20000A0167BFE895112407B600FCFDCF667094
|
:10FE200007B600FCFDCF667029F0452B19F481E17F
|
||||||
:10FE300029F0452B19F481E187BFE8950895F999D8
|
:10FE300087BFE8950895F999FECF92BD81BDF89AE4
|
||||||
:10FE4000FECF92BD81BDF89A992780B50895262FDF
|
:10FE4000992780B50895262FF999FECF1FBA92BD44
|
||||||
:10FE5000F999FECF1FBA92BD81BD20BD0FB6F894AF
|
:10FE500081BD20BD0FB6F894FA9AF99A0FBE0196AB
|
||||||
:10FE6000FA9AF99A0FBE0196089556657273696FF2
|
:10FE60000895FF56657273696F6E3D382E330044F6
|
||||||
:10FE70006E3D382E31004F505449424F4F545F432E
|
:10FE700065766963653D61746D65676136343470BC
|
||||||
:10FE80005553544F4D5645523D3000446576696395
|
:10FE800000465F4350553D31363030303030304CD5
|
||||||
:10FE9000653D61746D6567613634347000465F435B
|
:10FE900000424947424F4F543D31004275696C74EE
|
||||||
:10FEA00050553D31363030303030304C00424947CB
|
:10FEA0003A4E6F7620203420323032313A31383AAF
|
||||||
:10FEB000424F4F543D31004275696C743A4D61793F
|
:10FEB00030333A313400554152543D3000424155BF
|
||||||
:10FEC00020323920323032303A30313A30323A3220
|
:10FEC000445F524154453D313135323030004C456C
|
||||||
:10FED0003600554152543D3000424155445F524135
|
:10FED000443D4230004C45445F53544152545F46C8
|
||||||
:10FEE00054453D313135323030004C45443D42308F
|
:09FEE0004C41534845533D3300E9
|
||||||
:10FEF000004C45445F53544152545F464C41534873
|
:02FFFE000308F6
|
||||||
:05FF000045533D3300F4
|
|
||||||
:02FFFE000108F8
|
|
||||||
:040000030000FC00FD
|
:040000030000FC00FD
|
||||||
:00000001FF
|
:00000001FF
|
||||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user