mirror of
https://github.com/opentx/opentx.git
synced 2025-07-23 16:25:16 +03:00
RAM saving
This commit is contained in:
parent
c12eb34691
commit
62c7a1978e
23 changed files with 306 additions and 204 deletions
|
@ -289,24 +289,6 @@ enum SwashType {
|
||||||
#define TIMER_COUNTDOWN_START(x) 10
|
#define TIMER_COUNTDOWN_START(x) 10
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum ChannelsProtocols {
|
|
||||||
PROTOCOL_CHANNELS_UNINITIALIZED,
|
|
||||||
PROTOCOL_CHANNELS_NONE,
|
|
||||||
PROTOCOL_CHANNELS_PPM,
|
|
||||||
#if defined(PXX) || defined(DSM2)
|
|
||||||
PROTOCOL_CHANNELS_PXX,
|
|
||||||
#endif
|
|
||||||
#if defined(DSM2)
|
|
||||||
PROTOCOL_CHANNELS_DSM2_LP45,
|
|
||||||
PROTOCOL_CHANNELS_DSM2_DSM2,
|
|
||||||
PROTOCOL_CHANNELS_DSM2_DSMX,
|
|
||||||
#endif
|
|
||||||
PROTOCOL_CHANNELS_CROSSFIRE,
|
|
||||||
PROTOCOL_CHANNELS_MULTIMODULE,
|
|
||||||
PROTOCOL_CHANNELS_SBUS,
|
|
||||||
PROTOCOL_CHANNELS_PXX2
|
|
||||||
};
|
|
||||||
|
|
||||||
enum XJTRFProtocols {
|
enum XJTRFProtocols {
|
||||||
RF_PROTO_OFF = -1,
|
RF_PROTO_OFF = -1,
|
||||||
RF_PROTO_X16,
|
RF_PROTO_X16,
|
||||||
|
|
|
@ -47,21 +47,21 @@ uint8_t createCrossfireChannelsFrame(uint8_t * frame, int16_t * pulses)
|
||||||
return buf - frame;
|
return buf - frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setupPulsesCrossfire(uint8_t module)
|
void setupPulsesCrossfire()
|
||||||
{
|
{
|
||||||
if (telemetryProtocol == PROTOCOL_TELEMETRY_CROSSFIRE) {
|
if (telemetryProtocol == PROTOCOL_TELEMETRY_CROSSFIRE) {
|
||||||
uint8_t * pulses = modulePulsesData[module].crossfire.pulses;
|
uint8_t * pulses = extmodulePulsesData.crossfire.pulses;
|
||||||
#if defined(LUA)
|
#if defined(LUA)
|
||||||
if (outputTelemetryBufferTrigger != 0x00 && outputTelemetryBufferSize > 0) {
|
if (outputTelemetryBufferTrigger != 0x00 && outputTelemetryBufferSize > 0) {
|
||||||
memcpy(pulses, outputTelemetryBuffer, outputTelemetryBufferSize);
|
memcpy(pulses, outputTelemetryBuffer, outputTelemetryBufferSize);
|
||||||
modulePulsesData[module].crossfire.length = outputTelemetryBufferSize;
|
extmodulePulsesData.crossfire.length = outputTelemetryBufferSize;
|
||||||
outputTelemetryBufferTrigger = 0x00;
|
outputTelemetryBufferTrigger = 0x00;
|
||||||
outputTelemetryBufferSize = 0;
|
outputTelemetryBufferSize = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
modulePulsesData[module].crossfire.length = createCrossfireChannelsFrame(pulses, &channelOutputs[g_model.moduleData[module].channelsStart]);
|
extmodulePulsesData.crossfire.length = createCrossfireChannelsFrame(pulses, &channelOutputs[g_model.moduleData[EXTERNAL_MODULE].channelsStart]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,13 +38,13 @@ uint8_t dsm2BindTimer = DSM2_BIND_TIMEOUT;
|
||||||
#if defined(PPM_PIN_SERIAL)
|
#if defined(PPM_PIN_SERIAL)
|
||||||
void putDsm2SerialBit(uint8_t bit)
|
void putDsm2SerialBit(uint8_t bit)
|
||||||
{
|
{
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.serialByte >>= 1;
|
extmodulePulsesData.dsm2.serialByte >>= 1;
|
||||||
if (bit & 1) {
|
if (bit & 1) {
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.serialByte |= 0x80;
|
extmodulePulsesData.dsm2.serialByte |= 0x80;
|
||||||
}
|
}
|
||||||
if (++modulePulsesData[EXTERNAL_MODULE].dsm2.serialBitCount >= 8) {
|
if (++extmodulePulsesData.dsm2.serialBitCount >= 8) {
|
||||||
*modulePulsesData[EXTERNAL_MODULE].dsm2.ptr++ = modulePulsesData[EXTERNAL_MODULE].dsm2.serialByte;
|
*extmodulePulsesData.dsm2.ptr++ = extmodulePulsesData.dsm2.serialByte;
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.serialBitCount = 0;
|
extmodulePulsesData.dsm2.serialBitCount = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,14 +69,14 @@ void putDsm2Flush()
|
||||||
#else
|
#else
|
||||||
void _send_1(uint8_t v)
|
void _send_1(uint8_t v)
|
||||||
{
|
{
|
||||||
if (modulePulsesData[EXTERNAL_MODULE].dsm2.index & 1)
|
if (extmodulePulsesData.dsm2.index & 1)
|
||||||
v += 2;
|
v += 2;
|
||||||
else
|
else
|
||||||
v -= 2;
|
v -= 2;
|
||||||
|
|
||||||
*modulePulsesData[EXTERNAL_MODULE].dsm2.ptr++ = v - 1;
|
*extmodulePulsesData.dsm2.ptr++ = v - 1;
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.index += 1;
|
extmodulePulsesData.dsm2.index += 1;
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.rest -= v;
|
extmodulePulsesData.dsm2.rest -= v;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendByteDsm2(uint8_t b) // max 10 changes 0 10 10 10 10 1
|
void sendByteDsm2(uint8_t b) // max 10 changes 0 10 10 10 10 1
|
||||||
|
@ -100,31 +100,31 @@ void sendByteDsm2(uint8_t b) // max 10 changes 0 10 10 10 10 1
|
||||||
|
|
||||||
void putDsm2Flush()
|
void putDsm2Flush()
|
||||||
{
|
{
|
||||||
if (modulePulsesData[EXTERNAL_MODULE].dsm2.index & 1)
|
if (extmodulePulsesData.dsm2.index & 1)
|
||||||
*modulePulsesData[EXTERNAL_MODULE].dsm2.ptr++ = modulePulsesData[EXTERNAL_MODULE].dsm2.rest;
|
*extmodulePulsesData.dsm2.ptr++ = extmodulePulsesData.dsm2.rest;
|
||||||
else
|
else
|
||||||
*(modulePulsesData[EXTERNAL_MODULE].dsm2.ptr - 1) = modulePulsesData[EXTERNAL_MODULE].dsm2.rest;
|
*(extmodulePulsesData.dsm2.ptr - 1) = extmodulePulsesData.dsm2.rest;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// This is the data stream to send, prepare after 19.5 mS
|
// This is the data stream to send, prepare after 19.5 mS
|
||||||
// Send after 22.5 mS
|
// Send after 22.5 mS
|
||||||
|
|
||||||
void setupPulsesDSM2(uint8_t module)
|
void setupPulsesDSM2()
|
||||||
{
|
{
|
||||||
uint8_t dsmDat[14];
|
uint8_t dsmDat[14];
|
||||||
|
|
||||||
#if defined(PPM_PIN_SERIAL)
|
#if defined(PPM_PIN_SERIAL)
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.serialByte = 0 ;
|
extmodulePulsesData.dsm2.serialByte = 0 ;
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.serialBitCount = 0 ;
|
extmodulePulsesData.dsm2.serialBitCount = 0 ;
|
||||||
#else
|
#else
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.index = 0;
|
extmodulePulsesData.dsm2.index = 0;
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.rest = DSM2_PERIOD * 2000;
|
extmodulePulsesData.dsm2.rest = DSM2_PERIOD * 2000;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.ptr = modulePulsesData[EXTERNAL_MODULE].dsm2.pulses;
|
extmodulePulsesData.dsm2.ptr = extmodulePulsesData.dsm2.pulses;
|
||||||
|
|
||||||
switch (moduleSettings[module].protocol) {
|
switch (moduleSettings[EXTERNAL_MODULE].protocol) {
|
||||||
case PROTOCOL_CHANNELS_DSM2_LP45:
|
case PROTOCOL_CHANNELS_DSM2_LP45:
|
||||||
dsmDat[0] = 0x00;
|
dsmDat[0] = 0x00;
|
||||||
break;
|
break;
|
||||||
|
@ -140,29 +140,29 @@ void setupPulsesDSM2(uint8_t module)
|
||||||
if (dsm2BindTimer > 0) {
|
if (dsm2BindTimer > 0) {
|
||||||
dsm2BindTimer--;
|
dsm2BindTimer--;
|
||||||
if (switchState(SW_DSM2_BIND)) {
|
if (switchState(SW_DSM2_BIND)) {
|
||||||
moduleSettings[port].mode = MODULE_MODE_BIND;
|
moduleSettings[EXTERNAL_MODULE].mode = MODULE_MODE_BIND;
|
||||||
dsmDat[0] |= DSM2_SEND_BIND;
|
dsmDat[0] |= DSM2_SEND_BIND;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (moduleSettings[port].mode == MODULE_MODE_RANGECHECK) {
|
else if (moduleSettings[EXTERNAL_MODULE].mode == MODULE_MODE_RANGECHECK) {
|
||||||
dsmDat[0] |= DSM2_SEND_RANGECHECK;
|
dsmDat[0] |= DSM2_SEND_RANGECHECK;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
moduleSettings[port].mode = 0;
|
moduleSettings[port].mode = 0;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (moduleSettings[module].mode == MODULE_MODE_BIND) {
|
if (moduleSettings[EXTERNAL_MODULE].mode == MODULE_MODE_BIND) {
|
||||||
dsmDat[0] |= DSM2_SEND_BIND;
|
dsmDat[0] |= DSM2_SEND_BIND;
|
||||||
}
|
}
|
||||||
else if (moduleSettings[module].mode == MODULE_MODE_RANGECHECK) {
|
else if (moduleSettings[EXTERNAL_MODULE].mode == MODULE_MODE_RANGECHECK) {
|
||||||
dsmDat[0] |= DSM2_SEND_RANGECHECK;
|
dsmDat[0] |= DSM2_SEND_RANGECHECK;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
dsmDat[1] = g_model.header.modelId[module]; // DSM2 Header second byte for model match
|
dsmDat[1] = g_model.header.modelId[EXTERNAL_MODULE]; // DSM2 Header second byte for model match
|
||||||
|
|
||||||
for (int i=0; i<DSM2_CHANS; i++) {
|
for (int i=0; i<DSM2_CHANS; i++) {
|
||||||
int channel = g_model.moduleData[module].channelsStart+i;
|
int channel = g_model.moduleData[EXTERNAL_MODULE].channelsStart+i;
|
||||||
int value = channelOutputs[channel] + 2*PPM_CH_CENTER(channel) - 2*PPM_CENTER;
|
int value = channelOutputs[channel] + 2*PPM_CH_CENTER(channel) - 2*PPM_CENTER;
|
||||||
uint16_t pulse = limit(0, ((value*13)>>5)+512, 1023);
|
uint16_t pulse = limit(0, ((value*13)>>5)+512, 1023);
|
||||||
dsmDat[2+2*i] = (i<<2) | ((pulse>>8)&0x03);
|
dsmDat[2+2*i] = (i<<2) | ((pulse>>8)&0x03);
|
||||||
|
|
|
@ -86,31 +86,31 @@ static void sendFailsafeChannels(uint8_t port)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setupPulsesMultimodule(uint8_t port)
|
void setupPulsesMultimodule()
|
||||||
{
|
{
|
||||||
static int counter = 0;
|
static int counter = 0;
|
||||||
|
|
||||||
#if defined(PPM_PIN_SERIAL)
|
#if defined(PPM_PIN_SERIAL)
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.serialByte = 0 ;
|
extmodulePulsesData.dsm2.serialByte = 0 ;
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.serialBitCount = 0 ;
|
extmodulePulsesData.dsm2.serialBitCount = 0 ;
|
||||||
#else
|
#else
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.rest = multiSyncStatus.getAdjustedRefreshRate();
|
extmodulePulsesData.dsm2.rest = multiSyncStatus.getAdjustedRefreshRate();
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.index = 0;
|
extmodulePulsesData.dsm2.index = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.ptr = modulePulsesData[EXTERNAL_MODULE].dsm2.pulses;
|
extmodulePulsesData.dsm2.ptr = extmodulePulsesData.dsm2.pulses;
|
||||||
|
|
||||||
// Every 1000 cycles (=9s) send a config packet that configures the multimodule (inversion, telemetry type)
|
// Every 1000 cycles (=9s) send a config packet that configures the multimodule (inversion, telemetry type)
|
||||||
counter++;
|
counter++;
|
||||||
if (counter % 1000== 500) {
|
if (counter % 1000== 500) {
|
||||||
sendSetupFrame();
|
sendSetupFrame();
|
||||||
} else if (counter % 1000 == 0 && g_model.moduleData[port].failsafeMode != FAILSAFE_NOT_SET && g_model.moduleData[port].failsafeMode != FAILSAFE_RECEIVER) {
|
} else if (counter % 1000 == 0 && g_model.moduleData[EXTERNAL_MODULE].failsafeMode != FAILSAFE_NOT_SET && g_model.moduleData[EXTERNAL_MODULE].failsafeMode != FAILSAFE_RECEIVER) {
|
||||||
sendFrameProtocolHeader(port, true);
|
sendFrameProtocolHeader(EXTERNAL_MODULE, true);
|
||||||
sendFailsafeChannels(port);
|
sendFailsafeChannels(port);
|
||||||
} else {
|
} else {
|
||||||
// Normal Frame
|
// Normal Frame
|
||||||
sendFrameProtocolHeader(port, false);
|
sendFrameProtocolHeader(EXTERNAL_MODULE, false);
|
||||||
sendChannels(port);
|
sendChannels(EXTERNAL_MODULE);
|
||||||
}
|
}
|
||||||
|
|
||||||
putDsm2Flush();
|
putDsm2Flush();
|
||||||
|
|
|
@ -59,12 +59,21 @@ void setupPulsesPPM(PpmPulsesData<T> * ppmPulsesData, uint8_t channelsStart, int
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void setupPulsesPPMModule(uint8_t port)
|
|
||||||
{
|
|
||||||
setupPulsesPPM<pulse_duration_t>(&modulePulsesData[port].ppm, g_model.moduleData[port].channelsStart, g_model.moduleData[port].channelsCount, g_model.moduleData[port].ppm.frameLength);
|
|
||||||
}
|
|
||||||
|
|
||||||
void setupPulsesPPMTrainer()
|
void setupPulsesPPMTrainer()
|
||||||
{
|
{
|
||||||
setupPulsesPPM<trainer_pulse_duration_t>(&trainerPulsesData.ppm, g_model.trainerData.channelsStart, g_model.trainerData.channelsCount, g_model.trainerData.frameLength);
|
setupPulsesPPM<trainer_pulse_duration_t>(&trainerPulsesData.ppm, g_model.trainerData.channelsStart, g_model.trainerData.channelsCount, g_model.trainerData.frameLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(PCBSKY9X) || defined(TARANIS_INTERNAL_PPM)
|
||||||
|
void setupPulsesPPMInternalModule()
|
||||||
|
{
|
||||||
|
setupPulsesPPM(&intmodulePulsesData.ppm, g_model.moduleData[INTERNAL_MODULE].channelsStart, g_model.moduleData[INTERNAL_MODULE].channelsCount, g_model.moduleData[INTERNAL_MODULE].ppm.frameLength);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void setupPulsesPPMExternalModule()
|
||||||
|
{
|
||||||
|
setupPulsesPPM(&extmodulePulsesData.ppm, g_model.moduleData[EXTERNAL_MODULE].channelsStart, g_model.moduleData[EXTERNAL_MODULE].channelsCount, g_model.moduleData[EXTERNAL_MODULE].ppm.frameLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,8 @@
|
||||||
|
|
||||||
uint8_t s_pulses_paused = 0;
|
uint8_t s_pulses_paused = 0;
|
||||||
ModuleSettings moduleSettings[NUM_MODULES];
|
ModuleSettings moduleSettings[NUM_MODULES];
|
||||||
ModulePulsesData modulePulsesData[NUM_MODULES] __DMA;
|
InternalModulePulsesData intmodulePulsesData __DMA;
|
||||||
|
ExternalModulePulsesData extmodulePulsesData __DMA;
|
||||||
TrainerPulsesData trainerPulsesData __DMA;
|
TrainerPulsesData trainerPulsesData __DMA;
|
||||||
|
|
||||||
uint8_t getModuleType(uint8_t module)
|
uint8_t getModuleType(uint8_t module)
|
||||||
|
@ -49,7 +50,7 @@ uint8_t getRequiredProtocol(uint8_t module)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MODULE_TYPE_XJT:
|
case MODULE_TYPE_XJT:
|
||||||
protocol = PROTOCOL_CHANNELS_PXX;
|
protocol = PROTOCOL_CHANNELS_PXX1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MODULE_TYPE_XJT2:
|
case MODULE_TYPE_XJT2:
|
||||||
|
@ -112,31 +113,12 @@ uint8_t getRequiredProtocol(uint8_t module)
|
||||||
return protocol;
|
return protocol;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setupPulsesPXX(uint8_t module)
|
|
||||||
{
|
|
||||||
#if defined(INTMODULE_USART) && defined(EXTMODULE_USART)
|
|
||||||
modulePulsesData[module].pxx_uart.setupFrame(module);
|
|
||||||
#elif !defined(INTMODULE_USART) && !defined(EXTMODULE_USART)
|
|
||||||
modulePulsesData[module].pxx.setupFrame(module);
|
|
||||||
#else
|
|
||||||
if (IS_UART_MODULE(module))
|
|
||||||
modulePulsesData[module].pxx_uart.setupFrame(module);
|
|
||||||
else
|
|
||||||
modulePulsesData[module].pxx.setupFrame(module);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void setupPulsesPXX2(uint8_t module)
|
|
||||||
{
|
|
||||||
modulePulsesData[module].pxx2.setupFrame(module);
|
|
||||||
}
|
|
||||||
|
|
||||||
void disablePulses(uint8_t module, uint8_t protocol)
|
void disablePulses(uint8_t module, uint8_t protocol)
|
||||||
{
|
{
|
||||||
// stop existing protocol hardware
|
// stop existing protocol hardware
|
||||||
|
|
||||||
switch (protocol) {
|
switch (protocol) {
|
||||||
case PROTOCOL_CHANNELS_PXX:
|
case PROTOCOL_CHANNELS_PXX1:
|
||||||
disable_pxx(module);
|
disable_pxx(module);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -176,7 +158,7 @@ void enablePulses(uint8_t module, uint8_t protocol)
|
||||||
// start new protocol hardware here
|
// start new protocol hardware here
|
||||||
|
|
||||||
switch (protocol) {
|
switch (protocol) {
|
||||||
case PROTOCOL_CHANNELS_PXX:
|
case PROTOCOL_CHANNELS_PXX1:
|
||||||
init_pxx(module);
|
init_pxx(module);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -214,53 +196,103 @@ void enablePulses(uint8_t module, uint8_t protocol)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setupPulses(uint8_t module, uint8_t protocol)
|
#if defined(PXX1)
|
||||||
|
void setupPulsesPXXInternalModule()
|
||||||
|
{
|
||||||
|
#if defined(INTMODULE_USART)
|
||||||
|
intmodulePulsesData.pxx_uart.setupFrame(INTERNAL_MODULE);
|
||||||
|
#else
|
||||||
|
intmodulePulsesData.pxx.setupFrame(INTERNAL_MODULE);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void setupPulsesPXXExternalModule()
|
||||||
|
{
|
||||||
|
#if defined(EXTMODULE_USART)
|
||||||
|
extmodulePulsesData.pxx_uart.setupFrame(EXTERNAL_MODULE);
|
||||||
|
#elif !defined(INTMODULE_USART) && !defined(EXTMODULE_USART)
|
||||||
|
extmodulePulsesData.pxx.setupFrame(EXTERNAL_MODULE);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void setupPulsesInternalModule(uint8_t protocol)
|
||||||
{
|
{
|
||||||
switch (protocol) {
|
switch (protocol) {
|
||||||
case PROTOCOL_CHANNELS_PXX:
|
#if defined(PXX1)
|
||||||
setupPulsesPXX(module);
|
case PROTOCOL_CHANNELS_PXX1:
|
||||||
scheduleNextMixerCalculation(module, PXX_PERIOD);
|
setupPulsesPXXInternalModule();
|
||||||
|
scheduleNextMixerCalculation(INTERNAL_MODULE, PXX_PERIOD);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PXX2)
|
||||||
|
case PROTOCOL_CHANNELS_PXX2:
|
||||||
|
intmodulePulsesData.pxx2.setupFrame(INTERNAL_MODULE);
|
||||||
|
scheduleNextMixerCalculation(INTERNAL_MODULE, moduleSettings[INTERNAL_MODULE].mode == MODULE_MODE_SPECTRUM_ANALYSER ? 1 : PXX2_PERIOD);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PCBSKY9X) || defined(TARANIS_INTERNAL_PPM)
|
||||||
|
case PROTOCOL_CHANNELS_PPM:
|
||||||
|
setupPulsesPPM(&extmodulePulsesData.ppm, g_model.moduleData[INTERNAL_MODULE].channelsStart, g_model.moduleData[INTERNAL_MODULE].channelsCount, g_model.moduleData[INTERNAL_MODULE].ppm.frameLength);
|
||||||
|
scheduleNextMixerCalculation(INTERNAL_MODULE, PPM_PERIOD(INTERNAL_MODULE));
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setupPulsesExternalModule(uint8_t protocol)
|
||||||
|
{
|
||||||
|
switch (protocol) {
|
||||||
|
#if defined(PXX1)
|
||||||
|
case PROTOCOL_CHANNELS_PXX1:
|
||||||
|
setupPulsesPXXExternalModule();
|
||||||
|
scheduleNextMixerCalculation(EXTERNAL_MODULE, PXX_PERIOD);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PXX2)
|
||||||
|
case PROTOCOL_CHANNELS_PXX2:
|
||||||
|
extmodulePulsesData.pxx2.setupFrame(EXTERNAL_MODULE);
|
||||||
|
scheduleNextMixerCalculation(EXTERNAL_MODULE, PXX2_PERIOD);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case PROTOCOL_CHANNELS_SBUS:
|
case PROTOCOL_CHANNELS_SBUS:
|
||||||
setupPulsesSbus(module);
|
setupPulsesSbus();
|
||||||
scheduleNextMixerCalculation(module, SBUS_PERIOD);
|
scheduleNextMixerCalculation(EXTERNAL_MODULE, SBUS_PERIOD);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if defined(DSM2)
|
#if defined(DSM2)
|
||||||
case PROTOCOL_CHANNELS_DSM2_LP45:
|
case PROTOCOL_CHANNELS_DSM2_LP45:
|
||||||
case PROTOCOL_CHANNELS_DSM2_DSM2:
|
case PROTOCOL_CHANNELS_DSM2_DSM2:
|
||||||
case PROTOCOL_CHANNELS_DSM2_DSMX:
|
case PROTOCOL_CHANNELS_DSM2_DSMX:
|
||||||
setupPulsesDSM2(module);
|
setupPulsesDSM2();
|
||||||
scheduleNextMixerCalculation(module, DSM2_PERIOD);
|
scheduleNextMixerCalculation(EXTERNAL_MODULE, DSM2_PERIOD);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CROSSFIRE)
|
#if defined(CROSSFIRE)
|
||||||
case PROTOCOL_CHANNELS_CROSSFIRE:
|
case PROTOCOL_CHANNELS_CROSSFIRE:
|
||||||
setupPulsesCrossfire(module);
|
setupPulsesCrossfire();
|
||||||
scheduleNextMixerCalculation(module, CROSSFIRE_PERIOD);
|
scheduleNextMixerCalculation(EXTERNAL_MODULE, CROSSFIRE_PERIOD);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case PROTOCOL_CHANNELS_PXX2:
|
|
||||||
setupPulsesPXX2(module);
|
|
||||||
scheduleNextMixerCalculation(module, moduleSettings[module].mode == MODULE_MODE_SPECTRUM_ANALYSER ? 1 : PXX2_PERIOD);
|
|
||||||
break;
|
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
case PROTOCOL_CHANNELS_MULTIMODULE:
|
case PROTOCOL_CHANNELS_MULTIMODULE:
|
||||||
setupPulsesMultimodule(module);
|
setupPulsesMultimodule();
|
||||||
scheduleNextMixerCalculation(module, MULTIMODULE_PERIOD);
|
scheduleNextMixerCalculation(EXTERNAL_MODULE, MULTIMODULE_PERIOD);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case PROTOCOL_CHANNELS_PPM:
|
case PROTOCOL_CHANNELS_PPM:
|
||||||
#if defined(PCBSKY9X)
|
setupPulsesPPMExternalModule();
|
||||||
case PROTOCOL_CHANNELS_NONE:
|
scheduleNextMixerCalculation(EXTERNAL_MODULE, PPM_PERIOD(EXTERNAL_MODULE));
|
||||||
#endif
|
|
||||||
setupPulsesPPMModule(module);
|
|
||||||
scheduleNextMixerCalculation(module, PPM_PERIOD(module));
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -268,6 +300,19 @@ void setupPulses(uint8_t module, uint8_t protocol)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setupPulses(uint8_t module, uint8_t protocol)
|
||||||
|
{
|
||||||
|
switch (module) {
|
||||||
|
case INTERNAL_MODULE:
|
||||||
|
setupPulsesInternalModule(protocol);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXTERNAL_MODULE:
|
||||||
|
setupPulsesExternalModule(protocol);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool setupPulses(uint8_t module)
|
bool setupPulses(uint8_t module)
|
||||||
{
|
{
|
||||||
uint8_t protocol = getRequiredProtocol(module);
|
uint8_t protocol = getRequiredProtocol(module);
|
||||||
|
|
|
@ -23,8 +23,14 @@
|
||||||
|
|
||||||
#include "definitions.h"
|
#include "definitions.h"
|
||||||
#include "dataconstants.h"
|
#include "dataconstants.h"
|
||||||
|
|
||||||
|
#if defined(PXX2)
|
||||||
#include "pulses/pxx2.h"
|
#include "pulses/pxx2.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PXX1)
|
||||||
#include "pulses/pxx1.h"
|
#include "pulses/pxx1.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#if NUM_MODULES > 1
|
#if NUM_MODULES > 1
|
||||||
#define IS_RANGECHECK_ENABLE() (moduleSettings[0].mode == MODULE_MODE_RANGECHECK || moduleSettings[1].mode == MODULE_MODE_RANGECHECK)
|
#define IS_RANGECHECK_ENABLE() (moduleSettings[0].mode == MODULE_MODE_RANGECHECK || moduleSettings[1].mode == MODULE_MODE_RANGECHECK)
|
||||||
|
@ -99,6 +105,7 @@ PACK(struct Dsm2SerialPulsesData {
|
||||||
uint8_t serialBitCount;
|
uint8_t serialBitCount;
|
||||||
uint16_t _alignment;
|
uint16_t _alignment;
|
||||||
});
|
});
|
||||||
|
typedef Dsm2SerialPulsesData Dsm2PulsesData;
|
||||||
#else
|
#else
|
||||||
#define MAX_PULSES_TRANSITIONS 300
|
#define MAX_PULSES_TRANSITIONS 300
|
||||||
PACK(struct Dsm2TimerPulsesData {
|
PACK(struct Dsm2TimerPulsesData {
|
||||||
|
@ -107,6 +114,7 @@ PACK(struct Dsm2TimerPulsesData {
|
||||||
uint16_t rest;
|
uint16_t rest;
|
||||||
uint8_t index;
|
uint8_t index;
|
||||||
});
|
});
|
||||||
|
typedef Dsm2TimerPulsesData Dsm2PulsesData;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PPM_PERIOD_HALF_US(module) ((g_model.moduleData[module].ppm.frameLength * 5 + 225) * 200) /*half us*/
|
#define PPM_PERIOD_HALF_US(module) ((g_model.moduleData[module].ppm.frameLength * 5 + 225) * 200) /*half us*/
|
||||||
|
@ -125,25 +133,49 @@ PACK(struct CrossfirePulsesData {
|
||||||
uint8_t length;
|
uint8_t length;
|
||||||
});
|
});
|
||||||
|
|
||||||
union ModulePulsesData {
|
union InternalModulePulsesData {
|
||||||
#if defined(INTMODULE_USART) || defined(EXTMODULE_USART)
|
#if defined(PXX1)
|
||||||
UartPxxPulses pxx_uart;
|
#if defined(INTMODULE_USART) || defined(EXTMODULE_USART)
|
||||||
#endif
|
UartPxx1Pulses pxx_uart;
|
||||||
#if defined(PPM_PIN_SERIAL)
|
#endif
|
||||||
SerialPxxPulses pxx;
|
#if defined(PPM_PIN_SERIAL)
|
||||||
#elif !defined(INTMODULE_USART) || !defined(EXTMODULE_USART)
|
SerialPxx1Pulses pxx;
|
||||||
PwmPxxPulses pxx;
|
#elif !defined(INTMODULE_USART) || !defined(EXTMODULE_USART)
|
||||||
|
PwmPxx1Pulses pxx;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(PXX2)
|
||||||
Pxx2Pulses pxx2;
|
Pxx2Pulses pxx2;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(PPM_PIN_SERIAL)
|
#if defined(TARANIS_INTERNAL_PPM)
|
||||||
Dsm2SerialPulsesData dsm2;
|
PpmPulsesData<pulse_duration_t> ppm;
|
||||||
#else
|
#endif
|
||||||
Dsm2TimerPulsesData dsm2;
|
} __ALIGNED(4);
|
||||||
|
|
||||||
|
union ExternalModulePulsesData {
|
||||||
|
#if defined(PXX1)
|
||||||
|
#if defined(INTMODULE_USART) || defined(EXTMODULE_USART)
|
||||||
|
UartPxx1Pulses pxx_uart;
|
||||||
|
#endif
|
||||||
|
#if defined(PPM_PIN_SERIAL)
|
||||||
|
SerialPxx1Pulses pxx;
|
||||||
|
#elif !defined(INTMODULE_USART) || !defined(EXTMODULE_USART)
|
||||||
|
PwmPxx1Pulses pxx;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PXX2)
|
||||||
|
Pxx2Pulses pxx2;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(DSM2) || defined(MULTIMODULE) || defined(SBUS)
|
||||||
|
Dsm2PulsesData dsm2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PpmPulsesData<pulse_duration_t> ppm;
|
PpmPulsesData<pulse_duration_t> ppm;
|
||||||
|
|
||||||
CrossfirePulsesData crossfire;
|
CrossfirePulsesData crossfire;
|
||||||
} __ALIGNED(4);
|
} __ALIGNED(4);
|
||||||
|
|
||||||
|
@ -153,8 +185,9 @@ union ModulePulsesData {
|
||||||
* sizeof(ModulePulsesData). __ALIGNED is required for sizeof(ModulePulsesData) to be a multiple of the alignment.
|
* sizeof(ModulePulsesData). __ALIGNED is required for sizeof(ModulePulsesData) to be a multiple of the alignment.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* TODO: internal pulsedata only needs 200 bytes vs 300 bytes for external, both use 300 byte since we have a common struct */
|
|
||||||
extern ModulePulsesData modulePulsesData[NUM_MODULES];
|
extern InternalModulePulsesData intmodulePulsesData;
|
||||||
|
extern ExternalModulePulsesData extmodulePulsesData;
|
||||||
|
|
||||||
union TrainerPulsesData {
|
union TrainerPulsesData {
|
||||||
PpmPulsesData<trainer_pulse_duration_t> ppm;
|
PpmPulsesData<trainer_pulse_duration_t> ppm;
|
||||||
|
@ -163,12 +196,12 @@ union TrainerPulsesData {
|
||||||
extern TrainerPulsesData trainerPulsesData;
|
extern TrainerPulsesData trainerPulsesData;
|
||||||
|
|
||||||
bool setupPulses(uint8_t module);
|
bool setupPulses(uint8_t module);
|
||||||
void setupPulsesDSM2(uint8_t module);
|
void setupPulsesDSM2();
|
||||||
void setupPulsesCrossfire(uint8_t module);
|
void setupPulsesCrossfire();
|
||||||
void setupPulsesMultimodule(uint8_t module);
|
void setupPulsesMultimodule();
|
||||||
void setupPulsesSbus(uint8_t module);
|
void setupPulsesSbus();
|
||||||
void setupPulsesPXX(uint8_t module);
|
void setupPulsesPPMInternalModule();
|
||||||
void setupPulsesPPMModule(uint8_t module);
|
void setupPulsesPPMExternalModule();
|
||||||
void setupPulsesPPMTrainer();
|
void setupPulsesPPMTrainer();
|
||||||
void sendByteDsm2(uint8_t b);
|
void sendByteDsm2(uint8_t b);
|
||||||
void putDsm2Flush();
|
void putDsm2Flush();
|
||||||
|
@ -194,6 +227,24 @@ inline void startPulses()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum ChannelsProtocols {
|
||||||
|
PROTOCOL_CHANNELS_UNINITIALIZED,
|
||||||
|
PROTOCOL_CHANNELS_NONE,
|
||||||
|
PROTOCOL_CHANNELS_PPM,
|
||||||
|
#if defined(PXX) || defined(DSM2)
|
||||||
|
PROTOCOL_CHANNELS_PXX1,
|
||||||
|
#endif
|
||||||
|
#if defined(DSM2)
|
||||||
|
PROTOCOL_CHANNELS_DSM2_LP45,
|
||||||
|
PROTOCOL_CHANNELS_DSM2_DSM2,
|
||||||
|
PROTOCOL_CHANNELS_DSM2_DSMX,
|
||||||
|
#endif
|
||||||
|
PROTOCOL_CHANNELS_CROSSFIRE,
|
||||||
|
PROTOCOL_CHANNELS_MULTIMODULE,
|
||||||
|
PROTOCOL_CHANNELS_SBUS,
|
||||||
|
PROTOCOL_CHANNELS_PXX2
|
||||||
|
};
|
||||||
|
|
||||||
inline bool pulsesStarted() { return moduleSettings[0].protocol != PROTOCOL_CHANNELS_UNINITIALIZED; }
|
inline bool pulsesStarted() { return moduleSettings[0].protocol != PROTOCOL_CHANNELS_UNINITIALIZED; }
|
||||||
inline void pausePulses() { s_pulses_paused = true; }
|
inline void pausePulses() { s_pulses_paused = true; }
|
||||||
inline void resumePulses() { s_pulses_paused = false; }
|
inline void resumePulses() { s_pulses_paused = false; }
|
||||||
|
|
|
@ -90,7 +90,12 @@ void PxxPulses<PxxTransport>::addChannels(uint8_t port, uint8_t sendFailsafe, ui
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(PXX1)
|
||||||
template class PxxPulses<StandardPxx1Transport<PwmPxxBitTransport> >;
|
template class PxxPulses<StandardPxx1Transport<PwmPxxBitTransport> >;
|
||||||
template class PxxPulses<StandardPxx1Transport<SerialPxxBitTransport> >;
|
template class PxxPulses<StandardPxx1Transport<SerialPxxBitTransport> >;
|
||||||
template class PxxPulses<UartPxx1Transport>;
|
template class PxxPulses<UartPxx1Transport>;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PXX2)
|
||||||
template class PxxPulses<Pxx2Transport>;
|
template class PxxPulses<Pxx2Transport>;
|
||||||
|
#endif
|
||||||
|
|
|
@ -160,8 +160,8 @@ class Pxx1Pulses: public PxxPulses<PxxTransport>
|
||||||
void add8ChannelsFrame(uint8_t port, uint8_t sendUpperChannels);
|
void add8ChannelsFrame(uint8_t port, uint8_t sendUpperChannels);
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef Pxx1Pulses<UartPxx1Transport> UartPxxPulses;
|
typedef Pxx1Pulses<UartPxx1Transport> UartPxx1Pulses;
|
||||||
typedef Pxx1Pulses<StandardPxx1Transport<PwmPxxBitTransport>> PwmPxxPulses;
|
typedef Pxx1Pulses<StandardPxx1Transport<PwmPxxBitTransport>> PwmPxx1Pulses;
|
||||||
typedef Pxx1Pulses<StandardPxx1Transport<SerialPxxBitTransport>> SerialPxxPulses;
|
typedef Pxx1Pulses<StandardPxx1Transport<SerialPxxBitTransport>> SerialPxx1Pulses;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -48,17 +48,17 @@ static void _send_level(uint8_t v)
|
||||||
{
|
{
|
||||||
/* Copied over from DSM, this looks doubious and in my logic analyzer
|
/* Copied over from DSM, this looks doubious and in my logic analyzer
|
||||||
output the low->high is about 2 ns late */
|
output the low->high is about 2 ns late */
|
||||||
if (modulePulsesData[EXTERNAL_MODULE].dsm2.index & 1)
|
if (extmodulePulsesData.dsm2.index & 1)
|
||||||
v += 2;
|
v += 2;
|
||||||
else
|
else
|
||||||
v -= 2;
|
v -= 2;
|
||||||
|
|
||||||
*modulePulsesData[EXTERNAL_MODULE].dsm2.ptr++ = v - 1;
|
*extmodulePulsesData.dsm2.ptr++ = v - 1;
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.index+=1;
|
extmodulePulsesData.dsm2.index+=1;
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.rest -=v;
|
extmodulePulsesData.dsm2.rest -=v;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendByteSbus(uint8_t b) //max 11 changes 0 10 10 10 10 P 1
|
void sendByteSbus(uint8_t b) // max 11 changes 0 10 10 10 10 P 1
|
||||||
{
|
{
|
||||||
bool lev = 0;
|
bool lev = 0;
|
||||||
uint8_t parity = 1;
|
uint8_t parity = 1;
|
||||||
|
@ -107,17 +107,17 @@ inline int getChannelValue(uint8_t port, int channel)
|
||||||
return channelOutputs[ch] + 2 * PPM_CH_CENTER(ch) - 2*PPM_CENTER;
|
return channelOutputs[ch] + 2 * PPM_CH_CENTER(ch) - 2*PPM_CENTER;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setupPulsesSbus(uint8_t port)
|
void setupPulsesSbus()
|
||||||
{
|
{
|
||||||
#if defined(PPM_PIN_SERIAL)
|
#if defined(PPM_PIN_SERIAL)
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.serialByte = 0;
|
extmodulePulsesData.dsm2.serialByte = 0;
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.serialBitCount = 0;
|
extmodulePulsesData.dsm2.serialBitCount = 0;
|
||||||
#else
|
#else
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.rest = SBUS_PERIOD_HALF_US;
|
extmodulePulsesData.dsm2.rest = SBUS_PERIOD_HALF_US;
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.index = 0;
|
extmodulePulsesData.dsm2.index = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
modulePulsesData[EXTERNAL_MODULE].dsm2.ptr = modulePulsesData[EXTERNAL_MODULE].dsm2.pulses;
|
extmodulePulsesData.dsm2.ptr = extmodulePulsesData.dsm2.pulses;
|
||||||
|
|
||||||
// Sync Byte
|
// Sync Byte
|
||||||
sendByteSbus(SBUS_FRAME_BEGIN_BYTE);
|
sendByteSbus(SBUS_FRAME_BEGIN_BYTE);
|
||||||
|
@ -127,7 +127,7 @@ void setupPulsesSbus(uint8_t port)
|
||||||
|
|
||||||
// byte 1-22, channels 0..2047, limits not really clear (B
|
// byte 1-22, channels 0..2047, limits not really clear (B
|
||||||
for (int i=0; i<SBUS_NORMAL_CHANS; i++) {
|
for (int i=0; i<SBUS_NORMAL_CHANS; i++) {
|
||||||
int value = getChannelValue(port, i);
|
int value = getChannelValue(EXTERNAL_MODULE, i);
|
||||||
|
|
||||||
value = value*8/10 + SBUS_CHAN_CENTER;
|
value = value*8/10 + SBUS_CHAN_CENTER;
|
||||||
bits |= limit(0, value, 2047) << bitsavailable;
|
bits |= limit(0, value, 2047) << bitsavailable;
|
||||||
|
@ -141,9 +141,9 @@ void setupPulsesSbus(uint8_t port)
|
||||||
|
|
||||||
// flags
|
// flags
|
||||||
uint8_t flags=0;
|
uint8_t flags=0;
|
||||||
if (getChannelValue(port, 16) > 0)
|
if (getChannelValue(EXTERNAL_MODULE, 16) > 0)
|
||||||
flags |=SBUS_FLAG_CHANNEL_17;
|
flags |=SBUS_FLAG_CHANNEL_17;
|
||||||
if (getChannelValue(port, 17) > 0)
|
if (getChannelValue(EXTERNAL_MODULE, 17) > 0)
|
||||||
flags |=SBUS_FLAG_CHANNEL_18;
|
flags |=SBUS_FLAG_CHANNEL_18;
|
||||||
|
|
||||||
sendByteSbus(flags);
|
sendByteSbus(flags);
|
||||||
|
|
|
@ -30,11 +30,10 @@
|
||||||
#define SBUS_FAILSAFE_BIT 3
|
#define SBUS_FAILSAFE_BIT 3
|
||||||
|
|
||||||
#define SBUS_CH_BITS 11
|
#define SBUS_CH_BITS 11
|
||||||
#define SBUS_CH_MASK ((1<<SBUS_CH_BITS)-1)
|
#define SBUS_CH_MASK ((1<<SBUS_CH_BITS) - 1)
|
||||||
|
|
||||||
#define SBUS_CH_CENTER 0x3E0
|
#define SBUS_CH_CENTER 0x3E0
|
||||||
|
|
||||||
|
|
||||||
// Range for pulses (ppm input) is [-512:+512]
|
// Range for pulses (ppm input) is [-512:+512]
|
||||||
void processSbusFrame(uint8_t * sbus, int16_t * pulses, uint32_t size)
|
void processSbusFrame(uint8_t * sbus, int16_t * pulses, uint32_t size)
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,27 +19,33 @@ if(TIMERS EQUAL 3)
|
||||||
else()
|
else()
|
||||||
add_definitions(-DTIMERS=2)
|
add_definitions(-DTIMERS=2)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(LOG_TELEMETRY)
|
if(LOG_TELEMETRY)
|
||||||
add_definitions(-DLOG_TELEMETRY)
|
add_definitions(-DLOG_TELEMETRY)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(TRACE_SD_CARD)
|
if(TRACE_SD_CARD)
|
||||||
add_definitions(-DTRACE_SD_CARD)
|
add_definitions(-DTRACE_SD_CARD)
|
||||||
set(DEBUG ON)
|
set(DEBUG ON)
|
||||||
set(DEBUG_TRACE_BUFFER ON)
|
set(DEBUG_TRACE_BUFFER ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(TRACE_FATFS)
|
if(TRACE_FATFS)
|
||||||
add_definitions(-DTRACE_FATFS)
|
add_definitions(-DTRACE_FATFS)
|
||||||
set(DEBUG ON)
|
set(DEBUG ON)
|
||||||
set(DEBUG_TRACE_BUFFER ON)
|
set(DEBUG_TRACE_BUFFER ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(TRACE_AUDIO)
|
if(TRACE_AUDIO)
|
||||||
add_definitions(-DTRACE_AUDIO)
|
add_definitions(-DTRACE_AUDIO)
|
||||||
set(DEBUG ON)
|
set(DEBUG ON)
|
||||||
set(DEBUG_TRACE_BUFFER ON)
|
set(DEBUG_TRACE_BUFFER ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(DEBUG_TRACE_BUFFER)
|
if(DEBUG_TRACE_BUFFER)
|
||||||
add_definitions(-DDEBUG_TRACE_BUFFER)
|
add_definitions(-DDEBUG_TRACE_BUFFER)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(DEBUG_INTERRUPTS)
|
if(DEBUG_INTERRUPTS)
|
||||||
add_definitions(-DDEBUG_INTERRUPTS)
|
add_definitions(-DDEBUG_INTERRUPTS)
|
||||||
set(DEBUG ON)
|
set(DEBUG ON)
|
||||||
|
@ -47,14 +53,17 @@ if(DEBUG_INTERRUPTS)
|
||||||
add_definitions(-DDEBUG_USB_INTERRUPTS)
|
add_definitions(-DDEBUG_USB_INTERRUPTS)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(DEBUG_TASKS)
|
if(DEBUG_TASKS)
|
||||||
add_definitions(-DDEBUG_TASKS)
|
add_definitions(-DDEBUG_TASKS)
|
||||||
set(DEBUG ON)
|
set(DEBUG ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(DEBUG_TIMERS)
|
if(DEBUG_TIMERS)
|
||||||
add_definitions(-DDEBUG_TIMERS)
|
add_definitions(-DDEBUG_TIMERS)
|
||||||
set(DEBUG ON)
|
set(DEBUG ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CLI)
|
if(CLI)
|
||||||
add_definitions(-DCLI)
|
add_definitions(-DCLI)
|
||||||
set(FIRMWARE_SRC ${FIRMWARE_SRC} cli.cpp)
|
set(FIRMWARE_SRC ${FIRMWARE_SRC} cli.cpp)
|
||||||
|
@ -62,23 +71,30 @@ if(CLI)
|
||||||
elseif(DEBUG)
|
elseif(DEBUG)
|
||||||
set(SRC ${SRC} dump.cpp)
|
set(SRC ${SRC} dump.cpp)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(DEBUG)
|
if(DEBUG)
|
||||||
add_definitions(-DDEBUG)
|
add_definitions(-DDEBUG)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(SUPPORT_D16_EU_ONLY)
|
if(SUPPORT_D16_EU_ONLY)
|
||||||
add_definitions(-DMODULE_D16_EU_ONLY_SUPPORT)
|
add_definitions(-DMODULE_D16_EU_ONLY_SUPPORT)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(HAPTIC)
|
if(HAPTIC)
|
||||||
add_definitions(-DHAPTIC)
|
add_definitions(-DHAPTIC)
|
||||||
set(SRC ${SRC} haptic.cpp)
|
set(SRC ${SRC} haptic.cpp)
|
||||||
set(TARGET_SRC ${TARGET_SRC} haptic_driver.cpp)
|
set(TARGET_SRC ${TARGET_SRC} haptic_driver.cpp)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
add_definitions(-DPXX -DPXX1 -DPXX2 -DDSM2 -DSBUS -DCROSSFIRE)
|
||||||
if(MULTIMODULE)
|
if(MULTIMODULE)
|
||||||
add_definitions(-DMULTIMODULE)
|
add_definitions(-DMULTIMODULE)
|
||||||
set(SRC ${SRC} pulses/multi_arm.cpp telemetry/spektrum.cpp telemetry/flysky_ibus.cpp telemetry/multi.cpp)
|
set(SRC ${SRC} pulses/multi_arm.cpp telemetry/spektrum.cpp telemetry/flysky_ibus.cpp telemetry/multi.cpp)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_definitions(-DCPUARM)
|
add_definitions(-DCPUARM)
|
||||||
add_definitions(-DTELEMETRY_FRSKY -DTELEMETRY_FRSKY_SPORT -DGPS -DPXX -DDSM2)
|
add_definitions(-DTELEMETRY_FRSKY -DTELEMETRY_FRSKY_SPORT -DGPS)
|
||||||
|
|
||||||
add_definitions(-DBOLD_FONT -DBATTGRAPH -DTHRTRACE)
|
add_definitions(-DBOLD_FONT -DBATTGRAPH -DTHRTRACE)
|
||||||
add_definitions(-DREQUIRED_SDCARD_VERSION="${SDCARD_VERSION}")
|
add_definitions(-DREQUIRED_SDCARD_VERSION="${SDCARD_VERSION}")
|
||||||
include_directories(${COOS_DIR} ${COOS_DIR}/kernel ${COOS_DIR}/portable)
|
include_directories(${COOS_DIR} ${COOS_DIR}/kernel ${COOS_DIR}/portable)
|
||||||
|
|
|
@ -8,7 +8,7 @@ option(USB_SERIAL "Enable USB serial (CDC)" OFF)
|
||||||
|
|
||||||
set(ARCH ARM)
|
set(ARCH ARM)
|
||||||
set(STM32USB_DIR ${THIRDPARTY_DIR}/STM32_USB-Host-Device_Lib_V2.2.0/Libraries)
|
set(STM32USB_DIR ${THIRDPARTY_DIR}/STM32_USB-Host-Device_Lib_V2.2.0/Libraries)
|
||||||
add_definitions(-DSTM32 -DLUA_INPUTS -DVARIO -DCROSSFIRE)
|
add_definitions(-DSTM32 -DLUA_INPUTS -DVARIO)
|
||||||
|
|
||||||
include_directories(${RADIO_SRC_DIRECTORY}/targets/common/arm/stm32)
|
include_directories(${RADIO_SRC_DIRECTORY}/targets/common/arm/stm32)
|
||||||
include_directories(${STM32USB_DIR}/STM32_USB_OTG_Driver/inc)
|
include_directories(${STM32USB_DIR}/STM32_USB_OTG_Driver/inc)
|
||||||
|
|
|
@ -97,8 +97,8 @@ void intmoduleSendNextFrame()
|
||||||
DMA_InitStructure.DMA_Channel = INTMODULE_DMA_CHANNEL;
|
DMA_InitStructure.DMA_Channel = INTMODULE_DMA_CHANNEL;
|
||||||
DMA_InitStructure.DMA_PeripheralBaseAddr = CONVERT_PTR_UINT(&INTMODULE_USART->DR);
|
DMA_InitStructure.DMA_PeripheralBaseAddr = CONVERT_PTR_UINT(&INTMODULE_USART->DR);
|
||||||
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
|
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
|
||||||
DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(modulePulsesData[INTERNAL_MODULE].pxx2.getData());
|
DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(intmodulePulsesData.pxx2.getData());
|
||||||
DMA_InitStructure.DMA_BufferSize = modulePulsesData[INTERNAL_MODULE].pxx2.getSize();
|
DMA_InitStructure.DMA_BufferSize = intmodulePulsesData.pxx2.getSize();
|
||||||
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
||||||
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
||||||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
||||||
|
|
|
@ -185,7 +185,6 @@ void SDRAM_Init(void);
|
||||||
#define EXTERNAL_MODULE_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
|
#define EXTERNAL_MODULE_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
|
||||||
#define IS_INTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) == Bit_SET)
|
#define IS_INTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) == Bit_SET)
|
||||||
#define IS_EXTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) == Bit_SET)
|
#define IS_EXTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) == Bit_SET)
|
||||||
#define IS_UART_MODULE(port) (port == INTERNAL_MODULE)
|
|
||||||
|
|
||||||
void init_ppm(uint32_t module_index);
|
void init_ppm(uint32_t module_index);
|
||||||
void disable_ppm(uint32_t module_index);
|
void disable_ppm(uint32_t module_index);
|
||||||
|
|
|
@ -223,23 +223,23 @@ void extmoduleSendNextFrame()
|
||||||
#if defined(PCBX10) || PCBREV >= 13
|
#if defined(PCBX10) || PCBREV >= 13
|
||||||
EXTMODULE_TIMER->CCR3 = GET_MODULE_PPM_DELAY(EXTERNAL_MODULE)*2;
|
EXTMODULE_TIMER->CCR3 = GET_MODULE_PPM_DELAY(EXTERNAL_MODULE)*2;
|
||||||
EXTMODULE_TIMER->CCER = TIM_CCER_CC3E | (GET_MODULE_PPM_POLARITY(EXTERNAL_MODULE) ? TIM_CCER_CC3P : 0);
|
EXTMODULE_TIMER->CCER = TIM_CCER_CC3E | (GET_MODULE_PPM_POLARITY(EXTERNAL_MODULE) ? TIM_CCER_CC3P : 0);
|
||||||
EXTMODULE_TIMER->CCR2 = *(modulePulsesData[EXTERNAL_MODULE].ppm.ptr - 1) - 4000; // 2mS in advance
|
EXTMODULE_TIMER->CCR2 = *(extmodulePulsesData.ppm.ptr - 1) - 4000; // 2mS in advance
|
||||||
EXTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
EXTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||||
EXTMODULE_DMA_STREAM->CR |= EXTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
EXTMODULE_DMA_STREAM->CR |= EXTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
||||||
#else
|
#else
|
||||||
EXTMODULE_TIMER->CCR1 = GET_MODULE_PPM_DELAY(EXTERNAL_MODULE)*2;
|
EXTMODULE_TIMER->CCR1 = GET_MODULE_PPM_DELAY(EXTERNAL_MODULE)*2;
|
||||||
EXTMODULE_TIMER->CCER = TIM_CCER_CC1E | (GET_MODULE_PPM_POLARITY(EXTERNAL_MODULE) ? TIM_CCER_CC1P : 0);
|
EXTMODULE_TIMER->CCER = TIM_CCER_CC1E | (GET_MODULE_PPM_POLARITY(EXTERNAL_MODULE) ? TIM_CCER_CC1P : 0);
|
||||||
EXTMODULE_TIMER->CCR2 = *(modulePulsesData[EXTERNAL_MODULE].ppm.ptr - 1) - 4000; // 2mS in advance
|
EXTMODULE_TIMER->CCR2 = *(extmodulePulsesData.ppm.ptr - 1) - 4000; // 2mS in advance
|
||||||
EXTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
EXTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||||
EXTMODULE_DMA_STREAM->CR |= EXTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_1 | DMA_SxCR_MSIZE_1 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
EXTMODULE_DMA_STREAM->CR |= EXTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_1 | DMA_SxCR_MSIZE_1 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
||||||
#endif
|
#endif
|
||||||
EXTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR);
|
EXTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR);
|
||||||
EXTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(modulePulsesData[EXTERNAL_MODULE].ppm.pulses);
|
EXTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(extmodulePulsesData.ppm.pulses);
|
||||||
EXTMODULE_DMA_STREAM->NDTR = modulePulsesData[EXTERNAL_MODULE].ppm.ptr - modulePulsesData[EXTERNAL_MODULE].ppm.pulses;
|
EXTMODULE_DMA_STREAM->NDTR = extmodulePulsesData.ppm.ptr - extmodulePulsesData.ppm.pulses;
|
||||||
EXTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
EXTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
||||||
}
|
}
|
||||||
else if (moduleSettings[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX) {
|
else if (moduleSettings[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX1) {
|
||||||
EXTMODULE_TIMER->CCR2 = modulePulsesData[EXTERNAL_MODULE].pxx.getLast() - 4000; // 2mS in advance
|
EXTMODULE_TIMER->CCR2 = extmodulePulsesData.pxx.getLast() - 4000; // 2mS in advance
|
||||||
EXTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
EXTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||||
#if defined(PCBX10) || PCBREV >= 13
|
#if defined(PCBX10) || PCBREV >= 13
|
||||||
EXTMODULE_DMA_STREAM->CR |= EXTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
EXTMODULE_DMA_STREAM->CR |= EXTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
||||||
|
@ -247,12 +247,12 @@ void extmoduleSendNextFrame()
|
||||||
EXTMODULE_DMA_STREAM->CR |= EXTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_1 | DMA_SxCR_MSIZE_1 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
EXTMODULE_DMA_STREAM->CR |= EXTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_1 | DMA_SxCR_MSIZE_1 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
||||||
#endif
|
#endif
|
||||||
EXTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR);
|
EXTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR);
|
||||||
EXTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(modulePulsesData[EXTERNAL_MODULE].pxx.getData());
|
EXTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(extmodulePulsesData.pxx.getData());
|
||||||
EXTMODULE_DMA_STREAM->NDTR = modulePulsesData[EXTERNAL_MODULE].pxx.getSize();
|
EXTMODULE_DMA_STREAM->NDTR = extmodulePulsesData.pxx.getSize();
|
||||||
EXTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
EXTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
||||||
}
|
}
|
||||||
else if (IS_DSM2_PROTOCOL(moduleSettings[EXTERNAL_MODULE].protocol) || IS_MULTIMODULE_PROTOCOL(moduleSettings[EXTERNAL_MODULE].protocol) || IS_SBUS_PROTOCOL(moduleSettings[EXTERNAL_MODULE].protocol)) {
|
else if (IS_DSM2_PROTOCOL(moduleSettings[EXTERNAL_MODULE].protocol) || IS_MULTIMODULE_PROTOCOL(moduleSettings[EXTERNAL_MODULE].protocol) || IS_SBUS_PROTOCOL(moduleSettings[EXTERNAL_MODULE].protocol)) {
|
||||||
EXTMODULE_TIMER->CCR2 = *(modulePulsesData[EXTERNAL_MODULE].dsm2.ptr - 1) - 4000; // 2mS in advance
|
EXTMODULE_TIMER->CCR2 = *(extmodulePulsesData.dsm2.ptr - 1) - 4000; // 2mS in advance
|
||||||
EXTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
EXTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||||
#if defined(PCBX10) || PCBREV >= 13
|
#if defined(PCBX10) || PCBREV >= 13
|
||||||
EXTMODULE_DMA_STREAM->CR |= EXTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
EXTMODULE_DMA_STREAM->CR |= EXTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
||||||
|
@ -264,8 +264,8 @@ void extmoduleSendNextFrame()
|
||||||
EXTMODULE_TIMER->CCER = TIM_CCER_CC1E | (GET_SBUS_POLARITY(EXTERNAL_MODULE) ? TIM_CCER_CC1P : 0); // reverse polarity for Sbus if needed
|
EXTMODULE_TIMER->CCER = TIM_CCER_CC1E | (GET_SBUS_POLARITY(EXTERNAL_MODULE) ? TIM_CCER_CC1P : 0); // reverse polarity for Sbus if needed
|
||||||
#endif
|
#endif
|
||||||
EXTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR);
|
EXTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR);
|
||||||
EXTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(modulePulsesData[EXTERNAL_MODULE].dsm2.pulses);
|
EXTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(extmodulePulsesData.dsm2.pulses);
|
||||||
EXTMODULE_DMA_STREAM->NDTR = modulePulsesData[EXTERNAL_MODULE].dsm2.ptr - modulePulsesData[EXTERNAL_MODULE].dsm2.pulses;
|
EXTMODULE_DMA_STREAM->NDTR = extmodulePulsesData.dsm2.ptr - extmodulePulsesData.dsm2.pulses;
|
||||||
EXTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
EXTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -63,8 +63,6 @@ void init_main_ppm(uint32_t period, uint32_t out_enable)
|
||||||
{
|
{
|
||||||
Pwm * pwmptr;
|
Pwm * pwmptr;
|
||||||
|
|
||||||
setupPulsesPPMModule(EXTERNAL_MODULE);
|
|
||||||
|
|
||||||
if (out_enable) {
|
if (out_enable) {
|
||||||
module_output_active();
|
module_output_active();
|
||||||
}
|
}
|
||||||
|
@ -294,8 +292,8 @@ extern "C" void PWM_IRQHandler(void)
|
||||||
else {
|
else {
|
||||||
// Kick off serial output here
|
// Kick off serial output here
|
||||||
Ssc * sscptr = SSC;
|
Ssc * sscptr = SSC;
|
||||||
sscptr->SSC_TPR = CONVERT_PTR_UINT(modulePulsesData[EXTERNAL_MODULE].pxx.getData());
|
sscptr->SSC_TPR = CONVERT_PTR_UINT(extmodulePulsesData.pxx.getData());
|
||||||
sscptr->SSC_TCR = modulePulsesData[EXTERNAL_MODULE].pxx.getSize();
|
sscptr->SSC_TCR = extmodulePulsesData.pxx.getSize();
|
||||||
sscptr->SSC_PTCR = SSC_PTCR_TXTEN; // Start transfers
|
sscptr->SSC_PTCR = SSC_PTCR_TXTEN; // Start transfers
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -318,8 +316,8 @@ extern "C" void PWM_IRQHandler(void)
|
||||||
else {
|
else {
|
||||||
// Kick off serial output here
|
// Kick off serial output here
|
||||||
Ssc * sscptr = SSC;
|
Ssc * sscptr = SSC;
|
||||||
sscptr->SSC_TPR = CONVERT_PTR_UINT(modulePulsesData[EXTERNAL_MODULE].dsm2.pulses);
|
sscptr->SSC_TPR = CONVERT_PTR_UINT(extmodulePulsesData.dsm2.pulses);
|
||||||
sscptr->SSC_TCR = (uint8_t *)modulePulsesData[EXTERNAL_MODULE].dsm2.ptr - (uint8_t *)modulePulsesData[EXTERNAL_MODULE].dsm2.pulses;
|
sscptr->SSC_TCR = (uint8_t *)extmodulePulsesData.dsm2.ptr - (uint8_t *)extmodulePulsesData.dsm2.pulses;
|
||||||
sscptr->SSC_PTCR = SSC_PTCR_TXTEN; // Start transfers
|
sscptr->SSC_PTCR = SSC_PTCR_TXTEN; // Start transfers
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -344,15 +342,15 @@ extern "C" void PWM_IRQHandler(void)
|
||||||
else {
|
else {
|
||||||
// Kick off serial output here
|
// Kick off serial output here
|
||||||
Ssc * sscptr = SSC;
|
Ssc * sscptr = SSC;
|
||||||
sscptr->SSC_TPR = CONVERT_PTR_UINT(modulePulsesData[EXTERNAL_MODULE].dsm2.pulses);
|
sscptr->SSC_TPR = CONVERT_PTR_UINT(extmodulePulsesData.dsm2.pulses);
|
||||||
sscptr->SSC_TCR = (uint8_t *)modulePulsesData[EXTERNAL_MODULE].dsm2.ptr - (uint8_t *)modulePulsesData[EXTERNAL_MODULE].dsm2.pulses;
|
sscptr->SSC_TCR = (uint8_t *)extmodulePulsesData.dsm2.ptr - (uint8_t *)extmodulePulsesData.dsm2.pulses;
|
||||||
sscptr->SSC_PTCR = SSC_PTCR_TXTEN; // Start transfers
|
sscptr->SSC_PTCR = SSC_PTCR_TXTEN; // Start transfers
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = *modulePulsesData[EXTERNAL_MODULE].ppm.ptr++;
|
pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = *extmodulePulsesData.ppm.ptr++;
|
||||||
if (*modulePulsesData[EXTERNAL_MODULE].ppm.ptr == 0) {
|
if (*extmodulePulsesData.ppm.ptr == 0) {
|
||||||
setExternalModulePolarity();
|
setExternalModulePolarity();
|
||||||
setupPulses(EXTERNAL_MODULE);
|
setupPulses(EXTERNAL_MODULE);
|
||||||
}
|
}
|
||||||
|
@ -365,7 +363,7 @@ extern "C" void PWM_IRQHandler(void)
|
||||||
if (reason & PWM_ISR1_CHID1) {
|
if (reason & PWM_ISR1_CHID1) {
|
||||||
pwmptr->PWM_CH_NUM[1].PWM_CPDRUPD = *modulePulsesData[EXTRA_MODULE].ppm.ptr++;
|
pwmptr->PWM_CH_NUM[1].PWM_CPDRUPD = *modulePulsesData[EXTRA_MODULE].ppm.ptr++;
|
||||||
if (*modulePulsesData[EXTRA_MODULE].ppm.ptr == 0) {
|
if (*modulePulsesData[EXTRA_MODULE].ppm.ptr == 0) {
|
||||||
setupPulsesPPMModule(EXTRA_MODULE);
|
setupPulses(EXTRA_MODULE);
|
||||||
setExtraModulePolarity();
|
setExtraModulePolarity();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,7 +137,6 @@ else()
|
||||||
intmodule_pulses_driver.cpp
|
intmodule_pulses_driver.cpp
|
||||||
trainer_driver.cpp
|
trainer_driver.cpp
|
||||||
)
|
)
|
||||||
add_definitions(-DSBUS)
|
|
||||||
set(PULSES_SRC
|
set(PULSES_SRC
|
||||||
${PULSES_SRC}
|
${PULSES_SRC}
|
||||||
../sbus.cpp
|
../sbus.cpp
|
||||||
|
|
|
@ -172,13 +172,6 @@ uint32_t isBootloaderStart(const uint8_t * buffer);
|
||||||
#define EXTERNAL_MODULE_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
|
#define EXTERNAL_MODULE_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
|
||||||
#define IS_INTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) == Bit_SET)
|
#define IS_INTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) == Bit_SET)
|
||||||
#define IS_EXTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) == Bit_SET)
|
#define IS_EXTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) == Bit_SET)
|
||||||
#if defined(INTMODULE_USART) && defined(EXTMODULE_USART)
|
|
||||||
#define IS_UART_MODULE(port) (true)
|
|
||||||
#elif defined(INTMODULE_USART)
|
|
||||||
#define IS_UART_MODULE(port) (port == INTERNAL_MODULE)
|
|
||||||
#else
|
|
||||||
#define IS_UART_MODULE(port) (false)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void init_ppm(uint8_t module);
|
void init_ppm(uint8_t module);
|
||||||
void disable_ppm(uint8_t module);
|
void disable_ppm(uint8_t module);
|
||||||
|
|
|
@ -221,23 +221,24 @@ void extmoduleSendNextFrame()
|
||||||
if (moduleSettings[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PPM) {
|
if (moduleSettings[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PPM) {
|
||||||
EXTMODULE_TIMER->CCR1 = GET_MODULE_PPM_DELAY(EXTERNAL_MODULE) * 2;
|
EXTMODULE_TIMER->CCR1 = GET_MODULE_PPM_DELAY(EXTERNAL_MODULE) * 2;
|
||||||
EXTMODULE_TIMER->CCER = EXTMODULE_TIMER_OUTPUT_ENABLE | (GET_MODULE_PPM_POLARITY(EXTERNAL_MODULE) ? EXTMODULE_TIMER_OUTPUT_POLARITY : 0); // // we are using complementary output so logic has to be reversed here
|
EXTMODULE_TIMER->CCER = EXTMODULE_TIMER_OUTPUT_ENABLE | (GET_MODULE_PPM_POLARITY(EXTERNAL_MODULE) ? EXTMODULE_TIMER_OUTPUT_POLARITY : 0); // // we are using complementary output so logic has to be reversed here
|
||||||
EXTMODULE_TIMER->CCR2 = *(modulePulsesData[EXTERNAL_MODULE].ppm.ptr - 1) - 4000; // 2mS in advance
|
EXTMODULE_TIMER->CCR2 = *(extmodulePulsesData.ppm.ptr - 1) - 4000; // 2mS in advance
|
||||||
EXTMODULE_TIMER_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
EXTMODULE_TIMER_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||||
EXTMODULE_TIMER_DMA_STREAM->CR |= EXTMODULE_TIMER_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
EXTMODULE_TIMER_DMA_STREAM->CR |= EXTMODULE_TIMER_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
||||||
EXTMODULE_TIMER_DMA_STREAM->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR);
|
EXTMODULE_TIMER_DMA_STREAM->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR);
|
||||||
EXTMODULE_TIMER_DMA_STREAM->M0AR = CONVERT_PTR_UINT(modulePulsesData[EXTERNAL_MODULE].ppm.pulses);
|
EXTMODULE_TIMER_DMA_STREAM->M0AR = CONVERT_PTR_UINT(extmodulePulsesData.ppm.pulses);
|
||||||
EXTMODULE_TIMER_DMA_STREAM->NDTR = modulePulsesData[EXTERNAL_MODULE].ppm.ptr - modulePulsesData[EXTERNAL_MODULE].ppm.pulses;
|
EXTMODULE_TIMER_DMA_STREAM->NDTR = extmodulePulsesData.ppm.ptr - extmodulePulsesData.ppm.pulses;
|
||||||
EXTMODULE_TIMER_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
EXTMODULE_TIMER_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
||||||
}
|
}
|
||||||
else if (moduleSettings[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX) {
|
#if defined(PXX1)
|
||||||
|
else if (moduleSettings[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX1) {
|
||||||
#if defined(EXTMODULE_USART)
|
#if defined(EXTMODULE_USART)
|
||||||
DMA_InitTypeDef DMA_InitStructure;
|
DMA_InitTypeDef DMA_InitStructure;
|
||||||
DMA_DeInit(EXTMODULE_USART_DMA_STREAM);
|
DMA_DeInit(EXTMODULE_USART_DMA_STREAM);
|
||||||
DMA_InitStructure.DMA_Channel = EXTMODULE_USART_DMA_CHANNEL;
|
DMA_InitStructure.DMA_Channel = EXTMODULE_USART_DMA_CHANNEL;
|
||||||
DMA_InitStructure.DMA_PeripheralBaseAddr = CONVERT_PTR_UINT(&EXTMODULE_USART->DR);
|
DMA_InitStructure.DMA_PeripheralBaseAddr = CONVERT_PTR_UINT(&EXTMODULE_USART->DR);
|
||||||
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
|
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
|
||||||
DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(modulePulsesData[EXTERNAL_MODULE].pxx_uart.getData());
|
DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(extmodulePulsesData.pxx_uart.getData());
|
||||||
DMA_InitStructure.DMA_BufferSize = modulePulsesData[EXTERNAL_MODULE].pxx_uart.getSize();
|
DMA_InitStructure.DMA_BufferSize = extmodulePulsesData.pxx_uart.getSize();
|
||||||
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
||||||
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
||||||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
||||||
|
@ -253,33 +254,38 @@ void extmoduleSendNextFrame()
|
||||||
USART_DMACmd(EXTMODULE_USART, USART_DMAReq_Tx, ENABLE);
|
USART_DMACmd(EXTMODULE_USART, USART_DMAReq_Tx, ENABLE);
|
||||||
EXTMODULE_TIMER->DIER |= TIM_DIER_CC2IE;
|
EXTMODULE_TIMER->DIER |= TIM_DIER_CC2IE;
|
||||||
#else
|
#else
|
||||||
EXTMODULE_TIMER->CCR2 = modulePulsesData[EXTERNAL_MODULE].pxx.getLast() - 4000; // 2mS in advance
|
EXTMODULE_TIMER->CCR2 = extmodulePulsesData.pxx.getLast() - 4000; // 2mS in advance
|
||||||
EXTMODULE_TIMER_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
EXTMODULE_TIMER_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||||
EXTMODULE_TIMER_DMA_STREAM->CR |= EXTMODULE_TIMER_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
EXTMODULE_TIMER_DMA_STREAM->CR |= EXTMODULE_TIMER_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
||||||
EXTMODULE_TIMER_DMA_STREAM->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR);
|
EXTMODULE_TIMER_DMA_STREAM->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR);
|
||||||
EXTMODULE_TIMER_DMA_STREAM->M0AR = CONVERT_PTR_UINT(modulePulsesData[EXTERNAL_MODULE].pxx.getData());
|
EXTMODULE_TIMER_DMA_STREAM->M0AR = CONVERT_PTR_UINT(extmodulePulsesData.pxx.getData());
|
||||||
EXTMODULE_TIMER_DMA_STREAM->NDTR = modulePulsesData[EXTERNAL_MODULE].pxx.getSize();
|
EXTMODULE_TIMER_DMA_STREAM->NDTR = extmodulePulsesData.pxx.getSize();
|
||||||
EXTMODULE_TIMER_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
EXTMODULE_TIMER_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(DSM2)
|
||||||
else if (IS_DSM2_PROTOCOL(moduleSettings[EXTERNAL_MODULE].protocol) || IS_MULTIMODULE_PROTOCOL(moduleSettings[EXTERNAL_MODULE].protocol) || IS_SBUS_PROTOCOL(moduleSettings[EXTERNAL_MODULE].protocol)) {
|
else if (IS_DSM2_PROTOCOL(moduleSettings[EXTERNAL_MODULE].protocol) || IS_MULTIMODULE_PROTOCOL(moduleSettings[EXTERNAL_MODULE].protocol) || IS_SBUS_PROTOCOL(moduleSettings[EXTERNAL_MODULE].protocol)) {
|
||||||
if (IS_SBUS_PROTOCOL(moduleSettings[EXTERNAL_MODULE].protocol))
|
if (IS_SBUS_PROTOCOL(moduleSettings[EXTERNAL_MODULE].protocol))
|
||||||
EXTMODULE_TIMER->CCER = EXTMODULE_TIMER_OUTPUT_ENABLE | (GET_SBUS_POLARITY(EXTERNAL_MODULE) ? EXTMODULE_TIMER_OUTPUT_POLARITY : 0); // reverse polarity for Sbus if needed
|
EXTMODULE_TIMER->CCER = EXTMODULE_TIMER_OUTPUT_ENABLE | (GET_SBUS_POLARITY(EXTERNAL_MODULE) ? EXTMODULE_TIMER_OUTPUT_POLARITY : 0); // reverse polarity for Sbus if needed
|
||||||
EXTMODULE_TIMER->CCR2 = *(modulePulsesData[EXTERNAL_MODULE].dsm2.ptr - 1) - 4000; // 2mS in advance
|
EXTMODULE_TIMER->CCR2 = *(extmodulePulsesData.dsm2.ptr - 1) - 4000; // 2mS in advance
|
||||||
EXTMODULE_TIMER_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
EXTMODULE_TIMER_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||||
EXTMODULE_TIMER_DMA_STREAM->CR |= EXTMODULE_TIMER_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
EXTMODULE_TIMER_DMA_STREAM->CR |= EXTMODULE_TIMER_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
||||||
EXTMODULE_TIMER_DMA_STREAM->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR);
|
EXTMODULE_TIMER_DMA_STREAM->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR);
|
||||||
EXTMODULE_TIMER_DMA_STREAM->M0AR = CONVERT_PTR_UINT(modulePulsesData[EXTERNAL_MODULE].dsm2.pulses);
|
EXTMODULE_TIMER_DMA_STREAM->M0AR = CONVERT_PTR_UINT(extmodulePulsesData.dsm2.pulses);
|
||||||
EXTMODULE_TIMER_DMA_STREAM->NDTR = modulePulsesData[EXTERNAL_MODULE].dsm2.ptr - modulePulsesData[EXTERNAL_MODULE].dsm2.pulses;
|
EXTMODULE_TIMER_DMA_STREAM->NDTR = extmodulePulsesData.dsm2.ptr - extmodulePulsesData.dsm2.pulses;
|
||||||
EXTMODULE_TIMER_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
EXTMODULE_TIMER_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(CROSSFIRE)
|
#if defined(CROSSFIRE)
|
||||||
else if (moduleSettings[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_CROSSFIRE) {
|
else if (moduleSettings[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_CROSSFIRE) {
|
||||||
sportSendBuffer(modulePulsesData[EXTERNAL_MODULE].crossfire.pulses, modulePulsesData[EXTERNAL_MODULE].crossfire.length);
|
sportSendBuffer(extmodulePulsesData.crossfire.pulses, extmodulePulsesData.crossfire.length);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (moduleSettings[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX2) {
|
else if (moduleSettings[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX2) {
|
||||||
sportSendBuffer(modulePulsesData[EXTERNAL_MODULE].pxx2.getData(), modulePulsesData[EXTERNAL_MODULE].pxx2.getSize());
|
sportSendBuffer(extmodulePulsesData.pxx2.getData(), extmodulePulsesData.pxx2.getSize());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
EXTMODULE_TIMER->DIER |= TIM_DIER_CC2IE;
|
EXTMODULE_TIMER->DIER |= TIM_DIER_CC2IE;
|
||||||
|
|
|
@ -34,25 +34,25 @@ void intmoduleStop()
|
||||||
|
|
||||||
void intmoduleSendNextFrame()
|
void intmoduleSendNextFrame()
|
||||||
{
|
{
|
||||||
if (moduleSettings[INTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX) {
|
if (moduleSettings[INTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX1) {
|
||||||
INTMODULE_TIMER->CCR2 = modulePulsesData[INTERNAL_MODULE].pxx.getLast() - 4000; // 2mS in advance
|
INTMODULE_TIMER->CCR2 = intmodulePulsesData.pxx.getLast() - 4000; // 2mS in advance
|
||||||
INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||||
INTMODULE_DMA_STREAM->CR |= INTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
INTMODULE_DMA_STREAM->CR |= INTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
||||||
INTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&INTMODULE_TIMER->ARR);
|
INTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&INTMODULE_TIMER->ARR);
|
||||||
INTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(modulePulsesData[INTERNAL_MODULE].pxx.getData());
|
INTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(intmodulePulsesData.pxx.getData());
|
||||||
INTMODULE_DMA_STREAM->NDTR = modulePulsesData[INTERNAL_MODULE].pxx.getSize();
|
INTMODULE_DMA_STREAM->NDTR = intmodulePulsesData.pxx.getSize();
|
||||||
INTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
INTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
||||||
}
|
}
|
||||||
#if defined(TARANIS_INTERNAL_PPM)
|
#if defined(TARANIS_INTERNAL_PPM)
|
||||||
else if (moduleSettings[INTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PPM) {
|
else if (moduleSettings[INTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PPM) {
|
||||||
INTMODULE_TIMER->CCR3 = GET_MODULE_PPM_DELAY(INTERNAL_MODULE) * 2;
|
INTMODULE_TIMER->CCR3 = GET_MODULE_PPM_DELAY(INTERNAL_MODULE) * 2;
|
||||||
INTMODULE_TIMER->CCER = TIM_CCER_CC3E | (GET_MODULE_PPM_POLARITY(INTERNAL_MODULE) ? 0 : TIM_CCER_CC3P);
|
INTMODULE_TIMER->CCER = TIM_CCER_CC3E | (GET_MODULE_PPM_POLARITY(INTERNAL_MODULE) ? 0 : TIM_CCER_CC3P);
|
||||||
INTMODULE_TIMER->CCR2 = *(modulePulsesData[INTERNAL_MODULE].ppm.ptr - 1) - 4000; // 2mS in advance
|
INTMODULE_TIMER->CCR2 = *(intmodulePulsesData.ppm.ptr - 1) - 4000; // 2mS in advance
|
||||||
INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||||
INTMODULE_DMA_STREAM->CR |= INTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
INTMODULE_DMA_STREAM->CR |= INTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
||||||
INTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&INTMODULE_TIMER->ARR);
|
INTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&INTMODULE_TIMER->ARR);
|
||||||
INTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(modulePulsesData[INTERNAL_MODULE].ppm.pulses);
|
INTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(intmodulePulsesData.ppm.pulses);
|
||||||
INTMODULE_DMA_STREAM->NDTR = modulePulsesData[INTERNAL_MODULE].ppm.ptr - modulePulsesData[INTERNAL_MODULE].ppm.pulses;
|
INTMODULE_DMA_STREAM->NDTR = intmodulePulsesData.ppm.ptr - intmodulePulsesData.ppm.pulses;
|
||||||
INTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
INTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -100,7 +100,7 @@ TASK_FUNCTION(mixerTask)
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
|
|
||||||
#if defined(SBUS)
|
#if !defined(PCBXLITE)
|
||||||
processSbusInput();
|
processSbusInput();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@ static void processMultiSyncPacket(const uint8_t *data)
|
||||||
multiSyncStatus.calcAdjustedRefreshRate(data[0] << 8 | data[1], data[2] << 8 | data[3]);
|
multiSyncStatus.calcAdjustedRefreshRate(data[0] << 8 | data[1], data[2] << 8 | data[3]);
|
||||||
|
|
||||||
#if !defined(PPM_PIN_SERIAL)
|
#if !defined(PPM_PIN_SERIAL)
|
||||||
TRACE("MP ADJ: rest: %d, lag %04d, diff: %04d target: %d, interval: %d, Refresh: %d, intAdjRefresh: %d, adjRefresh %d\r\n", modulePulsesData[EXTERNAL_MODULE].dsm2.rest,
|
TRACE("MP ADJ: rest: %d, lag %04d, diff: %04d target: %d, interval: %d, Refresh: %d, intAdjRefresh: %d, adjRefresh %d\r\n", extmodulePulsesData.dsm2.rest,
|
||||||
multiSyncStatus.inputLag, oldlag-multiSyncStatus.inputLag, multiSyncStatus.target, multiSyncStatus.interval, multiSyncStatus.refreshRate, multiSyncStatus.adjustedRefreshRate/50,
|
multiSyncStatus.inputLag, oldlag-multiSyncStatus.inputLag, multiSyncStatus.target, multiSyncStatus.interval, multiSyncStatus.refreshRate, multiSyncStatus.adjustedRefreshRate/50,
|
||||||
multiSyncStatus.getAdjustedRefreshRate());
|
multiSyncStatus.getAdjustedRefreshRate());
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue