mirror of
https://github.com/opentx/opentx.git
synced 2025-07-26 01:35:21 +03:00
[stock/gruvin9x] Better synchro when the mixer duration increases! Safety check on mixer interval.
This commit is contained in:
parent
92a7363abc
commit
efe8c2ec8c
8 changed files with 19 additions and 21 deletions
|
@ -296,5 +296,3 @@ void readKeysAndTrims()
|
|||
++enuk;
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t nextMixerTime = 0;
|
||||
|
|
|
@ -34,14 +34,11 @@
|
|||
#ifndef board_gruvin9x_h
|
||||
#define board_gruvin9x_h
|
||||
|
||||
extern uint16_t nextMixerTime;
|
||||
|
||||
#define TIMER_16KHZ_VECT TIMER2_OVF_vect
|
||||
#define COUNTER_16KHZ TCNT2
|
||||
#define TIMER_10MS_VECT TIMER2_COMPA_vect
|
||||
#define PAUSE_10MS_INTERRUPT() TIMSK2 &= ~(1<<OCIE2A)
|
||||
#define RESUME_10MS_INTERRUPT() TIMSK2 |= (1<<OCIE2A)
|
||||
#define SCHEDULE_MIXER(delay) nextMixerTime = getTmr16KHz() + (delay)
|
||||
#define PAUSE_PULSES_INTERRUPT() TIMSK1 &= ~(1<<OCIE1A)
|
||||
#define RESUME_PULSES_INTERRUPT() TIMSK1 |= (1<<OCIE1A)
|
||||
#define PAUSE_PPMIN_INTERRUPT() TIMSK3 &= ~(1<<ICIE3)
|
||||
|
|
|
@ -199,6 +199,3 @@ bool checkSlaveMode()
|
|||
}
|
||||
return lastSlaveMode;
|
||||
}
|
||||
|
||||
uint16_t nextMixerTime = 0;
|
||||
|
||||
|
|
|
@ -34,8 +34,6 @@
|
|||
#ifndef board_stock_h
|
||||
#define board_stock_h
|
||||
|
||||
extern uint16_t nextMixerTime;
|
||||
|
||||
#define TIMER_16KHZ_VECT TIMER0_OVF_vect
|
||||
#define COUNTER_16KHZ TCNT0
|
||||
|
||||
|
@ -46,8 +44,6 @@ extern uint16_t nextMixerTime;
|
|||
#define PAUSE_PULSES_INTERRUPT() TIMSK &= ~(1<<OCIE1A);
|
||||
#define RESUME_PULSES_INTERRUPT() TIMSK |= (1<<OCIE1A)
|
||||
|
||||
#define SCHEDULE_MIXER(delay) nextMixerTime = getTmr16KHz() + (delay)
|
||||
|
||||
#define PAUSE_PPMIN_INTERRUPT() ETIMSK &= ~(1<<TICIE3)
|
||||
#define RESUME_PPMIN_INTERRUPT() ETIMSK |= (1<<TICIE3)
|
||||
|
||||
|
|
|
@ -104,11 +104,13 @@ BYTE CardType; /* Card type flags */
|
|||
#else
|
||||
inline void checkMixer()
|
||||
{
|
||||
// TODO duplicated code ...
|
||||
uint16_t t0 = getTmr16KHz();
|
||||
int16_t delta = t0 - nextMixerTime;
|
||||
if (delta < 0) return;
|
||||
int16_t delta = (nextMixerEndTime - lastMixerDuration) - t0;
|
||||
if (delta > 0 && delta < MAX_MIXER_DELTA) return;
|
||||
|
||||
nextMixerEndTime = t0 + MAX_MIXER_DELTA;
|
||||
|
||||
nextMixerTime = t0 + 20*16;
|
||||
doMixerCalculations();
|
||||
|
||||
t0 = getTmr16KHz() - t0;
|
||||
|
|
|
@ -2822,10 +2822,11 @@ void perMain()
|
|||
doMixerCalculations();
|
||||
#elif !defined(PCBSKY9X)
|
||||
uint16_t t0 = getTmr16KHz();
|
||||
int16_t delta = t0 - nextMixerTime;
|
||||
if (delta < 0) return;
|
||||
int16_t delta = (nextMixerEndTime - lastMixerDuration) - t0;
|
||||
if (delta > 0 && delta < MAX_MIXER_DELTA) return;
|
||||
|
||||
nextMixerEndTime = t0 + MAX_MIXER_DELTA;
|
||||
|
||||
nextMixerTime = t0 + 20*16;
|
||||
doMixerCalculations();
|
||||
|
||||
t0 = getTmr16KHz() - t0;
|
||||
|
|
|
@ -33,6 +33,9 @@
|
|||
|
||||
#include "open9x.h"
|
||||
|
||||
uint16_t nextMixerEndTime = 0;
|
||||
#define SCHEDULE_MIXER_END(delay) nextMixerEndTime = getTmr16KHz() + (delay) - 2*16/*2ms*/
|
||||
|
||||
#if defined(DSM2)
|
||||
// DSM2 control bits
|
||||
#define DSM2_CHANS 6
|
||||
|
@ -883,7 +886,7 @@ void setupPulses()
|
|||
#ifdef PXX
|
||||
case PROTO_PXX:
|
||||
// schedule next Mixer calculations
|
||||
SCHEDULE_MIXER(20*16-lastMixerDuration-2*16/*1ms*/);
|
||||
SCHEDULE_MIXER_END(20*16);
|
||||
sei();
|
||||
setupPulsesPXX();
|
||||
break;
|
||||
|
@ -892,7 +895,7 @@ void setupPulses()
|
|||
#ifdef DSM2
|
||||
case PROTO_DSM2:
|
||||
// schedule next Mixer calculations
|
||||
SCHEDULE_MIXER(22*16-lastMixerDuration-2*16/*1ms*/);
|
||||
SCHEDULE_MIXER_END(22*16);
|
||||
sei();
|
||||
setupPulsesDsm2(); // Different versions for DSM2=SERIAL vs. DSM2=PPM
|
||||
#if defined(PCBGRUVIN9X) && defined(DSM2_PPM)
|
||||
|
@ -916,7 +919,7 @@ void setupPulses()
|
|||
g_ppmPulsePolarity = g_model.pulsePol;
|
||||
#endif
|
||||
// schedule next Mixer calculations
|
||||
SCHEDULE_MIXER(45*8+g_model.ppmFrameLength*8-lastMixerDuration-2*16/*1ms*/);
|
||||
SCHEDULE_MIXER_END(45*8+g_model.ppmFrameLength*8);
|
||||
// no sei here
|
||||
setupPulsesPPM(PROTO_PPM);
|
||||
// if PPM16, PPM16 pulses are set up automatically within the interrupts
|
||||
|
|
|
@ -40,6 +40,10 @@ extern uint8_t s_pulses_paused;
|
|||
extern uint8_t *pulses2MHzRPtr;
|
||||
extern uint8_t *pulses2MHzWPtr;
|
||||
|
||||
extern uint16_t nextMixerEndTime;
|
||||
|
||||
#define MAX_MIXER_DELTA (50*16) /* 50ms max as an interval between 2 mixer calculations */
|
||||
|
||||
void startPulses();
|
||||
inline bool pulsesStarted() { return s_current_protocol != 255; }
|
||||
inline void pausePulses() { s_pulses_paused = true; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue