From 04b32ce80b8efbf29133a6a08ee8967c57576e68 Mon Sep 17 00:00:00 2001 From: Tobias Date: Sat, 18 Feb 2017 18:20:03 +0100 Subject: [PATCH] Makefiles for Linux --- DS18B20_BMP280/Makefile | 202 ++++++ DS18B20_BMP280_DS2438_SHT/Makefile | 202 ++++++ DS18B20_CDM7160/DS18B20_CDM7160.cproj | 2 +- DS18B20_CDM7160/Makefile | 202 ++++++ DS18B20_MAX44009/DS18B20_MAX44009.cproj | 4 +- DS18B20_MAX44009/Makefile | 202 ++++++ .../DS18B20_MAX44009_DS2438_SHT.cproj | 6 +- DS18B20_MAX44009_DS2438_SHT/Makefile | 202 ++++++ DS18B20_Thermocouble/Makefile | 202 ++++++ .../DS18B20_Thermocouble_DS2438_SHT.cproj | 4 +- DS18B20_Thermocouble_DS2438_SHT/Makefile | 202 ++++++ DS18B20_VOC/DS18B20_VOC.cproj | 4 +- DS18B20_VOC/Makefile | 202 ++++++ .../DS18B20_DS2438.c | 4 +- .../DS18B20_VOC_DS2438_SHT.cproj | 6 +- DS18B20_VOC_DS2438_SHT/Makefile | 21 +- DS2406/DS2406.atsln | 20 - DS2406/DS2406.c | 118 ---- DS2406/DS2406.cproj | 141 ---- DS2406/DS2406.pdf | Bin 233903 -> 0 bytes DS2406/Makefile | 607 ------------------ DS2406/OWDS2406.S | 320 --------- DS2423/DS2423.cproj | 140 ++-- DS2423/Makefile | 555 +++------------- DS2423_BMP280/DS2423_BMP280.cproj | 6 +- DS2423_BMP280/Makefile | 202 ++++++ DS2423_komische platine/Makefile | 202 ++++++ .../DS2423.cproj | 0 DS2424_Autosave/Makefile | 202 ++++++ DS2438_DHT22/Makefile | 202 ++++++ DS2438_HDC1080/DS2438_HDC1080.cproj | 4 +- DS2438_HDC1080/Makefile | 202 ++++++ DS2438_HIH9121/DS2438_HIH9121.cproj | 4 +- DS2438_HIH9121/Makefile | 202 ++++++ DS2438_SHT2X/DS2438_SHT2X.cproj | 6 +- DS2438_SHT2X/Makefile | 202 ++++++ DS2450/Makefile | 202 ++++++ DS2450_SHT2X_BMP280/Makefile | 202 ++++++ .../DS2450_SHT2X_BMP280_MAX44009.cproj | 10 +- DS2450_SHT2X_BMP280_MAX44009/Makefile | 202 ++++++ .../DS2450_SHT2X_MAX44009.cproj | 8 +- DS2450_SHT2X_MAX44009/Makefile | 202 ++++++ DS2450_VOC_SHT_BMP/Makefile | 202 ++++++ 43 files changed, 4230 insertions(+), 1800 deletions(-) create mode 100644 DS18B20_BMP280/Makefile create mode 100644 DS18B20_BMP280_DS2438_SHT/Makefile create mode 100644 DS18B20_CDM7160/Makefile create mode 100644 DS18B20_MAX44009/Makefile create mode 100644 DS18B20_MAX44009_DS2438_SHT/Makefile create mode 100644 DS18B20_Thermocouble/Makefile create mode 100644 DS18B20_Thermocouble_DS2438_SHT/Makefile create mode 100644 DS18B20_VOC/Makefile delete mode 100644 DS2406/DS2406.atsln delete mode 100644 DS2406/DS2406.c delete mode 100644 DS2406/DS2406.cproj delete mode 100644 DS2406/DS2406.pdf delete mode 100644 DS2406/Makefile delete mode 100644 DS2406/OWDS2406.S create mode 100644 DS2423_BMP280/Makefile create mode 100644 DS2423_komische platine/Makefile rename {DS2423 - Autosave => DS2424_Autosave}/DS2423.cproj (100%) create mode 100644 DS2424_Autosave/Makefile create mode 100644 DS2438_DHT22/Makefile create mode 100644 DS2438_HDC1080/Makefile create mode 100644 DS2438_HIH9121/Makefile create mode 100644 DS2438_SHT2X/Makefile create mode 100644 DS2450/Makefile create mode 100644 DS2450_SHT2X_BMP280/Makefile create mode 100644 DS2450_SHT2X_BMP280_MAX44009/Makefile create mode 100644 DS2450_SHT2X_MAX44009/Makefile create mode 100644 DS2450_VOC_SHT_BMP/Makefile diff --git a/DS18B20_BMP280/Makefile b/DS18B20_BMP280/Makefile new file mode 100644 index 0000000..00c1fa4 --- /dev/null +++ b/DS18B20_BMP280/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS18B20_BMP280 +SRC = ../common/I2C/BMP280.c ../common/I2C/USI_TWI_Master.c DS18B20_BMP280.c +ASRC = ../common/OWDS18B20.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS18B20_BMP280_DS2438_SHT/Makefile b/DS18B20_BMP280_DS2438_SHT/Makefile new file mode 100644 index 0000000..9634ae6 --- /dev/null +++ b/DS18B20_BMP280_DS2438_SHT/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS18B20_BMP280_DS2438_SHT +SRC = ../common/I2C/SHT2x.c ../common/calibr.c ../common/I2C/BMP280.c ../common/I2C/USI_TWI_Master.c DS18B20_DS2438.c +ASRC = ../common/OWDS18B20_DS2438.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS18B20_CDM7160/DS18B20_CDM7160.cproj b/DS18B20_CDM7160/DS18B20_CDM7160.cproj index 4e4abf0..9ae17e6 100644 --- a/DS18B20_CDM7160/DS18B20_CDM7160.cproj +++ b/DS18B20_CDM7160/DS18B20_CDM7160.cproj @@ -155,7 +155,7 @@ compile OWDS18B20.S - + compile USI_TWI_Master.c diff --git a/DS18B20_CDM7160/Makefile b/DS18B20_CDM7160/Makefile new file mode 100644 index 0000000..c7abdcf --- /dev/null +++ b/DS18B20_CDM7160/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS18B20_CDM7160 +SRC = ../common/I2C/CDM7160.c ../common/I2C/USI_TWI_Master.c DS18B20_CDM7160.c +ASRC = ../common/OWDS18B20.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS18B20_MAX44009/DS18B20_MAX44009.cproj b/DS18B20_MAX44009/DS18B20_MAX44009.cproj index b5f25f3..ae5ad14 100644 --- a/DS18B20_MAX44009/DS18B20_MAX44009.cproj +++ b/DS18B20_MAX44009/DS18B20_MAX44009.cproj @@ -149,11 +149,11 @@ compile OWDS18B20.S - + compile MAX44009.c - + compile USI_TWI_Master.c diff --git a/DS18B20_MAX44009/Makefile b/DS18B20_MAX44009/Makefile new file mode 100644 index 0000000..7bfd9e7 --- /dev/null +++ b/DS18B20_MAX44009/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS18B20_MAX44009 +SRC = ../common/I2C/MAX44009.c ../common/I2C/USI_TWI_Master.c DS18B20_MAX44009.c +ASRC = ../common/OWDS18B20.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS18B20_MAX44009_DS2438_SHT/DS18B20_MAX44009_DS2438_SHT.cproj b/DS18B20_MAX44009_DS2438_SHT/DS18B20_MAX44009_DS2438_SHT.cproj index 7acbedc..1c7737c 100644 --- a/DS18B20_MAX44009_DS2438_SHT/DS18B20_MAX44009_DS2438_SHT.cproj +++ b/DS18B20_MAX44009_DS2438_SHT/DS18B20_MAX44009_DS2438_SHT.cproj @@ -143,15 +143,15 @@ compile SHT2x.c - + compile MAX44009.c - + compile USI_TWI_Master.c - + compile OWDS18B20_DS2438.S diff --git a/DS18B20_MAX44009_DS2438_SHT/Makefile b/DS18B20_MAX44009_DS2438_SHT/Makefile new file mode 100644 index 0000000..9283a2f --- /dev/null +++ b/DS18B20_MAX44009_DS2438_SHT/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS18B20_MAX44009_DS2438_SHT +SRC = ../common/I2C/SHT2x.c ../common/I2C/MAX44009.c ../common/I2C/USI_TWI_Master.c DS18B20_DS2438.c +ASRC = ../common/OWDS18B20_DS2438.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS18B20_Thermocouble/Makefile b/DS18B20_Thermocouble/Makefile new file mode 100644 index 0000000..edb729b --- /dev/null +++ b/DS18B20_Thermocouble/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS18B20_TC +SRC = DS18B20_TC.c +ASRC = ../common/OWDS18B20.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS18B20_Thermocouble_DS2438_SHT/DS18B20_Thermocouble_DS2438_SHT.cproj b/DS18B20_Thermocouble_DS2438_SHT/DS18B20_Thermocouble_DS2438_SHT.cproj index 396866d..0fc1554 100644 --- a/DS18B20_Thermocouble_DS2438_SHT/DS18B20_Thermocouble_DS2438_SHT.cproj +++ b/DS18B20_Thermocouble_DS2438_SHT/DS18B20_Thermocouble_DS2438_SHT.cproj @@ -139,11 +139,11 @@ compile SHT2x.c - + compile USI_TWI_Master.c - + compile OWDS18B20_DS2438.S diff --git a/DS18B20_Thermocouble_DS2438_SHT/Makefile b/DS18B20_Thermocouble_DS2438_SHT/Makefile new file mode 100644 index 0000000..963eefe --- /dev/null +++ b/DS18B20_Thermocouble_DS2438_SHT/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS18B20_Thermocouble_DS2438_SHT +SRC = ../common/I2C/SHT2x.c ../common/I2C/USI_TWI_Master.c DS18B20_DS2438.c +ASRC = ../common/OWDS18B20_DS2438.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS18B20_VOC/DS18B20_VOC.cproj b/DS18B20_VOC/DS18B20_VOC.cproj index b69eb8c..b592540 100644 --- a/DS18B20_VOC/DS18B20_VOC.cproj +++ b/DS18B20_VOC/DS18B20_VOC.cproj @@ -141,11 +141,11 @@ compile OWDS18B20.S - + compile MAX1164x.c - + compile USI_TWI_Master.c diff --git a/DS18B20_VOC/Makefile b/DS18B20_VOC/Makefile new file mode 100644 index 0000000..dd86f30 --- /dev/null +++ b/DS18B20_VOC/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS18B20_VOC +SRC = ../common/I2C/MAX1164x.c ../common/I2C/USI_TWI_Master.c DS18B20_VOC.c +ASRC = ../common/OWDS18B20.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS18B20_VOC_DS2438_SHT direct/DS18B20_DS2438.c b/DS18B20_VOC_DS2438_SHT direct/DS18B20_DS2438.c index d490f73..06e2fdd 100644 --- a/DS18B20_VOC_DS2438_SHT direct/DS18B20_DS2438.c +++ b/DS18B20_VOC_DS2438_SHT direct/DS18B20_DS2438.c @@ -241,8 +241,8 @@ int main(void){ MCUSR=0; - ADMUX=0b00001110 //ADC1 + ADC3 - - ADCSRA = (1<compile SHT2x.c - + compile MAX1164x.c - + compile USI_TWI_Master.c - + compile OWDS18B20_DS2438.S diff --git a/DS18B20_VOC_DS2438_SHT/Makefile b/DS18B20_VOC_DS2438_SHT/Makefile index 5b3f725..a74fade 100644 --- a/DS18B20_VOC_DS2438_SHT/Makefile +++ b/DS18B20_VOC_DS2438_SHT/Makefile @@ -7,8 +7,8 @@ MCU = attiny84 FORMAT = ihex -TARGET = DS18B20_VOC_DS2438_SHT -SRC = ../common/calibr.c DS18B20_DS2438.c ../common/I2C/SHT2x.c ../common/I2C/MAX1164x.c ../common/I2C/USI_TWI_Master.c +TARGET =DS18B20_VOC_DS2438_SHT +SRC = ../common/calibr.c ../common/I2C/SHT2x.c ../common/I2C/MAX1164x.c ../common/I2C/USI_TWI_Master.c DS18B20_DS2438.c ASRC = ../common/OWDS18B20_DS2438.S # Name of this Makefile (used for "make depend"). @@ -58,10 +58,10 @@ LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(M # Programming support using avrdude. Settings and variables. -AVRDUDE_PROGRAMMER = stk500 -AVRDUDE_PORT = /dev/term/a +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a -AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex #AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep @@ -79,8 +79,8 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex # to submit bug reports. #AVRDUDE_VERBOSE = -v -v -AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) CC = avr-gcc @@ -88,7 +88,7 @@ OBJCOPY = avr-objcopy OBJDUMP = avr-objdump SIZE = avr-size NM = avr-nm -AVRDUDE = avrdude +#AVRDUDE = avrdude REMOVE = rm -f MV = mv -f @@ -111,7 +111,7 @@ build: elf hex eep elf: $(TARGET).elf hex: $(TARGET).hex -eep: $(TARGET).eep +#eep: $(TARGET).eep lss: $(TARGET).lss sym: $(TARGET).sym @@ -142,7 +142,8 @@ extcoff: $(TARGET).elf .SUFFIXES: .elf .hex .eep .lss .sym .elf.hex: - $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ .elf.eep: -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ diff --git a/DS2406/DS2406.atsln b/DS2406/DS2406.atsln deleted file mode 100644 index aec3ee8..0000000 --- a/DS2406/DS2406.atsln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Atmel Studio Solution File, Format Version 11.00 -Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2406", "DS2406.cproj", "{26106A5A-6618-4774-943F-65C46DDB610B}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|AVR = Debug|AVR - Release|AVR = Release|AVR - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {26106A5A-6618-4774-943F-65C46DDB610B}.Debug|AVR.ActiveCfg = Debug|AVR - {26106A5A-6618-4774-943F-65C46DDB610B}.Debug|AVR.Build.0 = Debug|AVR - {26106A5A-6618-4774-943F-65C46DDB610B}.Release|AVR.ActiveCfg = Release|AVR - {26106A5A-6618-4774-943F-65C46DDB610B}.Release|AVR.Build.0 = Release|AVR - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/DS2406/DS2406.c b/DS2406/DS2406.c deleted file mode 100644 index e6826c4..0000000 --- a/DS2406/DS2406.c +++ /dev/null @@ -1,118 +0,0 @@ - -// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// * All advertising materials mentioning features or use of this -// software must display the following acknowledgement: This product -// includes software developed by tm3d.de and its contributors. -// * Neither the name of tm3d.de nor the names of its contributors may -// be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#define F_CPU 8000000UL -#include -#include -#include -#include -#include - - -extern void OWINIT(); - -uint8_t owid[8]={0x12, 0xA2, 0xD9, 0x84, 0x00, 0x26, 0x02, 0x1E};/**/ - - - -extern uint8_t mode; -extern uint8_t gcontrol; -extern uint8_t reset_indicator; - - - -typedef union { - volatile uint8_t bytes[1]; - struct { - uint8_t status; - }; -} pack_t; -pack_t pack; - - - - -int main(void){ - PRR|=(1< - - - 2.0 - 7.0 - com.Atmel.AVRGCC8.C - {26106a5a-6618-4774-943f-65c46ddb610b} - ATtiny84A - none - Executable - C - $(MSBuildProjectName) - .elf - $(MSBuildProjectDirectory)\$(Configuration) - DS2406 - DS2406 - DS2406 - Native - true - false - true - true - 0x20000000 - - true - exception_table - 2 - 1 - - - - - - - - - - - - - com.atmel.avrdbg.tool.atmelice - - - - - debugWIRE - - com.atmel.avrdbg.tool.atmelice - J41800024445 - Atmel-ICE - - debugWIRE - - - - - -mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a" - True - True - True - True - False - True - True - - - NDEBUG - - - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include - - - Optimize for size (-Os) - True - True - True - - - libm - - - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include - - - - - - - - - -mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a" - True - True - True - True - False - True - True - - - DEBUG - - - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include - - - Optimize (-O1) - True - True - Default (-g2) - True - - - libm - - - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include - - - Default (-Wa,-g) - - - - - - compile - - - compile - - - - \ No newline at end of file diff --git a/DS2406/DS2406.pdf b/DS2406/DS2406.pdf deleted file mode 100644 index b6e77e265ae3680f09acb908115133f573837056..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 233903 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 eUc@ -# to submit bug reports. -#AVRDUDE_VERBOSE = -v -v - -AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) -AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) -AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) - - - -#---------------- Debugging Options ---------------- - -# For simulavr only - target MCU frequency. -DEBUG_MFREQ = $(F_CPU) - -# Set the DEBUG_UI to either gdb or insight. -DEBUG_UI = gdb -# DEBUG_UI = insight - -# Set the debugging back-end to either avarice, simulavr. -#DEBUG_BACKEND = avarice -DEBUG_BACKEND = simulavr - -# GDB Init Filename. -GDBINIT_FILE = __avr_gdbinit - -# When using avarice settings for the JTAG -JTAG_DEV = /dev/com1 - -# Debugging port used to communicate between GDB / avarice / simulavr. -DEBUG_PORT = 4242 - -# Debugging host used to communicate between GDB / avarice / simulavr, normally -# just set to localhost unless doing some sort of crazy debugging when -# avarice is running on a different computer. -DEBUG_HOST = localhost - - - -#============================================================================ - - -# Define programs and commands. -SHELL = sh -CC = avr-gcc -OBJCOPY = avr-objcopy -OBJDUMP = avr-objdump -SIZE = avr-size -NM = avr-nm -AVRDUDE = avrdude -REMOVE = rm -f -REMOVEDIR = rm -rf -COPY = cp -WINSHELL = cmd - - -# Define Messages -# English -MSG_ERRORS_NONE = Errors: none -MSG_BEGIN = -------- begin -------- -MSG_END = -------- end -------- -MSG_SIZE_BEFORE = Size before: -MSG_SIZE_AFTER = Size after: -MSG_COFF = Converting to AVR COFF: -MSG_EXTENDED_COFF = Converting to AVR Extended COFF: -MSG_FLASH = Creating load file for Flash: -MSG_EEPROM = Creating load file for EEPROM: -MSG_EXTENDED_LISTING = Creating Extended Listing: -MSG_SYMBOL_TABLE = Creating Symbol Table: -MSG_LINKING = Linking: -MSG_COMPILING = Compiling C: -MSG_COMPILING_CPP = Compiling C++: -MSG_ASSEMBLING = Assembling: -MSG_CLEANING = Cleaning project: -MSG_CREATING_LIBRARY = Creating library: - - - - -# Define all object files. -OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) - -# Define all listing files. -LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) - - -# Compiler flags to generate dependency files. -GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d - - -# Combine all necessary flags and optional flags. -# Add target processor to flags. -ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) -ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS) -ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) - - - - - -# Default target. -all: begin gccversion sizebefore build sizeafter end - -# Change the build target to build a HEX file or a library. -build: elf hex eep lss sym -#build: lib - - -elf: $(TARGET).elf -hex: $(TARGET).hex -eep: $(TARGET).eep -lss: $(TARGET).lss -sym: $(TARGET).sym -LIBNAME=lib$(TARGET).a -lib: $(LIBNAME) - - - -# Eye candy. -# AVR Studio 3.x does not check make's exit code but relies on -# the following magic strings to be generated by the compile job. - -begin: - @echo - @echo $(MSG_BEGIN) - -end: - @echo $(MSG_END) - @echo - - -# Display size of file. -HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex -ELFSIZE = $(SIZE) -A $(TARGET).elf -AVRMEM = avr-mem.sh $(TARGET).elf $(MCU) - -sizebefore: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ - $(AVRMEM) 2>/dev/null; echo; fi - -sizeafter: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ - $(AVRMEM) 2>/dev/null; echo; fi - - - -# Display compiler version information. -gccversion : - @$(CC) --version - - - -# Program the device. -program: $(TARGET).hex $(TARGET).eep - $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) - $(AVRDUDE_WRITE_EEPROM) - - -# Generate avr-gdb config/init file which does the following: -# define the reset signal, load the target file, connect to target, and set -# a breakpoint at main(). -gdb-config: - @$(REMOVE) $(GDBINIT_FILE) - @echo define reset >> $(GDBINIT_FILE) - @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) - @echo end >> $(GDBINIT_FILE) - @echo file $(TARGET).elf >> $(GDBINIT_FILE) - @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) - ifeq ($(DEBUG_BACKEND),simulavr) - @echo load >> $(GDBINIT_FILE) - endif - @echo break main >> $(GDBINIT_FILE) - -debug: gdb-config $(TARGET).elf - ifeq ($(DEBUG_BACKEND), avarice) - @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. - @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ - $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) - @$(WINSHELL) /c pause - - else - @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ - $(DEBUG_MFREQ) --port $(DEBUG_PORT) - endif - @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) - - - - -# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. - COFFCONVERT = $(OBJCOPY) --debugging - COFFCONVERT += --change-section-address .data-0x800000 - COFFCONVERT += --change-section-address .bss-0x800000 - COFFCONVERT += --change-section-address .noinit-0x800000 - COFFCONVERT += --change-section-address .eeprom-0x810000 - - - -coff: $(TARGET).elf - @echo - @echo $(MSG_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-avr $< $(TARGET).cof - - -extcoff: $(TARGET).elf - @echo - @echo $(MSG_EXTENDED_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof - - - -# Create final output files (.hex, .eep) from ELF output file. -%.hex: %.elf - @echo - @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ - -%.eep: %.elf - @echo - @echo $(MSG_EEPROM) $@ - -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ ---change-section-lma .eeprom=0 -O $(FORMAT) $< $@ - -# Create extended listing file from ELF output file. -%.lss: %.elf - @echo - @echo $(MSG_EXTENDED_LISTING) $@ - $(OBJDUMP) -h -S $< > $@ - -# Create a symbol table from ELF output file. -%.sym: %.elf - @echo - @echo $(MSG_SYMBOL_TABLE) $@ - $(NM) -n $< > $@ - - - -# Create library from object files. -.SECONDARY : $(TARGET).a -.PRECIOUS : $(OBJ) -%.a: $(OBJ) - @echo - @echo $(MSG_CREATING_LIBRARY) $@ - $(AR) $@ $(OBJ) - - -# Link: create ELF output file from object files. -.SECONDARY : $(TARGET).elf -.PRECIOUS : $(OBJ) -%.elf: $(OBJ) - @echo - @echo $(MSG_LINKING) $@ - $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) - - -# Compile: create object files from C source files. -$(OBJDIR)/%.o : %.c - @echo - @echo $(MSG_COMPILING) $< - $(CC) -c $(ALL_CFLAGS) $< -o $@ - - -# Compile: create object files from C++ source files. -$(OBJDIR)/%.o : %.cpp - @echo - @echo $(MSG_COMPILING_CPP) $< - $(CC) -c $(ALL_CPPFLAGS) $< -o $@ - - -# Compile: create assembler files from C source files. -%.s : %.c - $(CC) -S $(ALL_CFLAGS) $< -o $@ - - -# Compile: create assembler files from C++ source files. -%.s : %.cpp - $(CC) -S $(ALL_CPPFLAGS) $< -o $@ - - -# Assemble: create object files from assembler source files. -$(OBJDIR)/%.o : %.S - @echo - @echo $(MSG_ASSEMBLING) $< - $(CC) -c $(ALL_ASFLAGS) $< -o $@ - - -# Create preprocessed source for use in sending a bug report. -%.i : %.c - $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ - - -# Target: clean project. -clean: begin clean_list end - -clean_list : - @echo - @echo $(MSG_CLEANING) - $(REMOVE) $(TARGET).hex - $(REMOVE) $(TARGET).eep - $(REMOVE) $(TARGET).cof - $(REMOVE) $(TARGET).elf - $(REMOVE) $(TARGET).map - $(REMOVE) $(TARGET).sym - $(REMOVE) $(TARGET).lss - $(REMOVEDIR) $(OBJDIR) - $(REMOVE) $(SRC:.c=.s) - $(REMOVE) $(SRC:.c=.d) - $(REMOVEDIR) .dep - - -# Create object files directory -$(shell mkdir $(OBJDIR) 2>/dev/null) - - -# Include the dependency files. --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - - -# Listing of phony targets. -.PHONY : all begin finish end sizebefore sizeafter gccversion \ -build elf hex eep lss sym coff extcoff \ -clean clean_list program debug gdb-config - diff --git a/DS2406/OWDS2406.S b/DS2406/OWDS2406.S deleted file mode 100644 index 5e80148..0000000 --- a/DS2406/OWDS2406.S +++ /dev/null @@ -1,320 +0,0 @@ - -// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// * All advertising materials mentioning features or use of this -// software must display the following acknowledgement: This product -// includes software developed by tm3d.de and its contributors. -// * Neither the name of tm3d.de nor the names of its contributors may -// be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#define _CHANGEABLE_ID_ -#include "../common/OWConfig.s" -#include "../common/OWCRC16.s" - -.extern pack,45 -.extern counters,8 - -.macro CHIP_INIT -.endm - -.macro COMMAND_TABLE - rjmp h_channelaccess -.endm - -#include "../common/OWRomFunctions.s" -#include "../common/OWTimerInterrupt.s" - - - -; Ab hier Geraeteabhaenging -#define OW_CHANNEL_ACCESS OW_FIRST_COMMAND+0 - -;--------------------------------------------------- -; READ COMMAND and start operation -;--------------------------------------------------- - - -h_readcommand: - clr r_bytep -#ifndef _DIS_FLASH_ - FLASH_COMMANDS ; muss zu erst sein.... -#endif - cset 0x0F,OW_WRITE_SCRATCHPAD - cjmp 0xAA,hrc_set_readscratchpad - cset 0x5A,OW_COPY_SCRATCHPAD - cset 0xF0,OW_READ_MEMORY_ADDR - cset 0xA5,OW_READ_MEMORYCOUNTER_ADDR -#ifdef _CHANGEABLE_ID_ - CHANGE_ID_COMMANDS -#endif - ldi r_mode,OW_SLEEP - rjmp handle_end - -hrc_set_readscratchpad: - ldi r_mode,OW_READ_SCRATCHPAD - ldi r_sendflag,1 - rjmp h_readscratchpad - -h_writescratchpad: - configZ pack,r_bytep - inc r_bytep - st Z,r_rwbyte - cpi r_bytep,2 - breq h_writescratchpad_block - brsh h_writescratchpad_set_eoffset ;;33 - rjmp handle_end ;handle_end zu weit entfernt fuer br... -h_writescratchpad_set_eoffset: - cpi r_bytep,35 - breq h_writescratchpad_setcrc - mov r_temp,r_bytep - subi r_temp,4 - sts pack+2,r_temp ;AA und PF cleared - rjmp handle_end -;Start writeing to 32 Byte Block ; skip status byte -h_writescratchpad_block: - lds r_temp,pack ; Adresse low byte - andi r_temp,0x1F ;32 byte - add r_bytep,r_temp ;Zur angegebenen Startadresse springen - ;ori r_temp,0x20 ; Set PF flag - sts pack+2,r_temp ;E4:E0 vorher setzen - ; Byte 3 ueberspringen - rjmp handle_end_inc - -h_writescratchpad_setcrc: - ;copy crc to pack - lds r_temp,crc - com r_temp - sts pack+43,r_temp - lds r_temp,crc+1 - com r_temp ; invertieren , komischer name..... - sts pack+44,r_temp - ldi r_mode,OW_WRITE_SCRATCHPAD_CRC - ldi r_sendflag,1 - ldi r_bytep,43 -h_writescratchpad_crc: - cpi r_bytep,45 - breq h_writescratchpad_crc_end - configZ pack,r_bytep - ld r_rwbyte,Z - rjmp handle_end_inc -h_writescratchpad_crc_end: - rjmp handle_end_sleep - - -h_readscratchpad: - cpi r_bytep,35 - breq h_readscratchpad_end - cpi r_bytep,3 - brne h_readscratchpad_read_byte -h_readscratchpad_set_offset: - lds r_temp,pack - andi r_temp,0x1F - ldi r_temp2,3 - add r_temp,r_temp2 - mov r_bytep,r_temp -h_readscratchpad_read_byte: - configZ pack,r_bytep - ld r_rwbyte,Z - rjmp handle_end_inc -h_readscratchpad_end: - rjmp handle_end_sleep - - - -h_copyscratchpad: - cpi r_bytep,3 - brsh h_copyscratchpad_ok - configZ pack,r_bytep - inc r_bytep - ld r_temp,Z - cp r_temp,r_rwbyte - brne h_copyscratchpad_nok - cpi r_bytep,3 - breq h_copyscratchpad_ok - ldi r_bcount,1 - rjmp handle_end -h_copyscratchpad_ok: - ldi r_rwbyte,0xAA - ldi r_sendflag,1 - rjmp handle_end -h_copyscratchpad_nok: - lds r_temp,pack+3 - andi r_temp,~0x80 - sts pack+3,r_temp - rjmp handle_end_sleep - - -h_readmemory_addr: - cpi r_bytep,0 - brne h_readmrmory_addr_byte1 - sts pack,r_rwbyte - rjmp handle_end_inc -h_readmrmory_addr_byte1: - sts pack+1,r_rwbyte - ldi r_mode,OW_READ_MEMORY - ldi r_sendflag,1 - clr r_bytep - rjmp h_readmemory2 -h_readmemory: - lds r_bytep,pack - lds r_temp2,pack+1 - inc r_bytep - clr r_temp - adc r_temp2,r_temp - sbrc r_temp2,1 - rjmp h_readmemory_end - sts pack+1,r_temp - sts pack,r_bytep -h_readmemory2: - lds r_bytep,pack - andi r_bytep,0x1F - configZ pack+3,r_bytep - ld r_rwbyte,Z - rjmp handle_end -h_readmemory_end: - rjmp handle_end_sleep - - - - - - - - -h_readmemorycounter_addr: - cpi r_bytep,0 - brne h_readmrmorycounter_addr_byte1 - sts pack,r_rwbyte - inc r_bytep - ;ldi r_bcount,1 - rjmp handle_end -h_readmrmorycounter_addr_byte1: - sts pack+1,r_rwbyte - ldi r_mode,OW_READ_MEMORYCOUNTER - ;ldi r_bcount,1 - ldi r_sendflag,1 - clr r_bytep - rjmp h_readmemorycounter2 -h_readmemorycounter: - lds r_bytep,pack - lds r_temp2,pack+1 - ldi r_temp,1 ;inc leider kein c flag - add r_bytep,r_temp - clr r_temp - adc r_temp2,r_temp - mov r_temp,r_bytep - andi r_temp,0x1F - breq h_readmemorycounter_next - sts pack+1,r_temp2 - sts pack,r_bytep -h_readmemorycounter2: ;Lesen von dem worauf die erstenzwei bytes zeigen - lds r_bytep,pack - andi r_bytep,0x1F - configZ pack+3,r_bytep - ld r_rwbyte,Z - ;ldi r_bcount,1 - rjmp handle_end -//h_readmemorycounter_end: -// ldi r_mode,OW_SLEEP -// clr r_sendflag -// rjmp handle_end -h_readmemorycounter_next: ; rest lesen - ldi r_mode,OW_READ_MEMORYCOUNTER_EX - ldi r_bytep,34 - lds r_temp2,pack - lds r_temp,pack+1 - //lsr r_temp - //ror r_temp2 - - lsl r_temp2 - rol r_temp - cpi r_temp,3 - brne h_readmemorycounter_cFF - andi r_temp2,0xC0 - swap r_temp2 - - ;cpi r_temp,0xE0 - - configZ counters,r_temp2 - ld r_temp,Z+ - sts pack+35,r_temp - ld r_temp,Z+ - sts pack+36,r_temp - ld r_temp,Z+ - sts pack+37,r_temp - ld r_temp,Z+ - sts pack+38,r_temp - rjmp h_readmemorycounter_ex -h_readmemorycounter_cFF: - ldi r_temp,0xFF - sts pack+35,r_temp - sts pack+36,r_temp - sts pack+37,r_temp - sts pack+38,r_temp - -h_readmemorycounter_ex: - inc r_bytep - cpi r_bytep,45 - breq h_readmemorycounter_ex_end - cpi r_bytep,43 - brne h_readmemorycounter_ex2 - lds r_temp,crc - com r_temp - sts pack+43,r_temp - lds r_temp,crc+1 - com r_temp - sts pack+44,r_temp -h_readmemorycounter_ex2: - ;ldi r_bcount,1 - configZ pack,r_bytep - ld r_rwbyte,Z - rjmp handle_end -h_readmemorycounter_ex_end: - lds r_bytep,pack - lds r_temp2,pack+1 - ldi r_temp,1 ;inc leider kein c flag - add r_bytep,r_temp - clr r_temp - adc r_temp2,r_temp - sbrc r_temp2,1 ;am ene von allem - rjmp h_readmemorycounter_ex_sleep - CRCInit1 - ldi r_mode,OW_READ_MEMORYCOUNTER - sts pack+1,r_temp2 - sts pack,r_bytep - rjmp h_readmemorycounter2 -h_readmemorycounter_ex_sleep: - ldi r_mode,OW_SLEEP - clr r_sendflag - rjmp handle_end - - - - - -#include "../common/OWPinInterrupt.s" -.end \ No newline at end of file diff --git a/DS2423/DS2423.cproj b/DS2423/DS2423.cproj index c23c14c..93d1f5a 100644 --- a/DS2423/DS2423.cproj +++ b/DS2423/DS2423.cproj @@ -55,81 +55,81 @@ - -mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a" - True - True - True - True - False - True - True - - - DEBUG - - - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include - - - Optimize (-O1) - True - True - Default (-g2) - True - - - libm - - - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include - - - Default (-Wa,-g) - + -mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a" + True + True + True + True + False + True + True + + + DEBUG + + + + + %24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include + + + Optimize (-O1) + True + True + Default (-g2) + True + + + libm + + + + + %24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include + + + Default (-Wa,-g) + - -mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a" - True - True - True - True - False - True - True - - - DEBUG - - - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include - - - Optimize (-O1) - True - True - Default (-g2) - True - - - libm - - - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include - - - Default (-Wa,-g) - + -mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\gcc\dev\attiny84a" + True + True + True + True + False + True + True + + + DEBUG + + + + + %24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include + + + Optimize (-O1) + True + True + Default (-g2) + True + + + libm + + + + + %24(PackRepoDir)\atmel\ATtiny_DFP\1.0.79\include + + + Default (-Wa,-g) + diff --git a/DS2423/Makefile b/DS2423/Makefile index fcc4e3f..aeca415 100644 --- a/DS2423/Makefile +++ b/DS2423/Makefile @@ -1,217 +1,34 @@ # Hey Emacs, this is a -*- makefile -*- -#---------------------------------------------------------------------------- -# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. -# -# Released to the Public Domain -# -# Additional material for this makefile was written by: -# Peter Fleury -# Tim Henigan -# Colin O'Flynn -# Reiner Patommel -# Markus Pfaff -# Sander Pool -# Frederik Rouleau -# Carlos Lamas -# -#---------------------------------------------------------------------------- -# On command line: -# -# make all = Make software. -# -# make clean = Clean out built project files. -# -# make coff = Convert ELF to AVR COFF. -# -# make extcoff = Convert ELF to AVR Extended COFF. -# -# make program = Download the hex file to the device, using avrdude. -# Please customize the avrdude settings below first! -# -# make debug = Start either simulavr or avarice as specified for debugging, -# with avr-gdb or avr-insight as the front end for debugging. -# -# make filename.s = Just compile filename.c into the assembler code only. -# -# make filename.i = Create a preprocessed source file for use in submitting -# bug reports to the GCC project. -# -# To rebuild project do "make clean" then "make all". -#---------------------------------------------------------------------------- - - -# MCU name -#MCU = attiny25 -MCU = attiny84a - - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# Typical values are: -# F_CPU = 1000000 -# F_CPU = 1843200 -# F_CPU = 2000000 -# F_CPU = 3686400 -# F_CPU = 4000000 -# F_CPU = 7372800 -F_CPU = 8000000 -# F_CPU = 11059200 -# F_CPU = 14745600 -# F_CPU = 16000000 -# F_CPU = 18432000 -# F_CPU = 20000000 -# F_CPU = 8000000 - - -# Output format. (can be srec, ihex, binary) + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 FORMAT = ihex +TARGET =DS2423 +SRC = DS2423.c +ASRC = ../common/OWDS2423.S +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile -# Target file name (without extension). -TARGET = DS2423 +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP -# Object files directory -OBJDIR = obj +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs -# List C source files here. (C dependencies are automatically generated.) -SRC = $(TARGET).c - - -# List C++ source files here. (C dependencies are automatically generated.) -CPPSRC = - - -# List Assembler source files here. -# Make them always end in a capital .S. Files ending in a lowercase .s -# will not be considered source files but generated files (assembler -# output from the compiler), and will be deleted upon "make clean"! -# Even though the DOS/Win* filesystem matches both .s and .S the same, -# it will preserve the spelling of the filenames, and gcc itself does -# care about how the name is spelled on its command-line. -ASRC = OWDS2423.S - - -# Optimization level, can be [0, 1, 2, 3, s]. -# 0 = turn off optimization. s = optimize for size. -# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) -OPT = s - - -# Debugging format. -# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. -# AVR Studio 4.10 requires dwarf-2. -# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. -DEBUG = dwarf-2 - - -# List any extra directories to look for include files here. -# Each directory must be seperated by a space. -# Use forward slashes for directory separators. -# For a directory that has spaces, enclose it in quotes. -EXTRAINCDIRS = - - -# Compiler flag to set the C Standard level. -# c89 = "ANSI" C -# gnu89 = c89 plus GCC extensions -# c99 = ISO C99 standard (not yet fully implemented) -# gnu99 = c99 plus GCC extensions -CSTANDARD = -std=gnu99 - - -# Place -D or -U options here for C sources -CDEFS = -DF_CPU=$(F_CPU)UL - - -# Place -D or -U options here for C++ sources -CPPDEFS = -DF_CPU=$(F_CPU)UL -#CPPDEFS += -D__STDC_LIMIT_MACROS -#CPPDEFS += -D__STDC_CONSTANT_MACROS - - - -#---------------- Compiler Options C ---------------- -# -g*: generate debugging information -# -O*: optimization level -# -f...: tuning, see GCC manual and avr-libc documentation -# -Wall...: warning level -# -Wa,...: tell GCC to pass this to the assembler. -# -adhlns...: create assembler listing -CFLAGS = -g$(DEBUG) -CFLAGS += $(CDEFS) -CFLAGS += -O$(OPT) -#CFLAGS += -mint8 -#CFLAGS += -mshort-calls -CFLAGS += -funsigned-char -CFLAGS += -funsigned-bitfields -CFLAGS += -fpack-struct -CFLAGS += -fshort-enums -#CFLAGS += -fno-unit-at-a-time -CFLAGS += -Wall -CFLAGS += -Wstrict-prototypes -CFLAGS += -Wundef -#CFLAGS += -Wunreachable-code -#CFLAGS += -Wsign-compare -CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) -CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -CFLAGS += $(CSTANDARD) - - -#---------------- Compiler Options C++ ---------------- -# -g*: generate debugging information -# -O*: optimization level -# -f...: tuning, see GCC manual and avr-libc documentation -# -Wall...: warning level -# -Wa,...: tell GCC to pass this to the assembler. -# -adhlns...: create assembler listing -CPPFLAGS = -g$(DEBUG) -CPPFLAGS += $(CPPDEFS) -CPPFLAGS += -O$(OPT) -#CPPFLAGS += -mint8 -#CPPFLAGS += -mshort-calls -CPPFLAGS += -funsigned-char -CPPFLAGS += -funsigned-bitfields -CPPFLAGS += -fpack-struct -CPPFLAGS += -fshort-enums -CPPFLAGS += -fno-exceptions -#CPPFLAGS += -fno-unit-at-a-time -CPPFLAGS += -Wall -#CPPFLAGS += -Wstrict-prototypes -CFLAGS += -Wundef -#CPPFLAGS += -Wunreachable-code -#CPPFLAGS += -Wsign-compare -CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst) -CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -#CPPFLAGS += $(CSTANDARD) - - -#---------------- Assembler Options ---------------- -# -Wa,...: tell GCC to pass this to the assembler. -# -ahlms: create listing -# -gstabs: have the assembler create line number information; note that -# for use in COFF files, additional information about filenames -# and function names needs to be present in the assembler source -# files -- see avr-libc docs [FIXME: not yet described there] -ASFLAGS = -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs - - -#---------------- Library Options ---------------- +#Additional libraries. + # Minimalistic printf version PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min # Floating point printf version (requires MATH_LIB = -lm below) PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt -# If this is left blank, then it will use the Standard printf version. PRINTF_LIB = -#PRINTF_LIB = $(PRINTF_LIB_MIN) -#PRINTF_LIB = $(PRINTF_LIB_FLOAT) - # Minimalistic scanf version SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min @@ -219,21 +36,15 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min # Floating point + %[ scanf version (requires MATH_LIB = -lm below) SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt -# If this is left blank, then it will use the Standard scanf version. SCANF_LIB = -#SCANF_LIB = $(SCANF_LIB_MIN) -#SCANF_LIB = $(SCANF_LIB_FLOAT) - MATH_LIB = -lm - - -#---------------- External Memory Options ---------------- +# External memory options # 64 KB of external RAM, starting after internal RAM (ATmega128!), # used for variables (.data/.bss) and heap (malloc()). -#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff # 64 KB of external RAM, starting after internal RAM (ATmega128!), # only used for heap (malloc()). @@ -241,33 +52,16 @@ MATH_LIB = -lm EXTMEMOPTS = +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) +# Programming support using avrdude. Settings and variables. -#---------------- Linker Options ---------------- -# -Wl,...: tell GCC to pass this to linker. -# -Map: create map file -# --cref: add cross reference to map file -LDFLAGS = -Wl,-Map=$(TARGET).map,--cref -LDFLAGS += $(EXTMEMOPTS) -LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) -#LDFLAGS += -T linker_script.x - +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a - -#---------------- Programming Options (avrdude) ---------------- - -# Programming hardware: alf avr910 avrisp bascom bsd -# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 -# -# Type: avrdude -c ? -# to get a full listing. -# -AVRDUDE_PROGRAMMER = pony-stk200 - -# com1 = serial port. Use lpt1 to connect to parallel port. -AVRDUDE_PORT = lpt1 - -AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex #AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep @@ -285,323 +79,124 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex # to submit bug reports. #AVRDUDE_VERBOSE = -v -v -AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) -AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) -AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) - - - -#---------------- Debugging Options ---------------- - -# For simulavr only - target MCU frequency. -DEBUG_MFREQ = $(F_CPU) +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) -# Set the DEBUG_UI to either gdb or insight. -DEBUG_UI = gdb -# DEBUG_UI = insight -# Set the debugging back-end to either avarice, simulavr. -#DEBUG_BACKEND = avarice -DEBUG_BACKEND = simulavr - -# GDB Init Filename. -GDBINIT_FILE = __avr_gdbinit - -# When using avarice settings for the JTAG -JTAG_DEV = /dev/com1 - -# Debugging port used to communicate between GDB / avarice / simulavr. -DEBUG_PORT = 4242 - -# Debugging host used to communicate between GDB / avarice / simulavr, normally -# just set to localhost unless doing some sort of crazy debugging when -# avarice is running on a different computer. -DEBUG_HOST = localhost - - - -#============================================================================ - - -# Define programs and commands. -SHELL = sh CC = avr-gcc OBJCOPY = avr-objcopy OBJDUMP = avr-objdump SIZE = avr-size NM = avr-nm -AVRDUDE = avrdude +#AVRDUDE = avrdude REMOVE = rm -f -REMOVEDIR = rm -rf -COPY = cp -WINSHELL = cmd - - -# Define Messages -# English -MSG_ERRORS_NONE = Errors: none -MSG_BEGIN = -------- begin -------- -MSG_END = -------- end -------- -MSG_SIZE_BEFORE = Size before: -MSG_SIZE_AFTER = Size after: -MSG_COFF = Converting to AVR COFF: -MSG_EXTENDED_COFF = Converting to AVR Extended COFF: -MSG_FLASH = Creating load file for Flash: -MSG_EEPROM = Creating load file for EEPROM: -MSG_EXTENDED_LISTING = Creating Extended Listing: -MSG_SYMBOL_TABLE = Creating Symbol Table: -MSG_LINKING = Linking: -MSG_COMPILING = Compiling C: -MSG_COMPILING_CPP = Compiling C++: -MSG_ASSEMBLING = Assembling: -MSG_CLEANING = Cleaning project: -MSG_CREATING_LIBRARY = Creating library: - - - +MV = mv -f # Define all object files. -OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) # Define all listing files. -LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) - - -# Compiler flags to generate dependency files. -GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d - +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) # Combine all necessary flags and optional flags. # Add target processor to flags. -ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) -ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS) +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) - - - # Default target. -all: begin gccversion sizebefore build sizeafter end - -# Change the build target to build a HEX file or a library. -build: elf hex eep lss sym -#build: lib +all: build +build: elf hex eep elf: $(TARGET).elf hex: $(TARGET).hex -eep: $(TARGET).eep -lss: $(TARGET).lss +#eep: $(TARGET).eep +lss: $(TARGET).lss sym: $(TARGET).sym -LIBNAME=lib$(TARGET).a -lib: $(LIBNAME) - - - -# Eye candy. -# AVR Studio 3.x does not check make's exit code but relies on -# the following magic strings to be generated by the compile job. - -begin: - @echo - @echo $(MSG_BEGIN) - -end: - @echo $(MSG_END) - @echo - - -# Display size of file. -HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex -ELFSIZE = $(SIZE) -A $(TARGET).elf -AVRMEM = avr-mem.sh $(TARGET).elf $(MCU) - -sizebefore: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ - $(AVRMEM) 2>/dev/null; echo; fi - -sizeafter: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ - $(AVRMEM) 2>/dev/null; echo; fi - - - -# Display compiler version information. -gccversion : - @$(CC) --version - # Program the device. program: $(TARGET).hex $(TARGET).eep - $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) - $(AVRDUDE_WRITE_EEPROM) - - -# Generate avr-gdb config/init file which does the following: -# define the reset signal, load the target file, connect to target, and set -# a breakpoint at main(). -gdb-config: - @$(REMOVE) $(GDBINIT_FILE) - @echo define reset >> $(GDBINIT_FILE) - @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) - @echo end >> $(GDBINIT_FILE) - @echo file $(TARGET).elf >> $(GDBINIT_FILE) - @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) - ifeq ($(DEBUG_BACKEND),simulavr) - @echo load >> $(GDBINIT_FILE) - endif - @echo break main >> $(GDBINIT_FILE) - -debug: gdb-config $(TARGET).elf - ifeq ($(DEBUG_BACKEND), avarice) - @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. - @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ - $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) - @$(WINSHELL) /c pause - - else - @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ - $(DEBUG_MFREQ) --port $(DEBUG_PORT) - endif - @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) # Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. - COFFCONVERT = $(OBJCOPY) --debugging - COFFCONVERT += --change-section-address .data-0x800000 - COFFCONVERT += --change-section-address .bss-0x800000 - COFFCONVERT += --change-section-address .noinit-0x800000 - COFFCONVERT += --change-section-address .eeprom-0x810000 - +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 coff: $(TARGET).elf - @echo - @echo $(MSG_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-avr $< $(TARGET).cof + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof extcoff: $(TARGET).elf - @echo - @echo $(MSG_EXTENDED_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof +.SUFFIXES: .elf .hex .eep .lss .sym -# Create final output files (.hex, .eep) from ELF output file. -%.hex: %.elf - @echo - @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ -%.eep: %.elf - @echo - @echo $(MSG_EEPROM) $@ +.elf.eep: -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ ---change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ # Create extended listing file from ELF output file. -%.lss: %.elf - @echo - @echo $(MSG_EXTENDED_LISTING) $@ +.elf.lss: $(OBJDUMP) -h -S $< > $@ # Create a symbol table from ELF output file. -%.sym: %.elf - @echo - @echo $(MSG_SYMBOL_TABLE) $@ +.elf.sym: $(NM) -n $< > $@ -# Create library from object files. -.SECONDARY : $(TARGET).a -.PRECIOUS : $(OBJ) -%.a: $(OBJ) - @echo - @echo $(MSG_CREATING_LIBRARY) $@ - $(AR) $@ $(OBJ) - - # Link: create ELF output file from object files. -.SECONDARY : $(TARGET).elf -.PRECIOUS : $(OBJ) -%.elf: $(OBJ) - @echo - @echo $(MSG_LINKING) $@ - $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) # Compile: create object files from C source files. -$(OBJDIR)/%.o : %.c - @echo - @echo $(MSG_COMPILING) $< - $(CC) -c $(ALL_CFLAGS) $< -o $@ - - -# Compile: create object files from C++ source files. -$(OBJDIR)/%.o : %.cpp - @echo - @echo $(MSG_COMPILING_CPP) $< - $(CC) -c $(ALL_CPPFLAGS) $< -o $@ +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ # Compile: create assembler files from C source files. -%.s : %.c +.c.s: $(CC) -S $(ALL_CFLAGS) $< -o $@ -# Compile: create assembler files from C++ source files. -%.s : %.cpp - $(CC) -S $(ALL_CPPFLAGS) $< -o $@ - - # Assemble: create object files from assembler source files. -$(OBJDIR)/%.o : %.S - @echo - @echo $(MSG_ASSEMBLING) $< +.S.o: $(CC) -c $(ALL_ASFLAGS) $< -o $@ -# Create preprocessed source for use in sending a bug report. -%.i : %.c - $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ - # Target: clean project. -clean: begin clean_list end - -clean_list : - @echo - @echo $(MSG_CLEANING) - $(REMOVE) $(TARGET).hex - $(REMOVE) $(TARGET).eep - $(REMOVE) $(TARGET).cof - $(REMOVE) $(TARGET).elf - $(REMOVE) $(TARGET).map - $(REMOVE) $(TARGET).sym - $(REMOVE) $(TARGET).lss - $(REMOVEDIR) $(OBJDIR) - $(REMOVE) $(SRC:.c=.s) - $(REMOVE) $(SRC:.c=.d) - $(REMOVEDIR) .dep - - -# Create object files directory -$(shell mkdir $(OBJDIR) 2>/dev/null) - - -# Include the dependency files. --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend -# Listing of phony targets. -.PHONY : all begin finish end sizebefore sizeafter gccversion \ -build elf hex eep lss sym coff extcoff \ -clean clean_list program debug gdb-config diff --git a/DS2423_BMP280/DS2423_BMP280.cproj b/DS2423_BMP280/DS2423_BMP280.cproj index f38d95d..2f1cd2e 100644 --- a/DS2423_BMP280/DS2423_BMP280.cproj +++ b/DS2423_BMP280/DS2423_BMP280.cproj @@ -123,15 +123,15 @@ - + compile BMP280.c - + compile USI_TWI_Master.c - + compile OWDS2423.S diff --git a/DS2423_BMP280/Makefile b/DS2423_BMP280/Makefile new file mode 100644 index 0000000..bf48702 --- /dev/null +++ b/DS2423_BMP280/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS2423_BMP280 +SRC = ../common/I2C/BMP280.c ../common/I2C/USI_TWI_Master.c DS2423_BMP280.c +ASRC = ../common/OWDS2423.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS2423_komische platine/Makefile b/DS2423_komische platine/Makefile new file mode 100644 index 0000000..aeca415 --- /dev/null +++ b/DS2423_komische platine/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS2423 +SRC = DS2423.c +ASRC = ../common/OWDS2423.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS2423 - Autosave/DS2423.cproj b/DS2424_Autosave/DS2423.cproj similarity index 100% rename from DS2423 - Autosave/DS2423.cproj rename to DS2424_Autosave/DS2423.cproj diff --git a/DS2424_Autosave/Makefile b/DS2424_Autosave/Makefile new file mode 100644 index 0000000..aeca415 --- /dev/null +++ b/DS2424_Autosave/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS2423 +SRC = DS2423.c +ASRC = ../common/OWDS2423.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS2438_DHT22/Makefile b/DS2438_DHT22/Makefile new file mode 100644 index 0000000..57fa4f1 --- /dev/null +++ b/DS2438_DHT22/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS2438_DHT22 +SRC = DS2438_DHT22.c +ASRC = ../common/OWDS2438.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS2438_HDC1080/DS2438_HDC1080.cproj b/DS2438_HDC1080/DS2438_HDC1080.cproj index 9bf4659..9ec467d 100644 --- a/DS2438_HDC1080/DS2438_HDC1080.cproj +++ b/DS2438_HDC1080/DS2438_HDC1080.cproj @@ -133,11 +133,11 @@ compile HDC1080.c - + compile USI_TWI_Master.c - + compile OWDS2438.S diff --git a/DS2438_HDC1080/Makefile b/DS2438_HDC1080/Makefile new file mode 100644 index 0000000..6ca5c50 --- /dev/null +++ b/DS2438_HDC1080/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS2438_HDC1080 +SRC = ../common/calibr.c ../common/I2C/HDC1080.c ../common/I2C/USI_TWI_Master.c DS2438_HDC1080.c +ASRC = ../common/OWDS2438.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS2438_HIH9121/DS2438_HIH9121.cproj b/DS2438_HIH9121/DS2438_HIH9121.cproj index 5933d2f..9c771bd 100644 --- a/DS2438_HIH9121/DS2438_HIH9121.cproj +++ b/DS2438_HIH9121/DS2438_HIH9121.cproj @@ -123,11 +123,11 @@ - + compile USI_TWI_Master.c - + compile OWDS2438.S diff --git a/DS2438_HIH9121/Makefile b/DS2438_HIH9121/Makefile new file mode 100644 index 0000000..ff21883 --- /dev/null +++ b/DS2438_HIH9121/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS2438_HIH9121 +SRC = ../common/I2C/USI_TWI_Master.c DS2438_HIH9121.c +ASRC = ../common/OWDS2438.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS2438_SHT2X/DS2438_SHT2X.cproj b/DS2438_SHT2X/DS2438_SHT2X.cproj index 42b122e..8142d95 100644 --- a/DS2438_SHT2X/DS2438_SHT2X.cproj +++ b/DS2438_SHT2X/DS2438_SHT2X.cproj @@ -129,15 +129,15 @@ compile calibr.c - + compile SHT2x.c - + compile USI_TWI_Master.c - + compile OWDS2438.S diff --git a/DS2438_SHT2X/Makefile b/DS2438_SHT2X/Makefile new file mode 100644 index 0000000..89a88a8 --- /dev/null +++ b/DS2438_SHT2X/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS2438_SHT2X +SRC = ../common/calibr.c ../common/I2C/SHT2x.c ../common/I2C/USI_TWI_Master.c DS2438_SHT2X.c +ASRC = ../common/OWDS2438.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS2450/Makefile b/DS2450/Makefile new file mode 100644 index 0000000..dcc66ed --- /dev/null +++ b/DS2450/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS2450 +SRC = DS2450.c +ASRC = OWDS2450.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS2450_SHT2X_BMP280/Makefile b/DS2450_SHT2X_BMP280/Makefile new file mode 100644 index 0000000..7f49dcc --- /dev/null +++ b/DS2450_SHT2X_BMP280/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS2450_SHT2X_BMP280 +SRC = ../common/I2C/BMP280.c ../common/I2C/SHT2x.c ../common/I2C/USI_TWI_Master.c DS2450_SHT2X_BMP280.c +ASRC = OWDS2450.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS2450_SHT2X_BMP280_MAX44009/DS2450_SHT2X_BMP280_MAX44009.cproj b/DS2450_SHT2X_BMP280_MAX44009/DS2450_SHT2X_BMP280_MAX44009.cproj index d3a73c9..2b6a417 100644 --- a/DS2450_SHT2X_BMP280_MAX44009/DS2450_SHT2X_BMP280_MAX44009.cproj +++ b/DS2450_SHT2X_BMP280_MAX44009/DS2450_SHT2X_BMP280_MAX44009.cproj @@ -123,23 +123,23 @@ - + compile BMP280.c - + compile MAX44009.c - + compile SHT2x.c - + compile TSL256x.c - + compile USI_TWI_Master.c diff --git a/DS2450_SHT2X_BMP280_MAX44009/Makefile b/DS2450_SHT2X_BMP280_MAX44009/Makefile new file mode 100644 index 0000000..e64f6ba --- /dev/null +++ b/DS2450_SHT2X_BMP280_MAX44009/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS2450_SHT2X_BMP280_MAX44009 +SRC = ../common/I2C/BMP280.c ../common/I2C/MAX44009.c ../common/I2C/SHT2x.c ../common/I2C/TSL256x.c ../common/I2C/USI_TWI_Master.c DS2450_SHT2X_BMP280_MAX44009.c +ASRC = OWDS2450.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS2450_SHT2X_MAX44009/DS2450_SHT2X_MAX44009.cproj b/DS2450_SHT2X_MAX44009/DS2450_SHT2X_MAX44009.cproj index 59f8dce..56aab1a 100644 --- a/DS2450_SHT2X_MAX44009/DS2450_SHT2X_MAX44009.cproj +++ b/DS2450_SHT2X_MAX44009/DS2450_SHT2X_MAX44009.cproj @@ -123,19 +123,19 @@ - + compile MAX44009.c - + compile SHT2x.c - + compile TSL256x.c - + compile USI_TWI_Master.c diff --git a/DS2450_SHT2X_MAX44009/Makefile b/DS2450_SHT2X_MAX44009/Makefile new file mode 100644 index 0000000..d52315b --- /dev/null +++ b/DS2450_SHT2X_MAX44009/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS2450_SHT2X_MAX44009 +SRC = ../common/I2C/MAX44009.c ../common/I2C/SHT2x.c ../common/I2C/TSL256x.c ../common/I2C/USI_TWI_Master.c DS2450_SHT2X_MAX44009.c +ASRC = OWDS2450.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/DS2450_VOC_SHT_BMP/Makefile b/DS2450_VOC_SHT_BMP/Makefile new file mode 100644 index 0000000..45f0d53 --- /dev/null +++ b/DS2450_VOC_SHT_BMP/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS2450 +SRC = ../common/I2C/BMP280.c ../common/I2C/MAX1164x.c ../common/I2C/SHT2x.c ../common/I2C/USI_TWI_Master.c DS2450_VOC_SHT_BMP.c +ASRC = ../common/OWDS2450.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + -- 2.34.1