![]() |
|
|||
File indexing completed on 2025-05-11 08:22:59
0001 /* 0002 * Copyright (c) 2016, Freescale Semiconductor, Inc. 0003 * Copyright 2016-2020 NXP 0004 * All rights reserved. 0005 * 0006 * SPDX-License-Identifier: BSD-3-Clause 0007 */ 0008 0009 #ifndef _FSL_FLEXSPI_EDMA_H_ 0010 #define _FSL_FLEXSPI_EDMA_H_ 0011 0012 #include "fsl_flexspi.h" 0013 #if defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT 0014 #include "fsl_dmamux.h" 0015 #endif 0016 #include "fsl_edma.h" 0017 0018 /*! 0019 * @addtogroup flexspi_edma 0020 * @{ 0021 */ 0022 0023 /******************************************************************************* 0024 * Definitions 0025 ******************************************************************************/ 0026 0027 /*! @name Driver version */ 0028 /*@{*/ 0029 /*! @brief FLEXSPI EDMA driver version 2.3.2. */ 0030 #define FSL_FLEXSPI_EDMA_DRIVER_VERSION (MAKE_VERSION(2, 3, 2)) 0031 /*@}*/ 0032 0033 typedef struct _flexspi_edma_handle flexspi_edma_handle_t; 0034 0035 /*! @brief FLEXSPI eDMA transfer callback function for finish and error */ 0036 typedef void (*flexspi_edma_callback_t)(FLEXSPI_Type *base, 0037 flexspi_edma_handle_t *handle, 0038 status_t status, 0039 void *userData); 0040 0041 /*! @brief eDMA transfer configuration */ 0042 typedef enum _flexspi_edma_ntransfer_size 0043 { 0044 kFLEXPSI_EDMAnSize1Bytes = 0x1U, /*!< Source/Destination data transfer size is 1 byte every time */ 0045 kFLEXPSI_EDMAnSize2Bytes = 0x2U, /*!< Source/Destination data transfer size is 2 bytes every time */ 0046 kFLEXPSI_EDMAnSize4Bytes = 0x4U, /*!< Source/Destination data transfer size is 4 bytes every time */ 0047 kFLEXPSI_EDMAnSize8Bytes = 0x8U, /*!< Source/Destination data transfer size is 8 bytes every time */ 0048 kFLEXPSI_EDMAnSize32Bytes = 0x20U, /*!< Source/Destination data transfer size is 32 bytes every time */ 0049 } flexspi_edma_transfer_nsize_t; 0050 0051 /*! @brief FLEXSPI DMA transfer handle, users should not touch the content of the handle.*/ 0052 struct _flexspi_edma_handle 0053 { 0054 edma_handle_t *txDmaHandle; /*!< eDMA handler for FLEXSPI Tx. */ 0055 edma_handle_t *rxDmaHandle; /*!< eDMA handler for FLEXSPI Rx. */ 0056 size_t transferSize; /*!< Bytes need to transfer. */ 0057 flexspi_edma_transfer_nsize_t nsize; /*!< eDMA SSIZE/DSIZE in each transfer. */ 0058 uint8_t nbytes; /*!< eDMA minor byte transfer count initially configured. */ 0059 uint8_t count; /*!< The transfer data count in a DMA request. */ 0060 uint32_t state; /*!< Internal state for FLEXSPI eDMA transfer. */ 0061 flexspi_edma_callback_t completionCallback; /*!< A callback function called after the eDMA transfer is finished. */ 0062 void *userData; /*!< User callback parameter */ 0063 }; 0064 0065 /******************************************************************************* 0066 * APIs 0067 ******************************************************************************/ 0068 #if defined(__cplusplus) 0069 extern "C" { 0070 #endif 0071 0072 /*! 0073 * @name FLEXSPI eDMA Transactional 0074 * @{ 0075 */ 0076 0077 /*! 0078 * @brief Initializes the FLEXSPI handle for transfer which is used in transactional functions and set the callback. 0079 * 0080 * @param base FLEXSPI peripheral base address 0081 * @param handle Pointer to flexspi_edma_handle_t structure 0082 * @param callback FLEXSPI callback, NULL means no callback. 0083 * @param userData User callback function data. 0084 * @param txDmaHandle User requested DMA handle for TX DMA transfer. 0085 * @param rxDmaHandle User requested DMA handle for RX DMA transfer. 0086 */ 0087 void FLEXSPI_TransferCreateHandleEDMA(FLEXSPI_Type *base, 0088 flexspi_edma_handle_t *handle, 0089 flexspi_edma_callback_t callback, 0090 void *userData, 0091 edma_handle_t *txDmaHandle, 0092 edma_handle_t *rxDmaHandle); 0093 0094 /*! 0095 * @brief Update FLEXSPI EDMA transfer source data transfer size(SSIZE) and destination data transfer size(DSIZE). 0096 * 0097 * @param base FLEXSPI peripheral base address 0098 * @param handle Pointer to flexspi_edma_handle_t structure 0099 * @param nsize FLEXSPI DMA transfer data transfer size(SSIZE/DSIZE), by default the size is 0100 * kFLEXPSI_EDMAnSize1Bytes(one byte). 0101 * @see flexspi_edma_transfer_nsize_t . 0102 */ 0103 void FLEXSPI_TransferUpdateSizeEDMA(FLEXSPI_Type *base, 0104 flexspi_edma_handle_t *handle, 0105 flexspi_edma_transfer_nsize_t nsize); 0106 0107 /*! 0108 * @brief Transfers FLEXSPI data using an eDMA non-blocking method. 0109 * 0110 * This function writes/receives data to/from the FLEXSPI transmit/receive FIFO. This function is non-blocking. 0111 * @param base FLEXSPI peripheral base address. 0112 * @param handle Pointer to flexspi_edma_handle_t structure 0113 * @param xfer FLEXSPI transfer structure. 0114 * @retval kStatus_FLEXSPI_Busy FLEXSPI is busy transfer. 0115 * @retval kStatus_InvalidArgument The watermark configuration is invalid, the watermark should be power of 0116 2 to do successfully EDMA transfer. 0117 * @retval kStatus_Success FLEXSPI successfully start edma transfer. 0118 */ 0119 status_t FLEXSPI_TransferEDMA(FLEXSPI_Type *base, flexspi_edma_handle_t *handle, flexspi_transfer_t *xfer); 0120 0121 /*! 0122 * @brief Aborts the transfer data using eDMA. 0123 * 0124 * This function aborts the transfer data using eDMA. 0125 * 0126 * @param base FLEXSPI peripheral base address. 0127 * @param handle Pointer to flexspi_edma_handle_t structure 0128 */ 0129 void FLEXSPI_TransferAbortEDMA(FLEXSPI_Type *base, flexspi_edma_handle_t *handle); 0130 0131 /*! 0132 * @brief Gets the transferred counts of transfer. 0133 * 0134 * @param base FLEXSPI peripheral base address. 0135 * @param handle Pointer to flexspi_edma_handle_t structure. 0136 * @param count Bytes transfer. 0137 * @retval kStatus_Success Succeed get the transfer count. 0138 * @retval kStatus_NoTransferInProgress There is not a non-blocking transaction currently in progress. 0139 */ 0140 status_t FLEXSPI_TransferGetTransferCountEDMA(FLEXSPI_Type *base, flexspi_edma_handle_t *handle, size_t *count); 0141 0142 /* @} */ 0143 0144 #if defined(__cplusplus) 0145 } 0146 #endif 0147 0148 /* @} */ 0149 0150 #endif /* _FSL_FLEXSPI_EDMA_H_ */
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |