From 8c97f896b9cf1b9b6ddf25420c9d9f04516ddd11 Mon Sep 17 00:00:00 2001 From: travisutk Date: Sat, 5 May 2012 19:45:41 +0000 Subject: [PATCH] Working toward some ARM targets. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@1153 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- firmware/Makefile | 11 ++- firmware/config.mk | 24 ++++++- firmware/goodfet.c | 173 ++++++++++++++++++++------------------------- 3 files changed, 102 insertions(+), 106 deletions(-) diff --git a/firmware/Makefile b/firmware/Makefile index 2a0ad6f..35a8bb6 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -14,15 +14,12 @@ JTAG=msp430-jtag GCCINC?= -#GCC?=avr-gcc -# We use -Wl,-dT because gcc adds the msp430mcu definitions at the -# very end of the command line, so they only have an effect for a -# default linker script -GCC?=msp430-gcc +#All of these are ?= in order ot allow overriding. +GCC?=msp430-gcc -mmcu=$(mcu) LDFLAGS?=-mmcu=$(mcu) #-Wl,-dT ldscripts/$(mcu).x -CCEXTRA?= $(CFLAGS) -D$(mcu) -D$(platform) -Dplatform=$(platform) -Dboard=$(board) $(GCCINC) -I include -I platforms -CC=$(GCC) -Wall -O1 -fno-strict-aliasing -g -mmcu=$(mcu) $(CCEXTRA) +CCEXTRA ?= $(CFLAGS) -D$(mcu) -D$(platform) -Dplatform=$(platform) -Dboard=$(board) $(GCCINC) -I include -I platforms +CC =$(GCC) -Wall -O1 -fno-strict-aliasing -g $(CCEXTRA) # Available Applications # ====================== diff --git a/firmware/config.mk b/firmware/config.mk index e08a757..554e79a 100644 --- a/firmware/config.mk +++ b/firmware/config.mk @@ -29,6 +29,26 @@ platform := goodfet CONFIG_nrf = y endif +ifneq (,$(findstring $(board),stm32f4discovery)) +GCC = arm-none-eabi-gcc +CC = arm-none-eabi-gcc +LD = arm-none-eabi-ld -v +AR = arm-none-eabi-ar +AS = arm-none-eabi-as +CP = arm-none-eabi-objcopy +OD = arm-none-eabi-objdump +CFLAGS = -I./ -Iinclude/ -c -fno-common -O1 -g -mcpu=cortex-m3 -mthumb +AFLAGS = -ahls -mapcs-32 +LFLAGS = -Ttmplink.cmd -nostartfiles +CPFLAGS = -Obinary +ODFLAGS = -S +LDFLAGS = + +mcu ?= stm32f407 +platform := stm32f4discovery +config = monitor +endif + ifneq (,$(findstring $(board),facedancer10)) mcu ?= msp430f2618 platform := goodfet @@ -87,8 +107,10 @@ endif ifneq (,$(findstring $(board),donbfet)) GCC := avr-gcc +CC := avr-gcc mcu ?= atmega644p -CFLAGS=$(DEBUG) -mmcu=$(mcu) -W -Os -mcall-prologues -Wall -Wextra -Wuninitialized -fpack-struct -fshort-enums -funsigned-bitfields +platform = donbfet +CFLAGS=$(DEBUG) -Iinclude -mmcu=$(mcu) -W -Os -mcall-prologues -Wall -Wextra -Wuninitialized -fpack-struct -fshort-enums -funsigned-bitfields config := monitor avr spi jscan endif diff --git a/firmware/goodfet.c b/firmware/goodfet.c index 0352b77..90e4d0f 100644 --- a/firmware/goodfet.c +++ b/firmware/goodfet.c @@ -78,109 +78,86 @@ void handle(uint8_t const app, //! Main loop. -int main(void) -{ - volatile unsigned int i; - unsigned char app, verb; - unsigned long len; - // MSP reboot count for reset input & reboot function located at 0xFFFE - volatile unsigned int reset_count = 0; +int main(void){ + volatile unsigned int i; + unsigned char app, verb; + unsigned long len; + // MSP reboot count for reset input & reboot function located at 0xFFFE + volatile unsigned int reset_count = 0; #if (platform == tilaunchpad) - int ret=0; - - //ret = setjmp(warmstart);// needs to be here since context from init() would be gone + int ret=0; + + //ret = setjmp(warmstart);// needs to be here since context from init() would be gone warmstart: - if (ret == 0) { - coldstart(); // basic hardware setup, clock to TUSB3410, and enable - } else if (ret == 2) { - dputs("\nalmost BSL only one RTS change\n"); - } else if (ret > 2) { // reset released after more than two tst transisitions - // We could write a BSL, a nice exercise for a Sunday afternoon. - dputs("\nBSL\n"); - //call_BSL(); // once you are done uncomment ;-) - } else { // we come here after DTR high (release reset) - dputs("\nWarmstart\n"); - } -#elif (platform == donbfet) - extern void donbfet_reboot(void); - void (*reboot_function)(void) = donbfet_reboot; + if (ret == 0) { + coldstart(); // basic hardware setup, clock to TUSB3410, and enable + } else if (ret == 2) { + dputs("\nalmost BSL only one RTS change\n"); + } else if (ret > 2) { // reset released after more than two tst transisitions + // We could write a BSL, a nice exercise for a Sunday afternoon. + dputs("\nBSL\n"); + //call_BSL(); // once you are done uncomment ;-) + } else { // we come here after DTR high (release reset) + dputs("\nWarmstart\n"); + } +#endif + +#if (platform == donbfet) + extern void donbfet_reboot(void); + void (*reboot_function)(void) = donbfet_reboot; #else - void (*reboot_function)(void) = (void *) 0xFFFE; + void (*reboot_function)(void) = (void *) 0xFFFE; #endif - init(); - - txstring(MONITOR,OK,"http://goodfet.sf.net/"); - //txstring(0xab,0xcd,"http://goodfet.sf.net/"); - - - //Command loop. There's no end! - while(1) + init(); + + txstring(MONITOR,OK,"http://goodfet.sf.net/"); + //txstring(0xab,0xcd,"http://goodfet.sf.net/"); + + + //Command loop. There's no end! + while(1){ + //Magic 3 + app = serial_rx(); + + // If the app is the reset byte (0x80) increment and loop + if (app == RESET){ + reset_count++; + + if (reset_count > 4){ + // We could trigger the WDT with either: + // WDTCTL = 0; + // or + // WDTCTL = WDTPW + WDTCNTCL + WDTSSEL + 0x00; + // but instead we'll jump to our reboot function pointer + (*reboot_function)(); + debugstr("Rebooting not supported on this platform."); + } + + continue; + }else { + reset_count = 0; + } + + verb = serial_rx(); + len = rxword(); + + //Read data, looking for buffer overflow. + if(len <= CMDDATALEN){ + for(i = 0; i < len; i++) { - //Magic 3 - app = serial_rx(); - - // If the app is the reset byte (0x80) increment and loop - if (app == RESET) - { - reset_count++; - - if (reset_count > 4) - { - // We could trigger the WDT with either: - // WDTCTL = 0; - // or - // WDTCTL = WDTPW + WDTCNTCL + WDTSSEL + 0x00; - // but instead we'll jump to our reboot function pointer -#ifdef MSP430 -# if (platform == tilaunchpad) - // do we really need this, we do not want to reset the TUSB3410 - dputs("reset_count>4\n"); - - //longjmp(warmstart,111); - goto warmstart; - -# else - (*reboot_function)(); -# endif -#else /* !MSP430 */ -# if (platform == donbfet) - (*reboot_function)(); -# else - debugstr("Rebooting not supported on this platform."); -# endif -#endif - } - - continue; - } - else - { - reset_count = 0; - } - - verb = serial_rx(); - len = rxword(); - - //Read data, looking for buffer overflow. - if(len <= CMDDATALEN) - { - for(i = 0; i < len; i++) - { - cmddata[i] = serial_rx(); - } - - handle(app,verb,len); - } - else - { - //Listen to the blaberring. - for(i = 0; i < len; i++) - serial_rx(); - - //Reply with an error. - debugstr("Buffer length exceeded."); - txdata(MONITOR,NOK,0); - } + cmddata[i] = serial_rx(); } + + handle(app,verb,len); + }else { + //Listen to the blaberring. + for(i = 0; i < len; i++) + serial_rx(); + + //Reply with an error. + debugstr("Buffer length exceeded."); + txdata(MONITOR,NOK,0); + } + } } -- 2.20.1