![]() |
|
|||
File indexing completed on 2025-05-11 08:22:59
0001 /* 0002 * Copyright (c) 2015, Freescale Semiconductor, Inc. 0003 * Copyright 2016-2020, 2022 NXP 0004 * All rights reserved. 0005 * 0006 * SPDX-License-Identifier: BSD-3-Clause 0007 */ 0008 #ifndef _FSL_FLEXIO_SPI_EDMA_H_ 0009 #define _FSL_FLEXIO_SPI_EDMA_H_ 0010 0011 #include "fsl_flexio_spi.h" 0012 #include "fsl_edma.h" 0013 0014 /*! 0015 * @addtogroup flexio_edma_spi 0016 * @{ 0017 */ 0018 0019 /******************************************************************************* 0020 * Definitions 0021 ******************************************************************************/ 0022 0023 /*! @name Driver version */ 0024 /*@{*/ 0025 /*! @brief FlexIO SPI EDMA driver version. */ 0026 #define FSL_FLEXIO_SPI_EDMA_DRIVER_VERSION (MAKE_VERSION(2, 3, 0)) 0027 /*@}*/ 0028 0029 /*! @brief typedef for flexio_spi_master_edma_handle_t in advance. */ 0030 typedef struct _flexio_spi_master_edma_handle flexio_spi_master_edma_handle_t; 0031 0032 /*! @brief Slave handle is the same with master handle. */ 0033 typedef flexio_spi_master_edma_handle_t flexio_spi_slave_edma_handle_t; 0034 0035 /*! @brief FlexIO SPI master callback for finished transmit */ 0036 typedef void (*flexio_spi_master_edma_transfer_callback_t)(FLEXIO_SPI_Type *base, 0037 flexio_spi_master_edma_handle_t *handle, 0038 status_t status, 0039 void *userData); 0040 0041 /*! @brief FlexIO SPI slave callback for finished transmit */ 0042 typedef void (*flexio_spi_slave_edma_transfer_callback_t)(FLEXIO_SPI_Type *base, 0043 flexio_spi_slave_edma_handle_t *handle, 0044 status_t status, 0045 void *userData); 0046 0047 /*! @brief FlexIO SPI eDMA transfer handle, users should not touch the content of the handle.*/ 0048 struct _flexio_spi_master_edma_handle 0049 { 0050 size_t transferSize; /*!< Total bytes to be transferred. */ 0051 uint8_t nbytes; /*!< eDMA minor byte transfer count initially configured. */ 0052 bool txInProgress; /*!< Send transfer in progress */ 0053 bool rxInProgress; /*!< Receive transfer in progress */ 0054 edma_handle_t *txHandle; /*!< DMA handler for SPI send */ 0055 edma_handle_t *rxHandle; /*!< DMA handler for SPI receive */ 0056 flexio_spi_master_edma_transfer_callback_t callback; /*!< Callback for SPI DMA transfer */ 0057 void *userData; /*!< User Data for SPI DMA callback */ 0058 }; 0059 0060 /******************************************************************************* 0061 * APIs 0062 ******************************************************************************/ 0063 #if defined(__cplusplus) 0064 extern "C" { 0065 #endif 0066 0067 /*! 0068 * @name eDMA Transactional 0069 * @{ 0070 */ 0071 0072 /*! 0073 * @brief Initializes the FlexIO SPI master eDMA handle. 0074 * 0075 * This function initializes the FlexIO SPI master eDMA handle which can be used for other FlexIO SPI master 0076 * transactional 0077 * APIs. 0078 * For a specified FlexIO SPI instance, call this API once to get the initialized handle. 0079 * 0080 * @param base Pointer to FLEXIO_SPI_Type structure. 0081 * @param handle Pointer to flexio_spi_master_edma_handle_t structure to store the transfer state. 0082 * @param callback SPI callback, NULL means no callback. 0083 * @param userData callback function parameter. 0084 * @param txHandle User requested eDMA handle for FlexIO SPI RX eDMA transfer. 0085 * @param rxHandle User requested eDMA handle for FlexIO SPI TX eDMA transfer. 0086 * @retval kStatus_Success Successfully create the handle. 0087 * @retval kStatus_OutOfRange The FlexIO SPI eDMA type/handle table out of range. 0088 */ 0089 status_t FLEXIO_SPI_MasterTransferCreateHandleEDMA(FLEXIO_SPI_Type *base, 0090 flexio_spi_master_edma_handle_t *handle, 0091 flexio_spi_master_edma_transfer_callback_t callback, 0092 void *userData, 0093 edma_handle_t *txHandle, 0094 edma_handle_t *rxHandle); 0095 0096 /*! 0097 * @brief Performs a non-blocking FlexIO SPI transfer using eDMA. 0098 * 0099 * @note This interface returns immediately after transfer initiates. Call 0100 * FLEXIO_SPI_MasterGetTransferCountEDMA to poll the transfer status and check 0101 * whether the FlexIO SPI transfer is finished. 0102 * 0103 * @param base Pointer to FLEXIO_SPI_Type structure. 0104 * @param handle Pointer to flexio_spi_master_edma_handle_t structure to store the transfer state. 0105 * @param xfer Pointer to FlexIO SPI transfer structure. 0106 * @retval kStatus_Success Successfully start a transfer. 0107 * @retval kStatus_InvalidArgument Input argument is invalid. 0108 * @retval kStatus_FLEXIO_SPI_Busy FlexIO SPI is not idle, is running another transfer. 0109 */ 0110 status_t FLEXIO_SPI_MasterTransferEDMA(FLEXIO_SPI_Type *base, 0111 flexio_spi_master_edma_handle_t *handle, 0112 flexio_spi_transfer_t *xfer); 0113 0114 /*! 0115 * @brief Aborts a FlexIO SPI transfer using eDMA. 0116 * 0117 * @param base Pointer to FLEXIO_SPI_Type structure. 0118 * @param handle FlexIO SPI eDMA handle pointer. 0119 */ 0120 void FLEXIO_SPI_MasterTransferAbortEDMA(FLEXIO_SPI_Type *base, flexio_spi_master_edma_handle_t *handle); 0121 0122 /*! 0123 * @brief Gets the number of bytes transferred so far using FlexIO SPI master eDMA. 0124 * 0125 * @param base Pointer to FLEXIO_SPI_Type structure. 0126 * @param handle FlexIO SPI eDMA handle pointer. 0127 * @param count Number of bytes transferred so far by the non-blocking transaction. 0128 */ 0129 status_t FLEXIO_SPI_MasterTransferGetCountEDMA(FLEXIO_SPI_Type *base, 0130 flexio_spi_master_edma_handle_t *handle, 0131 size_t *count); 0132 0133 /*! 0134 * @brief Initializes the FlexIO SPI slave eDMA handle. 0135 * 0136 * This function initializes the FlexIO SPI slave eDMA handle. 0137 * 0138 * @param base Pointer to FLEXIO_SPI_Type structure. 0139 * @param handle Pointer to flexio_spi_slave_edma_handle_t structure to store the transfer state. 0140 * @param callback SPI callback, NULL means no callback. 0141 * @param userData callback function parameter. 0142 * @param txHandle User requested eDMA handle for FlexIO SPI TX eDMA transfer. 0143 * @param rxHandle User requested eDMA handle for FlexIO SPI RX eDMA transfer. 0144 */ 0145 static inline void FLEXIO_SPI_SlaveTransferCreateHandleEDMA(FLEXIO_SPI_Type *base, 0146 flexio_spi_slave_edma_handle_t *handle, 0147 flexio_spi_slave_edma_transfer_callback_t callback, 0148 void *userData, 0149 edma_handle_t *txHandle, 0150 edma_handle_t *rxHandle) 0151 { 0152 (void)FLEXIO_SPI_MasterTransferCreateHandleEDMA(base, handle, callback, userData, txHandle, rxHandle); 0153 } 0154 0155 /*! 0156 * @brief Performs a non-blocking FlexIO SPI transfer using eDMA. 0157 * 0158 * @note This interface returns immediately after transfer initiates. Call 0159 * FLEXIO_SPI_SlaveGetTransferCountEDMA to poll the transfer status and 0160 * check whether the FlexIO SPI transfer is finished. 0161 * 0162 * @param base Pointer to FLEXIO_SPI_Type structure. 0163 * @param handle Pointer to flexio_spi_slave_edma_handle_t structure to store the transfer state. 0164 * @param xfer Pointer to FlexIO SPI transfer structure. 0165 * @retval kStatus_Success Successfully start a transfer. 0166 * @retval kStatus_InvalidArgument Input argument is invalid. 0167 * @retval kStatus_FLEXIO_SPI_Busy FlexIO SPI is not idle, is running another transfer. 0168 */ 0169 status_t FLEXIO_SPI_SlaveTransferEDMA(FLEXIO_SPI_Type *base, 0170 flexio_spi_slave_edma_handle_t *handle, 0171 flexio_spi_transfer_t *xfer); 0172 0173 /*! 0174 * @brief Aborts a FlexIO SPI transfer using eDMA. 0175 * 0176 * @param base Pointer to FLEXIO_SPI_Type structure. 0177 * @param handle Pointer to flexio_spi_slave_edma_handle_t structure to store the transfer state. 0178 */ 0179 static inline void FLEXIO_SPI_SlaveTransferAbortEDMA(FLEXIO_SPI_Type *base, flexio_spi_slave_edma_handle_t *handle) 0180 { 0181 FLEXIO_SPI_MasterTransferAbortEDMA(base, handle); 0182 } 0183 0184 /*! 0185 * @brief Gets the number of bytes transferred so far using FlexIO SPI slave eDMA. 0186 * 0187 * @param base Pointer to FLEXIO_SPI_Type structure. 0188 * @param handle FlexIO SPI eDMA handle pointer. 0189 * @param count Number of bytes transferred so far by the non-blocking transaction. 0190 */ 0191 static inline status_t FLEXIO_SPI_SlaveTransferGetCountEDMA(FLEXIO_SPI_Type *base, 0192 flexio_spi_slave_edma_handle_t *handle, 0193 size_t *count) 0194 { 0195 return FLEXIO_SPI_MasterTransferGetCountEDMA(base, handle, count); 0196 } 0197 0198 /*! @} */ 0199 0200 #if defined(__cplusplus) 0201 } 0202 #endif 0203 0204 /*! 0205 * @} 0206 */ 0207 #endif
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |