X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/032a83e9e1bda3b4724870ad65310414a8020351..e61345f872fc7f1a8b95e53ee68b4dbdea0650db:/Projects/Magstripe/makefile diff --git a/Projects/Magstripe/makefile b/Projects/Magstripe/makefile index 2ea5536fb..f97be4d77 100644 --- a/Projects/Magstripe/makefile +++ b/Projects/Magstripe/makefile @@ -63,33 +63,40 @@ MCU = at90usb1287 -# Target board (see library BoardTypes.h documentation, USER or blank for projects not requiring +# Target board (see library "Board Types" documentation, NONE for projects not requiring # LUFA board drivers). If USER is selected, put custom board drivers in a directory called # "Board" inside the application directory. -BOARD = USBKEY +BOARD = NONE # 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 +# processor frequency in Hz. 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 +# +# This will be an integer division of F_CLOCK below, as it is sourced by +# F_CLOCK after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. F_CPU = 16000000 +# Input clock frequency. +# This will define a symbol, F_CLOCK, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_CLOCK = $(F_CPU) + + # Output format. (can be srec, ihex, binary) FORMAT = ihex @@ -104,19 +111,41 @@ TARGET = Magstripe OBJDIR = . +# Path to the LUFA library +LUFA_PATH = ../.. + + +# LUFA library compile-time options and predefined tokens +LUFA_OPTS = -D USB_DEVICE_ONLY +LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8 +LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1 +LUFA_OPTS += -D USE_FLASH_DESCRIPTORS +LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" + +LUFA_OPTS += -D MAG_T1_CLOCK="(1 << 0)" +LUFA_OPTS += -D MAG_T1_DATA="(1 << 1)" +LUFA_OPTS += -D MAG_T2_CLOCK="(1 << 2)" +LUFA_OPTS += -D MAG_T2_DATA="(1 << 3)" +LUFA_OPTS += -D MAG_T3_CLOCK="(1 << 4)" +LUFA_OPTS += -D MAG_T3_DATA="(1 << 5)" +LUFA_OPTS += -D MAG_CARDPRESENT="(1 << 6)" +LUFA_OPTS += -D MAG_PIN=PINB +LUFA_OPTS += -D MAG_DDR=DDRB +LUFA_OPTS += -D MAG_PORT=PORTB + + +# Create the LUFA source path variables by including the LUFA root makefile +include $(LUFA_PATH)/LUFA/makefile + + # List C source files here. (C dependencies are automatically generated.) -SRC = $(TARGET).c \ - Descriptors.c \ - CircularBitBuffer.c \ - ../../LUFA/Scheduler/Scheduler.c \ - ../../LUFA/Drivers/USB/LowLevel/LowLevel.c \ - ../../LUFA/Drivers/USB/LowLevel/Endpoint.c \ - ../../LUFA/Drivers/USB/LowLevel/DevChapter9.c \ - ../../LUFA/Drivers/USB/HighLevel/USBTask.c \ - ../../LUFA/Drivers/USB/HighLevel/USBInterrupt.c \ - ../../LUFA/Drivers/USB/HighLevel/Events.c \ - ../../LUFA/Drivers/USB/HighLevel/StdDescriptors.c \ - +SRC = $(TARGET).c \ + Descriptors.c \ + Lib/CircularBitBuffer.c \ + $(LUFA_SRC_USB) \ + $(LUFA_SRC_USBCLASS) + + # List C++ source files here. (C dependencies are automatically generated.) CPPSRC = @@ -148,7 +177,7 @@ DEBUG = dwarf-2 # 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 = ../../ +EXTRAINCDIRS = $(LUFA_PATH)/ # Compiler flag to set the C Standard level. @@ -156,30 +185,27 @@ EXTRAINCDIRS = ../../ # gnu89 = c89 plus GCC extensions # c99 = ISO C99 standard (not yet fully implemented) # gnu99 = c99 plus GCC extensions -CSTANDARD = -std=gnu99 +CSTANDARD = -std=c99 # Place -D or -U options here for C sources -CDEFS = -DF_CPU=$(F_CPU)UL -DBOARD=BOARD_$(BOARD) -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -CDEFS += -DUSB_DEVICE_ONLY -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" - -CDEFS += -DMAG_T1_CLOCK="(1 << 0)" -CDEFS += -DMAG_T1_DATA="(1 << 1)" -CDEFS += -DMAG_T2_CLOCK="(1 << 2)" -CDEFS += -DMAG_T2_DATA="(1 << 3)" -CDEFS += -DMAG_T3_CLOCK="(1 << 4)" -CDEFS += -DMAG_T3_DATA="(1 << 5)" -CDEFS += -DMAG_CARDPRESENT="(1 << 6)" -CDEFS += -DMAG_PIN=PINB -CDEFS += -DMAG_DDR=DDRB -CDEFS += -DMAG_PORT=PORTB +CDEFS = -DF_CPU=$(F_CPU)UL +CDEFS += -DF_CLOCK=$(F_CLOCK)UL +CDEFS += -DBOARD=BOARD_$(BOARD) +CDEFS += $(LUFA_OPTS) -# Place -D or -U options here for ASM sources -ADEFS = -DF_CPU=$(F_CPU) +# Place -D or -U options here for ASM sources +ADEFS = -DF_CPU=$(F_CPU) +ADEFS += -DF_CLOCK=$(F_CLOCK)UL +ADEFS += -DBOARD=BOARD_$(BOARD) +ADEFS += $(LUFA_OPTS) # Place -D or -U options here for C++ sources -CPPDEFS = -DF_CPU=$(F_CPU)UL +CPPDEFS = -DF_CPU=$(F_CPU)UL +CPPDEFS += -DF_CLOCK=$(F_CLOCK)UL +CPPDEFS += -DBOARD=BOARD_$(BOARD) +CPPDEFS += $(LUFA_OPTS) #CPPDEFS += -D__STDC_LIMIT_MACROS #CPPDEFS += -D__STDC_CONSTANT_MACROS @@ -197,14 +223,16 @@ CFLAGS += $(CDEFS) CFLAGS += -O$(OPT) CFLAGS += -funsigned-char CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fno-inline-small-functions CFLAGS += -fpack-struct CFLAGS += -fshort-enums -CFLAGS += -ffunction-sections -CFLAGS += -finline-limit=20 +CFLAGS += -fno-strict-aliasing CFLAGS += -Wall CFLAGS += -Wstrict-prototypes -CFLAGS += -Wundef +#CFLAGS += -mshort-calls #CFLAGS += -fno-unit-at-a-time +#CFLAGS += -Wundef #CFLAGS += -Wunreachable-code #CFLAGS += -Wsign-compare CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) @@ -228,7 +256,8 @@ CPPFLAGS += -fpack-struct CPPFLAGS += -fshort-enums CPPFLAGS += -fno-exceptions CPPFLAGS += -Wall -CFLAGS += -Wundef +CPPFLAGS += -Wundef +#CPPFLAGS += -mshort-calls #CPPFLAGS += -fno-unit-at-a-time #CPPFLAGS += -Wstrict-prototypes #CPPFLAGS += -Wunreachable-code @@ -304,8 +333,8 @@ EXTMEMOPTS = # -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 += -Wl,--relax +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += -Wl,--relax LDFLAGS += -Wl,--gc-sections LDFLAGS += $(EXTMEMOPTS) LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) @@ -316,9 +345,7 @@ LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) #---------------- Programming Options (avrdude) ---------------- -# Programming hardware: alf avr910 avrisp bascom bsd -# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 -# +# Programming hardware # Type: avrdude -c ? # to get a full listing. # @@ -398,6 +425,7 @@ REMOVEDIR = rm -rf COPY = cp WINSHELL = cmd + # Define Messages # English MSG_ERRORS_NONE = Errors: none @@ -443,7 +471,7 @@ ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) # Default target. -all: begin gccversion sizebefore build checkhooks checklibmode sizeafter end +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 @@ -478,6 +506,7 @@ ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) ) FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr ) + sizebefore: @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ 2>/dev/null; echo; fi @@ -486,28 +515,13 @@ sizeafter: @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ 2>/dev/null; echo; fi -checkhooks: build - @echo - @echo ------- Unhooked LUFA Events ------- - @$(shell) (grep -s '^Event.*LUFA/.*\\.o' $(TARGET).map | \ - cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \ - echo "(None)" - @echo ----- End Unhooked LUFA Events ----- -checklibmode: - @echo - @echo ----------- Library Mode ----------- - @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \ - | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \ - || echo "No specific mode (both device and host mode allowable)." - @echo ------------------------------------ # Display compiler version information. gccversion : @$(CC) --version - # Program the device. program: $(TARGET).hex $(TARGET).eep $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) @@ -523,16 +537,17 @@ dfu: $(TARGET).hex dfu-programmer $(MCU) reset flip-ee: $(TARGET).hex $(TARGET).eep - copy $(TARGET).eep $(TARGET)eep.hex + $(COPY) $(TARGET).eep $(TARGET)eep.hex batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program batchisp -hardware usb -device $(MCU) -operation start reset 0 + $(REMOVE) $(TARGET)eep.hex dfu-ee: $(TARGET).hex $(TARGET).eep - dfu-programmer $(MCU) erase - dfu-programmer $(MCU) eeprom --debug 1 $(TARGET).eep + dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep dfu-programmer $(MCU) reset + # 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(). @@ -590,7 +605,7 @@ extcoff: $(TARGET).elf %.hex: %.elf @echo @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock $< $@ %.eep: %.elf @echo @@ -602,7 +617,7 @@ extcoff: $(TARGET).elf %.lss: %.elf @echo @echo $(MSG_EXTENDED_LISTING) $@ - $(OBJDUMP) -h -z -S $< > $@ + $(OBJDUMP) -h -S -z $< > $@ # Create a symbol table from ELF output file. %.sym: %.elf @@ -664,16 +679,15 @@ $(OBJDIR)/%.o : %.S # 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 clean_binary end -clean_binary: - $(REMOVE) $(TARGET).hex +# Target: clean project. +clean: begin clean_list end -clean_list: +clean_list : + @echo @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex $(REMOVE) $(TARGET).eep $(REMOVE) $(TARGET).cof $(REMOVE) $(TARGET).elf @@ -687,7 +701,6 @@ clean_list: $(REMOVE) $(SRC:.c=.i) $(REMOVEDIR) .dep - doxygen: @echo Generating Project Documentation... @doxygen Doxygen.conf @@ -705,8 +718,7 @@ $(shell mkdir $(OBJDIR) 2>/dev/null) # Listing of phony targets. -.PHONY : all checkhooks checklibmode begin \ -finish end sizebefore sizeafter gccversion \ -build elf hex eep lss sym coff extcoff \ -clean clean_list clean_binary program debug \ -gdb-config doxygen dfu flip +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff doxygen clean \ +clean_list clean_doxygen program dfu flip flip-ee dfu-ee \ +debug gdb-config