diff options
| -rw-r--r-- | embassy-stm32/src/spi/mod.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/embassy-stm32/src/spi/mod.rs b/embassy-stm32/src/spi/mod.rs index 7e1686443..9bb5a729c 100644 --- a/embassy-stm32/src/spi/mod.rs +++ b/embassy-stm32/src/spi/mod.rs | |||
| @@ -116,3 +116,39 @@ crate::pac::peripheral_pins!( | |||
| 116 | impl_pin!($inst, $pin, MisoPin, $af); | 116 | impl_pin!($inst, $pin, MisoPin, $af); |
| 117 | }; | 117 | }; |
| 118 | ); | 118 | ); |
| 119 | |||
| 120 | macro_rules! impl_dma { | ||
| 121 | ($inst:ident, {dmamux: $dmamux:ident}, $signal:ident, $request:expr) => { | ||
| 122 | impl<T> sealed::$signal<peripherals::$inst> for T | ||
| 123 | where | ||
| 124 | T: crate::dma::MuxChannel<Mux = crate::dma::$dmamux>, | ||
| 125 | { | ||
| 126 | fn request(&self) -> dma::Request { | ||
| 127 | $request | ||
| 128 | } | ||
| 129 | } | ||
| 130 | |||
| 131 | impl<T> $signal<peripherals::$inst> for T where | ||
| 132 | T: crate::dma::MuxChannel<Mux = crate::dma::$dmamux> | ||
| 133 | { | ||
| 134 | } | ||
| 135 | }; | ||
| 136 | ($inst:ident, {channel: $channel:ident}, $signal:ident, $request:expr) => { | ||
| 137 | impl sealed::$signal<peripherals::$inst> for peripherals::$channel { | ||
| 138 | fn request(&self) -> dma::Request { | ||
| 139 | $request | ||
| 140 | } | ||
| 141 | } | ||
| 142 | |||
| 143 | impl $signal<peripherals::$inst> for peripherals::$channel {} | ||
| 144 | }; | ||
| 145 | } | ||
| 146 | |||
| 147 | crate::pac::peripheral_dma_channels! { | ||
| 148 | ($peri:ident, spi, $kind:ident, RX, $channel:tt, $request:expr) => { | ||
| 149 | impl_dma!($peri, $channel, RxDmaChannel, $request); | ||
| 150 | }; | ||
| 151 | ($peri:ident, spi, $kind:ident, TX, $channel:tt, $request:expr) => { | ||
| 152 | impl_dma!($peri, $channel, TxDmaChannel, $request); | ||
| 153 | }; | ||
| 154 | } | ||
