modm API documentation
modm::platform::DmaChannelHal< ChannelID, CHANNEL_BASE > Class Template Reference

#include <modm/platform/dma/dma_hal.hpp>

Inheritance diagram for modm::platform::DmaChannelHal< ChannelID, CHANNEL_BASE >:
modm::platform::DmaBase

Public Typedefs

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 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
 

Detailed Description

template<DmaBase::Channel ChannelID, uint32_t CHANNEL_BASE>
class modm::platform::DmaChannelHal< ChannelID, CHANNEL_BASE >

Hardware abstraction layer of a DMA channel

Template Parameters
ChannelIDthe ID of the channel
CHANNEL_BASEbase address of the channel registers
Author
Mike Wolfram

Member Enumeration Documentation

enum modm::platform::DmaBase::CircularMode : uint32_t
inheritedstrong
Enum ValuesDocumentation
Enabled 

circular mode

enum modm::platform::DmaBase::DataTransferDirection : uint32_t
inheritedstrong
Enum ValuesDocumentation
PeripheralToMemory 

Source: DMA_CPARx; Sink: DMA_CMARx.

MemoryToPeripheral 

Source: DMA_CMARx; Sink: DMA_CPARx.

MemoryToMemory 

Source: DMA_CPARx; Sink: DMA_CMARx.

enum modm::platform::DmaBase::MemoryDataSize : uint32_t
inheritedstrong

In direct mode (if the FIFO is not used) MSIZE is forced by hardware to the same value as PSIZE

enum modm::platform::DmaBase::MemoryIncrementMode : uint32_t
inheritedstrong
Enum ValuesDocumentation
Increment 

incremented according to MemoryDataSize

enum modm::platform::DmaBase::PeripheralIncrementMode : uint32_t
inheritedstrong
Enum ValuesDocumentation
Increment 

incremented according to PeripheralDataSize

enum modm::platform::DmaBase::Signal : uint8_t
inheritedstrong

Peripheral signals that can be used in DMA channels

Member Function Documentation

template<DmaBase::Channel ChannelID, uint32_t CHANNEL_BASE>
static void modm::platform::DmaChannelHal< ChannelID, CHANNEL_BASE >::configure ( DataTransferDirection  direction,
MemoryDataSize  memoryDataSize,
PeripheralDataSize  peripheralDataSize,
MemoryIncrementMode  memoryIncrement,
PeripheralIncrementMode  peripheralIncrement,
Priority  priority = Priority::Medium,
CircularMode  circularMode = CircularMode::Disabled 
)
inlinestatic

Configure the DMA channel (HAL)

Stops the DMA channel and writes the new values to its control register.

Parameters
[in]directionDirection of the DMA channel
[in]memoryDataSizeSize of data in memory (byte, halfword, word)
[in]peripheralDataSizeSize of data in peripheral (byte, halfword, word)
[in]memoryIncrementDefines whether the memory address is incremented after a transfer completed
[in]peripheralIncrementDefines whether the peripheral address is incremented after a transfer completed
[in]priorityPriority of the DMA channel
[in]circularModeTransfer data in circular mode?
template<DmaBase::Channel ChannelID, uint32_t CHANNEL_BASE>
static void modm::platform::DmaChannelHal< ChannelID, CHANNEL_BASE >::disableInterrupt ( InterruptEnable_t  irq)
inlinestatic

Disable IRQ of this DMA channel (e.g. transfer complete or error)

template<DmaBase::Channel ChannelID, uint32_t CHANNEL_BASE>
static void modm::platform::DmaChannelHal< ChannelID, CHANNEL_BASE >::enableInterrupt ( InterruptEnable_t  irq)
inlinestatic

Enable IRQ of this DMA channel (e.g. transfer complete or error)

template<DmaBase::Channel ChannelID, uint32_t CHANNEL_BASE>
static DataTransferDirection modm::platform::DmaChannelHal< ChannelID, CHANNEL_BASE >::getDataTransferDirection ( )
static

Get the direction of the data transfer

template<DmaBase::Channel ChannelID, uint32_t CHANNEL_BASE>
static void modm::platform::DmaChannelHal< ChannelID, CHANNEL_BASE >::setDataLength ( std::size_t  length)
inlinestatic

Set length of data to transfer

template<DmaBase::Channel ChannelID, uint32_t CHANNEL_BASE>
static void modm::platform::DmaChannelHal< ChannelID, CHANNEL_BASE >::setMemoryAddress ( uintptr_t  address)
inlinestatic

Set the memory address of the DMA channel

Note
In Mem2Mem mode use this method to set the memory source address.
Parameters
[in]addressSource address
template<DmaBase::Channel ChannelID, uint32_t CHANNEL_BASE>
static void modm::platform::DmaChannelHal< ChannelID, CHANNEL_BASE >::setMemoryIncrementMode ( bool  increment)
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.

Parameters
[in]incrementEnable/disable
template<DmaBase::Channel ChannelID, uint32_t CHANNEL_BASE>
static void modm::platform::DmaChannelHal< ChannelID, CHANNEL_BASE >::setPeripheralAddress ( uintptr_t  address)
inlinestatic

Set the peripheral address of the DMA channel

Note
In Mem2Mem mode use this method to set the memory destination address.
Parameters
[in]addressDestination address
template<DmaBase::Channel ChannelID, uint32_t CHANNEL_BASE>
static void modm::platform::DmaChannelHal< ChannelID, CHANNEL_BASE >::setPeripheralIncrementMode ( bool  increment)
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.

Parameters
[in]incrementEnable/disable
template<DmaBase::Channel ChannelID, uint32_t CHANNEL_BASE>
static void modm::platform::DmaChannelHal< ChannelID, CHANNEL_BASE >::start ( )
static

Start the transfer of the DMA channel

template<DmaBase::Channel ChannelID, uint32_t CHANNEL_BASE>
static void modm::platform::DmaChannelHal< ChannelID, CHANNEL_BASE >::stop ( )
static

Stop a DMA channel transfer

Member Data Documentation

constexpr uint32_t modm::platform::DmaBase::configmask
inheritedstaticprotectedconstexpr
Initial value:
DMA_CCR_CIRC |
DMA_CCR_PL_1 | DMA_CCR_PL_0
constexpr uint32_t modm::platform::DmaBase::memoryMask
inheritedstaticprotectedconstexpr
Initial value:
DMA_CCR_MSIZE_0 | DMA_CCR_MSIZE_1 |
DMA_CCR_MINC |
DMA_CCR_DIR | DMA_CCR_MEM2MEM
constexpr uint32_t modm::platform::DmaBase::peripheralMask
inheritedstaticprotectedconstexpr
Initial value:
DMA_CCR_PSIZE_0 | DMA_CCR_PSIZE_1 |
DMA_CCR_PINC |
DMA_CCR_DIR | DMA_CCR_MEM2MEM

The documentation for this class was generated from the following file: