diff --git a/embassy-stm32/src/spi/mod.rs b/embassy-stm32/src/spi/mod.rs index 7e168644..9bb5a729 100644 --- a/embassy-stm32/src/spi/mod.rs +++ b/embassy-stm32/src/spi/mod.rs @@ -116,3 +116,39 @@ crate::pac::peripheral_pins!( impl_pin!($inst, $pin, MisoPin, $af); }; ); + +macro_rules! impl_dma { + ($inst:ident, {dmamux: $dmamux:ident}, $signal:ident, $request:expr) => { + impl sealed::$signal for T + where + T: crate::dma::MuxChannel, + { + fn request(&self) -> dma::Request { + $request + } + } + + impl $signal for T where + T: crate::dma::MuxChannel + { + } + }; + ($inst:ident, {channel: $channel:ident}, $signal:ident, $request:expr) => { + impl sealed::$signal for peripherals::$channel { + fn request(&self) -> dma::Request { + $request + } + } + + impl $signal for peripherals::$channel {} + }; +} + +crate::pac::peripheral_dma_channels! { + ($peri:ident, spi, $kind:ident, RX, $channel:tt, $request:expr) => { + impl_dma!($peri, $channel, RxDmaChannel, $request); + }; + ($peri:ident, spi, $kind:ident, TX, $channel:tt, $request:expr) => { + impl_dma!($peri, $channel, TxDmaChannel, $request); + }; +}