aboutsummaryrefslogtreecommitdiff
path: root/embassy-nrf/src/spim.rs
diff options
context:
space:
mode:
authorHenrik Alsér <[email protected]>2022-07-08 15:47:47 +0200
committerHenrik Alsér <[email protected]>2022-07-08 15:47:47 +0200
commitf30ff9cadcf575100a4e08c972d2f161172a3fc9 (patch)
tree3c19664e1e72a483a1d2d85b176cf760694642f4 /embassy-nrf/src/spim.rs
parent6baddaf53982b75149cb7e91280c571f7fe2e7bc (diff)
Shared buses with SetConfig
Diffstat (limited to 'embassy-nrf/src/spim.rs')
-rw-r--r--embassy-nrf/src/spim.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/embassy-nrf/src/spim.rs b/embassy-nrf/src/spim.rs
index efccfeca3..882bf4b47 100644
--- a/embassy-nrf/src/spim.rs
+++ b/embassy-nrf/src/spim.rs
@@ -4,6 +4,7 @@ use core::marker::PhantomData;
4use core::sync::atomic::{compiler_fence, Ordering}; 4use core::sync::atomic::{compiler_fence, Ordering};
5use core::task::Poll; 5use core::task::Poll;
6 6
7use embassy_embedded_hal::SetConfig;
7use embassy_hal_common::unborrow; 8use embassy_hal_common::unborrow;
8pub use embedded_hal_02::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3}; 9pub use embedded_hal_02::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3};
9use futures::future::poll_fn; 10use futures::future::poll_fn;
@@ -521,3 +522,45 @@ cfg_if::cfg_if! {
521 } 522 }
522 } 523 }
523} 524}
525
526impl<'d, T: Instance> SetConfig<Config> for Spim<'d, T> {
527 fn set_config(&mut self, config: &Config) {
528 let r = T::regs();
529 // Configure mode.
530 let mode = config.mode;
531 r.config.write(|w| {
532 match mode {
533 MODE_0 => {
534 w.order().msb_first();
535 w.cpol().active_high();
536 w.cpha().leading();
537 }
538 MODE_1 => {
539 w.order().msb_first();
540 w.cpol().active_high();
541 w.cpha().trailing();
542 }
543 MODE_2 => {
544 w.order().msb_first();
545 w.cpol().active_low();
546 w.cpha().leading();
547 }
548 MODE_3 => {
549 w.order().msb_first();
550 w.cpol().active_low();
551 w.cpha().trailing();
552 }
553 }
554
555 w
556 });
557
558 // Configure frequency.
559 let frequency = config.frequency;
560 r.frequency.write(|w| w.frequency().variant(frequency));
561
562 // Set over-read character
563 let orc = config.orc;
564 r.orc.write(|w| unsafe { w.orc().bits(orc) });
565 }
566}