@@ -432,6 +432,12 @@ where
432
432
. pre_init ( mode, freq, SPI :: get_frequency ( & clocks) )
433
433
. init ( )
434
434
}
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
+ }
435
441
}
436
442
437
443
impl < SPI , SCK , MISO , MOSI > Spi < SPI , ( SCK , MISO , MOSI ) , TransferModeBidi >
@@ -463,6 +469,12 @@ where
463
469
. pre_init ( mode, freq, SPI :: get_frequency ( & clocks) )
464
470
. init ( )
465
471
}
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
+ }
466
478
}
467
479
468
480
impl < SPI , PINS > Spi < SPI , PINS , TransferModeNormal >
@@ -509,6 +521,26 @@ impl<SPI, PINS, TRANSFER_MODE> Spi<SPI, PINS, TRANSFER_MODE>
509
521
where
510
522
SPI : Instance ,
511
523
{
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
+
512
544
/// Pre initializing the SPI bus.
513
545
pub fn pre_init ( self , mode : Mode , freq : Hertz , clock : Hertz ) -> Self {
514
546
// disable SS output
0 commit comments