From ac764a85a1287b9ca921352aa1fd21c78ffa0312 Mon Sep 17 00:00:00 2001 From: Roman Lim Date: Wed, 24 Sep 2025 13:52:58 +0200 Subject: allow again to set nodiv independently of master clock divider --- embassy-stm32/CHANGELOG.md | 1 + embassy-stm32/src/sai/mod.rs | 10 ++++++---- examples/stm32h7/src/bin/sai.rs | 2 +- examples/stm32h723/src/bin/spdifrx.rs | 1 - 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/embassy-stm32/CHANGELOG.md b/embassy-stm32/CHANGELOG.md index ac228141e..449152485 100644 --- a/embassy-stm32/CHANGELOG.md +++ b/embassy-stm32/CHANGELOG.md @@ -91,6 +91,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - feat: stm32/spi bidirectional mode - fix: stm32/i2c v2: add stop flag on stop received - fix: stm32l47*/stm32l48* adc analog pin setup +- fix: keep stm32/sai: make NODIV independent of MCKDIV ## 0.4.0 - 2025-08-26 diff --git a/embassy-stm32/src/sai/mod.rs b/embassy-stm32/src/sai/mod.rs index ce4bc43c3..579c34c13 100644 --- a/embassy-stm32/src/sai/mod.rs +++ b/embassy-stm32/src/sai/mod.rs @@ -394,7 +394,8 @@ pub struct Config { pub frame_length: u16, pub clock_strobe: ClockStrobe, pub output_drive: OutputDrive, - pub master_clock_divider: Option, + pub master_clock_divider: MasterClockDivider, + pub nodiv: bool, pub is_high_impedance_on_inactive_slot: bool, pub fifo_threshold: FifoThreshold, pub companding: Companding, @@ -423,7 +424,8 @@ impl Default for Config { frame_sync_active_level_length: word::U7(16), frame_sync_definition: FrameSyncDefinition::ChannelIdentification, frame_length: 32, - master_clock_divider: None, + master_clock_divider: MasterClockDivider::DIV1, + nodiv: false, clock_strobe: ClockStrobe::Rising, output_drive: OutputDrive::Immediately, is_high_impedance_on_inactive_slot: false, @@ -677,8 +679,8 @@ impl<'d, T: Instance, W: word::Word> Sai<'d, T, W> { w.set_syncen(config.sync_input.syncen()); w.set_mono(config.stereo_mono.mono()); w.set_outdriv(config.output_drive.outdriv()); - w.set_mckdiv(config.master_clock_divider.unwrap_or(MasterClockDivider::DIV1)); - w.set_nodiv(config.master_clock_divider.is_none()); + w.set_mckdiv(config.master_clock_divider); + w.set_nodiv(config.nodiv); w.set_dmaen(true); }); diff --git a/examples/stm32h7/src/bin/sai.rs b/examples/stm32h7/src/bin/sai.rs index 847b70c85..0300f83bf 100644 --- a/examples/stm32h7/src/bin/sai.rs +++ b/examples/stm32h7/src/bin/sai.rs @@ -63,7 +63,7 @@ async fn main(_spawner: Spawner) { tx_config.tx_rx = TxRx::Transmitter; tx_config.sync_output = true; tx_config.clock_strobe = ClockStrobe::Falling; - tx_config.master_clock_divider = Some(mclk_div); + tx_config.master_clock_divider = mclk_div; tx_config.stereo_mono = StereoMono::Stereo; tx_config.data_size = DataSize::Data24; tx_config.bit_order = BitOrder::MsbFirst; diff --git a/examples/stm32h723/src/bin/spdifrx.rs b/examples/stm32h723/src/bin/spdifrx.rs index 5c29602c6..959e2aa18 100644 --- a/examples/stm32h723/src/bin/spdifrx.rs +++ b/examples/stm32h723/src/bin/spdifrx.rs @@ -168,7 +168,6 @@ fn new_sai_transmitter<'d>( sai_config.slot_enable = 0xFFFF; // All slots sai_config.data_size = sai::DataSize::Data32; sai_config.frame_length = (CHANNEL_COUNT * 32) as u16; - sai_config.master_clock_divider = None; let (sub_block_tx, _) = hal::sai::split_subblocks(sai); Sai::new_asynchronous(sub_block_tx, sck, sd, fs, dma, buf, sai_config) -- cgit