Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
DMA support for free-running ADC capture.
The basic API looks like this:
To enable this functionality, the following methods were added:
AdcFifoBuilder::enable_dma
: setsFCS.DREQ_EN = 1
andFCS.THRESH = 1
AdcFifoBuilder::prepare
: same asstart
, but does not setCS.START_MANY
just yetAdcFifo::resume
/AdcFifo::pause
: control if capturing is active (CS.START_MANY
) without reconfiguring the FIFO in any other wayAdcFifo::is_paused
: can be used to check the current stateAdcFifo::clear
: reads the FIFO until empty, discarding valuesAdcFifo::dma_read_target
: returns a struct that implementsdma::ReadTarget
, and can be used to construct the transfer. (Ifdma::ReadTarget
were implemented onAdcFifo
directly, it wouldn't be possible toresume()
the FIFO after starting the DMA transfer, because the transfer would take ownership of theAdcFifo
)