diff options
Diffstat (limited to 'software/avr.include.mk')
-rw-r--r-- | software/avr.include.mk | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/software/avr.include.mk b/software/avr.include.mk new file mode 100644 index 0000000..3c1496d --- /dev/null +++ b/software/avr.include.mk @@ -0,0 +1,179 @@ +## +## spreadspace avr utils +## +## +## Copyright (C) 2012 Christian Pointner <equinox@spreadspace.org> +## +## This file is part of spreadspace avr utils. +## +## spreadspace avr utils is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## any later version. +## +## spreadspace avr utils is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. +## + +ifeq ($(BOARD_TYPE),teensy1) +MCU := at90usb162 +F_CPU := 16000000 +PROG := teensy +endif +ifeq ($(BOARD_TYPE),teensy2) +MCU := atmega32u4 +F_CPU := 16000000 +PROG := teensy +endif +ifeq ($(BOARD_TYPE),teensypp1) +MCU := at90usb646 +F_CPU := 16000000 +PROG := teensy +endif +ifeq ($(BOARD_TYPE),teensypp2) +MCU := at90usb1286 +F_CPU := 16000000 +PROG := teensy +endif +ifeq ($(BOARD_TYPE),hhd70dongle) +MCU := atmega32u4 +F_CPU := 16000000 +PROG := DFU +endif +ifeq ($(BOARD_TYPE),arduino2009) +MCU := atmega168 +F_CPU := 16000000 +PROG := avrdude +UPLOAD_RATE := 19200 +PROG_TYPE := stk500v1 +AVRDUDE_PORT := /dev/ttyUSB0 +endif + +CC = avr-gcc +OBJCOPY = avr-objcopy + +DFU = dfu-programmer +teensy = teensy_loader_cli +avrdude = avrdude + +## Options common to compile, link and assembly rules +COMMON = -mmcu=$(MCU) + +## Compile options common for all C compilation units. +CFLAGS = $(COMMON) +CFLAGS += -O2 +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -Wall +CFLAGS += -Wstrict-prototypes +CFLAGS += -DF_CPU=$(F_CPU)UL +CFLAGS += -D__BOARD_$(BOARD_TYPE)__ + +## Linker flags +LDFLAGS = $(COMMON) +LDFLAGS += + +SRC := $(OBJ:%.o=%.c) + +.PHONY: clean program erase flash reset run + +ELFFILE := $(NAME).elf +HEXFILE := $(NAME).hex + +all: $(HEXFILE) + +%.d: %.c + @set -e; rm -f $@; \ + $(CC) -MM $(CFLAGS) $< > $@.$$$$; \ + sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \ + rm -f $@.$$$$; echo '(re)building $@' + +ifneq ($(MAKECMDGOALS),distclean) +-include $(SRC:%.c=%.d) +endif + +%.o: %.c + $(CC) $(CFLAGS) -c $< + +$(ELFFILE): $(OBJ) + $(CC) $(OBJ) -o $@ $(LDFLAGS) + +$(HEXFILE): $(ELFFILE) + $(OBJCOPY) -O ihex -R .eeprom -R .fuse -R .lock -R .signature $< $@ + +clean: + rm -f *.o + rm -f *.d + rm -f *.d.* + rm -f $(ELFFILE) + rm -f $(HEXFILE) + + +### DFU-Programmer +define DFU/erase + $(DFU) $(MCU) erase || true +endef + +define DFU/flash + $(DFU) $(MCU) flash $1 +endef + +define DFU/reset + $(DFU) $(MCU) reset +endef + +define DFU/run + $(DFU) $(MCU) start +endef + +### teensy-loader +define teensy/erase +endef + +define teensy/flash + $(teensy) -mmcu=$(MCU) -w -v $1 +endef + +define teensy/reset +endef + +define teensy/run +endef + +### avrdude +define avrdude/erase + $(avrdude) -V -F -p $(MCU) -P $(AVRDUDE_PORT) -c $(PROG_TYPE) -b $(UPLOAD_RATE) -e +endef + +define avrdude/flash + $(avrdude) -V -F -p $(MCU) -P $(AVRDUDE_PORT) -c $(PROG_TYPE) -b $(UPLOAD_RATE) -D -U flash:w:$1 +endef + +define avrdude/reset +endef + +define avrdude/run +endef + +### Program Targets +program: erase flash run + +erase: + $(call $(PROG)/$@,) + +flash: $(HEXFILE) + $(call $(PROG)/$@,$(HEXFILE)) + +reset: + $(call $(PROG)/$@,) + +run: + $(call $(PROG)/$@,) |