DMADRVEMDRV
Detailed Description
DMADRV Direct Memory Access Driver.
Introduction
The DMADRV driver supports writing code using DMA which will work regardless of the type of the DMA controller on the underlying microcontroller. Additionally, DMA can be used in several modules that are completely unaware of each other. The driver does not preclude use of the native emlib API of the underlying DMA controller. On the contrary, it will often result in more efficient code and is necessary for complex DMA operations. The housekeeping functions of this driver are valuable even in this use-case.
The
dmadrv.c
and
dmadrv.h
source files are in the emdrv/dmadrv folder.
- Note
- DMA transfer completion callback functions are called from within the DMA interrupt handler.
Configuration Options
Some properties of the DMADRV driver are compile-time configurable. These properties are stored in a file named dmadrv_config.h. A template for this file, containing default values, is in the emdrv/config folder. Currently the configuration options are as follows:
- The interrupt priority of the DMA peripheral.
- A number of DMA channels to support.
- Use the native emlib API belonging to the underlying DMA hardware in combination with the DMADRV API.
Both configuration options will help reduce the driver's RAM footprint.
To configure DMADRV, provide a custom configuration file. This is an example dmadrv_config.h file:
The API
This section contains brief descriptions of the API functions. For more information about input and output parameters and return values, click on the hyperlinked function names. Most functions return an error code,
ECODE_EMDRV_DMADRV_OK
is returned on success, see
ecode.h
and
dmadrv.h
for other error codes.
The application code must include
dmadrv.h
header file.
DMADRV_Init()
,
DMADRV_DeInit()
These functions initialize or deinitialize the DMADRV driver. Typically, DMADRV_Init() is called once in the startup code.
DMADRV_AllocateChannel()
,
DMADRV_FreeChannel()
DMA channel reserve and release functions. It is recommended that application code check that DMADRV_AllocateChannel() returns ECODE_EMDRV_DMADRV_OK before starting a DMA transfer.
DMADRV_MemoryPeripheral()
Start a DMA transfer from memory to a peripheral.
DMADRV_PeripheralMemory()
Start a DMA transfer from a peripheral to memory.
DMADRV_MemoryPeripheralPingPong()
Start a DMA ping-pong transfer from memory to a peripheral.
DMADRV_PeripheralMemoryPingPong()
Start a DMA ping-pong transfer from a peripheral to memory.
DMADRV_LdmaStartTransfer()
Start a DMA transfer on an LDMA controller. This function can only be used when configuration option EMDRV_DMADRV_USE_NATIVE_API is defined. It is a wrapper similar to the emlib LDMA function, but adds support for completion callback and user-defined callback function parameter.
DMADRV_StopTransfer()
Stop an ongoing DMA transfer.
DMADRV_TransferActive()
Check if a transfer is ongoing.
DMADRV_TransferCompletePending()
Check if a transfer completion is pending.
DMADRV_TransferDone()
Check if a transfer has completed.
DMADRV_TransferRemainingCount()
Get number of items remaining in a transfer.
Example
Transfer a text string to USART1.
dmadrv.h
"
Macros |
|
| #define | DMADRV_MAX_XFER_COUNT ((int)((_LDMA_CH_CTRL_XFERCNT_MASK >> _LDMA_CH_CTRL_XFERCNT_SHIFT) + 1)) |
|
Maximum length of one DMA transfer.
|
|
| #define | ECODE_EMDRV_DMADRV_ALREADY_FREED ( ECODE_EMDRV_DMADRV_BASE | 0x00000006) |
|
A DMA channel was free.
|
|
| #define | ECODE_EMDRV_DMADRV_ALREADY_INITIALIZED ( ECODE_EMDRV_DMADRV_BASE | 0x00000003) |
|
DMA has already been initialized.
|
|
| #define | ECODE_EMDRV_DMADRV_CH_NOT_ALLOCATED ( ECODE_EMDRV_DMADRV_BASE | 0x00000007) |
|
A channel is not reserved.
|
|
| #define | ECODE_EMDRV_DMADRV_CHANNELS_EXHAUSTED ( ECODE_EMDRV_DMADRV_BASE | 0x00000004) |
|
No DMA channels available.
|
|
| #define | ECODE_EMDRV_DMADRV_IN_USE ( ECODE_EMDRV_DMADRV_BASE | 0x00000005) |
|
DMA is in use.
|
|
| #define | ECODE_EMDRV_DMADRV_NOT_INITIALIZED ( ECODE_EMDRV_DMADRV_BASE | 0x00000002) |
|
DMA is not initialized.
|
|
| #define | ECODE_EMDRV_DMADRV_OK ( ECODE_OK ) |
|
A successful return value.
|
|
| #define | ECODE_EMDRV_DMADRV_PARAM_ERROR ( ECODE_EMDRV_DMADRV_BASE | 0x00000001) |
|
An illegal input parameter.
|
|
Typedefs |
|
| typedef bool(* | DMADRV_Callback_t ) (unsigned int channel, unsigned int sequenceNo, void *userParam) |
|
DMADRV transfer completion callback function.
|
|
Enumerations |
|
| enum |
DMADRV_DataSize_t
{
dmadrvDataSize1 = ldmaCtrlSizeByte, dmadrvDataSize2 = ldmaCtrlSizeHalf, dmadrvDataSize4 = ldmaCtrlSizeWord } |
|
Data size of one LDMA transfer item.
|
|
| enum |
DMADRV_PeripheralSignal_t
{
dmadrvPeripheralSignal_NONE = LDMA_CH_REQSEL_SOURCESEL_NONE, dmadrvPeripheralSignal_ADC0_SCAN = LDMA_CH_REQSEL_SIGSEL_ADC0SCAN | LDMA_CH_REQSEL_SOURCESEL_ADC0, dmadrvPeripheralSignal_ADC0_SINGLE = LDMA_CH_REQSEL_SIGSEL_ADC0SINGLE | LDMA_CH_REQSEL_SOURCESEL_ADC0, dmadrvPeripheralSignal_VDAC0_CH0 = LDMA_CH_REQSEL_SIGSEL_VDAC0CH0 | LDMA_CH_REQSEL_SOURCESEL_VDAC0, dmadrvPeripheralSignal_VDAC0_CH1 = LDMA_CH_REQSEL_SIGSEL_VDAC0CH1 | LDMA_CH_REQSEL_SOURCESEL_VDAC0, dmadrvPeripheralSignal_CRYPTO0_DATA0RD = LDMA_CH_REQSEL_SIGSEL_CRYPTO0DATA0RD | LDMA_CH_REQSEL_SOURCESEL_CRYPTO0, dmadrvPeripheralSignal_CRYPTO0_DATA0WR = LDMA_CH_REQSEL_SIGSEL_CRYPTO0DATA0WR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO0, dmadrvPeripheralSignal_CRYPTO0_DATA0XWR = LDMA_CH_REQSEL_SIGSEL_CRYPTO0DATA0XWR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO0, dmadrvPeripheralSignal_CRYPTO0_DATA1RD = LDMA_CH_REQSEL_SIGSEL_CRYPTO0DATA1RD | LDMA_CH_REQSEL_SOURCESEL_CRYPTO0, dmadrvPeripheralSignal_CRYPTO0_DATA1WR = LDMA_CH_REQSEL_SIGSEL_CRYPTO0DATA1WR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO0, dmadrvPeripheralSignal_CRYPTO1_DATA0RD = LDMA_CH_REQSEL_SIGSEL_CRYPTO1DATA0RD | LDMA_CH_REQSEL_SOURCESEL_CRYPTO1, dmadrvPeripheralSignal_CRYPTO1_DATA0WR = LDMA_CH_REQSEL_SIGSEL_CRYPTO1DATA0WR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO1, dmadrvPeripheralSignal_CRYPTO1_DATA0XWR = LDMA_CH_REQSEL_SIGSEL_CRYPTO1DATA0XWR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO1, dmadrvPeripheralSignal_CRYPTO1_DATA1RD = LDMA_CH_REQSEL_SIGSEL_CRYPTO1DATA1RD | LDMA_CH_REQSEL_SOURCESEL_CRYPTO1, dmadrvPeripheralSignal_CRYPTO1_DATA1WR = LDMA_CH_REQSEL_SIGSEL_CRYPTO1DATA1WR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO1, dmadrvPeripheralSignal_CSEN_DATA = LDMA_CH_REQSEL_SIGSEL_CSENDATA | LDMA_CH_REQSEL_SOURCESEL_CSEN, dmadrvPeripheralSignal_CSEN_BSLN = LDMA_CH_REQSEL_SIGSEL_CSENBSLN | LDMA_CH_REQSEL_SOURCESEL_CSEN, dmadrvPeripheralSignal_I2C0_RXDATAV = LDMA_CH_REQSEL_SIGSEL_I2C0RXDATAV | LDMA_CH_REQSEL_SOURCESEL_I2C0, dmadrvPeripheralSignal_I2C0_TXBL = LDMA_CH_REQSEL_SIGSEL_I2C0TXBL | LDMA_CH_REQSEL_SOURCESEL_I2C0, dmadrvPeripheralSignal_I2C1_RXDATAV = LDMA_CH_REQSEL_SIGSEL_I2C1RXDATAV | LDMA_CH_REQSEL_SOURCESEL_I2C1, dmadrvPeripheralSignal_I2C1_TXBL = LDMA_CH_REQSEL_SIGSEL_I2C1TXBL | LDMA_CH_REQSEL_SOURCESEL_I2C1, dmadrvPeripheralSignal_LEUART0_RXDATAV = LDMA_CH_REQSEL_SIGSEL_LEUART0RXDATAV | LDMA_CH_REQSEL_SOURCESEL_LEUART0, dmadrvPeripheralSignal_LEUART0_TXBL = LDMA_CH_REQSEL_SIGSEL_LEUART0TXBL | LDMA_CH_REQSEL_SOURCESEL_LEUART0, dmadrvPeripheralSignal_LEUART0_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_LEUART0TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_LEUART0, dmadrvPeripheralSignal_MSC_WDATA = LDMA_CH_REQSEL_SIGSEL_MSCWDATA | LDMA_CH_REQSEL_SOURCESEL_MSC, dmadrvPeripheralSignal_PRS_REQ0 = LDMA_CH_REQSEL_SIGSEL_PRSREQ0 | LDMA_CH_REQSEL_SOURCESEL_PRS, dmadrvPeripheralSignal_PRS_REQ1 = LDMA_CH_REQSEL_SIGSEL_PRSREQ1 | LDMA_CH_REQSEL_SOURCESEL_PRS, dmadrvPeripheralSignal_TIMER0_CC0 = LDMA_CH_REQSEL_SIGSEL_TIMER0CC0 | LDMA_CH_REQSEL_SOURCESEL_TIMER0, dmadrvPeripheralSignal_TIMER0_CC1 = LDMA_CH_REQSEL_SIGSEL_TIMER0CC1 | LDMA_CH_REQSEL_SOURCESEL_TIMER0, dmadrvPeripheralSignal_TIMER0_CC2 = LDMA_CH_REQSEL_SIGSEL_TIMER0CC2 | LDMA_CH_REQSEL_SOURCESEL_TIMER0, dmadrvPeripheralSignal_TIMER0_UFOF = LDMA_CH_REQSEL_SIGSEL_TIMER0UFOF | LDMA_CH_REQSEL_SOURCESEL_TIMER0, dmadrvPeripheralSignal_TIMER1_CC0 = LDMA_CH_REQSEL_SIGSEL_TIMER1CC0 | LDMA_CH_REQSEL_SOURCESEL_TIMER1, dmadrvPeripheralSignal_TIMER1_CC1 = LDMA_CH_REQSEL_SIGSEL_TIMER1CC1 | LDMA_CH_REQSEL_SOURCESEL_TIMER1, dmadrvPeripheralSignal_TIMER1_CC2 = LDMA_CH_REQSEL_SIGSEL_TIMER1CC2 | LDMA_CH_REQSEL_SOURCESEL_TIMER1, dmadrvPeripheralSignal_TIMER1_CC3 = LDMA_CH_REQSEL_SIGSEL_TIMER1CC3 | LDMA_CH_REQSEL_SOURCESEL_TIMER1, dmadrvPeripheralSignal_TIMER1_UFOF = LDMA_CH_REQSEL_SIGSEL_TIMER1UFOF | LDMA_CH_REQSEL_SOURCESEL_TIMER1, dmadrvPeripheralSignal_WTIMER0_CC0 = LDMA_CH_REQSEL_SIGSEL_WTIMER0CC0 | LDMA_CH_REQSEL_SOURCESEL_WTIMER0, dmadrvPeripheralSignal_WTIMER0_CC1 = LDMA_CH_REQSEL_SIGSEL_WTIMER0CC1 | LDMA_CH_REQSEL_SOURCESEL_WTIMER0, dmadrvPeripheralSignal_WTIMER0_CC2 = LDMA_CH_REQSEL_SIGSEL_WTIMER0CC2 | LDMA_CH_REQSEL_SOURCESEL_WTIMER0, dmadrvPeripheralSignal_WTIMER0_UFOF = LDMA_CH_REQSEL_SIGSEL_WTIMER0UFOF | LDMA_CH_REQSEL_SOURCESEL_WTIMER0, dmadrvPeripheralSignal_USART0_RXDATAV = LDMA_CH_REQSEL_SIGSEL_USART0RXDATAV | LDMA_CH_REQSEL_SOURCESEL_USART0, dmadrvPeripheralSignal_USART0_TXBL = LDMA_CH_REQSEL_SIGSEL_USART0TXBL | LDMA_CH_REQSEL_SOURCESEL_USART0, dmadrvPeripheralSignal_USART0_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_USART0TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_USART0, dmadrvPeripheralSignal_USART1_RXDATAV = LDMA_CH_REQSEL_SIGSEL_USART1RXDATAV | LDMA_CH_REQSEL_SOURCESEL_USART1, dmadrvPeripheralSignal_USART1_RXDATAVRIGHT = LDMA_CH_REQSEL_SIGSEL_USART1RXDATAVRIGHT | LDMA_CH_REQSEL_SOURCESEL_USART1, dmadrvPeripheralSignal_USART1_TXBL = LDMA_CH_REQSEL_SIGSEL_USART1TXBL | LDMA_CH_REQSEL_SOURCESEL_USART1, dmadrvPeripheralSignal_USART1_TXBLRIGHT = LDMA_CH_REQSEL_SIGSEL_USART1TXBLRIGHT | LDMA_CH_REQSEL_SOURCESEL_USART1, dmadrvPeripheralSignal_USART1_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_USART1TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_USART1, dmadrvPeripheralSignal_USART2_RXDATAV = LDMA_CH_REQSEL_SIGSEL_USART2RXDATAV | LDMA_CH_REQSEL_SOURCESEL_USART2, dmadrvPeripheralSignal_USART2_TXBL = LDMA_CH_REQSEL_SIGSEL_USART2TXBL | LDMA_CH_REQSEL_SOURCESEL_USART2, dmadrvPeripheralSignal_USART2_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_USART2TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_USART2 } |
|
Peripherals that can trigger LDMA transfers.
|
|
Functions |
|
| Ecode_t | DMADRV_AllocateChannel (unsigned int *channelId, void *capabilities) |
|
Allocate (reserve) a DMA channel.
|
|
| Ecode_t | DMADRV_DeInit (void) |
|
Deinitialize DMADRV.
|
|
| Ecode_t | DMADRV_FreeChannel (unsigned int channelId) |
|
Free an allocated (reserved) DMA channel.
|
|
| Ecode_t | DMADRV_Init (void) |
|
Initialize DMADRV.
|
|
| Ecode_t | DMADRV_LdmaStartTransfer (int channelId, LDMA_TransferCfg_t *transfer, LDMA_Descriptor_t *descriptor, DMADRV_Callback_t callback, void *cbUserParam) |
|
Start an LDMA transfer.
|
|
| Ecode_t | DMADRV_MemoryPeripheral (unsigned int channelId, DMADRV_PeripheralSignal_t peripheralSignal, void *dst, void *src, bool srcInc, int len, DMADRV_DataSize_t size, DMADRV_Callback_t callback, void *cbUserParam) |
|
Start a memory to a peripheral DMA transfer.
|
|
| Ecode_t | DMADRV_MemoryPeripheralPingPong (unsigned int channelId, DMADRV_PeripheralSignal_t peripheralSignal, void *dst, void *src0, void *src1, bool srcInc, int len, DMADRV_DataSize_t size, DMADRV_Callback_t callback, void *cbUserParam) |
|
Start a memory to a peripheral ping-pong DMA transfer.
|
|
| Ecode_t | DMADRV_PauseTransfer (unsigned int channelId) |
|
Pause an ongoing DMA transfer.
|
|
| Ecode_t | DMADRV_PeripheralMemory (unsigned int channelId, DMADRV_PeripheralSignal_t peripheralSignal, void *dst, void *src, bool dstInc, int len, DMADRV_DataSize_t size, DMADRV_Callback_t callback, void *cbUserParam) |
|
Start a peripheral to memory DMA transfer.
|
|
| Ecode_t | DMADRV_PeripheralMemoryPingPong (unsigned int channelId, DMADRV_PeripheralSignal_t peripheralSignal, void *dst0, void *dst1, void *src, bool dstInc, int len, DMADRV_DataSize_t size, DMADRV_Callback_t callback, void *cbUserParam) |
|
Start a peripheral to memory ping-pong DMA transfer.
|
|
| Ecode_t | DMADRV_ResumeTransfer (unsigned int channelId) |
|
Resume an ongoing DMA transfer.
|
|
| Ecode_t | DMADRV_StopTransfer (unsigned int channelId) |
|
Stop an ongoing DMA transfer.
|
|
| Ecode_t | DMADRV_TransferActive (unsigned int channelId, bool *active) |
|
Check if a transfer is running.
|
|
| Ecode_t | DMADRV_TransferCompletePending (unsigned int channelId, bool *pending) |
|
Check if a transfer complete is pending.
|
|
| Ecode_t | DMADRV_TransferDone (unsigned int channelId, bool *done) |
|
Check if a transfer has completed.
|
|
| Ecode_t | DMADRV_TransferRemainingCount (unsigned int channelId, int *remaining) |
|
Get number of items remaining in a transfer.
|
|
Typedef Documentation
| typedef bool(* DMADRV_Callback_t) (unsigned int channel, unsigned int sequenceNo, void *userParam) |
DMADRV transfer completion callback function.
The callback function is called when a transfer is complete.
- Parameters
-
[in] channelThe DMA channel number. [in] sequenceNoThe number of times the callback was called. Useful on long chains of linked transfers or on endless ping-pong type transfers. [in] userParamOptional user parameter supplied on DMA invocation.
- Returns
- When doing ping-pong transfers, return true to continue or false to stop transfers.
Definition at line
82
of file
dmadrv.h
.
Enumeration Type Documentation
| enum DMADRV_DataSize_t |
Peripherals that can trigger LDMA transfers.
Definition at line
471
of file
dmadrv.h
.
Function Documentation
| Ecode_t DMADRV_AllocateChannel | ( | unsigned int * |
channelId,
|
| void * |
capabilities
|
||
| ) |
Allocate (reserve) a DMA channel.
- Parameters
-
[out] channelIdThe channel ID assigned by DMADRV. [in] capabilitiesNot used.
- Returns
- ECODE_EMDRV_DMADRV_OK on success. On failure, an appropriate DMADRV Ecode_t is returned.
Definition at line
127
of file
dmadrv.c
.
References CORE_DECLARE_IRQ_STATE , CORE_ENTER_ATOMIC , CORE_EXIT_ATOMIC , ECODE_EMDRV_DMADRV_CHANNELS_EXHAUSTED , ECODE_EMDRV_DMADRV_NOT_INITIALIZED , ECODE_EMDRV_DMADRV_OK , ECODE_EMDRV_DMADRV_PARAM_ERROR , and initialized .
Referenced by MIC_init() , and SPIDRV_Init() .
| Ecode_t DMADRV_DeInit | ( | void |
|
) |
Deinitialize DMADRV.
If DMA channels are not currently allocated, it will disable DMA hardware and mask associated interrupts.
- Returns
- ECODE_EMDRV_DMADRV_OK on success. On failure, an appropriate DMADRV Ecode_t is returned.
Definition at line
169
of file
dmadrv.c
.
References CMU_ClockEnable() , CORE_DECLARE_IRQ_STATE , CORE_ENTER_ATOMIC , CORE_EXIT_ATOMIC , ECODE_EMDRV_DMADRV_IN_USE , ECODE_EMDRV_DMADRV_OK , initialized , and LDMA_DeInit() .
Referenced by SPIDRV_DeInit() , and UARTDRV_DeInit() .
| Ecode_t DMADRV_FreeChannel | ( | unsigned int |
channelId
|
) |
Free an allocated (reserved) DMA channel.
- Parameters
-
[in] channelIdThe channel ID to free.
- Returns
- ECODE_EMDRV_DMADRV_OK on success. On failure, an appropriate DMADRV Ecode_t is returned.
Definition at line
214
of file
dmadrv.c
.
References CORE_DECLARE_IRQ_STATE , CORE_ENTER_ATOMIC , CORE_EXIT_ATOMIC , ECODE_EMDRV_DMADRV_ALREADY_FREED , ECODE_EMDRV_DMADRV_NOT_INITIALIZED , ECODE_EMDRV_DMADRV_OK , ECODE_EMDRV_DMADRV_PARAM_ERROR , and initialized .
Referenced by MIC_deInit() , SPIDRV_DeInit() , and UARTDRV_DeInit() .
| Ecode_t DMADRV_Init | ( | void |
|
) |
Initialize DMADRV.
The DMA hardware is initialized.
- Returns
- ECODE_EMDRV_DMADRV_OK on success. On failure, an appropriate DMADRV Ecode_t is returned.
Definition at line
248
of file
dmadrv.c
.
References CORE_DECLARE_IRQ_STATE , CORE_ENTER_ATOMIC , CORE_EXIT_ATOMIC , ECODE_EMDRV_DMADRV_ALREADY_INITIALIZED , ECODE_EMDRV_DMADRV_OK , ECODE_EMDRV_DMADRV_PARAM_ERROR , initialized , LDMA_Init() , LDMA_INIT_DEFAULT , LDMA_Init_t::ldmaInitCtrlNumFixed , and LDMA_Init_t::ldmaInitIrqPriority .
Referenced by MIC_init() , and SPIDRV_Init() .
| Ecode_t DMADRV_LdmaStartTransfer | ( | int |
channelId,
|
| LDMA_TransferCfg_t * |
transfer,
|
||
| LDMA_Descriptor_t * |
descriptor,
|
||
| DMADRV_Callback_t |
callback,
|
||
| void * |
cbUserParam
|
||
| ) |
Start an LDMA transfer.
This function can only be used on LDMA when EMDRV_DMADRV_USE_NATIVE_API is defined. It is a wrapper similar to emlib LDMA function.
- Parameters
-
[in] channelIdThe channel ID to use. [in] transferA DMA transfer configuration data structure. [in] descriptorA DMA transfer descriptor, can be an array of descriptors linked together. [in] callbackAn optional callback function for signalling completion. May be NULL if not needed. [in] cbUserParamAn optional user parameter to feed to the callback function. May be NULL if not needed.
- Returns
- ECODE_EMDRV_DMADRV_OK on success. On failure, an appropriate DMADRV Ecode_t is returned.
Definition at line
318
of file
dmadrv.c
.
References ECODE_EMDRV_DMADRV_CH_NOT_ALLOCATED , ECODE_EMDRV_DMADRV_NOT_INITIALIZED , ECODE_EMDRV_DMADRV_OK , ECODE_EMDRV_DMADRV_PARAM_ERROR , initialized , and LDMA_StartTransfer() .
Referenced by MIC_init() .
| Ecode_t DMADRV_MemoryPeripheral | ( | unsigned int |
channelId,
|
| DMADRV_PeripheralSignal_t |
peripheralSignal,
|
||
| void * |
dst,
|
||
| void * |
src,
|
||
| bool |
srcInc,
|
||
| int |
len,
|
||
| DMADRV_DataSize_t |
size,
|
||
| DMADRV_Callback_t |
callback,
|
||
| void * |
cbUserParam
|
||
| ) |
Start a memory to a peripheral DMA transfer.
- Parameters
-
[in] channelIdThe channel ID to use for the transfer. [in] peripheralSignalSelects which peripheral/peripheralsignal to use. [in] dstA destination (peripheral register) memory address. [in] srcA source memory address. [in] srcIncSet to true to enable source address increment (increments according to size parameter). [in] lenA number of items (of size size) to transfer. [in] sizeAn item size, byte, halfword or word. [in] callbackA function to call on DMA completion, use NULL if not needed. [in] cbUserParamAn optional user parameter to feed to the callback function. Use NULL if not needed.
- Returns
- ECODE_EMDRV_DMADRV_OK on success. On failure, an appropriate DMADRV Ecode_t is returned.
Definition at line
386
of file
dmadrv.c
.
| Ecode_t DMADRV_MemoryPeripheralPingPong | ( | unsigned int |
channelId,
|
| DMADRV_PeripheralSignal_t |
peripheralSignal,
|
||
| void * |
dst,
|
||
| void * |
src0,
|
||
| void * |
src1,
|
||
| bool |
srcInc,
|
||
| int |
len,
|
||
| DMADRV_DataSize_t |
size,
|
||
| DMADRV_Callback_t |
callback,
|
||
| void * |
cbUserParam
|
||
| ) |
Start a memory to a peripheral ping-pong DMA transfer.
- Parameters
-
[in] channelIdThe channel ID to use for the transfer. [in] peripheralSignalSelects which peripheral/peripheralsignal to use. [in] dstA destination (peripheral register) memory address. [in] src0A source memory address of the first (ping) buffer. [in] src1A source memory address of the second (pong) buffer. [in] srcIncSet to true to enable source address increment (increments according to size parameter). [in] lenA number of items (of size size) to transfer. [in] sizeAn item size, byte, halfword or word. [in] callbackA function to call on DMA completion, use NULL if not needed. [in] cbUserParamAn optional user parameter to feed to the callback function. Use NULL if not needed.
- Returns
- ECODE_EMDRV_DMADRV_OK on success. On failure, an appropriate DMADRV Ecode_t is returned.
Definition at line
453
of file
dmadrv.c
.
| Ecode_t DMADRV_PauseTransfer | ( | unsigned int |
channelId
|
) |
Pause an ongoing DMA transfer.
- Parameters
-
[in] channelIdThe channel ID of the transfer to pause.
- Returns
- ECODE_EMDRV_DMADRV_OK on success. On failure, an appropriate DMADRV Ecode_t is returned.
Definition at line
625
of file
dmadrv.c
.
References ECODE_EMDRV_DMADRV_CH_NOT_ALLOCATED , ECODE_EMDRV_DMADRV_NOT_INITIALIZED , ECODE_EMDRV_DMADRV_OK , ECODE_EMDRV_DMADRV_PARAM_ERROR , initialized , and LDMA_EnableChannelRequest() .
Referenced by UARTDRV_PauseTransmit() .
| Ecode_t DMADRV_PeripheralMemory | ( | unsigned int |
channelId,
|
| DMADRV_PeripheralSignal_t |
peripheralSignal,
|
||
| void * |
dst,
|
||
| void * |
src,
|
||
| bool |
dstInc,
|
||
| int |
len,
|
||
| DMADRV_DataSize_t |
size,
|
||
| DMADRV_Callback_t |
callback,
|
||
| void * |
cbUserParam
|
||
| ) |
Start a peripheral to memory DMA transfer.
- Parameters
-
[in] channelIdThe channel ID to use for the transfer. [in] peripheralSignalSelects which peripheral/peripheralsignal to use. [in] dstA destination memory address. [in] srcA source memory (peripheral register) address. [in] dstIncSet to true to enable destination address increment (increments according to size parameter). [in] lenA number of items (of size size) to transfer. [in] sizeAn item size, byte, halfword or word. [in] callbackA function to call on DMA completion, use NULL if not needed. [in] cbUserParamAn optional user parameter to feed to the callback function. Use NULL if not needed.
- Returns
- ECODE_EMDRV_DMADRV_OK on success. On failure, an appropriate DMADRV Ecode_t is returned.
Definition at line
519
of file
dmadrv.c
.
Referenced by MIC_start() .
| Ecode_t DMADRV_PeripheralMemoryPingPong | ( | unsigned int |
channelId,
|
| DMADRV_PeripheralSignal_t |
peripheralSignal,
|
||
| void * |
dst0,
|
||
| void * |
dst1,
|
||
| void * |
src,
|
||
| bool |
dstInc,
|
||
| int |
len,
|
||
| DMADRV_DataSize_t |
size,
|
||
| DMADRV_Callback_t |
callback,
|
||
| void * |
cbUserParam
|
||
| ) |
Start a peripheral to memory ping-pong DMA transfer.
- Parameters
-
[in] channelIdThe channel ID to use for the transfer. [in] peripheralSignalSelects which peripheral/peripheralsignal to use. [in] dst0A destination memory address of the first (ping) buffer. [in] dst1A destination memory address of the second (pong) buffer. [in] srcA source memory (peripheral register) address. [in] dstIncSet to true to enable destination address increment (increments according to size parameter). [in] lenA number of items (of size size) to transfer. [in] sizeAn item size, byte, halfword or word. [in] callbackA function to call on DMA completion, use NULL if not needed. [in] cbUserParamAn optional user parameter to feed to the callback function. Use NULL if not needed.
- Returns
- ECODE_EMDRV_DMADRV_OK on success. On failure, an appropriate DMADRV Ecode_t is returned.
Definition at line
586
of file
dmadrv.c
.
| Ecode_t DMADRV_ResumeTransfer | ( | unsigned int |
channelId
|
) |
Resume an ongoing DMA transfer.
- Parameters
-
[in] channelIdThe channel ID of the transfer to resume.
- Returns
- ECODE_EMDRV_DMADRV_OK on success. On failure, an appropriate DMADRV Ecode_t is returned.
Definition at line
659
of file
dmadrv.c
.
References ECODE_EMDRV_DMADRV_CH_NOT_ALLOCATED , ECODE_EMDRV_DMADRV_NOT_INITIALIZED , ECODE_EMDRV_DMADRV_OK , ECODE_EMDRV_DMADRV_PARAM_ERROR , initialized , and LDMA_EnableChannelRequest() .
Referenced by UARTDRV_ResumeTransmit() .
| Ecode_t DMADRV_StopTransfer | ( | unsigned int |
channelId
|
) |
Stop an ongoing DMA transfer.
- Parameters
-
[in] channelIdThe channel ID of the transfer to stop.
- Returns
- ECODE_EMDRV_DMADRV_OK on success. On failure, an appropriate DMADRV Ecode_t is returned.
Definition at line
693
of file
dmadrv.c
.
References ECODE_EMDRV_DMADRV_CH_NOT_ALLOCATED , ECODE_EMDRV_DMADRV_NOT_INITIALIZED , ECODE_EMDRV_DMADRV_OK , ECODE_EMDRV_DMADRV_PARAM_ERROR , initialized , and LDMA_StopTransfer() .
Referenced by MIC_deInit() , SPIDRV_AbortTransfer() , SPIDRV_DeInit() , and UARTDRV_Abort() .
| Ecode_t DMADRV_TransferActive | ( | unsigned int |
channelId,
|
| bool * |
active
|
||
| ) |
Check if a transfer is running.
- Parameters
-
[in] channelIdThe channel ID of the transfer to check. [out] activeTrue if transfer is running, false otherwise.
- Returns
- ECODE_EMDRV_DMADRV_OK on success. On failure, an appropriate DMADRV Ecode_t is returned.
Definition at line
730
of file
dmadrv.c
.
References ECODE_EMDRV_DMADRV_CH_NOT_ALLOCATED , ECODE_EMDRV_DMADRV_NOT_INITIALIZED , ECODE_EMDRV_DMADRV_OK , ECODE_EMDRV_DMADRV_PARAM_ERROR , initialized , and LDMA_ChannelEnabled() .
| Ecode_t DMADRV_TransferCompletePending | ( | unsigned int |
channelId,
|
| bool * |
pending
|
||
| ) |
Check if a transfer complete is pending.
Will check the channel interrupt flag. This assumes that the DMA is configured to give a completion interrupt.
- Parameters
-
[in] channelIdThe channel ID of the transfer to check. [out] pendingTrue if a transfer complete is pending, false otherwise.
- Returns
- ECODE_EMDRV_DMADRV_OK on success. On failure, an appropriate DMADRV Ecode_t is returned.
Definition at line
777
of file
dmadrv.c
.
References ECODE_EMDRV_DMADRV_CH_NOT_ALLOCATED , ECODE_EMDRV_DMADRV_NOT_INITIALIZED , ECODE_EMDRV_DMADRV_OK , ECODE_EMDRV_DMADRV_PARAM_ERROR , and initialized .
| Ecode_t DMADRV_TransferDone | ( | unsigned int |
channelId,
|
| bool * |
done
|
||
| ) |
Check if a transfer has completed.
- Note
- This function should be used in a polled environment. Will only work reliably for transfers NOT using the completion interrupt. On UDMA, it will only work on basic transfers on the primary channel.
- Parameters
-
[in] channelIdThe channel ID of the transfer to check. [out] doneTrue if a transfer has completed, false otherwise.
- Returns
- ECODE_EMDRV_DMADRV_OK on success. On failure, an appropriate DMADRV Ecode_t is returned.
Definition at line
825
of file
dmadrv.c
.
References CORE_ATOMIC_SECTION , ECODE_EMDRV_DMADRV_CH_NOT_ALLOCATED , ECODE_EMDRV_DMADRV_NOT_INITIALIZED , ECODE_EMDRV_DMADRV_OK , ECODE_EMDRV_DMADRV_PARAM_ERROR , initialized , and LDMA_TransferDone() .
| Ecode_t DMADRV_TransferRemainingCount | ( | unsigned int |
channelId,
|
| int * |
remaining
|
||
| ) |
Get number of items remaining in a transfer.
- Note
- This function does not take into account that a DMA transfer with a chain of linked transfers might be ongoing. It will only check the count for the current transfer. On UDMA, it will only work on the primary channel.
- Parameters
-
[in] channelIdThe channel ID of the transfer to check. [out] remainingA number of items remaining in the transfer.
- Returns
- ECODE_EMDRV_DMADRV_OK on success. On failure, an appropriate DMADRV Ecode_t is returned.
Definition at line
885
of file
dmadrv.c
.
References CORE_ATOMIC_SECTION , ECODE_EMDRV_DMADRV_CH_NOT_ALLOCATED , ECODE_EMDRV_DMADRV_NOT_INITIALIZED , ECODE_EMDRV_DMADRV_OK , ECODE_EMDRV_DMADRV_PARAM_ERROR , initialized , and LDMA_TransferRemainingCount() .
Referenced by SPIDRV_AbortTransfer() , UARTDRV_Abort() , UARTDRV_GetReceiveStatus() , and UARTDRV_GetTransmitStatus() .