72 lines
1.5 KiB
Rust
72 lines
1.5 KiB
Rust
#[cfg(dma)]
|
|
pub(crate) mod dma;
|
|
#[cfg(dma)]
|
|
pub use dma::*;
|
|
|
|
// stm32h7 has both dma and bdma. In that case, we export dma as "main" dma,
|
|
// and bdma as "secondary", under `embassy_stm32::dma::bdma`.
|
|
#[cfg(all(bdma, dma))]
|
|
pub mod bdma;
|
|
|
|
#[cfg(all(bdma, not(dma)))]
|
|
pub(crate) mod bdma;
|
|
#[cfg(all(bdma, not(dma)))]
|
|
pub use bdma::*;
|
|
|
|
#[cfg(gpdma)]
|
|
pub(crate) mod gpdma;
|
|
#[cfg(gpdma)]
|
|
pub use gpdma::*;
|
|
|
|
#[cfg(dmamux)]
|
|
mod dmamux;
|
|
|
|
pub(crate) mod ringbuffer;
|
|
pub mod word;
|
|
|
|
use core::mem;
|
|
|
|
use embassy_cortex_m::interrupt::Priority;
|
|
use embassy_hal_common::impl_peripheral;
|
|
|
|
#[cfg(dmamux)]
|
|
pub use self::dmamux::*;
|
|
|
|
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
|
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
|
enum Dir {
|
|
MemoryToPeripheral,
|
|
PeripheralToMemory,
|
|
}
|
|
|
|
pub struct NoDma;
|
|
|
|
impl_peripheral!(NoDma);
|
|
|
|
// TODO: replace transmutes with core::ptr::metadata once it's stable
|
|
#[allow(unused)]
|
|
pub(crate) fn slice_ptr_parts<T>(slice: *const [T]) -> (usize, usize) {
|
|
unsafe { mem::transmute(slice) }
|
|
}
|
|
|
|
#[allow(unused)]
|
|
pub(crate) fn slice_ptr_parts_mut<T>(slice: *mut [T]) -> (usize, usize) {
|
|
unsafe { mem::transmute(slice) }
|
|
}
|
|
|
|
// safety: must be called only once at startup
|
|
pub(crate) unsafe fn init(
|
|
#[cfg(bdma)] bdma_priority: Priority,
|
|
#[cfg(dma)] dma_priority: Priority,
|
|
#[cfg(gpdma)] gpdma_priority: Priority,
|
|
) {
|
|
#[cfg(bdma)]
|
|
bdma::init(bdma_priority);
|
|
#[cfg(dma)]
|
|
dma::init(dma_priority);
|
|
#[cfg(gpdma)]
|
|
gpdma::init(gpdma_priority);
|
|
#[cfg(dmamux)]
|
|
dmamux::init();
|
|
}
|