From f488ebc1f5fcdf94a81a30a662e7e9895822da81 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 8 Jun 2016 22:19:46 +0200 Subject: [PATCH] [Horus] I forgot this part for PPM pulses ... --- radio/src/pulses/ppm_arm.cpp | 2 +- radio/src/pulses/pulses_arm.h | 4 +++- radio/src/targets/horus/extmodule_driver.cpp | 18 ++++++++---------- radio/src/targets/taranis/extmodule_driver.cpp | 8 +++++--- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/radio/src/pulses/ppm_arm.cpp b/radio/src/pulses/ppm_arm.cpp index 5b670d04d..ecc5a892f 100644 --- a/radio/src/pulses/ppm_arm.cpp +++ b/radio/src/pulses/ppm_arm.cpp @@ -23,7 +23,7 @@ template void setupPulsesPPM(uint8_t port, PpmPulsesData * ppmPulsesData) { - int16_t PPM_range = g_model.extendedLimits ? (512*LIMIT_EXT_PERCENT/100) * 2 : 512 * 2; //range of 0.7..1.7msec + int16_t PPM_range = g_model.extendedLimits ? (512*LIMIT_EXT_PERCENT/100) * 2 : 512 * 2; // range of 0.7 .. 1.7msec // Total frame length = 22.5msec // each pulse is 0.7..1.7ms long with a 0.3ms stop tail diff --git a/radio/src/pulses/pulses_arm.h b/radio/src/pulses/pulses_arm.h index 06a234e25..eec7e37a2 100644 --- a/radio/src/pulses/pulses_arm.h +++ b/radio/src/pulses/pulses_arm.h @@ -60,6 +60,7 @@ PACK(struct Dsm2SerialPulsesData { uint8_t * ptr; uint8_t serialByte ; uint8_t serialBitCount; + uint16_t _alignment; }); #endif @@ -68,6 +69,7 @@ PACK(struct PxxUartPulsesData { uint8_t pulses[64]; uint8_t * ptr; uint16_t pcmCrc; + uint16_t _alignment; }); #endif @@ -128,7 +130,7 @@ union ModulePulsesData { extern ModulePulsesData modulePulsesData[NUM_MODULES]; union TrainerPulsesData { - PpmPulsesData ppm; + PpmPulsesData ppm; }; extern TrainerPulsesData trainerPulsesData; diff --git a/radio/src/targets/horus/extmodule_driver.cpp b/radio/src/targets/horus/extmodule_driver.cpp index 3cfd4559a..a8788163e 100644 --- a/radio/src/targets/horus/extmodule_driver.cpp +++ b/radio/src/targets/horus/extmodule_driver.cpp @@ -96,9 +96,12 @@ void extmodulePpmStart() EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) EXTMODULE_TIMER->ARR = 45000; // CH1 PWM mode 1, CH1 out is OFF if CNTCCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC2PE; // PWM mode 1 - EXTMODULE_TIMER->EGR = 1; // Reloads register vales now + EXTMODULE_TIMER->CCR1 = GET_PPM_DELAY(EXTERNAL_MODULE)*2; + EXTMODULE_TIMER->CCER = TIM_CCER_CC1E | (GET_PPM_POLARITY(EXTERNAL_MODULE) ? TIM_CCER_CC1P : 0); + EXTMODULE_TIMER->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_0; // Force O/P high + EXTMODULE_TIMER->EGR = 1; // Reloads register values now EXTMODULE_TIMER->DIER |= TIM_DIER_UDE; // Update DMA request + EXTMODULE_TIMER->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC2PE; // PWM mode 1 EXTMODULE_TIMER->CR1 |= TIM_CR1_CEN; // Start timer extmoduleSendNextFrame(); @@ -109,13 +112,6 @@ void extmodulePpmStart() NVIC_SetPriority(EXTMODULE_TIMER_IRQn, 7); } -void set_external_ppm_parameters(uint32_t idleTime, uint32_t delay, uint32_t positive) -{ - EXTMODULE_TIMER->CCR2 = idleTime; - EXTMODULE_TIMER->CCR1 = delay; - EXTMODULE_TIMER->CCER = TIM_CCER_CC1E | (positive ? 0 : TIM_CCER_CC1P); -} - void extmodulePxxStart() { EXTERNAL_MODULE_ON(); @@ -217,6 +213,8 @@ void extmoduleCrossfireStart() void extmoduleSendNextFrame() { if (s_current_protocol[EXTERNAL_MODULE] == PROTO_PPM) { + EXTMODULE_TIMER->CCR1 = GET_PPM_DELAY(EXTERNAL_MODULE)*2; + EXTMODULE_TIMER->CCER = TIM_CCER_CC1E | (GET_PPM_POLARITY(EXTERNAL_MODULE) ? TIM_CCER_CC1P : 0); 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->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR); @@ -253,7 +251,7 @@ extern "C" void EXTMODULE_DMA_IRQHandler() DMA_ClearITPendingBit(EXTMODULE_DMA_STREAM, EXTMODULE_DMA_FLAG_TC); uint32_t arr = EXTMODULE_TIMER->ARR; - if (arr > 4000) { + if (0 && arr > 5000) { EXTMODULE_TIMER->CCR2 = arr - 4000; // 2mS in advance EXTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; // Clear flag EXTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; // Enable this interrupt diff --git a/radio/src/targets/taranis/extmodule_driver.cpp b/radio/src/targets/taranis/extmodule_driver.cpp index cf591031d..fe394fbdf 100644 --- a/radio/src/targets/taranis/extmodule_driver.cpp +++ b/radio/src/targets/taranis/extmodule_driver.cpp @@ -83,10 +83,13 @@ void extmodulePpmStart() EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz EXTMODULE_TIMER->ARR = 45000; - EXTMODULE_TIMER->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC2PE; // PWM mode 1 + EXTMODULE_TIMER->CCR1 = GET_PPM_DELAY(EXTERNAL_MODULE)*2; + EXTMODULE_TIMER->CCER = TIM_CCER_CC1NE | (GET_PPM_POLARITY(EXTERNAL_MODULE) ? TIM_CCER_CC1NP : 0); // // we are using complementary output so logic has to be reversed here EXTMODULE_TIMER->BDTR = TIM_BDTR_MOE; + EXTMODULE_TIMER->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_0; // Force O/P high 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->CR1 |= TIM_CR1_CEN; extmoduleSendNextFrame(); @@ -199,8 +202,7 @@ void extmoduleSendNextFrame() { if (s_current_protocol[EXTERNAL_MODULE] == PROTO_PPM) { EXTMODULE_TIMER->CCR1 = GET_PPM_DELAY(EXTERNAL_MODULE)*2; - // we are using complementary output so logic has to be reversed here - EXTMODULE_TIMER->CCER = TIM_CCER_CC1NE | (GET_PPM_POLARITY(EXTERNAL_MODULE) ? TIM_CCER_CC1NP : 0); + EXTMODULE_TIMER->CCER = TIM_CCER_CC1NE | (GET_PPM_POLARITY(EXTERNAL_MODULE) ? TIM_CCER_CC1NP : 0); // // we are using complementary output so logic has to be reversed here 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->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR);