diff --git a/embassy-stm32/gen.py b/embassy-stm32/gen.py index ddd4a3b8..2736cd69 100644 --- a/embassy-stm32/gen.py +++ b/embassy-stm32/gen.py @@ -60,15 +60,10 @@ with open(output_file, 'w') as f: if block_mod == 'dma': custom_singletons = True - num_dmas += 1 - dma_num = int(name[3:])-1 # substract 1 because we want DMA1=0, DMA2=1 - for ch_num in range(8): channel = f'{name}_CH{ch_num}' singletons.append(channel) - f.write(f'impl_dma_channel!({channel}, {dma_num}, {ch_num});') - if not custom_singletons: singletons.append(name) diff --git a/embassy-stm32/src/dma/mod.rs b/embassy-stm32/src/dma/mod.rs index aef31ce7..773cdc8b 100644 --- a/embassy-stm32/src/dma/mod.rs +++ b/embassy-stm32/src/dma/mod.rs @@ -8,6 +8,7 @@ mod _version; pub use _version::*; use crate::pac; +use crate::peripherals; pub(crate) mod sealed { use super::*; @@ -31,8 +32,8 @@ pub trait Channel: sealed::Channel + Sized {} macro_rules! impl_dma_channel { ($type:ident, $dma_num:expr, $ch_num:expr) => { - impl crate::dma::Channel for peripherals::$type {} - impl crate::dma::sealed::Channel for peripherals::$type { + impl Channel for peripherals::$type {} + impl sealed::Channel for peripherals::$type { #[inline] fn num(&self) -> u8 { $dma_num * 8 + $ch_num @@ -40,3 +41,27 @@ macro_rules! impl_dma_channel { } }; } + +crate::pac::peripherals!( + (dma,DMA1) => { + impl_dma_channel!(DMA1_CH0, 0, 0); + impl_dma_channel!(DMA1_CH1, 0, 1); + impl_dma_channel!(DMA1_CH2, 0, 2); + impl_dma_channel!(DMA1_CH3, 0, 3); + impl_dma_channel!(DMA1_CH4, 0, 4); + impl_dma_channel!(DMA1_CH5, 0, 5); + impl_dma_channel!(DMA1_CH6, 0, 6); + impl_dma_channel!(DMA1_CH7, 0, 7); + }; + + (dma,DMA2) => { + impl_dma_channel!(DMA2_CH0, 1, 0); + impl_dma_channel!(DMA2_CH1, 1, 1); + impl_dma_channel!(DMA2_CH2, 1, 2); + impl_dma_channel!(DMA2_CH3, 1, 3); + impl_dma_channel!(DMA2_CH4, 1, 4); + impl_dma_channel!(DMA2_CH5, 1, 5); + impl_dma_channel!(DMA2_CH6, 1, 6); + impl_dma_channel!(DMA2_CH7, 1, 7); + }; +);