| Kinetis SDK v.2.0 API Reference Manual Rev. 0 Freescale Semiconductor, Inc.

- Main Page
- Related Pages
- API Reference

All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
Files | Data Structures | Typedefs
SAI eDMA Driver
SAI: Serial Audio Interface

## 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_t * | dmaHandle
| 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

  base | SAI base pointer.
  handle | SAI eDMA handle pointer.
  base | SAI peripheral base address.
  callback | Pointer to user callback function.
  userData | User parameter passed to the callback function.
  dmaHandle | eDMA 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

  base | SAI base pointer.
  handle | SAI eDMA handle pointer.
  base | SAI peripheral base address.
  callback | Pointer to user callback function.
  userData | User parameter passed to the callback function.
  dmaHandle | eDMA 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

  base | SAI base pointer.
  handle | SAI eDMA handle pointer.
  format | Pointer to SAI audio data format structure.
  mclkSourceClockHz | SAI master clock source frequency in Hz.
  bclkSourceClockHz | SAI bit clock source frequency in Hz. If bit clock source is master clock, this value should equals to masterClockHz in format.

Return values

  kStatus_Success | Audio format set successfully.
  kStatus_InvalidArgument | The 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

  base | SAI base pointer.
  handle | SAI eDMA handle pointer.
  format | Pointer to SAI audio data format structure.
  mclkSourceClockHz | SAI master clock source frequency in Hz.
  bclkSourceClockHz | SAI 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_Success | Audio format set successfully.
  kStatus_InvalidArgument | The 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

  base | SAI base pointer.
  handle | SAI eDMA handle pointer.
  xfer | Pointer to the DMA transfer structure.

Return values

  kStatus_Success | Start a SAI eDMA send successfully.
  kStatus_InvalidArgument | The input argument is invalid.
  kStatus_TxBusy | SAI 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

  base | SAI base pointer
  handle | SAI eDMA handle pointer.
  xfer | Pointer to DMA transfer structure.

Return values

  kStatus_Success | Start a SAI eDMA receive successfully.
  kStatus_InvalidArgument | The input argument is invalid.
  kStatus_RxBusy | SAI is busy receiving data.

void SAI_TransferAbortSendEDMA | ( | I2S_Type * | base,
|  | sai_edma_handle_t * | handle
| ) |  |

Parameters

  base | SAI base pointer.
  handle | SAI eDMA handle pointer.

void SAI_TransferAbortReceiveEDMA | ( | I2S_Type * | base,
|  | sai_edma_handle_t * | handle
| ) |  |

Parameters

  base | SAI base pointer
  handle | SAI eDMA handle pointer.

status_t SAI_TransferGetSendCountEDMA | ( | I2S_Type * | base,
|  | sai_edma_handle_t * | handle,
|  | size_t * | count
| ) |  |

Parameters

  base | SAI base pointer.
  handle | SAI eDMA handle pointer.
  count | Bytes count sent by SAI.

Return values

  kStatus_Success | Succeed get the transfer count.
  kStatus_NoTransferInProgress | There is no non-blocking transaction in progress.

status_t SAI_TransferGetReceiveCountEDMA | ( | I2S_Type * | base,
|  | sai_edma_handle_t * | handle,
|  | size_t * | count
| ) |  |

Parameters

  base | SAI base pointer
  handle | SAI eDMA handle pointer.
  count | Bytes count received by SAI.

Return values

  kStatus_Success | Succeed get the transfer count.
  kStatus_NoTransferInProgress | There is no non-blocking transaction in progress.