diff options
author | Daniel Friesel <derf@finalrewind.org> | 2018-10-12 10:44:11 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2018-10-12 10:44:11 +0200 |
commit | fd1aabd0417bef53e7ff54df52eba80be5494d56 (patch) | |
tree | e0cb6183e82f1fbf78fb66c673eee8cb497bc658 /include/arch/msp430fr5969lp/driver | |
parent | 4853a5593cc6147e1851e537b46a5128792939a5 (diff) |
half-baked timer implementation for MSP430 and Arduino
Diffstat (limited to 'include/arch/msp430fr5969lp/driver')
-rw-r--r-- | include/arch/msp430fr5969lp/driver/timer.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/include/arch/msp430fr5969lp/driver/timer.h b/include/arch/msp430fr5969lp/driver/timer.h new file mode 100644 index 0000000..34feb12 --- /dev/null +++ b/include/arch/msp430fr5969lp/driver/timer.h @@ -0,0 +1,40 @@ +#include <msp430.h> + +#define ON_TIMER_INTERRUPT_head __attribute__((interrupt(TIMER0_A1_VECTOR))) __attribute__((wakeup)) void handle_timer0_overflow() { if (TA0IV == 0x0e) { +#define ON_TIMER_INTERRUPT_tail } } + +class Timer { + private: + Timer(const Timer ©); + + public: + Timer() {} + + inline void setup_khz(uint16_t const frequency) { + TA0CTL = TASSEL__SMCLK | ID__8 | MC__UP; + TA0EX0 = 1; + TA0CCR0 = 1000 / frequency; + TA0CTL |= TACLR; + } + + inline void setup_hz(uint16_t const frequency) { + TA0CTL = TASSEL__SMCLK | ID__8 | MC__UP; + TA0EX0 = 1; + TA0CCR0 = 1000000 / frequency; + TA0CTL |= TACLR; + } + + inline void start(unsigned char const interrupt) { + if (interrupt) { + TA0CTL |= TACLR | TAIE; + } else { + TA0CTL |= TACLR; + } + } + + inline void stop() { + TA0CTL = 0; + } +}; + +extern Timer timer; |