10,6 → 10,7 |
#include "eeprom.h" |
#include "uart.h" |
#include "timer0.h" |
#include "analog.h" |
|
#define SPI_TXSYNCBYTE1 0xAA |
#define SPI_TXSYNCBYTE2 0x83 |
42,11 → 43,9 |
uint8_t SPITransferCompleted, SPI_ChkSum; |
uint8_t SPI_RxDataValid; |
|
uint8_t SPI_CommandSequence[] = { SPI_CMD_USER, SPI_CMD_STICK, SPI_CMD_USER, SPI_CMD_STICK, SPI_CMD_CAL_COMPASS }; |
uint8_t SPI_CommandSequence[] = { SPI_CMD_USER, SPI_CMD_STICK, SPI_CMD_PARAMETER1, SPI_CMD_STICK, SPI_CMD_CAL_COMPASS }; |
uint8_t SPI_CommandCounter = 0; |
|
#ifdef USE_SPI_COMMUNICATION |
|
/*********************************************/ |
/* Initialize SPI interface to NaviCtrl */ |
/*********************************************/ |
103,8 → 102,26 |
ToNaviCtrl.Param.Byte[5] = FCParam.UserParam6; |
ToNaviCtrl.Param.Byte[6] = FCParam.UserParam7; |
ToNaviCtrl.Param.Byte[7] = FCParam.UserParam8; |
ToNaviCtrl.Param.Byte[8] = MKFlags; |
MKFlags &= ~(MKFLAG_CALIBRATE | MKFLAG_START); // calibrate and start are temporal states that are cleared immediately after transmitting |
ToNaviCtrl.Param.Byte[9] = (uint8_t)UBat; |
ToNaviCtrl.Param.Byte[10] = ParamSet.LowVoltageWarning; |
ToNaviCtrl.Param.Byte[11] = GetActiveParamSet(); |
break; |
|
case SPI_CMD_PARAMETER1: |
ToNaviCtrl.Param.Byte[0] = FCParam.NaviGpsModeControl; // Parameters for the Naviboard |
ToNaviCtrl.Param.Byte[1] = FCParam.NaviGpsGain; |
ToNaviCtrl.Param.Byte[2] = FCParam.NaviGpsP; |
ToNaviCtrl.Param.Byte[3] = FCParam.NaviGpsI; |
ToNaviCtrl.Param.Byte[4] = FCParam.NaviGpsD; |
ToNaviCtrl.Param.Byte[5] = FCParam.NaviGpsACC; |
ToNaviCtrl.Param.Byte[6] = ParamSet.NaviGpsMinSat; |
ToNaviCtrl.Param.Byte[7] = ParamSet.NaviStickThreshold; |
ToNaviCtrl.Param.Byte[8] = 15; // MaxRadius |
break; |
|
|
case SPI_CMD_STICK: |
tmp = PPM_in[ParamSet.ChannelAssignment[CH_GAS]]; if(tmp > 127) tmp = 127; else if(tmp < -128) tmp = -128; |
ToNaviCtrl.Param.Byte[0] = (int8_t) tmp; |
119,7 → 136,6 |
ToNaviCtrl.Param.Byte[6] = (uint8_t) Poti3; |
ToNaviCtrl.Param.Byte[7] = (uint8_t) Poti4; |
ToNaviCtrl.Param.Byte[8] = (uint8_t) RC_Quality; |
ToNaviCtrl.Param.Byte[9] = (uint8_t) MotorsOn; |
break; |
|
case SPI_CMD_CAL_COMPASS: |
144,8 → 160,8 |
// update gps controls |
if(abs(FromNaviCtrl.GPS_Nick) < 512 && abs(FromNaviCtrl.GPS_Roll) < 512 && (ParamSet.GlobalConfig & CFG_GPS_ACTIVE)) |
{ |
GPS_Nick = FromNaviCtrl.GPS_Nick; |
GPS_Roll = FromNaviCtrl.GPS_Roll; |
GPS_Nick = FromNaviCtrl.GPS_Nick; |
GPS_Roll = FromNaviCtrl.GPS_Roll; |
} |
// update compass readings |
if(FromNaviCtrl.CompassHeading <= 360) |
203,7 → 219,7 |
ToNaviCtrl.Command = SPI_CommandSequence[SPI_CommandCounter++]; |
if (SPI_CommandCounter >= sizeof(SPI_CommandSequence)) SPI_CommandCounter = 0; |
|
SPITransferCompleted = 0; // tranfer is in progress |
SPITransferCompleted = 0; // transfer is in progress |
UpdateSPI_Buffer(); // update data in ToNaviCtrl |
|
SPI_TxBufferIndex = 1; //proceed with 2nd byte |
309,6 → 325,4 |
} |
|
|
#endif //USE_SPI_COMMUNICATION |
|
|