The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 161:aa5281ff4a02 1 /*
AnnaBridge 170:e95d10626187 2 * The Clear BSD License
AnnaBridge 161:aa5281ff4a02 3 * Copyright (c) 2015, Freescale Semiconductor, Inc.
AnnaBridge 161:aa5281ff4a02 4 * Copyright 2016-2017 NXP
AnnaBridge 170:e95d10626187 5 * All rights reserved.
AnnaBridge 170:e95d10626187 6 *
AnnaBridge 161:aa5281ff4a02 7 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 170:e95d10626187 8 * are permitted (subject to the limitations in the disclaimer below) provided
AnnaBridge 170:e95d10626187 9 * that the following conditions are met:
AnnaBridge 161:aa5281ff4a02 10 *
AnnaBridge 161:aa5281ff4a02 11 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 161:aa5281ff4a02 12 * of conditions and the following disclaimer.
AnnaBridge 161:aa5281ff4a02 13 *
AnnaBridge 161:aa5281ff4a02 14 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 161:aa5281ff4a02 15 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 161:aa5281ff4a02 16 * other materials provided with the distribution.
AnnaBridge 161:aa5281ff4a02 17 *
AnnaBridge 161:aa5281ff4a02 18 * o Neither the name of the copyright holder nor the names of its
AnnaBridge 161:aa5281ff4a02 19 * contributors may be used to endorse or promote products derived from this
AnnaBridge 161:aa5281ff4a02 20 * software without specific prior written permission.
AnnaBridge 161:aa5281ff4a02 21 *
AnnaBridge 170:e95d10626187 22 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
AnnaBridge 161:aa5281ff4a02 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 161:aa5281ff4a02 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 161:aa5281ff4a02 25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 161:aa5281ff4a02 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 161:aa5281ff4a02 27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 161:aa5281ff4a02 28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 161:aa5281ff4a02 29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 161:aa5281ff4a02 30 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 161:aa5281ff4a02 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 161:aa5281ff4a02 32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 161:aa5281ff4a02 33 */
AnnaBridge 161:aa5281ff4a02 34 #ifndef _FSL_FLEXIO_I2S_EDMA_H_
AnnaBridge 161:aa5281ff4a02 35 #define _FSL_FLEXIO_I2S_EDMA_H_
AnnaBridge 161:aa5281ff4a02 36
AnnaBridge 161:aa5281ff4a02 37 #include "fsl_flexio_i2s.h"
AnnaBridge 161:aa5281ff4a02 38 #include "fsl_edma.h"
AnnaBridge 161:aa5281ff4a02 39
AnnaBridge 161:aa5281ff4a02 40 /*!
AnnaBridge 161:aa5281ff4a02 41 * @addtogroup flexio_edma_i2s
AnnaBridge 161:aa5281ff4a02 42 * @{
AnnaBridge 161:aa5281ff4a02 43 */
AnnaBridge 161:aa5281ff4a02 44
AnnaBridge 161:aa5281ff4a02 45 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 46 * Definitions
AnnaBridge 161:aa5281ff4a02 47 ******************************************************************************/
AnnaBridge 161:aa5281ff4a02 48
AnnaBridge 170:e95d10626187 49 /*! @name Driver version */
AnnaBridge 170:e95d10626187 50 /*@{*/
AnnaBridge 170:e95d10626187 51 /*! @brief FlexIO I2S EDMA driver version 2.1.4. */
AnnaBridge 170:e95d10626187 52 #define FSL_FLEXIO_I2S_EDMA_DRIVER_VERSION (MAKE_VERSION(2, 1, 4))
AnnaBridge 170:e95d10626187 53 /*@}*/
AnnaBridge 170:e95d10626187 54
AnnaBridge 161:aa5281ff4a02 55 typedef struct _flexio_i2s_edma_handle flexio_i2s_edma_handle_t;
AnnaBridge 161:aa5281ff4a02 56
AnnaBridge 161:aa5281ff4a02 57 /*! @brief FlexIO I2S eDMA transfer callback function for finish and error */
AnnaBridge 161:aa5281ff4a02 58 typedef void (*flexio_i2s_edma_callback_t)(FLEXIO_I2S_Type *base,
AnnaBridge 161:aa5281ff4a02 59 flexio_i2s_edma_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 60 status_t status,
AnnaBridge 161:aa5281ff4a02 61 void *userData);
AnnaBridge 161:aa5281ff4a02 62
AnnaBridge 161:aa5281ff4a02 63 /*! @brief FlexIO I2S DMA transfer handle, users should not touch the content of the handle.*/
AnnaBridge 161:aa5281ff4a02 64 struct _flexio_i2s_edma_handle
AnnaBridge 161:aa5281ff4a02 65 {
AnnaBridge 161:aa5281ff4a02 66 edma_handle_t *dmaHandle; /*!< DMA handler for FlexIO I2S send */
AnnaBridge 161:aa5281ff4a02 67 uint8_t bytesPerFrame; /*!< Bytes in a frame */
AnnaBridge 161:aa5281ff4a02 68 uint8_t nbytes; /*!< eDMA minor byte transfer count initially configured. */
AnnaBridge 161:aa5281ff4a02 69 uint32_t state; /*!< Internal state for FlexIO I2S eDMA transfer */
AnnaBridge 161:aa5281ff4a02 70 flexio_i2s_edma_callback_t callback; /*!< Callback for users while transfer finish or error occurred */
AnnaBridge 161:aa5281ff4a02 71 void *userData; /*!< User callback parameter */
AnnaBridge 161:aa5281ff4a02 72 edma_tcd_t tcd[FLEXIO_I2S_XFER_QUEUE_SIZE + 1U]; /*!< TCD pool for eDMA transfer. */
AnnaBridge 161:aa5281ff4a02 73 flexio_i2s_transfer_t queue[FLEXIO_I2S_XFER_QUEUE_SIZE]; /*!< Transfer queue storing queued transfer. */
AnnaBridge 161:aa5281ff4a02 74 size_t transferSize[FLEXIO_I2S_XFER_QUEUE_SIZE]; /*!< Data bytes need to transfer */
AnnaBridge 161:aa5281ff4a02 75 volatile uint8_t queueUser; /*!< Index for user to queue transfer. */
AnnaBridge 161:aa5281ff4a02 76 volatile uint8_t queueDriver; /*!< Index for driver to get the transfer data and size */
AnnaBridge 161:aa5281ff4a02 77 };
AnnaBridge 161:aa5281ff4a02 78
AnnaBridge 161:aa5281ff4a02 79 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 80 * APIs
AnnaBridge 161:aa5281ff4a02 81 ******************************************************************************/
AnnaBridge 161:aa5281ff4a02 82 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 83 extern "C" {
AnnaBridge 161:aa5281ff4a02 84 #endif
AnnaBridge 161:aa5281ff4a02 85
AnnaBridge 161:aa5281ff4a02 86 /*!
AnnaBridge 161:aa5281ff4a02 87 * @name eDMA Transactional
AnnaBridge 161:aa5281ff4a02 88 * @{
AnnaBridge 161:aa5281ff4a02 89 */
AnnaBridge 161:aa5281ff4a02 90
AnnaBridge 161:aa5281ff4a02 91 /*!
AnnaBridge 161:aa5281ff4a02 92 * @brief Initializes the FlexIO I2S eDMA handle.
AnnaBridge 161:aa5281ff4a02 93 *
AnnaBridge 161:aa5281ff4a02 94 * This function initializes the FlexIO I2S master DMA handle which can be used for other FlexIO I2S master
AnnaBridge 161:aa5281ff4a02 95 * transactional APIs.
AnnaBridge 161:aa5281ff4a02 96 * Usually, for a specified FlexIO I2S instance, call this API once to get the initialized handle.
AnnaBridge 161:aa5281ff4a02 97 *
AnnaBridge 161:aa5281ff4a02 98 * @param base FlexIO I2S peripheral base address.
AnnaBridge 161:aa5281ff4a02 99 * @param handle FlexIO I2S eDMA handle pointer.
AnnaBridge 161:aa5281ff4a02 100 * @param callback FlexIO I2S eDMA callback function called while finished a block.
AnnaBridge 161:aa5281ff4a02 101 * @param userData User parameter for callback.
AnnaBridge 161:aa5281ff4a02 102 * @param dmaHandle eDMA handle for FlexIO I2S. This handle is a static value allocated by users.
AnnaBridge 161:aa5281ff4a02 103 */
AnnaBridge 161:aa5281ff4a02 104 void FLEXIO_I2S_TransferTxCreateHandleEDMA(FLEXIO_I2S_Type *base,
AnnaBridge 161:aa5281ff4a02 105 flexio_i2s_edma_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 106 flexio_i2s_edma_callback_t callback,
AnnaBridge 161:aa5281ff4a02 107 void *userData,
AnnaBridge 161:aa5281ff4a02 108 edma_handle_t *dmaHandle);
AnnaBridge 161:aa5281ff4a02 109
AnnaBridge 161:aa5281ff4a02 110 /*!
AnnaBridge 161:aa5281ff4a02 111 * @brief Initializes the FlexIO I2S Rx eDMA handle.
AnnaBridge 161:aa5281ff4a02 112 *
AnnaBridge 161:aa5281ff4a02 113 * This function initializes the FlexIO I2S slave DMA handle which can be used for other FlexIO I2S master transactional
AnnaBridge 161:aa5281ff4a02 114 * APIs.
AnnaBridge 161:aa5281ff4a02 115 * Usually, for a specified FlexIO I2S instance, call this API once to get the initialized handle.
AnnaBridge 161:aa5281ff4a02 116 *
AnnaBridge 161:aa5281ff4a02 117 * @param base FlexIO I2S peripheral base address.
AnnaBridge 161:aa5281ff4a02 118 * @param handle FlexIO I2S eDMA handle pointer.
AnnaBridge 161:aa5281ff4a02 119 * @param callback FlexIO I2S eDMA callback function called while finished a block.
AnnaBridge 161:aa5281ff4a02 120 * @param userData User parameter for callback.
AnnaBridge 161:aa5281ff4a02 121 * @param dmaHandle eDMA handle for FlexIO I2S. This handle is a static value allocated by users.
AnnaBridge 161:aa5281ff4a02 122 */
AnnaBridge 161:aa5281ff4a02 123 void FLEXIO_I2S_TransferRxCreateHandleEDMA(FLEXIO_I2S_Type *base,
AnnaBridge 161:aa5281ff4a02 124 flexio_i2s_edma_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 125 flexio_i2s_edma_callback_t callback,
AnnaBridge 161:aa5281ff4a02 126 void *userData,
AnnaBridge 161:aa5281ff4a02 127 edma_handle_t *dmaHandle);
AnnaBridge 161:aa5281ff4a02 128
AnnaBridge 161:aa5281ff4a02 129 /*!
AnnaBridge 161:aa5281ff4a02 130 * @brief Configures the FlexIO I2S Tx audio format.
AnnaBridge 161:aa5281ff4a02 131 *
AnnaBridge 161:aa5281ff4a02 132 * Audio format can be changed in run-time of FlexIO I2S. This function configures the sample rate and audio data
AnnaBridge 161:aa5281ff4a02 133 * format to be transferred. This function also sets the eDMA parameter according to format.
AnnaBridge 161:aa5281ff4a02 134 *
AnnaBridge 161:aa5281ff4a02 135 * @param base FlexIO I2S peripheral base address.
AnnaBridge 161:aa5281ff4a02 136 * @param handle FlexIO I2S eDMA handle pointer
AnnaBridge 161:aa5281ff4a02 137 * @param format Pointer to FlexIO I2S audio data format structure.
AnnaBridge 161:aa5281ff4a02 138 * @param srcClock_Hz FlexIO I2S clock source frequency in Hz, it should be 0 while in slave mode.
AnnaBridge 161:aa5281ff4a02 139 * @retval kStatus_Success Audio format set successfully.
AnnaBridge 161:aa5281ff4a02 140 * @retval kStatus_InvalidArgument The input arguments is invalid.
AnnaBridge 161:aa5281ff4a02 141 */
AnnaBridge 161:aa5281ff4a02 142 void FLEXIO_I2S_TransferSetFormatEDMA(FLEXIO_I2S_Type *base,
AnnaBridge 161:aa5281ff4a02 143 flexio_i2s_edma_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 144 flexio_i2s_format_t *format,
AnnaBridge 161:aa5281ff4a02 145 uint32_t srcClock_Hz);
AnnaBridge 161:aa5281ff4a02 146
AnnaBridge 161:aa5281ff4a02 147 /*!
AnnaBridge 161:aa5281ff4a02 148 * @brief Performs a non-blocking FlexIO I2S transfer using DMA.
AnnaBridge 161:aa5281ff4a02 149 *
AnnaBridge 161:aa5281ff4a02 150 * @note This interface returned immediately after transfer initiates. Users should call
AnnaBridge 161:aa5281ff4a02 151 * FLEXIO_I2S_GetTransferStatus to poll the transfer status and check whether the FlexIO I2S transfer is finished.
AnnaBridge 161:aa5281ff4a02 152 *
AnnaBridge 161:aa5281ff4a02 153 * @param base FlexIO I2S peripheral base address.
AnnaBridge 161:aa5281ff4a02 154 * @param handle FlexIO I2S DMA handle pointer.
AnnaBridge 161:aa5281ff4a02 155 * @param xfer Pointer to DMA transfer structure.
AnnaBridge 161:aa5281ff4a02 156 * @retval kStatus_Success Start a FlexIO I2S eDMA send successfully.
AnnaBridge 161:aa5281ff4a02 157 * @retval kStatus_InvalidArgument The input arguments is invalid.
AnnaBridge 161:aa5281ff4a02 158 * @retval kStatus_TxBusy FlexIO I2S is busy sending data.
AnnaBridge 161:aa5281ff4a02 159 */
AnnaBridge 161:aa5281ff4a02 160 status_t FLEXIO_I2S_TransferSendEDMA(FLEXIO_I2S_Type *base,
AnnaBridge 161:aa5281ff4a02 161 flexio_i2s_edma_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 162 flexio_i2s_transfer_t *xfer);
AnnaBridge 161:aa5281ff4a02 163
AnnaBridge 161:aa5281ff4a02 164 /*!
AnnaBridge 161:aa5281ff4a02 165 * @brief Performs a non-blocking FlexIO I2S receive using eDMA.
AnnaBridge 161:aa5281ff4a02 166 *
AnnaBridge 161:aa5281ff4a02 167 * @note This interface returned immediately after transfer initiates. Users should call
AnnaBridge 170:e95d10626187 168 * FLEXIO_I2S_GetReceiveRemainingBytes to poll the transfer status and check whether the FlexIO I2S transfer is
AnnaBridge 170:e95d10626187 169 * finished.
AnnaBridge 161:aa5281ff4a02 170 *
AnnaBridge 161:aa5281ff4a02 171 * @param base FlexIO I2S peripheral base address.
AnnaBridge 161:aa5281ff4a02 172 * @param handle FlexIO I2S DMA handle pointer.
AnnaBridge 161:aa5281ff4a02 173 * @param xfer Pointer to DMA transfer structure.
AnnaBridge 161:aa5281ff4a02 174 * @retval kStatus_Success Start a FlexIO I2S eDMA receive successfully.
AnnaBridge 161:aa5281ff4a02 175 * @retval kStatus_InvalidArgument The input arguments is invalid.
AnnaBridge 161:aa5281ff4a02 176 * @retval kStatus_RxBusy FlexIO I2S is busy receiving data.
AnnaBridge 161:aa5281ff4a02 177 */
AnnaBridge 161:aa5281ff4a02 178 status_t FLEXIO_I2S_TransferReceiveEDMA(FLEXIO_I2S_Type *base,
AnnaBridge 161:aa5281ff4a02 179 flexio_i2s_edma_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 180 flexio_i2s_transfer_t *xfer);
AnnaBridge 161:aa5281ff4a02 181
AnnaBridge 161:aa5281ff4a02 182 /*!
AnnaBridge 161:aa5281ff4a02 183 * @brief Aborts a FlexIO I2S transfer using eDMA.
AnnaBridge 161:aa5281ff4a02 184 *
AnnaBridge 161:aa5281ff4a02 185 * @param base FlexIO I2S peripheral base address.
AnnaBridge 161:aa5281ff4a02 186 * @param handle FlexIO I2S DMA handle pointer.
AnnaBridge 161:aa5281ff4a02 187 */
AnnaBridge 161:aa5281ff4a02 188 void FLEXIO_I2S_TransferAbortSendEDMA(FLEXIO_I2S_Type *base, flexio_i2s_edma_handle_t *handle);
AnnaBridge 161:aa5281ff4a02 189
AnnaBridge 161:aa5281ff4a02 190 /*!
AnnaBridge 161:aa5281ff4a02 191 * @brief Aborts a FlexIO I2S receive using eDMA.
AnnaBridge 161:aa5281ff4a02 192 *
AnnaBridge 161:aa5281ff4a02 193 * @param base FlexIO I2S peripheral base address.
AnnaBridge 161:aa5281ff4a02 194 * @param handle FlexIO I2S DMA handle pointer.
AnnaBridge 161:aa5281ff4a02 195 */
AnnaBridge 161:aa5281ff4a02 196 void FLEXIO_I2S_TransferAbortReceiveEDMA(FLEXIO_I2S_Type *base, flexio_i2s_edma_handle_t *handle);
AnnaBridge 161:aa5281ff4a02 197
AnnaBridge 161:aa5281ff4a02 198 /*!
AnnaBridge 161:aa5281ff4a02 199 * @brief Gets the remaining bytes to be sent.
AnnaBridge 161:aa5281ff4a02 200 *
AnnaBridge 161:aa5281ff4a02 201 * @param base FlexIO I2S peripheral base address.
AnnaBridge 161:aa5281ff4a02 202 * @param handle FlexIO I2S DMA handle pointer.
AnnaBridge 161:aa5281ff4a02 203 * @param count Bytes sent.
AnnaBridge 161:aa5281ff4a02 204 * @retval kStatus_Success Succeed get the transfer count.
AnnaBridge 161:aa5281ff4a02 205 * @retval kStatus_NoTransferInProgress There is not a non-blocking transaction currently in progress.
AnnaBridge 161:aa5281ff4a02 206 */
AnnaBridge 161:aa5281ff4a02 207 status_t FLEXIO_I2S_TransferGetSendCountEDMA(FLEXIO_I2S_Type *base, flexio_i2s_edma_handle_t *handle, size_t *count);
AnnaBridge 161:aa5281ff4a02 208
AnnaBridge 161:aa5281ff4a02 209 /*!
AnnaBridge 161:aa5281ff4a02 210 * @brief Get the remaining bytes to be received.
AnnaBridge 161:aa5281ff4a02 211 *
AnnaBridge 161:aa5281ff4a02 212 * @param base FlexIO I2S peripheral base address.
AnnaBridge 161:aa5281ff4a02 213 * @param handle FlexIO I2S DMA handle pointer.
AnnaBridge 161:aa5281ff4a02 214 * @param count Bytes received.
AnnaBridge 161:aa5281ff4a02 215 * @retval kStatus_Success Succeed get the transfer count.
AnnaBridge 161:aa5281ff4a02 216 * @retval kStatus_NoTransferInProgress There is not a non-blocking transaction currently in progress.
AnnaBridge 161:aa5281ff4a02 217 */
AnnaBridge 161:aa5281ff4a02 218 status_t FLEXIO_I2S_TransferGetReceiveCountEDMA(FLEXIO_I2S_Type *base, flexio_i2s_edma_handle_t *handle, size_t *count);
AnnaBridge 161:aa5281ff4a02 219
AnnaBridge 161:aa5281ff4a02 220 /*! @} */
AnnaBridge 161:aa5281ff4a02 221
AnnaBridge 161:aa5281ff4a02 222 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 223 }
AnnaBridge 161:aa5281ff4a02 224 #endif
AnnaBridge 161:aa5281ff4a02 225
AnnaBridge 161:aa5281ff4a02 226 /*!
AnnaBridge 161:aa5281ff4a02 227 * @}
AnnaBridge 161:aa5281ff4a02 228 */
AnnaBridge 161:aa5281ff4a02 229 #endif