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§
- Interrupt sources available to a DMA channel
Enums§
- Busy channel
- Initialized and ready to transfer channel
- Initialized and ready to transfer in
async
operation - Uninitialized channel
- Uninitialized
Channel
configured forasync
operation