Prusa-Firmware-MMU/src/modules/timebase.cpp

39 lines
746 B
C++

/// @file timebase.cpp
#include "timebase.h"
#include "../hal/timers.h"
#include <avr/interrupt.h>
namespace modules {
namespace time {
Timebase timebase;
void Timebase::Init() {
hal::timers::Tim8bit_CTC_config tim8ctc_conf = {
.cs = 3, // ck/64
.ocra = 250 - 1,
};
hal::timers::Configure_CTC8(0, TIMER0, &tim8ctc_conf);
}
void Timebase::Isr() {
ms++;
}
bool Timebase::Elapsed(uint16_t start, uint16_t timeout) const {
uint16_t ms_from_start = Millis(); // beware the uint16_t!
ms_from_start -= start;
return ms_from_start > timeout;
}
uint16_t Timebase::Millis() const {
return ms;
}
} // namespace time
} // namespace modules
ISR(TIMER0_COMPA_vect) {
modules::time::timebase.Isr();
}