mirror of
https://codeberg.org/scip/attinycore-makefile-tests.git
synced 2025-12-16 19:00:57 +01:00
169 lines
4.9 KiB
Makefile
Executable File
169 lines
4.9 KiB
Makefile
Executable File
#-------------------------------------------------------------------------------------------------------
|
|
# makefile
|
|
#
|
|
# written by Steffen from mikrocontrollerspielwiese.de
|
|
#
|
|
# inspired from Guido Socher's makefile
|
|
# http://www.linuxfocus.org/Deutsch/November2004/article352.shtml
|
|
#
|
|
# license: GPL (http://www.gnu.org/licenses/gpl.txt)
|
|
#-------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
AVRDUDE=/usr/local/bin/avrdude
|
|
|
|
# avr-gcc part name
|
|
MCU=attiny2313
|
|
|
|
# avrdude part name
|
|
#PART=t85
|
|
PART=t2313
|
|
|
|
CC=avr-gcc
|
|
CPP=avr-c++
|
|
ASM=avr-as
|
|
|
|
#CPP=env -P/usr/local/bin:/usr/bin - avr-c++
|
|
#CC=env -P/usr/local/bin:/usr/bin - avr-gcc
|
|
OBJCOPY=avr-objcopy
|
|
|
|
PORT=$(shell ls /dev/ttyACM*)
|
|
|
|
#-------------------
|
|
# Programmieradapter
|
|
|
|
# hier kannst Du Deinen Programmieradapter angeben, wenn Du einen
|
|
# anderen nimmst, als in der Mikrocontrollerspielwiese vorgeschlagen
|
|
|
|
# Diamex
|
|
PROGRAMMER = -c stk500v2 -P $(PORT) -b 9600 -B 10 -v
|
|
|
|
#der USB-Programmieradapter der Mikrocontrollerspielwiese:
|
|
#PROGRAMMER = -c usbasp
|
|
|
|
#mein Mac-Programmieradapter:
|
|
#PROGRAMMER = -c stk500v2 -P /dev/tty.usbmodem431
|
|
|
|
# CPU Speed
|
|
DEFS=-DF_CPU=8000000UL
|
|
|
|
#
|
|
# attiny compatibility layer
|
|
#COMPAT=-I/home/scip/devel/at/tiny/cores/tiny
|
|
|
|
# gloabal defines
|
|
|
|
#-------------------
|
|
# auf Kleinheit optimieren:
|
|
CFLAGS=-g -mmcu=$(MCU) -Wall -Wstrict-prototypes -Os -mcall-prologues -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wundef -I. $(COMPAT) $(DEFS)
|
|
CPPFLAGS=-g -mmcu=$(MCU) -Wall -Os -mcall-prologues -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wundef -I. $(COMPAT) $(DEFS)
|
|
|
|
PWD=$(shell pwd)
|
|
SRC=$(shell basename $(PWD))
|
|
OBJ=$(shell ls *.S *.c *.cpp | sed -e 's/\.S/\.o/' -e 's/\.cpp/.o/' -e 's/\.c/.o/')
|
|
|
|
|
|
#-------------------
|
|
all: $(SRC).hex
|
|
|
|
#-------------------
|
|
help:
|
|
@echo
|
|
@echo "Moegliche Befehle:"
|
|
@echo " make all - compiliert Dein Programm und erzeugt die .hex-Datei"
|
|
@echo " make load - compiliert Dein Programm und schiebt es in den AVR"
|
|
@echo " make clean - loescht die beim Compilieren erzeugten Dateien"
|
|
@echo " make rdfuses - gibt Dir Informationen ueber die gesetzten Fusebits und mehr"
|
|
@echo " make wrfuse4.8mhz - setzt Fusebit fuer 4.8 MHz intern"
|
|
@echo " make wrfuse8.0mhz - set 8MHz fuse intern"
|
|
@echo " make wrfuse9.6mhz - setzt Fusebit fuer 9.6 MHz intern"
|
|
@echo " make wrfuse128khz - setzt Fusebit fuer 128 kHz intern"
|
|
@echo " make wrfusecrystal - setzt Fusebit fuer externen Quarz / Crystal (Achtung!)"
|
|
@echo " make wrfusenoreset - setzt Fusebit fuer PB5 (Achtung!)"
|
|
@echo " make help - zeigt diesen Hilfetext"
|
|
@echo
|
|
@echo "Achtung: ohne Quarz hast Du keine Chance wrfusecrystal rueckgaengig zu machen!"
|
|
@echo
|
|
@echo "Achtung: wrfusenoreset schaltet PB5 frei und deaktiviert RESET !!!"
|
|
@echo
|
|
|
|
#-------------------
|
|
$(SRC).hex : $(SRC).out
|
|
$(OBJCOPY) -R .eeprom -O ihex $(SRC).out $(SRC).hex
|
|
|
|
$(SRC).out : $(OBJ)
|
|
$(CC) $(CFLAGS) -o $(SRC).out -Wl,-Map,$(SRC).map $(OBJ)
|
|
|
|
%.o : %.c
|
|
$(CC) $(CFLAGS) -Os -c $< -o $@
|
|
|
|
%.o : %.S
|
|
$(CC) $(CFLAGS) -Os -c $< -o $@
|
|
|
|
%.o : %.cpp
|
|
$(CPP) $(CPPFLAGS) -Os -c $< -o $@
|
|
#------------------
|
|
load: $(SRC).hex
|
|
$(AVRDUDE) -p $(PART) $(PROGRAMMER) -e -U flash:w:"$(SRC).hex"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#-------------------
|
|
# fuse byte settings attiny13:
|
|
#
|
|
# Fuse Low Byte = 0x69 (4,8MHz internal), 0x6a (9.6MHz internal)
|
|
# Fuse High Byte = 0xff (RESET enabled), 0xfe (PB5 enabled, RESET disabled)
|
|
# Factory default is 0x6a / 0xff
|
|
# Check this with make rdfuses
|
|
|
|
rdfuses:
|
|
$(AVRDUDE) -p $(PART) $(PROGRAMMER) -v -q
|
|
|
|
# 2313: internal osci 8Mhz, ena WDT, ena SPI prog
|
|
wrfuse8.0mhz:
|
|
$(AVRDUDE) -p $(PART) $(PROGRAMMER) -u -v -U lfuse:w:0x64:m -U hfuse:w:0xcf:m -U efuse:w:0xff:m
|
|
|
|
# use internal RC oscillator 4.8 MHz
|
|
wrfuse4.8mhz:
|
|
|
|
$(AVRDUDE) -p $(PART) $(PROGRAMMER) -u -v -U lfuse:w:0x69:m
|
|
$(AVRDUDE) -p $(PART) $(PROGRAMMER) -u -v -U hfuse:w:0xff:m
|
|
|
|
# use internal RC oscillator 9.6 MHz
|
|
wrfuse9.6mhz:
|
|
$(AVRDUDE) -p $(PART) $(PROGRAMMER) -u -v -U lfuse:w:0x6a:m
|
|
$(AVRDUDE) -p $(PART) $(PROGRAMMER) -u -v -U hfuse:w:0xff:m
|
|
|
|
# use external crystal
|
|
wrfusecrystal:
|
|
clear
|
|
@echo "Warnung: Das Setzen des Quarz-Fusebits kann nur mit Quarz rueckgaengig gemacht werden!"
|
|
@echo " Du hast 15 Sekunden, um mit crtl-c abzubrechen."
|
|
@echo
|
|
@echo "Warning: The external crystal setting can not be changed back without a working crystal"
|
|
@echo " You have 15 seconds to abort this with crtl-c"
|
|
@sleep 15
|
|
$(AVRDUDE) -p $(PART) $(PROGRAMMER) -u -v -U lfuse:w:0x68:m
|
|
$(AVRDUDE) -p $(PART) $(PROGRAMMER) -u -v -U hfuse:w:0xff:m
|
|
|
|
# fuse byte setting for using PB5 (disables RESET)
|
|
wrfusenoreset:
|
|
clear
|
|
@echo "Warnung:"
|
|
@echo
|
|
@echo "Das Setzen des Reset-Fusebits kann nicht rueckgaengig gemacht werden!"
|
|
@echo "Du hast 15 Sekunden, um mit crtl-c abzubrechen."
|
|
@echo
|
|
@sleep 15
|
|
$(AVRDUDE) -p $(PART) $(PROGRAMMER) -u -v -U hfuse:w:0xfe:m
|
|
|
|
#-------------------
|
|
clean:
|
|
rm -f *.o *.map *.out *.hex
|
|
|
|
#-------------------
|