Expand description
§Abstractions over individual DMA channels
§Initializing
Individual channels should be initialized through the
Channel::init method. This will return a Channel<Id, Ready> ready for
use by a Transfer. Initializing a channel requires setting a priority
level, as well as enabling or disabling interrupt requests (only for the
specific channel being initialized).
§Burst Length and FIFO Threshold (SAMD51/SAME5x only)
The transfer burst length can be configured through the
Channel::burst_length method. A burst is an atomic,
uninterruptible transfer which length corresponds to a number of beats. See
SAMD5x/E5x datasheet section 22.6.1.1 for more information. The FIFO
threshold can be configured through the
Channel::fifo_threshold method. This enables the channel
to wait for multiple Beats before sending a Burst. See SAMD5x/E5x datasheet
section 22.6.2.8 for more information.
§Channel status
Channels can be in any of three statuses: Uninitialized, Ready, and
Busy. These statuses are checked at compile time to ensure they are
properly initialized before launching DMA transfers.
§Resetting
Calling the Channel::reset method will reset the channel to its
Uninitialized state. You will be required to call Channel::init
again before being able to use it with a Transfer.
Structs§
- Channel
- DMA channel, capable of executing
Transfers. Ongoing DMA transfers are automatically stopped when aChannelis dropped. - Interrupt
Flags - Interrupt sources available to a DMA channel
Enums§
- Busy
- Busy channel
- Ready
- Initialized and ready to transfer channel
- Ready
Future - Initialized and ready to transfer in
asyncoperation - Uninitialized
- Uninitialized channel
- Uninitialized
Future - Uninitialized
Channelconfigured forasyncoperation