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; |