MSP430 test cases, stable poking of RAM.
[goodfet] / firmware / goodfet.c
1 /*! \file goodfet.c\r
2   \author Travis Goodspeed\r
3   \brief Main module.\r
4   \r
5   This is the main module of the GoodFET, which calls the initialization\r
6   routines and delegates commands to the various applications.\r
7 */\r
8 \r
9 \r
10 #include "platform.h"\r
11 #include "command.h"\r
12 #include "apps.h"\r
13 \r
14 \r
15 \r
16 //LED on P1.0\r
17 //IO on P5\r
18 \r
19 //! Initialize registers and all that jazz.\r
20 void init(){\r
21   WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer\r
22   \r
23   //LED out and on.\r
24   PLEDDIR |= PLEDPIN;\r
25   PLEDOUT |= PLEDPIN;\r
26   \r
27   //Setup clocks, unique to each '430.\r
28   msp430_init_dco();\r
29   msp430_init_uart();\r
30   \r
31   //Enable Interrupts.\r
32   //eint();\r
33 }\r
34 \r
35 //! Handle a command.\r
36 void handle(unsigned char app,\r
37             unsigned char verb,\r
38             unsigned char len){\r
39   //debugstr("GoodFET");\r
40   switch(app){\r
41   case MONITOR:\r
42     monitorhandle(app,verb,len);\r
43     break;\r
44   case SPI:\r
45     spihandle(app,verb,len);\r
46     break;\r
47   case I2CAPP:\r
48     i2chandle(app,verb,len);\r
49     break;\r
50   case CHIPCON:\r
51     cchandle(app,verb,len);\r
52     break;\r
53   case JTAG:\r
54     jtaghandle(app,verb,len);\r
55     break;\r
56   case JTAG430: //Also JTAG430X, JTAG430X2\r
57     jtag430x2handle(app,verb,len);\r
58     break;\r
59   default:\r
60     #ifdef HANDLEOTHER\r
61     HANDLEOTHER(app,verb,len);\r
62     #else\r
63     txdata(app,NOK,0);\r
64     #endif\r
65     break;\r
66   }\r
67 }\r
68 \r
69 //! Main loop.\r
70 int main(void)\r
71 {\r
72   volatile unsigned int i;\r
73   unsigned char app, verb, len;\r
74   \r
75   init();\r
76   \r
77   txstring(MONITOR,OK,"http://goodfet.sf.net/");\r
78   \r
79   //Command loop.  There's no end!\r
80   while(1){\r
81     //Magic 3\r
82     app=serial_rx();\r
83     verb=serial_rx();\r
84     len=serial_rx();\r
85     \r
86     //Read data, if any\r
87     for(i=0;i<len;i++){\r
88       cmddata[i]=serial_rx();\r
89     }\r
90     handle(app,verb,len);\r
91   }\r
92 }\r
93 \r