From d56ff39cb305a844cbdea31cb8450c244098b5f2 Mon Sep 17 00:00:00 2001 From: Michael Moon Date: Thu, 16 Sep 2010 21:42:00 +1000 Subject: [PATCH] atomic 16-bit operation in analog.c --- analog.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/analog.c b/analog.c index 00d8aeb..c2b177d 100644 --- a/analog.c +++ b/analog.c @@ -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; }