aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorceekdee <[email protected]>2023-05-04 09:45:18 -0500
committerceekdee <[email protected]>2023-05-04 09:45:18 -0500
commit91612b7446b5cd50cd018b3aeb7a10c77b612012 (patch)
treedcb57d41df80673a49fa7d9576a4685bf7f76dde
parentb1ef856242c1da164e69d86a3cc2e9d4a9eb8786 (diff)
Simplify SUBGHZSPI configuration.
-rw-r--r--embassy-stm32/src/spi/mod.rs4
-rw-r--r--examples/stm32wl/src/bin/lora_lorawan.rs5
-rw-r--r--examples/stm32wl/src/bin/lora_p2p_receive.rs5
-rw-r--r--examples/stm32wl/src/bin/lora_p2p_send.rs5
4 files changed, 5 insertions, 14 deletions
diff --git a/embassy-stm32/src/spi/mod.rs b/embassy-stm32/src/spi/mod.rs
index ead8411ec..7390830dc 100644
--- a/embassy-stm32/src/spi/mod.rs
+++ b/embassy-stm32/src/spi/mod.rs
@@ -194,17 +194,17 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> {
194 Self::new_inner(peri, None, Some(mosi.map_into()), None, txdma, rxdma, freq, config) 194 Self::new_inner(peri, None, Some(mosi.map_into()), None, txdma, rxdma, freq, config)
195 } 195 }
196 196
197 #[cfg(stm32wl)]
197 /// Useful for on chip peripherals like SUBGHZ which are hardwired. 198 /// Useful for on chip peripherals like SUBGHZ which are hardwired.
198 #[allow(dead_code)]
199 pub fn new_subghz( 199 pub fn new_subghz(
200 peri: impl Peripheral<P = T> + 'd, 200 peri: impl Peripheral<P = T> + 'd,
201 txdma: impl Peripheral<P = Tx> + 'd, 201 txdma: impl Peripheral<P = Tx> + 'd,
202 rxdma: impl Peripheral<P = Rx> + 'd, 202 rxdma: impl Peripheral<P = Rx> + 'd,
203 pclk3_freq: u32,
204 ) -> Self { 203 ) -> Self {
205 // see RM0453 rev 1 section 7.2.13 page 291 204 // see RM0453 rev 1 section 7.2.13 page 291
206 // The SUBGHZSPI_SCK frequency is obtained by PCLK3 divided by two. 205 // The SUBGHZSPI_SCK frequency is obtained by PCLK3 divided by two.
207 // The SUBGHZSPI_SCK clock maximum speed must not exceed 16 MHz. 206 // The SUBGHZSPI_SCK clock maximum speed must not exceed 16 MHz.
207 let pclk3_freq = <peripherals::SUBGHZSPI as crate::rcc::sealed::RccPeripheral>::frequency().0;
208 let freq = Hertz(core::cmp::min(pclk3_freq / 2, 16_000_000)); 208 let freq = Hertz(core::cmp::min(pclk3_freq / 2, 16_000_000));
209 let mut config = Config::default(); 209 let mut config = Config::default();
210 config.mode = MODE_0; 210 config.mode = MODE_0;
diff --git a/examples/stm32wl/src/bin/lora_lorawan.rs b/examples/stm32wl/src/bin/lora_lorawan.rs
index 467ba7604..644ce2959 100644
--- a/examples/stm32wl/src/bin/lora_lorawan.rs
+++ b/examples/stm32wl/src/bin/lora_lorawan.rs
@@ -11,8 +11,6 @@ use embassy_executor::Spawner;
11use embassy_lora::iv::Stm32wlInterfaceVariant; 11use embassy_lora::iv::Stm32wlInterfaceVariant;
12use embassy_lora::LoraTimer; 12use embassy_lora::LoraTimer;
13use embassy_stm32::gpio::{Level, Output, Pin, Speed}; 13use embassy_stm32::gpio::{Level, Output, Pin, Speed};
14use embassy_stm32::peripherals::SUBGHZSPI;
15use embassy_stm32::rcc::low_level::RccPeripheral;
16use embassy_stm32::rng::Rng; 14use embassy_stm32::rng::Rng;
17use embassy_stm32::spi::Spi; 15use embassy_stm32::spi::Spi;
18use embassy_stm32::{interrupt, into_ref, pac, Peripheral}; 16use embassy_stm32::{interrupt, into_ref, pac, Peripheral};
@@ -36,8 +34,7 @@ async fn main(_spawner: Spawner) {
36 34
37 unsafe { pac::RCC.ccipr().modify(|w| w.set_rngsel(0b01)) } 35 unsafe { pac::RCC.ccipr().modify(|w| w.set_rngsel(0b01)) }
38 36
39 let pclk3_freq = SUBGHZSPI::frequency().0; 37 let spi = Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2);
40 let spi = Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2, pclk3_freq);
41 38
42 let irq = interrupt::take!(SUBGHZ_RADIO); 39 let irq = interrupt::take!(SUBGHZ_RADIO);
43 into_ref!(irq); 40 into_ref!(irq);
diff --git a/examples/stm32wl/src/bin/lora_p2p_receive.rs b/examples/stm32wl/src/bin/lora_p2p_receive.rs
index cb0a8e349..81e9c7057 100644
--- a/examples/stm32wl/src/bin/lora_p2p_receive.rs
+++ b/examples/stm32wl/src/bin/lora_p2p_receive.rs
@@ -10,8 +10,6 @@ use defmt::info;
10use embassy_executor::Spawner; 10use embassy_executor::Spawner;
11use embassy_lora::iv::Stm32wlInterfaceVariant; 11use embassy_lora::iv::Stm32wlInterfaceVariant;
12use embassy_stm32::gpio::{Level, Output, Pin, Speed}; 12use embassy_stm32::gpio::{Level, Output, Pin, Speed};
13use embassy_stm32::peripherals::SUBGHZSPI;
14use embassy_stm32::rcc::low_level::RccPeripheral;
15use embassy_stm32::spi::Spi; 13use embassy_stm32::spi::Spi;
16use embassy_stm32::{interrupt, into_ref, Peripheral}; 14use embassy_stm32::{interrupt, into_ref, Peripheral};
17use embassy_time::{Delay, Duration, Timer}; 15use embassy_time::{Delay, Duration, Timer};
@@ -28,8 +26,7 @@ async fn main(_spawner: Spawner) {
28 config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSE32; 26 config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSE32;
29 let p = embassy_stm32::init(config); 27 let p = embassy_stm32::init(config);
30 28
31 let pclk3_freq = SUBGHZSPI::frequency().0; 29 let spi = Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2);
32 let spi = Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2, pclk3_freq);
33 30
34 let irq = interrupt::take!(SUBGHZ_RADIO); 31 let irq = interrupt::take!(SUBGHZ_RADIO);
35 into_ref!(irq); 32 into_ref!(irq);
diff --git a/examples/stm32wl/src/bin/lora_p2p_send.rs b/examples/stm32wl/src/bin/lora_p2p_send.rs
index f267f2ae6..263d4e670 100644
--- a/examples/stm32wl/src/bin/lora_p2p_send.rs
+++ b/examples/stm32wl/src/bin/lora_p2p_send.rs
@@ -10,8 +10,6 @@ use defmt::info;
10use embassy_executor::Spawner; 10use embassy_executor::Spawner;
11use embassy_lora::iv::Stm32wlInterfaceVariant; 11use embassy_lora::iv::Stm32wlInterfaceVariant;
12use embassy_stm32::gpio::{Level, Output, Pin, Speed}; 12use embassy_stm32::gpio::{Level, Output, Pin, Speed};
13use embassy_stm32::peripherals::SUBGHZSPI;
14use embassy_stm32::rcc::low_level::RccPeripheral;
15use embassy_stm32::spi::Spi; 13use embassy_stm32::spi::Spi;
16use embassy_stm32::{interrupt, into_ref, Peripheral}; 14use embassy_stm32::{interrupt, into_ref, Peripheral};
17use embassy_time::Delay; 15use embassy_time::Delay;
@@ -28,8 +26,7 @@ async fn main(_spawner: Spawner) {
28 config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSE32; 26 config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSE32;
29 let p = embassy_stm32::init(config); 27 let p = embassy_stm32::init(config);
30 28
31 let pclk3_freq = SUBGHZSPI::frequency().0; 29 let spi = Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2);
32 let spi = Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2, pclk3_freq);
33 30
34 let irq = interrupt::take!(SUBGHZ_RADIO); 31 let irq = interrupt::take!(SUBGHZ_RADIO);
35 into_ref!(irq); 32 into_ref!(irq);