YAHAL
Yet Another Hardware Abstraction Library
Loading...
Searching...
No Matches
timer_rp2040.h
1/*
2 *
3 * Created on: 01.11.2022
4 * Author: aterstegge
5 */
6
7#ifndef _TIMER_RP2040_H_
8#define _TIMER_RP2040_H_
9
10#include "timer_interface.h"
11#include "RP2040.h"
12
13extern "C" {
14void TIMER_IRQ_0_Handler(void);
15void TIMER_IRQ_1_Handler(void);
16void TIMER_IRQ_2_Handler(void);
17void TIMER_IRQ_3_Handler(void);
18}
19
21public:
22 // The index is in the range of 0...3 (4 timers).
23 // When no index is given (-1), the next free timer will be used!
24 explicit timer_rp2040(int8_t index = -1);
25 virtual ~timer_rp2040();
26
27 void setPeriod (uint32_t us, TIMER::timer_mode mode = TIMER::ONE_SHOT) override;
28 void setPeriod_ns(uint32_t ns, TIMER::timer_mode mode = TIMER::ONE_SHOT);
29 uint32_t getPeriod() override;
30
31 void setCallback(function<void()> f) override;
32
33 void start() override;
34 void stop() override;
35 bool isRunning() override;
36
37 void reset() override;
38
39 // IRQ handlers are our best friends
40 friend void TIMER_IRQ_0_Handler(void);
41 friend void TIMER_IRQ_1_Handler(void);
42 friend void TIMER_IRQ_2_Handler(void);
43 friend void TIMER_IRQ_3_Handler(void);
44
45private:
46
47 void irqHandler();
48
49 static timer_rp2040 * _timerinst[4];
50 static function<void()> _callback[4];
51
52 uint8_t _index;
53 uint32_t _mask;
54 uint32_t * _ALARM;
55 TIMER::timer_mode _mode;
56 uint32_t _period;
57 uint32_t _tick_factor;
58};
59
60#endif // _TIMER_RP2040_H_
CMSIS-Core(M) Device Peripheral Access Layer Header File for Device RP2040.