Subversion Repositories FlightCtrl

Rev

Rev 1840 | Rev 1855 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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