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

View file

@ -161,7 +161,7 @@ union TrainerPulsesData {
extern TrainerPulsesData trainerPulsesData; extern TrainerPulsesData trainerPulsesData;
void setupPulses(uint8_t module); bool setupPulses(uint8_t module);
void setupPulsesDSM2(uint8_t module); void setupPulsesDSM2(uint8_t module);
void setupPulsesCrossfire(uint8_t module); void setupPulsesCrossfire(uint8_t module);
void setupPulsesMultimodule(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) { if (moduleSettings[INTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX2) {
DMA_InitTypeDef DMA_InitStructure; 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->DIER &= ~TIM_DIER_CC2IE; // Stop this interrupt
EXTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; EXTMODULE_TIMER->SR &= ~TIM_SR_CC2IF;
setupPulses(EXTERNAL_MODULE); if (setupPulses(EXTERNAL_MODULE))
extmoduleSendNextFrame(); extmoduleSendNextFrame();
} }

View file

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

View file

@ -94,6 +94,9 @@ void extmodulePpmStart()
EXTMODULE_TIMER->EGR = 1; EXTMODULE_TIMER->EGR = 1;
EXTMODULE_TIMER->DIER |= TIM_DIER_UDE; 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->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; EXTMODULE_TIMER->CR1 |= TIM_CR1_CEN;
NVIC_EnableIRQ(EXTMODULE_TIMER_DMA_STREAM_IRQn); 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->EGR = 1; // Restart
EXTMODULE_TIMER->DIER |= TIM_DIER_UDE; // Enable DMA on update EXTMODULE_TIMER->DIER |= TIM_DIER_UDE; // Enable DMA on update
EXTMODULE_TIMER->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0; 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; EXTMODULE_TIMER->CR1 |= TIM_CR1_CEN;
NVIC_EnableIRQ(EXTMODULE_TIMER_DMA_STREAM_IRQn); NVIC_EnableIRQ(EXTMODULE_TIMER_DMA_STREAM_IRQn);
@ -224,6 +230,9 @@ void extmodulePxxStart()
EXTMODULE_TIMER->EGR = 1; // Restart EXTMODULE_TIMER->EGR = 1; // Restart
EXTMODULE_TIMER->DIER |= TIM_DIER_UDE; // Enable DMA on update EXTMODULE_TIMER->DIER |= TIM_DIER_UDE; // Enable DMA on update
EXTMODULE_TIMER->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; 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; EXTMODULE_TIMER->CR1 |= TIM_CR1_CEN;
NVIC_EnableIRQ(EXTMODULE_TIMER_DMA_STREAM_IRQn); 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->DIER &= ~TIM_DIER_CC2IE; // Stop this interrupt
EXTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; EXTMODULE_TIMER->SR &= ~TIM_SR_CC2IF;
setupPulses(EXTERNAL_MODULE); if (setupPulses(EXTERNAL_MODULE)) {
extmoduleSendNextFrame(); extmoduleSendNextFrame();
}
} }

View file

@ -97,11 +97,6 @@ void intmodulePxx2Start()
// TODO // TODO
} }
void intmoduleSendNextPXX2Frame()
{
// TODO
}
void intmodulePxxStart() void intmodulePxxStart()
{ {
INTERNAL_MODULE_ON(); 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->DIER &= ~TIM_DIER_CC2IE; // Stop this interrupt
INTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; INTMODULE_TIMER->SR &= ~TIM_SR_CC2IF;
setupPulses(INTERNAL_MODULE); if (setupPulses(INTERNAL_MODULE))
intmoduleSendNextFrame(); intmoduleSendNextFrame();
} }

View file

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