Fixing bug in calling micros() from interrupts: http://code.google.com/p/arduino/issues/detail?id=55

This commit is contained in:
David A. Mellis 2009-12-18 17:44:08 +00:00
parent 78a3d76f6c
commit 7ea4cb39bd
1 changed files with 8 additions and 8 deletions

View File

@ -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());