123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737 |
- # Makefile for ATmegaBOOT
- # E.Lins, 18.7.2005
- # $Id$
- #
- # Instructions
- #
- # To make bootloader .hex file:
- # make diecimila
- # make lilypad
- # make ng
- # etc...
- #
- # To burn bootloader .hex file:
- # make diecimila_isp
- # make lilypad_isp
- # make ng_isp
- # etc...
- #
- # Edit History
- # 201406xx: WestfW: More Makefile restructuring.
- # Split off Makefile.1284, Makefile.extras, Makefile.custom
- # So that in theory, the main Makefile contains only the
- # official platforms, and does not need to be modified to
- # add "less supported" chips and boards.
- # 201303xx: WestfW: Major Makefile restructuring.
- # Allows options on Make command line "make xx LED=B3"
- # (see also pin_defs.h)
- # Divide into "chip" targets and "board" targets.
- # Most boards are (recursive) board targets with options.
- # Move isp target to separate makefile (fixes m8 EFUSE)
- # Some (many) targets will now be rebuilt when not
- # strictly necessary, so that options will be included.
- # (any "make" with options will always compile.)
- # Set many variables with ?= so they can be overridden
- # Use arduinoISP settings as default for ISP targets
- #
- #
- # * Copyright 2013-2015 by Bill Westfield. Part of Optiboot.
- # * This software is licensed under version 2 of the Gnu Public Licence.
- # * See optiboot.c for details.
- HELPTEXT = "\n"
- #----------------------------------------------------------------------
- #
- # program name should not be changed...
- PROGRAM = optiboot
- # The default behavior is to build using tools that are in the users
- # current path variables, but we can also build using an installed
- # Arduino user IDE setup, or the Arduino source tree.
- # Uncomment this next lines to build within the arduino environment,
- # using the arduino-included avrgcc toolset (mac and pc)
- # ENV ?= arduino
- # ENV ?= arduinodev
- # OS ?= macosx
- # OS ?= windows
- # export symbols to recursive makes (for ISP)
- export
- # defaults
- MCU_TARGET = atmega644p
- BIGBOOT = 0
- BOOT_ON_POR = 1
- APP_ON_EXTR = 0
- TIMEOUT = 4
- UART = 1
- SINGLESPEED = 0
- BAUD_RATE = 230400
- LED_DATA_FLASH = 0
- AVR_FREQ = 7372800L
- LED = A6
- LED_START_ON = 1
- LED_START_FLASHES = 0
- LDSECTIONS = -Wl,-Tlink_optiboot.ld -Wl,-section-start=.manualcall=0x7ffa
- all: atmega644p
- # Build environments
- # Start of some ugly makefile-isms to allow optiboot to be built
- # in several different environments. See the README.TXT file for
- # details.
- # default
- fixpath = $(1)
- SH := bash
- ifeq ($(ENV), arduino)
- # For Arduino, we assume that we're connected to the optiboot directory
- # included with the arduino distribution, which means that the full set
- # of avr-tools are "right up there" in standard places.
- # (except that in 1.5.x, there's an additional level of "up")
- TESTDIR := $(firstword $(wildcard ../../../tools/*))
- ifeq (,$(TESTDIR))
- # Arduino 1.5.x tool location compared to optiboot dir
- TOOLROOT = ../../../../tools
- else
- # Arduino 1.0 (and earlier) tool location
- TOOLROOT = ../../../tools
- endif
- GCCROOT = $(TOOLROOT)/avr/bin/
- ifeq ($(OS), windows)
- # On windows, SOME of the tool paths will need to have backslashes instead
- # of forward slashes (because they use windows cmd.exe for execution instead
- # of a unix/mingw shell?) We also have to ensure that a consistent shell
- # is used even if a unix shell is installed (ie as part of WINAVR)
- fixpath = $(subst /,\,$1)
- SHELL = cmd.exe
- SH = sh
- endif
- else ifeq ($(ENV), arduinodev)
- # Arduino IDE source code environment. Use the unpacked compilers created
- # by the build (you'll need to do "ant build" first.)
- ifeq ($(OS), macosx)
- TOOLROOT = ../../../../build/macosx/work/Arduino.app/Contents/Resources/Java/hardware/tools
- endif
- ifeq ($(OS), windows)
- TOOLROOT = ../../../../build/windows/work/hardware/tools
- endif
- GCCROOT = $(TOOLROOT)/avr/bin/
- AVRDUDE_CONF = -C$(TOOLROOT)/avr/etc/avrdude.conf
- else
- GCCROOT =
- AVRDUDE_CONF =
- endif
- STK500 = "C:\Program Files\Atmel\AVR Tools\STK500\Stk500.exe"
- STK500-1 = $(STK500) -e -d$(MCU_TARGET) -pf -vf -if$(PROGRAM)_$(TARGET).hex \
- -lFF -LFF -f$(HFUSE)$(LFUSE) -EF8 -ms -q -cUSB -I200kHz -s -wt
- STK500-2 = $(STK500) -d$(MCU_TARGET) -ms -q -lCF -LCF -cUSB -I200kHz -s -wt
- #
- # End of build environment code.
- OBJ = $(PROGRAM).o
- OPTIMIZE = -Os -fno-split-wide-types -mrelax
- DEFS =
- CC = $(GCCROOT)avr-gcc
- # Override is only needed by avr-lib build system.
- HELPTEXT += "Option AVR_FREQ=<n> - Clock rate of AVR CPU\n"
- override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) -DF_CPU=$(AVR_FREQ) $(DEFS)
- override LDFLAGS = $(LDSECTIONS) -Wl,--relax -nostartfiles
- OBJCOPY = $(GCCROOT)avr-objcopy
- OBJDUMP = $(call fixpath,$(GCCROOT)avr-objdump)
- SIZE = $(GCCROOT)avr-size
- #
- # Make command-line Options.
- # Permit commands like "make atmega328 LED_START_FLASHES=10" to pass the
- # appropriate parameters ("-DLED_START_FLASHES=10") to gcc
- #
- ifdef PRODUCTION
- ifneq ($(PRODUCTION),0)
- VERSION_CMD = -DPRODUCTION=1
- endif
- dummy = FORCE
- endif
- HELPTEXT += "Option CUSTOM_VERSION=nn - set a customer version number\n"
- ifdef CUSTOM_VERSION
- ifneq ($(CUSTOM_VERSION), 0)
- VERSION_CMD = -DOPTIBOOT_CUSTOMVER=$(CUSTOM_VERSION)
- else
- VERSION_CMD = -DPRODUCTION=1
- endif
- dummy = FORCE
- endif
- HELPTEXT += "Option BAUD_RATE=nnnn - set the bit rate for communications\n"
- ifdef BAUD_RATE
- BAUD_RATE_CMD = -DBAUD_RATE=$(BAUD_RATE)
- dummy = FORCE
- else
- BAUD_RATE_CMD = -DBAUD_RATE=115200
- endif
- HELPTEXT += "Option LED=B3 - set LED pin to particular port/bit\n"
- ifdef LED
- LED_CMD = -DLED=$(LED)
- dummy = FORCE
- endif
- HELPTEXT += "Option LED_START_FLASHES=n - set number of LED flashes when bootloader starts\n"
- ifdef LED_START_FLASHES
- LED_START_FLASHES_CMD = -DLED_START_FLASHES=$(LED_START_FLASHES)
- dummy = FORCE
- else
- LED_START_FLASHES_CMD = -DLED_START_FLASHES=3
- endif
- HELPTEXT += "Option LED_DATA_FLASH=1 - flash the LED each time data is received.\n"
- ifdef LED_DATA_FLASH
- ifneq ($(LED_DATA_FLASH), 0)
- LED_DATA_FLASH_CMD = -DLED_DATA_FLASH=1
- dummy = FORCE
- endif
- endif
- HELPTEXT += "Option LED_START_ON=1 - Turn the LED on at bootload start\n"
- ifdef LED_START_ON
- ifneq ($(LED_START_ON), 0)
- LED_START_ON_CMD = -DLED_START_ON=1
- endif
- dummy = FORCE
- endif
- HELPTEXT += "Option BIGBOOT=1 - enable extra features up to 1kbytes\n"
- # BIGBOOT: Include extra features, up to 1K.
- ifdef BIGBOOT
- ifneq ($(BIGBOOT), 0)
- BIGBOOT_CMD = -DBIGBOOT=1
- dummy = FORCE
- endif
- endif
- HELPTEXT += "Option SUPPORT_EEPROM=1 - Include code to read/write EEPROM\n"
- ifdef SUPPORT_EEPROM
- ifneq ($(SUPPORT_EEPROM), 0)
- SUPPORT_EEPROM_CMD = -DSUPPORT_EEPROM
- dummy = FORCE
- endif
- endif
- HELPTEXT += "Option SOFT_UART=1 - use a software (bit-banged) UART\n"
- ifdef SOFT_UART
- ifneq ($(SOFT_UART), 0)
- SOFT_UART_CMD = -DSOFT_UART=1
- dummy = FORCE
- endif
- endif
- HELPTEXT += "Option SOFTTX=B5 - pin for software UART xmit \n"
- ifdef SOFTTX
- SOFT_UART_CMD += -DSOFTTX=$(SOFTTX)
- dummy = FORCE
- endif
- HELPTEXT += "Option SOFTRX=B6 - pin for software UART receive\n"
- ifdef SOFTRX
- SOFT_UART_CMD += -DSOFTRX=$(SOFTRX)
- dummy = FORCE
- endif
- HELPTEXT += "Option SINGLESPEED=1 - do not use U2X mode on UART\n"
- ifdef SINGLESPEED
- ifneq ($(SINGLESPEED), 0)
- SS_CMD = -DSINGLESPEED=1
- endif
- endif
- HELPTEXT += "Option RS485=B0 - Pin for optional rs485 tx enable\n"
- ifdef RS485
- RS485_CMD = -DRS485=$(RS485)
- dummy = FORCE
- endif
- HELPTEXT += "Option NO_APP_SPM=1 - disallow application call of do_spm\n"
- ifdef NO_APP_SPM
- ifneq ($(NO_APP_SPM),0)
- APPSPM_CMD = -DAPP_NOSPM=1
- endif
- endif
- HELPTEXT += "Option OSCCAL_VALUE=nnn - set set OSCCAL_VALUE in bootloader\n"
- ifdef OSCCAL_VALUE
- OSCCAL_VALUE_CMD = -DOSCCAL_VALUE=$(OSCCAL_VALUE)
- dummy = FORCE
- endif
- HELPTEXT += "Option BOOT_ON_POR - Run bootloader on power-on\n"
- ifdef NO_START_APP_ON_POR
- ifneq ($(NO_START_APP_ON_POR),0)
- POR_CMD = -DNO_START_APP_ON_POR=1
- dummy = FORCE
- endif
- endif
- ifdef BOOT_ON_POR
- ifneq ($(NO_START_APP_ON_POR),0)
- POR_CMD = -DNO_START_APP_ON_POR=1
- dummy = FORCE
- endif
- endif
- HELPTEXT += "Option APP_ON_EXTR - Run App on External Reset\n"
- ifdef START_APP_ON_EXTR
- ifneq ($(START_APP_ON_EXTR),0)
- EXTR_CMD = -DSTART_APP_ON_EXTR=1
- dummy = FORCE
- endif
- endif
- ifdef APP_ON_EXTR
- ifneq ($(START_APP_ON_EXTR),0)
- EXTR_CMD = -DSTART_APP_ON_EXTR=1
- dummy = FORCE
- endif
- endif
- COMMON_OPTIONS = $(BAUD_RATE_CMD) $(LED_START_FLASHES_CMD) $(BIGBOOT_CMD)
- COMMON_OPTIONS += $(SOFT_UART_CMD) $(LED_DATA_FLASH_CMD) $(LED_CMD) $(SS_CMD)
- COMMON_OPTIONS += $(SUPPORT_EEPROM_CMD) $(LED_START_ON_CMD) $(APPSPM_CMD)
- COMMON_OPTIONS += $(OSCCAL_VALUE_CMD) $(VERSION_CMD) $(TIMEOUT_CMD)
- COMMON_OPTIONS += $(POR_CMD) $(EXTR_CMD) $(RS485_CMD)
- #UART is handled separately and only passed for devices with more than one.
- HELPTEXT += "Option UART=n - use UARTn for communications\n"
- ifdef UART
- UART_CMD = -DUART=$(UART)
- endif
- ifdef UARTTX
- UART_CMD = -DUARTTX=$(UARTTX)
- endif
- HELPTEXT += "Option TIMEOUT=n - set WDT to 1, 2, 4, or 8 seconds\n"
- ifdef TIMEOUT
- TIMEOUT_CMD = -DWDTTIME=$(TIMEOUT)
- dummy = FORCE
- endif
- .PRECIOUS: %.elf
- #---------------------------------------------------------------------------
- # "Chip-level Platform" targets.
- # A "Chip-level Platform" compiles for a particular chip, but probably does
- # not have "standard" values for things like clock speed, LED pin, etc.
- # Makes for chip-level platforms should usually explicitly define their
- # options like: "make atmega1285 AVR_FREQ=16000000L LED=D0"
- #---------------------------------------------------------------------------
- #
- # Note about fuses:
- # the efuse should really be 0xf8; since, however, only the lower
- # three bits of that byte are used on the atmega168, avrdude gets
- # confused if you specify 1's for the higher bits, see:
- # http://tinker.it/now/2007/02/24/the-tale-of-avrdude-atmega168-and-extended-bits-fuses/
- #
- # similarly, the lock bits should be 0xff instead of 0x3f (to
- # unlock the bootloader section) and 0xcf instead of 0x2f (to
- # lock it), but since the high two bits of the lock byte are
- # unused, avrdude would get confused.
- #---------------------------------------------------------------------------
- #
- HELPTEXT += "\n-------------\n\n"
- # Test platforms
- # Virtual boot block test
- HELPTEXT += "target virboot8 - ATmega8 with virtual boot partition\n"
- virboot8: TARGET = atmega8
- virboot8: MCU_TARGET = atmega8
- virboot8: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION' '-Dsave_vect_num=EE_RDY_vect_num'
- virboot8: AVR_FREQ ?= 16000000L
- virboot8: $(PROGRAM)_virboot8.hex
- ifndef PRODUCTION
- virboot8: $(PROGRAM)_virboot8.lst
- endif
- HELPTEXT += "target virboot328p - ATmega328 with virtual boot partition\n"
- virboot328: TARGET = atmega328
- virboot328: MCU_TARGET = atmega328p
- virboot328: CFLAGS += $(COMMON_OPTIONS) '-DVIRTUAL_BOOT_PARTITION'
- virboot328: AVR_FREQ ?= 16000000L
- virboot328: $(PROGRAM)_virboot328.hex
- ifndef PRODUCTION
- virboot328: $(PROGRAM)_virboot328.lst
- endif
- virboot328_isp: virboot328
- virboot328_isp: TARGET = virboot328
- virboot328_isp: MCU_TARGET = atmega328p
- # no boot section, SPIEN
- virboot328_isp: HFUSE ?= DF
- # Low power xtal (16MHz) 16KCK/14CK+65ms
- virboot328_isp: LFUSE ?= FF
- # 2.7V brownout
- virboot328_isp: EFUSE ?= FD
- virboot328_isp: isp
- virboot8_isp: virboot8
- virboot8_isp: TARGET = virboot8
- virboot8_isp: MCU_TARGET = atmega8
- # SPIEN, CKOPT (for full swing xtal), boot section 1k
- # Note that we need boot section to include our SPM instructions,
- # even though we do not enable BOOTRST
- virboot8_isp: HFUSE ?= CB
- # 2.7V brownout, 16MHz Xtal, 16KCK/14CK+65ms
- virboot8_isp: LFUSE ?= BF
- virboot8_isp: isp
- # Diecimila, Duemilanove with m168, and NG use identical bootloaders
- # Call it "atmega168" for generality and clarity, keep "diecimila" for
- # backward compatibility of makefile
- # ATmega8
- #
- HELPTEXT += "target atmega8 - ATmega8, ATmega8A, ATmega8L\n"
- atmega8: TARGET = atmega8
- atmega8: MCU_TARGET = atmega8
- atmega8: CFLAGS += $(COMMON_OPTIONS)
- atmega8: AVR_FREQ ?= 16000000L
- atmega8: $(PROGRAM)_atmega8.hex
- ifndef PRODUCTION
- atmega8: $(PROGRAM)_atmega8.lst
- endif
- atmega8_isp: atmega8
- atmega8_isp: TARGET = atmega8
- atmega8_isp: MCU_TARGET = atmega8
- ifndef BIGBOOT
- # SPIEN, CKOPT (for full swing xtal), Bootsize=512B
- atmega8_isp: HFUSE ?= CC
- else
- # SPIEN, CKOPT (for full swing xtal), Bootsize=1024B
- atmega8_isp: HFUSE ?= CA
- endif
- # 2.7V brownout, 16MHz Xtal, 16KCK/14CK+65ms
- atmega8_isp: LFUSE ?= BF
- atmega8_isp: isp
- HELPTEXT += "target atmega168* - ATmega168/A, ATmega168P, ATMEGA1268PB\n"
- atmega168: TARGET = atmega168
- atmega168: MCU_TARGET = atmega168
- atmega168: CFLAGS += $(COMMON_OPTIONS)
- atmega168: AVR_FREQ ?= 16000000L
- atmega168: $(PROGRAM)_atmega168.hex
- ifndef PRODUCTION
- atmega168: $(PROGRAM)_atmega168.lst
- endif
- atmega168_isp: atmega168
- atmega168_isp: TARGET = atmega168
- # 2.7V brownout
- atmega168_isp: HFUSE ?= DD
- # Full swing (16MHz) 16KCK/14CK+65ms
- atmega168_isp: LFUSE ?= F7
- ifndef BIGBOOT
- # 512 byte boot
- atmega168_isp: EFUSE ?= FC
- else
- # 1024byte boot
- atmega168_isp: EFUSE ?= FA
- endif
- atmega168_isp: isp
- HELPTEXT += "target atmega328* - ATmega328, ATmega328p, ATmega328pb\n"
- atmega328: TARGET = atmega328
- atmega328: MCU_TARGET = atmega328p
- atmega328: CFLAGS += $(COMMON_OPTIONS)
- atmega328: AVR_FREQ ?= 16000000L
- atmega328: $(PROGRAM)_atmega328.hex
- ifndef PRODUCTION
- atmega328: $(PROGRAM)_atmega328.lst
- endif
- atmega328_isp: atmega328
- atmega328_isp: TARGET = atmega328
- atmega328_isp: MCU_TARGET = atmega328p
- ifndef BIGBOOT
- # 512 byte boot, SPIEN
- atmega328_isp: HFUSE ?= DE
- else
- # 1k byte boot, SPIEN
- atmega328_isp: HFUSE ?= DC
- endif
- # Low power xtal (16MHz) 16KCK/14CK+65ms
- atmega328_isp: LFUSE ?= FF
- # 2.7V brownout
- atmega328_isp: EFUSE ?= FD
- atmega328_isp: isp
- #Atmega1280
- #HELPTEXT += "target atmega1280 - ATmega1280 (100pin, 128k)\n"
- atmega1280: MCU_TARGET = atmega1280
- atmega1280: CFLAGS += $(COMMON_OPTIONS) -DBIGBOOT $(UART_CMD)
- atmega1280: AVR_FREQ ?= 16000000L
- atmega1280: $(PROGRAM)_atmega1280.hex
- ifndef PRODUCTION
- atmega1280: $(PROGRAM)_atmega1280.lst
- endif
- #---------------------------------------------------------------------------
- # "Board-level Platform" targets.
- # A "Board-level Platform" implies a manufactured platform with a particular
- # AVR_FREQ, LED, and so on. Parameters are not particularly changable from
- # the "make" command line.
- # Most of the board-level platform builds should envoke make recursively
- # appropriate specific options
- #---------------------------------------------------------------------------
- # 20MHz clocked platforms
- #
- # These are capable of 230400 baud, or 115200 baud on PC (Arduino Avrdude issue)
- #
- pro20: TARGET = pro_20mhz
- pro20: CHIP = atmega168
- pro20:
- "$(MAKE)" atmega168 AVR_FREQ=20000000L LED_START_FLASHES=3
- mv $(PROGRAM)_$(CHIP).hex $(PROGRAM)_$(TARGET).hex
- ifndef PRODUCTION
- mv $(PROGRAM)_$(CHIP).lst $(PROGRAM)_$(TARGET).lst
- endif
- pro20_isp: pro20
- pro20_isp: TARGET = pro_20mhz
- # 4.3V brownout (for max speed!)
- pro20_isp: HFUSE ?= DC
- # Full swing xtal (20MHz) 258CK/14CK+4.1ms
- pro20_isp: LFUSE ?= F7
- # 512 byte boot
- pro20_isp: EFUSE ?= FC
- pro20_isp: isp
- # 16MHz clocked platforms
- #
- # These are capable of 230400 baud, or 115200 baud on PC (Arduino Avrdude issue)
- #
- pro16: TARGET = pro_16MHz
- pro16: CHIP = atmega168
- pro16:
- "$(MAKE)" $(CHIP) AVR_FREQ=16000000L LED_START_FLASHES=3
- mv $(PROGRAM)_$(CHIP).hex $(PROGRAM)_$(TARGET).hex
- ifndef PRODUCTION
- mv $(PROGRAM)_$(CHIP).lst $(PROGRAM)_$(TARGET).lst
- endif
- pro16_isp: pro16
- pro16_isp: TARGET = pro_16MHz
- # 2.7V brownout
- pro16_isp: HFUSE ?= DD
- # Full swing xtal (20MHz) 258CK/14CK+4.1ms
- pro16_isp: LFUSE ?= F7
- # 512 byte boot
- pro16_isp: EFUSE ?= FC
- pro16_isp: isp
- diecimila: TARGET = diecimila
- diecimila: CHIP = atmega168
- diecimila:
- "$(MAKE)" $(CHIP) AVR_FREQ=16000000L LED_START_FLASHES=3
- mv $(PROGRAM)_$(CHIP).hex $(PROGRAM)_$(TARGET).hex
- ifndef PRODUCTION
- mv $(PROGRAM)_$(CHIP).lst $(PROGRAM)_$(TARGET).lst
- endif
- diecimila_isp: diecimila
- diecimila_isp: TARGET = diecimila
- # 2.7V brownout
- diecimila_isp: HFUSE ?= DD
- # Low power xtal (16MHz) 16KCK/14CK+65ms
- diecimila_isp: LFUSE ?= F7
- # 512 byte boot
- diecimila_isp: EFUSE ?= FC
- diecimila_isp: isp
- # MEGA1280 Board (this is different from the atmega1280 chip platform)
- # Mega has a minimum boot size of 1024 bytes, so enable extra functions
- # Note that optiboot does not (can not) work on the MEGA2560
- #mega: TARGET = atmega1280
- mega1280: atmega1280
- mega1280_isp: mega1280
- mega1280_isp: TARGET = atmega1280
- mega1280_isp: MCU_TARGET = atmega1280
- # 1024 byte boot
- mega1280_isp: HFUSE ?= DE
- # Low power xtal (16MHz) 16KCK/14CK+65ms
- mega1280_isp: LFUSE ?= FF
- # 2.7V brownout; wants F5 for some reason...
- mega1280_isp: EFUSE ?= F5
- mega1280_isp: isp
- # 8MHz clocked platforms
- #
- # These are capable of 115200 baud
- # Note that "new" Arduinos with an AVR as USB/Serial converter will NOT work
- # with an 8MHz target Arduino. The bitrate errors are in opposite directions,
- # and total too large a number.
- #
- lilypad: TARGET = $@
- lilypad: CHIP = atmega168
- lilypad:
- "$(MAKE)" $(CHIP) AVR_FREQ=8000000L LED_START_FLASHES=3
- mv $(PROGRAM)_$(CHIP).hex $(PROGRAM)_$(TARGET).hex
- ifndef PRODUCTION
- mv $(PROGRAM)_$(CHIP).lst $(PROGRAM)_$(TARGET).lst
- endif
- lilypad_isp: lilypad
- lilypad_isp: TARGET = lilypad
- # 2.7V brownout
- lilypad_isp: HFUSE ?= DD
- # Internal 8MHz osc (8MHz) Slow rising power
- lilypad_isp: LFUSE ?= E2
- # 512 byte boot
- lilypad_isp: EFUSE ?= FC
- lilypad_isp: isp
- # lilypad_resonator is the same as a 8MHz lilypad, except for fuses.
- lilypad_resonator: lilypad
- lilypad_resonator_isp: lilypad
- lilypad_resonator_isp: TARGET = lilypad
- # 2.7V brownout
- lilypad_resonator_isp: HFUSE ?= DD
- # Full swing xtal (20MHz) 258CK/14CK+4.1ms
- lilypad_resonator_isp: LFUSE ?= C6
- # 512 byte boot
- lilypad_resonator_isp: EFUSE ?= FC
- lilypad_resonator_isp: isp
- pro8: TARGET = pro_8MHz
- pro8: CHIP = atmega168
- pro8:
- "$(MAKE)" $(CHIP) AVR_FREQ=8000000L LED_START_FLASHES=3
- mv $(PROGRAM)_$(CHIP).hex $(PROGRAM)_$(TARGET).hex
- ifndef PRODUCTION
- mv $(PROGRAM)_$(CHIP).lst $(PROGRAM)_$(TARGET).lst
- endif
- pro8_isp: pro8
- pro8_isp: TARGET = pro_8MHz
- # 2.7V brownout
- pro8_isp: HFUSE ?= DD
- # Full swing xtal (20MHz) 258CK/14CK+4.1ms
- pro8_isp: LFUSE ?= C6
- # 512 byte boot
- pro8_isp: EFUSE ?= FC
- pro8_isp: isp
- atmega328_pro8: TARGET = atmega328_pro_8MHz
- atmega328_pro8: CHIP = atmega328
- atmega328_pro8:
- "$(MAKE)" $(CHIP) AVR_FREQ=8000000L LED_START_FLASHES=3
- mv $(PROGRAM)_$(CHIP).hex $(PROGRAM)_$(TARGET).hex
- ifndef PRODUCTION
- mv $(PROGRAM)_$(CHIP).lst $(PROGRAM)_$(TARGET).lst
- endif
- atmega328_pro8_isp: atmega328_pro8
- atmega328_pro8_isp: TARGET = atmega328_pro_8MHz
- atmega328_pro8_isp: MCU_TARGET = atmega328p
- # 512 byte boot, SPIEN
- atmega328_pro8_isp: HFUSE ?= DE
- # Low power xtal (16MHz) 16KCK/14CK+65ms
- atmega328_pro8_isp: LFUSE ?= FF
- # 2.7V brownout
- atmega328_pro8_isp: EFUSE ?= FD
- atmega328_pro8_isp: isp
- #
- # Include additional platforms
- include Makefile.atmel
- include Makefile.extras
- include Makefile.1284
- include Makefile.custom
- include Makefile.2560
- include Makefile.tiny
- include Makefile.mcudude
- include Makefile.usbmcus
- BAUDCHECK=
- ifndef PRODUCTION
- ifndef SOFT_UART
- BAUDCHECK= baudcheck
- endif
- endif
- #---------------------------------------------------------------------------
- #
- # Generic build instructions
- #
- FORCE:
- baudcheck: FORCE
- - @$(CC) --version
- - @$(CC) $(CFLAGS) -E baudcheck.c -o baudcheck.tmp.sh
- - @$(SH) baudcheck.tmp.sh
- isp: $(TARGET)
- "$(MAKE)" -f Makefile.isp isp TARGET=$(TARGET)
- isp-stk500: $(PROGRAM)_$(TARGET).hex
- $(STK500-1)
- $(STK500-2)
- %.elf: $(OBJ) $(BAUDCHECK) $(dummy)
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS)
- $(SIZE) $@
- #windows "rm" is dumb and objects to wildcards that don't exist
- clean:
- @touch __temp_.o __temp_.elf __temp_.lst __temp_.map
- @touch __temp_.sym __temp_.lss __temp_.eep __temp_.srec
- @touch __temp_.bin __temp_.hex __temp_.tmp.sh
- rm -rf *.o *.elf *.lst *.map *.sym *.lss *.eep *.srec *.bin *.hex *.tmp.sh
- clean_asm:
- rm -rf *.lst
- %.lst: %.elf
- $(OBJDUMP) -h -S $< > $@
- %.hex: %.elf
- $(OBJCOPY) -j .text -j .data -j .version --set-section-flags .version=alloc,load -O ihex $< $@
- %.srec: %.elf
- $(OBJCOPY) -j .text -j .data -j .version --set-section-flags .version=alloc,load -O srec $< $@
- %.bin: %.elf
- $(OBJCOPY) -j .text -j .data -j .version --set-section-flags .version=alloc,load -O binary $< $@
- help:
- @echo -e $(HELPTEXT)
- install: all
- avrdude -c usbasp -p atmega644p -U lfuse:w:0xff:m -U hfuse:w:0x14:m -U efuse:w:0xfe:m -B100
- avrdude -c usbasp -p atmega644p -U flash:w:optiboot_atmega644p.hex
|