modm API documentation
|
#include <modm/platform/dma/dma.hpp>
Public Typedefs | |
template<Peripheral peripheral, Signal signal = Signal::NoSignal> | |
using | RequestMapping = dma::RequestMapping< Channel, peripheral, signal > |
using | IrqHandler = void (*)(void) |
Public Types | |
enum | Channel { Channel1 = 0, Channel2, Channel3, Channel4, Channel5, Channel6, Channel7 } |
enum | CircularMode : uint32_t { Disabled = 0, CircularMode::Enabled = DMA_CCR_CIRC } |
enum | DataTransferDirection : uint32_t { DataTransferDirection::PeripheralToMemory = 0, DataTransferDirection::MemoryToPeripheral = DMA_CCR_DIR, DataTransferDirection::MemoryToMemory = DMA_CCR_MEM2MEM } |
enum | InterruptEnable : uint32_t { TransferComplete = DMA_CCR_TCIE, HalfTransfer = DMA_CCR_HTIE, TransferError = DMA_CCR_TEIE } |
enum | InterruptFlags : uint8_t { Global = 0b0001, TransferComplete = 0b0010, HalfTransferComplete = 0b0100, Error = 0b1000, All = 0b1111 } |
enum | MemoryDataSize : uint32_t { Byte = 0, Bit8 = Byte, HalfWord = DMA_CCR_MSIZE_0, Bit16 = HalfWord, Word = DMA_CCR_MSIZE_1, Bit32 = Word } |
enum | MemoryIncrementMode : uint32_t { Fixed = 0, MemoryIncrementMode::Increment = DMA_CCR_MINC } |
enum | PeripheralDataSize : uint32_t { Byte = 0, Bit8 = Byte, HalfWord = DMA_CCR_PSIZE_0, Bit16 = HalfWord, Word = DMA_CCR_PSIZE_1, Bit32 = Word } |
enum | PeripheralIncrementMode : uint32_t { Fixed = 0, PeripheralIncrementMode::Increment = DMA_CCR_PINC } |
enum | Priority : uint32_t { Low = 0, Medium = DMA_CCR_PL_0, High = DMA_CCR_PL_1, VeryHigh = DMA_CCR_PL_1 | DMA_CCR_PL_0 } |
enum | Request { None = 0, Request1, Request2, Request3, Request4, Request5, Request6, Request7, Request8, Request9, Request10, Request11, Request12, Request13, Request14, Request15, Request16, Request17, Request18, Request19, Request20, Request21, Request22, Request23, Request24, Request25, Request26, Request27, Request28, Request29, Request30, Request31, Request32, Request33, Request34, Request35, Request36, Request37, Request38, Request39, Request40, Request41, Request42, Request43, Request44, Request45, Request46, Request47, Request48, Request49, Request50, Request51, Request52, Request53, Request54, Request55, Request56, Request57, Request58, Request59, Request60, Request61 } |
enum | Signal : uint8_t { NoSignal, Ch1, Ch2, Ch3, Ch4, Generator0, Generator1, Generator2, Generator3, Rx, Trig, Trig_com, Tx, Up } |
Public Member Functions | |
MODM_FLAGS32 (InterruptEnable) | |
MODM_FLAGS32 (InterruptFlags) | |
Static Public Member Functions | |
static void | configure (DataTransferDirection direction, MemoryDataSize memoryDataSize, PeripheralDataSize peripheralDataSize, MemoryIncrementMode memoryIncrement, PeripheralIncrementMode peripheralIncrement, Priority priority=Priority::Medium, CircularMode circularMode=CircularMode::Disabled) |
static void | start () |
static void | stop () |
static DataTransferDirection | getDataTransferDirection () |
static void | setMemoryAddress (uintptr_t address) |
static void | setPeripheralAddress (uintptr_t address) |
static void | setMemoryIncrementMode (bool increment) |
static void | setPeripheralIncrementMode (bool increment) |
static void | setDataLength (std::size_t length) |
static void | setTransferErrorIrqHandler (IrqHandler irqHandler) |
static void | setHalfTransferCompleteIrqHandler (IrqHandler irqHandler) |
static void | setTransferCompleteIrqHandler (IrqHandler irqHandler) |
template<DmaBase::Request dmaRequest> | |
static void | setPeripheralRequest () |
static void | interruptHandler () |
static InterruptFlags_t | getInterruptFlags () |
static void | clearInterruptFlags (InterruptFlags_t flags=InterruptFlags::All) |
static void | enableInterruptVector (uint32_t priority=1) |
static void | disableInterruptVector () |
static void | enableInterrupt (InterruptEnable_t irq) |
static void | disableInterrupt (InterruptEnable_t irq) |
Static Protected Attributes | |
static constexpr uint32_t | configmask |
static constexpr uint32_t | memoryMask |
static constexpr uint32_t | peripheralMask |
Class representing a DMA channel/stream
using modm::platform::DmaController< ID >::Channel::RequestMapping = dma::RequestMapping<Channel, peripheral, signal> |
Helper to verify that the selected channel supports the selected hardware and provides the Request to be set in setPeripheralRequest().
|
inheritedstrong |
|
inheritedstrong |
|
inheritedstrong |
In direct mode (if the FIFO is not used) MSIZE is forced by hardware to the same value as PSIZE
|
inheritedstrong |
Enum Values | Documentation |
---|---|
Increment | incremented according to MemoryDataSize |
|
inheritedstrong |
|
inheritedstrong |
Peripheral signals that can be used in DMA channels
|
inlinestatic |
|
inlinestatic |
Configure the DMA channel
Stops the DMA channel and writes the new values to its control register.
[in] | direction | Direction of the DMA channel |
[in] | memoryDataSize | Size of data in memory (byte, halfword, word) |
[in] | peripheralDataSize | Size of data in peripheral (byte, halfword, word) |
[in] | memoryIncrement | Defines whether the memory address is incremented after a transfer completed |
[in] | peripheralIncrement | Defines whether the peripheral address is incremented after a transfer completed |
[in] | priority | Priority of the DMA channel |
[in] | circularMode | Transfer data in circular mode? |
|
inlinestatic |
Disable the specified interrupt of the channel
|
inlinestatic |
Disable the IRQ vector of the channel
|
inlinestatic |
Enable the specified interrupt of the channel
|
inlinestatic |
Enable the IRQ vector of the channel
[in] | priority | Priority of the IRQ |
|
inlinestatic |
Get the direction of the data transfer
|
inlinestatic |
Read channel status flags when channel interrupts are disabled. This function is useful to query the transfer state when the use of the channel interrupt is not required for the application.
|
inlinestatic |
IRQ handler of the DMA channel
Reads the IRQ status and checks for error or transfer complete. In case of error the DMA channel will be disabled.
|
inlinestatic |
Set the length of data to be transfered
|
inlinestatic |
Set the IRQ handler for half transfer complete
Called by the channels IRQ handler when the transfer is half complete.
|
inlinestatic |
Set the memory address of the DMA channel
[in] | address | Source address |
|
inlinestatic |
Enable/disable memory increment
When enabled, the memory address is incremented by the size of the data (e.g. 1 for byte transfers, 4 for word transfers) after the transfer completed.
[in] | increment | Enable/disable |
|
inlinestatic |
Set the peripheral address of the DMA channel
[in] | address | Destination address |
|
inlinestatic |
Enable/disable peripheral increment
When enabled, the peripheral address is incremented by the size of the data (e.g. 1 for byte transfers, 4 for word transfers) after the transfer completed.
[in] | increment | Enable/disable |
|
inlinestatic |
Set the peripheral that operates the channel
|
inlinestatic |
Set the IRQ handler for transfer complete
Called by the channels IRQ handler when the transfer is complete.
|
inlinestatic |
Set the IRQ handler for transfer errors
The handler will be called from the channels IRQ handler function when the IRQ status indicates an error occured.
|
inlinestatic |
Start the transfer of the DMA channel and clear all interrupt flags.
|
inlinestatic |
Stop a DMA channel transfer
|
inheritedstaticprotectedconstexpr |
|
inheritedstaticprotectedconstexpr |
|
inheritedstaticprotectedconstexpr |