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