MCUXpresso SDK API Reference Manual  Rev 2.16.000
NXP Semiconductors
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages

Typical use case

More...

Overview

Multi fifo transfer use sai sdma driver

The SDMA multi fifo script support transfer data between multi peripheral fifos and memory, a typical user case is that receiving multi sai channel data and put it into memory as

| channel 0 | channel 1 | channel 2 | channel 3 | channel 4 | ......... |

Multi fifo script is target to implement above feature, it can supports 1.configurable fifo watermark range from 1~(2^12-1), it is a value of fifo_watermark * channel_numbers 2.configurable fifo numbers, support up to 15 continuous fifos 3.configurable fifo address offset, support address offset up to 64

/* load sdma script */
/* sai multi channel configurations */
SAI_TransferRxSetConfigSDMA(SAI, handle, &config);
SAI_TransferReceiveSDMA(SAI, handle, &config);

Transmitting data using multi fifo is same as above.

Data Structures

struct  _sai_sdma_handle
 SAI DMA transfer handle, users should not touch the content of the handle. More...
 

Typedefs

typedef void(* sai_sdma_callback_t )(I2S_Type *base, sai_sdma_handle_t *handle, status_t status, void *userData)
 SAI SDMA transfer callback function for finish and error.
 

Driver version

#define FSL_SAI_SDMA_DRIVER_VERSION   (MAKE_VERSION(2, 6, 0))
 Version 2.6.0.
 

SDMA Transactional

void SAI_TransferTxCreateHandleSDMA (I2S_Type *base, sai_sdma_handle_t *handle, sai_sdma_callback_t callback, void *userData, sdma_handle_t *dmaHandle, uint32_t eventSource)
 Initializes the SAI SDMA handle. More...
 
void SAI_TransferRxCreateHandleSDMA (I2S_Type *base, sai_sdma_handle_t *handle, sai_sdma_callback_t callback, void *userData, sdma_handle_t *dmaHandle, uint32_t eventSource)
 Initializes the SAI Rx SDMA handle. More...
 
status_t SAI_TransferSendSDMA (I2S_Type *base, sai_sdma_handle_t *handle, sai_transfer_t *xfer)
 Performs a non-blocking SAI transfer using DMA. More...
 
status_t SAI_TransferReceiveSDMA (I2S_Type *base, sai_sdma_handle_t *handle, sai_transfer_t *xfer)
 Performs a non-blocking SAI receive using SDMA. More...
 
void SAI_TransferAbortSendSDMA (I2S_Type *base, sai_sdma_handle_t *handle)
 Aborts a SAI transfer using SDMA. More...
 
void SAI_TransferAbortReceiveSDMA (I2S_Type *base, sai_sdma_handle_t *handle)
 Aborts a SAI receive using SDMA. More...
 
void SAI_TransferTerminateReceiveSDMA (I2S_Type *base, sai_sdma_handle_t *handle)
 Terminate all the SAI sdma receive transfer. More...
 
void SAI_TransferTerminateSendSDMA (I2S_Type *base, sai_sdma_handle_t *handle)
 Terminate all the SAI sdma send transfer. More...
 
void SAI_TransferRxSetConfigSDMA (I2S_Type *base, sai_sdma_handle_t *handle, sai_transceiver_t *saiConfig)
 brief Configures the SAI RX. More...
 
void SAI_TransferTxSetConfigSDMA (I2S_Type *base, sai_sdma_handle_t *handle, sai_transceiver_t *saiConfig)
 brief Configures the SAI Tx. More...
 

Data Structure Documentation

struct _sai_sdma_handle

Data Fields

sdma_handle_tdmaHandle
 DMA handler for SAI send.
 
uint8_t bytesPerFrame
 Bytes in a frame.
 
uint8_t channel
 start data channel
 
uint8_t channelNums
 total transfer channel numbers, used for multififo
 
uint8_t channelMask
 enabled channel mask value, refernece _sai_channel_mask
 
uint8_t fifoOffset
 fifo address offset between multifo
 
uint32_t count
 The transfer data count in a DMA request.
 
uint32_t state
 Internal state for SAI SDMA transfer.
 
uint32_t eventSource
 SAI event source number.
 
sai_sdma_callback_t callback
 Callback for users while transfer finish or error occurs.
 
void * userData
 User callback parameter.
 
sdma_buffer_descriptor_t bdPool [SAI_XFER_QUEUE_SIZE]
 BD pool for SDMA transfer. More...
 
sai_transfer_t saiQueue [SAI_XFER_QUEUE_SIZE]
 Transfer queue storing queued transfer. More...
 
size_t transferSize [SAI_XFER_QUEUE_SIZE]
 Data bytes need to transfer.
 
volatile uint8_t queueUser
 Index for user to queue transfer. More...
 
volatile uint8_t queueDriver
 Index for driver to get the transfer data and size.
 

Field Documentation

sdma_buffer_descriptor_t _sai_sdma_handle::bdPool[SAI_XFER_QUEUE_SIZE]
sai_transfer_t _sai_sdma_handle::saiQueue[SAI_XFER_QUEUE_SIZE]
volatile uint8_t _sai_sdma_handle::queueUser

Function Documentation

void SAI_TransferTxCreateHandleSDMA ( I2S_Type *  base,
sai_sdma_handle_t handle,
sai_sdma_callback_t  callback,
void *  userData,
sdma_handle_t dmaHandle,
uint32_t  eventSource 
)

This function initializes the SAI master DMA handle, which can be used for other SAI master transactional APIs. Usually, for a specified SAI instance, call this API once to get the initialized handle.

Parameters
baseSAI base pointer.
handleSAI SDMA handle pointer.
baseSAI peripheral base address.
callbackPointer to user callback function.
userDataUser parameter passed to the callback function.
dmaHandleSDMA handle pointer, this handle shall be static allocated by users.
eventSourceSAI event source number.
void SAI_TransferRxCreateHandleSDMA ( I2S_Type *  base,
sai_sdma_handle_t handle,
sai_sdma_callback_t  callback,
void *  userData,
sdma_handle_t dmaHandle,
uint32_t  eventSource 
)

This function initializes the SAI slave DMA handle, which can be used for other SAI master transactional APIs. Usually, for a specified SAI instance, call this API once to get the initialized handle.

Parameters
baseSAI base pointer.
handleSAI SDMA handle pointer.
baseSAI peripheral base address.
callbackPointer to user callback function.
userDataUser parameter passed to the callback function.
dmaHandleSDMA handle pointer, this handle shall be static allocated by users.
eventSourceSAI event source number.
status_t SAI_TransferSendSDMA ( I2S_Type *  base,
sai_sdma_handle_t handle,
sai_transfer_t xfer 
)
Note
This interface returns immediately after the transfer initiates. Call SAI_GetTransferStatus to poll the transfer status and check whether the SAI transfer is finished.
Parameters
baseSAI base pointer.
handleSAI SDMA handle pointer.
xferPointer to the DMA transfer structure.
Return values
kStatus_SuccessStart a SAI SDMA send successfully.
kStatus_InvalidArgumentThe input argument is invalid.
kStatus_TxBusySAI is busy sending data.
status_t SAI_TransferReceiveSDMA ( I2S_Type *  base,
sai_sdma_handle_t handle,
sai_transfer_t xfer 
)
Note
This interface returns immediately after the transfer initiates. Call the SAI_GetReceiveRemainingBytes to poll the transfer status and check whether the SAI transfer is finished.
Parameters
baseSAI base pointer
handleSAI SDMA handle pointer.
xferPointer to DMA transfer structure.
Return values
kStatus_SuccessStart a SAI SDMA receive successfully.
kStatus_InvalidArgumentThe input argument is invalid.
kStatus_RxBusySAI is busy receiving data.
void SAI_TransferAbortSendSDMA ( I2S_Type *  base,
sai_sdma_handle_t handle 
)
Parameters
baseSAI base pointer.
handleSAI SDMA handle pointer.
void SAI_TransferAbortReceiveSDMA ( I2S_Type *  base,
sai_sdma_handle_t handle 
)
Parameters
baseSAI base pointer
handleSAI SDMA handle pointer.
void SAI_TransferTerminateReceiveSDMA ( I2S_Type *  base,
sai_sdma_handle_t handle 
)
Parameters
baseSAI base pointer.
handleSAI SDMA handle pointer.
void SAI_TransferTerminateSendSDMA ( I2S_Type *  base,
sai_sdma_handle_t handle 
)
Parameters
baseSAI base pointer.
handleSAI SDMA handle pointer.
void SAI_TransferRxSetConfigSDMA ( I2S_Type *  base,
sai_sdma_handle_t handle,
sai_transceiver_t saiConfig 
)

param base SAI base pointer. param handle SAI SDMA handle pointer. param saiConig sai configurations.

void SAI_TransferTxSetConfigSDMA ( I2S_Type *  base,
sai_sdma_handle_t handle,
sai_transceiver_t saiConfig 
)

param base SAI base pointer. param handle SAI SDMA handle pointer. param saiConig sai configurations.