32 lines
1.0 KiB
C++
32 lines
1.0 KiB
C++
#include "time_utils.h"
|
|
|
|
// function buffering delay()
|
|
// arduino uno function doesn't work well with interrupts
|
|
void _delay(unsigned long ms){
|
|
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega328PB__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega32U4__)
|
|
// if arduino uno and other atmega328p chips
|
|
// use while instad of delay,
|
|
// due to wrong measurement based on changed timer0
|
|
unsigned long t = _micros() + ms*1000;
|
|
while( _micros() < t ){};
|
|
#else
|
|
// regular micros
|
|
delay(ms);
|
|
#endif
|
|
}
|
|
|
|
|
|
// function buffering _micros()
|
|
// arduino function doesn't work well with interrupts
|
|
unsigned long _micros(){
|
|
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega328PB__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega32U4__)
|
|
// if arduino uno and other atmega328p chips
|
|
//return the value based on the prescaler
|
|
if((TCCR0B & 0b00000111) == 0x01) return (micros()/32);
|
|
else return (micros());
|
|
#else
|
|
// regular micros
|
|
return micros();
|
|
#endif
|
|
}
|