atomic 16-bit operation in analog.c
This commit is contained in:
parent
3606952096
commit
d56ff39cb3
12
analog.c
12
analog.c
|
|
@ -50,5 +50,15 @@ ISR(ADC_vect) {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t analog_read(uint8_t channel) {
|
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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue