# Makefile for the EEPROM programmer microcontroller firmware # =========================================================== # Compiler and tools CC = avr-gcc OBJCOPY = avr-objcopy AVRDUDE ?= avrdude # Compiler and linker flags CFLAGS = -Wall -std=c11 -Os LDFLAGS = # Target platform and programmer GCC_MCU = atmega16a AVRDUDE_PARTNO = m16 AVRDUDE_PROGRAMMER = usbtiny AVRDUDE_CMD = $(AVRDUDE) -p $(AVRDUDE_PARTNO) -c $(AVRDUDE_PROGRAMMER) # Directories SOURCE_DIR = src BUILD_DIR = build # Make targets and object files SOURCE_FILES = $(wildcard $(SOURCE_DIR)/*.c) HEADER_FILES = $(wildcard $(SOURCE_DIR)/*.h) OBJECT_FILES = $(patsubst $(SOURCE_DIR)/%.c,$(BUILD_DIR)/%.o,$(SOURCE_FILES)) TARGET_NAME = eepprog TARGET_ELF = $(BUILD_DIR)/$(TARGET_NAME).elf TARGET_HEX = $(BUILD_DIR)/$(TARGET_NAME).hex .PHONY: all clean build flash writeflash readfuse writefuse # Default target (build hex file) all: build # General # ------- # Clean generated files clean: rm -rf $(BUILD_DIR) # Build firmware # -------------- build: $(TARGET_HEX) # Compile C code to object files $(BUILD_DIR)/%.o: $(SOURCE_DIR)/%.c $(HEADER_FILES) @mkdir -p $(BUILD_DIR) $(CC) -mmcu=$(GCC_MCU) $(CFLAGS) -c -o $@ $< # Link object files to ELF binary $(TARGET_ELF): $(OBJECT_FILES) $(CC) -mmcu=$(GCC_MCU) $(LDFLAGS) -o $(TARGET_ELF) $(OBJECT_FILES) # Convert ELF binary to ihex format (which can be flashed to the microcontroller) $(TARGET_HEX): $(TARGET_ELF) $(OBJCOPY) -O ihex $(TARGET_ELF) $(TARGET_HEX) # Flash firmware # -------------- flash: writeflash writeflash: $(TARGET_HEX) $(AVRDUDE_CMD) -U flash:w:$(TARGET_HEX) readfuse: $(AVRDUDE_CMD) -U lfuse:r:m -U hfuse:r:m writefuse: $(AVRDUDE_CMD) -U lfuse:w:0xef:m -U hfuse:w:0xd9:m