diff options
| author | Henrik Alsér <[email protected]> | 2022-07-08 15:47:47 +0200 |
|---|---|---|
| committer | Henrik Alsér <[email protected]> | 2022-07-08 15:47:47 +0200 |
| commit | f30ff9cadcf575100a4e08c972d2f161172a3fc9 (patch) | |
| tree | 3c19664e1e72a483a1d2d85b176cf760694642f4 /embassy-nrf/src/spim.rs | |
| parent | 6baddaf53982b75149cb7e91280c571f7fe2e7bc (diff) | |
Shared buses with SetConfig
Diffstat (limited to 'embassy-nrf/src/spim.rs')
| -rw-r--r-- | embassy-nrf/src/spim.rs | 43 |
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; | |||
| 4 | use core::sync::atomic::{compiler_fence, Ordering}; | 4 | use core::sync::atomic::{compiler_fence, Ordering}; |
| 5 | use core::task::Poll; | 5 | use core::task::Poll; |
| 6 | 6 | ||
| 7 | use embassy_embedded_hal::SetConfig; | ||
| 7 | use embassy_hal_common::unborrow; | 8 | use embassy_hal_common::unborrow; |
| 8 | pub use embedded_hal_02::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3}; | 9 | pub use embedded_hal_02::spi::{Mode, Phase, Polarity, MODE_0, MODE_1, MODE_2, MODE_3}; |
| 9 | use futures::future::poll_fn; | 10 | use futures::future::poll_fn; |
| @@ -521,3 +522,45 @@ cfg_if::cfg_if! { | |||
| 521 | } | 522 | } |
| 522 | } | 523 | } |
| 523 | } | 524 | } |
| 525 | |||
| 526 | impl<'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 | } | ||
