diff --git a/src/main/drivers/pwm_mapping.c b/src/main/drivers/pwm_mapping.c index 1cd4dafee..35c40fea4 100644 --- a/src/main/drivers/pwm_mapping.c +++ b/src/main/drivers/pwm_mapping.c @@ -365,6 +365,11 @@ pwmOutputConfiguration_t *pwmInit(drv_pwm_config_t *init) #endif if (type == MAP_TO_PPM_INPUT) { +#ifdef CC3D + if (init->useOneshot) { + ppmAvoidPWMTimerClash(timerHardwarePtr, TIM4); + } +#endif ppmInConfig(timerHardwarePtr); } else if (type == MAP_TO_PWM_INPUT) { pwmInConfig(timerHardwarePtr, channelIndex); diff --git a/src/main/drivers/pwm_rx.c b/src/main/drivers/pwm_rx.c index 9757e69d2..e0b72a6ba 100644 --- a/src/main/drivers/pwm_rx.c +++ b/src/main/drivers/pwm_rx.c @@ -24,7 +24,6 @@ #include "build_config.h" #include "common/utils.h" -#include "config/config.h" #include "system.h" @@ -317,6 +316,13 @@ void pwmInConfig(const timerHardware_t *timerHardwarePtr, uint8_t channel) #define UNUSED_PPM_TIMER_REFERENCE 0 #define FIRST_PWM_PORT 0 +void ppmAvoidPWMTimerClash(const timerHardware_t *timerHardwarePtr, TIM_TypeDef *sharedPwmTimer) +{ + if (timerHardwarePtr->tim == sharedPwmTimer) { + ppmCountShift = 3; // Divide by 8 if the timer is running at 8 MHz + } +} + void ppmInConfig(const timerHardware_t *timerHardwarePtr) { ppmInit(); @@ -331,11 +337,6 @@ void ppmInConfig(const timerHardware_t *timerHardwarePtr) timerConfigure(timerHardwarePtr, (uint16_t)PPM_TIMER_PERIOD, PWM_TIMER_MHZ); - if((timerHardwarePtr->tim == TIM4) && (feature(FEATURE_ONESHOT125))){ - ppmCountShift = 3; // Divide by 8 if the timer is running at 8 MHz - } - - timerChCCHandlerInit(&self->edgeCb, ppmEdgeCallback); timerChOvrHandlerInit(&self->overflowCb, ppmOverflowCallback); timerChConfigCallbacks(timerHardwarePtr, &self->edgeCb, &self->overflowCb); diff --git a/src/main/drivers/pwm_rx.h b/src/main/drivers/pwm_rx.h index 9b56a0725..4b1463b0d 100644 --- a/src/main/drivers/pwm_rx.h +++ b/src/main/drivers/pwm_rx.h @@ -23,8 +23,9 @@ typedef enum { } inputFilteringMode_e; void ppmInConfig(const timerHardware_t *timerHardwarePtr); -void pwmInConfig(const timerHardware_t *timerHardwarePtr, uint8_t channel); +void ppmAvoidPWMTimerClash(const timerHardware_t *timerHardwarePtr, TIM_TypeDef *sharedPwmTimer); +void pwmInConfig(const timerHardware_t *timerHardwarePtr, uint8_t channel); uint16_t pwmRead(uint8_t channel); bool isPPMDataBeingReceived(void);