stm32f1_hal/common/dma/
mod.rs

1mod circular_buffer_rx;
2pub use circular_buffer_rx::*;
3mod ringbuf_tx;
4pub use ringbuf_tx::*;
5
6pub trait DmaChannel {
7    fn start(&mut self);
8    fn stop(&mut self);
9
10    fn set_peripheral_address<T: Sized + Copy>(
11        &mut self,
12        address: usize,
13        mem_to_periph: bool,
14        increase: bool,
15        circular: bool,
16    );
17    fn set_memory_address(&mut self, address: usize, increase: bool);
18    fn set_transfer_length(&mut self, len: usize);
19    fn set_memory_buf_for_peripheral<T: Sized + Copy>(&mut self, buf: &[T]) {
20        self.set_memory_address(buf.as_ptr() as usize, true);
21        self.set_transfer_length(buf.len());
22    }
23
24    fn set_memory_to_memory<T: Sized + Copy>(
25        &mut self,
26        src_addr: usize,
27        dst_addr: usize,
28        len: usize,
29    );
30
31    fn get_left_len(&self) -> usize;
32    fn in_progress(&self) -> bool;
33
34    fn set_interrupt(&mut self, event: DmaEvent, enable: bool);
35    fn is_interrupted(&mut self, event: DmaEvent) -> bool;
36}
37
38#[derive(Clone, Copy, Debug, PartialEq, Eq)]
39pub enum DmaEvent {
40    TransferComplete,
41    HalfTransfer,
42}