QMSK_ARDUINO = qmsk
PROG = hello
ELF = build/src/$(PROG).elf
HEX = build/src/$(PROG).hex
build/src/hello.elf: build/src/hello.o \
build/qmsk/src/serial.o \
build/qmsk/src/timer.o
##
all: $(HEX)
build:
mkdir -p build/src build/qmsk/src
clean:
rm -rf build/
## Compiler
MCU = atmega328p
# CPU clock frequency
CPU = 16000000
STD = c99
CC = avr-gcc
CPPFLAGS = -DF_CPU=$(CPU)UL -I$(QMSK_ARDUINO)/include
CFLAGS = -mmcu=$(MCU) -std=$(STD) -Os -g
LDFLAGS = -mmcu=$(MCU)
LDLIBS = -lc
build/%.o: %.c
$(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
$(CC) -MM $(CPPFLAGS) -MT $@ -MF build/$*.d $<
build/%.elf:
$(CC) $(LDFLAGS) $+ -o $@ $(LDLIBS)
# existing .d files for rebuilding existing .o's
-include $(wildcard build/*/*.d)
dump: $(ELF)
avr-objdump -d $(ELF)
## Assembler
AS = avra
ASFLAGS =
%.hex: %.s
$(AS) $(ASFLAGS) $<
mv $<.hex $@
## Flashing
# Arduino Duemilanove
AD_PART = m328p
AD_PROG = arduino
AD_BAUD = 57600
AD_PORT = /dev/arduino
AD = avrdude
ADFLAGS = -p $(AD_PART) -c $(AD_PROG) -b $(AD_BAUD) -P $(AD_PORT)
build/%.hex: build/%.elf
avr-objcopy -O ihex -R .eeprom $< $@
.PRECIOUS: build/%.elf
upload: $(HEX)
$(AD) $(ADFLAGS) -U flash:w:$<
## Console
SERIAL_BAUD = 9600
SERIAL_FLOW = n
SERIAL_PARITY = n
SERIAL_BITS = 8
SERIAL_PORT = $(AD_PORT)
SERIAL_TERM = picocom
SERIAL_FLAGS = -b $(SERIAL_BAUD) -f $(SERIAL_FLOW) -p $(SERIAL_PARITY) -d $(SERIAL_BITS)
console:
$(SERIAL_TERM) $(SERIAL_FLAGS) $(SERIAL_PORT)