pub struct I2CMasterDma<I2C, TX_TRANSFER, RX_TRANSFER>where
I2C: Instance,{ /* 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; defined in trait I2CMasterHandleIT - Enable interrupts I2Cx_ER for handling errors and call
handle_error_interruptin corresponding handler; defined in trait I2CMasterHandleIT
The struct can be also used to send/receive bytes in blocking mode with methods:
write, read, write_read.
Implementations§
Source§impl<I2C, TX_TRANSFER, RX_TRANSFER> I2CMasterDma<I2C, TX_TRANSFER, RX_TRANSFER>where
I2C: Instance,
TX_TRANSFER: DMATransfer<&'static [u8]>,
RX_TRANSFER: DMATransfer<&'static mut [u8]>,
Common implementation
impl<I2C, TX_TRANSFER, RX_TRANSFER> I2CMasterDma<I2C, TX_TRANSFER, RX_TRANSFER>where
I2C: Instance,
TX_TRANSFER: DMATransfer<&'static [u8]>,
RX_TRANSFER: DMATransfer<&'static mut [u8]>,
Common implementation
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§
Source§impl<I2C, TX_TRANSFER, RX_TRANSFER> ErrorType for I2CMasterDma<I2C, TX_TRANSFER, RX_TRANSFER>where
I2C: Instance,
TX_TRANSFER: DMATransfer<&'static [u8]>,
RX_TRANSFER: DMATransfer<&'static mut [u8]>,
impl<I2C, TX_TRANSFER, RX_TRANSFER> ErrorType for I2CMasterDma<I2C, TX_TRANSFER, RX_TRANSFER>where
I2C: Instance,
TX_TRANSFER: DMATransfer<&'static [u8]>,
RX_TRANSFER: DMATransfer<&'static mut [u8]>,
Source§impl<I2C, RX_STREAM, const RX_CH: u8> I2CMasterHandleIT for I2CMasterDma<I2C, NoDMA, RxDMA<I2C, RX_STREAM, RX_CH>>
impl<I2C, RX_STREAM, const RX_CH: u8> I2CMasterHandleIT for I2CMasterDma<I2C, NoDMA, RxDMA<I2C, RX_STREAM, RX_CH>>
fn handle_dma_interrupt(&mut self)
fn handle_error_interrupt(&mut self)
Source§impl<I2C, TX_STREAM, const TX_CH: u8> I2CMasterHandleIT for I2CMasterDma<I2C, TxDMA<I2C, TX_STREAM, TX_CH>, NoDMA>
impl<I2C, TX_STREAM, const TX_CH: u8> I2CMasterHandleIT for I2CMasterDma<I2C, TxDMA<I2C, TX_STREAM, TX_CH>, NoDMA>
fn handle_dma_interrupt(&mut self)
fn handle_error_interrupt(&mut self)
Source§impl<I2C, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> I2CMasterHandleIT for I2CMasterDma<I2C, TxDMA<I2C, TX_STREAM, TX_CH>, RxDMA<I2C, RX_STREAM, RX_CH>>
Only for both TX and RX DMA I2c
impl<I2C, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> I2CMasterHandleIT for I2CMasterDma<I2C, TxDMA<I2C, TX_STREAM, TX_CH>, RxDMA<I2C, RX_STREAM, RX_CH>>
Only for both TX and RX DMA I2c
fn handle_dma_interrupt(&mut self)
fn handle_error_interrupt(&mut self)
Source§impl<I2C, TX_TRANSFER, RX_STREAM, const RX_CH: u8> I2CMasterReadDMA for I2CMasterDma<I2C, TX_TRANSFER, RxDMA<I2C, RX_STREAM, RX_CH>>where
I2C: Instance,
RX_STREAM: Stream,
ChannelX<RX_CH>: Channel,
Rx<I2C>: DMASet<RX_STREAM, RX_CH, PeripheralToMemory>,
TX_TRANSFER: DMATransfer<&'static [u8]>,
impl<I2C, TX_TRANSFER, RX_STREAM, const RX_CH: u8> I2CMasterReadDMA for I2CMasterDma<I2C, TX_TRANSFER, RxDMA<I2C, RX_STREAM, RX_CH>>where
I2C: Instance,
RX_STREAM: Stream,
ChannelX<RX_CH>: Channel,
Rx<I2C>: DMASet<RX_STREAM, RX_CH, PeripheralToMemory>,
TX_TRANSFER: DMATransfer<&'static [u8]>,
Source§impl<I2C, TX_STREAM, const TX_CH: u8, RX_TRANSFER> I2CMasterWriteDMA for I2CMasterDma<I2C, TxDMA<I2C, TX_STREAM, TX_CH>, RX_TRANSFER>where
I2C: Instance,
TX_STREAM: Stream,
ChannelX<TX_CH>: Channel,
Tx<I2C>: DMASet<TX_STREAM, TX_CH, MemoryToPeripheral>,
RX_TRANSFER: DMATransfer<&'static mut [u8]>,
impl<I2C, TX_STREAM, const TX_CH: u8, RX_TRANSFER> I2CMasterWriteDMA for I2CMasterDma<I2C, TxDMA<I2C, TX_STREAM, TX_CH>, RX_TRANSFER>where
I2C: Instance,
TX_STREAM: Stream,
ChannelX<TX_CH>: Channel,
Tx<I2C>: DMASet<TX_STREAM, TX_CH, MemoryToPeripheral>,
RX_TRANSFER: DMATransfer<&'static mut [u8]>,
Source§impl<I2C, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> I2CMasterWriteReadDMA for I2CMasterDma<I2C, TxDMA<I2C, TX_STREAM, TX_CH>, RxDMA<I2C, RX_STREAM, RX_CH>>
impl<I2C, TX_STREAM, const TX_CH: u8, RX_STREAM, const RX_CH: u8> I2CMasterWriteReadDMA for I2CMasterDma<I2C, TxDMA<I2C, TX_STREAM, TX_CH>, RxDMA<I2C, RX_STREAM, RX_CH>>
Source§impl<I2C, TX_TRANSFER, RX_TRANSFER> I2c for I2CMasterDma<I2C, TX_TRANSFER, RX_TRANSFER>where
I2C: Instance,
TX_TRANSFER: DMATransfer<&'static [u8]>,
RX_TRANSFER: DMATransfer<&'static mut [u8]>,
impl<I2C, TX_TRANSFER, RX_TRANSFER> I2c for I2CMasterDma<I2C, TX_TRANSFER, RX_TRANSFER>where
I2C: Instance,
TX_TRANSFER: DMATransfer<&'static [u8]>,
RX_TRANSFER: DMATransfer<&'static mut [u8]>,
Source§fn transaction(
&mut self,
addr: u8,
operations: &mut [Operation<'_>],
) -> Result<(), Self::Error>
fn transaction( &mut self, addr: u8, operations: &mut [Operation<'_>], ) -> Result<(), Self::Error>
Execute the provided operations on the I2C bus. Read more
Auto Trait Implementations§
impl<I2C, TX_TRANSFER, RX_TRANSFER> Freeze for I2CMasterDma<I2C, TX_TRANSFER, RX_TRANSFER>
impl<I2C, TX_TRANSFER, RX_TRANSFER> RefUnwindSafe for I2CMasterDma<I2C, TX_TRANSFER, RX_TRANSFER>where
TX_TRANSFER: RefUnwindSafe,
RX_TRANSFER: RefUnwindSafe,
I2C: RefUnwindSafe,
<I2C as I2cCommon>::Scl: RefUnwindSafe,
<I2C as I2cCommon>::Sda: RefUnwindSafe,
impl<I2C, TX_TRANSFER, RX_TRANSFER> Send for I2CMasterDma<I2C, TX_TRANSFER, RX_TRANSFER>
impl<I2C, TX_TRANSFER, RX_TRANSFER> Sync for I2CMasterDma<I2C, TX_TRANSFER, RX_TRANSFER>
impl<I2C, TX_TRANSFER, RX_TRANSFER> Unpin for I2CMasterDma<I2C, TX_TRANSFER, RX_TRANSFER>
impl<I2C, TX_TRANSFER, RX_TRANSFER> UnwindSafe for I2CMasterDma<I2C, TX_TRANSFER, RX_TRANSFER>where
TX_TRANSFER: UnwindSafe,
RX_TRANSFER: UnwindSafe,
I2C: UnwindSafe,
<I2C as I2cCommon>::Scl: UnwindSafe,
<I2C as I2cCommon>::Sda: 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