aboutsummaryrefslogtreecommitdiff
path: root/cores/arduino/wiring.c
diff options
context:
space:
mode:
authorDavid A. Mellis <d.mellis@arduino.cc>2009-12-18 17:44:08 +0000
committerDavid A. Mellis <d.mellis@arduino.cc>2009-12-18 17:44:08 +0000
commit7ea4cb39bd8b4bf57c43acc50310bcb7402e3552 (patch)
tree6cca76f9aa6596de6ba7e06008020d30e0fe743b /cores/arduino/wiring.c
parent78a3d76f6cd1a70652f31904009f06c5038270de (diff)
Fixing bug in calling micros() from interrupts: http://code.google.com/p/arduino/issues/detail?id=55
Diffstat (limited to 'cores/arduino/wiring.c')
-rwxr-xr-xcores/arduino/wiring.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/cores/arduino/wiring.c b/cores/arduino/wiring.c
index 7d3e611..858ab72 100755
--- a/cores/arduino/wiring.c
+++ b/cores/arduino/wiring.c
@@ -75,21 +75,21 @@ unsigned long millis()
}
unsigned long micros() {
- unsigned long m, t;
- uint8_t oldSREG = SREG;
+ unsigned long m;
+ uint8_t oldSREG = SREG, t;
- cli();
+ cli();
+ m = timer0_overflow_count;
t = TCNT0;
#ifdef TIFR0
- if ((TIFR0 & _BV(TOV0)) && (t == 0))
- t = 256;
+ if ((TIFR0 & _BV(TOV0)) && (t < 255))
+ m++;
#else
- if ((TIFR & _BV(TOV0)) && (t == 0))
- t = 256;
+ if ((TIFR & _BV(TOV0)) && (t < 255))
+ m++;
#endif
- m = timer0_overflow_count;
SREG = oldSREG;
return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());