Rev 1855 | Rev 1880 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1855 | Rev 1856 | ||
---|---|---|---|
1 | // ######################## SPI - FlightCtrl ################### |
1 | // ######################## SPI - FlightCtrl ################### |
2 | #ifndef _SPI_H |
2 | #ifndef _SPI_H |
3 | #define _SPI_H |
3 | #define _SPI_H |
4 | 4 | ||
5 | #include <util/delay.h> |
5 | #include <util/delay.h> |
6 | #include "vector.h" |
6 | #include "vector.h" |
7 | 7 | ||
8 | #define USE_SPI_COMMUNICATION |
8 | #define USE_SPI_COMMUNICATION |
9 | 9 | ||
10 | //----------------------------------------- |
10 | //----------------------------------------- |
11 | #define DDR_SPI DDRB |
11 | #define DDR_SPI DDRB |
12 | #define SLAVE_SELECT_DDR_PORT DDRC |
12 | #define SLAVE_SELECT_DDR_PORT DDRC |
13 | #define SLAVE_SELECT_PORT PORTC |
13 | #define SLAVE_SELECT_PORT PORTC |
14 | 14 | ||
15 | #if defined(__AVR_ATmega1284P__) |
15 | #if defined(__AVR_ATmega1284P__) |
16 | #define DD_SS PORTB4 |
16 | #define DD_SS PORTB4 |
17 | #define DD_SCK PORTB7 |
17 | #define DD_SCK PORTB7 |
18 | #define DD_MOSI PORTB5 |
18 | #define DD_MOSI PORTB5 |
19 | #define DD_MISO PORTB6 |
19 | #define DD_MISO PORTB6 |
20 | #define SPI_SLAVE_SELECT PORTC5 |
20 | #define SPI_SLAVE_SELECT PORTC5 |
21 | #else |
21 | #else |
22 | #define DD_SS PB4 |
22 | #define DD_SS PB4 |
23 | #define DD_SCK PB7 |
23 | #define DD_SCK PB7 |
24 | #define DD_MOSI PB5 |
24 | #define DD_MOSI PB5 |
25 | #define DD_MISO PB6 |
25 | #define DD_MISO PB6 |
26 | #define SPI_SLAVE_SELECT PC5 |
26 | #define SPI_SLAVE_SELECT PC5 |
27 | #endif |
27 | #endif |
28 | 28 | ||
29 | // for compatibility reasons gcc3.x <-> gcc4.x |
29 | // for compatibility reasons gcc3.x <-> gcc4.x |
30 | #ifndef SPCR |
30 | #ifndef SPCR |
31 | #define SPCR SPCR0 |
31 | #define SPCR SPCR0 |
32 | #endif |
32 | #endif |
33 | #ifndef SPE |
33 | #ifndef SPE |
34 | #define SPE SPE0 |
34 | #define SPE SPE0 |
35 | #endif |
35 | #endif |
36 | #ifndef MSTR |
36 | #ifndef MSTR |
37 | #define MSTR MSTR0 |
37 | #define MSTR MSTR0 |
38 | #endif |
38 | #endif |
39 | #ifndef SPR1 |
39 | #ifndef SPR1 |
40 | #define SPR1 SPR01 |
40 | #define SPR1 SPR01 |
41 | #endif |
41 | #endif |
42 | #ifndef SPR0 |
42 | #ifndef SPR0 |
43 | #define SPR0 SPR00 |
43 | #define SPR0 SPR00 |
44 | #endif |
44 | #endif |
45 | #ifndef SPIE |
45 | #ifndef SPIE |
46 | #define SPIE SPIE0 |
46 | #define SPIE SPIE0 |
47 | #endif |
47 | #endif |
48 | #ifndef SPDR |
48 | #ifndef SPDR |
49 | #define SPDR SPDR0 |
49 | #define SPDR SPDR0 |
50 | #endif |
50 | #endif |
51 | #ifndef SPIF |
51 | #ifndef SPIF |
52 | #define SPIF SPIF0 |
52 | #define SPIF SPIF0 |
53 | #endif |
53 | #endif |
54 | #ifndef SPSR |
54 | #ifndef SPSR |
55 | #define SPSR SPSR0 |
55 | #define SPSR SPSR0 |
56 | #endif |
56 | #endif |
57 | // ------------------------- |
57 | // ------------------------- |
58 | 58 | ||
59 | #define SPI_FCCMD_USER 10 |
59 | #define SPI_FCCMD_USER 10 |
60 | #define SPI_FCCMD_STICK 11 |
60 | #define SPI_FCCMD_STICK 11 |
61 | #define SPI_FCCMD_MISC 12 |
61 | #define SPI_FCCMD_MISC 12 |
62 | #define SPI_FCCMD_PARAMETER1 13 |
62 | #define SPI_FCCMD_PARAMETER1 13 |
63 | #define SPI_FCCMD_VERSION 14 |
63 | #define SPI_FCCMD_VERSION 14 |
64 | #define SPI_FCCMD_SERVOS 15 |
64 | #define SPI_FCCMD_SERVOS 15 |
65 | #define SPI_FCCMD_ACCU 16 |
65 | #define SPI_FCCMD_ACCU 16 |
66 | 66 | ||
67 | struct str_ToNaviCtrl |
67 | struct str_ToNaviCtrl |
68 | { |
68 | { |
69 | unsigned char Sync1, Sync2; |
69 | unsigned char Sync1, Sync2; |
70 | unsigned char Command; |
70 | unsigned char Command; |
71 | signed int IntegralNick; |
71 | signed int IntegralNick; |
72 | signed int IntegralRoll; |
72 | signed int IntegralRoll; |
73 | signed int AccNick; |
73 | signed int AccNick; |
74 | signed int AccRoll; |
74 | signed int AccRoll; |
75 | signed int GyroCompass; |
75 | signed int GyroCompass; |
76 | signed int GyroNick; |
76 | signed int GyroNick; |
77 | signed int GyroRoll; |
77 | signed int GyroRoll; |
78 | signed int GyroGier; |
78 | signed int GyroGier; |
79 | unsigned int FCStatus; |
79 | unsigned int FCStatus; |
80 | union |
80 | union |
81 | { |
81 | { |
82 | unsigned char Byte[12]; |
82 | unsigned char Byte[12]; |
83 | char sByte[12]; |
83 | char sByte[12]; |
84 | unsigned int Int[6]; |
84 | unsigned int Int[6]; |
85 | int sInt[6]; |
85 | int sInt[6]; |
86 | unsigned long Long[3]; |
86 | unsigned long Long[3]; |
87 | long sLong[3]; |
87 | long sLong[3]; |
88 | float Float[3]; |
88 | float Float[3]; |
89 | } Param; |
89 | } Param; |
90 | unsigned char Chksum; |
90 | unsigned char Chksum; |
91 | }; |
91 | }; |
92 | 92 | ||
93 | #define SPI_NCCMD_KALMAN 103 |
93 | #define SPI_NCCMD_KALMAN 103 |
94 | #define SPI_NCCMD_VERSION 104 |
94 | #define SPI_NCCMD_VERSION 104 |
95 | #define SPI_NCCMD_GPSINFO 105 |
95 | #define SPI_NCCMD_GPSINFO 105 |
96 | 96 | ||
97 | struct str_FromNaviCtrl |
97 | struct str_FromNaviCtrl |
98 | { |
98 | { |
99 | unsigned char Command; |
99 | unsigned char Command; |
100 | signed int GPS_Nick; |
100 | signed int GPS_Nick; |
101 | signed int GPS_Roll; |
101 | signed int GPS_Roll; |
102 | signed int GPS_Gier; |
102 | signed int GPS_Gier; |
103 | signed int CompassValue; |
103 | signed int CompassValue; |
104 | // signed int MagVecX; |
104 | signed int MagVecX; |
105 | // signed int MagVecY; |
105 | signed int MagVecY; |
106 | // signed int MagVecZ; |
106 | signed int MagVecZ; |
107 | signed int Status; |
107 | signed int Status; |
108 | unsigned int BeepTime; |
108 | unsigned int BeepTime; |
109 | union |
109 | union |
110 | { |
110 | { |
111 | unsigned char Byte[12]; |
111 | unsigned char Byte[12]; |
112 | char sByte[12]; |
112 | char sByte[12]; |
113 | unsigned int Int[6]; |
113 | unsigned int Int[6]; |
114 | int sInt[6]; |
114 | int sInt[6]; |
115 | unsigned long Long[3]; |
115 | unsigned long Long[3]; |
116 | long sLong[3]; |
116 | long sLong[3]; |
117 | float Float[3]; |
117 | float Float[3]; |
118 | } Param; |
118 | } Param; |
119 | unsigned char Chksum; |
119 | unsigned char Chksum; |
120 | }; |
120 | }; |
121 | 121 | ||
122 | struct str_FromNaviCtrl_Value |
122 | struct str_FromNaviCtrl_Value |
123 | { |
123 | { |
124 | signed char Kalman_K; |
124 | signed char Kalman_K; |
125 | signed char Kalman_MaxDrift; |
125 | signed char Kalman_MaxDrift; |
126 | signed char Kalman_MaxFusion; |
126 | signed char Kalman_MaxFusion; |
127 | unsigned char SerialDataOkay; |
127 | unsigned char SerialDataOkay; |
128 | signed char GpsZ; |
128 | signed char GpsZ; |
129 | }; |
129 | }; |
130 | 130 | ||
131 | struct str_SPI_VersionInfo |
131 | struct str_SPI_VersionInfo |
132 | { |
132 | { |
133 | unsigned char Major; |
133 | unsigned char Major; |
134 | unsigned char Minor; |
134 | unsigned char Minor; |
135 | unsigned char Patch; |
135 | unsigned char Patch; |
136 | unsigned char Compatible; |
136 | unsigned char Compatible; |
137 | unsigned char Hardware; |
137 | unsigned char Hardware; |
138 | }; |
138 | }; |
139 | 139 | ||
140 | // Satfix types for GPSData.SatFix |
140 | // Satfix types for GPSData.SatFix |
141 | #define SATFIX_NONE 0x00 |
141 | #define SATFIX_NONE 0x00 |
142 | #define SATFIX_DEADRECKOING 0x01 |
142 | #define SATFIX_DEADRECKOING 0x01 |
143 | #define SATFIX_2D 0x02 |
143 | #define SATFIX_2D 0x02 |
144 | #define SATFIX_3D 0x03 |
144 | #define SATFIX_3D 0x03 |
145 | #define SATFIX_GPS_DEADRECKOING 0x04 |
145 | #define SATFIX_GPS_DEADRECKOING 0x04 |
146 | #define SATFIX_TIMEONLY 0x05 |
146 | #define SATFIX_TIMEONLY 0x05 |
147 | // Flags for interpretation of the GPSData.Flags |
147 | // Flags for interpretation of the GPSData.Flags |
148 | #define FLAG_GPSFIXOK 0x01 // (i.e. within DOP & ACC Masks) |
148 | #define FLAG_GPSFIXOK 0x01 // (i.e. within DOP & ACC Masks) |
149 | #define FLAG_DIFFSOLN 0x02 // (is DGPS used) |
149 | #define FLAG_DIFFSOLN 0x02 // (is DGPS used) |
150 | #define FLAG_WKNSET 0x04 // (is Week Number valid) |
150 | #define FLAG_WKNSET 0x04 // (is Week Number valid) |
151 | #define FLAG_TOWSET 0x08 // (is Time of Week valid) |
151 | #define FLAG_TOWSET 0x08 // (is Time of Week valid) |
152 | 152 | ||
153 | struct str_GPSInfo |
153 | struct str_GPSInfo |
154 | { |
154 | { |
155 | unsigned char Flags; // Status Flags |
155 | unsigned char Flags; // Status Flags |
156 | unsigned char NumOfSats; // number of satelites |
156 | unsigned char NumOfSats; // number of satelites |
157 | unsigned char SatFix; // type of satfix |
157 | unsigned char SatFix; // type of satfix |
158 | unsigned char Speed; // m/sek |
158 | unsigned char Speed; // m/sek |
159 | unsigned int HomeDistance; // distance to Home in dm |
159 | unsigned int HomeDistance; // distance to Home in dm |
160 | int HomeBearing; // bearing to home in deg |
160 | int HomeBearing; // bearing to home in deg |
161 | }; |
161 | }; |
162 | 162 | ||
163 | 163 | ||
164 | #ifdef USE_SPI_COMMUNICATION |
164 | #ifdef USE_SPI_COMMUNICATION |
165 | extern struct str_GPSInfo GPSInfo; |
165 | extern struct str_GPSInfo GPSInfo; |
166 | extern struct str_SPI_VersionInfo NC_Version; |
166 | extern struct str_SPI_VersionInfo NC_Version; |
167 | extern struct str_FromNaviCtrl_Value FromNaviCtrl_Value; |
167 | extern struct str_FromNaviCtrl_Value FromNaviCtrl_Value; |
168 | extern struct str_ToNaviCtrl ToNaviCtrl; |
168 | extern struct str_ToNaviCtrl ToNaviCtrl; |
169 | extern struct str_FromNaviCtrl FromNaviCtrl; |
169 | extern struct str_FromNaviCtrl FromNaviCtrl; |
170 | extern unsigned char SPI_CommandCounter,NaviDataOkay; |
170 | extern unsigned char SPI_CommandCounter,NaviDataOkay; |
171 | extern signed char FromNC_Rotate_C, FromNC_Rotate_S; |
171 | extern signed char FromNC_Rotate_C, FromNC_Rotate_S; |
172 | extern unsigned char NC_ErrorCode; |
172 | extern unsigned char NC_ErrorCode; |
173 | extern void SPI_MasterInit(void); |
173 | extern void SPI_MasterInit(void); |
174 | extern void SPI_StartTransmitPacket(void); |
174 | extern void SPI_StartTransmitPacket(void); |
175 | extern void UpdateSPI_Buffer(void); |
175 | extern void UpdateSPI_Buffer(void); |
176 | extern void SPI_TransmitByte(void); |
176 | extern void SPI_TransmitByte(void); |
177 | extern signed int POI_KameraNick; |
177 | extern signed int POI_KameraNick; |
178 | extern vector16_t MagVec; |
178 | extern vector16_t MagVec; |
179 | #else |
179 | #else |
180 | 180 | ||
181 | 181 | ||
182 | // -------------------------------- Dummy ----------------------------------------- |
182 | // -------------------------------- Dummy ----------------------------------------- |
183 | #define SPI_MasterInit() ; |
183 | #define SPI_MasterInit() ; |
184 | #define SPI_StartTransmitPacket() ; |
184 | #define SPI_StartTransmitPacket() ; |
185 | #define UpdateSPI_Buffer() ; |
185 | #define UpdateSPI_Buffer() ; |
186 | #define SPI_TransmitByte() ; |
186 | #define SPI_TransmitByte() ; |
187 | #endif |
187 | #endif |
188 | 188 | ||
189 | 189 | ||
190 | #endif |
190 | #endif |
191 | 191 |