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