Kinetis SDK v.2.0 API Reference Manual  Rev. 0
Freescale Semiconductor, Inc.
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages

Overview

Files

file  fsl_sai_edma.h
 

Data Structures

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

Typedefs

typedef void(* sai_edma_callback_t )(I2S_Type *base, sai_edma_handle_t *handle, status_t status, void *userData)
 SAI eDMA transfer callback function for finish and error.
 

eDMA Transactional

void SAI_TransferTxCreateHandleEDMA (I2S_Type *base, sai_edma_handle_t *handle, sai_edma_callback_t callback, void *userData, edma_handle_t *dmaHandle)
 Initializes the SAI eDMA handle. More...
 
void SAI_TransferRxCreateHandleEDMA (I2S_Type *base, sai_edma_handle_t *handle, sai_edma_callback_t callback, void *userData, edma_handle_t *dmaHandle)
 Initializes the SAI Rx eDMA handle. More...
 
void SAI_TransferTxSetFormatEDMA (I2S_Type *base, sai_edma_handle_t *handle, sai_transfer_format_t *format, uint32_t mclkSourceClockHz, uint32_t bclkSourceClockHz)
 Configures the SAI Tx audio format. More...
 
void SAI_TransferRxSetFormatEDMA (I2S_Type *base, sai_edma_handle_t *handle, sai_transfer_format_t *format, uint32_t mclkSourceClockHz, uint32_t bclkSourceClockHz)
 Configures the SAI Rx audio format. More...
 
status_t SAI_TransferSendEDMA (I2S_Type *base, sai_edma_handle_t *handle, sai_transfer_t *xfer)
 Performs a non-blocking SAI transfer using DMA. More...
 
status_t SAI_TransferReceiveEDMA (I2S_Type *base, sai_edma_handle_t *handle, sai_transfer_t *xfer)
 Performs a non-blocking SAI receive using eDMA. More...
 
void SAI_TransferAbortSendEDMA (I2S_Type *base, sai_edma_handle_t *handle)
 Aborts a SAI transfer using eDMA. More...
 
void SAI_TransferAbortReceiveEDMA (I2S_Type *base, sai_edma_handle_t *handle)
 Aborts a SAI receive using eDMA. More...
 
status_t SAI_TransferGetSendCountEDMA (I2S_Type *base, sai_edma_handle_t *handle, size_t *count)
 Gets byte count sent by SAI. More...
 
status_t SAI_TransferGetReceiveCountEDMA (I2S_Type *base, sai_edma_handle_t *handle, size_t *count)
 Gets byte count received by SAI. More...
 

Data Structure Documentation

struct _sai_edma_handle

Data Fields

edma_handle_tdmaHandle
 DMA handler for SAI send.
 
uint8_t bytesPerFrame
 Bytes in a frame.
 
uint8_t channel
 Which data channel.
 
uint8_t count
 The transfer data count in a DMA request.
 
uint32_t state
 Internal state for SAI eDMA transfer.
 
sai_edma_callback_t callback
 Callback for users while transfer finish or error occurs.
 
void * userData
 User callback parameter.
 
edma_tcd_t tcd [SAI_XFER_QUEUE_SIZE+1U]
 TCD pool for eDMA 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

edma_tcd_t sai_edma_handle_t::tcd[SAI_XFER_QUEUE_SIZE+1U]
sai_transfer_t sai_edma_handle_t::saiQueue[SAI_XFER_QUEUE_SIZE]
volatile uint8_t sai_edma_handle_t::queueUser

Function Documentation

void SAI_TransferTxCreateHandleEDMA ( I2S_Type *  base,
sai_edma_handle_t *  handle,
sai_edma_callback_t  callback,
void *  userData,
edma_handle_t dmaHandle 
)

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 eDMA handle pointer.
baseSAI peripheral base address.
callbackPointer to user callback function.
userDataUser parameter passed to the callback function.
dmaHandleeDMA handle pointer, this handle shall be static allocated by users.
void SAI_TransferRxCreateHandleEDMA ( I2S_Type *  base,
sai_edma_handle_t *  handle,
sai_edma_callback_t  callback,
void *  userData,
edma_handle_t dmaHandle 
)

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 eDMA handle pointer.
baseSAI peripheral base address.
callbackPointer to user callback function.
userDataUser parameter passed to the callback function.
dmaHandleeDMA handle pointer, this handle shall be static allocated by users.
void SAI_TransferTxSetFormatEDMA ( I2S_Type *  base,
sai_edma_handle_t *  handle,
sai_transfer_format_t format,
uint32_t  mclkSourceClockHz,
uint32_t  bclkSourceClockHz 
)

The audio format can be changed at run-time. This function configures the sample rate and audio data format to be transferred. This function also sets the eDMA parameter according to formatting requirements.

Parameters
baseSAI base pointer.
handleSAI eDMA handle pointer.
formatPointer to SAI audio data format structure.
mclkSourceClockHzSAI master clock source frequency in Hz.
bclkSourceClockHzSAI bit clock source frequency in Hz. If bit clock source is master clock, this value should equals to masterClockHz in format.
Return values
kStatus_SuccessAudio format set successfully.
kStatus_InvalidArgumentThe input argument is invalid.
void SAI_TransferRxSetFormatEDMA ( I2S_Type *  base,
sai_edma_handle_t *  handle,
sai_transfer_format_t format,
uint32_t  mclkSourceClockHz,
uint32_t  bclkSourceClockHz 
)

The audio format can be changed at run-time. This function configures the sample rate and audio data format to be transferred. This function also sets the eDMA parameter according to formatting requirements.

Parameters
baseSAI base pointer.
handleSAI eDMA handle pointer.
formatPointer to SAI audio data format structure.
mclkSourceClockHzSAI master clock source frequency in Hz.
bclkSourceClockHzSAI bit clock source frequency in Hz. If a bit clock source is the master clock, this value should equal to masterClockHz in format.
Return values
kStatus_SuccessAudio format set successfully.
kStatus_InvalidArgumentThe input argument is invalid.
status_t SAI_TransferSendEDMA ( I2S_Type *  base,
sai_edma_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 eDMA handle pointer.
xferPointer to the DMA transfer structure.
Return values
kStatus_SuccessStart a SAI eDMA send successfully.
kStatus_InvalidArgumentThe input argument is invalid.
kStatus_TxBusySAI is busy sending data.
status_t SAI_TransferReceiveEDMA ( I2S_Type *  base,
sai_edma_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 eDMA handle pointer.
xferPointer to DMA transfer structure.
Return values
kStatus_SuccessStart a SAI eDMA receive successfully.
kStatus_InvalidArgumentThe input argument is invalid.
kStatus_RxBusySAI is busy receiving data.
void SAI_TransferAbortSendEDMA ( I2S_Type *  base,
sai_edma_handle_t *  handle 
)
Parameters
baseSAI base pointer.
handleSAI eDMA handle pointer.
void SAI_TransferAbortReceiveEDMA ( I2S_Type *  base,
sai_edma_handle_t *  handle 
)
Parameters
baseSAI base pointer
handleSAI eDMA handle pointer.
status_t SAI_TransferGetSendCountEDMA ( I2S_Type *  base,
sai_edma_handle_t *  handle,
size_t *  count 
)
Parameters
baseSAI base pointer.
handleSAI eDMA handle pointer.
countBytes count sent by SAI.
Return values
kStatus_SuccessSucceed get the transfer count.
kStatus_NoTransferInProgressThere is no non-blocking transaction in progress.
status_t SAI_TransferGetReceiveCountEDMA ( I2S_Type *  base,
sai_edma_handle_t *  handle,
size_t *  count 
)
Parameters
baseSAI base pointer
handleSAI eDMA handle pointer.
countBytes count received by SAI.
Return values
kStatus_SuccessSucceed get the transfer count.
kStatus_NoTransferInProgressThere is no non-blocking transaction in progress.