1#![deny(missing_docs)]
4#![no_std]
5
6pub use bitrate;
7use bitrate::*;
8use cortex_m::asm::delay;
9use embedded_hal::delay::DelayNs;
10
11pub struct AsmDelay {
13 freq_base_ns: u32,
14}
15
16impl AsmDelay {
17 pub fn new<F>(freq: F) -> Self
19 where
20 F: Into<Hertz<u32>>,
21 {
22 let freq_hz = freq.into().0;
23 AsmDelay {
24 freq_base_ns: (freq_hz / 1_000_000_000) / 2,
25 }
26 }
27}
28
29impl DelayNs for AsmDelay
30{
31 fn delay_ns(&mut self, ns: u32) {
32 delay(self.freq_base_ns * ns)
33 }
34}
35
36pub struct CyclesToTime {
38 freq_base_ms: f32,
39 freq_base_us: f32,
40 freq_base_ns: f32,
41}
42
43impl CyclesToTime {
44 pub fn new<F>(freq: F) -> Self
46 where
47 F: Into<Hertz<u32>>,
48 {
49 let freq_hz = freq.into().0;
50 CyclesToTime {
51 freq_base_ms: (freq_hz / 1_000) as f32,
52 freq_base_us: (freq_hz / 1_000_000) as f32,
53 freq_base_ns: (freq_hz / 1_000_000_00) as f32,
54 }
55 }
56
57 pub fn to_ms<U>(&self, cycles: U) -> f32
59 where
60 U: Into<u32>,
61 {
62 (cycles.into() as f32) / self.freq_base_ms
63 }
64
65 pub fn to_us<U>(&self, cycles: U) -> f32
67 where
68 U: Into<u32>,
69 {
70 (cycles.into() as f32) / self.freq_base_us
71 }
72
73 pub fn to_ns<U>(&self, cycles: U) -> f32
75 where
76 U: Into<u32>,
77 {
78 (cycles.into() as f32) / self.freq_base_ns
79 }
80}