123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- # The architecture configuration
- ARCH := atmega8
- AVRDUDE_ARCH := m8
- AVRDUDE_SPEED := 1
- AVRDUDE_SLOW_SPEED := 100
- PROGRAMMER := avr910
- #PROGRAMMER := avrisp2
- PROGPORT := /dev/ttyUSB0
- #PROGPORT := usb
- # The fuse bits
- LFUSE := 0xFB
- HFUSE := 0xD9
- # Hardware parameters
- F_CPU := 3686400
- BINEXT :=
- NODEPS :=
- # The toolchain definitions
- CC := avr-gcc$(BINEXT)
- OBJCOPY := avr-objcopy$(BINEXT)
- SIZE := avr-size$(BINEXT)
- MKDIR := mkdir$(BINEXT)
- MV := mv$(BINEXT)
- RM := rm$(BINEXT)
- CP := cp$(BINEXT)
- ECHO := echo$(BINEXT)
- AVRDUDE := avrdude$(BINEXT)
- MYSMARTUSB := mysmartusb.py
- DOXYGEN := doxygen$(BINEXT)
- V := @ # Verbose build: make V=1
- O := s # Optimize flag
- Q := $(V:1=)
- QUIET_CC = $(Q:@=@$(ECHO) ' CC '$@;)$(CC)
- QUIET_DEPEND = $(Q:@=@$(ECHO) ' DEPEND '$@;)$(CC)
- QUIET_OBJCOPY = $(Q:@=@$(ECHO) ' OBJCOPY '$@;)$(OBJCOPY)
- QUIET_SIZE = $(Q:@=@$(ECHO) ' SIZE '$@;)$(SIZE)
- CFLAGS := -mmcu=$(ARCH) -std=c99 -g -O$(O) -Wall \
- "-Dinline=inline __attribute__((__always_inline__))" \
- -fshort-enums \
- -DF_CPU=$(F_CPU)
- LDFLAGS :=
- # Application code
- SRCS := main.c lcd.c morse.c buzzer.c
- NAME := morsedec
- BIN := $(NAME).bin
- HEX := $(NAME).hex
- EEP := $(NAME).eep.hex
- .SUFFIXES:
- .PHONY: all avrdude install_flash install_eeprom install reset writefuse doxygen clean distclean
- .DEFAULT_GOAL := all
- ifeq ($(BINEXT),.exe)
- HAVE_MYSMARTUSB :=
- else
- HAVE_MYSMARTUSB := $(shell $(MYSMARTUSB) -h >/dev/null 2>&1 && $(ECHO) 1)
- endif
- MYSMARTUSB_PWRCYCLE := \
- $(if $(HAVE_MYSMARTUSB), \
- $(MYSMARTUSB) -p0 $(PROGPORT) && \
- sleep 1 && \
- $(MYSMARTUSB) -p1 $(PROGPORT) \
- )
- MYSMARTUSB_PROGMODE := \
- $(if $(HAVE_MYSMARTUSB), \
- $(MYSMARTUSB) -mp $(PROGPORT) \
- )
- MYSMARTUSB_DATAMODE := \
- $(if $(HAVE_MYSMARTUSB), \
- $(MYSMARTUSB) -md $(PROGPORT) \
- )
- DEPS = $(sort $(patsubst %.c,dep/%.d,$(1)))
- OBJS = $(sort $(patsubst %.c,obj/%.o,$(1)))
- # Generate dependencies
- $(call DEPS,$(SRCS)): dep/%.d: %.c
- @$(MKDIR) -p $(dir $@)
- @$(MKDIR) -p obj
- $(QUIET_DEPEND) -o $@.tmp -MM -MT "$@ $(patsubst dep/%.d,obj/%.o,$@)" $(CFLAGS) $<
- @$(MV) -f $@.tmp $@
- ifeq ($(NODEPS),)
- -include $(call DEPS,$(SRCS))
- endif
- # Generate object files
- $(call OBJS,$(SRCS)): obj/%.o: %.c
- @$(MKDIR) -p $(dir $@)
- $(QUIET_CC) -o $@ -c $(CFLAGS) $<
- all: $(HEX)
- %.s: %.c
- $(QUIET_CC) $(CFLAGS) -S $*.c
- $(BIN): $(call OBJS,$(SRCS))
- $(QUIET_CC) $(CFLAGS) -o $(BIN) $(call OBJS,$(SRCS)) $(LDFLAGS) $(LDFLAGS)
- $(HEX): $(BIN)
- $(QUIET_OBJCOPY) -R.eeprom -O ihex $(BIN) $(HEX)
- # $(QUIET_OBJCOPY) -j.eeprom --set-section-flags=.eeprom="alloc,load" \
- # --change-section-lma .eeprom=0 -O ihex $(BIN) $(EEP)
- $(QUIET_SIZE) $(BIN)
- avrdude:
- $(call MYSMARTUSB_PROGMODE)
- $(AVRDUDE) -B $(AVRDUDE_SPEED) -p $(AVRDUDE_ARCH) \
- -c $(PROGRAMMER) -P $(PROGPORT) -t
- $(call MYSMARTUSB_PWRCYCLE)
- $(call MYSMARTUSB_DATAMODE)
- install_flash: all
- $(call MYSMARTUSB_PROGMODE)
- $(AVRDUDE) -B $(AVRDUDE_SPEED) -p $(AVRDUDE_ARCH) \
- -c $(PROGRAMMER) -P $(PROGPORT) \
- -U flash:w:$(HEX)
- $(call MYSMARTUSB_DATAMODE)
- install_eeprom: all
- $(call MYSMARTUSB_PROGMODE)
- $(AVRDUDE) -B $(AVRDUDE_SPEED) -p $(AVRDUDE_ARCH) \
- -c $(PROGRAMMER) -P $(PROGPORT) -U eeprom:w:$(EEP)
- $(call MYSMARTUSB_DATAMODE)
- install: install_flash
- $(call MYSMARTUSB_PWRCYCLE)
- # Reset the microcontroller through avrdude
- reset:
- $(call MYSMARTUSB_PROGMODE)
- $(AVRDUDE) -B $(AVRDUDE_SPEED) -p $(AVRDUDE_ARCH) \
- -c $(PROGRAMMER) -P $(PROGPORT) \
- -U signature:r:/dev/null:i -q -q
- $(call MYSMARTUSB_PWRCYCLE)
- writefuse:
- $(call MYSMARTUSB_PROGMODE)
- $(AVRDUDE) -B $(AVRDUDE_SLOW_SPEED) -p $(AVRDUDE_ARCH) \
- -c $(PROGRAMMER) -P $(PROGPORT) -q -q \
- -U lfuse:w:$(LFUSE):m \
- -U hfuse:w:$(HFUSE):m
- $(call MYSMARTUSB_DATAMODE)
- $(call MYSMARTUSB_PWRCYCLE)
- doxygen:
- -$(RM) -Rf doc
- $(MKDIR) doc
- $(DOXYGEN) Doxyfile
- $(CP) *.jpg doc/latex/
- $(CP) *.jpg doc/html/
- $(MAKE) -C doc/latex pdf
- $(MV) doc/latex/refman.pdf doc/README-morsedecoder.pdf
- clean:
- -$(RM) -rf obj dep $(BIN) doc/latex
- distclean: clean
- -$(RM) -rf $(patsubst %.c,%.s,$(SRCS)) $(HEX) $(EEP) doc
|