From 1a03f00b56061dbef8a3aae6e499e5e635b3fd4d Mon Sep 17 00:00:00 2001 From: Bob McWhirter Date: Tue, 20 Jul 2021 15:44:13 -0400 Subject: [PATCH] Wire up peripheral DMA channels for SPI. --- embassy-stm32/src/spi/mod.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) 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); + }; +}