# === Allgemeine Konfiguration ===
MCU = atmega32
F_CPU = 8000000UL               # Taktfrequenz (8 MHz)
BAUD = 9600                      # Baudrate für UART
UART_BAUD = 9600
PROGRAMMER = usbasp              # Programmierer (kann je nach verwendetem Programmer angepasst werden)
PORT = usb                       # Port (für usbasp)

# === Compiler-Flags ===
CFLAGS = -Wall -Os -mmcu=$(MCU) -DF_CPU=$(F_CPU) -DUSART_BAUD=$(BAUD)
LDFLAGS = -mmcu=$(MCU)

# === Quellen und Objektdateien ===
SRCS = main.c uart.c
OBJS = $(SRCS:.c=.o)

# === Hex-Datei ===
TARGET = main.hex

# === AVRDUDE - Flashen des Programms ===
AVRDUDE = avrdude
AVRDUDE_FLAGS = -c $(PROGRAMMER) -p $(MCU) -P $(PORT) -U flash:w:$(TARGET):i

# === Targets ===

# Default Ziel (Kompilieren und Flashen)
all: $(TARGET) flash

# Kompiliere C-Dateien zu Objektdateien
%.o: %.c
	avr-gcc $(CFLAGS) -c $< -o $@

# Linke die Objektdateien und erzeuge die Hex-Datei
$(TARGET): $(OBJS)
	avr-gcc $(LDFLAGS) $(OBJS) -o $(TARGET:.hex=.elf)
	avr-objcopy -O ihex $(TARGET:.hex=.elf) $(TARGET)

# Flash das Programm auf den Mikrocontroller
flash: $(TARGET)
	$(AVRDUDE) $(AVRDUDE_FLAGS)

# Clean-Befehl - Entfernt die erzeugten Dateien
clean:
	rm -f $(OBJS) $(TARGET) $(TARGET:.hex=.elf)

# Programm löschen (optional)
erase:
	$(AVRDUDE) -c $(PROGRAMMER) -p $(MCU) -P $(PORT) -e
