Struct stm32f4xx_hal::i2c::dma::I2CMasterDma
source · [−]pub struct I2CMasterDma<I2C, PINS, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8>where
I2C: Instance,
TX_STREAM: Stream,
RX_STREAM: Stream,{ /* private fields */ }
Expand description
I2c abstraction that can work in non-blocking mode by using DMA
The struct should be used for sending/receiving bytes to/from slave device 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
- Enable interrupts I2Cx_ER for handling errors and call
handle_error_interrupt
in corresponding handler
The struct can be also used to send/receive bytes in blocking mode with methods:
write
, read
, write_read
.
Implementations
sourceimpl<I2C, PINS, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> I2CMasterDma<I2C, PINS, TX_STREAM, TX_CH, RX_STREAM, RX_CH>where
I2C: Instance,
TX_STREAM: Stream,
ChannelX<TX_CH>: Channel,
Tx<I2C>: DMASet<TX_STREAM, TX_CH, MemoryToPeripheral>,
RX_STREAM: Stream,
ChannelX<RX_CH>: Channel,
Rx<I2C>: DMASet<RX_STREAM, RX_CH, PeripheralToMemory>,
impl<I2C, PINS, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> I2CMasterDma<I2C, PINS, TX_STREAM, TX_CH, RX_STREAM, RX_CH>where
I2C: Instance,
TX_STREAM: Stream,
ChannelX<TX_CH>: Channel,
Tx<I2C>: DMASet<TX_STREAM, TX_CH, MemoryToPeripheral>,
RX_STREAM: Stream,
ChannelX<RX_CH>: Channel,
Rx<I2C>: DMASet<RX_STREAM, RX_CH, PeripheralToMemory>,
sourcepub fn handle_dma_interrupt(&mut self)
pub fn handle_dma_interrupt(&mut self)
Handles DMA interrupt. This method a client must call in DMAx_STREAMy interrupt
sourcepub fn handle_error_interrupt(&mut self)
pub fn handle_error_interrupt(&mut self)
Handles errors generated by I2C This method a client must call in I2Cx_ER interrupt
sourcepub fn read(&mut self, addr: u8, buffer: &mut [u8]) -> Result<(), Error>
pub fn read(&mut self, addr: u8, buffer: &mut [u8]) -> Result<(), Error>
Reads in blocking mode but if i2c is busy returns WouldBlock
and do nothing
Trait Implementations
sourceimpl<I2C, PINS, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> I2CMasterReadDMA for I2CMasterDma<I2C, PINS, TX_STREAM, TX_CH, RX_STREAM, RX_CH>where
I2C: Instance,
TX_STREAM: Stream,
ChannelX<TX_CH>: Channel,
Tx<I2C>: DMASet<TX_STREAM, TX_CH, MemoryToPeripheral>,
RX_STREAM: Stream,
ChannelX<RX_CH>: Channel,
Rx<I2C>: DMASet<RX_STREAM, RX_CH, PeripheralToMemory>,
impl<I2C, PINS, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> I2CMasterReadDMA for I2CMasterDma<I2C, PINS, TX_STREAM, TX_CH, RX_STREAM, RX_CH>where
I2C: Instance,
TX_STREAM: Stream,
ChannelX<TX_CH>: Channel,
Tx<I2C>: DMASet<TX_STREAM, TX_CH, MemoryToPeripheral>,
RX_STREAM: Stream,
ChannelX<RX_CH>: Channel,
Rx<I2C>: DMASet<RX_STREAM, RX_CH, PeripheralToMemory>,
sourceimpl<I2C, PINS, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> I2CMasterWriteDMA for I2CMasterDma<I2C, PINS, TX_STREAM, TX_CH, RX_STREAM, RX_CH>where
I2C: Instance,
TX_STREAM: Stream,
ChannelX<TX_CH>: Channel,
Tx<I2C>: DMASet<TX_STREAM, TX_CH, MemoryToPeripheral>,
RX_STREAM: Stream,
ChannelX<RX_CH>: Channel,
Rx<I2C>: DMASet<RX_STREAM, RX_CH, PeripheralToMemory>,
impl<I2C, PINS, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> I2CMasterWriteDMA for I2CMasterDma<I2C, PINS, TX_STREAM, TX_CH, RX_STREAM, RX_CH>where
I2C: Instance,
TX_STREAM: Stream,
ChannelX<TX_CH>: Channel,
Tx<I2C>: DMASet<TX_STREAM, TX_CH, MemoryToPeripheral>,
RX_STREAM: Stream,
ChannelX<RX_CH>: Channel,
Rx<I2C>: DMASet<RX_STREAM, RX_CH, PeripheralToMemory>,
sourceimpl<I2C, PINS, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> I2CMasterWriteReadDMA for I2CMasterDma<I2C, PINS, TX_STREAM, TX_CH, RX_STREAM, RX_CH>where
I2C: Instance,
TX_STREAM: Stream,
ChannelX<TX_CH>: Channel,
Tx<I2C>: DMASet<TX_STREAM, TX_CH, MemoryToPeripheral>,
RX_STREAM: Stream,
ChannelX<RX_CH>: Channel,
Rx<I2C>: DMASet<RX_STREAM, RX_CH, PeripheralToMemory>,
impl<I2C, PINS, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> I2CMasterWriteReadDMA for I2CMasterDma<I2C, PINS, TX_STREAM, TX_CH, RX_STREAM, RX_CH>where
I2C: Instance,
TX_STREAM: Stream,
ChannelX<TX_CH>: Channel,
Tx<I2C>: DMASet<TX_STREAM, TX_CH, MemoryToPeripheral>,
RX_STREAM: Stream,
ChannelX<RX_CH>: Channel,
Rx<I2C>: DMASet<RX_STREAM, RX_CH, PeripheralToMemory>,
Auto Trait Implementations
impl<I2C, PINS, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> RefUnwindSafe for I2CMasterDma<I2C, PINS, TX_STREAM, TX_CH, RX_STREAM, RX_CH>where
I2C: RefUnwindSafe,
PINS: RefUnwindSafe,
RX_STREAM: RefUnwindSafe,
TX_STREAM: RefUnwindSafe,
impl<I2C, PINS, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> Send for I2CMasterDma<I2C, PINS, TX_STREAM, TX_CH, RX_STREAM, RX_CH>where
I2C: Send,
PINS: Send,
RX_STREAM: Send,
TX_STREAM: Send,
impl<I2C, PINS, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> Sync for I2CMasterDma<I2C, PINS, TX_STREAM, TX_CH, RX_STREAM, RX_CH>where
I2C: Sync,
PINS: Sync,
RX_STREAM: Sync,
TX_STREAM: Sync,
impl<I2C, PINS, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> Unpin for I2CMasterDma<I2C, PINS, TX_STREAM, TX_CH, RX_STREAM, RX_CH>where
I2C: Unpin,
PINS: Unpin,
RX_STREAM: Unpin,
TX_STREAM: Unpin,
impl<I2C, PINS, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> !UnwindSafe for I2CMasterDma<I2C, PINS, TX_STREAM, TX_CH, RX_STREAM, RX_CH>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more