YAHAL
Yet Another Hardware Abstraction Library
Loading...
Searching...
No Matches
timer_rp2350.h
1// ---------------------------------------------
2// This file is part of
3// _ _ __ _ _ __ __
4// ( \/ ) /__\ ( )_( ) /__\ ( )
5// \ / /(__)\ ) _ ( /(__)\ )(__
6// (__)(__)(__)(_) (_)(__)(__)(____)
7//
8// Yet Another HW Abstraction Library
9// Copyright (C) Andreas Terstegge
10// BSD Licensed (see file LICENSE)
11//
12// ---------------------------------------------
13//
14// Timer implementation for RP2350.
15//
16#ifndef _TIMER_RP2350_H_
17#define _TIMER_RP2350_H_
18
19#include "timer_interface.h"
20#include "RP2350.h"
21
22using namespace _TIMER0_;
23
24extern "C" {
25void TIMER0_IRQ_0_Handler(void);
26void TIMER0_IRQ_1_Handler(void);
27void TIMER0_IRQ_2_Handler(void);
28void TIMER0_IRQ_3_Handler(void);
29void TIMER1_IRQ_0_Handler(void);
30void TIMER1_IRQ_1_Handler(void);
31void TIMER1_IRQ_2_Handler(void);
32void TIMER1_IRQ_3_Handler(void);
33}
34
36public:
37 // The index is in the range of 0...7 (8 timers).
38 // When no index is given (-1), the next free timer will be used!
39 explicit timer_rp2350(int8_t index = -1);
40 ~timer_rp2350() override;
41
42 void setPeriod (uint32_t us, TIMER::timer_mode mode) override;
43 void setPeriod_ns(uint32_t ns, TIMER::timer_mode mode);
44 uint32_t getPeriod() override;
45
46 void setCallback(function<void()> f) override;
47
48 void start() override;
49 void stop() override;
50 bool isRunning() override;
51
52 void reset() override;
53
54 inline uint8_t getIndex() { return _index; }
55
56 // IRQ handlers are our best friends
57 friend void TIMER0_IRQ_0_Handler(void);
58 friend void TIMER0_IRQ_1_Handler(void);
59 friend void TIMER0_IRQ_2_Handler(void);
60 friend void TIMER0_IRQ_3_Handler(void);
61 friend void TIMER1_IRQ_0_Handler(void);
62 friend void TIMER1_IRQ_1_Handler(void);
63 friend void TIMER1_IRQ_2_Handler(void);
64 friend void TIMER1_IRQ_3_Handler(void);
65
66private:
67
68 void irqHandler();
69
70 static timer_rp2350 * _timerinst[8];
71 static function<void()> _callback[8];
72
73 TIMER0_t * _timer {nullptr};
74 uint32_t * _alarm {nullptr};
75 uint8_t _index {0};
76 uint32_t _mask {0};
77 TIMER::timer_mode _mode;
78 uint32_t _period {0};
79};
80
81#endif // _TIMER_RP2350_H_