pub struct SerialDma<Serial_: Instance, TX_TRANSFER, RX_TRANSFER> { /* private fields */ }
Expand description
Serial abstraction that can work in non-blocking mode by using DMA
The struct should be used for sending/receiving bytes to/from the serial interface in non-blocking mode. A client must follow these requirements to use that feature:
- Enable interrupts DMAx_STREAMy used for transmit and another DMAq_STREAMp used for receive.
- In these interrupts call
handle_dma_interrupt
; defined in trait SerialHandleIT. - Enable interrupts USARTx or UARTx for handling errors and call
handle_error_interrupt
in corresponding handler; defined in trait SerialHandleIT.
The struct can be also used to send/receive bytes in blocking mode with methods:
write
, read
, write_read
.
Implementations§
Trait Implementations§
Source§impl<Serial_: Instance, RX_STREAM, const RX_CH: u8> SerialHandleIT for SerialDma<Serial_, NoDMA, RxDMA<Serial_, RX_STREAM, RX_CH>>
impl<Serial_: Instance, RX_STREAM, const RX_CH: u8> SerialHandleIT for SerialDma<Serial_, NoDMA, RxDMA<Serial_, RX_STREAM, RX_CH>>
fn handle_dma_interrupt(&mut self)
fn handle_error_interrupt(&mut self)
Source§impl<Serial_: Instance, TX_STREAM, const TX_CH: u8> SerialHandleIT for SerialDma<Serial_, TxDMA<Serial_, TX_STREAM, TX_CH>, NoDMA>
impl<Serial_: Instance, TX_STREAM, const TX_CH: u8> SerialHandleIT for SerialDma<Serial_, TxDMA<Serial_, TX_STREAM, TX_CH>, NoDMA>
fn handle_dma_interrupt(&mut self)
fn handle_error_interrupt(&mut self)
Source§impl<Serial_: Instance, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> SerialHandleIT for SerialDma<Serial_, TxDMA<Serial_, TX_STREAM, TX_CH>, RxDMA<Serial_, RX_STREAM, RX_CH>>
Only for both TX and RX DMA
impl<Serial_: Instance, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> SerialHandleIT for SerialDma<Serial_, TxDMA<Serial_, TX_STREAM, TX_CH>, RxDMA<Serial_, RX_STREAM, RX_CH>>
Only for both TX and RX DMA
fn handle_dma_interrupt(&mut self)
fn handle_error_interrupt(&mut self)
Source§impl<Serial_: Instance, TX_TRANSFER, RX_STREAM, const RX_CH: u8> SerialReadDMA for SerialDma<Serial_, TX_TRANSFER, RxDMA<Serial_, RX_STREAM, RX_CH>>where
RX_STREAM: Stream,
ChannelX<RX_CH>: Channel,
Rx<Serial_>: DMASet<RX_STREAM, RX_CH, PeripheralToMemory>,
TX_TRANSFER: DMATransfer<&'static [u8]>,
impl<Serial_: Instance, TX_TRANSFER, RX_STREAM, const RX_CH: u8> SerialReadDMA for SerialDma<Serial_, TX_TRANSFER, RxDMA<Serial_, RX_STREAM, RX_CH>>where
RX_STREAM: Stream,
ChannelX<RX_CH>: Channel,
Rx<Serial_>: DMASet<RX_STREAM, RX_CH, PeripheralToMemory>,
TX_TRANSFER: DMATransfer<&'static [u8]>,
Source§impl<Serial_: Instance, TX_STREAM, const TX_CH: u8, RX_TRANSFER> SerialWriteDMA for SerialDma<Serial_, TxDMA<Serial_, TX_STREAM, TX_CH>, RX_TRANSFER>where
TX_STREAM: Stream,
ChannelX<TX_CH>: Channel,
Tx<Serial_>: DMASet<TX_STREAM, TX_CH, MemoryToPeripheral>,
RX_TRANSFER: DMATransfer<&'static mut [u8]>,
impl<Serial_: Instance, TX_STREAM, const TX_CH: u8, RX_TRANSFER> SerialWriteDMA for SerialDma<Serial_, TxDMA<Serial_, TX_STREAM, TX_CH>, RX_TRANSFER>where
TX_STREAM: Stream,
ChannelX<TX_CH>: Channel,
Tx<Serial_>: DMASet<TX_STREAM, TX_CH, MemoryToPeripheral>,
RX_TRANSFER: DMATransfer<&'static mut [u8]>,
Auto Trait Implementations§
impl<Serial_, TX_TRANSFER, RX_TRANSFER> Freeze for SerialDma<Serial_, TX_TRANSFER, RX_TRANSFER>
impl<Serial_, TX_TRANSFER, RX_TRANSFER> RefUnwindSafe for SerialDma<Serial_, TX_TRANSFER, RX_TRANSFER>where
TX_TRANSFER: RefUnwindSafe,
RX_TRANSFER: RefUnwindSafe,
Serial_: RefUnwindSafe,
<Serial_ as SerialAsync>::Tx<PushPull>: RefUnwindSafe,
<Serial_ as SerialAsync>::Rx<PushPull>: RefUnwindSafe,
impl<Serial_, TX_TRANSFER, RX_TRANSFER> Send for SerialDma<Serial_, TX_TRANSFER, RX_TRANSFER>
impl<Serial_, TX_TRANSFER, RX_TRANSFER> Sync for SerialDma<Serial_, TX_TRANSFER, RX_TRANSFER>
impl<Serial_, TX_TRANSFER, RX_TRANSFER> Unpin for SerialDma<Serial_, TX_TRANSFER, RX_TRANSFER>
impl<Serial_, TX_TRANSFER, RX_TRANSFER> UnwindSafe for SerialDma<Serial_, TX_TRANSFER, RX_TRANSFER>where
TX_TRANSFER: UnwindSafe,
RX_TRANSFER: UnwindSafe,
Serial_: UnwindSafe,
<Serial_ as SerialAsync>::Tx<PushPull>: UnwindSafe,
<Serial_ as SerialAsync>::Rx<PushPull>: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more