Restoring 16-bit MSP430 support.
[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   switch(app){\r
40   case MONITOR:\r
41     monitorhandle(app,verb,len);\r
42     break;\r
43   case SPI:\r
44     spihandle(app,verb,len);\r
45     break;\r
46   case I2CAPP:\r
47     i2chandle(app,verb,len);\r
48     break;\r
49   case CHIPCON:\r
50     cchandle(app,verb,len);\r
51     break;\r
52   case JTAG:\r
53     jtaghandle(app,verb,len);\r
54     break;\r
55   case JTAG430: //Also JTAG430X, JTAG430X2\r
56     jtag430x2handle(app,verb,len);\r
57     break;\r
58   default:\r
59     #ifdef HANDLEOTHER\r
60     HANDLEOTHER(app,verb,len);\r
61     #else\r
62     txdata(app,NOK,0);\r
63     #endif\r
64     break;\r
65   }\r
66 }\r
67 \r
68 //! Main loop.\r
69 int main(void)\r
70 {\r
71   volatile unsigned int i;\r
72   unsigned char app, verb, len;\r
73   \r
74   init();\r
75   \r
76   txstring(MONITOR,OK,"http://goodfet.sf.net/");\r
77   \r
78   //Command loop.  There's no end!\r
79   while(1){\r
80     //Magic 3\r
81     app=serial_rx();\r
82     verb=serial_rx();\r
83     len=serial_rx();\r
84     \r
85     //Read data, if any\r
86     for(i=0;i<len;i++){\r
87       cmddata[i]=serial_rx();\r
88     }\r
89     handle(app,verb,len);\r
90   }\r
91 }\r
92 \r