![]() |
|
|||
File indexing completed on 2025-05-11 08:23:01
0001 /* 0002 * Copyright (c) 2016, Freescale Semiconductor, Inc. 0003 * Copyright 2017-2020 NXP 0004 * All rights reserved. 0005 * 0006 * 0007 * SPDX-License-Identifier: BSD-3-Clause 0008 */ 0009 #ifndef _FSL_SPDIF_EDMA_H_ 0010 #define _FSL_SPDIF_EDMA_H_ 0011 0012 #include "fsl_spdif.h" 0013 #include "fsl_edma.h" 0014 0015 /*! 0016 * @addtogroup spdif_edma 0017 * @{ 0018 */ 0019 0020 /******************************************************************************* 0021 * Definitions 0022 ******************************************************************************/ 0023 0024 /*! @name Driver version */ 0025 /*@{*/ 0026 #define FSL_SPDIF_EDMA_DRIVER_VERSION (MAKE_VERSION(2, 0, 5)) /*!< Version 2.0.5 */ 0027 /*@}*/ 0028 0029 typedef struct _spdif_edma_handle spdif_edma_handle_t; 0030 0031 /*! @brief SPDIF eDMA transfer callback function for finish and error */ 0032 typedef void (*spdif_edma_callback_t)(SPDIF_Type *base, spdif_edma_handle_t *handle, status_t status, void *userData); 0033 0034 /*! @brief SPDIF transfer structure */ 0035 typedef struct _spdif_edma_transfer 0036 { 0037 uint8_t *leftData; /*!< Data start address to transfer. */ 0038 uint8_t *rightData; /*!< Data start address to transfer. */ 0039 size_t dataSize; /*!< Transfer size. */ 0040 } spdif_edma_transfer_t; 0041 0042 /*! @brief SPDIF DMA transfer handle, users should not touch the content of the handle.*/ 0043 struct _spdif_edma_handle 0044 { 0045 edma_handle_t *dmaLeftHandle; /*!< DMA handler for SPDIF left channel */ 0046 edma_handle_t *dmaRightHandle; /*!< DMA handler for SPDIF right channel */ 0047 uint8_t nbytes; /*!< eDMA minor byte transfer count initially configured. */ 0048 uint8_t count; /*!< The transfer data count in a DMA request */ 0049 uint32_t state; /*!< Internal state for SPDIF eDMA transfer */ 0050 spdif_edma_callback_t callback; /*!< Callback for users while transfer finish or error occurs */ 0051 void *userData; /*!< User callback parameter */ 0052 edma_tcd_t leftTcd[SPDIF_XFER_QUEUE_SIZE + 1U]; /*!< TCD pool for eDMA transfer. */ 0053 edma_tcd_t rightTcd[SPDIF_XFER_QUEUE_SIZE + 1U]; /*!< TCD pool for eDMA transfer. */ 0054 spdif_edma_transfer_t spdifQueue[SPDIF_XFER_QUEUE_SIZE]; /*!< Transfer queue storing queued transfer. */ 0055 size_t transferSize[SPDIF_XFER_QUEUE_SIZE]; /*!< Data bytes need to transfer, left and right are the same, so use 0056 one */ 0057 volatile uint8_t queueUser; /*!< Index for user to queue transfer. */ 0058 volatile uint8_t queueDriver; /*!< Index for driver to get the transfer data and size */ 0059 }; 0060 0061 /******************************************************************************* 0062 * APIs 0063 ******************************************************************************/ 0064 #if defined(__cplusplus) 0065 extern "C" { 0066 #endif 0067 0068 /*! 0069 * @name eDMA Transactional 0070 * @{ 0071 */ 0072 0073 /*! 0074 * @brief Initializes the SPDIF eDMA handle. 0075 * 0076 * This function initializes the SPDIF master DMA handle, which can be used for other SPDIF master transactional APIs. 0077 * Usually, for a specified SPDIF instance, call this API once to get the initialized handle. 0078 * 0079 * @param base SPDIF base pointer. 0080 * @param handle SPDIF eDMA handle pointer. 0081 * @param base SPDIF peripheral base address. 0082 * @param callback Pointer to user callback function. 0083 * @param userData User parameter passed to the callback function. 0084 * @param dmaLeftHandle eDMA handle pointer for left channel, this handle shall be static allocated by users. 0085 * @param dmaRightHandle eDMA handle pointer for right channel, this handle shall be static allocated by users. 0086 */ 0087 void SPDIF_TransferTxCreateHandleEDMA(SPDIF_Type *base, 0088 spdif_edma_handle_t *handle, 0089 spdif_edma_callback_t callback, 0090 void *userData, 0091 edma_handle_t *dmaLeftHandle, 0092 edma_handle_t *dmaRightHandle); 0093 0094 /*! 0095 * @brief Initializes the SPDIF Rx eDMA handle. 0096 * 0097 * This function initializes the SPDIF slave DMA handle, which can be used for other SPDIF master transactional APIs. 0098 * Usually, for a specified SPDIF instance, call this API once to get the initialized handle. 0099 * 0100 * @param base SPDIF base pointer. 0101 * @param handle SPDIF eDMA handle pointer. 0102 * @param base SPDIF peripheral base address. 0103 * @param callback Pointer to user callback function. 0104 * @param userData User parameter passed to the callback function. 0105 * @param dmaLeftHandle eDMA handle pointer for left channel, this handle shall be static allocated by users. 0106 * @param dmaRightHandle eDMA handle pointer for right channel, this handle shall be static allocated by users. 0107 */ 0108 void SPDIF_TransferRxCreateHandleEDMA(SPDIF_Type *base, 0109 spdif_edma_handle_t *handle, 0110 spdif_edma_callback_t callback, 0111 void *userData, 0112 edma_handle_t *dmaLeftHandle, 0113 edma_handle_t *dmaRightHandle); 0114 0115 /*! 0116 * @brief Performs a non-blocking SPDIF transfer using DMA. 0117 * 0118 * @note This interface returns immediately after the transfer initiates. Call 0119 * SPDIF_GetTransferStatus to poll the transfer status and check whether the SPDIF transfer is finished. 0120 * 0121 * @param base SPDIF base pointer. 0122 * @param handle SPDIF eDMA handle pointer. 0123 * @param xfer Pointer to the DMA transfer structure. 0124 * @retval kStatus_Success Start a SPDIF eDMA send successfully. 0125 * @retval kStatus_InvalidArgument The input argument is invalid. 0126 * @retval kStatus_TxBusy SPDIF is busy sending data. 0127 */ 0128 status_t SPDIF_TransferSendEDMA(SPDIF_Type *base, spdif_edma_handle_t *handle, spdif_edma_transfer_t *xfer); 0129 0130 /*! 0131 * @brief Performs a non-blocking SPDIF receive using eDMA. 0132 * 0133 * @note This interface returns immediately after the transfer initiates. Call 0134 * the SPDIF_GetReceiveRemainingBytes to poll the transfer status and check whether the SPDIF transfer is finished. 0135 * 0136 * @param base SPDIF base pointer 0137 * @param handle SPDIF eDMA handle pointer. 0138 * @param xfer Pointer to DMA transfer structure. 0139 * @retval kStatus_Success Start a SPDIF eDMA receive successfully. 0140 * @retval kStatus_InvalidArgument The input argument is invalid. 0141 * @retval kStatus_RxBusy SPDIF is busy receiving data. 0142 */ 0143 status_t SPDIF_TransferReceiveEDMA(SPDIF_Type *base, spdif_edma_handle_t *handle, spdif_edma_transfer_t *xfer); 0144 0145 /*! 0146 * @brief Aborts a SPDIF transfer using eDMA. 0147 * 0148 * @param base SPDIF base pointer. 0149 * @param handle SPDIF eDMA handle pointer. 0150 */ 0151 void SPDIF_TransferAbortSendEDMA(SPDIF_Type *base, spdif_edma_handle_t *handle); 0152 0153 /*! 0154 * @brief Aborts a SPDIF receive using eDMA. 0155 * 0156 * @param base SPDIF base pointer 0157 * @param handle SPDIF eDMA handle pointer. 0158 */ 0159 void SPDIF_TransferAbortReceiveEDMA(SPDIF_Type *base, spdif_edma_handle_t *handle); 0160 0161 /*! 0162 * @brief Gets byte count sent by SPDIF. 0163 * 0164 * @param base SPDIF base pointer. 0165 * @param handle SPDIF eDMA handle pointer. 0166 * @param count Bytes count sent by SPDIF. 0167 * @retval kStatus_Success Succeed get the transfer count. 0168 * @retval kStatus_NoTransferInProgress There is no non-blocking transaction in progress. 0169 */ 0170 status_t SPDIF_TransferGetSendCountEDMA(SPDIF_Type *base, spdif_edma_handle_t *handle, size_t *count); 0171 0172 /*! 0173 * @brief Gets byte count received by SPDIF. 0174 * 0175 * @param base SPDIF base pointer 0176 * @param handle SPDIF eDMA handle pointer. 0177 * @param count Bytes count received by SPDIF. 0178 * @retval kStatus_Success Succeed get the transfer count. 0179 * @retval kStatus_NoTransferInProgress There is no non-blocking transaction in progress. 0180 */ 0181 status_t SPDIF_TransferGetReceiveCountEDMA(SPDIF_Type *base, spdif_edma_handle_t *handle, size_t *count); 0182 0183 /*! @} */ 0184 0185 #if defined(__cplusplus) 0186 } 0187 #endif 0188 0189 /*! 0190 * @} 0191 */ 0192 #endif
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |