diff --git a/radio/src/targets/horus/adc_driver.cpp b/radio/src/targets/horus/adc_driver.cpp index 248bd85ef..34aff8f24 100644 --- a/radio/src/targets/horus/adc_driver.cpp +++ b/radio/src/targets/horus/adc_driver.cpp @@ -113,13 +113,22 @@ void adcInit() GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(ADC_GPIO_MOUSE, &GPIO_InitStructure); + // RTC battery + ADC1->CR1 = ADC_CR1_SCAN; + ADC1->CR2 = ADC_CR2_ADON | ADC_CR2_DMA | ADC_CR2_DDS; + ADC1->SQR1 = (1 - 1) << 20; + ADC1->SQR3 = ADC_CHANNEL_RTC; + ADC1->SMPR1 = SAMPTIME + (SAMPTIME<<3) + (SAMPTIME<<6) + (SAMPTIME<<9) + (SAMPTIME<<12) + (SAMPTIME<<15) + (SAMPTIME<<18) + (SAMPTIME<<21) + (SAMPTIME<<24); + ADC1->SMPR2 = SAMPTIME + (SAMPTIME<<3) + (SAMPTIME<<6) + (SAMPTIME<<9) + (SAMPTIME<<12) + (SAMPTIME<<15) + (SAMPTIME<<18) + (SAMPTIME<<21) + (SAMPTIME<<24) + (SAMPTIME<<27); + + // Track pad ADC3->CR1 = ADC_CR1_SCAN; ADC3->CR2 = ADC_CR2_ADON | ADC_CR2_DMA | ADC_CR2_DDS; - ADC3->SQR1 = (2-1) << 20; + ADC3->SQR1 = (2 - 1) << 20; ADC3->SQR2 = 0; - ADC3->SQR3 = ADC_IN_MOUSE1 + (ADC_IN_MOUSE2<<5); + ADC3->SQR3 = ADC_CHANNEL_MOUSE1 + (ADC_CHANNEL_MOUSE2<<5); ADC3->SMPR1 = 0; - ADC3->SMPR2 = (ADC_SAMPTIME<<(3*ADC_IN_MOUSE1)) + (ADC_SAMPTIME<<(3*ADC_IN_MOUSE2)); + ADC3->SMPR2 = (ADC_SAMPTIME<<(3*ADC_CHANNEL_MOUSE1)) + (ADC_SAMPTIME<<(3*ADC_CHANNEL_MOUSE2)); ADC->CCR = 0; // Enable the DMA channel here, DMA2 stream 1, channel 2 @@ -197,12 +206,14 @@ uint32_t adcReadNextSPIChannel(uint8_t index) void adcOnChipReadStart() { ADC_DMA_Stream->CR &= ~DMA_SxCR_EN; // Disable DMA + ADC1->SR &= ~(uint32_t)(ADC_SR_EOC | ADC_SR_STRT | ADC_SR_OVR); ADC3->SR &= ~(uint32_t)(ADC_SR_EOC | ADC_SR_STRT | ADC_SR_OVR); ADC_DMA->LIFCR = DMA_LIFCR_CTCIF0 | DMA_LIFCR_CHTIF0 | DMA_LIFCR_CTEIF0 | DMA_LIFCR_CDMEIF0 | DMA_LIFCR_CFEIF0; // Write ones to clear bits ADC_DMA_Stream->M0AR = CONVERT_PTR_UINT(&adcValues[MOUSE1]); ADC_DMA_Stream->NDTR = 2; ADC_DMA_Stream->CR |= DMA_SxCR_EN; // Enable DMA ADC3->CR2 |= (uint32_t)ADC_CR2_SWSTART; + ADC1->CR2 |= (uint32_t)ADC_CR2_SWSTART; } bool adcOnChipReadFinished() @@ -247,6 +258,14 @@ void adcRead() } } +uint16_t getRTCBattVoltage() +{ + ADC->CCR |= ADC_CCR_VBATE; + adcRead(); + ADC->CCR &= ADC_CCR_VBATE; + return ADC1->DR * 330 / 2048; +} + #if !defined(SIMU) const int8_t ana_direction[NUM_ANALOGS] = {1,-1,1,-1, -1,1,-1, -1,-1, -1,1, 0,0,0}; diff --git a/radio/src/targets/horus/board.cpp b/radio/src/targets/horus/board.cpp index 0ac2357a5..4cec2b071 100644 --- a/radio/src/targets/horus/board.cpp +++ b/radio/src/targets/horus/board.cpp @@ -237,6 +237,8 @@ void boardInit() #endif ledBlue(); + + vbattRTC = getRTCBattVoltage(); #endif } diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index 64eca001d..c462e0d3e 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -192,8 +192,8 @@ #define ADC_GPIO_PIN_MOUSE1 GPIO_Pin_8 // PF.08 ADC3_IN6 J5 MOUSE_X #define ADC_GPIO_PIN_MOUSE2 GPIO_Pin_9 // PF.09 ADC3_IN7 J6 MOUSE_Y #define ADC_GPIO_MOUSE GPIOF - #define ADC_IN_MOUSE1 6 - #define ADC_IN_MOUSE2 7 + #define ADC_CHANNEL_MOUSE1 6 + #define ADC_CHANNEL_MOUSE2 7 #define ADC_DMA DMA2 #define ADC_DMA_Stream DMA2_Stream0 #define ADC_SAMPTIME 3 diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index 6de4366e8..67d02cb4f 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ - #define SIMPGMSPC_USE_QT 0 +#define SIMPGMSPC_USE_QT 0 #include "opentx.h" #include @@ -66,6 +66,8 @@ Dacc dacc; Adc Adc0; #endif +FATFS g_FATFS_Obj; + void lcdInit() { } diff --git a/radio/src/targets/simu/simpgmspace.h b/radio/src/targets/simu/simpgmspace.h index f99e08faf..b40864f24 100644 --- a/radio/src/targets/simu/simpgmspace.h +++ b/radio/src/targets/simu/simpgmspace.h @@ -232,7 +232,7 @@ extern char * main_thread_error; #define OPENTX_START_DEFAULT_ARGS simu_start_mode -static inline void getADC() { } +inline void getADC() { } uint64_t simuTimerMicros(void); diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index d47ac94f4..5026168d4 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -103,7 +103,7 @@ extern "C" void INTERRUPT_xMS_IRQHandler() } #endif -#if defined(PWR_BUTTON_PRESS) && !defined(SIMU) +#if defined(PWR_BUTTON_PRESS) #define PWR_PRESS_DURATION_MIN 100 // 1s #define PWR_PRESS_DURATION_MAX 500 // 5s #endif