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:
parent
8cd50725fa
commit
7b5b7c6d54
8 changed files with 25 additions and 22 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue