Skip to content

Commit f81de7d

Browse files
committed
Fix pin attenuation being overwritten
Fixes: #5041
1 parent 5eda278 commit f81de7d

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

Diff for: cores/esp32/esp32-hal-adc.c

+6-1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ static uint8_t __analogVRefPin = 0;
4848
static uint8_t __analogAttenuation = 3;//11db
4949
static uint8_t __analogWidth = 3;//12 bits
5050
static uint8_t __analogClockDiv = 1;
51+
static adc_attenuation_t __pin_attenuation[SOC_GPIO_PIN_COUNT];
5152

5253
void __analogSetClockDiv(uint8_t clockDiv){
5354
if(!clockDiv){
@@ -86,6 +87,9 @@ void __analogInit(){
8687
#if CONFIG_IDF_TARGET_ESP32
8788
__analogSetWidth(__analogWidth + 9);//in bits
8889
#endif
90+
for(int i=0; i<SOC_GPIO_PIN_COUNT; i++){
91+
__pin_attenuation[i] = ADC_ATTEN_MAX;
92+
}
8993
}
9094

9195
void __analogSetPinAttenuation(uint8_t pin, adc_attenuation_t attenuation)
@@ -100,6 +104,7 @@ void __analogSetPinAttenuation(uint8_t pin, adc_attenuation_t attenuation)
100104
adc1_config_channel_atten(channel, attenuation);
101105
}
102106
__analogInit();
107+
__pin_attenuation[pin] = attenuation;
103108
}
104109

105110
bool __adcAttachPin(uint8_t pin){
@@ -129,7 +134,7 @@ bool __adcAttachPin(uint8_t pin){
129134
#endif
130135

131136
pinMode(pin, ANALOG);
132-
__analogSetPinAttenuation(pin, __analogAttenuation);
137+
__analogSetPinAttenuation(pin, (__pin_attenuation[pin] != ADC_ATTEN_MAX)?__pin_attenuation[pin]:__analogAttenuation);
133138
return true;
134139
}
135140

Diff for: cores/esp32/esp32-hal-adc.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ typedef enum {
3030
ADC_0db,
3131
ADC_2_5db,
3232
ADC_6db,
33-
ADC_11db
33+
ADC_11db,
34+
ADC_ATTEN_MAX
3435
} adc_attenuation_t;
3536

3637
/*

0 commit comments

Comments
 (0)