stkarm/src/timer.cpp

40 lines
1.0 KiB
C++

#include <timer.h>
#include <dbg.h>
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;
}
}