From 01f942554caab76cd56a9364ed93cb25835aed97 Mon Sep 17 00:00:00 2001 From: blckmn Date: Sat, 26 Nov 2016 21:36:50 +1100 Subject: [PATCH] Fixed timer output needing to be properly enabled (when using PPM pins etc). --- src/main/drivers/pwm_output.c | 4 +--- src/main/drivers/pwm_output_hal.c | 10 +++------- src/main/drivers/serial_escserial.c | 2 +- src/main/drivers/timer.h | 5 +++-- src/main/target/BLUEJAYF4/target.c | 14 +++++++------- 5 files changed, 15 insertions(+), 20 deletions(-) diff --git a/src/main/drivers/pwm_output.c b/src/main/drivers/pwm_output.c index b960c3785b..ed58b25291 100644 --- a/src/main/drivers/pwm_output.c +++ b/src/main/drivers/pwm_output.c @@ -64,9 +64,7 @@ static void pwmOutConfig(pwmOutputPort_t *port, const timerHardware_t *timerHard configTimeBase(timerHardware->tim, period, mhz); pwmOCConfig(timerHardware->tim, timerHardware->channel, value, timerHardware->output); - if (timerHardware->output & TIMER_OUTPUT_ENABLED) { - TIM_CtrlPWMOutputs(timerHardware->tim, ENABLE); - } + TIM_CtrlPWMOutputs(timerHardware->tim, ENABLE); TIM_Cmd(timerHardware->tim, ENABLE); port->ccr = timerChCCR(timerHardware); diff --git a/src/main/drivers/pwm_output_hal.c b/src/main/drivers/pwm_output_hal.c index 706b122643..17e2c9c811 100644 --- a/src/main/drivers/pwm_output_hal.c +++ b/src/main/drivers/pwm_output_hal.c @@ -63,11 +63,7 @@ static void pwmOutConfig(pwmOutputPort_t *port, const timerHardware_t *timerHard configTimeBase(timerHardware->tim, period, mhz); pwmOCConfig(timerHardware->tim, timerHardware->channel, value, timerHardware->output); - if (timerHardware->output & TIMER_OUTPUT_ENABLED) { - HAL_TIM_PWM_Start(Handle, timerHardware->channel); - } else { - HAL_TIM_PWM_Stop(Handle, timerHardware->channel); - } + HAL_TIM_PWM_Start(Handle, timerHardware->channel); HAL_TIM_Base_Start(Handle); switch (timerHardware->channel) { @@ -221,7 +217,7 @@ void motorInit(const motorConfig_t *motorConfig, uint16_t idlePulse, uint8_t mot break; } - const timerHardware_t *timerHardware = timerGetByTag(tag, TIMER_OUTPUT_ENABLED); + const timerHardware_t *timerHardware = timerGetByTag(tag, TIM_USE_ANY); if (timerHardware == NULL) { /* flag failure and disable ability to arm */ @@ -280,7 +276,7 @@ void servoInit(const servoConfig_t *servoConfig) IOInit(servos[servoIndex].io, OWNER_SERVO, RESOURCE_INDEX(servoIndex)); //IOConfigGPIO(servos[servoIndex].io, IOCFG_AF_PP); - const timerHardware_t *timer = timerGetByTag(tag, TIMER_OUTPUT_ENABLED); + const timerHardware_t *timer = timerGetByTag(tag, TIM_USE_ANY); IOConfigGPIOAF(servos[servoIndex].io, IOCFG_AF_PP, timer->alternateFunction); if (timer == NULL) { diff --git a/src/main/drivers/serial_escserial.c b/src/main/drivers/serial_escserial.c index e64f13abb4..6b91bae063 100644 --- a/src/main/drivers/serial_escserial.c +++ b/src/main/drivers/serial_escserial.c @@ -119,7 +119,7 @@ static void escSerialICConfig(TIM_TypeDef *tim, uint8_t channel, uint16_t polari void setTxSignalEsc(escSerial_t *escSerial, uint8_t state) { - if((escSerial->mode == PROTOCOL_KISSALL)) + if(escSerial->mode == PROTOCOL_KISSALL) { for (volatile uint8_t i = 0; i < escSerial->outputCount; i++) { uint8_t state_temp = state; diff --git a/src/main/drivers/timer.h b/src/main/drivers/timer.h index 3d198f67bf..9e002b86fb 100644 --- a/src/main/drivers/timer.h +++ b/src/main/drivers/timer.h @@ -108,8 +108,9 @@ typedef struct timerHardware_s { typedef enum { TIMER_OUTPUT_NONE = 0x00, - TIMER_INPUT_ENABLED = 0x00, - TIMER_OUTPUT_ENABLED = 0x01, + TIMER_INPUT_ENABLED = 0x01, /* TODO: remove this */ + TIMER_OUTPUT_ENABLED = 0x01, /* TODO: remove this */ + TIMER_OUTPUT_STANDARD = 0x01, TIMER_OUTPUT_INVERTED = 0x02, TIMER_OUTPUT_N_CHANNEL = 0x04 } timerFlag_e; diff --git a/src/main/target/BLUEJAYF4/target.c b/src/main/target/BLUEJAYF4/target.c index 491f7ff339..a8dac5af37 100644 --- a/src/main/target/BLUEJAYF4/target.c +++ b/src/main/target/BLUEJAYF4/target.c @@ -37,11 +37,11 @@ const timerHardware_t timerHardware[USABLE_TIMER_CHANNEL_COUNT] = { */ const timerHardware_t timerHardware[USABLE_TIMER_CHANNEL_COUNT] = { - DEF_TIM(TIM3, CH2, PC7, TIM_USE_PPM, TIMER_INPUT_ENABLED, 0 ), // PPM IN - DEF_TIM(TIM5, CH1, PA0, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 0 ), // S1_OUT - DMA1_ST2 - DEF_TIM(TIM5, CH2, PA1, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 0 ), // S2_OUT - DMA1_ST4 - DEF_TIM(TIM2, CH3, PA2, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 0 ), // S3_OUT - DMA1_ST1 - DEF_TIM(TIM2, CH4, PA3, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 1 ), // S4_OUT - DMA1_ST6 - DEF_TIM(TIM3, CH3, PB0, TIM_USE_MOTOR | TIM_USE_LED, TIMER_OUTPUT_ENABLED, 0 ), // S5_OUT - DMA1_ST7 - DEF_TIM(TIM3, CH4, PB1, TIM_USE_MOTOR, TIMER_OUTPUT_ENABLED, 0 ), // S6_OUT - DMA1_ST2 + DEF_TIM(TIM3, CH2, PC7, TIM_USE_PPM, TIMER_OUTPUT_STANDARD, 0 ), // PPM IN + DEF_TIM(TIM5, CH1, PA0, TIM_USE_MOTOR, TIMER_OUTPUT_STANDARD, 0 ), // S1_OUT - DMA1_ST2 + DEF_TIM(TIM5, CH2, PA1, TIM_USE_MOTOR, TIMER_OUTPUT_STANDARD, 0 ), // S2_OUT - DMA1_ST4 + DEF_TIM(TIM2, CH3, PA2, TIM_USE_MOTOR, TIMER_OUTPUT_STANDARD, 0 ), // S3_OUT - DMA1_ST1 + DEF_TIM(TIM2, CH4, PA3, TIM_USE_MOTOR, TIMER_OUTPUT_STANDARD, 1 ), // S4_OUT - DMA1_ST6 + DEF_TIM(TIM3, CH3, PB0, TIM_USE_MOTOR | TIM_USE_LED, TIMER_OUTPUT_STANDARD, 0 ), // S5_OUT - DMA1_ST7 + DEF_TIM(TIM3, CH4, PB1, TIM_USE_MOTOR, TIMER_OUTPUT_STANDARD, 0 ), // S6_OUT - DMA1_ST2 };