stm32f1_hal/common/dma/
mod.rs1mod 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}