summaryrefslogtreecommitdiffstats
path: root/bsps/arm/imxrt/mcux-sdk/drivers/flexspi/fsl_flexspi_dma.h
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/arm/imxrt/mcux-sdk/drivers/flexspi/fsl_flexspi_dma.h')
-rw-r--r--bsps/arm/imxrt/mcux-sdk/drivers/flexspi/fsl_flexspi_dma.h144
1 files changed, 144 insertions, 0 deletions
diff --git a/bsps/arm/imxrt/mcux-sdk/drivers/flexspi/fsl_flexspi_dma.h b/bsps/arm/imxrt/mcux-sdk/drivers/flexspi/fsl_flexspi_dma.h
new file mode 100644
index 0000000000..101af6d913
--- /dev/null
+++ b/bsps/arm/imxrt/mcux-sdk/drivers/flexspi/fsl_flexspi_dma.h
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2019-2021 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _FSL_FLEXSPI_DMA_H_
+#define _FSL_FLEXSPI_DMA_H_
+
+#include "fsl_flexspi.h"
+#include "fsl_dma.h"
+
+/*!
+ * @addtogroup flexspi_dma
+ * @{
+ */
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+
+/*! @name Driver version */
+/*@{*/
+/*! @brief FLEXSPI DMA driver version 2.2.1. */
+#define FSL_FLEXSPI_DMA_DRIVER_VERSION (MAKE_VERSION(2, 2, 1))
+/*@}*/
+
+typedef struct _flexspi_dma_handle flexspi_dma_handle_t;
+
+/*! @brief FLEXSPI dma transfer callback function for finish and error */
+typedef void (*flexspi_dma_callback_t)(FLEXSPI_Type *base,
+ flexspi_dma_handle_t *handle,
+ status_t status,
+ void *userData);
+
+/*! @brief dma transfer configuration */
+typedef enum _flexspi_dma_ntransfer_size
+{
+ kFLEXPSI_DMAnSize1Bytes = 0x1U, /*!< Source/Destination data transfer size is 1 byte every time */
+ kFLEXPSI_DMAnSize2Bytes = 0x2U, /*!< Source/Destination data transfer size is 2 bytes every time */
+ kFLEXPSI_DMAnSize4Bytes = 0x4U, /*!< Source/Destination data transfer size is 4 bytes every time */
+} flexspi_dma_transfer_nsize_t;
+
+/*! @brief FLEXSPI DMA transfer handle, users should not touch the content of the handle.*/
+struct _flexspi_dma_handle
+{
+ dma_handle_t *txDmaHandle; /*!< dma handler for FLEXSPI Tx. */
+ dma_handle_t *rxDmaHandle; /*!< dma handler for FLEXSPI Rx. */
+ size_t transferSize; /*!< Bytes need to transfer. */
+ flexspi_dma_transfer_nsize_t nsize; /*!< dma SSIZE/DSIZE in each transfer. */
+ uint8_t nbytes; /*!< dma minor byte transfer count initially configured. */
+ uint8_t count; /*!< The transfer data count in a DMA request. */
+ uint32_t state; /*!< Internal state for FLEXSPI dma transfer. */
+ flexspi_dma_callback_t completionCallback; /*!< A callback function called after the dma transfer is finished. */
+ void *userData; /*!< User callback parameter */
+};
+
+/*******************************************************************************
+ * APIs
+ ******************************************************************************/
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/*!
+ * @name FLEXSPI dma Transactional
+ * @{
+ */
+
+/*!
+ * @brief Initializes the FLEXSPI handle for transfer which is used in transactional functions and set the callback.
+ *
+ * @param base FLEXSPI peripheral base address
+ * @param handle Pointer to flexspi_dma_handle_t structure
+ * @param callback FLEXSPI callback, NULL means no callback.
+ * @param userData User callback function data.
+ * @param txDmaHandle User requested DMA handle for TX DMA transfer.
+ * @param rxDmaHandle User requested DMA handle for RX DMA transfer.
+ */
+void FLEXSPI_TransferCreateHandleDMA(FLEXSPI_Type *base,
+ flexspi_dma_handle_t *handle,
+ flexspi_dma_callback_t callback,
+ void *userData,
+ dma_handle_t *txDmaHandle,
+ dma_handle_t *rxDmaHandle);
+
+/*!
+ * @brief Update FLEXSPI DMA transfer source data transfer size(SSIZE) and destination data transfer size(DSIZE).
+ *
+ * @param base FLEXSPI peripheral base address
+ * @param handle Pointer to flexspi_dma_handle_t structure
+ * @param nsize FLEXSPI DMA transfer data transfer size(SSIZE/DSIZE), by default the size is
+ * kFLEXPSI_DMAnSize1Bytes(one byte).
+ * @see flexspi_dma_transfer_nsize_t .
+ */
+void FLEXSPI_TransferUpdateSizeDMA(FLEXSPI_Type *base,
+ flexspi_dma_handle_t *handle,
+ flexspi_dma_transfer_nsize_t nsize);
+
+/*!
+ * @brief Transfers FLEXSPI data using an dma non-blocking method.
+ *
+ * This function writes/receives data to/from the FLEXSPI transmit/receive FIFO. This function is non-blocking.
+ * @param base FLEXSPI peripheral base address.
+ * @param handle Pointer to flexspi_dma_handle_t structure
+ * @param xfer FLEXSPI transfer structure.
+ * @retval kStatus_FLEXSPI_Busy FLEXSPI is busy transfer.
+ * @retval kStatus_InvalidArgument The watermark configuration is invalid, the watermark should be power of
+ 2 to do successfully DMA transfer.
+ * @retval kStatus_Success FLEXSPI successfully start dma transfer.
+ */
+status_t FLEXSPI_TransferDMA(FLEXSPI_Type *base, flexspi_dma_handle_t *handle, flexspi_transfer_t *xfer);
+
+/*!
+ * @brief Aborts the transfer data using dma.
+ *
+ * This function aborts the transfer data using dma.
+ *
+ * @param base FLEXSPI peripheral base address.
+ * @param handle Pointer to flexspi_dma_handle_t structure
+ */
+void FLEXSPI_TransferAbortDMA(FLEXSPI_Type *base, flexspi_dma_handle_t *handle);
+
+/*!
+ * @brief Gets the transferred counts of transfer.
+ *
+ * @param base FLEXSPI peripheral base address.
+ * @param handle Pointer to flexspi_dma_handle_t structure.
+ * @param count Bytes transfer.
+ * @retval kStatus_Success Succeed get the transfer count.
+ * @retval kStatus_NoTransferInProgress There is not a non-blocking transaction currently in progress.
+ */
+status_t FLEXSPI_TransferGetTransferCountDMA(FLEXSPI_Type *base, flexspi_dma_handle_t *handle, size_t *count);
+
+/* @} */
+
+#if defined(__cplusplus)
+}
+#endif
+
+/* @} */
+
+#endif /* _FSL_FLEXSPI_DMA_H_ */