#include #include namespace Timer { Timer timer[3] = { Timer(0), Timer(1), Timer(2) }; Timer::Timer(uint8_t n) { this->n = n; module = (TimerModule*)(TMR_MODULE_BASE + n); } void Timer::set(uint32_t interval, Mode mode, Prescaler prescaler, ClockSource source) { /* zero fill control registers */ module->TMR_CTLR_REG = 0; module->TMR_CUR_VALUE_REG = 0; /* Set controls: mode, prescaler and source */ module->TMR_CTLR_REG = (mode << 7) | (prescaler << 4) | (source << 2); /* Set timer value */ module->TMR_INTV_VALUE_REG = interval; /* Enable interrupt */ peripheral->TMR_IRQ_EN_REG = peripheral->TMR_IRQ_EN_REG | (1 << n); } void Timer::start(void) { /* Reload interval value and start */ module->TMR_CTLR_REG = module->TMR_CTLR_REG | 0x3; } void Timer::stop(void) { /* Clear stop/pause bit */ module->TMR_CTLR_REG = module->TMR_CTLR_REG & 0xfffffffe; } }