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