stm32/dma: fix h7 impls
This commit is contained in:
committed by
Bob McWhirter
parent
2ee20f5dcb
commit
63a0e188ea
@ -138,7 +138,6 @@ unsafe fn on_irq() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// safety: must be called only once
|
||||
pub(crate) unsafe fn init() {
|
||||
pac::interrupts! {
|
||||
@ -212,6 +211,9 @@ pac::bdma_channels! {
|
||||
};
|
||||
}
|
||||
|
||||
// HACK: on stm32h7 "DMA" interrupts are for DMA, not BDMA, so this
|
||||
// would cause duplicate interrupt definitions. Do it manually insted
|
||||
#[cfg(not(rcc_h7))]
|
||||
pac::interrupts! {
|
||||
(DMA, $irq:ident) => {
|
||||
#[crate::interrupt]
|
||||
@ -220,3 +222,41 @@ pac::interrupts! {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
#[cfg(rcc_h7)]
|
||||
mod _if_h7 {
|
||||
use super::*;
|
||||
|
||||
#[crate::interrupt]
|
||||
unsafe fn BDMA_CHANNEL0() {
|
||||
on_irq()
|
||||
}
|
||||
#[crate::interrupt]
|
||||
unsafe fn BDMA_CHANNEL1() {
|
||||
on_irq()
|
||||
}
|
||||
#[crate::interrupt]
|
||||
unsafe fn BDMA_CHANNEL2() {
|
||||
on_irq()
|
||||
}
|
||||
#[crate::interrupt]
|
||||
unsafe fn BDMA_CHANNEL3() {
|
||||
on_irq()
|
||||
}
|
||||
#[crate::interrupt]
|
||||
unsafe fn BDMA_CHANNEL4() {
|
||||
on_irq()
|
||||
}
|
||||
#[crate::interrupt]
|
||||
unsafe fn BDMA_CHANNEL5() {
|
||||
on_irq()
|
||||
}
|
||||
#[crate::interrupt]
|
||||
unsafe fn BDMA_CHANNEL6() {
|
||||
on_irq()
|
||||
}
|
||||
#[crate::interrupt]
|
||||
unsafe fn BDMA_CHANNEL7() {
|
||||
on_irq()
|
||||
}
|
||||
}
|
||||
|
@ -31,28 +31,33 @@ macro_rules! dma_num {
|
||||
(DMA2) => {
|
||||
1
|
||||
};
|
||||
(BDMA) => {
|
||||
0
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! dmamux_peri {
|
||||
(DMA1) => {
|
||||
crate::pac::DMAMUX1
|
||||
};
|
||||
(DMA2) => {
|
||||
crate::pac::DMAMUX1
|
||||
};
|
||||
(BDMA) => {
|
||||
crate::pac::DMAMUX1
|
||||
};
|
||||
}
|
||||
|
||||
#[cfg(not(rcc_h7))]
|
||||
pac::bdma_channels! {
|
||||
($channel_peri:ident, $dma_peri:ident, $channel_num:expr) => {
|
||||
impl MuxChannel for peripherals::$channel_peri {
|
||||
const DMAMUX_CH_NUM: u8 = (dma_num!($dma_peri) * 8) + $channel_num;
|
||||
const DMAMUX_REGS: pac::dmamux::Dmamux = dmamux_peri!($dma_peri);
|
||||
const DMAMUX_REGS: pac::dmamux::Dmamux = pac::DMAMUX1;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
#[cfg(rcc_h7)]
|
||||
pac::dma_channels! {
|
||||
($channel_peri:ident, $dma_peri:ident, $channel_num:expr) => {
|
||||
impl MuxChannel for peripherals::$channel_peri {
|
||||
const DMAMUX_CH_NUM: u8 = (dma_num!($dma_peri) * 8) + $channel_num;
|
||||
const DMAMUX_REGS: pac::dmamux::Dmamux = pac::DMAMUX1;
|
||||
}
|
||||
};
|
||||
}
|
||||
#[cfg(rcc_h7)]
|
||||
pac::bdma_channels! {
|
||||
($channel_peri:ident, $dma_peri:ident, $channel_num:expr) => {
|
||||
impl MuxChannel for peripherals::$channel_peri {
|
||||
const DMAMUX_CH_NUM: u8 = $channel_num;
|
||||
const DMAMUX_REGS: pac::dmamux::Dmamux = pac::DMAMUX2;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
Reference in New Issue
Block a user