diff --git a/radio/src/gui/Taranis/view_main.cpp b/radio/src/gui/Taranis/view_main.cpp index 4e7bb8369..1f2348839 100755 --- a/radio/src/gui/Taranis/view_main.cpp +++ b/radio/src/gui/Taranis/view_main.cpp @@ -90,11 +90,13 @@ const pm_uchar icons[] PROGMEM = { #define ICON_REBOOT 91, 11 #define ICON_ALTITUDE 102, 9 +#define POT_SPACING 5 + void drawPotsBars() { // Optimization by Mike Blandford uint8_t x, i, len ; // declare temporary variables - for (x=LCD_W/2-5, i=NUM_STICKS; i=SLIDER1 ? LCD_H/2+1 : 1); +#endif lcd_vline(x, y, LCD_H/2-2); lcd_vline(x+1, y, LCD_H/2-2); y += LCD_H/2-4; diff --git a/radio/src/gui/menu_general_diaganas.cpp b/radio/src/gui/menu_general_diaganas.cpp index 2798f0702..8bc1aabbe 100755 --- a/radio/src/gui/menu_general_diaganas.cpp +++ b/radio/src/gui/menu_general_diaganas.cpp @@ -51,10 +51,18 @@ void menuGeneralDiagAna(uint8_t event) STICK_SCROLL_DISABLE(); for (uint8_t i=0; i 9 + coord_t y = MENU_TITLE_HEIGHT + 1 + (i/3)*FH; + const uint8_t x_coord[] = {0, 70, 154}; + uint8_t x = x_coord[i%3]; + lcd_outdezNAtt(x, y, i+1, LEADING0|LEFT, 2); + lcd_putc(x+2*FW-2, y, ':'); +#else coord_t y = MENU_TITLE_HEIGHT + 1 + (i/2)*FH; uint8_t x = i&1 ? 64+5 : 0; putsStrIdx(x, y, PSTR("A"), i+1); lcd_putc(lcdNextPos, y, ':'); +#endif lcd_outhex4(x+3*FW-1, y, anaIn(i)); lcd_outdez8(x+10*FW-1, y, (int16_t)calibratedStick[CONVERT_MODE(i)]*25/256); } diff --git a/radio/src/gui/menu_general_hardware.cpp b/radio/src/gui/menu_general_hardware.cpp index 888013e51..35ac284e9 100755 --- a/radio/src/gui/menu_general_hardware.cpp +++ b/radio/src/gui/menu_general_hardware.cpp @@ -47,8 +47,11 @@ enum menuGeneralHwItems { ITEM_SETUP_HW_POT1, ITEM_SETUP_HW_POT2, CASE_REVPLUS(ITEM_SETUP_HW_POT3) + CASE_REV9E(ITEM_SETUP_HW_POT4) ITEM_SETUP_HW_LS, ITEM_SETUP_HW_RS, + CASE_REV9E(ITEM_SETUP_HW_LS2) + CASE_REV9E(ITEM_SETUP_HW_RS2) ITEM_SETUP_HW_LABEL_SWITCHES, ITEM_SETUP_HW_SA, ITEM_SETUP_HW_SB, @@ -111,6 +114,10 @@ void menuGeneralHardware(uint8_t event) case ITEM_SETUP_HW_STICK4: case ITEM_SETUP_HW_LS: case ITEM_SETUP_HW_RS: +#if defined(REV9E) + case ITEM_SETUP_HW_LS2: + case ITEM_SETUP_HW_RS2: +#endif { int idx = (k<=ITEM_SETUP_HW_STICK4 ? k-ITEM_SETUP_HW_STICK1 : k-ITEM_SETUP_HW_LS+7); lcd_putsiAtt(INDENT_WIDTH, y, STR_VSRCRAW, idx+1, 0); @@ -127,6 +134,9 @@ void menuGeneralHardware(uint8_t event) case ITEM_SETUP_HW_POT2: #if defined(REVPLUS) case ITEM_SETUP_HW_POT3: +#endif +#if defined(REV9E) + case ITEM_SETUP_HW_POT4: #endif { int idx = k - ITEM_SETUP_HW_POT1; diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index f111d8d6d..576d0355d 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -117,8 +117,13 @@ #define MAX_SCRIPTS 7 #define MAX_INPUTS 32 #define NUM_TRAINER 16 - #define NUM_POTS 5 - #define NUM_XPOTS 3 + #if defined(REV9E) + #define NUM_POTS 8 + #define NUM_XPOTS 4 + #else + #define NUM_POTS 5 + #define NUM_XPOTS 3 + #endif #elif defined(CPUARM) #define MAX_MODELS 60 #define NUM_CHNOUT 32 // number of real output channels CH1-CH32 @@ -343,7 +348,7 @@ enum uartModes { #define EXTRA_GENERAL_FIELDS \ EXTRA_GENERAL_FIELDS_ARM \ uint8_t uart3Mode; \ - uint8_t potsType; \ + uint8_t potsType; /*two bits for every pot*/\ uint8_t backlightColor; #elif defined(CPUARM) #define EXTRA_GENERAL_FIELDS EXTRA_GENERAL_FIELDS_ARM @@ -1753,9 +1758,18 @@ enum MixSources { MIXSRC_POT1 = MIXSRC_FIRST_POT, LUA_EXPORT("s1", "Potentiometer 1") MIXSRC_POT2, LUA_EXPORT("s2", "Potentiometer 2") MIXSRC_POT3, LUA_EXPORT("s3", "Potentiometer 3") + #if defined(REV9E) + MIXSRC_POT4, LUA_EXPORT("s4", "Potentiometer 4") + #endif MIXSRC_SLIDER1, LUA_EXPORT("ls", "Left slider") MIXSRC_SLIDER2, LUA_EXPORT("rs", "Right slider") - MIXSRC_LAST_POT = MIXSRC_SLIDER2, + #if defined(REV9E) + MIXSRC_SLIDER3, LUA_EXPORT("ls2", "Left center slider") + MIXSRC_SLIDER4, LUA_EXPORT("rs2", "Right center slider") + MIXSRC_LAST_POT = MIXSRC_SLIDER4, + #else + MIXSRC_LAST_POT = MIXSRC_SLIDER2, + #endif #else MIXSRC_P1 = MIXSRC_FIRST_POT, MIXSRC_P2, diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 2874c90d8..12090b09f 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1410,7 +1410,7 @@ void getADC() for (uint32_t i=0; i<4; i++) { adcRead(); for (uint32_t x=0; xCR1 = ADC_CR1_SCAN; ADC1->CR2 = ADC_CR2_ADON | ADC_CR2_DMA | ADC_CR2_DDS; - ADC1->SQR1 = (NUMBER_ANALOG-1) << 20 ; // bits 23:20 = number of conversions + ADC1->SQR1 = (NUMBER_ANALOG_ADC1-1) << 20 ; // bits 23:20 = number of conversions ADC1->SQR2 = (POT_XTRA<<0) + (SLIDE_L<<5) + (SLIDE_R<<10) + (BATTERY<<15); // conversions 7 and more ADC1->SQR3 = (STICK_LH<<0) + (STICK_LV<<5) + (STICK_RV<<10) + (STICK_RH<<15) + (POT_L<<20) + (POT_R<<25); // conversions 1 to 6 ADC1->SMPR1 = SAMPTIME + (SAMPTIME<<3) + (SAMPTIME<<6) + (SAMPTIME<<9) + (SAMPTIME<<12) + (SAMPTIME<<15) + (SAMPTIME<<18) + (SAMPTIME<<21) + (SAMPTIME<<24); @@ -101,33 +129,57 @@ void adcInit() ADC->CCR = 0 ; //ADC_CCR_ADCPRE_0 ; // Clock div 2 - DMA2_Stream0->CR = DMA_SxCR_PL | DMA_SxCR_MSIZE_0 | DMA_SxCR_PSIZE_0 | DMA_SxCR_MINC ; + DMA2_Stream0->CR = DMA_SxCR_PL | DMA_SxCR_MSIZE_0 | DMA_SxCR_PSIZE_0 | DMA_SxCR_MINC; DMA2_Stream0->PAR = CONVERT_PTR_UINT(&ADC1->DR); DMA2_Stream0->M0AR = CONVERT_PTR_UINT(Analog_values); + DMA2_Stream0->NDTR = NUMBER_ANALOG_ADC1; DMA2_Stream0->FCR = DMA_SxFCR_DMDIS | DMA_SxFCR_FTH_0 ; + +#if defined(REV9E) + RCC->APB2ENR |= RCC_APB2ENR_ADC3EN ; // Enable clock + configure_pins( PIN_FLP_J3 | PIN_FLP_J4 | PIN_FLP_J5, PIN_ANALOG | PIN_PORTF ) ; + + ADC3->CR1 = ADC_CR1_SCAN ; + ADC3->CR2 = ADC_CR2_ADON | ADC_CR2_DMA | ADC_CR2_DDS ; + ADC3->SQR1 = (NUMBER_ANALOG_ADC3-1) << 20 ; // NUMBER_ANALOG Channels + ADC3->SQR2 = 0; + ADC3->SQR3 = (SLIDER_L2<<0) + (SLIDER_R2<<5) + (POT_4<<10) ; // conversions 1 to 3 + ADC3->SMPR1 = SAMPTIME + (SAMPTIME<<3) + (SAMPTIME<<6); + ADC3->SMPR2 = 0; + + // Enable the DMA channel here, DMA2 stream 1, channel 2 + DMA2_Stream1->CR = DMA_SxCR_PL | DMA_SxCR_CHSEL_1 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PSIZE_0 | DMA_SxCR_MINC; + DMA2_Stream1->PAR = CONVERT_PTR_UINT(&ADC3->DR); + DMA2_Stream1->M0AR = CONVERT_PTR_UINT(Analog_values + NUMBER_ANALOG_ADC1); + DMA2_Stream1->NDTR = NUMBER_ANALOG_ADC3; + DMA2_Stream1->FCR = DMA_SxFCR_DMDIS | DMA_SxFCR_FTH_0 ; +#endif // #if defined(REV9E) } void adcRead() { - uint32_t i ; - DMA2_Stream0->CR &= ~DMA_SxCR_EN ; // Disable DMA ADC1->SR &= ~(uint32_t) ( ADC_SR_EOC | ADC_SR_STRT | ADC_SR_OVR ) ; DMA2->LIFCR = DMA_LIFCR_CTCIF0 | DMA_LIFCR_CHTIF0 |DMA_LIFCR_CTEIF0 | DMA_LIFCR_CDMEIF0 | DMA_LIFCR_CFEIF0 ; // Write ones to clear bits - DMA2_Stream0->M0AR = CONVERT_PTR_UINT(Analog_values); - DMA2_Stream0->NDTR = NUMBER_ANALOG ; DMA2_Stream0->CR |= DMA_SxCR_EN ; // Enable DMA ADC1->CR2 |= (uint32_t)ADC_CR2_SWSTART ; - for (i=0; i<10000; i++) { +#if defined(REV9E) + DMA2_Stream1->CR &= ~DMA_SxCR_EN ; // Disable DMA + ADC3->SR &= ~(uint32_t) ( ADC_SR_EOC | ADC_SR_STRT | ADC_SR_OVR ) ; + DMA2->LIFCR = DMA_LIFCR_CTCIF1 | DMA_LIFCR_CHTIF1 |DMA_LIFCR_CTEIF1 | DMA_LIFCR_CDMEIF1 | DMA_LIFCR_CFEIF1 ; // Write ones to clear bits + DMA2_Stream1->CR |= DMA_SxCR_EN ; // Enable DMA + ADC3->CR2 |= (uint32_t)ADC_CR2_SWSTART ; +#endif // #if defined(REV9E) + for (unsigned int i=0; i<10000; i++) { if (DMA2->LISR & DMA_LISR_TCIF0) { - break ; + break; } } DMA2_Stream0->CR &= ~DMA_SxCR_EN ; // Disable DMA #if !defined(REV3) // adc direction correct - for (i=0; i