mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 189:f392fc9709a3 1 /*
AnnaBridge 189:f392fc9709a3 2 * Copyright (c) 2015, Freescale Semiconductor, Inc.
AnnaBridge 189:f392fc9709a3 3 * All rights reserved.
AnnaBridge 189:f392fc9709a3 4 *
AnnaBridge 189:f392fc9709a3 5 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 189:f392fc9709a3 6 * are permitted provided that the following conditions are met:
AnnaBridge 189:f392fc9709a3 7 *
AnnaBridge 189:f392fc9709a3 8 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 189:f392fc9709a3 9 * of conditions and the following disclaimer.
AnnaBridge 189:f392fc9709a3 10 *
AnnaBridge 189:f392fc9709a3 11 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 189:f392fc9709a3 12 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 189:f392fc9709a3 13 * other materials provided with the distribution.
AnnaBridge 189:f392fc9709a3 14 *
AnnaBridge 189:f392fc9709a3 15 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
AnnaBridge 189:f392fc9709a3 16 * contributors may be used to endorse or promote products derived from this
AnnaBridge 189:f392fc9709a3 17 * software without specific prior written permission.
AnnaBridge 189:f392fc9709a3 18 *
AnnaBridge 189:f392fc9709a3 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 189:f392fc9709a3 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 189:f392fc9709a3 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 189:f392fc9709a3 22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 189:f392fc9709a3 23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 189:f392fc9709a3 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 189:f392fc9709a3 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 189:f392fc9709a3 26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 189:f392fc9709a3 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 189:f392fc9709a3 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 189:f392fc9709a3 29 */
AnnaBridge 189:f392fc9709a3 30
AnnaBridge 189:f392fc9709a3 31 #ifndef _FSL_SAI_H_
AnnaBridge 189:f392fc9709a3 32 #define _FSL_SAI_H_
AnnaBridge 189:f392fc9709a3 33
AnnaBridge 189:f392fc9709a3 34 #include "fsl_common.h"
AnnaBridge 189:f392fc9709a3 35
AnnaBridge 189:f392fc9709a3 36 /*!
AnnaBridge 189:f392fc9709a3 37 * @addtogroup sai
AnnaBridge 189:f392fc9709a3 38 * @{
AnnaBridge 189:f392fc9709a3 39 */
AnnaBridge 189:f392fc9709a3 40
AnnaBridge 189:f392fc9709a3 41
AnnaBridge 189:f392fc9709a3 42 /*******************************************************************************
AnnaBridge 189:f392fc9709a3 43 * Definitions
AnnaBridge 189:f392fc9709a3 44 ******************************************************************************/
AnnaBridge 189:f392fc9709a3 45
AnnaBridge 189:f392fc9709a3 46 /*! @name Driver version */
AnnaBridge 189:f392fc9709a3 47 /*@{*/
AnnaBridge 189:f392fc9709a3 48 #define FSL_SAI_DRIVER_VERSION (MAKE_VERSION(2, 1, 1)) /*!< Version 2.1.1 */
AnnaBridge 189:f392fc9709a3 49 /*@}*/
AnnaBridge 189:f392fc9709a3 50
AnnaBridge 189:f392fc9709a3 51 /*! @brief SAI return status*/
AnnaBridge 189:f392fc9709a3 52 enum _sai_status_t
AnnaBridge 189:f392fc9709a3 53 {
AnnaBridge 189:f392fc9709a3 54 kStatus_SAI_TxBusy = MAKE_STATUS(kStatusGroup_SAI, 0), /*!< SAI Tx is busy. */
AnnaBridge 189:f392fc9709a3 55 kStatus_SAI_RxBusy = MAKE_STATUS(kStatusGroup_SAI, 1), /*!< SAI Rx is busy. */
AnnaBridge 189:f392fc9709a3 56 kStatus_SAI_TxError = MAKE_STATUS(kStatusGroup_SAI, 2), /*!< SAI Tx FIFO error. */
AnnaBridge 189:f392fc9709a3 57 kStatus_SAI_RxError = MAKE_STATUS(kStatusGroup_SAI, 3), /*!< SAI Rx FIFO error. */
AnnaBridge 189:f392fc9709a3 58 kStatus_SAI_QueueFull = MAKE_STATUS(kStatusGroup_SAI, 4), /*!< SAI transfer queue is full. */
AnnaBridge 189:f392fc9709a3 59 kStatus_SAI_TxIdle = MAKE_STATUS(kStatusGroup_SAI, 5), /*!< SAI Tx is idle */
AnnaBridge 189:f392fc9709a3 60 kStatus_SAI_RxIdle = MAKE_STATUS(kStatusGroup_SAI, 6) /*!< SAI Rx is idle */
AnnaBridge 189:f392fc9709a3 61 };
AnnaBridge 189:f392fc9709a3 62
AnnaBridge 189:f392fc9709a3 63 /*! @brief Define the SAI bus type */
AnnaBridge 189:f392fc9709a3 64 typedef enum _sai_protocol
AnnaBridge 189:f392fc9709a3 65 {
AnnaBridge 189:f392fc9709a3 66 kSAI_BusLeftJustified = 0x0U, /*!< Uses left justified format.*/
AnnaBridge 189:f392fc9709a3 67 kSAI_BusRightJustified, /*!< Uses right justified format. */
AnnaBridge 189:f392fc9709a3 68 kSAI_BusI2S, /*!< Uses I2S format. */
AnnaBridge 189:f392fc9709a3 69 kSAI_BusPCMA, /*!< Uses I2S PCM A format.*/
AnnaBridge 189:f392fc9709a3 70 kSAI_BusPCMB /*!< Uses I2S PCM B format. */
AnnaBridge 189:f392fc9709a3 71 } sai_protocol_t;
AnnaBridge 189:f392fc9709a3 72
AnnaBridge 189:f392fc9709a3 73 /*! @brief Master or slave mode */
AnnaBridge 189:f392fc9709a3 74 typedef enum _sai_master_slave
AnnaBridge 189:f392fc9709a3 75 {
AnnaBridge 189:f392fc9709a3 76 kSAI_Master = 0x0U, /*!< Master mode */
AnnaBridge 189:f392fc9709a3 77 kSAI_Slave = 0x1U /*!< Slave mode */
AnnaBridge 189:f392fc9709a3 78 } sai_master_slave_t;
AnnaBridge 189:f392fc9709a3 79
AnnaBridge 189:f392fc9709a3 80 /*! @brief Mono or stereo audio format */
AnnaBridge 189:f392fc9709a3 81 typedef enum _sai_mono_stereo
AnnaBridge 189:f392fc9709a3 82 {
AnnaBridge 189:f392fc9709a3 83 kSAI_Stereo = 0x0U, /*!< Stereo sound. */
AnnaBridge 189:f392fc9709a3 84 kSAI_MonoLeft, /*!< Only left channel have sound. */
AnnaBridge 189:f392fc9709a3 85 kSAI_MonoRight /*!< Only Right channel have sound. */
AnnaBridge 189:f392fc9709a3 86 } sai_mono_stereo_t;
AnnaBridge 189:f392fc9709a3 87
AnnaBridge 189:f392fc9709a3 88 /*! @brief Synchronous or asynchronous mode */
AnnaBridge 189:f392fc9709a3 89 typedef enum _sai_sync_mode
AnnaBridge 189:f392fc9709a3 90 {
AnnaBridge 189:f392fc9709a3 91 kSAI_ModeAsync = 0x0U, /*!< Asynchronous mode */
AnnaBridge 189:f392fc9709a3 92 kSAI_ModeSync, /*!< Synchronous mode (with receiver or transmit) */
AnnaBridge 189:f392fc9709a3 93 kSAI_ModeSyncWithOtherTx, /*!< Synchronous with another SAI transmit */
AnnaBridge 189:f392fc9709a3 94 kSAI_ModeSyncWithOtherRx /*!< Synchronous with another SAI receiver */
AnnaBridge 189:f392fc9709a3 95 } sai_sync_mode_t;
AnnaBridge 189:f392fc9709a3 96
AnnaBridge 189:f392fc9709a3 97 /*! @brief Mater clock source */
AnnaBridge 189:f392fc9709a3 98 typedef enum _sai_mclk_source
AnnaBridge 189:f392fc9709a3 99 {
AnnaBridge 189:f392fc9709a3 100 kSAI_MclkSourceSysclk = 0x0U, /*!< Master clock from the system clock */
AnnaBridge 189:f392fc9709a3 101 kSAI_MclkSourceSelect1, /*!< Master clock from source 1 */
AnnaBridge 189:f392fc9709a3 102 kSAI_MclkSourceSelect2, /*!< Master clock from source 2 */
AnnaBridge 189:f392fc9709a3 103 kSAI_MclkSourceSelect3 /*!< Master clock from source 3 */
AnnaBridge 189:f392fc9709a3 104 } sai_mclk_source_t;
AnnaBridge 189:f392fc9709a3 105
AnnaBridge 189:f392fc9709a3 106 /*! @brief Bit clock source */
AnnaBridge 189:f392fc9709a3 107 typedef enum _sai_bclk_source
AnnaBridge 189:f392fc9709a3 108 {
AnnaBridge 189:f392fc9709a3 109 kSAI_BclkSourceBusclk = 0x0U, /*!< Bit clock using bus clock */
AnnaBridge 189:f392fc9709a3 110 kSAI_BclkSourceMclkDiv, /*!< Bit clock using master clock divider */
AnnaBridge 189:f392fc9709a3 111 kSAI_BclkSourceOtherSai0, /*!< Bit clock from other SAI device */
AnnaBridge 189:f392fc9709a3 112 kSAI_BclkSourceOtherSai1 /*!< Bit clock from other SAI device */
AnnaBridge 189:f392fc9709a3 113 } sai_bclk_source_t;
AnnaBridge 189:f392fc9709a3 114
AnnaBridge 189:f392fc9709a3 115 /*! @brief The SAI interrupt enable flag */
AnnaBridge 189:f392fc9709a3 116 enum _sai_interrupt_enable_t
AnnaBridge 189:f392fc9709a3 117 {
AnnaBridge 189:f392fc9709a3 118 kSAI_WordStartInterruptEnable =
AnnaBridge 189:f392fc9709a3 119 I2S_TCSR_WSIE_MASK, /*!< Word start flag, means the first word in a frame detected */
AnnaBridge 189:f392fc9709a3 120 kSAI_SyncErrorInterruptEnable = I2S_TCSR_SEIE_MASK, /*!< Sync error flag, means the sync error is detected */
AnnaBridge 189:f392fc9709a3 121 kSAI_FIFOWarningInterruptEnable = I2S_TCSR_FWIE_MASK, /*!< FIFO warning flag, means the FIFO is empty */
AnnaBridge 189:f392fc9709a3 122 kSAI_FIFOErrorInterruptEnable = I2S_TCSR_FEIE_MASK, /*!< FIFO error flag */
AnnaBridge 189:f392fc9709a3 123 #if defined(FSL_FEATURE_SAI_FIFO_COUNT) && (FSL_FEATURE_SAI_FIFO_COUNT > 1)
AnnaBridge 189:f392fc9709a3 124 kSAI_FIFORequestInterruptEnable = I2S_TCSR_FRIE_MASK, /*!< FIFO request, means reached watermark */
AnnaBridge 189:f392fc9709a3 125 #endif /* FSL_FEATURE_SAI_FIFO_COUNT */
AnnaBridge 189:f392fc9709a3 126 };
AnnaBridge 189:f392fc9709a3 127
AnnaBridge 189:f392fc9709a3 128 /*! @brief The DMA request sources */
AnnaBridge 189:f392fc9709a3 129 enum _sai_dma_enable_t
AnnaBridge 189:f392fc9709a3 130 {
AnnaBridge 189:f392fc9709a3 131 kSAI_FIFOWarningDMAEnable = I2S_TCSR_FWDE_MASK, /*!< FIFO warning caused by the DMA request */
AnnaBridge 189:f392fc9709a3 132 #if defined(FSL_FEATURE_SAI_FIFO_COUNT) && (FSL_FEATURE_SAI_FIFO_COUNT > 1)
AnnaBridge 189:f392fc9709a3 133 kSAI_FIFORequestDMAEnable = I2S_TCSR_FRDE_MASK, /*!< FIFO request caused by the DMA request */
AnnaBridge 189:f392fc9709a3 134 #endif /* FSL_FEATURE_SAI_FIFO_COUNT */
AnnaBridge 189:f392fc9709a3 135 };
AnnaBridge 189:f392fc9709a3 136
AnnaBridge 189:f392fc9709a3 137 /*! @brief The SAI status flag */
AnnaBridge 189:f392fc9709a3 138 enum _sai_flags
AnnaBridge 189:f392fc9709a3 139 {
AnnaBridge 189:f392fc9709a3 140 kSAI_WordStartFlag = I2S_TCSR_WSF_MASK, /*!< Word start flag, means the first word in a frame detected */
AnnaBridge 189:f392fc9709a3 141 kSAI_SyncErrorFlag = I2S_TCSR_SEF_MASK, /*!< Sync error flag, means the sync error is detected */
AnnaBridge 189:f392fc9709a3 142 kSAI_FIFOErrorFlag = I2S_TCSR_FEF_MASK, /*!< FIFO error flag */
AnnaBridge 189:f392fc9709a3 143 #if defined(FSL_FEATURE_SAI_FIFO_COUNT) && (FSL_FEATURE_SAI_FIFO_COUNT > 1)
AnnaBridge 189:f392fc9709a3 144 kSAI_FIFORequestFlag = I2S_TCSR_FRF_MASK, /*!< FIFO request flag. */
AnnaBridge 189:f392fc9709a3 145 #endif /* FSL_FEATURE_SAI_FIFO_COUNT */
AnnaBridge 189:f392fc9709a3 146 kSAI_FIFOWarningFlag = I2S_TCSR_FWF_MASK, /*!< FIFO warning flag */
AnnaBridge 189:f392fc9709a3 147 };
AnnaBridge 189:f392fc9709a3 148
AnnaBridge 189:f392fc9709a3 149 /*! @brief The reset type */
AnnaBridge 189:f392fc9709a3 150 typedef enum _sai_reset_type
AnnaBridge 189:f392fc9709a3 151 {
AnnaBridge 189:f392fc9709a3 152 kSAI_ResetTypeSoftware = I2S_TCSR_SR_MASK, /*!< Software reset, reset the logic state */
AnnaBridge 189:f392fc9709a3 153 kSAI_ResetTypeFIFO = I2S_TCSR_FR_MASK, /*!< FIFO reset, reset the FIFO read and write pointer */
AnnaBridge 189:f392fc9709a3 154 kSAI_ResetAll = I2S_TCSR_SR_MASK | I2S_TCSR_FR_MASK /*!< All reset. */
AnnaBridge 189:f392fc9709a3 155 } sai_reset_type_t;
AnnaBridge 189:f392fc9709a3 156
AnnaBridge 189:f392fc9709a3 157 #if defined(FSL_FEATURE_SAI_HAS_FIFO_PACKING) && FSL_FEATURE_SAI_HAS_FIFO_PACKING
AnnaBridge 189:f392fc9709a3 158 /*!
AnnaBridge 189:f392fc9709a3 159 * @brief The SAI packing mode
AnnaBridge 189:f392fc9709a3 160 * The mode includes 8 bit and 16 bit packing.
AnnaBridge 189:f392fc9709a3 161 */
AnnaBridge 189:f392fc9709a3 162 typedef enum _sai_fifo_packing
AnnaBridge 189:f392fc9709a3 163 {
AnnaBridge 189:f392fc9709a3 164 kSAI_FifoPackingDisabled = 0x0U, /*!< Packing disabled */
AnnaBridge 189:f392fc9709a3 165 kSAI_FifoPacking8bit = 0x2U, /*!< 8 bit packing enabled */
AnnaBridge 189:f392fc9709a3 166 kSAI_FifoPacking16bit = 0x3U /*!< 16bit packing enabled */
AnnaBridge 189:f392fc9709a3 167 } sai_fifo_packing_t;
AnnaBridge 189:f392fc9709a3 168 #endif /* FSL_FEATURE_SAI_HAS_FIFO_PACKING */
AnnaBridge 189:f392fc9709a3 169
AnnaBridge 189:f392fc9709a3 170 /*! @brief SAI user configuration structure */
AnnaBridge 189:f392fc9709a3 171 typedef struct _sai_config
AnnaBridge 189:f392fc9709a3 172 {
AnnaBridge 189:f392fc9709a3 173 sai_protocol_t protocol; /*!< Audio bus protocol in SAI */
AnnaBridge 189:f392fc9709a3 174 sai_sync_mode_t syncMode; /*!< SAI sync mode, control Tx/Rx clock sync */
AnnaBridge 189:f392fc9709a3 175 #if defined(FSL_FEATURE_SAI_HAS_MCR) && (FSL_FEATURE_SAI_HAS_MCR)
AnnaBridge 189:f392fc9709a3 176 bool mclkOutputEnable; /*!< Master clock output enable, true means master clock divider enabled */
AnnaBridge 189:f392fc9709a3 177 #endif /* FSL_FEATURE_SAI_HAS_MCR */
AnnaBridge 189:f392fc9709a3 178 sai_mclk_source_t mclkSource; /*!< Master Clock source */
AnnaBridge 189:f392fc9709a3 179 sai_bclk_source_t bclkSource; /*!< Bit Clock source */
AnnaBridge 189:f392fc9709a3 180 sai_master_slave_t masterSlave; /*!< Master or slave */
AnnaBridge 189:f392fc9709a3 181 } sai_config_t;
AnnaBridge 189:f392fc9709a3 182
AnnaBridge 189:f392fc9709a3 183 /*!@brief SAI transfer queue size, user can refine it according to use case. */
AnnaBridge 189:f392fc9709a3 184 #define SAI_XFER_QUEUE_SIZE (4)
AnnaBridge 189:f392fc9709a3 185
AnnaBridge 189:f392fc9709a3 186 /*! @brief Audio sample rate */
AnnaBridge 189:f392fc9709a3 187 typedef enum _sai_sample_rate
AnnaBridge 189:f392fc9709a3 188 {
AnnaBridge 189:f392fc9709a3 189 kSAI_SampleRate8KHz = 8000U, /*!< Sample rate 8000 Hz */
AnnaBridge 189:f392fc9709a3 190 kSAI_SampleRate11025Hz = 11025U, /*!< Sample rate 11025 Hz */
AnnaBridge 189:f392fc9709a3 191 kSAI_SampleRate12KHz = 12000U, /*!< Sample rate 12000 Hz */
AnnaBridge 189:f392fc9709a3 192 kSAI_SampleRate16KHz = 16000U, /*!< Sample rate 16000 Hz */
AnnaBridge 189:f392fc9709a3 193 kSAI_SampleRate22050Hz = 22050U, /*!< Sample rate 22050 Hz */
AnnaBridge 189:f392fc9709a3 194 kSAI_SampleRate24KHz = 24000U, /*!< Sample rate 24000 Hz */
AnnaBridge 189:f392fc9709a3 195 kSAI_SampleRate32KHz = 32000U, /*!< Sample rate 32000 Hz */
AnnaBridge 189:f392fc9709a3 196 kSAI_SampleRate44100Hz = 44100U, /*!< Sample rate 44100 Hz */
AnnaBridge 189:f392fc9709a3 197 kSAI_SampleRate48KHz = 48000U, /*!< Sample rate 48000 Hz */
AnnaBridge 189:f392fc9709a3 198 kSAI_SampleRate96KHz = 96000U /*!< Sample rate 96000 Hz */
AnnaBridge 189:f392fc9709a3 199 } sai_sample_rate_t;
AnnaBridge 189:f392fc9709a3 200
AnnaBridge 189:f392fc9709a3 201 /*! @brief Audio word width */
AnnaBridge 189:f392fc9709a3 202 typedef enum _sai_word_width
AnnaBridge 189:f392fc9709a3 203 {
AnnaBridge 189:f392fc9709a3 204 kSAI_WordWidth8bits = 8U, /*!< Audio data width 8 bits */
AnnaBridge 189:f392fc9709a3 205 kSAI_WordWidth16bits = 16U, /*!< Audio data width 16 bits */
AnnaBridge 189:f392fc9709a3 206 kSAI_WordWidth24bits = 24U, /*!< Audio data width 24 bits */
AnnaBridge 189:f392fc9709a3 207 kSAI_WordWidth32bits = 32U /*!< Audio data width 32 bits */
AnnaBridge 189:f392fc9709a3 208 } sai_word_width_t;
AnnaBridge 189:f392fc9709a3 209
AnnaBridge 189:f392fc9709a3 210 /*! @brief sai transfer format */
AnnaBridge 189:f392fc9709a3 211 typedef struct _sai_transfer_format
AnnaBridge 189:f392fc9709a3 212 {
AnnaBridge 189:f392fc9709a3 213 uint32_t sampleRate_Hz; /*!< Sample rate of audio data */
AnnaBridge 189:f392fc9709a3 214 uint32_t bitWidth; /*!< Data length of audio data, usually 8/16/24/32 bits */
AnnaBridge 189:f392fc9709a3 215 sai_mono_stereo_t stereo; /*!< Mono or stereo */
AnnaBridge 189:f392fc9709a3 216 uint32_t masterClockHz; /*!< Master clock frequency in Hz */
AnnaBridge 189:f392fc9709a3 217 #if defined(FSL_FEATURE_SAI_FIFO_COUNT) && (FSL_FEATURE_SAI_FIFO_COUNT > 1)
AnnaBridge 189:f392fc9709a3 218 uint8_t watermark; /*!< Watermark value */
AnnaBridge 189:f392fc9709a3 219 #endif /* FSL_FEATURE_SAI_FIFO_COUNT */
AnnaBridge 189:f392fc9709a3 220 uint8_t channel; /*!< Data channel used in transfer.*/
AnnaBridge 189:f392fc9709a3 221 sai_protocol_t protocol; /*!< Which audio protocol used */
AnnaBridge 189:f392fc9709a3 222 } sai_transfer_format_t;
AnnaBridge 189:f392fc9709a3 223
AnnaBridge 189:f392fc9709a3 224 /*! @brief SAI transfer structure */
AnnaBridge 189:f392fc9709a3 225 typedef struct _sai_transfer
AnnaBridge 189:f392fc9709a3 226 {
AnnaBridge 189:f392fc9709a3 227 uint8_t *data; /*!< Data start address to transfer. */
AnnaBridge 189:f392fc9709a3 228 size_t dataSize; /*!< Transfer size. */
AnnaBridge 189:f392fc9709a3 229 } sai_transfer_t;
AnnaBridge 189:f392fc9709a3 230
AnnaBridge 189:f392fc9709a3 231 typedef struct _sai_handle sai_handle_t;
AnnaBridge 189:f392fc9709a3 232
AnnaBridge 189:f392fc9709a3 233 /*! @brief SAI transfer callback prototype */
AnnaBridge 189:f392fc9709a3 234 typedef void (*sai_transfer_callback_t)(I2S_Type *base, sai_handle_t *handle, status_t status, void *userData);
AnnaBridge 189:f392fc9709a3 235
AnnaBridge 189:f392fc9709a3 236 /*! @brief SAI handle structure */
AnnaBridge 189:f392fc9709a3 237 struct _sai_handle
AnnaBridge 189:f392fc9709a3 238 {
AnnaBridge 189:f392fc9709a3 239 uint32_t state; /*!< Transfer status */
AnnaBridge 189:f392fc9709a3 240 sai_transfer_callback_t callback; /*!< Callback function called at transfer event*/
AnnaBridge 189:f392fc9709a3 241 void *userData; /*!< Callback parameter passed to callback function*/
AnnaBridge 189:f392fc9709a3 242 uint8_t bitWidth; /*!< Bit width for transfer, 8/16/24/32 bits */
AnnaBridge 189:f392fc9709a3 243 uint8_t channel; /*!< Transfer channel */
AnnaBridge 189:f392fc9709a3 244 sai_transfer_t saiQueue[SAI_XFER_QUEUE_SIZE]; /*!< Transfer queue storing queued transfer */
AnnaBridge 189:f392fc9709a3 245 size_t transferSize[SAI_XFER_QUEUE_SIZE]; /*!< Data bytes need to transfer */
AnnaBridge 189:f392fc9709a3 246 volatile uint8_t queueUser; /*!< Index for user to queue transfer */
AnnaBridge 189:f392fc9709a3 247 volatile uint8_t queueDriver; /*!< Index for driver to get the transfer data and size */
AnnaBridge 189:f392fc9709a3 248 #if defined(FSL_FEATURE_SAI_FIFO_COUNT) && (FSL_FEATURE_SAI_FIFO_COUNT > 1)
AnnaBridge 189:f392fc9709a3 249 uint8_t watermark; /*!< Watermark value */
AnnaBridge 189:f392fc9709a3 250 #endif
AnnaBridge 189:f392fc9709a3 251 };
AnnaBridge 189:f392fc9709a3 252
AnnaBridge 189:f392fc9709a3 253 /*******************************************************************************
AnnaBridge 189:f392fc9709a3 254 * API
AnnaBridge 189:f392fc9709a3 255 ******************************************************************************/
AnnaBridge 189:f392fc9709a3 256
AnnaBridge 189:f392fc9709a3 257 #if defined(__cplusplus)
AnnaBridge 189:f392fc9709a3 258 extern "C" {
AnnaBridge 189:f392fc9709a3 259 #endif /*_cplusplus*/
AnnaBridge 189:f392fc9709a3 260
AnnaBridge 189:f392fc9709a3 261 /*!
AnnaBridge 189:f392fc9709a3 262 * @name Initialization and deinitialization
AnnaBridge 189:f392fc9709a3 263 * @{
AnnaBridge 189:f392fc9709a3 264 */
AnnaBridge 189:f392fc9709a3 265
AnnaBridge 189:f392fc9709a3 266 /*!
AnnaBridge 189:f392fc9709a3 267 * @brief Initializes the SAI Tx peripheral.
AnnaBridge 189:f392fc9709a3 268 *
AnnaBridge 189:f392fc9709a3 269 * Ungates the SAI clock, resets the module, and configures SAI Tx with a configuration structure.
AnnaBridge 189:f392fc9709a3 270 * The configuration structure can be custom filled or set with default values by
AnnaBridge 189:f392fc9709a3 271 * SAI_TxGetDefaultConfig().
AnnaBridge 189:f392fc9709a3 272 *
AnnaBridge 189:f392fc9709a3 273 * @note This API should be called at the beginning of the application to use
AnnaBridge 189:f392fc9709a3 274 * the SAI driver. Otherwise, accessing the SAIM module can cause a hard fault
AnnaBridge 189:f392fc9709a3 275 * because the clock is not enabled.
AnnaBridge 189:f392fc9709a3 276 *
AnnaBridge 189:f392fc9709a3 277 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 278 * @param config SAI configuration structure.
AnnaBridge 189:f392fc9709a3 279 */
AnnaBridge 189:f392fc9709a3 280 void SAI_TxInit(I2S_Type *base, const sai_config_t *config);
AnnaBridge 189:f392fc9709a3 281
AnnaBridge 189:f392fc9709a3 282 /*!
AnnaBridge 189:f392fc9709a3 283 * @brief Initializes the the SAI Rx peripheral.
AnnaBridge 189:f392fc9709a3 284 *
AnnaBridge 189:f392fc9709a3 285 * Ungates the SAI clock, resets the module, and configures the SAI Rx with a configuration structure.
AnnaBridge 189:f392fc9709a3 286 * The configuration structure can be custom filled or set with default values by
AnnaBridge 189:f392fc9709a3 287 * SAI_RxGetDefaultConfig().
AnnaBridge 189:f392fc9709a3 288 *
AnnaBridge 189:f392fc9709a3 289 * @note This API should be called at the beginning of the application to use
AnnaBridge 189:f392fc9709a3 290 * the SAI driver. Otherwise, accessing the SAI module can cause a hard fault
AnnaBridge 189:f392fc9709a3 291 * because the clock is not enabled.
AnnaBridge 189:f392fc9709a3 292 *
AnnaBridge 189:f392fc9709a3 293 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 294 * @param config SAI configuration structure.
AnnaBridge 189:f392fc9709a3 295 */
AnnaBridge 189:f392fc9709a3 296 void SAI_RxInit(I2S_Type *base, const sai_config_t *config);
AnnaBridge 189:f392fc9709a3 297
AnnaBridge 189:f392fc9709a3 298 /*!
AnnaBridge 189:f392fc9709a3 299 * @brief Sets the SAI Tx configuration structure to default values.
AnnaBridge 189:f392fc9709a3 300 *
AnnaBridge 189:f392fc9709a3 301 * This API initializes the configuration structure for use in SAI_TxConfig().
AnnaBridge 189:f392fc9709a3 302 * The initialized structure can remain unchanged in SAI_TxConfig(), or it can be modified
AnnaBridge 189:f392fc9709a3 303 * before calling SAI_TxConfig().
AnnaBridge 189:f392fc9709a3 304 * This is an example.
AnnaBridge 189:f392fc9709a3 305 @code
AnnaBridge 189:f392fc9709a3 306 sai_config_t config;
AnnaBridge 189:f392fc9709a3 307 SAI_TxGetDefaultConfig(&config);
AnnaBridge 189:f392fc9709a3 308 @endcode
AnnaBridge 189:f392fc9709a3 309 *
AnnaBridge 189:f392fc9709a3 310 * @param config pointer to master configuration structure
AnnaBridge 189:f392fc9709a3 311 */
AnnaBridge 189:f392fc9709a3 312 void SAI_TxGetDefaultConfig(sai_config_t *config);
AnnaBridge 189:f392fc9709a3 313
AnnaBridge 189:f392fc9709a3 314 /*!
AnnaBridge 189:f392fc9709a3 315 * @brief Sets the SAI Rx configuration structure to default values.
AnnaBridge 189:f392fc9709a3 316 *
AnnaBridge 189:f392fc9709a3 317 * This API initializes the configuration structure for use in SAI_RxConfig().
AnnaBridge 189:f392fc9709a3 318 * The initialized structure can remain unchanged in SAI_RxConfig() or it can be modified
AnnaBridge 189:f392fc9709a3 319 * before calling SAI_RxConfig().
AnnaBridge 189:f392fc9709a3 320 * This is an example.
AnnaBridge 189:f392fc9709a3 321 @code
AnnaBridge 189:f392fc9709a3 322 sai_config_t config;
AnnaBridge 189:f392fc9709a3 323 SAI_RxGetDefaultConfig(&config);
AnnaBridge 189:f392fc9709a3 324 @endcode
AnnaBridge 189:f392fc9709a3 325 *
AnnaBridge 189:f392fc9709a3 326 * @param config pointer to master configuration structure
AnnaBridge 189:f392fc9709a3 327 */
AnnaBridge 189:f392fc9709a3 328 void SAI_RxGetDefaultConfig(sai_config_t *config);
AnnaBridge 189:f392fc9709a3 329
AnnaBridge 189:f392fc9709a3 330 /*!
AnnaBridge 189:f392fc9709a3 331 * @brief De-initializes the SAI peripheral.
AnnaBridge 189:f392fc9709a3 332 *
AnnaBridge 189:f392fc9709a3 333 * This API gates the SAI clock. The SAI module can't operate unless SAI_TxInit
AnnaBridge 189:f392fc9709a3 334 * or SAI_RxInit is called to enable the clock.
AnnaBridge 189:f392fc9709a3 335 *
AnnaBridge 189:f392fc9709a3 336 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 337 */
AnnaBridge 189:f392fc9709a3 338 void SAI_Deinit(I2S_Type *base);
AnnaBridge 189:f392fc9709a3 339
AnnaBridge 189:f392fc9709a3 340 /*!
AnnaBridge 189:f392fc9709a3 341 * @brief Resets the SAI Tx.
AnnaBridge 189:f392fc9709a3 342 *
AnnaBridge 189:f392fc9709a3 343 * This function enables the software reset and FIFO reset of SAI Tx. After reset, clear the reset bit.
AnnaBridge 189:f392fc9709a3 344 *
AnnaBridge 189:f392fc9709a3 345 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 346 */
AnnaBridge 189:f392fc9709a3 347 void SAI_TxReset(I2S_Type *base);
AnnaBridge 189:f392fc9709a3 348
AnnaBridge 189:f392fc9709a3 349 /*!
AnnaBridge 189:f392fc9709a3 350 * @brief Resets the SAI Rx.
AnnaBridge 189:f392fc9709a3 351 *
AnnaBridge 189:f392fc9709a3 352 * This function enables the software reset and FIFO reset of SAI Rx. After reset, clear the reset bit.
AnnaBridge 189:f392fc9709a3 353 *
AnnaBridge 189:f392fc9709a3 354 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 355 */
AnnaBridge 189:f392fc9709a3 356 void SAI_RxReset(I2S_Type *base);
AnnaBridge 189:f392fc9709a3 357
AnnaBridge 189:f392fc9709a3 358 /*!
AnnaBridge 189:f392fc9709a3 359 * @brief Enables/disables the SAI Tx.
AnnaBridge 189:f392fc9709a3 360 *
AnnaBridge 189:f392fc9709a3 361 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 362 * @param enable True means enable SAI Tx, false means disable.
AnnaBridge 189:f392fc9709a3 363 */
AnnaBridge 189:f392fc9709a3 364 void SAI_TxEnable(I2S_Type *base, bool enable);
AnnaBridge 189:f392fc9709a3 365
AnnaBridge 189:f392fc9709a3 366 /*!
AnnaBridge 189:f392fc9709a3 367 * @brief Enables/disables the SAI Rx.
AnnaBridge 189:f392fc9709a3 368 *
AnnaBridge 189:f392fc9709a3 369 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 370 * @param enable True means enable SAI Rx, false means disable.
AnnaBridge 189:f392fc9709a3 371 */
AnnaBridge 189:f392fc9709a3 372 void SAI_RxEnable(I2S_Type *base, bool enable);
AnnaBridge 189:f392fc9709a3 373
AnnaBridge 189:f392fc9709a3 374 /*! @} */
AnnaBridge 189:f392fc9709a3 375
AnnaBridge 189:f392fc9709a3 376 /*!
AnnaBridge 189:f392fc9709a3 377 * @name Status
AnnaBridge 189:f392fc9709a3 378 * @{
AnnaBridge 189:f392fc9709a3 379 */
AnnaBridge 189:f392fc9709a3 380
AnnaBridge 189:f392fc9709a3 381 /*!
AnnaBridge 189:f392fc9709a3 382 * @brief Gets the SAI Tx status flag state.
AnnaBridge 189:f392fc9709a3 383 *
AnnaBridge 189:f392fc9709a3 384 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 385 * @return SAI Tx status flag value. Use the Status Mask to get the status value needed.
AnnaBridge 189:f392fc9709a3 386 */
AnnaBridge 189:f392fc9709a3 387 static inline uint32_t SAI_TxGetStatusFlag(I2S_Type *base)
AnnaBridge 189:f392fc9709a3 388 {
AnnaBridge 189:f392fc9709a3 389 return base->TCSR;
AnnaBridge 189:f392fc9709a3 390 }
AnnaBridge 189:f392fc9709a3 391
AnnaBridge 189:f392fc9709a3 392 /*!
AnnaBridge 189:f392fc9709a3 393 * @brief Clears the SAI Tx status flag state.
AnnaBridge 189:f392fc9709a3 394 *
AnnaBridge 189:f392fc9709a3 395 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 396 * @param mask State mask. It can be a combination of the following source if defined:
AnnaBridge 189:f392fc9709a3 397 * @arg kSAI_WordStartFlag
AnnaBridge 189:f392fc9709a3 398 * @arg kSAI_SyncErrorFlag
AnnaBridge 189:f392fc9709a3 399 * @arg kSAI_FIFOErrorFlag
AnnaBridge 189:f392fc9709a3 400 */
AnnaBridge 189:f392fc9709a3 401 static inline void SAI_TxClearStatusFlags(I2S_Type *base, uint32_t mask)
AnnaBridge 189:f392fc9709a3 402 {
AnnaBridge 189:f392fc9709a3 403 base->TCSR = ((base->TCSR & 0xFFE3FFFFU) | mask);
AnnaBridge 189:f392fc9709a3 404 }
AnnaBridge 189:f392fc9709a3 405
AnnaBridge 189:f392fc9709a3 406 /*!
AnnaBridge 189:f392fc9709a3 407 * @brief Gets the SAI Tx status flag state.
AnnaBridge 189:f392fc9709a3 408 *
AnnaBridge 189:f392fc9709a3 409 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 410 * @return SAI Rx status flag value. Use the Status Mask to get the status value needed.
AnnaBridge 189:f392fc9709a3 411 */
AnnaBridge 189:f392fc9709a3 412 static inline uint32_t SAI_RxGetStatusFlag(I2S_Type *base)
AnnaBridge 189:f392fc9709a3 413 {
AnnaBridge 189:f392fc9709a3 414 return base->RCSR;
AnnaBridge 189:f392fc9709a3 415 }
AnnaBridge 189:f392fc9709a3 416
AnnaBridge 189:f392fc9709a3 417 /*!
AnnaBridge 189:f392fc9709a3 418 * @brief Clears the SAI Rx status flag state.
AnnaBridge 189:f392fc9709a3 419 *
AnnaBridge 189:f392fc9709a3 420 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 421 * @param mask State mask. It can be a combination of the following sources if defined.
AnnaBridge 189:f392fc9709a3 422 * @arg kSAI_WordStartFlag
AnnaBridge 189:f392fc9709a3 423 * @arg kSAI_SyncErrorFlag
AnnaBridge 189:f392fc9709a3 424 * @arg kSAI_FIFOErrorFlag
AnnaBridge 189:f392fc9709a3 425 */
AnnaBridge 189:f392fc9709a3 426 static inline void SAI_RxClearStatusFlags(I2S_Type *base, uint32_t mask)
AnnaBridge 189:f392fc9709a3 427 {
AnnaBridge 189:f392fc9709a3 428 base->RCSR = ((base->RCSR & 0xFFE3FFFFU) | mask);
AnnaBridge 189:f392fc9709a3 429 }
AnnaBridge 189:f392fc9709a3 430
AnnaBridge 189:f392fc9709a3 431 /*! @} */
AnnaBridge 189:f392fc9709a3 432
AnnaBridge 189:f392fc9709a3 433 /*!
AnnaBridge 189:f392fc9709a3 434 * @name Interrupts
AnnaBridge 189:f392fc9709a3 435 * @{
AnnaBridge 189:f392fc9709a3 436 */
AnnaBridge 189:f392fc9709a3 437
AnnaBridge 189:f392fc9709a3 438 /*!
AnnaBridge 189:f392fc9709a3 439 * @brief Enables the SAI Tx interrupt requests.
AnnaBridge 189:f392fc9709a3 440 *
AnnaBridge 189:f392fc9709a3 441 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 442 * @param mask interrupt source
AnnaBridge 189:f392fc9709a3 443 * The parameter can be a combination of the following sources if defined.
AnnaBridge 189:f392fc9709a3 444 * @arg kSAI_WordStartInterruptEnable
AnnaBridge 189:f392fc9709a3 445 * @arg kSAI_SyncErrorInterruptEnable
AnnaBridge 189:f392fc9709a3 446 * @arg kSAI_FIFOWarningInterruptEnable
AnnaBridge 189:f392fc9709a3 447 * @arg kSAI_FIFORequestInterruptEnable
AnnaBridge 189:f392fc9709a3 448 * @arg kSAI_FIFOErrorInterruptEnable
AnnaBridge 189:f392fc9709a3 449 */
AnnaBridge 189:f392fc9709a3 450 static inline void SAI_TxEnableInterrupts(I2S_Type *base, uint32_t mask)
AnnaBridge 189:f392fc9709a3 451 {
AnnaBridge 189:f392fc9709a3 452 base->TCSR = ((base->TCSR & 0xFFE3FFFFU) | mask);
AnnaBridge 189:f392fc9709a3 453 }
AnnaBridge 189:f392fc9709a3 454
AnnaBridge 189:f392fc9709a3 455 /*!
AnnaBridge 189:f392fc9709a3 456 * @brief Enables the SAI Rx interrupt requests.
AnnaBridge 189:f392fc9709a3 457 *
AnnaBridge 189:f392fc9709a3 458 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 459 * @param mask interrupt source
AnnaBridge 189:f392fc9709a3 460 * The parameter can be a combination of the following sources if defined.
AnnaBridge 189:f392fc9709a3 461 * @arg kSAI_WordStartInterruptEnable
AnnaBridge 189:f392fc9709a3 462 * @arg kSAI_SyncErrorInterruptEnable
AnnaBridge 189:f392fc9709a3 463 * @arg kSAI_FIFOWarningInterruptEnable
AnnaBridge 189:f392fc9709a3 464 * @arg kSAI_FIFORequestInterruptEnable
AnnaBridge 189:f392fc9709a3 465 * @arg kSAI_FIFOErrorInterruptEnable
AnnaBridge 189:f392fc9709a3 466 */
AnnaBridge 189:f392fc9709a3 467 static inline void SAI_RxEnableInterrupts(I2S_Type *base, uint32_t mask)
AnnaBridge 189:f392fc9709a3 468 {
AnnaBridge 189:f392fc9709a3 469 base->RCSR = ((base->RCSR & 0xFFE3FFFFU) | mask);
AnnaBridge 189:f392fc9709a3 470 }
AnnaBridge 189:f392fc9709a3 471
AnnaBridge 189:f392fc9709a3 472 /*!
AnnaBridge 189:f392fc9709a3 473 * @brief Disables the SAI Tx interrupt requests.
AnnaBridge 189:f392fc9709a3 474 *
AnnaBridge 189:f392fc9709a3 475 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 476 * @param mask interrupt source
AnnaBridge 189:f392fc9709a3 477 * The parameter can be a combination of the following sources if defined.
AnnaBridge 189:f392fc9709a3 478 * @arg kSAI_WordStartInterruptEnable
AnnaBridge 189:f392fc9709a3 479 * @arg kSAI_SyncErrorInterruptEnable
AnnaBridge 189:f392fc9709a3 480 * @arg kSAI_FIFOWarningInterruptEnable
AnnaBridge 189:f392fc9709a3 481 * @arg kSAI_FIFORequestInterruptEnable
AnnaBridge 189:f392fc9709a3 482 * @arg kSAI_FIFOErrorInterruptEnable
AnnaBridge 189:f392fc9709a3 483 */
AnnaBridge 189:f392fc9709a3 484 static inline void SAI_TxDisableInterrupts(I2S_Type *base, uint32_t mask)
AnnaBridge 189:f392fc9709a3 485 {
AnnaBridge 189:f392fc9709a3 486 base->TCSR = ((base->TCSR & 0xFFE3FFFFU) & (~mask));
AnnaBridge 189:f392fc9709a3 487 }
AnnaBridge 189:f392fc9709a3 488
AnnaBridge 189:f392fc9709a3 489 /*!
AnnaBridge 189:f392fc9709a3 490 * @brief Disables the SAI Rx interrupt requests.
AnnaBridge 189:f392fc9709a3 491 *
AnnaBridge 189:f392fc9709a3 492 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 493 * @param mask interrupt source
AnnaBridge 189:f392fc9709a3 494 * The parameter can be a combination of the following sources if defined.
AnnaBridge 189:f392fc9709a3 495 * @arg kSAI_WordStartInterruptEnable
AnnaBridge 189:f392fc9709a3 496 * @arg kSAI_SyncErrorInterruptEnable
AnnaBridge 189:f392fc9709a3 497 * @arg kSAI_FIFOWarningInterruptEnable
AnnaBridge 189:f392fc9709a3 498 * @arg kSAI_FIFORequestInterruptEnable
AnnaBridge 189:f392fc9709a3 499 * @arg kSAI_FIFOErrorInterruptEnable
AnnaBridge 189:f392fc9709a3 500 */
AnnaBridge 189:f392fc9709a3 501 static inline void SAI_RxDisableInterrupts(I2S_Type *base, uint32_t mask)
AnnaBridge 189:f392fc9709a3 502 {
AnnaBridge 189:f392fc9709a3 503 base->RCSR = ((base->RCSR & 0xFFE3FFFFU) & (~mask));
AnnaBridge 189:f392fc9709a3 504 }
AnnaBridge 189:f392fc9709a3 505
AnnaBridge 189:f392fc9709a3 506 /*! @} */
AnnaBridge 189:f392fc9709a3 507
AnnaBridge 189:f392fc9709a3 508 /*!
AnnaBridge 189:f392fc9709a3 509 * @name DMA Control
AnnaBridge 189:f392fc9709a3 510 * @{
AnnaBridge 189:f392fc9709a3 511 */
AnnaBridge 189:f392fc9709a3 512
AnnaBridge 189:f392fc9709a3 513 /*!
AnnaBridge 189:f392fc9709a3 514 * @brief Enables/disables the SAI Tx DMA requests.
AnnaBridge 189:f392fc9709a3 515 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 516 * @param mask DMA source
AnnaBridge 189:f392fc9709a3 517 * The parameter can be combination of the following sources if defined.
AnnaBridge 189:f392fc9709a3 518 * @arg kSAI_FIFOWarningDMAEnable
AnnaBridge 189:f392fc9709a3 519 * @arg kSAI_FIFORequestDMAEnable
AnnaBridge 189:f392fc9709a3 520 * @param enable True means enable DMA, false means disable DMA.
AnnaBridge 189:f392fc9709a3 521 */
AnnaBridge 189:f392fc9709a3 522 static inline void SAI_TxEnableDMA(I2S_Type *base, uint32_t mask, bool enable)
AnnaBridge 189:f392fc9709a3 523 {
AnnaBridge 189:f392fc9709a3 524 if (enable)
AnnaBridge 189:f392fc9709a3 525 {
AnnaBridge 189:f392fc9709a3 526 base->TCSR = ((base->TCSR & 0xFFE3FFFFU) | mask);
AnnaBridge 189:f392fc9709a3 527 }
AnnaBridge 189:f392fc9709a3 528 else
AnnaBridge 189:f392fc9709a3 529 {
AnnaBridge 189:f392fc9709a3 530 base->TCSR = ((base->TCSR & 0xFFE3FFFFU) & (~mask));
AnnaBridge 189:f392fc9709a3 531 }
AnnaBridge 189:f392fc9709a3 532 }
AnnaBridge 189:f392fc9709a3 533
AnnaBridge 189:f392fc9709a3 534 /*!
AnnaBridge 189:f392fc9709a3 535 * @brief Enables/disables the SAI Rx DMA requests.
AnnaBridge 189:f392fc9709a3 536 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 537 * @param mask DMA source
AnnaBridge 189:f392fc9709a3 538 * The parameter can be a combination of the following sources if defined.
AnnaBridge 189:f392fc9709a3 539 * @arg kSAI_FIFOWarningDMAEnable
AnnaBridge 189:f392fc9709a3 540 * @arg kSAI_FIFORequestDMAEnable
AnnaBridge 189:f392fc9709a3 541 * @param enable True means enable DMA, false means disable DMA.
AnnaBridge 189:f392fc9709a3 542 */
AnnaBridge 189:f392fc9709a3 543 static inline void SAI_RxEnableDMA(I2S_Type *base, uint32_t mask, bool enable)
AnnaBridge 189:f392fc9709a3 544 {
AnnaBridge 189:f392fc9709a3 545 if (enable)
AnnaBridge 189:f392fc9709a3 546 {
AnnaBridge 189:f392fc9709a3 547 base->RCSR = ((base->RCSR & 0xFFE3FFFFU) | mask);
AnnaBridge 189:f392fc9709a3 548 }
AnnaBridge 189:f392fc9709a3 549 else
AnnaBridge 189:f392fc9709a3 550 {
AnnaBridge 189:f392fc9709a3 551 base->RCSR = ((base->RCSR & 0xFFE3FFFFU) & (~mask));
AnnaBridge 189:f392fc9709a3 552 }
AnnaBridge 189:f392fc9709a3 553 }
AnnaBridge 189:f392fc9709a3 554
AnnaBridge 189:f392fc9709a3 555 /*!
AnnaBridge 189:f392fc9709a3 556 * @brief Gets the SAI Tx data register address.
AnnaBridge 189:f392fc9709a3 557 *
AnnaBridge 189:f392fc9709a3 558 * This API is used to provide a transfer address for the SAI DMA transfer configuration.
AnnaBridge 189:f392fc9709a3 559 *
AnnaBridge 189:f392fc9709a3 560 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 561 * @param channel Which data channel used.
AnnaBridge 189:f392fc9709a3 562 * @return data register address.
AnnaBridge 189:f392fc9709a3 563 */
AnnaBridge 189:f392fc9709a3 564 static inline uint32_t SAI_TxGetDataRegisterAddress(I2S_Type *base, uint32_t channel)
AnnaBridge 189:f392fc9709a3 565 {
AnnaBridge 189:f392fc9709a3 566 return (uint32_t)(&(base->TDR)[channel]);
AnnaBridge 189:f392fc9709a3 567 }
AnnaBridge 189:f392fc9709a3 568
AnnaBridge 189:f392fc9709a3 569 /*!
AnnaBridge 189:f392fc9709a3 570 * @brief Gets the SAI Rx data register address.
AnnaBridge 189:f392fc9709a3 571 *
AnnaBridge 189:f392fc9709a3 572 * This API is used to provide a transfer address for the SAI DMA transfer configuration.
AnnaBridge 189:f392fc9709a3 573 *
AnnaBridge 189:f392fc9709a3 574 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 575 * @param channel Which data channel used.
AnnaBridge 189:f392fc9709a3 576 * @return data register address.
AnnaBridge 189:f392fc9709a3 577 */
AnnaBridge 189:f392fc9709a3 578 static inline uint32_t SAI_RxGetDataRegisterAddress(I2S_Type *base, uint32_t channel)
AnnaBridge 189:f392fc9709a3 579 {
AnnaBridge 189:f392fc9709a3 580 return (uint32_t)(&(base->RDR)[channel]);
AnnaBridge 189:f392fc9709a3 581 }
AnnaBridge 189:f392fc9709a3 582
AnnaBridge 189:f392fc9709a3 583 /*! @} */
AnnaBridge 189:f392fc9709a3 584
AnnaBridge 189:f392fc9709a3 585 /*!
AnnaBridge 189:f392fc9709a3 586 * @name Bus Operations
AnnaBridge 189:f392fc9709a3 587 * @{
AnnaBridge 189:f392fc9709a3 588 */
AnnaBridge 189:f392fc9709a3 589
AnnaBridge 189:f392fc9709a3 590 /*!
AnnaBridge 189:f392fc9709a3 591 * @brief Configures the SAI Tx audio format.
AnnaBridge 189:f392fc9709a3 592 *
AnnaBridge 189:f392fc9709a3 593 * The audio format can be changed at run-time. This function configures the sample rate and audio data
AnnaBridge 189:f392fc9709a3 594 * format to be transferred.
AnnaBridge 189:f392fc9709a3 595 *
AnnaBridge 189:f392fc9709a3 596 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 597 * @param format Pointer to the SAI audio data format structure.
AnnaBridge 189:f392fc9709a3 598 * @param mclkSourceClockHz SAI master clock source frequency in Hz.
AnnaBridge 189:f392fc9709a3 599 * @param bclkSourceClockHz SAI bit clock source frequency in Hz. If the bit clock source is a master
AnnaBridge 189:f392fc9709a3 600 * clock, this value should equal the masterClockHz.
AnnaBridge 189:f392fc9709a3 601 */
AnnaBridge 189:f392fc9709a3 602 void SAI_TxSetFormat(I2S_Type *base,
AnnaBridge 189:f392fc9709a3 603 sai_transfer_format_t *format,
AnnaBridge 189:f392fc9709a3 604 uint32_t mclkSourceClockHz,
AnnaBridge 189:f392fc9709a3 605 uint32_t bclkSourceClockHz);
AnnaBridge 189:f392fc9709a3 606
AnnaBridge 189:f392fc9709a3 607 /*!
AnnaBridge 189:f392fc9709a3 608 * @brief Configures the SAI Rx audio format.
AnnaBridge 189:f392fc9709a3 609 *
AnnaBridge 189:f392fc9709a3 610 * The audio format can be changed at run-time. This function configures the sample rate and audio data
AnnaBridge 189:f392fc9709a3 611 * format to be transferred.
AnnaBridge 189:f392fc9709a3 612 *
AnnaBridge 189:f392fc9709a3 613 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 614 * @param format Pointer to the SAI audio data format structure.
AnnaBridge 189:f392fc9709a3 615 * @param mclkSourceClockHz SAI master clock source frequency in Hz.
AnnaBridge 189:f392fc9709a3 616 * @param bclkSourceClockHz SAI bit clock source frequency in Hz. If the bit clock source is a master
AnnaBridge 189:f392fc9709a3 617 * clock, this value should equal the masterClockHz.
AnnaBridge 189:f392fc9709a3 618 */
AnnaBridge 189:f392fc9709a3 619 void SAI_RxSetFormat(I2S_Type *base,
AnnaBridge 189:f392fc9709a3 620 sai_transfer_format_t *format,
AnnaBridge 189:f392fc9709a3 621 uint32_t mclkSourceClockHz,
AnnaBridge 189:f392fc9709a3 622 uint32_t bclkSourceClockHz);
AnnaBridge 189:f392fc9709a3 623
AnnaBridge 189:f392fc9709a3 624 /*!
AnnaBridge 189:f392fc9709a3 625 * @brief Sends data using a blocking method.
AnnaBridge 189:f392fc9709a3 626 *
AnnaBridge 189:f392fc9709a3 627 * @note This function blocks by polling until data is ready to be sent.
AnnaBridge 189:f392fc9709a3 628 *
AnnaBridge 189:f392fc9709a3 629 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 630 * @param channel Data channel used.
AnnaBridge 189:f392fc9709a3 631 * @param bitWidth How many bits in an audio word; usually 8/16/24/32 bits.
AnnaBridge 189:f392fc9709a3 632 * @param buffer Pointer to the data to be written.
AnnaBridge 189:f392fc9709a3 633 * @param size Bytes to be written.
AnnaBridge 189:f392fc9709a3 634 */
AnnaBridge 189:f392fc9709a3 635 void SAI_WriteBlocking(I2S_Type *base, uint32_t channel, uint32_t bitWidth, uint8_t *buffer, uint32_t size);
AnnaBridge 189:f392fc9709a3 636
AnnaBridge 189:f392fc9709a3 637 /*!
AnnaBridge 189:f392fc9709a3 638 * @brief Writes data into SAI FIFO.
AnnaBridge 189:f392fc9709a3 639 *
AnnaBridge 189:f392fc9709a3 640 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 641 * @param channel Data channel used.
AnnaBridge 189:f392fc9709a3 642 * @param data Data needs to be written.
AnnaBridge 189:f392fc9709a3 643 */
AnnaBridge 189:f392fc9709a3 644 static inline void SAI_WriteData(I2S_Type *base, uint32_t channel, uint32_t data)
AnnaBridge 189:f392fc9709a3 645 {
AnnaBridge 189:f392fc9709a3 646 base->TDR[channel] = data;
AnnaBridge 189:f392fc9709a3 647 }
AnnaBridge 189:f392fc9709a3 648
AnnaBridge 189:f392fc9709a3 649 /*!
AnnaBridge 189:f392fc9709a3 650 * @brief Receives data using a blocking method.
AnnaBridge 189:f392fc9709a3 651 *
AnnaBridge 189:f392fc9709a3 652 * @note This function blocks by polling until data is ready to be sent.
AnnaBridge 189:f392fc9709a3 653 *
AnnaBridge 189:f392fc9709a3 654 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 655 * @param channel Data channel used.
AnnaBridge 189:f392fc9709a3 656 * @param bitWidth How many bits in an audio word; usually 8/16/24/32 bits.
AnnaBridge 189:f392fc9709a3 657 * @param buffer Pointer to the data to be read.
AnnaBridge 189:f392fc9709a3 658 * @param size Bytes to be read.
AnnaBridge 189:f392fc9709a3 659 */
AnnaBridge 189:f392fc9709a3 660 void SAI_ReadBlocking(I2S_Type *base, uint32_t channel, uint32_t bitWidth, uint8_t *buffer, uint32_t size);
AnnaBridge 189:f392fc9709a3 661
AnnaBridge 189:f392fc9709a3 662 /*!
AnnaBridge 189:f392fc9709a3 663 * @brief Reads data from the SAI FIFO.
AnnaBridge 189:f392fc9709a3 664 *
AnnaBridge 189:f392fc9709a3 665 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 666 * @param channel Data channel used.
AnnaBridge 189:f392fc9709a3 667 * @return Data in SAI FIFO.
AnnaBridge 189:f392fc9709a3 668 */
AnnaBridge 189:f392fc9709a3 669 static inline uint32_t SAI_ReadData(I2S_Type *base, uint32_t channel)
AnnaBridge 189:f392fc9709a3 670 {
AnnaBridge 189:f392fc9709a3 671 return base->RDR[channel];
AnnaBridge 189:f392fc9709a3 672 }
AnnaBridge 189:f392fc9709a3 673
AnnaBridge 189:f392fc9709a3 674 /*! @} */
AnnaBridge 189:f392fc9709a3 675
AnnaBridge 189:f392fc9709a3 676 /*!
AnnaBridge 189:f392fc9709a3 677 * @name Transactional
AnnaBridge 189:f392fc9709a3 678 * @{
AnnaBridge 189:f392fc9709a3 679 */
AnnaBridge 189:f392fc9709a3 680
AnnaBridge 189:f392fc9709a3 681 /*!
AnnaBridge 189:f392fc9709a3 682 * @brief Initializes the SAI Tx handle.
AnnaBridge 189:f392fc9709a3 683 *
AnnaBridge 189:f392fc9709a3 684 * This function initializes the Tx handle for the SAI Tx transactional APIs. Call
AnnaBridge 189:f392fc9709a3 685 * this function once to get the handle initialized.
AnnaBridge 189:f392fc9709a3 686 *
AnnaBridge 189:f392fc9709a3 687 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 688 * @param handle SAI handle pointer.
AnnaBridge 189:f392fc9709a3 689 * @param callback Pointer to the user callback function.
AnnaBridge 189:f392fc9709a3 690 * @param userData User parameter passed to the callback function
AnnaBridge 189:f392fc9709a3 691 */
AnnaBridge 189:f392fc9709a3 692 void SAI_TransferTxCreateHandle(I2S_Type *base, sai_handle_t *handle, sai_transfer_callback_t callback, void *userData);
AnnaBridge 189:f392fc9709a3 693
AnnaBridge 189:f392fc9709a3 694 /*!
AnnaBridge 189:f392fc9709a3 695 * @brief Initializes the SAI Rx handle.
AnnaBridge 189:f392fc9709a3 696 *
AnnaBridge 189:f392fc9709a3 697 * This function initializes the Rx handle for the SAI Rx transactional APIs. Call
AnnaBridge 189:f392fc9709a3 698 * this function once to get the handle initialized.
AnnaBridge 189:f392fc9709a3 699 *
AnnaBridge 189:f392fc9709a3 700 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 701 * @param handle SAI handle pointer.
AnnaBridge 189:f392fc9709a3 702 * @param callback Pointer to the user callback function.
AnnaBridge 189:f392fc9709a3 703 * @param userData User parameter passed to the callback function.
AnnaBridge 189:f392fc9709a3 704 */
AnnaBridge 189:f392fc9709a3 705 void SAI_TransferRxCreateHandle(I2S_Type *base, sai_handle_t *handle, sai_transfer_callback_t callback, void *userData);
AnnaBridge 189:f392fc9709a3 706
AnnaBridge 189:f392fc9709a3 707 /*!
AnnaBridge 189:f392fc9709a3 708 * @brief Configures the SAI Tx audio format.
AnnaBridge 189:f392fc9709a3 709 *
AnnaBridge 189:f392fc9709a3 710 * The audio format can be changed at run-time. This function configures the sample rate and audio data
AnnaBridge 189:f392fc9709a3 711 * format to be transferred.
AnnaBridge 189:f392fc9709a3 712 *
AnnaBridge 189:f392fc9709a3 713 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 714 * @param handle SAI handle pointer.
AnnaBridge 189:f392fc9709a3 715 * @param format Pointer to the SAI audio data format structure.
AnnaBridge 189:f392fc9709a3 716 * @param mclkSourceClockHz SAI master clock source frequency in Hz.
AnnaBridge 189:f392fc9709a3 717 * @param bclkSourceClockHz SAI bit clock source frequency in Hz. If a bit clock source is a master
AnnaBridge 189:f392fc9709a3 718 * clock, this value should equal the masterClockHz in format.
AnnaBridge 189:f392fc9709a3 719 * @return Status of this function. Return value is the status_t.
AnnaBridge 189:f392fc9709a3 720 */
AnnaBridge 189:f392fc9709a3 721 status_t SAI_TransferTxSetFormat(I2S_Type *base,
AnnaBridge 189:f392fc9709a3 722 sai_handle_t *handle,
AnnaBridge 189:f392fc9709a3 723 sai_transfer_format_t *format,
AnnaBridge 189:f392fc9709a3 724 uint32_t mclkSourceClockHz,
AnnaBridge 189:f392fc9709a3 725 uint32_t bclkSourceClockHz);
AnnaBridge 189:f392fc9709a3 726
AnnaBridge 189:f392fc9709a3 727 /*!
AnnaBridge 189:f392fc9709a3 728 * @brief Configures the SAI Rx audio format.
AnnaBridge 189:f392fc9709a3 729 *
AnnaBridge 189:f392fc9709a3 730 * The audio format can be changed at run-time. This function configures the sample rate and audio data
AnnaBridge 189:f392fc9709a3 731 * format to be transferred.
AnnaBridge 189:f392fc9709a3 732 *
AnnaBridge 189:f392fc9709a3 733 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 734 * @param handle SAI handle pointer.
AnnaBridge 189:f392fc9709a3 735 * @param format Pointer to the SAI audio data format structure.
AnnaBridge 189:f392fc9709a3 736 * @param mclkSourceClockHz SAI master clock source frequency in Hz.
AnnaBridge 189:f392fc9709a3 737 * @param bclkSourceClockHz SAI bit clock source frequency in Hz. If a bit clock source is a master
AnnaBridge 189:f392fc9709a3 738 * clock, this value should equal the masterClockHz in format.
AnnaBridge 189:f392fc9709a3 739 * @return Status of this function. Return value is one of status_t.
AnnaBridge 189:f392fc9709a3 740 */
AnnaBridge 189:f392fc9709a3 741 status_t SAI_TransferRxSetFormat(I2S_Type *base,
AnnaBridge 189:f392fc9709a3 742 sai_handle_t *handle,
AnnaBridge 189:f392fc9709a3 743 sai_transfer_format_t *format,
AnnaBridge 189:f392fc9709a3 744 uint32_t mclkSourceClockHz,
AnnaBridge 189:f392fc9709a3 745 uint32_t bclkSourceClockHz);
AnnaBridge 189:f392fc9709a3 746
AnnaBridge 189:f392fc9709a3 747 /*!
AnnaBridge 189:f392fc9709a3 748 * @brief Performs an interrupt non-blocking send transfer on SAI.
AnnaBridge 189:f392fc9709a3 749 *
AnnaBridge 189:f392fc9709a3 750 * @note This API returns immediately after the transfer initiates.
AnnaBridge 189:f392fc9709a3 751 * Call the SAI_TxGetTransferStatusIRQ to poll the transfer status and check whether
AnnaBridge 189:f392fc9709a3 752 * the transfer is finished. If the return status is not kStatus_SAI_Busy, the transfer
AnnaBridge 189:f392fc9709a3 753 * is finished.
AnnaBridge 189:f392fc9709a3 754 *
AnnaBridge 189:f392fc9709a3 755 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 756 * @param handle Pointer to the sai_handle_t structure which stores the transfer state.
AnnaBridge 189:f392fc9709a3 757 * @param xfer Pointer to the sai_transfer_t structure.
AnnaBridge 189:f392fc9709a3 758 * @retval kStatus_Success Successfully started the data receive.
AnnaBridge 189:f392fc9709a3 759 * @retval kStatus_SAI_TxBusy Previous receive still not finished.
AnnaBridge 189:f392fc9709a3 760 * @retval kStatus_InvalidArgument The input parameter is invalid.
AnnaBridge 189:f392fc9709a3 761 */
AnnaBridge 189:f392fc9709a3 762 status_t SAI_TransferSendNonBlocking(I2S_Type *base, sai_handle_t *handle, sai_transfer_t *xfer);
AnnaBridge 189:f392fc9709a3 763
AnnaBridge 189:f392fc9709a3 764 /*!
AnnaBridge 189:f392fc9709a3 765 * @brief Performs an interrupt non-blocking receive transfer on SAI.
AnnaBridge 189:f392fc9709a3 766 *
AnnaBridge 189:f392fc9709a3 767 * @note This API returns immediately after the transfer initiates.
AnnaBridge 189:f392fc9709a3 768 * Call the SAI_RxGetTransferStatusIRQ to poll the transfer status and check whether
AnnaBridge 189:f392fc9709a3 769 * the transfer is finished. If the return status is not kStatus_SAI_Busy, the transfer
AnnaBridge 189:f392fc9709a3 770 * is finished.
AnnaBridge 189:f392fc9709a3 771 *
AnnaBridge 189:f392fc9709a3 772 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 773 * @param handle Pointer to the sai_handle_t structure which stores the transfer state.
AnnaBridge 189:f392fc9709a3 774 * @param xfer Pointer to the sai_transfer_t structure.
AnnaBridge 189:f392fc9709a3 775 * @retval kStatus_Success Successfully started the data receive.
AnnaBridge 189:f392fc9709a3 776 * @retval kStatus_SAI_RxBusy Previous receive still not finished.
AnnaBridge 189:f392fc9709a3 777 * @retval kStatus_InvalidArgument The input parameter is invalid.
AnnaBridge 189:f392fc9709a3 778 */
AnnaBridge 189:f392fc9709a3 779 status_t SAI_TransferReceiveNonBlocking(I2S_Type *base, sai_handle_t *handle, sai_transfer_t *xfer);
AnnaBridge 189:f392fc9709a3 780
AnnaBridge 189:f392fc9709a3 781 /*!
AnnaBridge 189:f392fc9709a3 782 * @brief Gets a set byte count.
AnnaBridge 189:f392fc9709a3 783 *
AnnaBridge 189:f392fc9709a3 784 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 785 * @param handle Pointer to the sai_handle_t structure which stores the transfer state.
AnnaBridge 189:f392fc9709a3 786 * @param count Bytes count sent.
AnnaBridge 189:f392fc9709a3 787 * @retval kStatus_Success Succeed get the transfer count.
AnnaBridge 189:f392fc9709a3 788 * @retval kStatus_NoTransferInProgress There is not a non-blocking transaction currently in progress.
AnnaBridge 189:f392fc9709a3 789 */
AnnaBridge 189:f392fc9709a3 790 status_t SAI_TransferGetSendCount(I2S_Type *base, sai_handle_t *handle, size_t *count);
AnnaBridge 189:f392fc9709a3 791
AnnaBridge 189:f392fc9709a3 792 /*!
AnnaBridge 189:f392fc9709a3 793 * @brief Gets a received byte count.
AnnaBridge 189:f392fc9709a3 794 *
AnnaBridge 189:f392fc9709a3 795 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 796 * @param handle Pointer to the sai_handle_t structure which stores the transfer state.
AnnaBridge 189:f392fc9709a3 797 * @param count Bytes count received.
AnnaBridge 189:f392fc9709a3 798 * @retval kStatus_Success Succeed get the transfer count.
AnnaBridge 189:f392fc9709a3 799 * @retval kStatus_NoTransferInProgress There is not a non-blocking transaction currently in progress.
AnnaBridge 189:f392fc9709a3 800 */
AnnaBridge 189:f392fc9709a3 801 status_t SAI_TransferGetReceiveCount(I2S_Type *base, sai_handle_t *handle, size_t *count);
AnnaBridge 189:f392fc9709a3 802
AnnaBridge 189:f392fc9709a3 803 /*!
AnnaBridge 189:f392fc9709a3 804 * @brief Aborts the current send.
AnnaBridge 189:f392fc9709a3 805 *
AnnaBridge 189:f392fc9709a3 806 * @note This API can be called any time when an interrupt non-blocking transfer initiates
AnnaBridge 189:f392fc9709a3 807 * to abort the transfer early.
AnnaBridge 189:f392fc9709a3 808 *
AnnaBridge 189:f392fc9709a3 809 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 810 * @param handle Pointer to the sai_handle_t structure which stores the transfer state.
AnnaBridge 189:f392fc9709a3 811 */
AnnaBridge 189:f392fc9709a3 812 void SAI_TransferAbortSend(I2S_Type *base, sai_handle_t *handle);
AnnaBridge 189:f392fc9709a3 813
AnnaBridge 189:f392fc9709a3 814 /*!
AnnaBridge 189:f392fc9709a3 815 * @brief Aborts the the current IRQ receive.
AnnaBridge 189:f392fc9709a3 816 *
AnnaBridge 189:f392fc9709a3 817 * @note This API can be called when an interrupt non-blocking transfer initiates
AnnaBridge 189:f392fc9709a3 818 * to abort the transfer early.
AnnaBridge 189:f392fc9709a3 819 *
AnnaBridge 189:f392fc9709a3 820 * @param base SAI base pointer
AnnaBridge 189:f392fc9709a3 821 * @param handle Pointer to the sai_handle_t structure which stores the transfer state.
AnnaBridge 189:f392fc9709a3 822 */
AnnaBridge 189:f392fc9709a3 823 void SAI_TransferAbortReceive(I2S_Type *base, sai_handle_t *handle);
AnnaBridge 189:f392fc9709a3 824
AnnaBridge 189:f392fc9709a3 825 /*!
AnnaBridge 189:f392fc9709a3 826 * @brief Tx interrupt handler.
AnnaBridge 189:f392fc9709a3 827 *
AnnaBridge 189:f392fc9709a3 828 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 829 * @param handle Pointer to the sai_handle_t structure.
AnnaBridge 189:f392fc9709a3 830 */
AnnaBridge 189:f392fc9709a3 831 void SAI_TransferTxHandleIRQ(I2S_Type *base, sai_handle_t *handle);
AnnaBridge 189:f392fc9709a3 832
AnnaBridge 189:f392fc9709a3 833 /*!
AnnaBridge 189:f392fc9709a3 834 * @brief Tx interrupt handler.
AnnaBridge 189:f392fc9709a3 835 *
AnnaBridge 189:f392fc9709a3 836 * @param base SAI base pointer.
AnnaBridge 189:f392fc9709a3 837 * @param handle Pointer to the sai_handle_t structure.
AnnaBridge 189:f392fc9709a3 838 */
AnnaBridge 189:f392fc9709a3 839 void SAI_TransferRxHandleIRQ(I2S_Type *base, sai_handle_t *handle);
AnnaBridge 189:f392fc9709a3 840
AnnaBridge 189:f392fc9709a3 841 /*! @} */
AnnaBridge 189:f392fc9709a3 842
AnnaBridge 189:f392fc9709a3 843 #if defined(__cplusplus)
AnnaBridge 189:f392fc9709a3 844 }
AnnaBridge 189:f392fc9709a3 845 #endif /*_cplusplus*/
AnnaBridge 189:f392fc9709a3 846
AnnaBridge 189:f392fc9709a3 847 /*! @} */
AnnaBridge 189:f392fc9709a3 848
AnnaBridge 189:f392fc9709a3 849 #endif /* _FSL_SAI_H_ */