MCUXpresso SDK API Reference Manual  Rev 2.16.000
NXP Semiconductors
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
eDMA: Enhanced Direct Memory Access (eDMA) Controller Driver

Overview

The MCUXpresso SDK provides a peripheral driver for the enhanced Direct Memory Access (eDMA) of MCUXpresso SDK devices.

Typical use case

eDMA Operation

Refer to the driver examples codes located at <SDK_ROOT>/boards/<BOARD>/driver_examples/edma

Modules

 eDMA core Driver
 
 eDMA soc Driver
 

Data Structures

struct  edma_config_t
 eDMA global configuration structure. More...
 
struct  edma_transfer_config_t
 eDMA transfer configuration More...
 
struct  edma_channel_Preemption_config_t
 eDMA channel priority configuration More...
 
struct  edma_minor_offset_config_t
 eDMA minor offset configuration More...
 
struct  edma_tcd_t
 eDMA TCD. More...
 
struct  edma_handle_t
 eDMA transfer handle structure More...
 
struct  edma_channel_config_t
 eDMA4 channel configuration More...
 

Macros

#define DMA_DCHPRI_INDEX(channel)   (((channel) & ~0x03U) | (3U - ((channel)&0x03U)))
 Compute the offset unit from DCHPRI3.
 
#define FSL_EDMA_DRIVER_EDMA4   (1)
 eDMA driver name
 
#define EDMA_ALLOCATE_TCD(name, number)   AT_NONCACHEABLE_SECTION_ALIGN(edma_tcd_t name[number], EDMA_TCD_ALIGN_SIZE)
 Macro used for allocate edma TCD.
 
#define DMA_DCHPRI_INDEX(channel)   (((channel) & ~0x03U) | (3U - ((channel)&0x03U)))
 Compute the offset unit from DCHPRI3.
 

Typedefs

typedef void(* edma_callback )(struct _edma_handle *handle, void *userData, bool transferDone, uint32_t tcds)
 Define callback function for eDMA. More...
 
typedef edma_core_tcd_t edma_tcd_t
 eDMA TCD. More...
 
typedef void(* edma_callback )(struct _edma_handle *handle, void *userData, bool transferDone, uint32_t tcds)
 Define callback function for eDMA. More...
 

Enumerations

enum  edma_transfer_size_t {
  kEDMA_TransferSize1Bytes = 0x0U,
  kEDMA_TransferSize2Bytes = 0x1U,
  kEDMA_TransferSize4Bytes = 0x2U,
  kEDMA_TransferSize8Bytes = 0x3U,
  kEDMA_TransferSize16Bytes = 0x4U,
  kEDMA_TransferSize32Bytes = 0x5U,
  kEDMA_TransferSize1Bytes = 0x0U,
  kEDMA_TransferSize2Bytes = 0x1U,
  kEDMA_TransferSize4Bytes = 0x2U,
  kEDMA_TransferSize8Bytes = 0x3U,
  kEDMA_TransferSize16Bytes = 0x4U,
  kEDMA_TransferSize32Bytes = 0x5U,
  kEDMA_TransferSize64Bytes = 0x6U,
  kEDMA_TransferSize128Bytes = 0x7U
}
 eDMA transfer configuration More...
 
enum  edma_modulo_t {
  kEDMA_ModuloDisable = 0x0U,
  kEDMA_Modulo2bytes,
  kEDMA_Modulo4bytes,
  kEDMA_Modulo8bytes,
  kEDMA_Modulo16bytes,
  kEDMA_Modulo32bytes,
  kEDMA_Modulo64bytes,
  kEDMA_Modulo128bytes,
  kEDMA_Modulo256bytes,
  kEDMA_Modulo512bytes,
  kEDMA_Modulo1Kbytes,
  kEDMA_Modulo2Kbytes,
  kEDMA_Modulo4Kbytes,
  kEDMA_Modulo8Kbytes,
  kEDMA_Modulo16Kbytes,
  kEDMA_Modulo32Kbytes,
  kEDMA_Modulo64Kbytes,
  kEDMA_Modulo128Kbytes,
  kEDMA_Modulo256Kbytes,
  kEDMA_Modulo512Kbytes,
  kEDMA_Modulo1Mbytes,
  kEDMA_Modulo2Mbytes,
  kEDMA_Modulo4Mbytes,
  kEDMA_Modulo8Mbytes,
  kEDMA_Modulo16Mbytes,
  kEDMA_Modulo32Mbytes,
  kEDMA_Modulo64Mbytes,
  kEDMA_Modulo128Mbytes,
  kEDMA_Modulo256Mbytes,
  kEDMA_Modulo512Mbytes,
  kEDMA_Modulo1Gbytes,
  kEDMA_Modulo2Gbytes,
  kEDMA_ModuloDisable = 0x0U,
  kEDMA_Modulo2bytes,
  kEDMA_Modulo4bytes,
  kEDMA_Modulo8bytes,
  kEDMA_Modulo16bytes,
  kEDMA_Modulo32bytes,
  kEDMA_Modulo64bytes,
  kEDMA_Modulo128bytes,
  kEDMA_Modulo256bytes,
  kEDMA_Modulo512bytes,
  kEDMA_Modulo1Kbytes,
  kEDMA_Modulo2Kbytes,
  kEDMA_Modulo4Kbytes,
  kEDMA_Modulo8Kbytes,
  kEDMA_Modulo16Kbytes,
  kEDMA_Modulo32Kbytes,
  kEDMA_Modulo64Kbytes,
  kEDMA_Modulo128Kbytes,
  kEDMA_Modulo256Kbytes,
  kEDMA_Modulo512Kbytes,
  kEDMA_Modulo1Mbytes,
  kEDMA_Modulo2Mbytes,
  kEDMA_Modulo4Mbytes,
  kEDMA_Modulo8Mbytes,
  kEDMA_Modulo16Mbytes,
  kEDMA_Modulo32Mbytes,
  kEDMA_Modulo64Mbytes,
  kEDMA_Modulo128Mbytes,
  kEDMA_Modulo256Mbytes,
  kEDMA_Modulo512Mbytes,
  kEDMA_Modulo1Gbytes,
  kEDMA_Modulo2Gbytes
}
 eDMA modulo configuration More...
 
enum  edma_bandwidth_t {
  kEDMA_BandwidthStallNone = 0x0U,
  kEDMA_BandwidthStall4Cycle = 0x2U,
  kEDMA_BandwidthStall8Cycle = 0x3U,
  kEDMA_BandwidthStallNone = 0x0U,
  kEDMA_BandwidthStall4Cycle = 0x2U,
  kEDMA_BandwidthStall8Cycle = 0x3U
}
 Bandwidth control. More...
 
enum  edma_channel_link_type_t {
  kEDMA_LinkNone = 0x0U,
  kEDMA_MinorLink,
  kEDMA_MajorLink,
  kEDMA_LinkNone = 0x0U,
  kEDMA_MinorLink,
  kEDMA_MajorLink
}
 Channel link type. More...
 
enum  {
  kEDMA_DoneFlag = 0x1U,
  kEDMA_ErrorFlag = 0x2U,
  kEDMA_InterruptFlag = 0x4U
}
 _edma_channel_status_flags eDMA channel status flags. More...
 
enum  {
  kEDMA_DestinationBusErrorFlag = DMA_ES_DBE_MASK,
  kEDMA_SourceBusErrorFlag = DMA_ES_SBE_MASK,
  kEDMA_ScatterGatherErrorFlag = DMA_ES_SGE_MASK,
  kEDMA_NbytesErrorFlag = DMA_ES_NCE_MASK,
  kEDMA_DestinationOffsetErrorFlag = DMA_ES_DOE_MASK,
  kEDMA_DestinationAddressErrorFlag = DMA_ES_DAE_MASK,
  kEDMA_SourceOffsetErrorFlag = DMA_ES_SOE_MASK,
  kEDMA_SourceAddressErrorFlag = DMA_ES_SAE_MASK,
  kEDMA_ErrorChannelFlag = DMA_ES_ERRCHN_MASK,
  kEDMA_ChannelPriorityErrorFlag = DMA_ES_CPE_MASK,
  kEDMA_TransferCanceledFlag = DMA_ES_ECX_MASK,
  kEDMA_ValidFlag = (int)DMA_ES_VLD_MASK
}
 _edma_error_status_flags eDMA channel error status flags. More...
 
enum  edma_interrupt_enable_t {
  kEDMA_ErrorInterruptEnable = 0x1U,
  kEDMA_MajorInterruptEnable = DMA_CSR_INTMAJOR_MASK,
  kEDMA_HalfInterruptEnable = DMA_CSR_INTHALF_MASK
}
 eDMA interrupt source More...
 
enum  edma_transfer_type_t {
  kEDMA_MemoryToMemory = 0x0U,
  kEDMA_PeripheralToMemory,
  kEDMA_MemoryToPeripheral,
  kEDMA_PeripheralToPeripheral,
  kEDMA_MemoryToMemory = 0x0U,
  kEDMA_PeripheralToMemory,
  kEDMA_MemoryToPeripheral,
  kEDMA_PeripheralToPeripheral
}
 eDMA transfer type More...
 
enum  {
  kStatus_EDMA_QueueFull = MAKE_STATUS(kStatusGroup_EDMA, 0),
  kStatus_EDMA_Busy = MAKE_STATUS(kStatusGroup_EDMA, 1)
}
 _edma_transfer_status eDMA transfer status More...
 
enum  {
  kStatus_EDMA_QueueFull = MAKE_STATUS(kStatusGroup_EDMA, 0),
  kStatus_EDMA_Busy = MAKE_STATUS(kStatusGroup_EDMA, 1)
}
 _edma_transfer_status eDMA transfer status More...
 
enum  edma_transfer_size_t {
  kEDMA_TransferSize1Bytes = 0x0U,
  kEDMA_TransferSize2Bytes = 0x1U,
  kEDMA_TransferSize4Bytes = 0x2U,
  kEDMA_TransferSize8Bytes = 0x3U,
  kEDMA_TransferSize16Bytes = 0x4U,
  kEDMA_TransferSize32Bytes = 0x5U,
  kEDMA_TransferSize1Bytes = 0x0U,
  kEDMA_TransferSize2Bytes = 0x1U,
  kEDMA_TransferSize4Bytes = 0x2U,
  kEDMA_TransferSize8Bytes = 0x3U,
  kEDMA_TransferSize16Bytes = 0x4U,
  kEDMA_TransferSize32Bytes = 0x5U,
  kEDMA_TransferSize64Bytes = 0x6U,
  kEDMA_TransferSize128Bytes = 0x7U
}
 eDMA transfer configuration More...
 
enum  edma_modulo_t {
  kEDMA_ModuloDisable = 0x0U,
  kEDMA_Modulo2bytes,
  kEDMA_Modulo4bytes,
  kEDMA_Modulo8bytes,
  kEDMA_Modulo16bytes,
  kEDMA_Modulo32bytes,
  kEDMA_Modulo64bytes,
  kEDMA_Modulo128bytes,
  kEDMA_Modulo256bytes,
  kEDMA_Modulo512bytes,
  kEDMA_Modulo1Kbytes,
  kEDMA_Modulo2Kbytes,
  kEDMA_Modulo4Kbytes,
  kEDMA_Modulo8Kbytes,
  kEDMA_Modulo16Kbytes,
  kEDMA_Modulo32Kbytes,
  kEDMA_Modulo64Kbytes,
  kEDMA_Modulo128Kbytes,
  kEDMA_Modulo256Kbytes,
  kEDMA_Modulo512Kbytes,
  kEDMA_Modulo1Mbytes,
  kEDMA_Modulo2Mbytes,
  kEDMA_Modulo4Mbytes,
  kEDMA_Modulo8Mbytes,
  kEDMA_Modulo16Mbytes,
  kEDMA_Modulo32Mbytes,
  kEDMA_Modulo64Mbytes,
  kEDMA_Modulo128Mbytes,
  kEDMA_Modulo256Mbytes,
  kEDMA_Modulo512Mbytes,
  kEDMA_Modulo1Gbytes,
  kEDMA_Modulo2Gbytes,
  kEDMA_ModuloDisable = 0x0U,
  kEDMA_Modulo2bytes,
  kEDMA_Modulo4bytes,
  kEDMA_Modulo8bytes,
  kEDMA_Modulo16bytes,
  kEDMA_Modulo32bytes,
  kEDMA_Modulo64bytes,
  kEDMA_Modulo128bytes,
  kEDMA_Modulo256bytes,
  kEDMA_Modulo512bytes,
  kEDMA_Modulo1Kbytes,
  kEDMA_Modulo2Kbytes,
  kEDMA_Modulo4Kbytes,
  kEDMA_Modulo8Kbytes,
  kEDMA_Modulo16Kbytes,
  kEDMA_Modulo32Kbytes,
  kEDMA_Modulo64Kbytes,
  kEDMA_Modulo128Kbytes,
  kEDMA_Modulo256Kbytes,
  kEDMA_Modulo512Kbytes,
  kEDMA_Modulo1Mbytes,
  kEDMA_Modulo2Mbytes,
  kEDMA_Modulo4Mbytes,
  kEDMA_Modulo8Mbytes,
  kEDMA_Modulo16Mbytes,
  kEDMA_Modulo32Mbytes,
  kEDMA_Modulo64Mbytes,
  kEDMA_Modulo128Mbytes,
  kEDMA_Modulo256Mbytes,
  kEDMA_Modulo512Mbytes,
  kEDMA_Modulo1Gbytes,
  kEDMA_Modulo2Gbytes
}
 eDMA modulo configuration More...
 
enum  edma_bandwidth_t {
  kEDMA_BandwidthStallNone = 0x0U,
  kEDMA_BandwidthStall4Cycle = 0x2U,
  kEDMA_BandwidthStall8Cycle = 0x3U,
  kEDMA_BandwidthStallNone = 0x0U,
  kEDMA_BandwidthStall4Cycle = 0x2U,
  kEDMA_BandwidthStall8Cycle = 0x3U
}
 Bandwidth control. More...
 
enum  edma_channel_link_type_t {
  kEDMA_LinkNone = 0x0U,
  kEDMA_MinorLink,
  kEDMA_MajorLink,
  kEDMA_LinkNone = 0x0U,
  kEDMA_MinorLink,
  kEDMA_MajorLink
}
 Channel link type. More...
 
enum  {
  kEDMA_DoneFlag = 0x1U,
  kEDMA_ErrorFlag = 0x2U,
  kEDMA_InterruptFlag = 0x4U
}
 _edma_channel_status_flags eDMA channel status flags. More...
 
enum  {
  kEDMA_DestinationBusErrorFlag = DMA_ERR_DBE_FLAG,
  kEDMA_SourceBusErrorFlag = DMA_ERR_SBE_FLAG,
  kEDMA_ScatterGatherErrorFlag = DMA_ERR_SGE_FLAG,
  kEDMA_NbytesErrorFlag = DMA_ERR_NCE_FLAG,
  kEDMA_DestinationOffsetErrorFlag = DMA_ERR_DOE_FLAG,
  kEDMA_DestinationAddressErrorFlag = DMA_ERR_DAE_FLAG,
  kEDMA_SourceOffsetErrorFlag = DMA_ERR_SOE_FLAG,
  kEDMA_SourceAddressErrorFlag = DMA_ERR_SAE_FLAG,
  kEDMA_ErrorChannelFlag = DMA_ERR_ERRCHAN_FLAG,
  kEDMA_TransferCanceledFlag = DMA_ERR_ECX_FLAG,
  kEDMA_ValidFlag = (int)DMA_ERR_FLAG
}
 _edma_error_status_flags eDMA channel error status flags. More...
 
enum  {
  kEDMA_ErrorInterruptEnable = 0x1U,
  kEDMA_MajorInterruptEnable = DMA_CSR_INTMAJOR_MASK,
  kEDMA_HalfInterruptEnable = DMA_CSR_INTHALF_MASK
}
 _edma_interrupt_enable eDMA interrupt source More...
 
enum  edma_transfer_type_t {
  kEDMA_MemoryToMemory = 0x0U,
  kEDMA_PeripheralToMemory,
  kEDMA_MemoryToPeripheral,
  kEDMA_PeripheralToPeripheral,
  kEDMA_MemoryToMemory = 0x0U,
  kEDMA_PeripheralToMemory,
  kEDMA_MemoryToPeripheral,
  kEDMA_PeripheralToPeripheral
}
 eDMA transfer type More...
 
enum  edma_channel_memory_attribute_t {
  kEDMA_ChannelNoWriteNoReadNoCacheNoBuffer,
  kEDMA_ChannelNoWriteNoReadNoCacheBufferable,
  kEDMA_ChannelNoWriteNoReadCacheableNoBuffer,
  kEDMA_ChannelNoWriteNoReadCacheableBufferable,
  kEDMA_ChannelNoWriteReadNoCacheNoBuffer,
  kEDMA_ChannelNoWriteReadNoCacheBufferable,
  kEDMA_ChannelNoWriteReadCacheableNoBuffer,
  kEDMA_ChannelNoWriteReadCacheableBufferable,
  kEDMA_ChannelWriteNoReadNoCacheNoBuffer,
  kEDMA_ChannelWriteNoReadNoCacheBufferable,
  kEDMA_ChannelWriteNoReadCacheableNoBuffer,
  kEDMA_ChannelWriteNoReadCacheableBufferable,
  kEDMA_ChannelWriteReadNoCacheNoBuffer,
  kEDMA_ChannelWriteReadNoCacheBufferable,
  kEDMA_ChannelWriteReadCacheableNoBuffer,
  kEDMA_ChannelWriteReadCacheableBufferable
}
 eDMA channel memory attribute More...
 
enum  edma_channel_swap_size_t {
  kEDMA_ChannelSwapDisabled = 0x0U,
  kEDMA_ChannelReadWith8bitSwap = 0x1U,
  kEDMA_ChannelReadWith16bitSwap = 0x2U,
  kEDMA_ChannelReadWith32bitSwap = 0x3U,
  kEDMA_ChannelWriteWith8bitSwap = 0x9U,
  kEDMA_ChannelWriteWith16bitSwap = 0x10U,
  kEDMA_ChannelWriteWith32bitSwap = 0x11U
}
 eDMA4 channel swap size More...
 
enum  {
  kEDMA_AttributeOutput = DMA_CH_SBR_ATTR_MASK,
  kEDMA_PrivilegedAccessLevel = DMA_CH_SBR_PAL_MASK,
  kEDMA_MasterId
}
 eDMA channel system bus information, _edma_channel_sys_bus_info More...
 
enum  edma_channel_access_type_t {
  kEDMA_ChannelDataAccess = 0x0U,
  kEDMA_ChannelInstructionAccess = 0x1U
}
 eDMA4 channel access type More...
 
enum  edma_channel_protection_level_t {
  kEDMA_ChannelProtectionLevelUser = 0x0U,
  kEDMA_ChannelProtectionLevelPrivileged = 0x1U
}
 eDMA4 channel protection level More...
 
enum  edma_channel_security_level_t {
  kEDMA_ChannelSecurityLevelNonSecure = 0x0U,
  kEDMA_ChannelSecurityLevelSecure = 0x1U
}
 eDMA4 channel security level More...
 

Driver version

#define FSL_EDMA_DRIVER_VERSION   (MAKE_VERSION(2, 4, 4))
 eDMA driver version More...
 

eDMA initialization and de-initialization

void EDMA_Init (DMA_Type *base, const edma_config_t *config)
 Initializes the eDMA peripheral. More...
 
void EDMA_Deinit (DMA_Type *base)
 Deinitializes the eDMA peripheral. More...
 
void EDMA_InstallTCD (DMA_Type *base, uint32_t channel, edma_tcd_t *tcd)
 Push content of TCD structure into hardware TCD register. More...
 
void EDMA_GetDefaultConfig (edma_config_t *config)
 Gets the eDMA default configuration structure. More...
 
static void EDMA_EnableContinuousChannelLinkMode (DMA_Type *base, bool enable)
 Enable/Disable continuous channel link mode. More...
 
static void EDMA_EnableMinorLoopMapping (DMA_Type *base, bool enable)
 Enable/Disable minor loop mapping. More...
 

eDMA Channel Operation

void EDMA_ResetChannel (DMA_Type *base, uint32_t channel)
 Sets all TCD registers to default values. More...
 
void EDMA_SetTransferConfig (DMA_Type *base, uint32_t channel, const edma_transfer_config_t *config, edma_tcd_t *nextTcd)
 Configures the eDMA transfer attribute. More...
 
void EDMA_SetMinorOffsetConfig (DMA_Type *base, uint32_t channel, const edma_minor_offset_config_t *config)
 Configures the eDMA minor offset feature. More...
 
void EDMA_SetChannelPreemptionConfig (DMA_Type *base, uint32_t channel, const edma_channel_Preemption_config_t *config)
 Configures the eDMA channel preemption feature. More...
 
void EDMA_SetChannelLink (DMA_Type *base, uint32_t channel, edma_channel_link_type_t linkType, uint32_t linkedChannel)
 Sets the channel link for the eDMA transfer. More...
 
void EDMA_SetBandWidth (DMA_Type *base, uint32_t channel, edma_bandwidth_t bandWidth)
 Sets the bandwidth for the eDMA transfer. More...
 
void EDMA_SetModulo (DMA_Type *base, uint32_t channel, edma_modulo_t srcModulo, edma_modulo_t destModulo)
 Sets the source modulo and the destination modulo for the eDMA transfer. More...
 
static void EDMA_EnableAutoStopRequest (DMA_Type *base, uint32_t channel, bool enable)
 Enables an auto stop request for the eDMA transfer. More...
 
void EDMA_EnableChannelInterrupts (DMA_Type *base, uint32_t channel, uint32_t mask)
 Enables the interrupt source for the eDMA transfer. More...
 
void EDMA_DisableChannelInterrupts (DMA_Type *base, uint32_t channel, uint32_t mask)
 Disables the interrupt source for the eDMA transfer. More...
 
void EDMA_SetMajorOffsetConfig (DMA_Type *base, uint32_t channel, int32_t sourceOffset, int32_t destOffset)
 Configures the eDMA channel TCD major offset feature. More...
 

eDMA TCD Operation

void EDMA_TcdReset (edma_tcd_t *tcd)
 Sets all fields to default values for the TCD structure. More...
 
void EDMA_TcdSetTransferConfig (edma_tcd_t *tcd, const edma_transfer_config_t *config, edma_tcd_t *nextTcd)
 Configures the eDMA TCD transfer attribute. More...
 
void EDMA_TcdSetMinorOffsetConfig (edma_tcd_t *tcd, const edma_minor_offset_config_t *config)
 Configures the eDMA TCD minor offset feature. More...
 
void EDMA_TcdSetChannelLink (edma_tcd_t *tcd, edma_channel_link_type_t linkType, uint32_t linkedChannel)
 Sets the channel link for the eDMA TCD. More...
 
static void EDMA_TcdSetBandWidth (edma_tcd_t *tcd, edma_bandwidth_t bandWidth)
 Sets the bandwidth for the eDMA TCD. More...
 
void EDMA_TcdSetModulo (edma_tcd_t *tcd, edma_modulo_t srcModulo, edma_modulo_t destModulo)
 Sets the source modulo and the destination modulo for the eDMA TCD. More...
 
static void EDMA_TcdEnableAutoStopRequest (edma_tcd_t *tcd, bool enable)
 Sets the auto stop request for the eDMA TCD. More...
 
void EDMA_TcdEnableInterrupts (edma_tcd_t *tcd, uint32_t mask)
 Enables the interrupt source for the eDMA TCD. More...
 
void EDMA_TcdDisableInterrupts (edma_tcd_t *tcd, uint32_t mask)
 Disables the interrupt source for the eDMA TCD. More...
 
void EDMA_TcdSetMajorOffsetConfig (edma_tcd_t *tcd, int32_t sourceOffset, int32_t destOffset)
 Configures the eDMA TCD major offset feature. More...
 

eDMA Channel Transfer Operation

static void EDMA_EnableChannelRequest (DMA_Type *base, uint32_t channel)
 Enables the eDMA hardware channel request. More...
 
static void EDMA_DisableChannelRequest (DMA_Type *base, uint32_t channel)
 Disables the eDMA hardware channel request. More...
 
static void EDMA_TriggerChannelStart (DMA_Type *base, uint32_t channel)
 Starts the eDMA transfer by using the software trigger. More...
 

eDMA Channel Status Operation

uint32_t EDMA_GetRemainingMajorLoopCount (DMA_Type *base, uint32_t channel)
 Gets the remaining major loop count from the eDMA current channel TCD. More...
 
static uint32_t EDMA_GetErrorStatusFlags (DMA_Type *base)
 Gets the eDMA channel error status flags. More...
 
uint32_t EDMA_GetChannelStatusFlags (DMA_Type *base, uint32_t channel)
 Gets the eDMA channel status flags. More...
 
void EDMA_ClearChannelStatusFlags (DMA_Type *base, uint32_t channel, uint32_t mask)
 Clears the eDMA channel status flags. More...
 

eDMA Transactional Operation

void EDMA_CreateHandle (edma_handle_t *handle, DMA_Type *base, uint32_t channel)
 Creates the eDMA handle. More...
 
void EDMA_InstallTCDMemory (edma_handle_t *handle, edma_tcd_t *tcdPool, uint32_t tcdSize)
 Installs the TCDs memory pool into the eDMA handle. More...
 
void EDMA_SetCallback (edma_handle_t *handle, edma_callback callback, void *userData)
 Installs a callback function for the eDMA transfer. More...
 
void EDMA_PrepareTransferConfig (edma_transfer_config_t *config, void *srcAddr, uint32_t srcWidth, int16_t srcOffset, void *destAddr, uint32_t destWidth, int16_t destOffset, uint32_t bytesEachRequest, uint32_t transferBytes)
 Prepares the eDMA transfer structure configurations. More...
 
void EDMA_PrepareTransfer (edma_transfer_config_t *config, void *srcAddr, uint32_t srcWidth, void *destAddr, uint32_t destWidth, uint32_t bytesEachRequest, uint32_t transferBytes, edma_transfer_type_t transferType)
 Prepares the eDMA transfer structure. More...
 
status_t EDMA_SubmitTransfer (edma_handle_t *handle, const edma_transfer_config_t *config)
 Submits the eDMA transfer request. More...
 
void EDMA_StartTransfer (edma_handle_t *handle)
 eDMA starts transfer. More...
 
void EDMA_StopTransfer (edma_handle_t *handle)
 eDMA stops transfer. More...
 
void EDMA_AbortTransfer (edma_handle_t *handle)
 eDMA aborts transfer. More...
 
static uint32_t EDMA_GetUnusedTCDNumber (edma_handle_t *handle)
 Get unused TCD slot number. More...
 
static uint32_t EDMA_GetNextTCDAddress (edma_handle_t *handle)
 Get the next tcd address. More...
 
void EDMA_HandleIRQ (edma_handle_t *handle)
 eDMA IRQ handler for the current major loop transfer completion. More...
 

Driver version

#define FSL_EDMA_DRIVER_VERSION   (MAKE_VERSION(2, 10, 1))
 eDMA driver version More...
 

eDMA initialization and de-initialization

void EDMA_Init (EDMA_Type *base, const edma_config_t *config)
 Initializes the eDMA peripheral. More...
 
void EDMA_Deinit (EDMA_Type *base)
 Deinitializes the eDMA peripheral. More...
 
void EDMA_InstallTCD (EDMA_Type *base, uint32_t channel, edma_tcd_t *tcd)
 Push content of TCD structure into hardware TCD register. More...
 

eDMA Channel Operation

void EDMA_InitChannel (EDMA_Type *base, uint32_t channel, edma_channel_config_t *channelConfig)
 EDMA Channel initialization. More...
 
static void EDMA_SetChannelMemoryAttribute (EDMA_Type *base, uint32_t channel, edma_channel_memory_attribute_t writeAttribute, edma_channel_memory_attribute_t readAttribute)
 Set channel memory attribute. More...
 
static void EDMA_SetChannelSignExtension (EDMA_Type *base, uint32_t channel, uint8_t position)
 Set channel sign extension. More...
 
static void EDMA_SetChannelSwapSize (EDMA_Type *base, uint32_t channel, edma_channel_swap_size_t swapSize)
 Set channel swap size. More...
 
static void EDMA_SetChannelAccessType (EDMA_Type *base, uint32_t channel, edma_channel_access_type_t channelAccessType)
 Set channel access type. More...
 
static void EDMA_SetChannelMux (EDMA_Type *base, uint32_t channel, int32_t channelRequestSource)
 Set channel request source. More...
 
static uint32_t EDMA_GetChannelSystemBusInformation (EDMA_Type *base, uint32_t channel)
 Gets the channel identification and attribute information on the system bus interface. More...
 
static void EDMA_EnableChannelMasterIDReplication (EDMA_Type *base, uint32_t channel, bool enable)
 Set channel master ID replication. More...
 
static void EDMA_SetChannelSecurityLevel (EDMA_Type *base, uint32_t channel, edma_channel_security_level_t level)
 Set channel security level. More...
 
static void EDMA_SetChannelProtectionLevel (EDMA_Type *base, uint32_t channel, edma_channel_protection_level_t level)
 Set channel security level. More...
 
void EDMA_ResetChannel (EDMA_Type *base, uint32_t channel)
 Sets all TCD registers to default values. More...
 
void EDMA_SetTransferConfig (EDMA_Type *base, uint32_t channel, const edma_transfer_config_t *config, edma_tcd_t *nextTcd)
 Configures the eDMA transfer attribute. More...
 
void EDMA_SetMinorOffsetConfig (EDMA_Type *base, uint32_t channel, const edma_minor_offset_config_t *config)
 Configures the eDMA minor offset feature. More...
 
void EDMA_SetChannelPreemptionConfig (EDMA_Type *base, uint32_t channel, const edma_channel_Preemption_config_t *config)
 Configures the eDMA channel preemption feature. More...
 
void EDMA_SetChannelLink (EDMA_Type *base, uint32_t channel, edma_channel_link_type_t type, uint32_t linkedChannel)
 Sets the channel link for the eDMA transfer. More...
 
void EDMA_SetBandWidth (EDMA_Type *base, uint32_t channel, edma_bandwidth_t bandWidth)
 Sets the bandwidth for the eDMA transfer. More...
 
void EDMA_SetModulo (EDMA_Type *base, uint32_t channel, edma_modulo_t srcModulo, edma_modulo_t destModulo)
 Sets the source modulo and the destination modulo for the eDMA transfer. More...
 
static void EDMA_EnableAutoStopRequest (EDMA_Type *base, uint32_t channel, bool enable)
 Enables an auto stop request for the eDMA transfer. More...
 
void EDMA_EnableChannelInterrupts (EDMA_Type *base, uint32_t channel, uint32_t mask)
 Enables the interrupt source for the eDMA transfer. More...
 
void EDMA_DisableChannelInterrupts (EDMA_Type *base, uint32_t channel, uint32_t mask)
 Disables the interrupt source for the eDMA transfer. More...
 
void EDMA_SetMajorOffsetConfig (EDMA_Type *base, uint32_t channel, int32_t sourceOffset, int32_t destOffset)
 Configures the eDMA channel TCD major offset feature. More...
 

eDMA TCD Operation

void EDMA_ConfigChannelSoftwareTCD (edma_tcd_t *tcd, const edma_transfer_config_t *transfer)
 Sets TCD fields according to the user's channel transfer configuration structure, edma_transfer_config_t. More...
 
void EDMA_ConfigChannelSoftwareTCDExt (EDMA_Type *base, edma_tcd_t *tcd, const edma_transfer_config_t *transfer)
 Sets TCD fields according to the user's channel transfer configuration structure, edma_transfer_config_t. More...
 
void EDMA_TcdResetExt (EDMA_Type *base, edma_tcd_t *tcd)
 Sets all fields to default values for the TCD structure. More...
 
void EDMA_TcdSetTransferConfigExt (EDMA_Type *base, edma_tcd_t *tcd, const edma_transfer_config_t *config, edma_tcd_t *nextTcd)
 Configures the eDMA TCD transfer attribute. More...
 
void EDMA_TcdSetMinorOffsetConfigExt (EDMA_Type *base, edma_tcd_t *tcd, const edma_minor_offset_config_t *config)
 Configures the eDMA TCD minor offset feature. More...
 
void EDMA_TcdSetChannelLinkExt (EDMA_Type *base, edma_tcd_t *tcd, edma_channel_link_type_t type, uint32_t linkedChannel)
 Sets the channel link for the eDMA TCD. More...
 
static void EDMA_TcdSetBandWidthExt (EDMA_Type *base, edma_tcd_t *tcd, edma_bandwidth_t bandWidth)
 Sets the bandwidth for the eDMA TCD. More...
 
void EDMA_TcdSetModuloExt (EDMA_Type *base, edma_tcd_t *tcd, edma_modulo_t srcModulo, edma_modulo_t destModulo)
 Sets the source modulo and the destination modulo for the eDMA TCD. More...
 
static void EDMA_TcdEnableAutoStopRequestExt (EDMA_Type *base, edma_tcd_t *tcd, bool enable)
 Sets the auto stop request for the eDMA TCD. More...
 
void EDMA_TcdEnableInterruptsExt (EDMA_Type *base, edma_tcd_t *tcd, uint32_t mask)
 Enables the interrupt source for the eDMA TCD. More...
 
void EDMA_TcdDisableInterruptsExt (EDMA_Type *base, edma_tcd_t *tcd, uint32_t mask)
 Disables the interrupt source for the eDMA TCD. More...
 
void EDMA_TcdSetMajorOffsetConfigExt (EDMA_Type *base, edma_tcd_t *tcd, int32_t sourceOffset, int32_t destOffset)
 Configures the eDMA TCD major offset feature. More...
 

eDMA Channel Transfer Operation

static void EDMA_EnableChannelRequest (EDMA_Type *base, uint32_t channel)
 Enables the eDMA hardware channel request. More...
 
static void EDMA_DisableChannelRequest (EDMA_Type *base, uint32_t channel)
 Disables the eDMA hardware channel request. More...
 
static void EDMA_TriggerChannelStart (EDMA_Type *base, uint32_t channel)
 Starts the eDMA transfer by using the software trigger. More...
 

eDMA Channel Status Operation

uint32_t EDMA_GetRemainingMajorLoopCount (EDMA_Type *base, uint32_t channel)
 Gets the remaining major loop count from the eDMA current channel TCD. More...
 
static uint32_t EDMA_GetErrorStatusFlags (EDMA_Type *base)
 Gets the eDMA channel error status flags. More...
 
uint32_t EDMA_GetChannelStatusFlags (EDMA_Type *base, uint32_t channel)
 Gets the eDMA channel status flags. More...
 
void EDMA_ClearChannelStatusFlags (EDMA_Type *base, uint32_t channel, uint32_t mask)
 Clears the eDMA channel status flags. More...
 

eDMA Transactional Operation

void EDMA_CreateHandle (edma_handle_t *handle, EDMA_Type *base, uint32_t channel)
 Creates the eDMA handle. More...
 
void EDMA_PrepareTransferTCD (edma_handle_t *handle, edma_tcd_t *tcd, void *srcAddr, uint32_t srcWidth, int16_t srcOffset, void *destAddr, uint32_t destWidth, int16_t destOffset, uint32_t bytesEachRequest, uint32_t transferBytes, edma_tcd_t *nextTcd)
 Prepares the eDMA transfer content descriptor. More...
 
status_t EDMA_SubmitTransferTCD (edma_handle_t *handle, edma_tcd_t *tcd)
 Submits the eDMA transfer content descriptor. More...
 
status_t EDMA_SubmitLoopTransfer (edma_handle_t *handle, edma_transfer_config_t *transfer, uint32_t transferLoopCount)
 Submits the eDMA scatter gather transfer configurations. More...
 

Data Structure Documentation

struct edma_config_t

Data Fields

bool enableContinuousLinkMode
 Enable (true) continuous link mode. More...
 
bool enableHaltOnError
 Enable (true) transfer halt on error. More...
 
bool enableRoundRobinArbitration
 Enable (true) round robin channel arbitration method or fixed priority arbitration is used for channel selection. More...
 
bool enableDebugMode
 Enable(true) eDMA debug mode. More...
 
bool enableMasterIdReplication
 Enable (true) master ID replication. More...
 
bool enableGlobalChannelLink
 Enable(true) channel linking is available and controlled by each channel's link settings. More...
 
edma_channel_config_tchannelConfig [FSL_FEATURE_EDMA_MODULE_CHANNEL]
 channel preemption configuration
 

Field Documentation

bool edma_config_t::enableContinuousLinkMode

Upon minor loop completion, the channel activates again if that channel has a minor loop channel link enabled and the link channel is itself.

bool edma_config_t::enableHaltOnError

Any error causes the HALT bit to set. Subsequently, all service requests are ignored until the HALT bit is cleared.

bool edma_config_t::enableRoundRobinArbitration
  Enable(true) channel linking is available and controlled by each channel's

link settings.

bool edma_config_t::enableDebugMode

Enable(true) eDMA4 debug mode.

When in debug mode, the eDMA stalls the start of a new channel. Executing channels are allowed to complete.

When in debug mode, the eDMA4 stalls the start of a new channel. Executing channels are allowed to complete.

bool edma_config_t::enableMasterIdReplication

If Master ID replication is disabled, the privileged protection level (supervisor mode) for eDMA4 transfers is used.

bool edma_config_t::enableGlobalChannelLink
struct edma_transfer_config_t

edma4 channel transfer configuration

This structure configures the source/destination transfer attribute.

The transfer configuration structure support full feature configuration of the transfer control descriptor.

Note
User should pay attention to the transfer size alignment limitation
  1. the bytesEachRequest should align with the srcWidthOfEachTransfer and the dstWidthOfEachTransfer that is to say bytesEachRequest % srcWidthOfEachTransfer should be 0
  2. the srcOffsetOfEachTransfer and dstOffsetOfEachTransfer must be aligne with transfer width
  3. the totalBytes should align with the bytesEachRequest
  4. the srcAddr should align with the srcWidthOfEachTransfer
  5. the dstAddr should align with the dstWidthOfEachTransfer
  6. the srcAddr should align with srcAddrModulo if modulo feature is enabled
  7. the dstAddr should align with dstAddrModulo if modulo feature is enabled If anyone of above condition can not be satisfied, the edma4 interfaces will generate assert error.

1.To perform a simple transfer, below members should be initialized at least .srcAddr - source address .dstAddr - destination address .srcWidthOfEachTransfer - data width of source address .dstWidthOfEachTransfer - data width of destination address, normally it should be as same as srcWidthOfEachTransfer .bytesEachRequest - bytes to be transferred in each DMA request .totalBytes - total bytes to be transferred .srcOffsetOfEachTransfer - offset value in bytes unit to be applied to source address as each source read is completed .dstOffsetOfEachTransfer - offset value in bytes unit to be applied to destination address as each destination write is completed enablchannelRequest - channel request can be enabled together with transfer configure submission

2.The transfer configuration structure also support advance feature: Programmable source/destination address range(MODULO) Programmable minor loop offset Programmable major loop offset Programmable channel chain feature Programmable channel transfer control descriptor link feature

Data Fields

uint32_t srcAddr
 Source data address. More...
 
uint32_t destAddr
 Destination data address. More...
 
edma_transfer_size_t srcTransferSize
 Source data transfer size. More...
 
edma_transfer_size_t destTransferSize
 Destination data transfer size. More...
 
int16_t srcOffset
 Sign-extended offset applied to the current source address to form the next-state value as each source read is completed. More...
 
int16_t destOffset
 Sign-extended offset applied to the current destination address to form the next-state value as each destination write is completed. More...
 
uint32_t minorLoopBytes
 Bytes to transfer in a minor loop. More...
 
uint32_t majorLoopCounts
 Major loop iteration count. More...
 
uint16_t enabledInterruptMask
 channel interrupt to enable, can be OR'ed value of _edma_interrupt_enable
 
edma_modulo_t srcAddrModulo
 source circular data queue range
 
int32_t srcMajorLoopOffset
 source major loop offset
 
edma_modulo_t dstAddrModulo
 destination circular data queue range
 
int32_t dstMajorLoopOffset
 destination major loop offset
 
bool enableSrcMinorLoopOffset
 enable source minor loop offset
 
bool enableDstMinorLoopOffset
 enable dest minor loop offset
 
int32_t minorLoopOffset
 burst offset, the offset will be applied after minor loop update
 
bool enableChannelMajorLoopLink
 channel link when major loop complete
 
uint32_t majorLoopLinkChannel
 major loop link channel number
 
bool enableChannelMinorLoopLink
 channel link when minor loop complete
 
uint32_t minorLoopLinkChannel
 minor loop link channel number
 
edma_tcd_tlinkTCD
 pointer to the link transfer control descriptor
 

Field Documentation

uint32_t edma_transfer_config_t::srcAddr
uint32_t edma_transfer_config_t::destAddr
edma_transfer_size_t edma_transfer_config_t::srcTransferSize
edma_transfer_size_t edma_transfer_config_t::destTransferSize
int16_t edma_transfer_config_t::srcOffset

Sign-extended offset value in byte unit applied to the current source address to form the next-state value as each source read is completed.

int16_t edma_transfer_config_t::destOffset
             Sign-extended offset value in byte unit applied to the current destination

address to form the next-state value as each destination write is completed.

uint32_t edma_transfer_config_t::minorLoopBytes

bytes in each minor loop or each request range: 1 - (2^30 -1) when minor loop mapping is enabled range: 1 - (2^10 - 1) when minor loop mapping is enabled and source or dest minor loop offset is enabled range: 1 - (2^32 - 1) when minor loop mapping is disabled

uint32_t edma_transfer_config_t::majorLoopCounts

minor loop counts in each major loop, should be 1 at least for each transfer range: (0 - (2^15 - 1)) when minor loop channel link is disabled range: (0 - (2^9 - 1)) when minor loop channel link is enabled total bytes in a transfer = minorLoopCountsEachMajorLoop * bytesEachMinorLoop

struct edma_channel_Preemption_config_t

Data Fields

bool enableChannelPreemption
 If true: a channel can be suspended by other channel with higher priority.
 
bool enablePreemptAbility
 If true: a channel can suspend other channel with low priority.
 
uint8_t channelPriority
 Channel priority.
 
struct edma_minor_offset_config_t

Data Fields

bool enableSrcMinorOffset
 Enable(true) or Disable(false) source minor loop offset. More...
 
bool enableDestMinorOffset
 Enable(true) or Disable(false) destination minor loop offset. More...
 
uint32_t minorOffset
 Offset for a minor loop mapping. More...
 

Field Documentation

bool edma_minor_offset_config_t::enableSrcMinorOffset
bool edma_minor_offset_config_t::enableDestMinorOffset
uint32_t edma_minor_offset_config_t::minorOffset
struct edma_tcd_t

This structure is same as TCD register which is described in reference manual, and is used to configure the scatter/gather feature as a next hardware TCD.

Data Fields

__IO uint32_t SADDR
 SADDR register, used to save source address.
 
__IO uint16_t SOFF
 SOFF register, save offset bytes every transfer.
 
__IO uint16_t ATTR
 ATTR register, source/destination transfer size and modulo.
 
__IO uint32_t NBYTES
 Nbytes register, minor loop length in bytes.
 
__IO uint32_t SLAST
 SLAST register.
 
__IO uint32_t DADDR
 DADDR register, used for destination address.
 
__IO uint16_t DOFF
 DOFF register, used for destination offset.
 
__IO uint16_t CITER
 CITER register, current minor loop numbers, for unfinished minor loop. More...
 
__IO uint32_t DLAST_SGA
 DLASTSGA register, next tcd address used in scatter-gather mode.
 
__IO uint16_t CSR
 CSR register, for TCD control status.
 
__IO uint16_t BITER
 BITER register, begin minor loop count. More...
 

Field Documentation

__IO uint16_t edma_tcd_t::CITER
__IO uint16_t edma_tcd_t::BITER
struct edma_handle_t

Data Fields

edma_callback callback
 Callback function for major count exhausted. More...
 
void * userData
 Callback function parameter. More...
 
DMA_Type * base
 eDMA peripheral base address. More...
 
edma_tcd_ttcdPool
 Pointer to memory stored TCDs. More...
 
uint8_t channel
 eDMA channel number. More...
 
volatile int8_t header
 The first TCD index. More...
 
volatile int8_t tail
 The last TCD index. More...
 
volatile int8_t tcdUsed
 The number of used TCD slots. More...
 
volatile int8_t tcdSize
 The total number of TCD slots in the queue. More...
 
uint8_t flags
 The status of the current channel. More...
 
EDMA_ChannelTypechannelBase
 eDMA peripheral channel base address. More...
 
EDMA_Type * base
 eDMA peripheral base address
 
EDMA_TCDTypetcdBase
 eDMA peripheral tcd base address. More...
 
uint32_t channel
 eDMA channel number. More...
 

Field Documentation

edma_callback edma_handle_t::callback
void * edma_handle_t::userData
DMA_Type* edma_handle_t::base
edma_tcd_t * edma_handle_t::tcdPool
uint8_t edma_handle_t::channel
volatile int8_t edma_handle_t::header

Should point to the next TCD to be loaded into the eDMA engine.

volatile int8_t edma_handle_t::tail

Should point to the next TCD to be stored into the memory pool.

volatile int8_t edma_handle_t::tcdUsed

Should reflect the number of TCDs can be used/loaded in the memory.

volatile int8_t edma_handle_t::tcdSize
uint8_t edma_handle_t::flags
EDMA_ChannelType* edma_handle_t::channelBase
EDMA_TCDType* edma_handle_t::tcdBase
uint32_t edma_handle_t::channel
struct edma_channel_config_t

Data Fields

edma_channel_Preemption_config_t channelPreemptionConfig
 channel preemption configuration
 
edma_channel_memory_attribute_t channelReadMemoryAttribute
 channel memory read attribute configuration
 
edma_channel_memory_attribute_t channelWriteMemoryAttribute
 channel memory write attribute configuration
 
edma_channel_swap_size_t channelSwapSize
 channel swap size configuration
 
edma_channel_access_type_t channelAccessType
 channel access type configuration
 
uint8_t channelDataSignExtensionBitPosition
 channel data sign extension bit psition configuration
 
int channelRequestSource
 hardware service request source for the channel
 
bool enableMasterIDReplication
 enable master ID replication
 
edma_channel_security_level_t securityLevel
 security level
 
edma_channel_protection_level_t protectionLevel
 protection level
 

Macro Definition Documentation

#define FSL_EDMA_DRIVER_VERSION   (MAKE_VERSION(2, 4, 4))

Version 2.4.4.

#define FSL_EDMA_DRIVER_VERSION   (MAKE_VERSION(2, 10, 1))

Version 2.10.1.

Typedef Documentation

typedef void(* edma_callback)(struct _edma_handle *handle, void *userData, bool transferDone, uint32_t tcds)

This callback function is called in the EDMA interrupt handle. In normal mode, run into callback function means the transfer users need is done. In scatter gather mode, run into callback function means a transfer control block (tcd) is finished. Not all transfer finished, users can get the finished tcd numbers using interface EDMA_GetUnusedTCDNumber.

Parameters
handleEDMA handle pointer, users shall not touch the values inside.
userDataThe callback user parameter pointer. Users can use this parameter to involve things users need to change in EDMA callback function.
transferDoneIf the current loaded transfer done. In normal mode it means if all transfer done. In scatter gather mode, this parameter shows is the current transfer block in EDMA register is done. As the load of core is different, it will be different if the new tcd loaded into EDMA registers while this callback called. If true, it always means new tcd still not loaded into registers, while false means new tcd already loaded into registers.
tcdsHow many tcds are done from the last callback. This parameter only used in scatter gather mode. It tells user how many tcds are finished between the last callback and this.

This structure is same as TCD register which is described in reference manual, and is used to configure the scatter/gather feature as a next hardware TCD.

typedef void(* edma_callback)(struct _edma_handle *handle, void *userData, bool transferDone, uint32_t tcds)

This callback function is called in the EDMA interrupt handle. In normal mode, run into callback function means the transfer users need is done. In scatter gather mode, run into callback function means a transfer control block (tcd) is finished. Not all transfer finished, users can get the finished tcd numbers using interface EDMA_GetUnusedTCDNumber.

Parameters
handleEDMA handle pointer, users shall not touch the values inside.
userDataThe callback user parameter pointer. Users can use this parameter to involve things users need to change in EDMA callback function.
transferDoneIf the current loaded transfer done. In normal mode it means if all transfer done. In scatter gather mode, this parameter shows is the current transfer block in EDMA register is done. As the load of core is different, it will be different if the new tcd loaded into EDMA registers while this callback called. If true, it always means new tcd still not loaded into registers, while false means new tcd already loaded into registers.
tcdsHow many tcds are done from the last callback. This parameter only used in scatter gather mode. It tells user how many tcds are finished between the last callback and this.

Enumeration Type Documentation

Enumerator
kEDMA_TransferSize1Bytes 

Source/Destination data transfer size is 1 byte every time.

kEDMA_TransferSize2Bytes 

Source/Destination data transfer size is 2 bytes every time.

kEDMA_TransferSize4Bytes 

Source/Destination data transfer size is 4 bytes every time.

kEDMA_TransferSize8Bytes 

Source/Destination data transfer size is 8 bytes every time.

kEDMA_TransferSize16Bytes 

Source/Destination data transfer size is 16 bytes every time.

kEDMA_TransferSize32Bytes 

Source/Destination data transfer size is 32 bytes every time.

kEDMA_TransferSize1Bytes 

Source/Destination data transfer size is 1 byte every time.

kEDMA_TransferSize2Bytes 

Source/Destination data transfer size is 2 bytes every time.

kEDMA_TransferSize4Bytes 

Source/Destination data transfer size is 4 bytes every time.

kEDMA_TransferSize8Bytes 

Source/Destination data transfer size is 8 bytes every time.

kEDMA_TransferSize16Bytes 

Source/Destination data transfer size is 16 bytes every time.

kEDMA_TransferSize32Bytes 

Source/Destination data transfer size is 32 bytes every time.

kEDMA_TransferSize64Bytes 

Source/Destination data transfer size is 64 bytes every time.

kEDMA_TransferSize128Bytes 

Source/Destination data transfer size is 128 bytes every time.

Enumerator
kEDMA_ModuloDisable 

Disable modulo.

kEDMA_Modulo2bytes 

Circular buffer size is 2 bytes.

kEDMA_Modulo4bytes 

Circular buffer size is 4 bytes.

kEDMA_Modulo8bytes 

Circular buffer size is 8 bytes.

kEDMA_Modulo16bytes 

Circular buffer size is 16 bytes.

kEDMA_Modulo32bytes 

Circular buffer size is 32 bytes.

kEDMA_Modulo64bytes 

Circular buffer size is 64 bytes.

kEDMA_Modulo128bytes 

Circular buffer size is 128 bytes.

kEDMA_Modulo256bytes 

Circular buffer size is 256 bytes.

kEDMA_Modulo512bytes 

Circular buffer size is 512 bytes.

kEDMA_Modulo1Kbytes 

Circular buffer size is 1 K bytes.

kEDMA_Modulo2Kbytes 

Circular buffer size is 2 K bytes.

kEDMA_Modulo4Kbytes 

Circular buffer size is 4 K bytes.

kEDMA_Modulo8Kbytes 

Circular buffer size is 8 K bytes.

kEDMA_Modulo16Kbytes 

Circular buffer size is 16 K bytes.

kEDMA_Modulo32Kbytes 

Circular buffer size is 32 K bytes.

kEDMA_Modulo64Kbytes 

Circular buffer size is 64 K bytes.

kEDMA_Modulo128Kbytes 

Circular buffer size is 128 K bytes.

kEDMA_Modulo256Kbytes 

Circular buffer size is 256 K bytes.

kEDMA_Modulo512Kbytes 

Circular buffer size is 512 K bytes.

kEDMA_Modulo1Mbytes 

Circular buffer size is 1 M bytes.

kEDMA_Modulo2Mbytes 

Circular buffer size is 2 M bytes.

kEDMA_Modulo4Mbytes 

Circular buffer size is 4 M bytes.

kEDMA_Modulo8Mbytes 

Circular buffer size is 8 M bytes.

kEDMA_Modulo16Mbytes 

Circular buffer size is 16 M bytes.

kEDMA_Modulo32Mbytes 

Circular buffer size is 32 M bytes.

kEDMA_Modulo64Mbytes 

Circular buffer size is 64 M bytes.

kEDMA_Modulo128Mbytes 

Circular buffer size is 128 M bytes.

kEDMA_Modulo256Mbytes 

Circular buffer size is 256 M bytes.

kEDMA_Modulo512Mbytes 

Circular buffer size is 512 M bytes.

kEDMA_Modulo1Gbytes 

Circular buffer size is 1 G bytes.

kEDMA_Modulo2Gbytes 

Circular buffer size is 2 G bytes.

kEDMA_ModuloDisable 

Disable modulo.

kEDMA_Modulo2bytes 

Circular buffer size is 2 bytes.

kEDMA_Modulo4bytes 

Circular buffer size is 4 bytes.

kEDMA_Modulo8bytes 

Circular buffer size is 8 bytes.

kEDMA_Modulo16bytes 

Circular buffer size is 16 bytes.

kEDMA_Modulo32bytes 

Circular buffer size is 32 bytes.

kEDMA_Modulo64bytes 

Circular buffer size is 64 bytes.

kEDMA_Modulo128bytes 

Circular buffer size is 128 bytes.

kEDMA_Modulo256bytes 

Circular buffer size is 256 bytes.

kEDMA_Modulo512bytes 

Circular buffer size is 512 bytes.

kEDMA_Modulo1Kbytes 

Circular buffer size is 1 K bytes.

kEDMA_Modulo2Kbytes 

Circular buffer size is 2 K bytes.

kEDMA_Modulo4Kbytes 

Circular buffer size is 4 K bytes.

kEDMA_Modulo8Kbytes 

Circular buffer size is 8 K bytes.

kEDMA_Modulo16Kbytes 

Circular buffer size is 16 K bytes.

kEDMA_Modulo32Kbytes 

Circular buffer size is 32 K bytes.

kEDMA_Modulo64Kbytes 

Circular buffer size is 64 K bytes.

kEDMA_Modulo128Kbytes 

Circular buffer size is 128 K bytes.

kEDMA_Modulo256Kbytes 

Circular buffer size is 256 K bytes.

kEDMA_Modulo512Kbytes 

Circular buffer size is 512 K bytes.

kEDMA_Modulo1Mbytes 

Circular buffer size is 1 M bytes.

kEDMA_Modulo2Mbytes 

Circular buffer size is 2 M bytes.

kEDMA_Modulo4Mbytes 

Circular buffer size is 4 M bytes.

kEDMA_Modulo8Mbytes 

Circular buffer size is 8 M bytes.

kEDMA_Modulo16Mbytes 

Circular buffer size is 16 M bytes.

kEDMA_Modulo32Mbytes 

Circular buffer size is 32 M bytes.

kEDMA_Modulo64Mbytes 

Circular buffer size is 64 M bytes.

kEDMA_Modulo128Mbytes 

Circular buffer size is 128 M bytes.

kEDMA_Modulo256Mbytes 

Circular buffer size is 256 M bytes.

kEDMA_Modulo512Mbytes 

Circular buffer size is 512 M bytes.

kEDMA_Modulo1Gbytes 

Circular buffer size is 1 G bytes.

kEDMA_Modulo2Gbytes 

Circular buffer size is 2 G bytes.

Enumerator
kEDMA_BandwidthStallNone 

No eDMA engine stalls.

kEDMA_BandwidthStall4Cycle 

eDMA engine stalls for 4 cycles after each read/write.

kEDMA_BandwidthStall8Cycle 

eDMA engine stalls for 8 cycles after each read/write.

kEDMA_BandwidthStallNone 

No eDMA engine stalls.

kEDMA_BandwidthStall4Cycle 

eDMA engine stalls for 4 cycles after each read/write.

kEDMA_BandwidthStall8Cycle 

eDMA engine stalls for 8 cycles after each read/write.

Enumerator
kEDMA_LinkNone 

No channel link.

kEDMA_MinorLink 

Channel link after each minor loop.

kEDMA_MajorLink 

Channel link while major loop count exhausted.

kEDMA_LinkNone 

No channel link.

kEDMA_MinorLink 

Channel link after each minor loop.

kEDMA_MajorLink 

Channel link while major loop count exhausted.

anonymous enum
Enumerator
kEDMA_DoneFlag 

DONE flag, set while transfer finished, CITER value exhausted.

kEDMA_ErrorFlag 

eDMA error flag, an error occurred in a transfer

kEDMA_InterruptFlag 

eDMA interrupt flag, set while an interrupt occurred of this channel

anonymous enum
Enumerator
kEDMA_DestinationBusErrorFlag 

Bus error on destination address.

kEDMA_SourceBusErrorFlag 

Bus error on the source address.

kEDMA_ScatterGatherErrorFlag 

Error on the Scatter/Gather address, not 32byte aligned.

kEDMA_NbytesErrorFlag 

NBYTES/CITER configuration error.

kEDMA_DestinationOffsetErrorFlag 

Destination offset not aligned with destination size.

kEDMA_DestinationAddressErrorFlag 

Destination address not aligned with destination size.

kEDMA_SourceOffsetErrorFlag 

Source offset not aligned with source size.

kEDMA_SourceAddressErrorFlag 

Source address not aligned with source size.

kEDMA_ErrorChannelFlag 

Error channel number of the cancelled channel number.

kEDMA_ChannelPriorityErrorFlag 

Channel priority is not unique.

kEDMA_TransferCanceledFlag 

Transfer cancelled.

kEDMA_ValidFlag 

No error occurred, this bit is 0.

Otherwise, it is 1.

Enumerator
kEDMA_ErrorInterruptEnable 

Enable interrupt while channel error occurs.

kEDMA_MajorInterruptEnable 

Enable interrupt while major count exhausted.

kEDMA_HalfInterruptEnable 

Enable interrupt while major count to half value.

Enumerator
kEDMA_MemoryToMemory 

Transfer from memory to memory.

kEDMA_PeripheralToMemory 

Transfer from peripheral to memory.

kEDMA_MemoryToPeripheral 

Transfer from memory to peripheral.

kEDMA_PeripheralToPeripheral 

Transfer from Peripheral to peripheral.

kEDMA_MemoryToMemory 

Transfer from memory to memory.

kEDMA_PeripheralToMemory 

Transfer from peripheral to memory.

kEDMA_MemoryToPeripheral 

Transfer from memory to peripheral.

kEDMA_PeripheralToPeripheral 

Transfer from Peripheral to peripheral.

anonymous enum
Enumerator
kStatus_EDMA_QueueFull 

TCD queue is full.

kStatus_EDMA_Busy 

Channel is busy and can't handle the transfer request.

anonymous enum
Enumerator
kStatus_EDMA_QueueFull 

TCD queue is full.

kStatus_EDMA_Busy 

Channel is busy and can't handle the transfer request.

Enumerator
kEDMA_TransferSize1Bytes 

Source/Destination data transfer size is 1 byte every time.

kEDMA_TransferSize2Bytes 

Source/Destination data transfer size is 2 bytes every time.

kEDMA_TransferSize4Bytes 

Source/Destination data transfer size is 4 bytes every time.

kEDMA_TransferSize8Bytes 

Source/Destination data transfer size is 8 bytes every time.

kEDMA_TransferSize16Bytes 

Source/Destination data transfer size is 16 bytes every time.

kEDMA_TransferSize32Bytes 

Source/Destination data transfer size is 32 bytes every time.

kEDMA_TransferSize1Bytes 

Source/Destination data transfer size is 1 byte every time.

kEDMA_TransferSize2Bytes 

Source/Destination data transfer size is 2 bytes every time.

kEDMA_TransferSize4Bytes 

Source/Destination data transfer size is 4 bytes every time.

kEDMA_TransferSize8Bytes 

Source/Destination data transfer size is 8 bytes every time.

kEDMA_TransferSize16Bytes 

Source/Destination data transfer size is 16 bytes every time.

kEDMA_TransferSize32Bytes 

Source/Destination data transfer size is 32 bytes every time.

kEDMA_TransferSize64Bytes 

Source/Destination data transfer size is 64 bytes every time.

kEDMA_TransferSize128Bytes 

Source/Destination data transfer size is 128 bytes every time.

Enumerator
kEDMA_ModuloDisable 

Disable modulo.

kEDMA_Modulo2bytes 

Circular buffer size is 2 bytes.

kEDMA_Modulo4bytes 

Circular buffer size is 4 bytes.

kEDMA_Modulo8bytes 

Circular buffer size is 8 bytes.

kEDMA_Modulo16bytes 

Circular buffer size is 16 bytes.

kEDMA_Modulo32bytes 

Circular buffer size is 32 bytes.

kEDMA_Modulo64bytes 

Circular buffer size is 64 bytes.

kEDMA_Modulo128bytes 

Circular buffer size is 128 bytes.

kEDMA_Modulo256bytes 

Circular buffer size is 256 bytes.

kEDMA_Modulo512bytes 

Circular buffer size is 512 bytes.

kEDMA_Modulo1Kbytes 

Circular buffer size is 1 K bytes.

kEDMA_Modulo2Kbytes 

Circular buffer size is 2 K bytes.

kEDMA_Modulo4Kbytes 

Circular buffer size is 4 K bytes.

kEDMA_Modulo8Kbytes 

Circular buffer size is 8 K bytes.

kEDMA_Modulo16Kbytes 

Circular buffer size is 16 K bytes.

kEDMA_Modulo32Kbytes 

Circular buffer size is 32 K bytes.

kEDMA_Modulo64Kbytes 

Circular buffer size is 64 K bytes.

kEDMA_Modulo128Kbytes 

Circular buffer size is 128 K bytes.

kEDMA_Modulo256Kbytes 

Circular buffer size is 256 K bytes.

kEDMA_Modulo512Kbytes 

Circular buffer size is 512 K bytes.

kEDMA_Modulo1Mbytes 

Circular buffer size is 1 M bytes.

kEDMA_Modulo2Mbytes 

Circular buffer size is 2 M bytes.

kEDMA_Modulo4Mbytes 

Circular buffer size is 4 M bytes.

kEDMA_Modulo8Mbytes 

Circular buffer size is 8 M bytes.

kEDMA_Modulo16Mbytes 

Circular buffer size is 16 M bytes.

kEDMA_Modulo32Mbytes 

Circular buffer size is 32 M bytes.

kEDMA_Modulo64Mbytes 

Circular buffer size is 64 M bytes.

kEDMA_Modulo128Mbytes 

Circular buffer size is 128 M bytes.

kEDMA_Modulo256Mbytes 

Circular buffer size is 256 M bytes.

kEDMA_Modulo512Mbytes 

Circular buffer size is 512 M bytes.

kEDMA_Modulo1Gbytes 

Circular buffer size is 1 G bytes.

kEDMA_Modulo2Gbytes 

Circular buffer size is 2 G bytes.

kEDMA_ModuloDisable 

Disable modulo.

kEDMA_Modulo2bytes 

Circular buffer size is 2 bytes.

kEDMA_Modulo4bytes 

Circular buffer size is 4 bytes.

kEDMA_Modulo8bytes 

Circular buffer size is 8 bytes.

kEDMA_Modulo16bytes 

Circular buffer size is 16 bytes.

kEDMA_Modulo32bytes 

Circular buffer size is 32 bytes.

kEDMA_Modulo64bytes 

Circular buffer size is 64 bytes.

kEDMA_Modulo128bytes 

Circular buffer size is 128 bytes.

kEDMA_Modulo256bytes 

Circular buffer size is 256 bytes.

kEDMA_Modulo512bytes 

Circular buffer size is 512 bytes.

kEDMA_Modulo1Kbytes 

Circular buffer size is 1 K bytes.

kEDMA_Modulo2Kbytes 

Circular buffer size is 2 K bytes.

kEDMA_Modulo4Kbytes 

Circular buffer size is 4 K bytes.

kEDMA_Modulo8Kbytes 

Circular buffer size is 8 K bytes.

kEDMA_Modulo16Kbytes 

Circular buffer size is 16 K bytes.

kEDMA_Modulo32Kbytes 

Circular buffer size is 32 K bytes.

kEDMA_Modulo64Kbytes 

Circular buffer size is 64 K bytes.

kEDMA_Modulo128Kbytes 

Circular buffer size is 128 K bytes.

kEDMA_Modulo256Kbytes 

Circular buffer size is 256 K bytes.

kEDMA_Modulo512Kbytes 

Circular buffer size is 512 K bytes.

kEDMA_Modulo1Mbytes 

Circular buffer size is 1 M bytes.

kEDMA_Modulo2Mbytes 

Circular buffer size is 2 M bytes.

kEDMA_Modulo4Mbytes 

Circular buffer size is 4 M bytes.

kEDMA_Modulo8Mbytes 

Circular buffer size is 8 M bytes.

kEDMA_Modulo16Mbytes 

Circular buffer size is 16 M bytes.

kEDMA_Modulo32Mbytes 

Circular buffer size is 32 M bytes.

kEDMA_Modulo64Mbytes 

Circular buffer size is 64 M bytes.

kEDMA_Modulo128Mbytes 

Circular buffer size is 128 M bytes.

kEDMA_Modulo256Mbytes 

Circular buffer size is 256 M bytes.

kEDMA_Modulo512Mbytes 

Circular buffer size is 512 M bytes.

kEDMA_Modulo1Gbytes 

Circular buffer size is 1 G bytes.

kEDMA_Modulo2Gbytes 

Circular buffer size is 2 G bytes.

Enumerator
kEDMA_BandwidthStallNone 

No eDMA engine stalls.

kEDMA_BandwidthStall4Cycle 

eDMA engine stalls for 4 cycles after each read/write.

kEDMA_BandwidthStall8Cycle 

eDMA engine stalls for 8 cycles after each read/write.

kEDMA_BandwidthStallNone 

No eDMA engine stalls.

kEDMA_BandwidthStall4Cycle 

eDMA engine stalls for 4 cycles after each read/write.

kEDMA_BandwidthStall8Cycle 

eDMA engine stalls for 8 cycles after each read/write.

Enumerator
kEDMA_LinkNone 

No channel link.

kEDMA_MinorLink 

Channel link after each minor loop.

kEDMA_MajorLink 

Channel link while major loop count exhausted.

kEDMA_LinkNone 

No channel link.

kEDMA_MinorLink 

Channel link after each minor loop.

kEDMA_MajorLink 

Channel link while major loop count exhausted.

anonymous enum
Enumerator
kEDMA_DoneFlag 

DONE flag, set while transfer finished, CITER value exhausted.

kEDMA_ErrorFlag 

eDMA error flag, an error occurred in a transfer

kEDMA_InterruptFlag 

eDMA interrupt flag, set while an interrupt occurred of this channel

anonymous enum
Enumerator
kEDMA_DestinationBusErrorFlag 

Bus error on destination address.

kEDMA_SourceBusErrorFlag 

Bus error on the source address.

kEDMA_ScatterGatherErrorFlag 

Error on the Scatter/Gather address, not 32byte aligned.

kEDMA_NbytesErrorFlag 

NBYTES/CITER configuration error.

kEDMA_DestinationOffsetErrorFlag 

Destination offset not aligned with destination size.

kEDMA_DestinationAddressErrorFlag 

Destination address not aligned with destination size.

kEDMA_SourceOffsetErrorFlag 

Source offset not aligned with source size.

kEDMA_SourceAddressErrorFlag 

Source address not aligned with source size.

kEDMA_ErrorChannelFlag 

Error channel number of the cancelled channel number.

kEDMA_TransferCanceledFlag 

Transfer cancelled.

kEDMA_ValidFlag 

No error occurred, this bit is 0.

Otherwise, it is 1.

anonymous enum
Enumerator
kEDMA_ErrorInterruptEnable 

Enable interrupt while channel error occurs.

kEDMA_MajorInterruptEnable 

Enable interrupt while major count exhausted.

kEDMA_HalfInterruptEnable 

Enable interrupt while major count to half value.

Enumerator
kEDMA_MemoryToMemory 

Transfer from memory to memory.

kEDMA_PeripheralToMemory 

Transfer from peripheral to memory.

kEDMA_MemoryToPeripheral 

Transfer from memory to peripheral.

kEDMA_PeripheralToPeripheral 

Transfer from Peripheral to peripheral.

kEDMA_MemoryToMemory 

Transfer from memory to memory.

kEDMA_PeripheralToMemory 

Transfer from peripheral to memory.

kEDMA_MemoryToPeripheral 

Transfer from memory to peripheral.

kEDMA_PeripheralToPeripheral 

Transfer from Peripheral to peripheral.

Enumerator
kEDMA_ChannelNoWriteNoReadNoCacheNoBuffer 

No write allocate, no read allocate, non-cacheable, non-bufferable.

kEDMA_ChannelNoWriteNoReadNoCacheBufferable 

No write allocate, no read allocate, non-cacheable, bufferable.

kEDMA_ChannelNoWriteNoReadCacheableNoBuffer 

No write allocate, no read allocate, cacheable, non-bufferable.

kEDMA_ChannelNoWriteNoReadCacheableBufferable 

No write allocate, no read allocate, cacheable, bufferable.

kEDMA_ChannelNoWriteReadNoCacheNoBuffer 

No write allocate, read allocate, non-cacheable, non-bufferable.

kEDMA_ChannelNoWriteReadNoCacheBufferable 

No write allocate, read allocate, non-cacheable, bufferable.

kEDMA_ChannelNoWriteReadCacheableNoBuffer 

No write allocate, read allocate, cacheable, non-bufferable.

kEDMA_ChannelNoWriteReadCacheableBufferable 

No write allocate, read allocate, cacheable, bufferable.

kEDMA_ChannelWriteNoReadNoCacheNoBuffer 

write allocate, no read allocate, non-cacheable, non-bufferable.

kEDMA_ChannelWriteNoReadNoCacheBufferable 

write allocate, no read allocate, non-cacheable, bufferable.

kEDMA_ChannelWriteNoReadCacheableNoBuffer 

write allocate, no read allocate, cacheable, non-bufferable.

kEDMA_ChannelWriteNoReadCacheableBufferable 

write allocate, no read allocate, cacheable, bufferable.

kEDMA_ChannelWriteReadNoCacheNoBuffer 

write allocate, read allocate, non-cacheable, non-bufferable.

kEDMA_ChannelWriteReadNoCacheBufferable 

write allocate, read allocate, non-cacheable, bufferable.

kEDMA_ChannelWriteReadCacheableNoBuffer 

write allocate, read allocate, cacheable, non-bufferable.

kEDMA_ChannelWriteReadCacheableBufferable 

write allocate, read allocate, cacheable, bufferable.

Enumerator
kEDMA_ChannelSwapDisabled 

Swap is disabled.

kEDMA_ChannelReadWith8bitSwap 

Swap occurs with respect to the read 8bit.

kEDMA_ChannelReadWith16bitSwap 

Swap occurs with respect to the read 16bit.

kEDMA_ChannelReadWith32bitSwap 

Swap occurs with respect to the read 32bit.

kEDMA_ChannelWriteWith8bitSwap 

Swap occurs with respect to the write 8bit.

kEDMA_ChannelWriteWith16bitSwap 

Swap occurs with respect to the write 16bit.

kEDMA_ChannelWriteWith32bitSwap 

Swap occurs with respect to the write 32bit.

anonymous enum
Enumerator
kEDMA_AttributeOutput 

DMA's AHB system bus attribute output value.

kEDMA_PrivilegedAccessLevel 

Privileged Access Level for DMA transfers.

0b - User protection level; 1b - Privileged protection level.

kEDMA_MasterId 

DMA's master ID when channel is active and master ID replication is enabled.

Enumerator
kEDMA_ChannelDataAccess 

Data access for eDMA4 transfers.

kEDMA_ChannelInstructionAccess 

Instruction access for eDMA4 transfers.

Enumerator
kEDMA_ChannelProtectionLevelUser 

user protection level for eDMA transfers.

kEDMA_ChannelProtectionLevelPrivileged 

Privileged protection level eDMA transfers.

Enumerator
kEDMA_ChannelSecurityLevelNonSecure 

non secure level for eDMA transfers.

kEDMA_ChannelSecurityLevelSecure 

secure level for eDMA transfers.

Function Documentation

void EDMA_Init ( DMA_Type *  base,
const edma_config_t config 
)

This function ungates the eDMA clock and configures the eDMA peripheral according to the configuration structure.

Parameters
baseeDMA peripheral base address.
configA pointer to the configuration structure, see "edma_config_t".
Note
This function enables the minor loop map feature.
void EDMA_Deinit ( DMA_Type *  base)

This function gates the eDMA clock.

Parameters
baseeDMA peripheral base address.
void EDMA_InstallTCD ( DMA_Type *  base,
uint32_t  channel,
edma_tcd_t tcd 
)
Parameters
baseEDMA peripheral base address.
channelEDMA channel number.
tcdPoint to TCD structure.
void EDMA_GetDefaultConfig ( edma_config_t config)

This function sets the configuration structure to default values. The default configuration is set to the following values.

* config.enableContinuousLinkMode = false;
* config.enableHaltOnError = true;
* config.enableRoundRobinArbitration = false;
* config.enableDebugMode = false;
*
Parameters
configA pointer to the eDMA configuration structure.
static void EDMA_EnableContinuousChannelLinkMode ( DMA_Type *  base,
bool  enable 
)
inlinestatic
Note
Do not use continuous link mode with a channel linking to itself if there is only one minor loop iteration per service request, for example, if the channel's NBYTES value is the same as either the source or destination size. The same data transfer profile can be achieved by simply increasing the NBYTES value, which provides more efficient, faster processing.
Parameters
baseEDMA peripheral base address.
enabletrue is enable, false is disable.
static void EDMA_EnableMinorLoopMapping ( DMA_Type *  base,
bool  enable 
)
inlinestatic

The TCDn.word2 is redefined to include individual enable fields, an offset field, and the NBYTES field.

Parameters
baseEDMA peripheral base address.
enabletrue is enable, false is disable.
void EDMA_ResetChannel ( DMA_Type *  base,
uint32_t  channel 
)

This function sets TCD registers for this channel to default values.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
Note
This function must not be called while the channel transfer is ongoing or it causes unpredictable results.
This function enables the auto stop request feature.
void EDMA_SetTransferConfig ( DMA_Type *  base,
uint32_t  channel,
const edma_transfer_config_t config,
edma_tcd_t nextTcd 
)

This function configures the transfer attribute, including source address, destination address, transfer size, address offset, and so on. It also configures the scatter gather feature if the user supplies the TCD address. Example:

* edma_transfer_t config;
* edma_tcd_t tcd;
* config.srcAddr = ..;
* config.destAddr = ..;
* ...
* EDMA_SetTransferConfig(DMA0, channel, &config, &stcd);
*
Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
configPointer to eDMA transfer configuration structure.
nextTcdPoint to TCD structure. It can be NULL if users do not want to enable scatter/gather feature.
Note
If nextTcd is not NULL, it means scatter gather feature is enabled and DREQ bit is cleared in the previous transfer configuration, which is set in the eDMA_ResetChannel.
void EDMA_SetMinorOffsetConfig ( DMA_Type *  base,
uint32_t  channel,
const edma_minor_offset_config_t config 
)

The minor offset means that the signed-extended value is added to the source address or destination address after each minor loop.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
configA pointer to the minor offset configuration structure.
void EDMA_SetChannelPreemptionConfig ( DMA_Type *  base,
uint32_t  channel,
const edma_channel_Preemption_config_t config 
)

This function configures the channel preemption attribute and the priority of the channel.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number
configA pointer to the channel preemption configuration structure.
void EDMA_SetChannelLink ( DMA_Type *  base,
uint32_t  channel,
edma_channel_link_type_t  linkType,
uint32_t  linkedChannel 
)

This function configures either the minor link or the major link mode. The minor link means that the channel link is triggered every time CITER decreases by 1. The major link means that the channel link is triggered when the CITER is exhausted.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
linkTypeA channel link type, which can be one of the following:
  • kEDMA_LinkNone
  • kEDMA_MinorLink
  • kEDMA_MajorLink
linkedChannelThe linked channel number.
Note
Users should ensure that DONE flag is cleared before calling this interface, or the configuration is invalid.
void EDMA_SetBandWidth ( DMA_Type *  base,
uint32_t  channel,
edma_bandwidth_t  bandWidth 
)

Because the eDMA processes the minor loop, it continuously generates read/write sequences until the minor count is exhausted. The bandwidth forces the eDMA to stall after the completion of each read/write access to control the bus request bandwidth seen by the crossbar switch.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
bandWidthA bandwidth setting, which can be one of the following:
  • kEDMABandwidthStallNone
  • kEDMABandwidthStall4Cycle
  • kEDMABandwidthStall8Cycle
void EDMA_SetModulo ( DMA_Type *  base,
uint32_t  channel,
edma_modulo_t  srcModulo,
edma_modulo_t  destModulo 
)

This function defines a specific address range specified to be the value after (SADDR + SOFF)/(DADDR + DOFF) calculation is performed or the original register value. It provides the ability to implement a circular data queue easily.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
srcModuloA source modulo value.
destModuloA destination modulo value.
static void EDMA_EnableAutoStopRequest ( DMA_Type *  base,
uint32_t  channel,
bool  enable 
)
inlinestatic

If enabling the auto stop request, the eDMA hardware automatically disables the hardware channel request.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
enableThe command to enable (true) or disable (false).
void EDMA_EnableChannelInterrupts ( DMA_Type *  base,
uint32_t  channel,
uint32_t  mask 
)
Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
maskThe mask of interrupt source to be set. Users need to use the defined edma_interrupt_enable_t type.
void EDMA_DisableChannelInterrupts ( DMA_Type *  base,
uint32_t  channel,
uint32_t  mask 
)
Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
maskThe mask of the interrupt source to be set. Use the defined edma_interrupt_enable_t type.
void EDMA_SetMajorOffsetConfig ( DMA_Type *  base,
uint32_t  channel,
int32_t  sourceOffset,
int32_t  destOffset 
)

Adjustment value added to the source address at the completion of the major iteration count

Parameters
baseeDMA peripheral base address.
channeledma channel number.
sourceOffsetsource address offset will be applied to source address after major loop done.
destOffsetdestination address offset will be applied to source address after major loop done.
void EDMA_TcdReset ( edma_tcd_t tcd)

This function sets all fields for this TCD structure to default value.

Parameters
tcdPointer to the TCD structure.
Note
This function enables the auto stop request feature.

This API only supports EDMA4 TCD type. It can be used to support all types with extension API EDMA_TcdResetExt

This function sets all fields for this TCD structure to default value.

Parameters
tcdPointer to the TCD structure.
Note
This function enables the auto stop request feature.
void EDMA_TcdSetTransferConfig ( edma_tcd_t tcd,
const edma_transfer_config_t config,
edma_tcd_t nextTcd 
)

The TCD is a transfer control descriptor. The content of the TCD is the same as the hardware TCD registers. The TCD is used in the scatter-gather mode. This function configures the TCD transfer attribute, including source address, destination address, transfer size, address offset, and so on. It also configures the scatter gather feature if the user supplies the next TCD address. Example:

* edma_transfer_t config = {
* ...
* }
* edma_tcd_t tcd __aligned(32);
* edma_tcd_t nextTcd __aligned(32);
* EDMA_TcdSetTransferConfig(&tcd, &config, &nextTcd);
*
Parameters
tcdPointer to the TCD structure.
configPointer to eDMA transfer configuration structure.
nextTcdPointer to the next TCD structure. It can be NULL if users do not want to enable scatter/gather feature.
Note
TCD address should be 32 bytes aligned or it causes an eDMA error.
If the nextTcd is not NULL, the scatter gather feature is enabled and DREQ bit is cleared in the previous transfer configuration, which is set in the EDMA_TcdReset.

This API only supports EDMA4 TCD type. It can be used to support all types with extension API EDMA_TcdSetTransferConfigExt

The TCD is a transfer control descriptor. The content of the TCD is the same as the hardware TCD registers. The TCD is used in the scatter-gather mode. This function configures the TCD transfer attribute, including source address, destination address, transfer size, address offset, and so on. It also configures the scatter gather feature if the user supplies the next TCD address. Example:

* edma_transfer_t config = {
* ...
* }
* edma_tcd_t tcd __aligned(32);
* edma_tcd_t nextTcd __aligned(32);
* EDMA_TcdSetTransferConfig(&tcd, &config, &nextTcd);
*
Parameters
tcdPointer to the TCD structure.
configPointer to eDMA transfer configuration structure.
nextTcdPointer to the next TCD structure. It can be NULL if users do not want to enable scatter/gather feature.
Note
TCD address should be 32 bytes aligned or it causes an eDMA error.
If the nextTcd is not NULL, the scatter gather feature is enabled and DREQ bit is cleared in the previous transfer configuration, which is set in the EDMA_TcdReset.
void EDMA_TcdSetMinorOffsetConfig ( edma_tcd_t tcd,
const edma_minor_offset_config_t config 
)

A minor offset is a signed-extended value added to the source address or a destination address after each minor loop.

Parameters
tcdA point to the TCD structure.
configA pointer to the minor offset configuration structure.

This API only supports EDMA4 TCD type. It can be used to support all types with extension API EDMA_TcdSetMinorOffsetConfigExt

A minor offset is a signed-extended value added to the source address or a destination address after each minor loop.

Parameters
tcdA point to the TCD structure.
configA pointer to the minor offset configuration structure.
void EDMA_TcdSetChannelLink ( edma_tcd_t tcd,
edma_channel_link_type_t  linkType,
uint32_t  linkedChannel 
)

This function configures either a minor link or a major link. The minor link means the channel link is triggered every time CITER decreases by 1. The major link means that the channel link is triggered when the CITER is exhausted.

Note
Users should ensure that DONE flag is cleared before calling this interface, or the configuration is invalid.
Parameters
tcdPoint to the TCD structure.
linkTypeChannel link type, it can be one of:
  • kEDMA_LinkNone
  • kEDMA_MinorLink
  • kEDMA_MajorLink
linkedChannelThe linked channel number.

This API only supports EDMA4 TCD type. It can be used to support all types with extension API EDMA_TcdSetChannelLinkExt

This function configures either a minor link or a major link. The minor link means the channel link is triggered every time CITER decreases by 1. The major link means that the channel link is triggered when the CITER is exhausted.

Note
Users should ensure that DONE flag is cleared before calling this interface, or the configuration is invalid.
Parameters
tcdPoint to the TCD structure.
typeChannel link type, it can be one of:
  • kEDMA_LinkNone
  • kEDMA_MinorLink
  • kEDMA_MajorLink
linkedChannelThe linked channel number.
static void EDMA_TcdSetBandWidth ( edma_tcd_t tcd,
edma_bandwidth_t  bandWidth 
)
inlinestatic

Because the eDMA processes the minor loop, it continuously generates read/write sequences until the minor count is exhausted. The bandwidth forces the eDMA to stall after the completion of each read/write access to control the bus request bandwidth seen by the crossbar switch.

Parameters
tcdA pointer to the TCD structure.
bandWidthA bandwidth setting, which can be one of the following:
  • kEDMABandwidthStallNone
  • kEDMABandwidthStall4Cycle
  • kEDMABandwidthStall8Cycle
void EDMA_TcdSetModulo ( edma_tcd_t tcd,
edma_modulo_t  srcModulo,
edma_modulo_t  destModulo 
)

This function defines a specific address range specified to be the value after (SADDR + SOFF)/(DADDR + DOFF) calculation is performed or the original register value. It provides the ability to implement a circular data queue easily.

Parameters
tcdA pointer to the TCD structure.
srcModuloA source modulo value.
destModuloA destination modulo value.

This API only supports EDMA4 TCD type. It can be used to support all types with extension API EDMA_TcdSetModuloExt

This function defines a specific address range specified to be the value after (SADDR + SOFF)/(DADDR + DOFF) calculation is performed or the original register value. It provides the ability to implement a circular data queue easily.

Parameters
tcdA pointer to the TCD structure.
srcModuloA source modulo value.
destModuloA destination modulo value.
static void EDMA_TcdEnableAutoStopRequest ( edma_tcd_t tcd,
bool  enable 
)
inlinestatic

If enabling the auto stop request, the eDMA hardware automatically disables the hardware channel request.

Parameters
tcdA pointer to the TCD structure.
enableThe command to enable (true) or disable (false).
void EDMA_TcdEnableInterrupts ( edma_tcd_t tcd,
uint32_t  mask 
)
Parameters
tcdPoint to the TCD structure.
maskThe mask of interrupt source to be set. Users need to use the defined edma_interrupt_enable_t type.

This API only supports EDMA4 TCD type. It can be used to support all types with extension API EDMA_TcdEnableInterruptsExt

Parameters
tcdPoint to the TCD structure.
maskThe mask of interrupt source to be set. Users need to use the defined edma_interrupt_enable_t type.
void EDMA_TcdDisableInterrupts ( edma_tcd_t tcd,
uint32_t  mask 
)
Parameters
tcdPoint to the TCD structure.
maskThe mask of interrupt source to be set. Users need to use the defined edma_interrupt_enable_t type.

This API only supports EDMA4 TCD type. It can be used to support all types with extension API EDMA_TcdDisableInterruptsExt

Parameters
tcdPoint to the TCD structure.
maskThe mask of interrupt source to be set. Users need to use the defined edma_interrupt_enable_t type.
void EDMA_TcdSetMajorOffsetConfig ( edma_tcd_t tcd,
int32_t  sourceOffset,
int32_t  destOffset 
)

Adjustment value added to the source address at the completion of the major iteration count

Parameters
tcdA point to the TCD structure.
sourceOffsetsource address offset wiil be applied to source address after major loop done.
destOffsetdestination address offset will be applied to source address after major loop done.

This API only supports EDMA4 TCD type. It can be used to support all types with extension API EDMA_TcdSetMajorOffsetConfigExt

Adjustment value added to the source address at the completion of the major iteration count

Parameters
tcdA point to the TCD structure.
sourceOffsetsource address offset wiil be applied to source address after major loop done.
destOffsetdestination address offset will be applied to source address after major loop done.
static void EDMA_EnableChannelRequest ( DMA_Type *  base,
uint32_t  channel 
)
inlinestatic

This function enables the hardware channel request.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
static void EDMA_DisableChannelRequest ( DMA_Type *  base,
uint32_t  channel 
)
inlinestatic

This function disables the hardware channel request.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
static void EDMA_TriggerChannelStart ( DMA_Type *  base,
uint32_t  channel 
)
inlinestatic

This function starts a minor loop transfer.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
uint32_t EDMA_GetRemainingMajorLoopCount ( DMA_Type *  base,
uint32_t  channel 
)

This function checks the TCD (Task Control Descriptor) status for a specified eDMA channel and returns the number of major loop count that has not finished.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
Returns
Major loop count which has not been transferred yet for the current TCD.
Note
1. This function can only be used to get unfinished major loop count of transfer without the next TCD, or it might be inaccuracy.
  1. The unfinished/remaining transfer bytes cannot be obtained directly from registers while the channel is running. Because to calculate the remaining bytes, the initial NBYTES configured in DMA_TCDn_NBYTES_MLNO register is needed while the eDMA IP does not support getting it while a channel is active. In another word, the NBYTES value reading is always the actual (decrementing) NBYTES value the dma_engine is working with while a channel is running. Consequently, to get the remaining transfer bytes, a software-saved initial value of NBYTES (for example copied before enabling the channel) is needed. The formula to calculate it is shown below: RemainingBytes = RemainingMajorLoopCount * NBYTES(initially configured)
static uint32_t EDMA_GetErrorStatusFlags ( DMA_Type *  base)
inlinestatic
Parameters
baseeDMA peripheral base address.
Returns
The mask of error status flags. Users need to use the _edma_error_status_flags type to decode the return variables.
uint32_t EDMA_GetChannelStatusFlags ( DMA_Type *  base,
uint32_t  channel 
)
Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
Returns
The mask of channel status flags. Users need to use the _edma_channel_status_flags type to decode the return variables.
void EDMA_ClearChannelStatusFlags ( DMA_Type *  base,
uint32_t  channel,
uint32_t  mask 
)
Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
maskThe mask of channel status to be cleared. Users need to use the defined _edma_channel_status_flags type.
void EDMA_CreateHandle ( edma_handle_t handle,
DMA_Type *  base,
uint32_t  channel 
)

This function is called if using the transactional API for eDMA. This function initializes the internal state of the eDMA handle.

Parameters
handleeDMA handle pointer. The eDMA handle stores callback function and parameters.
baseeDMA peripheral base address.
channeleDMA channel number.
void EDMA_InstallTCDMemory ( edma_handle_t handle,
edma_tcd_t tcdPool,
uint32_t  tcdSize 
)

This function is called after the EDMA_CreateHandle to use scatter/gather feature. This function shall only be used while users need to use scatter gather mode. Scatter gather mode enables EDMA to load a new transfer control block (tcd) in hardware, and automatically reconfigure that DMA channel for a new transfer. Users need to prepare tcd memory and also configure tcds using interface EDMA_SubmitTransfer.

Parameters
handleeDMA handle pointer.
tcdPoolA memory pool to store TCDs. It must be 32 bytes aligned.
tcdSizeThe number of TCD slots.
void EDMA_SetCallback ( edma_handle_t handle,
edma_callback  callback,
void *  userData 
)

This callback is called in the eDMA IRQ handler. Use the callback to do something after the current major loop transfer completes. This function will be called every time one tcd finished transfer.

Parameters
handleeDMA handle pointer.
callbackeDMA callback function pointer.
userDataA parameter for the callback function.
void EDMA_PrepareTransferConfig ( edma_transfer_config_t config,
void *  srcAddr,
uint32_t  srcWidth,
int16_t  srcOffset,
void *  destAddr,
uint32_t  destWidth,
int16_t  destOffset,
uint32_t  bytesEachRequest,
uint32_t  transferBytes 
)

This function prepares the transfer configuration structure according to the user input.

Parameters
configThe user configuration structure of type edma_transfer_t.
srcAddreDMA transfer source address.
srcWidtheDMA transfer source address width(bytes).
srcOffsetsource address offset.
destAddreDMA transfer destination address.
destWidtheDMA transfer destination address width(bytes).
destOffsetdestination address offset.
bytesEachRequesteDMA transfer bytes per channel request.
transferByteseDMA transfer bytes to be transferred.
Note
The data address and the data width must be consistent. For example, if the SRC is 4 bytes, the source address must be 4 bytes aligned, or it results in source address error (SAE).

This function prepares the transfer configuration structure according to the user input.

Parameters
configThe user configuration structure of type edma_transfer_t.
srcAddreDMA transfer source address.
srcWidtheDMA transfer source address width(bytes).
srcOffsetsource address offset.
destAddreDMA transfer destination address.
destWidtheDMA transfer destination address width(bytes).
destOffsetdestination address offset.
bytesEachRequesteDMA transfer bytes per channel request.
transferByteseDMA transfer bytes to be transferred.
Note
The data address and the data width must be consistent. For example, if the SRC is 4 bytes, the source address must be 4 bytes aligned, or it results in source address error (SAE). User can check if 128 bytes support is available for specific instance by FSL_FEATURE_EDMA_INSTANCE_SUPPORT_128_BYTES_TRANSFERn.
void EDMA_PrepareTransfer ( edma_transfer_config_t config,
void *  srcAddr,
uint32_t  srcWidth,
void *  destAddr,
uint32_t  destWidth,
uint32_t  bytesEachRequest,
uint32_t  transferBytes,
edma_transfer_type_t  transferType 
)

This function prepares the transfer configuration structure according to the user input.

Parameters
configThe user configuration structure of type edma_transfer_t.
srcAddreDMA transfer source address.
srcWidtheDMA transfer source address width(bytes).
destAddreDMA transfer destination address.
destWidtheDMA transfer destination address width(bytes).
bytesEachRequesteDMA transfer bytes per channel request.
transferByteseDMA transfer bytes to be transferred.
transferTypeeDMA transfer type.
Note
The data address and the data width must be consistent. For example, if the SRC is 4 bytes, the source address must be 4 bytes aligned, or it results in source address error (SAE).

This function prepares the transfer configuration structure according to the user input.

Parameters
configThe user configuration structure of type edma_transfer_t.
srcAddreDMA transfer source address.
srcWidtheDMA transfer source address width(bytes).
destAddreDMA transfer destination address.
destWidtheDMA transfer destination address width(bytes).
bytesEachRequesteDMA transfer bytes per channel request.
transferByteseDMA transfer bytes to be transferred.
typeeDMA transfer type.
Note
The data address and the data width must be consistent. For example, if the SRC is 4 bytes, the source address must be 4 bytes aligned, or it results in source address error (SAE).
status_t EDMA_SubmitTransfer ( edma_handle_t handle,
const edma_transfer_config_t config 
)

This function submits the eDMA transfer request according to the transfer configuration structure. In scatter gather mode, call this function will add a configured tcd to the circular list of tcd pool. The tcd pools is setup by call function EDMA_InstallTCDMemory before.

Parameters
handleeDMA handle pointer.
configPointer to eDMA transfer configuration structure.
Return values
kStatus_EDMA_SuccessIt means submit transfer request succeed.
kStatus_EDMA_QueueFullIt means TCD queue is full. Submit transfer request is not allowed.
kStatus_EDMA_BusyIt means the given channel is busy, need to submit request later.
void EDMA_StartTransfer ( edma_handle_t handle)

This function enables the channel request. Users can call this function after submitting the transfer request or before submitting the transfer request.

Parameters
handleeDMA handle pointer.
void EDMA_StopTransfer ( edma_handle_t handle)

This function disables the channel request to pause the transfer. Users can call EDMA_StartTransfer() again to resume the transfer.

Parameters
handleeDMA handle pointer.
void EDMA_AbortTransfer ( edma_handle_t handle)

This function disables the channel request and clear transfer status bits. Users can submit another transfer after calling this API.

Parameters
handleDMA handle pointer.
static uint32_t EDMA_GetUnusedTCDNumber ( edma_handle_t handle)
inlinestatic

This function gets current tcd index which is run. If the TCD pool pointer is NULL, it will return 0.

Parameters
handleDMA handle pointer.
Returns
The unused tcd slot number.
static uint32_t EDMA_GetNextTCDAddress ( edma_handle_t handle)
inlinestatic

This function gets the next tcd address. If this is last TCD, return 0.

Parameters
handleDMA handle pointer.
Returns
The next TCD address.
void EDMA_HandleIRQ ( edma_handle_t handle)

This function clears the channel major interrupt flag and calls the callback function if it is not NULL.

Note: For the case using TCD queue, when the major iteration count is exhausted, additional operations are performed. These include the final address adjustments and reloading of the BITER field into the CITER. Assertion of an optional interrupt request also occurs at this time, as does a possible fetch of a new TCD from memory using the scatter/gather address pointer included in the descriptor (if scatter/gather is enabled).

For instance, when the time interrupt of TCD[0] happens, the TCD[1] has already been loaded into the eDMA engine. As sga and sga_index are calculated based on the DLAST_SGA bitfield lies in the TCD_CSR register, the sga_index in this case should be 2 (DLAST_SGA of TCD[1] stores the address of TCD[2]). Thus, the "tcdUsed" updated should be (tcdUsed - 2U) which indicates the number of TCDs can be loaded in the memory pool (because TCD[0] and TCD[1] have been loaded into the eDMA engine at this point already.).

For the last two continuous ISRs in a scatter/gather process, they both load the last TCD (The last ISR does not load a new TCD) from the memory pool to the eDMA engine when major loop completes. Therefore, ensure that the header and tcdUsed updated are identical for them. tcdUsed are both 0 in this case as no TCD to be loaded.

See the "eDMA basic data flow" in the eDMA Functional description section of the Reference Manual for further details.

Parameters
handleeDMA handle pointer.
void EDMA_Init ( EDMA_Type *  base,
const edma_config_t config 
)

This function ungates the eDMA clock and configures the eDMA peripheral according to the configuration structure.

Parameters
baseeDMA peripheral base address.
configA pointer to the configuration structure, see "edma_config_t".
Note
This function enables the minor loop map feature.
void EDMA_Deinit ( EDMA_Type *  base)

This function gates the eDMA clock.

Parameters
baseeDMA peripheral base address.
void EDMA_InstallTCD ( EDMA_Type *  base,
uint32_t  channel,
edma_tcd_t tcd 
)
Parameters
baseEDMA peripheral base address.
channelEDMA channel number.
tcdPoint to TCD structure.
void EDMA_InitChannel ( EDMA_Type *  base,
uint32_t  channel,
edma_channel_config_t channelConfig 
)
Parameters
baseeDMA4 peripheral base address.
channeleDMA4 channel number.
channelConfigpointer to user's eDMA4 channel config structure, see edma_channel_config_t for detail.
static void EDMA_SetChannelMemoryAttribute ( EDMA_Type *  base,
uint32_t  channel,
edma_channel_memory_attribute_t  writeAttribute,
edma_channel_memory_attribute_t  readAttribute 
)
inlinestatic
Parameters
baseeDMA4 peripheral base address.
channeleDMA4 channel number.
writeAttributeAttributes associated with a write transaction.
readAttributeAttributes associated with a read transaction.
static void EDMA_SetChannelSignExtension ( EDMA_Type *  base,
uint32_t  channel,
uint8_t  position 
)
inlinestatic
Parameters
baseeDMA4 peripheral base address.
channeleDMA4 channel number.
positionA non-zero value specifing the sign extend bit position. If 0, sign extension is disabled.
static void EDMA_SetChannelSwapSize ( EDMA_Type *  base,
uint32_t  channel,
edma_channel_swap_size_t  swapSize 
)
inlinestatic
Parameters
baseeDMA4 peripheral base address.
channeleDMA4 channel number.
swapSizeSwap occurs with respect to the specified transfer size. If 0, swap is disabled.
static void EDMA_SetChannelAccessType ( EDMA_Type *  base,
uint32_t  channel,
edma_channel_access_type_t  channelAccessType 
)
inlinestatic
Parameters
baseeDMA4 peripheral base address.
channeleDMA4 channel number.
channelAccessTypeeDMA4's transactions type on the system bus when the channel is active.
static void EDMA_SetChannelMux ( EDMA_Type *  base,
uint32_t  channel,
int32_t  channelRequestSource 
)
inlinestatic
Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
channelRequestSourceeDMA hardware service request source for the channel. User need to use the dma_request_source_t type as the input parameter. Note that devices may use other enum type to express dma request source and User can fined it in SOC header or fsl_edma_soc.h.
static uint32_t EDMA_GetChannelSystemBusInformation ( EDMA_Type *  base,
uint32_t  channel 
)
inlinestatic
Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
Returns
The mask of the channel system bus information. Users need to use the _edma_channel_sys_bus_info type to decode the return variables.
static void EDMA_EnableChannelMasterIDReplication ( EDMA_Type *  base,
uint32_t  channel,
bool  enable 
)
inlinestatic
Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
enabletrue is enable, false is disable.
static void EDMA_SetChannelSecurityLevel ( EDMA_Type *  base,
uint32_t  channel,
edma_channel_security_level_t  level 
)
inlinestatic
Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
levelsecurity level.
static void EDMA_SetChannelProtectionLevel ( EDMA_Type *  base,
uint32_t  channel,
edma_channel_protection_level_t  level 
)
inlinestatic
Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
levelsecurity level.
void EDMA_ResetChannel ( EDMA_Type *  base,
uint32_t  channel 
)

This function sets TCD registers for this channel to default values.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
Note
This function must not be called while the channel transfer is ongoing or it causes unpredictable results.
This function enables the auto stop request feature.
void EDMA_SetTransferConfig ( EDMA_Type *  base,
uint32_t  channel,
const edma_transfer_config_t config,
edma_tcd_t nextTcd 
)

This function configures the transfer attribute, including source address, destination address, transfer size, address offset, and so on. It also configures the scatter gather feature if the user supplies the TCD address. Example:

* edma_transfer_t config;
* edma_tcd_t tcd;
* config.srcAddr = ..;
* config.destAddr = ..;
* ...
* EDMA_SetTransferConfig(DMA0, channel, &config, &stcd);
*
Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
configPointer to eDMA transfer configuration structure.
nextTcdPoint to TCD structure. It can be NULL if users do not want to enable scatter/gather feature.
Note
If nextTcd is not NULL, it means scatter gather feature is enabled and DREQ bit is cleared in the previous transfer configuration, which is set in the eDMA_ResetChannel.
void EDMA_SetMinorOffsetConfig ( EDMA_Type *  base,
uint32_t  channel,
const edma_minor_offset_config_t config 
)

The minor offset means that the signed-extended value is added to the source address or destination address after each minor loop.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
configA pointer to the minor offset configuration structure.
void EDMA_SetChannelPreemptionConfig ( EDMA_Type *  base,
uint32_t  channel,
const edma_channel_Preemption_config_t config 
)

This function configures the channel preemption attribute and the priority of the channel.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number
configA pointer to the channel preemption configuration structure.
void EDMA_SetChannelLink ( EDMA_Type *  base,
uint32_t  channel,
edma_channel_link_type_t  type,
uint32_t  linkedChannel 
)

This function configures either the minor link or the major link mode. The minor link means that the channel link is triggered every time CITER decreases by 1. The major link means that the channel link is triggered when the CITER is exhausted.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
typeA channel link type, which can be one of the following:
  • kEDMA_LinkNone
  • kEDMA_MinorLink
  • kEDMA_MajorLink
linkedChannelThe linked channel number.
Note
Users should ensure that DONE flag is cleared before calling this interface, or the configuration is invalid.
void EDMA_SetBandWidth ( EDMA_Type *  base,
uint32_t  channel,
edma_bandwidth_t  bandWidth 
)

Because the eDMA processes the minor loop, it continuously generates read/write sequences until the minor count is exhausted. The bandwidth forces the eDMA to stall after the completion of each read/write access to control the bus request bandwidth seen by the crossbar switch.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
bandWidthA bandwidth setting, which can be one of the following:
  • kEDMABandwidthStallNone
  • kEDMABandwidthStall4Cycle
  • kEDMABandwidthStall8Cycle
void EDMA_SetModulo ( EDMA_Type *  base,
uint32_t  channel,
edma_modulo_t  srcModulo,
edma_modulo_t  destModulo 
)

This function defines a specific address range specified to be the value after (SADDR + SOFF)/(DADDR + DOFF) calculation is performed or the original register value. It provides the ability to implement a circular data queue easily.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
srcModuloA source modulo value.
destModuloA destination modulo value.
static void EDMA_EnableAutoStopRequest ( EDMA_Type *  base,
uint32_t  channel,
bool  enable 
)
inlinestatic

If enabling the auto stop request, the eDMA hardware automatically disables the hardware channel request.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
enableThe command to enable (true) or disable (false).
void EDMA_EnableChannelInterrupts ( EDMA_Type *  base,
uint32_t  channel,
uint32_t  mask 
)
Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
maskThe mask of interrupt source to be set. Users need to use the defined edma_interrupt_enable_t type.
void EDMA_DisableChannelInterrupts ( EDMA_Type *  base,
uint32_t  channel,
uint32_t  mask 
)
Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
maskThe mask of the interrupt source to be set. Use the defined edma_interrupt_enable_t type.
void EDMA_SetMajorOffsetConfig ( EDMA_Type *  base,
uint32_t  channel,
int32_t  sourceOffset,
int32_t  destOffset 
)

Adjustment value added to the source address at the completion of the major iteration count

Parameters
baseeDMA peripheral base address.
channeledma channel number.
sourceOffsetsource address offset will be applied to source address after major loop done.
destOffsetdestination address offset will be applied to source address after major loop done.
void EDMA_ConfigChannelSoftwareTCD ( edma_tcd_t tcd,
const edma_transfer_config_t transfer 
)

This API only supports EDMA4 TCD type. It can be used to support all types with extension API EDMA_ConfigChannelSoftwareTCDExt

Application should be careful about the TCD pool buffer storage class,

  • For the platform has cache, the software TCD should be put in non cache section
  • The TCD pool buffer should have a consistent storage class.
Parameters
tcdPointer to the TCD structure.
transferchannel transfer configuration pointer.
Note
This function enables the auto stop request feature.
void EDMA_ConfigChannelSoftwareTCDExt ( EDMA_Type *  base,
edma_tcd_t tcd,
const edma_transfer_config_t transfer 
)

Application should be careful about the TCD pool buffer storage class,

  • For the platform has cache, the software TCD should be put in non cache section
  • The TCD pool buffer should have a consistent storage class.
Parameters
baseeDMA peripheral base address.
tcdPointer to the TCD structure.
transferchannel transfer configuration pointer.
Note
This function enables the auto stop request feature.
void EDMA_TcdResetExt ( EDMA_Type *  base,
edma_tcd_t tcd 
)

This function sets all fields for this TCD structure to default value.

Parameters
baseeDMA peripheral base address.
tcdPointer to the TCD structure.
Note
This function enables the auto stop request feature.
void EDMA_TcdSetTransferConfigExt ( EDMA_Type *  base,
edma_tcd_t tcd,
const edma_transfer_config_t config,
edma_tcd_t nextTcd 
)

The TCD is a transfer control descriptor. The content of the TCD is the same as the hardware TCD registers. The TCD is used in the scatter-gather mode. This function configures the TCD transfer attribute, including source address, destination address, transfer size, address offset, and so on. It also configures the scatter gather feature if the user supplies the next TCD address. Example:

* edma_transfer_t config = {
* ...
* }
* edma_tcd_t tcd __aligned(32);
* edma_tcd_t nextTcd __aligned(32);
* EDMA_TcdSetTransferConfig(&tcd, &config, &nextTcd);
*
Parameters
baseeDMA peripheral base address.
tcdPointer to the TCD structure.
configPointer to eDMA transfer configuration structure.
nextTcdPointer to the next TCD structure. It can be NULL if users do not want to enable scatter/gather feature.
Note
TCD address should be 32 bytes aligned or it causes an eDMA error.
If the nextTcd is not NULL, the scatter gather feature is enabled and DREQ bit is cleared in the previous transfer configuration, which is set in the EDMA_TcdReset.
void EDMA_TcdSetMinorOffsetConfigExt ( EDMA_Type *  base,
edma_tcd_t tcd,
const edma_minor_offset_config_t config 
)

A minor offset is a signed-extended value added to the source address or a destination address after each minor loop.

Parameters
baseeDMA peripheral base address.
tcdA point to the TCD structure.
configA pointer to the minor offset configuration structure.
void EDMA_TcdSetChannelLinkExt ( EDMA_Type *  base,
edma_tcd_t tcd,
edma_channel_link_type_t  type,
uint32_t  linkedChannel 
)

This function configures either a minor link or a major link. The minor link means the channel link is triggered every time CITER decreases by 1. The major link means that the channel link is triggered when the CITER is exhausted.

Note
Users should ensure that DONE flag is cleared before calling this interface, or the configuration is invalid.
Parameters
baseeDMA peripheral base address.
tcdPoint to the TCD structure.
typeChannel link type, it can be one of:
  • kEDMA_LinkNone
  • kEDMA_MinorLink
  • kEDMA_MajorLink
linkedChannelThe linked channel number.
static void EDMA_TcdSetBandWidthExt ( EDMA_Type *  base,
edma_tcd_t tcd,
edma_bandwidth_t  bandWidth 
)
inlinestatic

Because the eDMA processes the minor loop, it continuously generates read/write sequences until the minor count is exhausted. The bandwidth forces the eDMA to stall after the completion of each read/write access to control the bus request bandwidth seen by the crossbar switch.

Parameters
baseeDMA peripheral base address.
tcdA pointer to the TCD structure.
bandWidthA bandwidth setting, which can be one of the following:
  • kEDMABandwidthStallNone
  • kEDMABandwidthStall4Cycle
  • kEDMABandwidthStall8Cycle
void EDMA_TcdSetModuloExt ( EDMA_Type *  base,
edma_tcd_t tcd,
edma_modulo_t  srcModulo,
edma_modulo_t  destModulo 
)

This function defines a specific address range specified to be the value after (SADDR + SOFF)/(DADDR + DOFF) calculation is performed or the original register value. It provides the ability to implement a circular data queue easily.

Parameters
baseeDMA peripheral base address.
tcdA pointer to the TCD structure.
srcModuloA source modulo value.
destModuloA destination modulo value.
static void EDMA_TcdEnableAutoStopRequestExt ( EDMA_Type *  base,
edma_tcd_t tcd,
bool  enable 
)
inlinestatic

If enabling the auto stop request, the eDMA hardware automatically disables the hardware channel request.

Parameters
baseeDMA peripheral base address.
tcdA pointer to the TCD structure.
enableThe command to enable (true) or disable (false).
void EDMA_TcdEnableInterruptsExt ( EDMA_Type *  base,
edma_tcd_t tcd,
uint32_t  mask 
)
Parameters
baseeDMA peripheral base address.
tcdPoint to the TCD structure.
maskThe mask of interrupt source to be set. Users need to use the defined edma_interrupt_enable_t type.
void EDMA_TcdDisableInterruptsExt ( EDMA_Type *  base,
edma_tcd_t tcd,
uint32_t  mask 
)
Parameters
baseeDMA peripheral base address.
tcdPoint to the TCD structure.
maskThe mask of interrupt source to be set. Users need to use the defined edma_interrupt_enable_t type.
void EDMA_TcdSetMajorOffsetConfigExt ( EDMA_Type *  base,
edma_tcd_t tcd,
int32_t  sourceOffset,
int32_t  destOffset 
)

Adjustment value added to the source address at the completion of the major iteration count

Parameters
baseeDMA peripheral base address.
tcdA point to the TCD structure.
sourceOffsetsource address offset wiil be applied to source address after major loop done.
destOffsetdestination address offset will be applied to source address after major loop done.
static void EDMA_EnableChannelRequest ( EDMA_Type *  base,
uint32_t  channel 
)
inlinestatic

This function enables the hardware channel request.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
static void EDMA_DisableChannelRequest ( EDMA_Type *  base,
uint32_t  channel 
)
inlinestatic

This function disables the hardware channel request.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
static void EDMA_TriggerChannelStart ( EDMA_Type *  base,
uint32_t  channel 
)
inlinestatic

This function starts a minor loop transfer.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
uint32_t EDMA_GetRemainingMajorLoopCount ( EDMA_Type *  base,
uint32_t  channel 
)

This function checks the TCD (Task Control Descriptor) status for a specified eDMA channel and returns the number of major loop count that has not finished.

Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
Returns
Major loop count which has not been transferred yet for the current TCD.
Note
1. This function can only be used to get unfinished major loop count of transfer without the next TCD, or it might be inaccuracy.
  1. The unfinished/remaining transfer bytes cannot be obtained directly from registers while the channel is running. Because to calculate the remaining bytes, the initial NBYTES configured in DMA_TCDn_NBYTES_MLNO register is needed while the eDMA IP does not support getting it while a channel is active. In another word, the NBYTES value reading is always the actual (decrementing) NBYTES value the dma_engine is working with while a channel is running. Consequently, to get the remaining transfer bytes, a software-saved initial value of NBYTES (for example copied before enabling the channel) is needed. The formula to calculate it is shown below: RemainingBytes = RemainingMajorLoopCount * NBYTES(initially configured)
static uint32_t EDMA_GetErrorStatusFlags ( EDMA_Type *  base)
inlinestatic
Parameters
baseeDMA peripheral base address.
Returns
The mask of error status flags. Users need to use the _edma_error_status_flags type to decode the return variables.
uint32_t EDMA_GetChannelStatusFlags ( EDMA_Type *  base,
uint32_t  channel 
)
Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
Returns
The mask of channel status flags. Users need to use the _edma_channel_status_flags type to decode the return variables.
void EDMA_ClearChannelStatusFlags ( EDMA_Type *  base,
uint32_t  channel,
uint32_t  mask 
)
Parameters
baseeDMA peripheral base address.
channeleDMA channel number.
maskThe mask of channel status to be cleared. Users need to use the defined _edma_channel_status_flags type.
void EDMA_CreateHandle ( edma_handle_t handle,
EDMA_Type *  base,
uint32_t  channel 
)

This function is called if using the transactional API for eDMA. This function initializes the internal state of the eDMA handle.

Parameters
handleeDMA handle pointer. The eDMA handle stores callback function and parameters.
baseeDMA peripheral base address.
channeleDMA channel number.
void EDMA_PrepareTransferTCD ( edma_handle_t handle,
edma_tcd_t tcd,
void *  srcAddr,
uint32_t  srcWidth,
int16_t  srcOffset,
void *  destAddr,
uint32_t  destWidth,
int16_t  destOffset,
uint32_t  bytesEachRequest,
uint32_t  transferBytes,
edma_tcd_t nextTcd 
)

This function prepares the transfer content descriptor structure according to the user input.

Parameters
handleeDMA handle pointer.
tcdPointer to eDMA transfer content descriptor structure.
srcAddreDMA transfer source address.
srcWidtheDMA transfer source address width(bytes).
srcOffsetsource address offset.
destAddreDMA transfer destination address.
destWidtheDMA transfer destination address width(bytes).
destOffsetdestination address offset.
bytesEachRequesteDMA transfer bytes per channel request.
transferByteseDMA transfer bytes to be transferred.
nextTcdeDMA transfer linked TCD address.
Note
The data address and the data width must be consistent. For example, if the SRC is 4 bytes, the source address must be 4 bytes aligned, or it results in source address error (SAE).
status_t EDMA_SubmitTransferTCD ( edma_handle_t handle,
edma_tcd_t tcd 
)

This function submits the eDMA transfer request according to the transfer content descriptor. In scatter gather mode, call this function will add a configured tcd to the circular list of tcd pool. The tcd pools is setup by call function EDMA_InstallTCDMemory before.

Typical user case:

  1. submit single transfer
    * edma_tcd_t tcd;
    * EDMA_PrepareTransferTCD(handle, tcd, ....)
    * EDMA_SubmitTransferTCD(handle, tcd)
    *
  2. submit static link transfer,
    * edma_tcd_t tcd[2];
    * EDMA_PrepareTransferTCD(handle, &tcd[0], ....)
    * EDMA_PrepareTransferTCD(handle, &tcd[1], ....)
    * EDMA_SubmitTransferTCD(handle, &tcd[0])
    *
  3. submit dynamic link transfer
    * edma_tcd_t tcdpool[2];
    * EDMA_InstallTCDMemory(&g_DMA_Handle, tcdpool, 2);
    * edma_tcd_t tcd;
    * EDMA_PrepareTransferTCD(handle, tcd, ....)
    * EDMA_SubmitTransferTCD(handle, tcd)
    * EDMA_PrepareTransferTCD(handle, tcd, ....)
    * EDMA_SubmitTransferTCD(handle, tcd)
    *
  4. submit loop transfer
    * edma_tcd_t tcd[2];
    * EDMA_PrepareTransferTCD(handle, &tcd[0], ...,&tcd[1])
    * EDMA_PrepareTransferTCD(handle, &tcd[1], ..., &tcd[0])
    * EDMA_SubmitTransferTCD(handle, &tcd[0])
    *
Parameters
handleeDMA handle pointer.
tcdPointer to eDMA transfer content descriptor structure.
Return values
kStatus_EDMA_SuccessIt means submit transfer request succeed.
kStatus_EDMA_QueueFullIt means TCD queue is full. Submit transfer request is not allowed.
kStatus_EDMA_BusyIt means the given channel is busy, need to submit request later.
status_t EDMA_SubmitLoopTransfer ( edma_handle_t handle,
edma_transfer_config_t transfer,
uint32_t  transferLoopCount 
)

The function is target for submit loop transfer request, the ring transfer request means that the transfer request TAIL is link to HEAD, such as, A->B->C->D->A, or A->A

To use the ring transfer feature, the application should allocate several transfer object, such as

* edma_channel_transfer_config_t transfer[2];
* EDMA_TransferSubmitLoopTransfer(psHandle, &transfer, 2U);
*

Then eDMA driver will link transfer[0] and transfer[1] to each other

Note
Application should check the return value of this function to avoid transfer request submit failed
Parameters
handleeDMA handle pointer
transferpointer to user's eDMA channel configure structure, see edma_channel_transfer_config_t for detail
transferLoopCountthe count of the transfer ring, if loop count is 1, that means that the one will link to itself.
Return values
kStatus_SuccessIt means submit transfer request succeed
kStatus_EDMA_Busychannel is in busy status
kStatus_InvalidArgumentInvalid Argument