blob: d47755a987ff8c87e5a787c6d93968dcf554dec6 [file] [log] [blame]
.. _module-pw_dma_mcuxpresso:
=================
pw_dma_mcuxpresso
=================
.. pigweed-module::
:name: pw_dma_mcuxpresso
``pw_dma_mcuxpresso`` provides helper classes for working with an MCUXpresso DMA
controller. The API is specific to MCUXpresso and doesn't implement any generic
DMA API at this time.
-------------
API reference
-------------
The following classes make up the public API:
``McuxpressoDmaController``
===========================
Represents a DMA Controller. Supports ``constinit`` initialization.
``McuxpressoDmaChannel``
========================
Represents a single channel of a DMA controller.
NOTE: Because the SDK maintains a permanent reference to this class's
members, these objects must have static lifetime at the time Init() is
called and ever after. The destructor will intentionally crash.
------
Guides
------
Example code to use a DMA channel:
.. code-block:: cpp
#include "pw_dma_mcuxpresso/dma.h"
#include "pw_status/try.h"
constinit pw::dma::McuxpressoDmaController dma(DMA0_BASE);
// McuxpressoDmaChannel must have static lifetime
pw::dma::McuxpressoDmaChannel tx_dma = dma.GetChannel(kTxDmaChannel);
pw::Status Init() {
// Initialize the DMA controller
PW_TRY(dma.Init());
tx_dma.Init();
tx_dma.SetPriority(kTxDmaChannelPriority);
tx_dma.Enable();
tx_dma.EnableInterrupts();
// Pass handle to driver that needs a dma_handle_t*.
dma_handle_t* handle = tx_dma.handle();
}