Skip to content

Commit 2d5fce6

Browse files
committed
fixed infinite loop when reading ADC (if channels are disabled outside analogRead)
1 parent 047f863 commit 2d5fce6

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

sam/1.0.4/cores/arduino/wiring_analog.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -150,12 +150,12 @@ uint32_t analogRead(uint32_t ulPin)
150150
case ADC11 :
151151

152152
// Enable the corresponding channel
153-
if (ulChannel != latestSelectedChannel) {
154-
adc_enable_channel( ADC, ulChannel );
155-
if ( latestSelectedChannel != (uint32_t)-1 )
156-
adc_disable_channel( ADC, latestSelectedChannel );
157-
latestSelectedChannel = ulChannel;
153+
// Enable the corresponding channel
154+
adc_enable_channel( ADC, ulChannel );
155+
if (ulChannel != latestSelectedChannel && latestSelectedChannel != (uint32_t)-1 ) {
156+
adc_disable_channel( ADC, latestSelectedChannel );
158157
}
158+
latestSelectedChannel = ulChannel;
159159

160160
// Start the ADC
161161
adc_start( ADC );
@@ -167,7 +167,6 @@ uint32_t analogRead(uint32_t ulPin)
167167
// Read the value
168168
ulValue = adc_get_latest_value(ADC);
169169
ulValue = mapResolution(ulValue, ADC_RESOLUTION, _readResolution);
170-
171170
break;
172171

173172
// Compiler could yell because we don't handle DAC pins

0 commit comments

Comments
 (0)