|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
-
- ##########------------------------------------------------------##########
- ########## Project-specific Details ##########
- ########## Check these every time you start a new project ##########
- ##########------------------------------------------------------##########
-
- MCU = atmega168
- F_CPU = 1000000UL
- BAUD = 9600UL
- ## Also try BAUD = 19200 or 38400 if you're feeling lucky.
-
- ## A directory for common include files and the simple USART library.
- ## If you move either the current folder or the Library folder, you'll
- ## need to change this path to match.
- LIBDIR = ../../AVR-Programming-Library
-
- ##########------------------------------------------------------##########
- ########## Programmer Defaults ##########
- ########## Set up once, then forget about it ##########
- ########## (Can override. See bottom of file.) ##########
- ##########------------------------------------------------------##########
-
- PROGRAMMER_TYPE = usbtiny
- # extra arguments to avrdude: baud rate, chip type, -F flag, etc.
- PROGRAMMER_ARGS =
-
- ##########------------------------------------------------------##########
- ########## Program Locations ##########
- ########## Won't need to change if they're in your PATH ##########
- ##########------------------------------------------------------##########
-
- CC = avr-gcc
- OBJCOPY = avr-objcopy
- OBJDUMP = avr-objdump
- AVRSIZE = avr-size
- AVRDUDE = avrdude
-
- ##########------------------------------------------------------##########
- ########## Makefile Magic! ##########
- ########## Summary: ##########
- ########## We want a .hex file ##########
- ########## Compile source files into .elf ##########
- ########## Convert .elf file into .hex ##########
- ########## You shouldn't need to edit below. ##########
- ##########------------------------------------------------------##########
-
- ## The name of your project (without the .c)
- # TARGET = blinkLED
- ## Or name it automatically after the enclosing directory
- TARGET = $(lastword $(subst /, ,$(CURDIR)))
-
- # Object files: will find all .c/.h files in current directory
- # and in LIBDIR. If you have any other (sub-)directories with code,
- # you can add them in to SOURCES below in the wildcard statement.
- SOURCES=$(wildcard *.c $(LIBDIR)/*.c)
- OBJECTS=$(SOURCES:.c=.o)
- HEADERS=$(SOURCES:.c=.h)
-
- ## Compilation options, type man avr-gcc if you're curious.
- CPPFLAGS = -DF_CPU=$(F_CPU) -DBAUD=$(BAUD) -I. -I$(LIBDIR)
- CFLAGS = -Os -g -std=gnu99 -Wall
- ## Use short (8-bit) data types
- CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
- ## Splits up object files per function
- CFLAGS += -ffunction-sections -fdata-sections
- LDFLAGS = -Wl,-Map,$(TARGET).map
- ## Optional, but often ends up with smaller code
- LDFLAGS += -Wl,--gc-sections
- ## Relax shrinks code even more, but makes disassembly messy
- ## LDFLAGS += -Wl,--relax
- ## LDFLAGS += -Wl,-u,vfprintf -lprintf_flt -lm ## for floating-point printf
- ## LDFLAGS += -Wl,-u,vfprintf -lprintf_min ## for smaller printf
- TARGET_ARCH = -mmcu=$(MCU)
-
- ## Explicit pattern rules:
- ## To make .o files from .c files
- %.o: %.c $(HEADERS) Makefile
- $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $<;
-
- $(TARGET).elf: $(OBJECTS)
- $(CC) $(LDFLAGS) $(TARGET_ARCH) $^ $(LDLIBS) -o $@
-
- %.hex: %.elf
- $(OBJCOPY) -j .text -j .data -O ihex $< $@
-
- %.eeprom: %.elf
- $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@
-
- %.lst: %.elf
- $(OBJDUMP) -S $< > $@
-
- ## These targets don't have files named after them
- .PHONY: all disassemble disasm eeprom size clean squeaky_clean flash fuses
-
- all: $(TARGET).hex
-
- debug:
- @echo
- @echo "Source files:" $(SOURCES)
- @echo "MCU, F_CPU, BAUD:" $(MCU), $(F_CPU), $(BAUD)
- @echo
-
- # Optionally create listing file from .elf
- # This creates approximate assembly-language equivalent of your code.
- # Useful for debugging time-sensitive bits,
- # or making sure the compiler does what you want.
- disassemble: $(TARGET).lst
-
- disasm: disassemble
-
- # Optionally show how big the resulting program is
- size: $(TARGET).elf
- $(AVRSIZE) -C --mcu=$(MCU) $(TARGET).elf
-
- clean:
- rm -f $(TARGET).elf $(TARGET).hex $(TARGET).obj \
- $(TARGET).o $(TARGET).d $(TARGET).eep $(TARGET).lst \
- $(TARGET).lss $(TARGET).sym $(TARGET).map $(TARGET)~ \
- $(TARGET).eeprom
-
- squeaky_clean:
- rm -f *.elf *.hex *.obj *.o *.d *.eep *.lst *.lss *.sym *.map *~ *.eeprom
-
- ##########------------------------------------------------------##########
- ########## Programmer-specific details ##########
- ########## Flashing code to AVR using avrdude ##########
- ##########------------------------------------------------------##########
-
- flash: $(TARGET).hex
- $(AVRDUDE) -c $(PROGRAMMER_TYPE) -p $(MCU) $(PROGRAMMER_ARGS) -U flash:w:$<
-
- ## An alias
- program: flash
-
- flash_eeprom: $(TARGET).eeprom
- $(AVRDUDE) -c $(PROGRAMMER_TYPE) -p $(MCU) $(PROGRAMMER_ARGS) -U eeprom:w:$<
-
- avrdude_terminal:
- $(AVRDUDE) -c $(PROGRAMMER_TYPE) -p $(MCU) $(PROGRAMMER_ARGS) -nt
-
- ## If you've got multiple programmers that you use,
- ## you can define them here so that it's easy to switch.
- ## To invoke, use something like `make flash_arduinoISP`
- flash_usbtiny: PROGRAMMER_TYPE = usbtiny
- flash_usbtiny: PROGRAMMER_ARGS = # USBTiny works with no further arguments
- flash_usbtiny: flash
-
- flash_usbasp: PROGRAMMER_TYPE = usbasp
- flash_usbasp: PROGRAMMER_ARGS = # USBasp works with no further arguments
- flash_usbasp: flash
-
- flash_arduinoISP: PROGRAMMER_TYPE = avrisp
- flash_arduinoISP: PROGRAMMER_ARGS = -b 19200 -P /dev/ttyACM0
- ## (for windows) flash_arduinoISP: PROGRAMMER_ARGS = -b 19200 -P com5
- flash_arduinoISP: flash
-
- flash_109: PROGRAMMER_TYPE = avr109
- flash_109: PROGRAMMER_ARGS = -b 9600 -P /dev/ttyUSB0
- flash_109: flash
-
- ##########------------------------------------------------------##########
- ########## Fuse settings and suitable defaults ##########
- ##########------------------------------------------------------##########
-
- ## Mega 48, 88, 168, 328 default values
- LFUSE = 0x62
- HFUSE = 0xdf
- EFUSE = 0x00
-
- ## Generic
- FUSE_STRING = -U lfuse:w:$(LFUSE):m -U hfuse:w:$(HFUSE):m -U efuse:w:$(EFUSE):m
-
- fuses:
- $(AVRDUDE) -c $(PROGRAMMER_TYPE) -p $(MCU) \
- $(PROGRAMMER_ARGS) $(FUSE_STRING)
- show_fuses:
- $(AVRDUDE) -c $(PROGRAMMER_TYPE) -p $(MCU) $(PROGRAMMER_ARGS) -nv
-
- ## Called with no extra definitions, sets to defaults
- set_default_fuses: FUSE_STRING = -U lfuse:w:$(LFUSE):m -U hfuse:w:$(HFUSE):m -U efuse:w:$(EFUSE):m
- set_default_fuses: fuses
-
- ## Set the fuse byte for full-speed mode
- ## Note: can also be set in firmware for modern chips
- set_fast_fuse: LFUSE = 0xE2
- set_fast_fuse: FUSE_STRING = -U lfuse:w:$(LFUSE):m
- set_fast_fuse: fuses
-
- ## Set the EESAVE fuse byte to preserve EEPROM across flashes
- set_eeprom_save_fuse: HFUSE = 0xD7
- set_eeprom_save_fuse: FUSE_STRING = -U hfuse:w:$(HFUSE):m
- set_eeprom_save_fuse: fuses
-
- ## Clear the EESAVE fuse byte
- clear_eeprom_save_fuse: FUSE_STRING = -U hfuse:w:$(HFUSE):m
- clear_eeprom_save_fuse: fuses
|