@@ -432,6 +432,12 @@ where
432432 . pre_init ( mode, freq, SPI :: get_frequency ( & clocks) )
433433 . init ( )
434434 }
435+
436+ pub fn to_bidi_transfer_mode ( self ) -> Spi < SPI , ( SCK , MISO , MOSI ) , TransferModeBidi > {
437+ let mut dev_w_new_t_mode = self . into_mode ( TransferModeBidi { } ) ;
438+ dev_w_new_t_mode. enable ( false ) ;
439+ dev_w_new_t_mode. init ( )
440+ }
435441}
436442
437443impl < SPI , SCK , MISO , MOSI > Spi < SPI , ( SCK , MISO , MOSI ) , TransferModeBidi >
@@ -463,6 +469,12 @@ where
463469 . pre_init ( mode, freq, SPI :: get_frequency ( & clocks) )
464470 . init ( )
465471 }
472+
473+ pub fn to_normal_transfer_mode ( self ) -> Spi < SPI , ( SCK , MISO , MOSI ) , TransferModeNormal > {
474+ let mut dev_w_new_t_mode = self . into_mode ( TransferModeNormal { } ) ;
475+ dev_w_new_t_mode. enable ( false ) ;
476+ dev_w_new_t_mode. init ( )
477+ }
466478}
467479
468480impl < SPI , PINS > Spi < SPI , PINS , TransferModeNormal >
@@ -509,6 +521,26 @@ impl<SPI, PINS, TRANSFER_MODE> Spi<SPI, PINS, TRANSFER_MODE>
509521where
510522 SPI : Instance ,
511523{
524+ /// Convert the spi to another transfer mode.
525+ fn into_mode < TRANSFER_MODE2 > (
526+ self ,
527+ transfer_mode : TRANSFER_MODE2 ,
528+ ) -> Spi < SPI , PINS , TRANSFER_MODE2 > {
529+ Spi {
530+ spi : self . spi ,
531+ pins : self . pins ,
532+ transfer_mode,
533+ }
534+ }
535+
536+ /// Enable/disable spi
537+ pub fn enable ( & mut self , enable : bool ) {
538+ self . spi . cr1 . modify ( |_, w| {
539+ // spe: enable the SPI bus
540+ w. spe ( ) . bit ( enable)
541+ } ) ;
542+ }
543+
512544 /// Pre initializing the SPI bus.
513545 pub fn pre_init ( self , mode : Mode , freq : Hertz , clock : Hertz ) -> Self {
514546 // disable SS output
0 commit comments