9#include "timerA_msp432.h"
11extern uint32_t SubsystemMasterClock;
13function<void()> timerA_msp432::_intHandler0 = 0;
14function<void()> timerA_msp432::_intHandler1 = 0;
15function<void()> timerA_msp432::_intHandler2 = 0;
16function<void()> timerA_msp432::_intHandler3 = 0;
19 : _timer(timer), _mode(TIMER::ONE_SHOT) {
27 if (timer == TIMER_A0) NVIC_EnableIRQ(TA0_0_IRQn);
28 else if (timer == TIMER_A1) NVIC_EnableIRQ(TA1_0_IRQn);
29 else if (timer == TIMER_A2) NVIC_EnableIRQ(TA2_0_IRQn);
30 else if (timer == TIMER_A3) NVIC_EnableIRQ(TA3_0_IRQn);
33timerA_msp432::~timerA_msp432() {
37void timerA_msp432::setPeriod(uint32_t us, TIMER::timer_mode mode) {
41 uint32_t clock_MHz = SubsystemMasterClock / 1000000;
45 for (
id = 0;
id < 4;
id++) {
46 for (ex0 = 0; ex0 < 8; ex0++) {
47 _divider = (1 << id) * (ex0 + 1);
48 _ccr0 = clock_MHz / _divider;
49 if (_ccr0 < 0x10000) {
58 _timer->
CTL &= ~TIMER_A_CTL_ID_MASK;
61 _timer->
CCR[0] = _ccr0 - 1;
64uint32_t timerA_msp432::getPeriod() {
68void timerA_msp432::setCallback(function<
void()> f) {
69 if (_timer == TIMER_A0) { timerA_msp432::_intHandler0 = f; }
70 else if (_timer == TIMER_A1) { timerA_msp432::_intHandler1 = f; }
71 else if (_timer == TIMER_A2) { timerA_msp432::_intHandler2 = f; }
72 else if (_timer == TIMER_A3) { timerA_msp432::_intHandler3 = f; }
75void timerA_msp432::start() {
82 if (_mode == TIMER::ONE_SHOT)
88void timerA_msp432::stop() {
92bool timerA_msp432::isRunning() {
96void timerA_msp432::reset() {
104void TA0_0_IRQHandler(
void) {
106 TIMER_A0->CCTL[0] &= ~TIMER_A_CCTLN_CCIFG;
111 if (timerA_msp432::_intHandler0) {
112 timerA_msp432::_intHandler0();
116void TA1_0_IRQHandler(
void) {
118 TIMER_A1->CCTL[0] &= ~TIMER_A_CCTLN_CCIFG;
123 if (timerA_msp432::_intHandler1) {
124 timerA_msp432::_intHandler1();
128void TA2_0_IRQHandler(
void) {
130 TIMER_A2->CCTL[0] &= ~TIMER_A_CCTLN_CCIFG;
135 if (timerA_msp432::_intHandler2) {
136 timerA_msp432::_intHandler2();
140void TA3_0_IRQHandler(
void) {
142 TIMER_A3->CCTL[0] &= ~TIMER_A_CCTLN_CCIFG;
147 if (timerA_msp432::_intHandler3) {
148 timerA_msp432::_intHandler3();
#define TIMER_A_CTL_ID_OFS
#define TIMER_A_CTL_MC__CONTINUOUS
#define TIMER_A_CCTLN_CCIE
#define TIMER_A_CTL_SSEL__SMCLK
#define TIMER_A_CTL_MC__UP
#define TIMER_A_CTL_MC_MASK