From 1afaded712519cd54544cfd488260d5ffa8d49ac Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 4 May 2018 13:58:47 +0200 Subject: [PATCH] [Xlite] Either ADC or PWM used for sticks (similar to X10) (#5867) --- .../common/arm/stm32/analog_adc_driver.cpp | 11 +++++++++-- radio/src/targets/taranis/board.h | 3 ++- radio/src/targets/taranis/hal.h | 19 +++++++++---------- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/radio/src/targets/common/arm/stm32/analog_adc_driver.cpp b/radio/src/targets/common/arm/stm32/analog_adc_driver.cpp index a62113254..234e286bf 100644 --- a/radio/src/targets/common/arm/stm32/analog_adc_driver.cpp +++ b/radio/src/targets/common/arm/stm32/analog_adc_driver.cpp @@ -105,9 +105,16 @@ void adcInit() ADC_MAIN->SQR2 = (ADC_CHANNEL_POT4<<0) + (ADC_CHANNEL_SLIDER3<<5) + (ADC_CHANNEL_SLIDER4<<10) + (ADC_CHANNEL_BATT<<15); // conversions 7 and more ADC_MAIN->SQR3 = (ADC_CHANNEL_STICK_LH<<0) + (ADC_CHANNEL_STICK_LV<<5) + (ADC_CHANNEL_STICK_RV<<10) + (ADC_CHANNEL_STICK_RH<<15) + (ADC_CHANNEL_POT2<<20) + (ADC_CHANNEL_POT3<<25); // conversions 1 to 6 #elif defined(PCBXLITE) - ADC_MAIN->SQR2 = 0; - ADC_MAIN->SQR3 = (ADC_CHANNEL_POT1<<0) + (ADC_CHANNEL_POT2<<5) + (ADC_CHANNEL_BATT<<10); + if (ANALOGS_PWM_ENABLED()) { + ADC_MAIN->SQR2 = 0; + ADC_MAIN->SQR3 = (ADC_CHANNEL_POT1<<0) + (ADC_CHANNEL_POT2<<5) + (ADC_CHANNEL_BATT<<10); + } + else { + ADC_MAIN->SQR2 = (ADC_CHANNEL_BATT<<0); + ADC_MAIN->SQR3 = (ADC_CHANNEL_STICK_LH<<0) + (ADC_CHANNEL_STICK_LV<<5) + (ADC_CHANNEL_STICK_RV<<10) + (ADC_CHANNEL_STICK_RH<<15) + (ADC_CHANNEL_POT1<<20) + (ADC_CHANNEL_POT2<<25); // conversions 1 to 6 + } #elif defined(PCBX7) + // TODO why do we invert POT1 and POT2 here? ADC_MAIN->SQR2 = (ADC_CHANNEL_BATT<<0); // conversions 7 and more ADC_MAIN->SQR3 = (ADC_CHANNEL_STICK_LH<<0) + (ADC_CHANNEL_STICK_LV<<5) + (ADC_CHANNEL_STICK_RV<<10) + (ADC_CHANNEL_STICK_RH<<15) + (ADC_CHANNEL_POT1<<25) + (ADC_CHANNEL_POT2<<20); // conversions 1 to 6 #else diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index d5765e0ab..778a65a17 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -445,7 +445,8 @@ enum Analogs { #if defined(PCBXLITE) #define NUM_PWMANALOGS 4 - #define ANALOGS_PWM_ENABLED() (true) + extern uint8_t analogs_pwm_disabled; + #define ANALOGS_PWM_ENABLED() (analogs_pwm_disabled == false) void analogPwmInit(void); void analogPwmRead(uint16_t * values); void analogPwmCheck(); diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index c4ee06126..e27f8e084 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -468,25 +468,24 @@ #define ADC_GPIO_PIN_STICK_RH GPIO_Pin_1 // PA.01 #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_2 // PA.02 #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_3 // PA.03 + #define ADC_GPIO_PIN_POT1 GPIO_Pin_1 // PC.01 + #define ADC_GPIO_PIN_POT2 GPIO_Pin_2 // PC.02 + #define ADC_GPIO_PIN_BATT GPIO_Pin_0 // PC.00 #define PWM_TIMER TIM5 #define PWM_GPIO GPIOA #define PWM_GPIO_AF GPIO_AF_TIM5 #define PWM_IRQHandler TIM5_IRQHandler #define PWM_IRQn TIM5_IRQn + #define PWM_GPIOA_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3) + #define ADC_GPIOA_PINS (ANALOGS_PWM_ENABLED() ? 0 : (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3)) + #define ADC_GPIOC_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2) #define ADC_CHANNEL_STICK_RV ADC_Channel_0 // ADC1_IN0 #define ADC_CHANNEL_STICK_RH ADC_Channel_1 // ADC1_IN1 #define ADC_CHANNEL_STICK_LV ADC_Channel_2 // ADC1_IN2 #define ADC_CHANNEL_STICK_LH ADC_Channel_3 // ADC1_IN3 - #define ADC_GPIO_PIN_POT1 GPIO_Pin_1 // PC.01 - #define ADC_GPIO_PIN_POT2 GPIO_Pin_2 // PC.02 - #define ADC_GPIO_PIN_BATT GPIO_Pin_0 // PC.00 - #define PWM_GPIOA_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3) - #define ADC_GPIOA_PINS 0 - #define ADC_GPIOB_PINS 0 - #define ADC_GPIOC_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2) - #define ADC_CHANNEL_POT1 ADC_Channel_11 - #define ADC_CHANNEL_POT2 ADC_Channel_12 - #define ADC_CHANNEL_BATT ADC_Channel_10 + #define ADC_CHANNEL_POT1 ADC_Channel_11 // ADC1_IN11 + #define ADC_CHANNEL_POT2 ADC_Channel_12 // ADC1_IN12 + #define ADC_CHANNEL_BATT ADC_Channel_10 // ADC1_IN10 #elif defined(PCBX7) #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2) #define ADC_RCC_APB1Periph 0