76 lines
1.7 KiB
Makefile
76 lines
1.7 KiB
Makefile
# 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
|