Subversion Repositories FlightCtrl

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
827 ingob 1
// ######################## SPI - FlightCtrl ###################
2
#ifndef _SPI_H
3
#define _SPI_H
4
 
5
#include <util/delay.h>
1852 killagreg 6
#include "vector.h"
827 ingob 7
 
1051 killagreg 8
#define USE_SPI_COMMUNICATION
827 ingob 9
 
10
//-----------------------------------------
11
#define DDR_SPI DDRB
1561 killagreg 12
#define SLAVE_SELECT_DDR_PORT   DDRC
13
#define SLAVE_SELECT_PORT       PORTC
827 ingob 14
 
1561 killagreg 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
 
1051 killagreg 29
// for compatibility reasons gcc3.x <-> gcc4.x
30
#ifndef SPCR
827 ingob 31
#define SPCR   SPCR0
1051 killagreg 32
#endif
33
#ifndef SPE
827 ingob 34
#define SPE   SPE0
1051 killagreg 35
#endif
36
#ifndef MSTR
827 ingob 37
#define MSTR   MSTR0
1051 killagreg 38
#endif
39
#ifndef SPR1
827 ingob 40
#define SPR1   SPR01
1051 killagreg 41
#endif
42
#ifndef SPR0
827 ingob 43
#define SPR0   SPR00
1051 killagreg 44
#endif
45
#ifndef SPIE
827 ingob 46
#define SPIE   SPIE0
1051 killagreg 47
#endif
48
#ifndef SPDR
827 ingob 49
#define SPDR   SPDR0
1051 killagreg 50
#endif
51
#ifndef SPIF
827 ingob 52
#define SPIF   SPIF0
1051 killagreg 53
#endif
54
#ifndef SPSR
827 ingob 55
#define SPSR   SPSR0
1051 killagreg 56
#endif
827 ingob 57
// -------------------------
58
 
1448 killagreg 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
1508 killagreg 65
#define SPI_FCCMD_ACCU                  16
991 ingob 66
 
827 ingob 67
struct str_ToNaviCtrl
68
{
1231 killagreg 69
        unsigned char Sync1, Sync2;
70
        unsigned char Command;
71
        signed int  IntegralNick;
72
        signed int  IntegralRoll;
73
        signed int  AccNick;
74
        signed int  AccRoll;
75
        signed int  GyroCompass;
76
        signed int  GyroNick;
77
        signed int  GyroRoll;
78
        signed int  GyroGier;
1852 killagreg 79
        unsigned int FCStatus;
1231 killagreg 80
        union
81
        {
1472 killagreg 82
                unsigned char Byte[12];
1231 killagreg 83
                char sByte[12];
1472 killagreg 84
                unsigned int Int[6];
85
                int  sInt[6];
86
                unsigned long Long[3];
87
                long sLong[3];
1231 killagreg 88
                float Float[3];
89
        } Param;
90
        unsigned char Chksum;
1051 killagreg 91
};
827 ingob 92
 
1448 killagreg 93
#define SPI_NCCMD_KALMAN                103
94
#define SPI_NCCMD_VERSION               104
1451 killagreg 95
#define SPI_NCCMD_GPSINFO               105
1241 killagreg 96
 
827 ingob 97
struct str_FromNaviCtrl
98
{
1231 killagreg 99
        unsigned char Command;
100
        signed int  GPS_Nick;
101
        signed int  GPS_Roll;
102
        signed int  GPS_Gier;
103
        signed int  CompassValue;
1856 killagreg 104
        signed int  MagVecX;
105
        signed int  MagVecY;
106
        signed int  MagVecZ;
1231 killagreg 107
        signed int  Status;
108
        unsigned int BeepTime;
109
        union
110
        {
1472 killagreg 111
                unsigned char Byte[12];
1231 killagreg 112
                char sByte[12];
1472 killagreg 113
                unsigned int Int[6];
114
                int  sInt[6];
115
                unsigned long Long[3];
116
                long sLong[3];
1231 killagreg 117
                float Float[3];
118
        } Param;
119
        unsigned char Chksum;
1051 killagreg 120
};
827 ingob 121
 
978 hbuss 122
struct str_FromNaviCtrl_Value
123
{
992 hbuss 124
 signed char Kalman_K;
125
 signed char Kalman_MaxDrift;
126
 signed char Kalman_MaxFusion;
1215 hbuss 127
 unsigned char SerialDataOkay;
1283 hbuss 128
 signed char GpsZ;
978 hbuss 129
};
827 ingob 130
 
1051 killagreg 131
struct str_SPI_VersionInfo
132
{
133
  unsigned char Major;
134
  unsigned char Minor;
135
  unsigned char Patch;
136
  unsigned char Compatible;
1448 killagreg 137
  unsigned char Hardware;
1051 killagreg 138
};
139
 
1451 killagreg 140
// Satfix types for GPSData.SatFix
141
#define SATFIX_NONE                             0x00
142
#define SATFIX_DEADRECKOING             0x01
143
#define SATFIX_2D                               0x02
144
#define SATFIX_3D                               0x03
145
#define SATFIX_GPS_DEADRECKOING 0x04
146
#define SATFIX_TIMEONLY                 0x05
147
// Flags for interpretation of the GPSData.Flags
1916 holgerb 148
#define FLAG_GPSFIXOK                           0x01 // (i.e. within DOP & ACC Masks)
149
#define FLAG_DIFFSOLN                           0x02 // (is DGPS used)
150
#define FLAG_WKNSET                                     0x04 // (is Week Number valid)
151
#define FLAG_TOWSET                                     0x08 // (is Time of Week valid)
152
#define FLAG_GPS_NAVIGATION_ACTIVE      0x10 // NC to FC -> NC is ready to navigate
1451 killagreg 153
 
154
struct str_GPSInfo
155
{
1472 killagreg 156
        unsigned char   Flags;                  // Status Flags
157
        unsigned char   NumOfSats;              // number of satelites
158
        unsigned char   SatFix;                 // type of satfix
1690 holgerb 159
        unsigned char   Speed;                  // m/sek
1472 killagreg 160
        unsigned int    HomeDistance;   // distance to Home in dm
161
        int                             HomeBearing;    // bearing to home in deg
1451 killagreg 162
};
163
 
164
 
827 ingob 165
#ifdef USE_SPI_COMMUNICATION
1451 killagreg 166
extern struct str_GPSInfo GPSInfo;
1448 killagreg 167
extern struct str_SPI_VersionInfo NC_Version;
978 hbuss 168
extern struct str_FromNaviCtrl_Value FromNaviCtrl_Value;
827 ingob 169
extern struct str_ToNaviCtrl   ToNaviCtrl;
170
extern struct str_FromNaviCtrl FromNaviCtrl;
1215 hbuss 171
extern unsigned char SPI_CommandCounter,NaviDataOkay;
1664 holgerb 172
extern signed char FromNC_Rotate_C, FromNC_Rotate_S;
1703 holgerb 173
extern unsigned char NC_ErrorCode;
827 ingob 174
extern void SPI_MasterInit(void);
175
extern void SPI_StartTransmitPacket(void);
176
extern void UpdateSPI_Buffer(void);
177
extern void SPI_TransmitByte(void);
1840 holgerb 178
extern signed int POI_KameraNick;
1920 holgerb 179
extern unsigned char NC_GPS_ModeCharacter;
1852 killagreg 180
extern vector16_t MagVec;
827 ingob 181
#else
182
 
183
 
184
// -------------------------------- Dummy -----------------------------------------
1051 killagreg 185
#define  SPI_MasterInit() ;
827 ingob 186
#define  SPI_StartTransmitPacket() ;
187
#define  UpdateSPI_Buffer() ;
188
#define  SPI_TransmitByte() ;
189
#endif
190
 
191
 
192
#endif