aboutsummaryrefslogtreecommitdiff
path: root/embassy-nrf/src/timer.rs
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2021-03-28 22:40:41 +0200
committerDario Nieuwenhuis <[email protected]>2021-03-29 00:58:58 +0200
commit31b817ed273ccecc4297a8a64d01b564bf51ae88 (patch)
treeb0020cdfa5c5010108aaf8ed253d55135aa11b90 /embassy-nrf/src/timer.rs
parentaa0341056ea086a6ec084d78a381066ae2333e53 (diff)
nrf/timer: add instance traits
Diffstat (limited to 'embassy-nrf/src/timer.rs')
-rw-r--r--embassy-nrf/src/timer.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/embassy-nrf/src/timer.rs b/embassy-nrf/src/timer.rs
new file mode 100644
index 000000000..6307a15ee
--- /dev/null
+++ b/embassy-nrf/src/timer.rs
@@ -0,0 +1,43 @@
1use embassy::interrupt::Interrupt;
2
3use crate::{interrupt, pac, peripherals};
4
5mod sealed {
6 use super::*;
7
8 pub trait Instance {
9 fn regs(&self) -> &pac::timer0::RegisterBlock;
10 }
11 pub trait ExtendedInstance {}
12}
13
14pub trait Instance: sealed::Instance + 'static {
15 type Interrupt: Interrupt;
16}
17pub trait ExtendedInstance: Instance + sealed::ExtendedInstance {}
18
19macro_rules! make_impl {
20 ($type:ident, $irq:ident) => {
21 impl sealed::Instance for peripherals::$type {
22 fn regs(&self) -> &pac::timer0::RegisterBlock {
23 unsafe { &*(pac::$type::ptr() as *const pac::timer0::RegisterBlock) }
24 }
25 }
26 impl Instance for peripherals::$type {
27 type Interrupt = interrupt::$irq;
28 }
29 };
30 ($type:ident, $irq:ident, extended) => {
31 make_impl!($type, $irq);
32 impl sealed::ExtendedInstance for peripherals::$type {}
33 impl ExtendedInstance for peripherals::$type {}
34 };
35}
36
37make_impl!(TIMER0, TIMER0);
38make_impl!(TIMER1, TIMER1);
39make_impl!(TIMER2, TIMER2);
40#[cfg(any(feature = "52832", feature = "52833", feature = "52840"))]
41make_impl!(TIMER3, TIMER3, extended);
42#[cfg(any(feature = "52832", feature = "52833", feature = "52840"))]
43make_impl!(TIMER4, TIMER4, extended);