From 37c1c4a66d09160fe4b0f8dfa3cf2eafaa915a97 Mon Sep 17 00:00:00 2001 From: Morgan Diepart Date: Sun, 28 Jan 2024 22:44:14 +0100 Subject: [PATCH] Module17: added VBat measurement to ADC1 driver --- platform/drivers/ADC/ADC1_Mod17.c | 15 ++++++++++++++- platform/drivers/ADC/ADC1_Mod17.h | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/platform/drivers/ADC/ADC1_Mod17.c b/platform/drivers/ADC/ADC1_Mod17.c index d1e6d7d87..c66a8afa9 100644 --- a/platform/drivers/ADC/ADC1_Mod17.c +++ b/platform/drivers/ADC/ADC1_Mod17.c @@ -64,15 +64,28 @@ void adc1_terminate() uint16_t adc1_getRawSample(uint8_t ch) { - if(ch > 15) return 0; + if(ch > 18) + return 0; pthread_mutex_lock(&adcMutex); + /* Channel 18 is Vbat, enable it if requested */ + if(ch == 18) + ADC123_COMMON->CCR |= ADC_CCR_VBATE; + + ADC1->SQR3 = ch; ADC1->CR2 |= ADC_CR2_SWSTART; while((ADC1->SR & ADC_SR_EOC) == 0) ; uint16_t value = ADC1->DR; + /* Disconnect Vbat channel. Vbat has an internal x2 voltage divider */ + if(ch == 18) + { + value *= 2; + ADC123_COMMON->CCR &= ~ADC_CCR_VBATE; + } + pthread_mutex_unlock(&adcMutex); return value; diff --git a/platform/drivers/ADC/ADC1_Mod17.h b/platform/drivers/ADC/ADC1_Mod17.h index 8eb833818..ee13a0332 100644 --- a/platform/drivers/ADC/ADC1_Mod17.h +++ b/platform/drivers/ADC/ADC1_Mod17.h @@ -35,6 +35,7 @@ enum adcCh { ADC_HWVER_CH = 3, ADC_HMI_HWVER_CH = 13, + ADC_VBAT_CH = 18 }; /**