--- /dev/null
+
+PORT=/dev/ttyUSB0
+BSL=tos-bsl --invert-reset --invert-test -c $(PORT)
+
+#mcu=msp430x1611
+mcu=msp430x1612
+
+#ldscript is wonky
+GCCINC=-T ../ldscripts/161x.x
+
+CC=msp430-gcc -g -mmcu=$(mcu) -DGCC $(GCCINC) -I ../include
+
+apps= monitor/monitor.c
+libs= ../lib/msp430f1612.c ../lib/command.c
+app=goodfet
+
+install: $(app)
+ $(BSL) -e -p $(app)
+ $(BSL) -P $(app) -r
+$(app): $(app).c $(libs) $(apps)
+erase:
+ $(BSL) -e
+clean:
+ rm -f $(app)
--- /dev/null
+//GOODFET Echo test.\r
+\r
+\r
+#include "platform.h"\r
+#include "command.h"\r
+#include "apps.h"\r
+\r
+#include <signal.h>\r
+#include <io.h>\r
+#include <iomacros.h>\r
+\r
+\r
+//LED on P1.0\r
+//IO on P5\r
+\r
+//! Initialize registers and all that jazz.\r
+void init(){\r
+ volatile unsigned int i;\r
+ WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer\r
+ \r
+ //LED and TX OUT\r
+ PLEDDIR |= PLEDPIN;\r
+ \r
+ msp430_init_dco();\r
+ msp430_init_uart();\r
+ \r
+ //Enable Interrupts.\r
+ //eint();\r
+}\r
+\r
+//! Handle a command.\r
+void handle(unsigned char app,\r
+ unsigned char verb,\r
+ unsigned char len){\r
+ switch(app){\r
+ case MONITOR:\r
+ monitorhandle(app,verb,len);\r
+ break;\r
+ default:\r
+ txdata(app,NOK,0);\r
+ }\r
+}\r
+\r
+//! Main loop.\r
+int main(void)\r
+{\r
+ volatile unsigned int i;\r
+ unsigned char app, verb, len;\r
+ \r
+ init();\r
+ \r
+ //Command loop. There's no end!\r
+ while(1){\r
+ //Ready\r
+ txdata(MONITOR,OK,0);\r
+ \r
+ //Magic 3\r
+ app=serial_rx();\r
+ verb=serial_rx();\r
+ len=serial_rx();\r
+ //Read data, if any\r
+ for(i=0;i<len;i++){\r
+ cmddata[i]=serial_rx();\r
+ }\r
+ handle(app,verb,len);\r
+ }\r
+ \r
+ //while(1) serial_tx(serial_rx());\r
+ while(1) serial_tx(serial_rx());\r
+ \r
+ while(1){\r
+ i = 10000;\r
+ while(i--);\r
+ \r
+ PLEDOUT^=PLEDPIN; // Blink\r
+ }\r
+}\r
+\r
--- /dev/null
+#include "command.h"
+
+//! Handles a monitor command.
+void monitorhandle(unsigned char app,
+ unsigned char verb,
+ unsigned char len){
+ switch(verb){
+ case PEEK:
+ cmddata[0]=memorybyte[cmddataword[0]];
+ txdata(app,verb,1);
+ break;
+ case POKE:
+ break;
+ }
+}
--- /dev/null
+//! Application stuff.
+
+#define MONITOR 0x00
+#define SPI 0x01
+#define I2C 0x02
+#define JTAG 0x10
+#define JTAG430 0x11
+#define CHIPCON 0x30
+#define SIF 0x31
+
--- /dev/null
+//! Command handling functions.
+
+//! Global data buffer.
+extern unsigned char cmddata[256];
+#define cmddataword ((unsigned int*) cmddata)
+#define memorybyte ((unsigned char*) 0)
+
+// Command prefixes
+#define READ 0x00
+#define WRITE 0x01
+#define PEEK 0x02
+#define POKE 0x03
+#define NOK 0x7E
+#define OK 0x7F
+
+//!Handle a command. Defined in goodfet.c
+void handle(unsigned char app,unsigned char verb,unsigned char len);
+
+//!Transmit data.
+void txdata(unsigned char app,
+ unsigned char verb,
+ unsigned char len);
--- /dev/null
+//! Different command handling functions.
+
+unsigned char cmddata[256];
+
+//!Transmit data.
+void txdata(unsigned char app,
+ unsigned char verb,
+ unsigned char len){
+ unsigned int i=0;
+ serial_tx(app);
+ serial_tx(verb);
+ serial_tx(len);
+ for(i=0;i<len;i++){
+ serial_tx(cmddata[i]);
+ }
+}