Platform changes.
[goodfet] / firmware / include / sbw.h
1 /*! \file sbw.h
2   \author Travis Goodspeed and Mark Rages
3   \brief Spy-Bi-Wire Stuff
4 */
5
6 #ifndef SBW_H
7 #define SBW_H
8
9 #include "app.h"
10 extern app_t const sbw_app;
11
12 #define SBW 0x17
13
14 #include "platform.h"
15 #include "command.h"
16 #include "app.h"
17
18 //IO Pins; these are for EZ430, not GoodFET/UIF
19 #define SBWTCK  BIT3
20 #define SBWTDIO BIT2
21
22 //This should be universal, move to jtag.h
23 #define TCKTOCK CLRTCK,SETTCK
24
25 //If SBW is defined, rewrite JTAG functions to be SBW.
26 #ifdef SBWREWRITE
27 #define jtagsetup sbwsetup
28
29 // I/O Redefintions
30 extern int tms, tdi, tdo;
31 #undef SETTMS
32 #define SETTMS tms=1
33 #undef CLRTMS
34 #define CLRTMS tms=0
35 #undef SETTDI
36 #define SETTDI tdi=1
37 #undef CLRTDI
38 #define CLRTDI tdi=0
39 #undef TCKTOCK
40 #define TCKTOCK clock_sbw()
41 #undef SETMOSI
42 #define SETMOSI SETTDI
43 #undef CLRMOSI
44 #define CLRMOSI CLRTDI
45 #undef READMISO
46 #define READMISO tdo
47
48 #endif
49
50 //! Enter SBW mode.
51 void sbwsetup();
52
53 //! Handle a SBW request.
54 void sbw_handler_fn(u8 app, u8 verb, u32 len);
55
56 //! Perform a SBW bit transaction.
57 void clock_sbw();
58 //! Set the TCLK line, performing a transaction.
59 void sbwSETTCLK();
60 //! Clear the line.
61 void sbwCLRTCLK();
62
63 // Macros
64 #define SBWCLK() do { \
65     SPIOUT &= ~SBWTCK; \
66     asm("nop");       \
67     asm("nop");       \
68     asm("nop");       \
69     SPIOUT |= SBWTCK;  \
70   } while (0)
71 #define SETSBWIO(x) do {                        \
72   if (x)                                        \
73     SPIOUT |= SBWTDIO;                          \
74   else                                          \
75     SPIOUT &= ~SBWTDIO;                         \
76   } while (0)
77 #undef RESTORETCLK
78 #define RESTORETCLK do {                        \
79     if(savedtclk) {                             \
80       SETTCLK;                                  \
81     } else {                                    \
82       CLRTCLK;                                  \
83     }                                           \
84   } while (0);
85 #undef SETTCLK
86 #define SETTCLK do {                            \
87     sbwSETTCLK();                               \
88     savedtclk=1;                                \
89   } while (0);
90 #undef CLRTCLK
91 #define CLRTCLK do {                            \
92     sbwCLRTCLK();                               \
93     savedtclk=0;                                \
94   } while (0); 
95
96 #undef SAVETCLK
97 //Do nothing for this.
98 #define SAVETCLK 
99
100 #endif // SBW_H
101