More work toward an AVR port.
authortravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Sun, 17 Apr 2011 21:29:30 +0000 (21:29 +0000)
committertravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Sun, 17 Apr 2011 21:29:30 +0000 (21:29 +0000)
git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@994 12e2690d-a6be-4b82-a7b7-67c4a43b65c8

firmware/Makefile
firmware/goodfet.c
firmware/include/msp430.h [new file with mode: 0644]
firmware/include/platform.h
firmware/lib/msp430.c [new file with mode: 0644]

index 11eaddb..643163d 100644 (file)
@@ -1,9 +1,11 @@
 
 #include `uname`.mak
 
 #include `uname`.mak
-GOODFET?=/dev/ttyUSB0
+GOODFET?=/dev/tty.usbser*
 
 
+#For Arduino,
+#BSL?=avrdude -V -F -c stk500v1 -p m328p -b 57600 -P /dev/tty.usbserial-* -U flash:w:blink.hex
 #For tos-bsl, use --invert-reset --invert-test
 #For tos-bsl, use --invert-reset --invert-test
-BSL?=goodfet.bsl --speed=38400
+MSP430BSL?=goodfet.bsl --speed=38400
 
 #One of these should be defined explicitly.
 #Default removed because of confusion.
 
 #One of these should be defined explicitly.
 #Default removed because of confusion.
@@ -11,21 +13,24 @@ BSL?=goodfet.bsl --speed=38400
 #mcu?=msp430x2274
 #mcu?=msp430x2618
 #mcu?=msp430x1612
 #mcu?=msp430x2274
 #mcu?=msp430x2618
 #mcu?=msp430x1612
+#mcu?=atmega168
 mcu?=RUNCONFIG
 
 mcu?=RUNCONFIG
 
-#platform=goodfet
-#platform=telosb
-#platform=z1
-#platform=nhbadge
-#platform=nhbadgeb
+#platform?=goodfet
+#platform?=telosb
+#platform?=z1
+#platform?=nhbadge
+#platform?=nhbadgeb
+#platofrm?=arduino
 platform?=goodfet
 
 #N.B., gcc WILL NOT BITCH if this file doesn't exist.
 platform?=goodfet
 
 #N.B., gcc WILL NOT BITCH if this file doesn't exist.
-#GCCINC=-T ldscripts/161x.x
-GCCINC=-T ldscripts/$(mcu).x
+GCCINC?=-T ldscripts/$(mcu).x
 
 
-CCEXTRA?=  -D$(mcu) -D$(platform) -Dplatform=$(platform) -DGCC $(GCCINC) -I include -I platforms
+#GCC?=avr-gcc
 GCC?=msp430-gcc
 GCC?=msp430-gcc
+
+CCEXTRA?=  -D$(mcu) -D$(platform) -Dplatform=$(platform) -DGCC $(GCCINC) -I include -I platforms
 CC=$(GCC) -Wall -Os -fno-strict-aliasing -g -mmcu=$(mcu)  $(CCEXTRA)
 
 # Available Applications
 CC=$(GCC) -Wall -Os -fno-strict-aliasing -g -mmcu=$(mcu)  $(CCEXTRA)
 
 # Available Applications
@@ -102,7 +107,7 @@ config ?= monitor chipcon spi jtag430 jtag430x2 avr openocd ccspi
 
 # Build the needed list of app and lib object files from the config
 apps= 
 
 # Build the needed list of app and lib object files from the config
 apps= 
-libs= lib/$(mcu).o lib/command.o lib/dco_calib.o lib/apps.o
+libs= lib/$(mcu).o lib/command.o lib/dco_calib.o lib/apps.o lib/msp430.o
 hdrs=
 ERR=
 
 hdrs=
 ERR=
 
@@ -315,14 +320,17 @@ goodfet.hex: goodfet
 run:
        ../client/goodfet.msp430 test
 
 run:
        ../client/goodfet.msp430 test
 
+avrinstall: $(app).hex
+       #to be merged
+       avrdude -V -F -c stk500v1 -p m328p -b 57600 -P $(GOODFET) -U flash:w:$(app).hex
 install: $(app).hex
 install: $(app).hex
-       $(BSL) -e -p $(app).hex 
+       $(MSP430BSL) -e -p $(app).hex 
 installinfo:
 installinfo:
-       $(BSL) -P $(app).hex -p info.txt || true  #MSP430F2xx targets only, inelegant.
+       $(MSP430BSL) -P $(app).hex -p info.txt || true  #MSP430F2xx targets only, inelegant.
 verify:
 verify:
-       $(BSL) -P $(app).hex -v $(app).hex
+       $(MSP430BSL) -P $(app).hex -v $(app).hex
 dumpinfo:
 dumpinfo:
-       $(BSL) --dumpinfo
+       $(MSP430BSL) --dumpinfo
 $(app).c: config builddate appsfiles err
 $(app): $(libs) $(apps)
 $(app).hex: $(app)
 $(app).c: config builddate appsfiles err
 $(app): $(libs) $(apps)
 $(app).hex: $(app)
@@ -330,7 +338,7 @@ $(app).hex: $(app)
 m4s: $(app).hex
        msp430-objdump -D -m msp430 $(app).hex | m4s init
 erase:
 m4s: $(app).hex
        msp430-objdump -D -m msp430 $(app).hex | m4s init
 erase:
-       $(BSL) -e 
+       $(MSP430BSL) -e 
 clean:
        rm -f $(app) $(app).hex $(libs) $(apps) lib/apps.c include/config.h include/builddate.h include/apps.h
 docs:
 clean:
        rm -f $(app) $(app).hex $(libs) $(apps) lib/apps.c include/config.h include/builddate.h include/apps.h
 docs:
index b9c500c..5d33b39 100644 (file)
 #define RESET 0x80      // not a real app -- causes firmware to reset
 #define DEBUGAPP 0xFF
 
 #define RESET 0x80      // not a real app -- causes firmware to reset
 #define DEBUGAPP 0xFF
 
-//! Initialize registers and all that jazz.
-void init()
-{
-       WDTCTL = WDTPW + WDTHOLD;                                       // Stop watchdog timer
-
-       //LED out and on.
-       PLEDDIR |= PLEDPIN;
-       PLEDOUT &= ~PLEDPIN;
-
-
-       /* P5.0 out and low; this is chosen for the PIC app (in which P5.0
-        is !MCLR) to ensure that an attached PIC chip, if present, is
-        immediately driven to reset state. A brief explanation of why this
-        is important follows.
-
-       At least dsPIC33F and PIC24H --and very likely other 16-bit PIC
-       families-- draw a large amount of current when running, especially
-       when using a fast clock: from 60 mA up to approx. 90 mA.  If the
-       PIC target begins to run before the client can request a new ICSP
-       session, which requires much less current (e.g., less than 2 mA),
-       then the MSP430 chip on the GoodFET will fail to start and the FTDI
-       may have trouble communicating with the client. The latter likely
-       relates to the FTDI on-chip 3V3 regulator being specified up to
-       only 50 mA. */
-
-
-       //P5REN &= ~BIT0; //DO NOT UNCOMMENT.  Breaks GF1x support.
-
-       //This will have to be cut soon.        Use pulling resistors instead.
-       /*
-       P5DIR |= BIT0;
-       P5OUT &= ~BIT0;
-       */
-
-       //Setup clocks, unique to each '430.
-       msp430_init_dco();
-       msp430_init_uart();
-
-       //DAC should be at full voltage if it exists.
-#ifdef DAC12IR
-       //glitchvoltages(0xfff,0xfff);
-       ADC12CTL0 = REF2_5V + REFON;                                    // Internal 2.5V ref on
-       //for(i=0;i!=0xFFFF;i++) asm("nop"); //DO NOT UNCOMMENT, breaks GCC4
-       DAC12_0CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // Int ref gain 1
-       DAC12_0DAT = 0xFFF; //Max voltage 0xfff
-       DAC12_1CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // Int ref gain 1
-       DAC12_1DAT = 0x000; //Min voltage 0x000
+//! General init function, calls platform-specific one.
+void init(){
+#ifdef MSP430
+  msp430_init();
+#else
+#warning "No init() routine for this platform!"
 #endif
 
 #endif
 
-       /** FIXME
-         
-         This part is really ugly.  GSEL (P5.7) must be high to select
-         normal voltage, but a lot of applications light to swing it low
-         to be a nuissance.  To get around this, we assume that anyone
-         with a glitching FET will also have a DAC, then we set that DAC
-         to a high voltage.
-         
-         At some point, each target must be sanitized to show that it
-         doesn't clear P5OUT or P5DIR.
-       */
-       P5DIR|=BIT7; P5OUT=BIT7; //Normal Supply
-       //P5DIR&=~BIT7; //Glitch Supply
-
-       //Enable Interrupts.
-       //eint();
-       
 #ifdef INITPLATFORM
 #ifdef INITPLATFORM
-       INITPLATFORM
+  INITPLATFORM
 #endif
 }
 
 
 #endif
 }
 
 
+
 //! Handle a command.
 void handle(uint8_t const app,
                        uint8_t const verb,
 //! Handle a command.
 void handle(uint8_t const app,
                        uint8_t const verb,
diff --git a/firmware/include/msp430.h b/firmware/include/msp430.h
new file mode 100644 (file)
index 0000000..746ae51
--- /dev/null
@@ -0,0 +1,3 @@
+
+void msp430_init();
+
index d1efb89..071e30f 100644 (file)
@@ -15,7 +15,7 @@
 #include <io.h>
 #include <signal.h>
 #include <iomacros.h>
 #include <io.h>
 #include <signal.h>
 #include <iomacros.h>
-
+#include "msp430.h"
 #endif
 
 #include "config.h"
 #endif
 
 #include "config.h"
diff --git a/firmware/lib/msp430.c b/firmware/lib/msp430.c
new file mode 100644 (file)
index 0000000..3a71e14
--- /dev/null
@@ -0,0 +1,85 @@
+/*! \file msp430.c
+  \author Travis Goodspeed
+  \brief MSP430-generic functions.
+*/
+
+
+//Silently be empty if not an MSP430.
+#ifdef MSP430
+
+
+#include "platform.h"
+#include "command.h"
+#include "apps.h"
+#include "glitch.h"
+
+
+//! Initialize MSP430 registers and all that jazz.
+void msp430_init(){
+       WDTCTL = WDTPW + WDTHOLD;                                       // Stop watchdog timer
+
+       //LED out and on.
+       PLEDDIR |= PLEDPIN;
+       PLEDOUT &= ~PLEDPIN;
+
+
+       /* P5.0 out and low; this is chosen for the PIC app (in which P5.0
+        is !MCLR) to ensure that an attached PIC chip, if present, is
+        immediately driven to reset state. A brief explanation of why this
+        is important follows.
+
+       At least dsPIC33F and PIC24H --and very likely other 16-bit PIC
+       families-- draw a large amount of current when running, especially
+       when using a fast clock: from 60 mA up to approx. 90 mA.  If the
+       PIC target begins to run before the client can request a new ICSP
+       session, which requires much less current (e.g., less than 2 mA),
+       then the MSP430 chip on the GoodFET will fail to start and the FTDI
+       may have trouble communicating with the client. The latter likely
+       relates to the FTDI on-chip 3V3 regulator being specified up to
+       only 50 mA. */
+
+
+       //P5REN &= ~BIT0; //DO NOT UNCOMMENT.  Breaks GF1x support.
+
+       //This will have to be cut soon.        Use pulling resistors instead.
+       /*
+       P5DIR |= BIT0;
+       P5OUT &= ~BIT0;
+       */
+
+       //Setup clocks, unique to each '430.
+       msp430_init_dco();
+       msp430_init_uart();
+
+       //DAC should be at full voltage if it exists.
+#ifdef DAC12IR
+       //glitchvoltages(0xfff,0xfff);
+       ADC12CTL0 = REF2_5V + REFON;                                    // Internal 2.5V ref on
+       //for(i=0;i!=0xFFFF;i++) asm("nop"); //DO NOT UNCOMMENT, breaks GCC4
+       DAC12_0CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // Int ref gain 1
+       DAC12_0DAT = 0xFFF; //Max voltage 0xfff
+       DAC12_1CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // Int ref gain 1
+       DAC12_1DAT = 0x000; //Min voltage 0x000
+#endif
+
+       /** FIXME
+         
+         This part is really ugly.  GSEL (P5.7) must be high to select
+         normal voltage, but a lot of applications light to swing it low
+         to be a nuissance.  To get around this, we assume that anyone
+         with a glitching FET will also have a DAC, then we set that DAC
+         to a high voltage.
+         
+         At some point, each target must be sanitized to show that it
+         doesn't clear P5OUT or P5DIR.
+       */
+       P5DIR|=BIT7; P5OUT=BIT7; //Normal Supply
+       //P5DIR&=~BIT7; //Glitch Supply
+
+       //Enable Interrupts.
+       //eint();
+
+}
+
+//MSP430
+#endif