# Copyright 2017 by Robert Evans (rrevans@gmail.com)
# 2019, 2023 Henrik Haftmann
PATH := c:\programs\winavr\gcc1210\bin\;$(PATH)
P = ubaboot
D = at90usb162
# allowed: at90usb82,at90usb162,atmega8u2,atmega16u2,atmega32u2,atmega16u4,atmega32u4
F = 16000000
# only 8 MHz and 16 MHz are supported
B = 1
# B = 0: Invoke bootloader at !RESET only when !HWB = low (here: Ofensteuerung)
# B = 1: Always invoke bootloader at !RESET (all other applications)
A = avr-
AVRDUDE = avrdude -c avrispmkii -p $D
CFLAGS += -DF_CPU=$F
CFLAGS += -Os -g
CFLAGS += -mmcu=$D
CFLAGS += -Wall
CFLAGS += -ffreestanding -nostdlib
LFUSE = 0xDE
HFUSE = $(if $B,0xDE,0xDF)
ifneq (,$(findstring usb,$D)) # at90usb82, at90usb162 (old but still cheap)
EFUSE = $(if $B,0xFC,0xF4)
LOCK = 0xDF
UNLOCK= 0xFF
else # Some(?) unused bits read as 0
# different defaults for BODLEVEL bits
EFUSE = $(if $(findstring u4,$D),0xC3,0xC4)
LOCK = 0x2F
UNLOCK= 0x3F
endif
BOOTSTART = 0x$(if $(findstring 32,$D),7,$(if $(findstring 16,$D),3,1))E00
all: $P.elf $P.lst
# avrdude 6.0.1+ (2013) can read ELF files.
# However, reading out fuse+lock bytes still doesn't work as expected, damn!
verify: $P.elf
$(AVRDUDE) -U flash:v:$<:e -U lfuse:v:$(LFUSE):m -U hfuse:v:$(HFUSE):m -U efuse:v:$(EFUSE):m -U lock:v:$(LOCK):m
flash: $P.elf
$(AVRDUDE) -e -U flash:w:$<:e
fuse:
$(AVRDUDE) -U lfuse:w:$(LFUSE):m -U hfuse:w:$(HFUSE):m -U efuse:w:$(EFUSE):m -U lock:w:$(LOCK):m
erase:
$(AVRDUDE) -U lock:w:$(UNLOCK):m -e
program: erase flash fuse
.SUFFIXES: .elf .flash .lst
%.lst: %.elf
@$Aobjdump -d $< | grep ':' | grep -v '\\.Loc\\.' > $@
@$Astrip $<
%.elf: *.S Makefile
$Agcc $(CFLAGS) $< -o $@ -Wl,-Ttext=$(BOOTSTART)
$Asize $@
clean:
rm -f $P.elf
.PHONY: all clean
Detected encoding: ASCII (7 bit) | 2
|