@@ -4,8 +4,36 @@ use core::ptr;
4
4
5
5
use crate :: dma:: traits:: PeriAddress ;
6
6
use crate :: gpio:: { Const , NoPin , PushPull , SetAlternate } ;
7
- use embedded_hal:: spi;
8
- pub use embedded_hal:: spi:: { Mode , Phase , Polarity } ;
7
+
8
+ /// Clock polarity
9
+ #[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
10
+ pub enum Polarity {
11
+ /// Clock signal low when idle
12
+ IdleLow ,
13
+ /// Clock signal high when idle
14
+ IdleHigh ,
15
+ }
16
+
17
+ /// Clock phase
18
+ #[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
19
+ pub enum Phase {
20
+ /// Data in "captured" on the first clock transition
21
+ CaptureOnFirstTransition ,
22
+ /// Data in "captured" on the second clock transition
23
+ CaptureOnSecondTransition ,
24
+ }
25
+
26
+ /// SPI mode
27
+ #[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
28
+ pub struct Mode {
29
+ /// Clock polarity
30
+ pub polarity : Polarity ,
31
+ /// Clock phase
32
+ pub phase : Phase ,
33
+ }
34
+
35
+ mod hal_02;
36
+ mod hal_1;
9
37
10
38
#[ allow( unused) ]
11
39
#[ cfg( feature = "gpiod" ) ]
@@ -438,7 +466,7 @@ where
438
466
pub fn new (
439
467
spi : SPI ,
440
468
mut pins : ( SCK , MISO , MOSI ) ,
441
- mode : Mode ,
469
+ mode : impl Into < Mode > ,
442
470
freq : impl Into < Hertz > ,
443
471
clocks : & Clocks ,
444
472
) -> Self {
@@ -458,7 +486,7 @@ where
458
486
pins,
459
487
transfer_mode : TransferModeNormal ,
460
488
}
461
- . pre_init ( mode, freq. into ( ) , SPI :: clock ( clocks) )
489
+ . pre_init ( mode. into ( ) , freq. into ( ) , SPI :: clock ( clocks) )
462
490
. init ( )
463
491
}
464
492
@@ -480,7 +508,7 @@ where
480
508
pub fn new_bidi (
481
509
spi : SPI ,
482
510
mut pins : ( SCK , MISO , MOSI ) ,
483
- mode : Mode ,
511
+ mode : impl Into < Mode > ,
484
512
freq : impl Into < Hertz > ,
485
513
clocks : & Clocks ,
486
514
) -> Self {
@@ -500,7 +528,7 @@ where
500
528
pins,
501
529
transfer_mode : TransferModeBidi ,
502
530
}
503
- . pre_init ( mode, freq. into ( ) , SPI :: clock ( & clocks) )
531
+ . pre_init ( mode. into ( ) , freq. into ( ) , SPI :: clock ( & clocks) )
504
532
. init ( )
505
533
}
506
534
@@ -593,7 +621,7 @@ where
593
621
}
594
622
595
623
/// Pre initializing the SPI bus.
596
- pub fn pre_init ( self , mode : Mode , freq : Hertz , clock : Hertz ) -> Self {
624
+ fn pre_init ( self , mode : Mode , freq : Hertz , clock : Hertz ) -> Self {
597
625
// disable SS output
598
626
self . spi . cr2 . write ( |w| w. ssoe ( ) . clear_bit ( ) ) ;
599
627
@@ -809,148 +837,3 @@ where
809
837
810
838
type MemSize = u8 ;
811
839
}
812
-
813
- impl < SPI , PINS > spi:: FullDuplex < u8 > for Spi < SPI , PINS , TransferModeNormal >
814
- where
815
- SPI : Instance ,
816
- {
817
- type Error = Error ;
818
-
819
- fn read ( & mut self ) -> nb:: Result < u8 , Error > {
820
- self . check_read ( )
821
- }
822
-
823
- fn send ( & mut self , byte : u8 ) -> nb:: Result < ( ) , Error > {
824
- self . check_send ( byte)
825
- }
826
- }
827
-
828
- impl < SPI , PINS > spi:: FullDuplex < u8 > for Spi < SPI , PINS , TransferModeBidi >
829
- where
830
- SPI : Instance ,
831
- {
832
- type Error = Error ;
833
-
834
- fn read ( & mut self ) -> nb:: Result < u8 , Error > {
835
- self . spi . cr1 . modify ( |_, w| w. bidioe ( ) . clear_bit ( ) ) ;
836
- self . check_read ( )
837
- }
838
-
839
- fn send ( & mut self , byte : u8 ) -> nb:: Result < ( ) , Error > {
840
- self . spi . cr1 . modify ( |_, w| w. bidioe ( ) . set_bit ( ) ) ;
841
- self . check_send ( byte)
842
- }
843
- }
844
-
845
- mod blocking {
846
- use super :: { Error , Instance , Spi , TransferModeBidi , TransferModeNormal } ;
847
- use embedded_hal:: blocking:: spi:: { Operation , Transactional , Transfer , Write , WriteIter } ;
848
- use embedded_hal:: spi:: FullDuplex ;
849
-
850
- impl < SPI , PINS , TRANSFER_MODE > Transfer < u8 > for Spi < SPI , PINS , TRANSFER_MODE >
851
- where
852
- Self : FullDuplex < u8 , Error = Error > ,
853
- SPI : Instance ,
854
- {
855
- type Error = Error ;
856
-
857
- fn transfer < ' w > ( & mut self , words : & ' w mut [ u8 ] ) -> Result < & ' w [ u8 ] , Self :: Error > {
858
- for word in words. iter_mut ( ) {
859
- nb:: block!( self . send( * word) ) ?;
860
- * word = nb:: block!( self . read( ) ) ?;
861
- }
862
-
863
- Ok ( words)
864
- }
865
- }
866
-
867
- impl < SPI , PINS > Write < u8 > for Spi < SPI , PINS , TransferModeNormal >
868
- where
869
- Self : FullDuplex < u8 , Error = Error > ,
870
- SPI : Instance ,
871
- {
872
- type Error = Error ;
873
-
874
- fn write ( & mut self , words : & [ u8 ] ) -> Result < ( ) , Self :: Error > {
875
- for word in words {
876
- nb:: block!( self . send( * word) ) ?;
877
- nb:: block!( self . read( ) ) ?;
878
- }
879
-
880
- Ok ( ( ) )
881
- }
882
- }
883
-
884
- impl < SPI , PINS > Write < u8 > for Spi < SPI , PINS , TransferModeBidi >
885
- where
886
- Self : FullDuplex < u8 , Error = Error > ,
887
- SPI : Instance ,
888
- {
889
- type Error = Error ;
890
-
891
- fn write ( & mut self , words : & [ u8 ] ) -> Result < ( ) , Self :: Error > {
892
- for word in words {
893
- nb:: block!( self . send( * word) ) ?;
894
- }
895
-
896
- Ok ( ( ) )
897
- }
898
- }
899
-
900
- impl < SPI , PINS > WriteIter < u8 > for Spi < SPI , PINS , TransferModeNormal >
901
- where
902
- Self : FullDuplex < u8 , Error = Error > ,
903
- SPI : Instance ,
904
- {
905
- type Error = Error ;
906
-
907
- fn write_iter < WI > ( & mut self , words : WI ) -> Result < ( ) , Self :: Error >
908
- where
909
- WI : IntoIterator < Item = u8 > ,
910
- {
911
- for word in words. into_iter ( ) {
912
- nb:: block!( self . send( word) ) ?;
913
- nb:: block!( self . read( ) ) ?;
914
- }
915
-
916
- Ok ( ( ) )
917
- }
918
- }
919
-
920
- impl < SPI , PINS > WriteIter < u8 > for Spi < SPI , PINS , TransferModeBidi >
921
- where
922
- Self : FullDuplex < u8 , Error = Error > ,
923
- SPI : Instance ,
924
- {
925
- type Error = Error ;
926
-
927
- fn write_iter < WI > ( & mut self , words : WI ) -> Result < ( ) , Self :: Error >
928
- where
929
- WI : IntoIterator < Item = u8 > ,
930
- {
931
- for word in words. into_iter ( ) {
932
- nb:: block!( self . send( word) ) ?;
933
- }
934
-
935
- Ok ( ( ) )
936
- }
937
- }
938
-
939
- impl < SPI , PINS , TRANSFER_MODE , W : ' static > Transactional < W > for Spi < SPI , PINS , TRANSFER_MODE >
940
- where
941
- Self : Write < W , Error = Error > + Transfer < W , Error = Error > ,
942
- {
943
- type Error = Error ;
944
-
945
- fn exec < ' a > ( & mut self , operations : & mut [ Operation < ' a , W > ] ) -> Result < ( ) , Error > {
946
- for op in operations {
947
- match op {
948
- Operation :: Write ( w) => self . write ( w) ?,
949
- Operation :: Transfer ( t) => self . transfer ( t) . map ( |_| ( ) ) ?,
950
- }
951
- }
952
-
953
- Ok ( ( ) )
954
- }
955
- }
956
- }
0 commit comments