diff options
Diffstat (limited to 'embassy-stm32')
| -rw-r--r-- | embassy-stm32/src/sai/mod.rs | 50 |
1 files changed, 22 insertions, 28 deletions
diff --git a/embassy-stm32/src/sai/mod.rs b/embassy-stm32/src/sai/mod.rs index 0c9c27797..524e01be7 100644 --- a/embassy-stm32/src/sai/mod.rs +++ b/embassy-stm32/src/sai/mod.rs | |||
| @@ -48,7 +48,7 @@ pub enum Mode { | |||
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | impl Mode { | 50 | impl Mode { |
| 51 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 51 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 52 | const fn mode(&self, tx_rx: TxRx) -> vals::Mode { | 52 | const fn mode(&self, tx_rx: TxRx) -> vals::Mode { |
| 53 | match tx_rx { | 53 | match tx_rx { |
| 54 | TxRx::Transmitter => match self { | 54 | TxRx::Transmitter => match self { |
| @@ -83,7 +83,7 @@ pub enum SlotSize { | |||
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | impl SlotSize { | 85 | impl SlotSize { |
| 86 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 86 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 87 | const fn slotsz(&self) -> vals::Slotsz { | 87 | const fn slotsz(&self) -> vals::Slotsz { |
| 88 | match self { | 88 | match self { |
| 89 | SlotSize::DataSize => vals::Slotsz::DATA_SIZE, | 89 | SlotSize::DataSize => vals::Slotsz::DATA_SIZE, |
| @@ -106,7 +106,7 @@ pub enum DataSize { | |||
| 106 | } | 106 | } |
| 107 | 107 | ||
| 108 | impl DataSize { | 108 | impl DataSize { |
| 109 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 109 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 110 | const fn ds(&self) -> vals::Ds { | 110 | const fn ds(&self) -> vals::Ds { |
| 111 | match self { | 111 | match self { |
| 112 | DataSize::Data8 => vals::Ds::BIT8, | 112 | DataSize::Data8 => vals::Ds::BIT8, |
| @@ -131,7 +131,7 @@ pub enum FifoThreshold { | |||
| 131 | } | 131 | } |
| 132 | 132 | ||
| 133 | impl FifoThreshold { | 133 | impl FifoThreshold { |
| 134 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 134 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 135 | const fn fth(&self) -> vals::Fth { | 135 | const fn fth(&self) -> vals::Fth { |
| 136 | match self { | 136 | match self { |
| 137 | FifoThreshold::Empty => vals::Fth::EMPTY, | 137 | FifoThreshold::Empty => vals::Fth::EMPTY, |
| @@ -152,7 +152,7 @@ pub enum MuteValue { | |||
| 152 | } | 152 | } |
| 153 | 153 | ||
| 154 | impl MuteValue { | 154 | impl MuteValue { |
| 155 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 155 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 156 | const fn muteval(&self) -> vals::Muteval { | 156 | const fn muteval(&self) -> vals::Muteval { |
| 157 | match self { | 157 | match self { |
| 158 | MuteValue::Zero => vals::Muteval::SEND_ZERO, | 158 | MuteValue::Zero => vals::Muteval::SEND_ZERO, |
| @@ -171,7 +171,7 @@ pub enum Protocol { | |||
| 171 | } | 171 | } |
| 172 | 172 | ||
| 173 | impl Protocol { | 173 | impl Protocol { |
| 174 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 174 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 175 | const fn prtcfg(&self) -> vals::Prtcfg { | 175 | const fn prtcfg(&self) -> vals::Prtcfg { |
| 176 | match self { | 176 | match self { |
| 177 | Protocol::Free => vals::Prtcfg::FREE, | 177 | Protocol::Free => vals::Prtcfg::FREE, |
| @@ -229,7 +229,7 @@ pub enum StereoMono { | |||
| 229 | } | 229 | } |
| 230 | 230 | ||
| 231 | impl StereoMono { | 231 | impl StereoMono { |
| 232 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 232 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 233 | const fn mono(&self) -> vals::Mono { | 233 | const fn mono(&self) -> vals::Mono { |
| 234 | match self { | 234 | match self { |
| 235 | StereoMono::Stereo => vals::Mono::STEREO, | 235 | StereoMono::Stereo => vals::Mono::STEREO, |
| @@ -248,7 +248,7 @@ pub enum BitOrder { | |||
| 248 | } | 248 | } |
| 249 | 249 | ||
| 250 | impl BitOrder { | 250 | impl BitOrder { |
| 251 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 251 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 252 | const fn lsbfirst(&self) -> vals::Lsbfirst { | 252 | const fn lsbfirst(&self) -> vals::Lsbfirst { |
| 253 | match self { | 253 | match self { |
| 254 | BitOrder::LsbFirst => vals::Lsbfirst::LSB_FIRST, | 254 | BitOrder::LsbFirst => vals::Lsbfirst::LSB_FIRST, |
| @@ -267,7 +267,7 @@ pub enum FrameSyncOffset { | |||
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | impl FrameSyncOffset { | 269 | impl FrameSyncOffset { |
| 270 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 270 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 271 | const fn fsoff(&self) -> vals::Fsoff { | 271 | const fn fsoff(&self) -> vals::Fsoff { |
| 272 | match self { | 272 | match self { |
| 273 | FrameSyncOffset::OnFirstBit => vals::Fsoff::ON_FIRST, | 273 | FrameSyncOffset::OnFirstBit => vals::Fsoff::ON_FIRST, |
| @@ -286,7 +286,7 @@ pub enum FrameSyncPolarity { | |||
| 286 | } | 286 | } |
| 287 | 287 | ||
| 288 | impl FrameSyncPolarity { | 288 | impl FrameSyncPolarity { |
| 289 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 289 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 290 | const fn fspol(&self) -> vals::Fspol { | 290 | const fn fspol(&self) -> vals::Fspol { |
| 291 | match self { | 291 | match self { |
| 292 | FrameSyncPolarity::ActiveLow => vals::Fspol::FALLING_EDGE, | 292 | FrameSyncPolarity::ActiveLow => vals::Fspol::FALLING_EDGE, |
| @@ -304,7 +304,7 @@ pub enum FrameSyncDefinition { | |||
| 304 | } | 304 | } |
| 305 | 305 | ||
| 306 | impl FrameSyncDefinition { | 306 | impl FrameSyncDefinition { |
| 307 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 307 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 308 | const fn fsdef(&self) -> bool { | 308 | const fn fsdef(&self) -> bool { |
| 309 | match self { | 309 | match self { |
| 310 | FrameSyncDefinition::StartOfFrame => false, | 310 | FrameSyncDefinition::StartOfFrame => false, |
| @@ -322,7 +322,7 @@ pub enum ClockStrobe { | |||
| 322 | } | 322 | } |
| 323 | 323 | ||
| 324 | impl ClockStrobe { | 324 | impl ClockStrobe { |
| 325 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 325 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 326 | const fn ckstr(&self) -> vals::Ckstr { | 326 | const fn ckstr(&self) -> vals::Ckstr { |
| 327 | match self { | 327 | match self { |
| 328 | ClockStrobe::Falling => vals::Ckstr::FALLING_EDGE, | 328 | ClockStrobe::Falling => vals::Ckstr::FALLING_EDGE, |
| @@ -340,7 +340,7 @@ pub enum ComplementFormat { | |||
| 340 | } | 340 | } |
| 341 | 341 | ||
| 342 | impl ComplementFormat { | 342 | impl ComplementFormat { |
| 343 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 343 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 344 | const fn cpl(&self) -> vals::Cpl { | 344 | const fn cpl(&self) -> vals::Cpl { |
| 345 | match self { | 345 | match self { |
| 346 | ComplementFormat::OnesComplement => vals::Cpl::ONES_COMPLEMENT, | 346 | ComplementFormat::OnesComplement => vals::Cpl::ONES_COMPLEMENT, |
| @@ -359,7 +359,7 @@ pub enum Companding { | |||
| 359 | } | 359 | } |
| 360 | 360 | ||
| 361 | impl Companding { | 361 | impl Companding { |
| 362 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 362 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 363 | const fn comp(&self) -> vals::Comp { | 363 | const fn comp(&self) -> vals::Comp { |
| 364 | match self { | 364 | match self { |
| 365 | Companding::None => vals::Comp::NO_COMPANDING, | 365 | Companding::None => vals::Comp::NO_COMPANDING, |
| @@ -378,7 +378,7 @@ pub enum OutputDrive { | |||
| 378 | } | 378 | } |
| 379 | 379 | ||
| 380 | impl OutputDrive { | 380 | impl OutputDrive { |
| 381 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 381 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 382 | const fn outdriv(&self) -> vals::Outdriv { | 382 | const fn outdriv(&self) -> vals::Outdriv { |
| 383 | match self { | 383 | match self { |
| 384 | OutputDrive::OnStart => vals::Outdriv::ON_START, | 384 | OutputDrive::OnStart => vals::Outdriv::ON_START, |
| @@ -390,7 +390,7 @@ impl OutputDrive { | |||
| 390 | /// Master clock divider. | 390 | /// Master clock divider. |
| 391 | #[derive(Copy, Clone, PartialEq)] | 391 | #[derive(Copy, Clone, PartialEq)] |
| 392 | #[allow(missing_docs)] | 392 | #[allow(missing_docs)] |
| 393 | #[cfg(any(sai_v1, sai_v2))] | 393 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2))] |
| 394 | pub enum MasterClockDivider { | 394 | pub enum MasterClockDivider { |
| 395 | MasterClockDisabled, | 395 | MasterClockDisabled, |
| 396 | Div1, | 396 | Div1, |
| @@ -483,7 +483,7 @@ pub enum MasterClockDivider { | |||
| 483 | } | 483 | } |
| 484 | 484 | ||
| 485 | impl MasterClockDivider { | 485 | impl MasterClockDivider { |
| 486 | #[cfg(any(sai_v1, sai_v2))] | 486 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2))] |
| 487 | const fn mckdiv(&self) -> u8 { | 487 | const fn mckdiv(&self) -> u8 { |
| 488 | match self { | 488 | match self { |
| 489 | MasterClockDivider::MasterClockDisabled => 0, | 489 | MasterClockDivider::MasterClockDisabled => 0, |
| @@ -704,7 +704,7 @@ fn update_synchronous_config(config: &mut Config) { | |||
| 704 | config.mode = Mode::Slave; | 704 | config.mode = Mode::Slave; |
| 705 | config.sync_output = false; | 705 | config.sync_output = false; |
| 706 | 706 | ||
| 707 | #[cfg(any(sai_v1, sai_v2))] | 707 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2))] |
| 708 | { | 708 | { |
| 709 | config.sync_input = SyncInput::Internal; | 709 | config.sync_input = SyncInput::Internal; |
| 710 | } | 710 | } |
| @@ -858,7 +858,7 @@ impl<'d, T: Instance, W: word::Word> Sai<'d, T, W> { | |||
| 858 | ) -> Self { | 858 | ) -> Self { |
| 859 | let ch = T::REGS.ch(sub_block as usize); | 859 | let ch = T::REGS.ch(sub_block as usize); |
| 860 | 860 | ||
| 861 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 861 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 862 | { | 862 | { |
| 863 | ch.cr1().modify(|w| w.set_saien(false)); | 863 | ch.cr1().modify(|w| w.set_saien(false)); |
| 864 | } | 864 | } |
| @@ -884,7 +884,7 @@ impl<'d, T: Instance, W: word::Word> Sai<'d, T, W> { | |||
| 884 | } | 884 | } |
| 885 | } | 885 | } |
| 886 | 886 | ||
| 887 | #[cfg(any(sai_v1, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] | 887 | #[cfg(any(sai_v1, sai_v1_4pdm, sai_v2, sai_v3_2pdm, sai_v3_4pdm, sai_v4_2pdm, sai_v4_4pdm))] |
| 888 | { | 888 | { |
| 889 | ch.cr1().modify(|w| { | 889 | ch.cr1().modify(|w| { |
| 890 | w.set_mode(config.mode.mode(if Self::is_transmitter(&ring_buffer) { | 890 | w.set_mode(config.mode.mode(if Self::is_transmitter(&ring_buffer) { |
| @@ -899,14 +899,8 @@ impl<'d, T: Instance, W: word::Word> Sai<'d, T, W> { | |||
| 899 | w.set_syncen(config.sync_input.syncen()); | 899 | w.set_syncen(config.sync_input.syncen()); |
| 900 | w.set_mono(config.stereo_mono.mono()); | 900 | w.set_mono(config.stereo_mono.mono()); |
| 901 | w.set_outdriv(config.output_drive.outdriv()); | 901 | w.set_outdriv(config.output_drive.outdriv()); |
| 902 | w.set_mckdiv(config.master_clock_divider.mckdiv()); | 902 | w.set_mckdiv(config.master_clock_divider.mckdiv().into()); |
| 903 | w.set_nodiv( | 903 | w.set_nodiv(config.master_clock_divider == MasterClockDivider::MasterClockDisabled); |
| 904 | if config.master_clock_divider == MasterClockDivider::MasterClockDisabled { | ||
| 905 | vals::Nodiv::NO_DIV | ||
| 906 | } else { | ||
| 907 | vals::Nodiv::MASTER_CLOCK | ||
| 908 | }, | ||
| 909 | ); | ||
| 910 | w.set_dmaen(true); | 904 | w.set_dmaen(true); |
| 911 | }); | 905 | }); |
| 912 | 906 | ||
