Subversion Repositories FlightCtrl

Rev

Details | Last modification | View Log | RSS feed

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