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) 2016, Freescale Semiconductor, Inc.
AnnaBridge 161:aa5281ff4a02 4 * All rights reserved.
AnnaBridge 161:aa5281ff4a02 5 *
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 Freescale Semiconductor, Inc. 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_SPDIF_EDMA_H_
AnnaBridge 161:aa5281ff4a02 35 #define _FSL_SPDIF_EDMA_H_
AnnaBridge 161:aa5281ff4a02 36
AnnaBridge 161:aa5281ff4a02 37 #include "fsl_spdif.h"
AnnaBridge 161:aa5281ff4a02 38 #include "fsl_edma.h"
AnnaBridge 161:aa5281ff4a02 39
AnnaBridge 161:aa5281ff4a02 40 /*!
AnnaBridge 161:aa5281ff4a02 41 * @addtogroup spdif_edma
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 #define FSL_SPDIF_EDMA_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0 */
AnnaBridge 170:e95d10626187 52 /*@}*/
AnnaBridge 170:e95d10626187 53
AnnaBridge 161:aa5281ff4a02 54 typedef struct _spdif_edma_handle spdif_edma_handle_t;
AnnaBridge 161:aa5281ff4a02 55
AnnaBridge 161:aa5281ff4a02 56 /*! @brief SPDIF eDMA transfer callback function for finish and error */
AnnaBridge 161:aa5281ff4a02 57 typedef void (*spdif_edma_callback_t)(SPDIF_Type *base, spdif_edma_handle_t *handle, status_t status, void *userData);
AnnaBridge 161:aa5281ff4a02 58
AnnaBridge 161:aa5281ff4a02 59 /*! @brief SPDIF transfer structure */
AnnaBridge 161:aa5281ff4a02 60 typedef struct _spdif_edma_transfer
AnnaBridge 161:aa5281ff4a02 61 {
AnnaBridge 161:aa5281ff4a02 62 uint8_t *leftData; /*!< Data start address to transfer. */
AnnaBridge 161:aa5281ff4a02 63 uint8_t *rightData; /*!< Data start address to transfer. */
AnnaBridge 161:aa5281ff4a02 64 size_t dataSize; /*!< Transfer size. */
AnnaBridge 161:aa5281ff4a02 65 } spdif_edma_transfer_t;
AnnaBridge 161:aa5281ff4a02 66
AnnaBridge 161:aa5281ff4a02 67 /*! @brief SPDIF DMA transfer handle, users should not touch the content of the handle.*/
AnnaBridge 161:aa5281ff4a02 68 struct _spdif_edma_handle
AnnaBridge 161:aa5281ff4a02 69 {
AnnaBridge 161:aa5281ff4a02 70 edma_handle_t *dmaLeftHandle; /*!< DMA handler for SPDIF left channel */
AnnaBridge 161:aa5281ff4a02 71 edma_handle_t *dmaRightHandle; /*!< DMA handler for SPDIF right channel */
AnnaBridge 161:aa5281ff4a02 72 uint8_t nbytes; /*!< eDMA minor byte transfer count initially configured. */
AnnaBridge 161:aa5281ff4a02 73 uint8_t count; /*!< The transfer data count in a DMA request */
AnnaBridge 161:aa5281ff4a02 74 uint32_t state; /*!< Internal state for SPDIF eDMA transfer */
AnnaBridge 161:aa5281ff4a02 75 spdif_edma_callback_t callback; /*!< Callback for users while transfer finish or error occurs */
AnnaBridge 161:aa5281ff4a02 76 void *userData; /*!< User callback parameter */
AnnaBridge 161:aa5281ff4a02 77 edma_tcd_t leftTcd[SPDIF_XFER_QUEUE_SIZE + 1U]; /*!< TCD pool for eDMA transfer. */
AnnaBridge 161:aa5281ff4a02 78 edma_tcd_t rightTcd[SPDIF_XFER_QUEUE_SIZE + 1U]; /*!< TCD pool for eDMA transfer. */
AnnaBridge 161:aa5281ff4a02 79 spdif_edma_transfer_t spdifQueue[SPDIF_XFER_QUEUE_SIZE]; /*!< Transfer queue storing queued transfer. */
AnnaBridge 161:aa5281ff4a02 80 size_t transferSize[SPDIF_XFER_QUEUE_SIZE]; /*!< Data bytes need to transfer, left and right are the same, so use
AnnaBridge 161:aa5281ff4a02 81 one */
AnnaBridge 161:aa5281ff4a02 82 volatile uint8_t queueUser; /*!< Index for user to queue transfer. */
AnnaBridge 161:aa5281ff4a02 83 volatile uint8_t queueDriver; /*!< Index for driver to get the transfer data and size */
AnnaBridge 161:aa5281ff4a02 84 };
AnnaBridge 161:aa5281ff4a02 85
AnnaBridge 161:aa5281ff4a02 86 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 87 * APIs
AnnaBridge 161:aa5281ff4a02 88 ******************************************************************************/
AnnaBridge 161:aa5281ff4a02 89 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 90 extern "C" {
AnnaBridge 161:aa5281ff4a02 91 #endif
AnnaBridge 161:aa5281ff4a02 92
AnnaBridge 161:aa5281ff4a02 93 /*!
AnnaBridge 161:aa5281ff4a02 94 * @name eDMA Transactional
AnnaBridge 161:aa5281ff4a02 95 * @{
AnnaBridge 161:aa5281ff4a02 96 */
AnnaBridge 161:aa5281ff4a02 97
AnnaBridge 161:aa5281ff4a02 98 /*!
AnnaBridge 161:aa5281ff4a02 99 * @brief Initializes the SPDIF eDMA handle.
AnnaBridge 161:aa5281ff4a02 100 *
AnnaBridge 161:aa5281ff4a02 101 * This function initializes the SPDIF master DMA handle, which can be used for other SPDIF master transactional APIs.
AnnaBridge 161:aa5281ff4a02 102 * Usually, for a specified SPDIF instance, call this API once to get the initialized handle.
AnnaBridge 161:aa5281ff4a02 103 *
AnnaBridge 161:aa5281ff4a02 104 * @param base SPDIF base pointer.
AnnaBridge 161:aa5281ff4a02 105 * @param handle SPDIF eDMA handle pointer.
AnnaBridge 161:aa5281ff4a02 106 * @param base SPDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 107 * @param callback Pointer to user callback function.
AnnaBridge 161:aa5281ff4a02 108 * @param userData User parameter passed to the callback function.
AnnaBridge 161:aa5281ff4a02 109 * @param dmaLeftHandle eDMA handle pointer for left channel, this handle shall be static allocated by users.
AnnaBridge 161:aa5281ff4a02 110 * @param dmaRightHandle eDMA handle pointer for right channel, this handle shall be static allocated by users.
AnnaBridge 161:aa5281ff4a02 111 */
AnnaBridge 161:aa5281ff4a02 112 void SPDIF_TransferTxCreateHandleEDMA(SPDIF_Type *base,
AnnaBridge 161:aa5281ff4a02 113 spdif_edma_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 114 spdif_edma_callback_t callback,
AnnaBridge 161:aa5281ff4a02 115 void *userData,
AnnaBridge 161:aa5281ff4a02 116 edma_handle_t *dmaLeftHandle,
AnnaBridge 161:aa5281ff4a02 117 edma_handle_t *dmaRightHandle);
AnnaBridge 161:aa5281ff4a02 118
AnnaBridge 161:aa5281ff4a02 119 /*!
AnnaBridge 161:aa5281ff4a02 120 * @brief Initializes the SPDIF Rx eDMA handle.
AnnaBridge 161:aa5281ff4a02 121 *
AnnaBridge 161:aa5281ff4a02 122 * This function initializes the SPDIF slave DMA handle, which can be used for other SPDIF master transactional APIs.
AnnaBridge 161:aa5281ff4a02 123 * Usually, for a specified SPDIF instance, call this API once to get the initialized handle.
AnnaBridge 161:aa5281ff4a02 124 *
AnnaBridge 161:aa5281ff4a02 125 * @param base SPDIF base pointer.
AnnaBridge 161:aa5281ff4a02 126 * @param handle SPDIF eDMA handle pointer.
AnnaBridge 161:aa5281ff4a02 127 * @param base SPDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 128 * @param callback Pointer to user callback function.
AnnaBridge 161:aa5281ff4a02 129 * @param userData User parameter passed to the callback function.
AnnaBridge 161:aa5281ff4a02 130 * @param dmaLeftHandle eDMA handle pointer for left channel, this handle shall be static allocated by users.
AnnaBridge 161:aa5281ff4a02 131 * @param dmaRightHandle eDMA handle pointer for right channel, this handle shall be static allocated by users.
AnnaBridge 161:aa5281ff4a02 132 */
AnnaBridge 161:aa5281ff4a02 133 void SPDIF_TransferRxCreateHandleEDMA(SPDIF_Type *base,
AnnaBridge 161:aa5281ff4a02 134 spdif_edma_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 135 spdif_edma_callback_t callback,
AnnaBridge 161:aa5281ff4a02 136 void *userData,
AnnaBridge 161:aa5281ff4a02 137 edma_handle_t *dmaLeftHandle,
AnnaBridge 161:aa5281ff4a02 138 edma_handle_t *dmaRightHandle);
AnnaBridge 161:aa5281ff4a02 139
AnnaBridge 161:aa5281ff4a02 140 /*!
AnnaBridge 161:aa5281ff4a02 141 * @brief Performs a non-blocking SPDIF transfer using DMA.
AnnaBridge 161:aa5281ff4a02 142 *
AnnaBridge 161:aa5281ff4a02 143 * @note This interface returns immediately after the transfer initiates. Call
AnnaBridge 161:aa5281ff4a02 144 * SPDIF_GetTransferStatus to poll the transfer status and check whether the SPDIF transfer is finished.
AnnaBridge 161:aa5281ff4a02 145 *
AnnaBridge 161:aa5281ff4a02 146 * @param base SPDIF base pointer.
AnnaBridge 161:aa5281ff4a02 147 * @param handle SPDIF eDMA handle pointer.
AnnaBridge 161:aa5281ff4a02 148 * @param xfer Pointer to the DMA transfer structure.
AnnaBridge 161:aa5281ff4a02 149 * @retval kStatus_Success Start a SPDIF eDMA send successfully.
AnnaBridge 161:aa5281ff4a02 150 * @retval kStatus_InvalidArgument The input argument is invalid.
AnnaBridge 161:aa5281ff4a02 151 * @retval kStatus_TxBusy SPDIF is busy sending data.
AnnaBridge 161:aa5281ff4a02 152 */
AnnaBridge 161:aa5281ff4a02 153 status_t SPDIF_TransferSendEDMA(SPDIF_Type *base, spdif_edma_handle_t *handle, spdif_edma_transfer_t *xfer);
AnnaBridge 161:aa5281ff4a02 154
AnnaBridge 161:aa5281ff4a02 155 /*!
AnnaBridge 161:aa5281ff4a02 156 * @brief Performs a non-blocking SPDIF receive using eDMA.
AnnaBridge 161:aa5281ff4a02 157 *
AnnaBridge 161:aa5281ff4a02 158 * @note This interface returns immediately after the transfer initiates. Call
AnnaBridge 161:aa5281ff4a02 159 * the SPDIF_GetReceiveRemainingBytes to poll the transfer status and check whether the SPDIF transfer is finished.
AnnaBridge 161:aa5281ff4a02 160 *
AnnaBridge 161:aa5281ff4a02 161 * @param base SPDIF base pointer
AnnaBridge 161:aa5281ff4a02 162 * @param handle SPDIF eDMA handle pointer.
AnnaBridge 161:aa5281ff4a02 163 * @param xfer Pointer to DMA transfer structure.
AnnaBridge 161:aa5281ff4a02 164 * @retval kStatus_Success Start a SPDIF eDMA receive successfully.
AnnaBridge 161:aa5281ff4a02 165 * @retval kStatus_InvalidArgument The input argument is invalid.
AnnaBridge 161:aa5281ff4a02 166 * @retval kStatus_RxBusy SPDIF is busy receiving data.
AnnaBridge 161:aa5281ff4a02 167 */
AnnaBridge 161:aa5281ff4a02 168 status_t SPDIF_TransferReceiveEDMA(SPDIF_Type *base, spdif_edma_handle_t *handle, spdif_edma_transfer_t *xfer);
AnnaBridge 161:aa5281ff4a02 169
AnnaBridge 161:aa5281ff4a02 170 /*!
AnnaBridge 161:aa5281ff4a02 171 * @brief Aborts a SPDIF transfer using eDMA.
AnnaBridge 161:aa5281ff4a02 172 *
AnnaBridge 161:aa5281ff4a02 173 * @param base SPDIF base pointer.
AnnaBridge 161:aa5281ff4a02 174 * @param handle SPDIF eDMA handle pointer.
AnnaBridge 161:aa5281ff4a02 175 */
AnnaBridge 161:aa5281ff4a02 176 void SPDIF_TransferAbortSendEDMA(SPDIF_Type *base, spdif_edma_handle_t *handle);
AnnaBridge 161:aa5281ff4a02 177
AnnaBridge 161:aa5281ff4a02 178 /*!
AnnaBridge 161:aa5281ff4a02 179 * @brief Aborts a SPDIF receive using eDMA.
AnnaBridge 161:aa5281ff4a02 180 *
AnnaBridge 161:aa5281ff4a02 181 * @param base SPDIF base pointer
AnnaBridge 161:aa5281ff4a02 182 * @param handle SPDIF eDMA handle pointer.
AnnaBridge 161:aa5281ff4a02 183 */
AnnaBridge 161:aa5281ff4a02 184 void SPDIF_TransferAbortReceiveEDMA(SPDIF_Type *base, spdif_edma_handle_t *handle);
AnnaBridge 161:aa5281ff4a02 185
AnnaBridge 161:aa5281ff4a02 186 /*!
AnnaBridge 161:aa5281ff4a02 187 * @brief Gets byte count sent by SPDIF.
AnnaBridge 161:aa5281ff4a02 188 *
AnnaBridge 161:aa5281ff4a02 189 * @param base SPDIF base pointer.
AnnaBridge 161:aa5281ff4a02 190 * @param handle SPDIF eDMA handle pointer.
AnnaBridge 161:aa5281ff4a02 191 * @param count Bytes count sent by SPDIF.
AnnaBridge 161:aa5281ff4a02 192 * @retval kStatus_Success Succeed get the transfer count.
AnnaBridge 161:aa5281ff4a02 193 * @retval kStatus_NoTransferInProgress There is no non-blocking transaction in progress.
AnnaBridge 161:aa5281ff4a02 194 */
AnnaBridge 161:aa5281ff4a02 195 status_t SPDIF_TransferGetSendCountEDMA(SPDIF_Type *base, spdif_edma_handle_t *handle, size_t *count);
AnnaBridge 161:aa5281ff4a02 196
AnnaBridge 161:aa5281ff4a02 197 /*!
AnnaBridge 161:aa5281ff4a02 198 * @brief Gets byte count received by SPDIF.
AnnaBridge 161:aa5281ff4a02 199 *
AnnaBridge 161:aa5281ff4a02 200 * @param base SPDIF base pointer
AnnaBridge 161:aa5281ff4a02 201 * @param handle SPDIF eDMA handle pointer.
AnnaBridge 161:aa5281ff4a02 202 * @param count Bytes count received by SPDIF.
AnnaBridge 161:aa5281ff4a02 203 * @retval kStatus_Success Succeed get the transfer count.
AnnaBridge 161:aa5281ff4a02 204 * @retval kStatus_NoTransferInProgress There is no non-blocking transaction in progress.
AnnaBridge 161:aa5281ff4a02 205 */
AnnaBridge 161:aa5281ff4a02 206 status_t SPDIF_TransferGetReceiveCountEDMA(SPDIF_Type *base, spdif_edma_handle_t *handle, size_t *count);
AnnaBridge 161:aa5281ff4a02 207
AnnaBridge 161:aa5281ff4a02 208 /*! @} */
AnnaBridge 161:aa5281ff4a02 209
AnnaBridge 161:aa5281ff4a02 210 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 211 }
AnnaBridge 161:aa5281ff4a02 212 #endif
AnnaBridge 161:aa5281ff4a02 213
AnnaBridge 161:aa5281ff4a02 214 /*!
AnnaBridge 161:aa5281ff4a02 215 * @}
AnnaBridge 161:aa5281ff4a02 216 */
AnnaBridge 161:aa5281ff4a02 217 #endif