atomic 16-bit operation in analog.c

This commit is contained in:
Michael Moon 2010-09-16 21:42:00 +10:00
parent 3606952096
commit d56ff39cb3
1 changed files with 11 additions and 1 deletions

View File

@ -50,5 +50,15 @@ ISR(ADC_vect) {
}
uint16_t analog_read(uint8_t channel) {
return adc_result[channel];
uint8_t sreg;
uint16_t r;
// save interrupt flag
sreg = SREG;
// disable interrupts
cli();
// atomic 16-bit copy
r = adc_result[channel];
// restore interrupt flag
SREG = sreg;
return r;
}