Subversion Repositories FlightCtrl

Rev

Rev 2340 | Rev 2342 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2340 Rev 2341
Line 19... Line 19...
19
 
19
 
20
unsigned char SPITransferCompleted, SPI_ChkSum;
20
unsigned char SPITransferCompleted, SPI_ChkSum;
Line 21... Line 21...
21
unsigned char SPI_RxDataValid,NaviDataOkay = 250;
21
unsigned char SPI_RxDataValid,NaviDataOkay = 250;
22
 
22
 
23
unsigned char SPI_CommandSequence[] = { SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_PARAMETER1,
23
unsigned char SPI_CommandSequence[] = { SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_PARAMETER1,
24
                                        SPI_FCCMD_STICK, SPI_FCCMD_MISC, SPI_FCCMD_VERSION,
24
                                                                                SPI_FCCMD_STICK, SPI_FCCMD_VERSION, SPI_FCCMD_BL_ACCU,
25
                                                                                SPI_FCCMD_STICK, SPI_FCCMD_SERVOS, SPI_FCCMD_ACCU,
25
                                        SPI_FCCMD_STICK, SPI_FCCMD_MISC,SPI_FCCMD_SERVOS,  
26
                                                                                SPI_FCCMD_STICK, SPI_FCCMD_PARAMETER2
26
                                                                                SPI_FCCMD_STICK, SPI_FCCMD_PARAMETER2, SPI_FCCMD_BL_ACCU
27
                                                                                };
27
                                                                                };
28
unsigned char SPI_CommandCounter = 0;
28
unsigned char SPI_CommandCounter = 0;
29
unsigned char NC_ErrorCode = 0;
29
unsigned char NC_ErrorCode = 0;
Line 63... Line 63...
63
}
63
}
Line 64... Line 64...
64
 
64
 
65
//------------------------------------------------------
65
//------------------------------------------------------
66
void SPI_StartTransmitPacket(void)
66
void SPI_StartTransmitPacket(void)
67
{
-
 
68
   //if ((SLAVE_SELECT_PORT & (1 << SPI_SLAVE_SELECT)) == 0) return;    // transfer of prev. packet not completed
67
{
69
   if (!SPITransferCompleted) return;
-
 
70
//   _delay_us(30);
-
 
71
 
68
   if (!SPITransferCompleted) return;
72
   SLAVE_SELECT_PORT &=  ~(1 << SPI_SLAVE_SELECT);  // SelectSlave
69
   SLAVE_SELECT_PORT &=  ~(1 << SPI_SLAVE_SELECT);  // SelectSlave
Line 73... Line 70...
73
   SPI_TX_Buffer = (unsigned char *) &ToNaviCtrl;
70
   SPI_TX_Buffer = (unsigned char *) &ToNaviCtrl;
74
 
71
 
Line 75... Line 72...
75
   ToNaviCtrl.Command = SPI_CommandSequence[SPI_CommandCounter++];
72
   ToNaviCtrl.Command = SPI_CommandSequence[SPI_CommandCounter++];
76
   if (SPI_CommandCounter >= sizeof(SPI_CommandSequence)) SPI_CommandCounter = 0;
73
   if (SPI_CommandCounter >= sizeof(SPI_CommandSequence)) SPI_CommandCounter = 0;
77
 
-
 
78
   SPITransferCompleted = 0;
74
 
79
   UpdateSPI_Buffer();                              // update buffer
-
 
80
 
-
 
81
   SPI_BufferIndex = 1;
-
 
82
   // -- Debug-Output ---
-
 
83
   //----
-
 
84
   asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");         asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
75
   SPITransferCompleted = 0;
85
   asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");         asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
76
   UpdateSPI_Buffer();                              // update buffer
86
   asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");         asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
-
 
87
   ToNaviCtrl.Chksum = ToNaviCtrl.Sync1;
-
 
88
   SPDR = ToNaviCtrl.Sync1;                  // Start transmission
77
   SPI_BufferIndex = 1;
Line 89... Line 78...
89
//     SLAVE_SELECT_PORT |=  (1 << SPI_SLAVE_SELECT);   // DeselectSlave
78
   ToNaviCtrl.Chksum = ToNaviCtrl.Sync1;
90
 
79
   SPDR = ToNaviCtrl.Sync1;                  // Start transmission
91
}
80
}
Line 98... Line 87...
98
   unsigned char rxdata;
87
   unsigned char rxdata;
99
   static unsigned char rxchksum;
88
   static unsigned char rxchksum;
Line 100... Line 89...
100
 
89
 
101
   if (SPITransferCompleted) return;
90
   if (SPITransferCompleted) return;
102
   if (!(SPSR & (1 << SPIF))) return;
91
   if (!(SPSR & (1 << SPIF))) return;
103
  SendSPI = 4;
-
 
104
 
92
  SendSPI = SPI_BYTEGAP;
105
//   _delay_us(30);
93
//   _delay_us(30);
Line 106... Line 94...
106
  SLAVE_SELECT_PORT |=  (1 << SPI_SLAVE_SELECT);   // DeselectSlave
94
  SLAVE_SELECT_PORT |=  (1 << SPI_SLAVE_SELECT);   // DeselectSlave
107
 
95
 
108
  rxdata = SPDR;
96
  rxdata = SPDR;
109
  switch ( SPI_RXState)
97
  switch ( SPI_RXState)
110
  {
-
 
111
  case 0:
98
  {
112
 
99
  case 0:
113
                        SPI_RxBufferIndex = 0;
100
                        SPI_RxBufferIndex = 0;
Line 114... Line 101...
114
                        rxchksum = rxdata;
101
                        rxchksum = rxdata;
Line 124... Line 111...
124
   case 2:
111
   case 2:
125
                   SPI_Buffer[SPI_RxBufferIndex++]= rxdata;             // get data
112
                   SPI_Buffer[SPI_RxBufferIndex++]= rxdata;             // get data
126
           //DebugOut.Analog[19]++;
113
           //DebugOut.Analog[19]++;
127
           if (SPI_RxBufferIndex >= sizeof(FromNaviCtrl))
114
           if (SPI_RxBufferIndex >= sizeof(FromNaviCtrl))
128
                   {
115
                   {
129
 
-
 
130
                if (rxdata == rxchksum)
116
                if (rxdata == rxchksum)
131
                        {
117
                        {
132
                  unsigned char *ptr = (unsigned char *)&FromNaviCtrl;
118
                  unsigned char *ptr = (unsigned char *)&FromNaviCtrl;
133
                          memcpy(ptr, (unsigned char *) SPI_Buffer,  sizeof(SPI_Buffer));
119
                          memcpy(ptr, (unsigned char *) SPI_Buffer,  sizeof(SPI_Buffer));
134
                          SPI_RxDataValid = 1;
120
                          SPI_RxDataValid = 1;
135
                        }
121
                        }
136
                        else
122
                        else
137
                         {
123
                         {
138
                          SPI_RxDataValid = 0;
124
                          SPI_RxDataValid = 0;
139
                         }
125
                         }
140
 
-
 
141
 
-
 
142
                        SPI_RXState  = 0;
126
                        SPI_RXState  = 0;
143
                   }
127
                   }
144
                  else rxchksum += rxdata;
128
                  else rxchksum += rxdata;
145
        break;
129
        break;
Line 146... Line 130...
146
 
130
 
Line 147... Line 131...
147
  }
131
  }
148
 
132
 
149
   if (SPI_BufferIndex < sizeof(ToNaviCtrl))
133
   if (SPI_BufferIndex < sizeof(ToNaviCtrl))
150
     {
134
     {
151
           SLAVE_SELECT_PORT &=  ~(1 << SPI_SLAVE_SELECT);  // SelectSlave
-
 
152
           asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");  asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
-
 
153
           asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");  asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
-
 
154
           asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");       asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
135
           SLAVE_SELECT_PORT &=  ~(1 << SPI_SLAVE_SELECT);  // SelectSlave
155
 
136
           asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
156
           SPDR = SPI_TX_Buffer[SPI_BufferIndex];
-
 
157
           ToNaviCtrl.Chksum += SPI_TX_Buffer[SPI_BufferIndex];
-
 
158
        //   SLAVE_SELECT_PORT |=  (1 << SPI_SLAVE_SELECT);   // DeselectSlave
137
           SPDR = SPI_TX_Buffer[SPI_BufferIndex];
159
 
138
           ToNaviCtrl.Chksum += SPI_TX_Buffer[SPI_BufferIndex];
Line 160... Line 139...
160
         }
139
         }
161
         else SPITransferCompleted = 1;
140
         else SPITransferCompleted = 1;
Line 195... Line 174...
195
                    ToNaviCtrl.Param.Byte[9] = ActiveParamSet;
174
                    ToNaviCtrl.Param.Byte[9] = ActiveParamSet;
196
                                ToNaviCtrl.Param.Byte[10] = EE_Parameter.ComingHomeAltitude;
175
                                ToNaviCtrl.Param.Byte[10] = EE_Parameter.ComingHomeAltitude;
197
                                ToNaviCtrl.Param.Byte[11] = FC_StatusFlags2;
176
                                ToNaviCtrl.Param.Byte[11] = FC_StatusFlags2;
198
        break;
177
        break;
Line 199... Line 178...
199
 
178
 
200
     case SPI_FCCMD_ACCU:
179
     case SPI_FCCMD_BL_ACCU:
201
                        ToNaviCtrl.Param.Int[0] = Capacity.ActualCurrent; // 0.1A
180
                        ToNaviCtrl.Param.Int[0] = Capacity.ActualCurrent; // 0.1A
202
                        ToNaviCtrl.Param.Int[1] = Capacity.UsedCapacity; // mAh
181
                        ToNaviCtrl.Param.Int[1] = Capacity.UsedCapacity; // mAh
203
                        ToNaviCtrl.Param.Byte[4] = (unsigned char) UBat; // 0.1V
182
                        ToNaviCtrl.Param.Byte[4] = (unsigned char) UBat; // 0.1V
204
                        ToNaviCtrl.Param.Byte[5] = (unsigned char) BattLowVoltageWarning; //0.1V
183
                                ToNaviCtrl.Param.Byte[5] = EE_Parameter.NaviGpsModeControl;  // GPS-Mode  
205
                                ToNaviCtrl.Param.Byte[6] = VarioCharacter;
184
                                ToNaviCtrl.Param.Byte[6] = VarioCharacter;
206
                                ToNaviCtrl.Param.Byte[7] = motorindex;
185
                                ToNaviCtrl.Param.Byte[7] = motorindex;
207
                                ToNaviCtrl.Param.Byte[8] = Motor[motorindex].MaxPWM;
186
                                ToNaviCtrl.Param.Byte[8] = Motor[motorindex].MaxPWM;
208
                                ToNaviCtrl.Param.Byte[9] = Motor[motorindex].State;
187
                                ToNaviCtrl.Param.Byte[9] = Motor[motorindex].State;
209
                                ToNaviCtrl.Param.Byte[10] = Motor[motorindex].Temperature;
188
                                ToNaviCtrl.Param.Byte[10] = Motor[motorindex].Temperature;
210
                                ToNaviCtrl.Param.Byte[11] = Motor[motorindex++].Current;
189
                                ToNaviCtrl.Param.Byte[11] = Motor[motorindex++].Current;
211
                                motorindex %= 12;
190
                                motorindex %= 12;
212
        break;
191
        break;
213
         case SPI_FCCMD_PARAMETER1:
192
         case SPI_FCCMD_PARAMETER1:
214
                                ToNaviCtrl.Param.Byte[0] = EE_Parameter.NaviGpsModeControl;     // Parameters for the Naviboard
193
                                ToNaviCtrl.Param.Byte[0] = (unsigned char) BattLowVoltageWarning; //0.1V
215
                                ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviGpsGain;
194
                                ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviGpsGain;           // Parameters for the Naviboard
216
                                ToNaviCtrl.Param.Byte[2] = EE_Parameter.NaviGpsP;
195
                                ToNaviCtrl.Param.Byte[2] = EE_Parameter.NaviGpsP;
217
                                ToNaviCtrl.Param.Byte[3] = EE_Parameter.NaviGpsI;
196
                                ToNaviCtrl.Param.Byte[3] = EE_Parameter.NaviGpsI;
218
                                ToNaviCtrl.Param.Byte[4] = EE_Parameter.NaviGpsD;
197
                                ToNaviCtrl.Param.Byte[4] = EE_Parameter.NaviGpsD;
219
                                ToNaviCtrl.Param.Byte[5] = EE_Parameter.NaviGpsACC;
198
                                ToNaviCtrl.Param.Byte[5] = EE_Parameter.NaviGpsACC;
Line 271... Line 250...
271
                        ToNaviCtrl.Param.Int[2] = (int)(SollHoehe/5);
250
                        ToNaviCtrl.Param.Int[2] = (int)(SollHoehe/5);
272
                        ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsPLimit;
251
                        ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsPLimit;
273
                        ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviGpsILimit;
252
                        ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviGpsILimit;
274
                        ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviGpsDLimit;
253
                        ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviGpsDLimit;
275
            ToNaviCtrl.Param.Byte[9] = (unsigned char) SenderOkay;
254
            ToNaviCtrl.Param.Byte[9] = (unsigned char) SenderOkay;
276
            ToNaviCtrl.Param.Byte[10] = (unsigned char) PPM_in[0];
255
//            ToNaviCtrl.Param.Byte[10] = (unsigned char) PPM_in[0]; // ACT RSSI
-
 
256
ToNaviCtrl.Param.Byte[10] = 0;
277
                        ToNaviCtrl.Param.Byte[11] = DebugOut.Analog[7] / 4; //GasMischanteil
257
                        ToNaviCtrl.Param.Byte[11] = DebugOut.Analog[7] / 4; //GasMischanteil
278
                        break;
258
                        break;
279
                case SPI_FCCMD_VERSION:
259
                case SPI_FCCMD_VERSION:
280
                        ToNaviCtrl.Param.Byte[0] = VERSION_MAJOR;
260
                        ToNaviCtrl.Param.Byte[0] = VERSION_MAJOR;
281
                        ToNaviCtrl.Param.Byte[1] = VERSION_MINOR;
261
                        ToNaviCtrl.Param.Byte[1] = VERSION_MINOR;