diff --git a/emb/time.cpp b/emb/time.cpp new file mode 100644 index 0000000000000000000000000000000000000000..72da5a16dd2ccdafa7dad9974fa566347a71fc7b --- /dev/null +++ b/emb/time.cpp @@ -0,0 +1,29 @@ +#include "time.hpp" + +#include <avr/io.h> +#include <avr/interrupt.h> +#include <stdint.h> + +static uint32_t millis; + +void initTime() +{ + cli(); + + TCCR0A = (1 << WGM01); // CTC mode, TOP = OCRA + TCCR0B = (1 << CS01) | (1 << CS00); // 64th prescaler + OCR0A = 249; // set TOP for 1 kHz interrupts + TIMSK0 = (1 << OCIE0A); // enable compare A interrupt + + sei(); +} + +uint32_t getCurrentMillis() +{ + return millis; +} + +ISR(TIMER0_COMPA_vect) +{ + millis++; +} diff --git a/emb/time.hpp b/emb/time.hpp new file mode 100644 index 0000000000000000000000000000000000000000..27a93e5c03d1b8a69b55d93ffb84a53e33180aab --- /dev/null +++ b/emb/time.hpp @@ -0,0 +1,16 @@ +#ifndef TIME_H +#define TIME_H + +#include <stdint.h> + +/** + * Initialises time. + */ +void initTime(); + +/** + * Gets the number of milliseconds since program start. + */ +uint32_t getCurrentMillis(); + +#endif /* TIME_H */