aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob McWhirter <[email protected]>2021-07-20 15:44:13 -0400
committerBob McWhirter <[email protected]>2021-07-23 13:22:39 -0400
commit1a03f00b56061dbef8a3aae6e499e5e635b3fd4d (patch)
tree0f3e19c6785bfc06c5595b58bbfbad9432194f0b
parent3df2aadc391fb32fd5f7cb09fe0b7208c15c9642 (diff)
Wire up peripheral DMA channels for SPI.
-rw-r--r--embassy-stm32/src/spi/mod.rs36
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
120macro_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
147crate::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}