MAX32665 SDK Documentation  0.2
Software Development Kit Overview and API Documentation
Direct Memory Access (DMA)

Modules

 DMA_Registers
 Registers, Bit Masks and Bit Positions for the DMA Peripheral Module.
 

Macros

#define DMA_FALSE   0
 Convenience defines for options. More...
 
#define DMA_TRUE   1
 Define for passing 1 to DMA functions.
 

Enumerations

enum  dma_priority_t {
  DMA_PRIO_HIGH = MXC_S_DMA_CFG_PRI_HIGH,
  DMA_PRIO_MEDHIGH = MXC_S_DMA_CFG_PRI_MEDHIGH,
  DMA_PRIO_MEDLOW = MXC_S_DMA_CFG_PRI_MEDLOW,
  DMA_PRIO_LOW = MXC_S_DMA_CFG_PRI_LOW
}
 Enumeration for the DMA Channel's priority level. More...
 
enum  dma_reqsel_t {
  DMA_REQSEL_MEMTOMEM = MXC_S_DMA_CFG_REQSEL_MEMTOMEM,
  DMA_REQSEL_SPI0RX = MXC_S_DMA_CFG_REQSEL_SPI0RX,
  DMA_REQSEL_SPI1RX = MXC_S_DMA_CFG_REQSEL_SPI1RX,
  DMA_REQSEL_SPI2RX = MXC_S_DMA_CFG_REQSEL_SPI2RX,
  DMA_REQSEL_UART0RX = MXC_S_DMA_CFG_REQSEL_UART0RX,
  DMA_REQSEL_UART1RX = MXC_S_DMA_CFG_REQSEL_UART1RX,
  DMA_REQSEL_I2C0RX = MXC_S_DMA_CFG_REQSEL_I2C0RX,
  DMA_REQSEL_I2C1RX = MXC_S_DMA_CFG_REQSEL_I2C1RX,
  DMA_REQSEL_ADC = MXC_S_DMA_CFG_REQSEL_ADC,
  DMA_REQSEL_UART2RX = MXC_S_DMA_CFG_REQSEL_UART2RX,
  DMA_REQSEL_SPI3RX = MXC_S_DMA_CFG_REQSEL_SPI3RX,
  DMA_REQSEL_SPI_MSS0RX = MXC_S_DMA_CFG_REQSEL_SPI_MSS0RX,
  DMA_REQSEL_USBRXEP1 = MXC_S_DMA_CFG_REQSEL_USBRXEP1,
  DMA_REQSEL_USBRXEP2 = MXC_S_DMA_CFG_REQSEL_USBRXEP2,
  DMA_REQSEL_USBRXEP3 = MXC_S_DMA_CFG_REQSEL_USBRXEP3,
  DMA_REQSEL_USBRXEP4 = MXC_S_DMA_CFG_REQSEL_USBRXEP4,
  DMA_REQSEL_USBRXEP5 = MXC_S_DMA_CFG_REQSEL_USBRXEP5,
  DMA_REQSEL_USBRXEP6 = MXC_S_DMA_CFG_REQSEL_USBRXEP6,
  DMA_REQSEL_USBRXEP7 = MXC_S_DMA_CFG_REQSEL_USBRXEP7,
  DMA_REQSEL_USBRXEP8 = MXC_S_DMA_CFG_REQSEL_USBRXEP8,
  DMA_REQSEL_USBRXEP9 = MXC_S_DMA_CFG_REQSEL_USBRXEP9,
  DMA_REQSEL_USBRXEP10 = MXC_S_DMA_CFG_REQSEL_USBRXEP10,
  DMA_REQSEL_USBRXEP11 = MXC_S_DMA_CFG_REQSEL_USBRXEP11,
  DMA_REQSEL_SPI0TX = MXC_S_DMA_CFG_REQSEL_SPI0TX,
  DMA_REQSEL_SPI1TX = MXC_S_DMA_CFG_REQSEL_SPI1TX,
  DMA_REQSEL_SPI2TX = MXC_S_DMA_CFG_REQSEL_SPI2TX,
  DMA_REQSEL_UART0TX = MXC_S_DMA_CFG_REQSEL_UART0TX,
  DMA_REQSEL_UART1TX = MXC_S_DMA_CFG_REQSEL_UART1TX,
  DMA_REQSEL_I2C0TX = MXC_S_DMA_CFG_REQSEL_I2C0TX,
  DMA_REQSEL_I2C1TX = MXC_S_DMA_CFG_REQSEL_I2C1TX,
  DMA_REQSEL_UART2TX = MXC_S_DMA_CFG_REQSEL_UART2TX,
  DMA_REQSEL_SPI3TX = MXC_S_DMA_CFG_REQSEL_SPI3TX,
  DMA_REQSEL_SPI_MSS0TX = MXC_S_DMA_CFG_REQSEL_SPI_MSS0TX,
  DMA_REQSEL_USBTXEP1 = MXC_S_DMA_CFG_REQSEL_USBTXEP1,
  DMA_REQSEL_USBTXEP2 = MXC_S_DMA_CFG_REQSEL_USBTXEP2,
  DMA_REQSEL_USBTXEP3 = MXC_S_DMA_CFG_REQSEL_USBTXEP3,
  DMA_REQSEL_USBTXEP4 = MXC_S_DMA_CFG_REQSEL_USBTXEP4,
  DMA_REQSEL_USBTXEP5 = MXC_S_DMA_CFG_REQSEL_USBTXEP5,
  DMA_REQSEL_USBTXEP6 = MXC_S_DMA_CFG_REQSEL_USBTXEP6,
  DMA_REQSEL_USBTXEP7 = MXC_S_DMA_CFG_REQSEL_USBTXEP7,
  DMA_REQSEL_USBTXEP8 = MXC_S_DMA_CFG_REQSEL_USBTXEP8,
  DMA_REQSEL_USBTXEP9 = MXC_S_DMA_CFG_REQSEL_USBTXEP9,
  DMA_REQSEL_USBTXEP10 = MXC_S_DMA_CFG_REQSEL_USBTXEP10,
  DMA_REQSEL_USBTXEP11 = MXC_S_DMA_CFG_REQSEL_USBTXEP11
}
 DMA request select. More...
 
enum  dma_prescale_t {
  DMA_PRESCALE_DISABLE = MXC_S_DMA_CFG_PSSEL_DIS,
  DMA_PRESCALE_DIV256 = MXC_S_DMA_CFG_PSSEL_DIV256,
  DMA_PRESCALE_DIV64K = MXC_S_DMA_CFG_PSSEL_DIV64K,
  DMA_PRESCALE_DIV16M = MXC_S_DMA_CFG_PSSEL_DIV16M
}
 Enumeration for the DMA prescaler. More...
 
enum  dma_timeout_t {
  DMA_TIMEOUT_4_CLK = MXC_S_DMA_CFG_TOSEL_TO4,
  DMA_TIMEOUT_8_CLK = MXC_S_DMA_CFG_TOSEL_TO8,
  DMA_TIMEOUT_16_CLK = MXC_S_DMA_CFG_TOSEL_TO16,
  DMA_TIMEOUT_32_CLK = MXC_S_DMA_CFG_TOSEL_TO32,
  DMA_TIMEOUT_64_CLK = MXC_S_DMA_CFG_TOSEL_TO64,
  DMA_TIMEOUT_128_CLK = MXC_S_DMA_CFG_TOSEL_TO128,
  DMA_TIMEOUT_256_CLK = MXC_S_DMA_CFG_TOSEL_TO256,
  DMA_TIMEOUT_512_CLK = MXC_S_DMA_CFG_TOSEL_TO512
}
 Enumeration for the DMA timeout value. More...
 
enum  dma_width_t {
  DMA_WIDTH_BYTE = MXC_V_DMA_CFG_SRCWD_BYTE,
  DMA_WIDTH_HALFWORD = MXC_V_DMA_CFG_SRCWD_HALFWORD,
  DMA_WIDTH_WORD = MXC_V_DMA_CFG_SRCWD_WORD
}
 DMA transfer data width. More...
 

Functions

int DMA_Init (void)
 Initialize DMA resources. More...
 
int DMA_AcquireChannel (void)
 Request DMA channel. More...
 
int DMA_ReleaseChannel (int ch)
 Release DMA channel. More...
 
int DMA_ConfigChannel (int ch, dma_priority_t prio, dma_reqsel_t reqsel, unsigned int reqwait_en, dma_timeout_t tosel, dma_prescale_t pssel, dma_width_t srcwd, unsigned int srcinc_en, dma_width_t dstwd, unsigned int dstinc_en, unsigned int burst_size, unsigned int chdis_inten, unsigned int ctz_inten)
 Configure the DMA channel. More...
 
int DMA_SetSrcDstCnt (int ch, void *src_addr, void *dst_addr, unsigned int count)
 Set channel source, destination, and count for transfer. More...
 
int DMA_SetReload (int ch, void *src_addr_reload, void *dst_addr_reload, unsigned int count_reload)
 Set channel reload values. More...
 
int DMA_SetCallback (int ch, void(*callback)(int, int))
 Set channel interrupt callback. More...
 
int DMA_EnableInterrupt (int ch)
 Enable channel interrupt. More...
 
int DMA_DisableInterrupt (int ch)
 Disable channel interrupt. More...
 
int DMA_GetFlags (int ch, unsigned int *fl)
 Read channel interrupt flags. More...
 
int DMA_ClearFlags (int ch)
 Clear channel interrupt flags. More...
 
int DMA_Start (int ch)
 Start transfer. More...
 
int DMA_Stop (int ch)
 Stop DMA transfer, irrespective of status (complete or in-progress) More...
 
mxc_dma_ch_regs_tDMA_GetCHRegs (int ch)
 Get a pointer to the DMA channel registers. More...
 
void DMA_Handler (int ch)
 Interrupt handler function. More...
 

Detailed Description

Macro Definition Documentation

◆ DMA_FALSE

#define DMA_FALSE   0

Define for passing 0 to DMA functions

Enumeration Type Documentation

◆ dma_priority_t

Enumerator
DMA_PRIO_HIGH 

High Priority.

DMA_PRIO_MEDHIGH 

Medium High Priority.

DMA_PRIO_MEDLOW 

Medium Low Priority.

DMA_PRIO_LOW 

Low Priority.

◆ dma_reqsel_t

Enumerator
DMA_REQSEL_MEMTOMEM 

Memory to Memory DMA Request Selection.

DMA_REQSEL_SPI0RX 

SPI0 Receive DMA Request Selection.

DMA_REQSEL_SPI1RX 

SPI1 Receive DMA Request Selection.

DMA_REQSEL_SPI2RX 

SPI2 Receive DMA Request Selection.

DMA_REQSEL_UART0RX 

UART0 Receive DMA Request Selection.

DMA_REQSEL_UART1RX 

UART1 Receive DMA Request Selection.

DMA_REQSEL_I2C0RX 

I2C0 Receive DMA Request Selection.

DMA_REQSEL_I2C1RX 

I2C1 Receive DMA Request Selection.

DMA_REQSEL_ADC 

ADC DMA Request Selection.

DMA_REQSEL_UART2RX 

UART2 Receive DMA Request Selection.

DMA_REQSEL_SPI3RX 

SPI3 Receive DMA Request Selection.

DMA_REQSEL_SPI_MSS0RX 

I2S Receive DMA Request Selection.

DMA_REQSEL_USBRXEP1 

USB Receive Endpoint 1 DMA Request Selection.

DMA_REQSEL_USBRXEP2 

USB Receive Endpoint 2 DMA Request Selection.

DMA_REQSEL_USBRXEP3 

USB Receive Endpoint 3 DMA Request Selection.

DMA_REQSEL_USBRXEP4 

USB Receive Endpoint 4 DMA Request Selection.

DMA_REQSEL_USBRXEP5 

USB Receive Endpoint 5 DMA Request Selection.

DMA_REQSEL_USBRXEP6 

USB Receive Endpoint 6 DMA Request Selection.

DMA_REQSEL_USBRXEP7 

USB Receive Endpoint 7 DMA Request Selection.

DMA_REQSEL_USBRXEP8 

USB Receive Endpoint 8 DMA Request Selection.

DMA_REQSEL_USBRXEP9 

USB Receive Endpoint 9 DMA Request Selection.

DMA_REQSEL_USBRXEP10 

USB Receive Endpoint 10 DMA Request Selection.

DMA_REQSEL_USBRXEP11 

USB Receive Endpoint 11 DMA Request Selection.

DMA_REQSEL_SPI0TX 

SPI0 Transmit DMA Request Selection.

DMA_REQSEL_SPI1TX 

SPI1 Transmit DMA Request Selection.

DMA_REQSEL_SPI2TX 

SPI2 Transmit DMA Request Selection.

DMA_REQSEL_UART0TX 

UART0 Transmit DMA Request Selection.

DMA_REQSEL_UART1TX 

UART1 Transmit DMA Request Selection.

DMA_REQSEL_I2C0TX 

I2C0 Transmit DMA Request Selection.

DMA_REQSEL_I2C1TX 

I2C1 Transmit DMA Request Selection.

DMA_REQSEL_UART2TX 

UART 2 Transmit DMA Request Selection.

DMA_REQSEL_SPI3TX 

SPI3 Transmit DMA Request Selection.

DMA_REQSEL_SPI_MSS0TX 

I2S Transmit DMA Request Selection.

DMA_REQSEL_USBTXEP1 

USB TX Endpoint 1 DMA Request Selection.

DMA_REQSEL_USBTXEP2 

USB TX Endpoint 2 DMA Request Selection.

DMA_REQSEL_USBTXEP3 

USB TX Endpoint 3 DMA Request Selection.

DMA_REQSEL_USBTXEP4 

USB TX Endpoint 4 DMA Request Selection.

DMA_REQSEL_USBTXEP5 

USB TX Endpoint 5 DMA Request Selection.

DMA_REQSEL_USBTXEP6 

USB TX Endpoint 6 DMA Request Selection.

DMA_REQSEL_USBTXEP7 

USB TX Endpoint 7 DMA Request Selection.

DMA_REQSEL_USBTXEP8 

USB TX Endpoint 8 DMA Request Selection.

DMA_REQSEL_USBTXEP9 

USB TX Endpoint 9 DMA Request Selection.

DMA_REQSEL_USBTXEP10 

USB TX Endpoint 10 DMA Request Selection.

DMA_REQSEL_USBTXEP11 

USB TX Endpoint 11 DMA Request Selection.

◆ dma_prescale_t

Enumerator
DMA_PRESCALE_DISABLE 

Prescaler disabled.

DMA_PRESCALE_DIV256 

Divide by 256.

DMA_PRESCALE_DIV64K 

Divide by 65,536.

DMA_PRESCALE_DIV16M 

Divide by 16,777,216.

◆ dma_timeout_t

Enumerator
DMA_TIMEOUT_4_CLK 

DMA timeout of 4 clocks.

DMA_TIMEOUT_8_CLK 

DMA timeout of 8 clocks.

DMA_TIMEOUT_16_CLK 

DMA timeout of 16 clocks.

DMA_TIMEOUT_32_CLK 

DMA timeout of 32 clocks.

DMA_TIMEOUT_64_CLK 

DMA timeout of 64 clocks.

DMA_TIMEOUT_128_CLK 

DMA timeout of 128 clocks.

DMA_TIMEOUT_256_CLK 

DMA timeout of 256 clocks.

DMA_TIMEOUT_512_CLK 

DMA timeout of 512 clocks.

◆ dma_width_t

Enumerator
DMA_WIDTH_BYTE 

DMA transfer in bytes.

DMA_WIDTH_HALFWORD 

DMA transfer in 16-bit half-words.

DMA_WIDTH_WORD 

DMA transfer in 32-bit words.

Function Documentation

◆ DMA_Init()

int DMA_Init ( void  )

This initialization is required before using the DMA driver functions.

Returns
E_NO_ERROR If initialization is successful

◆ DMA_AcquireChannel()

int DMA_AcquireChannel ( void  )

Returns a handle to the first free DMA channel, which can be used via API calls or direct access to channel registers using the DMA_GetCHRegs(int ch) function.

Returns
Non-negative channel handle (inclusive of zero).
E_NONE_AVAIL All channels in use
E_BAD_STATE DMA is not initialized, call DMA_Init() first
E_BUSY DMA is currently busy (locked), try again later

◆ DMA_ReleaseChannel()

int DMA_ReleaseChannel ( int  ch)

Stops any DMA operation on the channel and returns it to the pool of free channels.

Parameters
chchannel handle to release
Returns
E_BAD_PARAM if an unused or invalid channel handle, E_NO_ERROR otherwise

◆ DMA_ConfigChannel()

int DMA_ConfigChannel ( int  ch,
dma_priority_t  prio,
dma_reqsel_t  reqsel,
unsigned int  reqwait_en,
dma_timeout_t  tosel,
dma_prescale_t  pssel,
dma_width_t  srcwd,
unsigned int  srcinc_en,
dma_width_t  dstwd,
unsigned int  dstinc_en,
unsigned int  burst_size,
unsigned int  chdis_inten,
unsigned int  ctz_inten 
)

Configures the channel, which was previously requested by DMA_Getchannel()

Parameters
chThe channel to configure
prioThe channel's priority
reqselSelect the DMA request line
reqwait_enThe enable delay before request
toselThe transfer timer timeout select
psselThe transfer timer prescale select
srcwdThe size of the read transactions
srcinc_enEnable auto-increment source pointer
dstwdThe size of write transactions
dstinc_enEnable auto-increment destination pointer
burst_sizeThe number of bytes transferred in one transaction
chdis_intenThe channel disable interrupt enable
ctz_intenThe count-to-zero interrupt enable
Returns
E_BAD_PARAM If there is an unused or invalid channel handle
E_NO_ERROR If all parameters valid

◆ DMA_SetSrcDstCnt()

int DMA_SetSrcDstCnt ( int  ch,
void *  src_addr,
void *  dst_addr,
unsigned int  count 
)
Parameters
chchannel handle
src_addrsource address (*)
dst_addrdestination address (*)
countnumber of bytes to transfer

This function is used to set the source and destination addresses and the number of bytes to transfer using the channel, ch.

Note
Unless the channel request select is DMA_REQSEL_MEMTOMEM, either src_addr or dst_addr will be ignored by the DMA engine. In these cases, the address is a don't-care. See the User's Guide for more information
Returns
E_BAD_PARAM If there is an unused or invalid channel handle
E_NO_ERROR If all parameters valid

◆ DMA_SetReload()

int DMA_SetReload ( int  ch,
void *  src_addr_reload,
void *  dst_addr_reload,
unsigned int  count_reload 
)
Parameters
chchannel handle
src_addr_reloadsource address
dst_addr_reloaddestination address
count_reloadnumber of bytes to transfer

This function will set the values which will be loaded after the channel count register reaches zero. After enabling, call with count_reload set to zero to disable reload.

Returns
E_BAD_PARAM If there is an unused or invalid channel handle
E_NO_ERROR If all parameters are valid

◆ DMA_SetCallback()

int DMA_SetCallback ( int  ch,
void(*)(int, int)  callback 
)
Parameters
chchannel handle
callbackPointer to a function to call when the channel interrupt flag is set and interrupts are enabled or when DMA is shutdown by the driver.

Configures the channel interrupt callback. The callback function is called for two conditions:

  1. When the channel's interrupt flag is set and DMA interrupts are enabled.
  2. If the driver calls the DMA_Shutdown() function. The callback function prototype is:
    void callback_fn(int ch, int reason);
    ch indicates the channel that generated the callback, reason is either E_NO_ERROR for a DMA interrupt or E_SHUTDOWN if the DMA is being shutdown.
Returns
E_BAD_PARAM If there is an unused or invalid channel handle
E_NO_ERROR If all parameters are valid

◆ DMA_EnableInterrupt()

int DMA_EnableInterrupt ( int  ch)
Parameters
chchannel handle
Returns
E_BAD_PARAM If there is an unused or invalid channel handle
E_NO_ERROR If all parameters are valid

◆ DMA_DisableInterrupt()

int DMA_DisableInterrupt ( int  ch)
Parameters
chchannel handle
Returns
E_BAD_PARAM If there is an unused or invalid channel handle
E_NO_ERROR If the parameter is valid

◆ DMA_GetFlags()

int DMA_GetFlags ( int  ch,
unsigned int *  fl 
)
Parameters
chchannel handle
flflags to get
Returns
E_BAD_PARAM If there is an unused or invalid channel handle
E_NO_ERROR If all parameters are valid

◆ DMA_ClearFlags()

int DMA_ClearFlags ( int  ch)
Parameters
chchannel handle
Returns
E_BAD_PARAM If there is an unused or invalid channel handle
E_NO_ERROR If all parameters are valid

◆ DMA_Start()

int DMA_Start ( int  ch)
Parameters
chchannel handle

Start the DMA channel transfer, assumes that DMA_SetSrcDstCnt() has been called beforehand

Returns
E_BAD_PARAM If there is an unused or invalid channel handle
E_NO_ERROR If all parameters are valid

◆ DMA_Stop()

int DMA_Stop ( int  ch)
Parameters
chchannel handle
Returns
E_BAD_PARAM If there is an unused or invalid channel handle
E_NO_ERROR If the channel handler is valid

◆ DMA_GetCHRegs()

mxc_dma_ch_regs_t* DMA_GetCHRegs ( int  ch)
Parameters
chchannel handle

If direct access to DMA channel registers is required, this function can be used on a channel handle returned by DMA_AcquireChannel()

Returns
NULL if an unused or invalid channel handle, or a valid pointer otherwise

◆ DMA_Handler()

void DMA_Handler ( int  ch)
Parameters
chchannel handle

Call this function as the ISR for each DMA channel under driver control. Interrupt flags for channel ch will be automatically cleared before return.

Returns
NULL if an unused or invalid channel handle, or a valid pointer otherwise