1+ use core:: convert:: Infallible ;
2+
13use crate :: register:: mcycle;
2- use embedded_hal:: blocking :: delay :: { DelayMs , DelayUs } ;
4+ use embedded_hal:: delay :: blocking :: DelayUs ;
35
46/// Machine mode cycle counter (`mcycle`) as a delay provider
57#[ derive( Copy , Clone ) ]
@@ -15,71 +17,16 @@ impl McycleDelay {
1517 }
1618}
1719
18- impl DelayUs < u64 > for McycleDelay {
20+ impl DelayUs for McycleDelay {
21+ type Error = Infallible ;
22+
1923 #[ inline]
20- fn delay_us ( & mut self , us : u64 ) {
24+ fn delay_us ( & mut self , us : u32 ) -> Result < ( ) , Self :: Error > {
2125 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 ;
2328 while mcycle:: read64 ( ) . wrapping_sub ( t0) <= clock { }
24- }
25- }
2629
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 ( ( ) )
8431 }
8532}
0 commit comments