1
+ use core:: convert:: Infallible ;
2
+
1
3
use crate :: register:: mcycle;
2
- use embedded_hal:: blocking :: delay :: { DelayMs , DelayUs } ;
4
+ use embedded_hal:: delay :: blocking :: DelayUs ;
3
5
4
6
/// Machine mode cycle counter (`mcycle`) as a delay provider
5
7
#[ derive( Copy , Clone ) ]
@@ -15,71 +17,16 @@ impl McycleDelay {
15
17
}
16
18
}
17
19
18
- impl DelayUs < u64 > for McycleDelay {
20
+ impl DelayUs for McycleDelay {
21
+ type Error = Infallible ;
22
+
19
23
#[ inline]
20
- fn delay_us ( & mut self , us : u64 ) {
24
+ fn delay_us ( & mut self , us : u32 ) -> Result < ( ) , Self :: Error > {
21
25
let t0 = mcycle:: read64 ( ) ;
22
- let clock = ( us * ( self . ticks_second as u64 ) ) / 1_000_000 ;
26
+ let us_64: u64 = us. into ( ) ;
27
+ let clock = ( us_64 * ( self . ticks_second as u64 ) ) / 1_000_000u64 ;
23
28
while mcycle:: read64 ( ) . wrapping_sub ( t0) <= clock { }
24
- }
25
- }
26
29
27
- impl DelayUs < u32 > for McycleDelay {
28
- #[ inline( always) ]
29
- fn delay_us ( & mut self , us : u32 ) {
30
- self . delay_us ( us as u64 )
31
- }
32
- }
33
-
34
- // Implemented for constructions like `delay.delay_us(50_000);`
35
- impl DelayUs < i32 > for McycleDelay {
36
- #[ inline( always) ]
37
- fn delay_us ( & mut self , us : i32 ) {
38
- assert ! ( us >= 0 ) ;
39
- self . delay_us ( us as u32 ) ;
40
- }
41
- }
42
-
43
- impl DelayUs < u16 > for McycleDelay {
44
- #[ inline( always) ]
45
- fn delay_us ( & mut self , us : u16 ) {
46
- self . delay_us ( us as u32 )
47
- }
48
- }
49
-
50
- impl DelayUs < u8 > for McycleDelay {
51
- #[ inline( always) ]
52
- fn delay_us ( & mut self , us : u8 ) {
53
- self . delay_us ( us as u32 )
54
- }
55
- }
56
-
57
- impl DelayMs < u32 > for McycleDelay {
58
- #[ inline]
59
- fn delay_ms ( & mut self , ms : u32 ) {
60
- self . delay_us ( ( ms as u64 ) * 1000 )
61
- }
62
- }
63
-
64
- // Implemented for constructions like `delay.delay_ms(50_000);`
65
- impl DelayMs < i32 > for McycleDelay {
66
- #[ inline( always) ]
67
- fn delay_ms ( & mut self , ms : i32 ) {
68
- assert ! ( ms >= 0 ) ;
69
- self . delay_ms ( ms as u32 ) ;
70
- }
71
- }
72
-
73
- impl DelayMs < u16 > for McycleDelay {
74
- #[ inline( always) ]
75
- fn delay_ms ( & mut self , ms : u16 ) {
76
- self . delay_ms ( ms as u32 )
77
- }
78
- }
79
-
80
- impl DelayMs < u8 > for McycleDelay {
81
- #[ inline( always) ]
82
- fn delay_ms ( & mut self , ms : u8 ) {
83
- self . delay_ms ( ms as u32 )
30
+ Ok ( ( ) )
84
31
}
85
32
}
0 commit comments