1 | # Source files
|
2 | TARGET = main
|
3 | SOURCES = main.c util.c key_tap.c uart4313.c uart_helper.c
|
4 |
|
5 | # Target MCU & fuses
|
6 | MCU = attiny4313
|
7 | F_CPU = 8000000UL
|
8 | LFUSE = 0xD4
|
9 | HFUSE = 0xDB
|
10 | EFUSE = 0xFF
|
11 |
|
12 | # Compiler configuration
|
13 | CC = avr-gcc
|
14 | OPT = s
|
15 |
|
16 | CFLAGS = -Wall -DF_CPU=$(F_CPU) -O$(OPT)
|
17 | CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -feliminate-unused-debug-types -ffunction-sections
|
18 | CFLAGS += -Wa,-adhlns=$(<:.c=.s)
|
19 |
|
20 | ALL_CFLAGS = -mmcu=$(MCU) $(CFLAGS)
|
21 |
|
22 | LDFLAGS = -s -Wl,-Map=$(TARGET).map,--cref,--gc-sections,--relax
|
23 |
|
24 | # Avrdude configuration
|
25 | AVRDUDE_PROG = usbasp
|
26 | AVRDUDE_FLAGS = -y -p $(MCU) -c $(AVRDUDE_PROG)
|
27 |
|
28 | AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
|
29 | AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
|
30 |
|
31 | # Other tools
|
32 | OBJCOPY = avr-objcopy
|
33 | SIZE = avr-size
|
34 | AVRDUDE = avrdude
|
35 |
|
36 | # Targets
|
37 | .PHONY: all
|
38 | all: depend hex eeprom size
|
39 |
|
40 | .PHONY: hex
|
41 | hex: $(TARGET).hex
|
42 |
|
43 | .PHONY: eeprom
|
44 | eeprom: $(TARGET).eep
|
45 |
|
46 | OBJECTS = $(SOURCES:.c=.o)
|
47 | ASM = $(SOURCES:.c=.s)
|
48 |
|
49 | $(TARGET).elf: $(OBJECTS)
|
50 | @echo "LD $(OBJECTS)";\
|
51 | $(CC) $(ALL_CFLAGS) $(OBJECTS) --output $@ $(LDFLAGS)
|
52 |
|
53 | $(TARGET).hex: $(TARGET).elf
|
54 | $(OBJCOPY) -O ihex -R .eeprom $< $@
|
55 |
|
56 | $(TARGET).eep: $(TARGET).elf
|
57 | -$(OBJCOPY) -O ihex -j .eeprom --set-section-flags=.eeprom="alloc,load" \
|
58 | --change-section-lma .eeprom=0 $< $@
|
59 | %.o : %.c
|
60 | @echo "CC $< -o $@";\
|
61 | $(CC) -c $(ALL_CFLAGS) $< -o $@
|
62 |
|
63 | # Programming with avrdude
|
64 |
|
65 | .PHONY: program
|
66 | program: $(TARGET).hex $(TARGET).eep
|
67 | $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
|
68 |
|
69 | .PHONY: fuses
|
70 | fuses: lfuse hfuse efuse
|
71 | .PHONY: lfuse
|
72 | lfuse:
|
73 | $(AVRDUDE) $(AVRDUDE_FLAGS) -i 10 -U lfuse:w:$(LFUSE):m
|
74 | .PHONY: hfuse
|
75 | hfuse:
|
76 | $(AVRDUDE) $(AVRDUDE_FLAGS) -i 10 -U hfuse:w:$(HFUSE):m
|
77 | .PHONY: efuse
|
78 | efuse:
|
79 | $(AVRDUDE) $(AVRDUDE_FLAGS) -i 10 -U efuse:w:$(EFUSE):m
|
80 | .PHONY: reset
|
81 | reset:
|
82 | $(AVRDUDE) $(AVRDUDE_FLAGS) -i 10 -U lfuse:r:/dev/null:m
|
83 |
|
84 | # Clean
|
85 | .PHONY: clean
|
86 | clean:
|
87 | rm -f $(TARGET).hex $(TARGET).eep $(TARGET).elf $(TARTGET).map
|
88 | rm -f $(OBJECTS)
|
89 | rm -f $(ASM)
|
90 |
|
91 | # Display Size
|
92 | .PHONY: size
|
93 | size: $(TARGET).elf
|
94 | @echo -n "SIZE "; $(SIZE) -A $(TARGET).elf
|
95 |
|
96 | # Display flags
|
97 | .PHONY: cflags
|
98 | cflags:
|
99 | @echo CFLAGS=$(CFLAGS)
|
100 | .PHONY: ldflags
|
101 | ldflags:
|
102 | @echo LDFLAGS=$(LDFLAGS)
|
103 | .PHONY: all_cflags
|
104 | all_cflags:
|
105 | @echo ALL_CFLAGS=$(ALL_CFLAGS)
|
106 |
|
107 | # dependeny
|
108 | .PHONY: depend
|
109 | depend:
|
110 | @echo "DEP $(SOURCES)"; $(CC) $(ALL_CFLAGS) -MM $(SOURCES) > .depend
|
111 |
|
112 | ifeq (.depend,$(wildcard .depend))
|
113 | include .depend
|
114 | endif
|