40 lines
1.0 KiB
C++
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;
|
|
}
|
|
|
|
}
|