1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-19 14:25:11 +03:00

Taranis external module fix

This commit is contained in:
Bertrand Songis 2019-02-08 10:55:11 +01:00
parent 8cd50725fa
commit 7b5b7c6d54
8 changed files with 25 additions and 22 deletions

View file

@ -119,11 +119,7 @@ void setupPulsesPXX(uint8_t module)
void setupPulsesPXX2(uint8_t module)
{
if (module == INTERNAL_MODULE) {
if (modulePulsesData[module].pxx2.setupFrame(module)) {
intmoduleSendNextPXX2Frame();
}
}
modulePulsesData[module].pxx2.setupFrame(module);
#if 0
// here we have to wait that telemetryInit() is called, hence this test
@ -281,7 +277,7 @@ void setupPulses(uint8_t module, uint8_t protocol)
}
}
void setupPulses(uint8_t module)
bool setupPulses(uint8_t module)
{
uint8_t required_protocol = getRequiredProtocol(module);
@ -291,9 +287,11 @@ void setupPulses(uint8_t module)
disablePulses(module, moduleSettings[module].protocol);
moduleSettings[module].protocol = required_protocol;
enablePulses(module, required_protocol);
return false;
}
else {
setupPulses(module, required_protocol);
return true;
}
}

View file

@ -161,7 +161,7 @@ union TrainerPulsesData {
extern TrainerPulsesData trainerPulsesData;
void setupPulses(uint8_t module);
bool setupPulses(uint8_t module);
void setupPulsesDSM2(uint8_t module);
void setupPulsesCrossfire(uint8_t module);
void setupPulsesMultimodule(uint8_t module);

View file

@ -94,7 +94,7 @@ extern "C" void INTMODULE_USART_IRQHandler(void)
}
}
void intmoduleSendNextPXX2Frame()
void intmoduleSendNextFrame()
{
if (moduleSettings[INTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX2) {
DMA_InitTypeDef DMA_InitStructure;

View file

@ -288,6 +288,6 @@ extern "C" void EXTMODULE_TIMER_IRQHandler()
{
EXTMODULE_TIMER->DIER &= ~TIM_DIER_CC2IE; // Stop this interrupt
EXTMODULE_TIMER->SR &= ~TIM_SR_CC2IF;
setupPulses(EXTERNAL_MODULE);
if (setupPulses(EXTERNAL_MODULE))
extmoduleSendNextFrame();
}

View file

@ -183,7 +183,7 @@ void init_no_pulses(uint8_t module);
void disable_no_pulses(uint8_t module);
void init_ppm(uint8_t module);
void disable_ppm(uint8_t module);
void intmoduleSendNextPXX2Frame();
void intmoduleSendNextFrame();
void init_pxx2(uint8_t module);
void disable_pxx2(uint8_t module);
void init_pxx(uint8_t module);

View file

@ -94,6 +94,9 @@ void extmodulePpmStart()
EXTMODULE_TIMER->EGR = 1;
EXTMODULE_TIMER->DIER |= TIM_DIER_UDE;
EXTMODULE_TIMER->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC2PE; // PWM mode 1
EXTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; // Clear flag
EXTMODULE_TIMER->CCR2 = 40000; // The first frame will be sent in 20ms
EXTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; // Enable this interrupt
EXTMODULE_TIMER->CR1 |= TIM_CR1_CEN;
NVIC_EnableIRQ(EXTMODULE_TIMER_DMA_STREAM_IRQn);
@ -126,6 +129,9 @@ void extmoduleSerialStart(uint32_t /*baudrate*/, uint32_t period_half_us)
EXTMODULE_TIMER->EGR = 1; // Restart
EXTMODULE_TIMER->DIER |= TIM_DIER_UDE; // Enable DMA on update
EXTMODULE_TIMER->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0;
EXTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; // Clear flag
EXTMODULE_TIMER->CCR2 = 40000; // The first frame will be sent in 20ms
EXTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; // Enable this interrupt
EXTMODULE_TIMER->CR1 |= TIM_CR1_CEN;
NVIC_EnableIRQ(EXTMODULE_TIMER_DMA_STREAM_IRQn);
@ -224,6 +230,9 @@ void extmodulePxxStart()
EXTMODULE_TIMER->EGR = 1; // Restart
EXTMODULE_TIMER->DIER |= TIM_DIER_UDE; // Enable DMA on update
EXTMODULE_TIMER->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2;
EXTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; // Clear flag
EXTMODULE_TIMER->CCR2 = 40000; // The first frame will be sent in 20ms
EXTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; // Enable this interrupt
EXTMODULE_TIMER->CR1 |= TIM_CR1_CEN;
NVIC_EnableIRQ(EXTMODULE_TIMER_DMA_STREAM_IRQn);
@ -315,6 +324,7 @@ extern "C" void EXTMODULE_TIMER_CC_IRQHandler()
{
EXTMODULE_TIMER->DIER &= ~TIM_DIER_CC2IE; // Stop this interrupt
EXTMODULE_TIMER->SR &= ~TIM_SR_CC2IF;
setupPulses(EXTERNAL_MODULE);
if (setupPulses(EXTERNAL_MODULE)) {
extmoduleSendNextFrame();
}
}

View file

@ -97,11 +97,6 @@ void intmodulePxx2Start()
// TODO
}
void intmoduleSendNextPXX2Frame()
{
// TODO
}
void intmodulePxxStart()
{
INTERNAL_MODULE_ON();
@ -186,6 +181,6 @@ extern "C" void INTMODULE_TIMER_CC_IRQHandler()
{
INTMODULE_TIMER->DIER &= ~TIM_DIER_CC2IE; // Stop this interrupt
INTMODULE_TIMER->SR &= ~TIM_SR_CC2IF;
setupPulses(INTERNAL_MODULE);
if (setupPulses(INTERNAL_MODULE))
intmoduleSendNextFrame();
}

View file

@ -82,8 +82,8 @@ void sendSynchronousPulses()
{
for (uint8_t module = 0; module < NUM_MODULES; module++) {
uint8_t protocol = moduleSettings[module].protocol;
if (isProtocolSynchronous(protocol)) {
setupPulses(module);
if (isProtocolSynchronous(protocol) && setupPulses(module)) {
intmoduleSendNextFrame();
}
}
}