Skip to content

Commit fd4bb72

Browse files
committed
Add conversion between normal/bidi modes in SPI
1 parent 7f1b99b commit fd4bb72

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

src/spi.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

437443
impl<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

468480
impl<SPI, PINS> Spi<SPI, PINS, TransferModeNormal>
@@ -509,6 +521,26 @@ impl<SPI, PINS, TRANSFER_MODE> Spi<SPI, PINS, TRANSFER_MODE>
509521
where
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

Comments
 (0)