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) 2015, Freescale Semiconductor, Inc.
AnnaBridge 161:aa5281ff4a02 4 * Copyright 2016-2017 NXP
AnnaBridge 170:e95d10626187 5 * All rights reserved.
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 the copyright holder 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_FLEXIO_SPI_EDMA_H_
AnnaBridge 161:aa5281ff4a02 35 #define _FSL_FLEXIO_SPI_EDMA_H_
AnnaBridge 161:aa5281ff4a02 36
AnnaBridge 161:aa5281ff4a02 37 #include "fsl_flexio_spi.h"
AnnaBridge 161:aa5281ff4a02 38 #include "fsl_edma.h"
AnnaBridge 161:aa5281ff4a02 39
AnnaBridge 161:aa5281ff4a02 40 /*!
AnnaBridge 161:aa5281ff4a02 41 * @addtogroup flexio_edma_spi
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 /*! @brief FlexIO SPI EDMA driver version 2.1.3. */
AnnaBridge 170:e95d10626187 52 #define FSL_FLEXIO_SPI_EDMA_DRIVER_VERSION (MAKE_VERSION(2, 1, 3))
AnnaBridge 170:e95d10626187 53 /*@}*/
AnnaBridge 170:e95d10626187 54
AnnaBridge 161:aa5281ff4a02 55 /*! @brief typedef for flexio_spi_master_edma_handle_t in advance. */
AnnaBridge 161:aa5281ff4a02 56 typedef struct _flexio_spi_master_edma_handle flexio_spi_master_edma_handle_t;
AnnaBridge 161:aa5281ff4a02 57
AnnaBridge 161:aa5281ff4a02 58 /*! @brief Slave handle is the same with master handle. */
AnnaBridge 161:aa5281ff4a02 59 typedef flexio_spi_master_edma_handle_t flexio_spi_slave_edma_handle_t;
AnnaBridge 161:aa5281ff4a02 60
AnnaBridge 161:aa5281ff4a02 61 /*! @brief FlexIO SPI master callback for finished transmit */
AnnaBridge 161:aa5281ff4a02 62 typedef void (*flexio_spi_master_edma_transfer_callback_t)(FLEXIO_SPI_Type *base,
AnnaBridge 161:aa5281ff4a02 63 flexio_spi_master_edma_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 64 status_t status,
AnnaBridge 161:aa5281ff4a02 65 void *userData);
AnnaBridge 161:aa5281ff4a02 66
AnnaBridge 161:aa5281ff4a02 67 /*! @brief FlexIO SPI slave callback for finished transmit */
AnnaBridge 161:aa5281ff4a02 68 typedef void (*flexio_spi_slave_edma_transfer_callback_t)(FLEXIO_SPI_Type *base,
AnnaBridge 161:aa5281ff4a02 69 flexio_spi_slave_edma_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 70 status_t status,
AnnaBridge 161:aa5281ff4a02 71 void *userData);
AnnaBridge 161:aa5281ff4a02 72
AnnaBridge 161:aa5281ff4a02 73 /*! @brief FlexIO SPI eDMA transfer handle, users should not touch the content of the handle.*/
AnnaBridge 161:aa5281ff4a02 74 struct _flexio_spi_master_edma_handle
AnnaBridge 161:aa5281ff4a02 75 {
AnnaBridge 161:aa5281ff4a02 76 size_t transferSize; /*!< Total bytes to be transferred. */
AnnaBridge 161:aa5281ff4a02 77 uint8_t nbytes; /*!< eDMA minor byte transfer count initially configured. */
AnnaBridge 161:aa5281ff4a02 78 bool txInProgress; /*!< Send transfer in progress */
AnnaBridge 161:aa5281ff4a02 79 bool rxInProgress; /*!< Receive transfer in progress */
AnnaBridge 161:aa5281ff4a02 80 edma_handle_t *txHandle; /*!< DMA handler for SPI send */
AnnaBridge 161:aa5281ff4a02 81 edma_handle_t *rxHandle; /*!< DMA handler for SPI receive */
AnnaBridge 161:aa5281ff4a02 82 flexio_spi_master_edma_transfer_callback_t callback; /*!< Callback for SPI DMA transfer */
AnnaBridge 161:aa5281ff4a02 83 void *userData; /*!< User Data for SPI DMA callback */
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 FlexIO SPI master eDMA handle.
AnnaBridge 161:aa5281ff4a02 100 *
AnnaBridge 170:e95d10626187 101 * This function initializes the FlexIO SPI master eDMA handle which can be used for other FlexIO SPI master
AnnaBridge 170:e95d10626187 102 * transactional
AnnaBridge 161:aa5281ff4a02 103 * APIs.
AnnaBridge 161:aa5281ff4a02 104 * For a specified FlexIO SPI instance, call this API once to get the initialized handle.
AnnaBridge 161:aa5281ff4a02 105 *
AnnaBridge 161:aa5281ff4a02 106 * @param base Pointer to FLEXIO_SPI_Type structure.
AnnaBridge 161:aa5281ff4a02 107 * @param handle Pointer to flexio_spi_master_edma_handle_t structure to store the transfer state.
AnnaBridge 161:aa5281ff4a02 108 * @param callback SPI callback, NULL means no callback.
AnnaBridge 161:aa5281ff4a02 109 * @param userData callback function parameter.
AnnaBridge 161:aa5281ff4a02 110 * @param txHandle User requested eDMA handle for FlexIO SPI RX eDMA transfer.
AnnaBridge 161:aa5281ff4a02 111 * @param rxHandle User requested eDMA handle for FlexIO SPI TX eDMA transfer.
AnnaBridge 161:aa5281ff4a02 112 * @retval kStatus_Success Successfully create the handle.
AnnaBridge 161:aa5281ff4a02 113 * @retval kStatus_OutOfRange The FlexIO SPI eDMA type/handle table out of range.
AnnaBridge 161:aa5281ff4a02 114 */
AnnaBridge 161:aa5281ff4a02 115 status_t FLEXIO_SPI_MasterTransferCreateHandleEDMA(FLEXIO_SPI_Type *base,
AnnaBridge 161:aa5281ff4a02 116 flexio_spi_master_edma_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 117 flexio_spi_master_edma_transfer_callback_t callback,
AnnaBridge 161:aa5281ff4a02 118 void *userData,
AnnaBridge 161:aa5281ff4a02 119 edma_handle_t *txHandle,
AnnaBridge 161:aa5281ff4a02 120 edma_handle_t *rxHandle);
AnnaBridge 161:aa5281ff4a02 121
AnnaBridge 161:aa5281ff4a02 122 /*!
AnnaBridge 161:aa5281ff4a02 123 * @brief Performs a non-blocking FlexIO SPI transfer using eDMA.
AnnaBridge 161:aa5281ff4a02 124 *
AnnaBridge 161:aa5281ff4a02 125 * @note This interface returns immediately after transfer initiates. Call
AnnaBridge 161:aa5281ff4a02 126 * FLEXIO_SPI_MasterGetTransferCountEDMA to poll the transfer status and check
AnnaBridge 161:aa5281ff4a02 127 * whether the FlexIO SPI transfer is finished.
AnnaBridge 161:aa5281ff4a02 128 *
AnnaBridge 161:aa5281ff4a02 129 * @param base Pointer to FLEXIO_SPI_Type structure.
AnnaBridge 161:aa5281ff4a02 130 * @param handle Pointer to flexio_spi_master_edma_handle_t structure to store the transfer state.
AnnaBridge 161:aa5281ff4a02 131 * @param xfer Pointer to FlexIO SPI transfer structure.
AnnaBridge 161:aa5281ff4a02 132 * @retval kStatus_Success Successfully start a transfer.
AnnaBridge 161:aa5281ff4a02 133 * @retval kStatus_InvalidArgument Input argument is invalid.
AnnaBridge 161:aa5281ff4a02 134 * @retval kStatus_FLEXIO_SPI_Busy FlexIO SPI is not idle, is running another transfer.
AnnaBridge 161:aa5281ff4a02 135 */
AnnaBridge 161:aa5281ff4a02 136 status_t FLEXIO_SPI_MasterTransferEDMA(FLEXIO_SPI_Type *base,
AnnaBridge 161:aa5281ff4a02 137 flexio_spi_master_edma_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 138 flexio_spi_transfer_t *xfer);
AnnaBridge 161:aa5281ff4a02 139
AnnaBridge 161:aa5281ff4a02 140 /*!
AnnaBridge 161:aa5281ff4a02 141 * @brief Aborts a FlexIO SPI transfer using eDMA.
AnnaBridge 161:aa5281ff4a02 142 *
AnnaBridge 161:aa5281ff4a02 143 * @param base Pointer to FLEXIO_SPI_Type structure.
AnnaBridge 161:aa5281ff4a02 144 * @param handle FlexIO SPI eDMA handle pointer.
AnnaBridge 161:aa5281ff4a02 145 */
AnnaBridge 161:aa5281ff4a02 146 void FLEXIO_SPI_MasterTransferAbortEDMA(FLEXIO_SPI_Type *base, flexio_spi_master_edma_handle_t *handle);
AnnaBridge 161:aa5281ff4a02 147
AnnaBridge 161:aa5281ff4a02 148 /*!
AnnaBridge 161:aa5281ff4a02 149 * @brief Gets the remaining bytes for FlexIO SPI eDMA transfer.
AnnaBridge 161:aa5281ff4a02 150 *
AnnaBridge 161:aa5281ff4a02 151 * @param base Pointer to FLEXIO_SPI_Type structure.
AnnaBridge 161:aa5281ff4a02 152 * @param handle FlexIO SPI eDMA handle pointer.
AnnaBridge 161:aa5281ff4a02 153 * @param count Number of bytes transferred so far by the non-blocking transaction.
AnnaBridge 161:aa5281ff4a02 154 */
AnnaBridge 161:aa5281ff4a02 155 status_t FLEXIO_SPI_MasterTransferGetCountEDMA(FLEXIO_SPI_Type *base,
AnnaBridge 161:aa5281ff4a02 156 flexio_spi_master_edma_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 157 size_t *count);
AnnaBridge 161:aa5281ff4a02 158
AnnaBridge 161:aa5281ff4a02 159 /*!
AnnaBridge 161:aa5281ff4a02 160 * @brief Initializes the FlexIO SPI slave eDMA handle.
AnnaBridge 161:aa5281ff4a02 161 *
AnnaBridge 161:aa5281ff4a02 162 * This function initializes the FlexIO SPI slave eDMA handle.
AnnaBridge 161:aa5281ff4a02 163 *
AnnaBridge 161:aa5281ff4a02 164 * @param base Pointer to FLEXIO_SPI_Type structure.
AnnaBridge 161:aa5281ff4a02 165 * @param handle Pointer to flexio_spi_slave_edma_handle_t structure to store the transfer state.
AnnaBridge 161:aa5281ff4a02 166 * @param callback SPI callback, NULL means no callback.
AnnaBridge 161:aa5281ff4a02 167 * @param userData callback function parameter.
AnnaBridge 161:aa5281ff4a02 168 * @param txHandle User requested eDMA handle for FlexIO SPI TX eDMA transfer.
AnnaBridge 161:aa5281ff4a02 169 * @param rxHandle User requested eDMA handle for FlexIO SPI RX eDMA transfer.
AnnaBridge 161:aa5281ff4a02 170 */
AnnaBridge 161:aa5281ff4a02 171 static inline void FLEXIO_SPI_SlaveTransferCreateHandleEDMA(FLEXIO_SPI_Type *base,
AnnaBridge 161:aa5281ff4a02 172 flexio_spi_slave_edma_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 173 flexio_spi_slave_edma_transfer_callback_t callback,
AnnaBridge 161:aa5281ff4a02 174 void *userData,
AnnaBridge 161:aa5281ff4a02 175 edma_handle_t *txHandle,
AnnaBridge 161:aa5281ff4a02 176 edma_handle_t *rxHandle)
AnnaBridge 161:aa5281ff4a02 177 {
AnnaBridge 161:aa5281ff4a02 178 FLEXIO_SPI_MasterTransferCreateHandleEDMA(base, handle, callback, userData, txHandle, rxHandle);
AnnaBridge 161:aa5281ff4a02 179 }
AnnaBridge 161:aa5281ff4a02 180
AnnaBridge 161:aa5281ff4a02 181 /*!
AnnaBridge 161:aa5281ff4a02 182 * @brief Performs a non-blocking FlexIO SPI transfer using eDMA.
AnnaBridge 161:aa5281ff4a02 183 *
AnnaBridge 161:aa5281ff4a02 184 * @note This interface returns immediately after transfer initiates. Call
AnnaBridge 161:aa5281ff4a02 185 * FLEXIO_SPI_SlaveGetTransferCountEDMA to poll the transfer status and
AnnaBridge 161:aa5281ff4a02 186 * check whether the FlexIO SPI transfer is finished.
AnnaBridge 161:aa5281ff4a02 187 *
AnnaBridge 161:aa5281ff4a02 188 * @param base Pointer to FLEXIO_SPI_Type structure.
AnnaBridge 161:aa5281ff4a02 189 * @param handle Pointer to flexio_spi_slave_edma_handle_t structure to store the transfer state.
AnnaBridge 161:aa5281ff4a02 190 * @param xfer Pointer to FlexIO SPI transfer structure.
AnnaBridge 161:aa5281ff4a02 191 * @retval kStatus_Success Successfully start a transfer.
AnnaBridge 161:aa5281ff4a02 192 * @retval kStatus_InvalidArgument Input argument is invalid.
AnnaBridge 161:aa5281ff4a02 193 * @retval kStatus_FLEXIO_SPI_Busy FlexIO SPI is not idle, is running another transfer.
AnnaBridge 161:aa5281ff4a02 194 */
AnnaBridge 161:aa5281ff4a02 195 status_t FLEXIO_SPI_SlaveTransferEDMA(FLEXIO_SPI_Type *base,
AnnaBridge 161:aa5281ff4a02 196 flexio_spi_slave_edma_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 197 flexio_spi_transfer_t *xfer);
AnnaBridge 161:aa5281ff4a02 198
AnnaBridge 161:aa5281ff4a02 199 /*!
AnnaBridge 161:aa5281ff4a02 200 * @brief Aborts a FlexIO SPI transfer using eDMA.
AnnaBridge 161:aa5281ff4a02 201 *
AnnaBridge 161:aa5281ff4a02 202 * @param base Pointer to FLEXIO_SPI_Type structure.
AnnaBridge 161:aa5281ff4a02 203 * @param handle Pointer to flexio_spi_slave_edma_handle_t structure to store the transfer state.
AnnaBridge 161:aa5281ff4a02 204 */
AnnaBridge 161:aa5281ff4a02 205 static inline void FLEXIO_SPI_SlaveTransferAbortEDMA(FLEXIO_SPI_Type *base, flexio_spi_slave_edma_handle_t *handle)
AnnaBridge 161:aa5281ff4a02 206 {
AnnaBridge 161:aa5281ff4a02 207 FLEXIO_SPI_MasterTransferAbortEDMA(base, handle);
AnnaBridge 161:aa5281ff4a02 208 }
AnnaBridge 161:aa5281ff4a02 209
AnnaBridge 161:aa5281ff4a02 210 /*!
AnnaBridge 161:aa5281ff4a02 211 * @brief Gets the remaining bytes to be transferred for FlexIO SPI eDMA.
AnnaBridge 161:aa5281ff4a02 212 *
AnnaBridge 161:aa5281ff4a02 213 * @param base Pointer to FLEXIO_SPI_Type structure.
AnnaBridge 161:aa5281ff4a02 214 * @param handle FlexIO SPI eDMA handle pointer.
AnnaBridge 161:aa5281ff4a02 215 * @param count Number of bytes transferred so far by the non-blocking transaction.
AnnaBridge 161:aa5281ff4a02 216 */
AnnaBridge 161:aa5281ff4a02 217 static inline status_t FLEXIO_SPI_SlaveTransferGetCountEDMA(FLEXIO_SPI_Type *base,
AnnaBridge 161:aa5281ff4a02 218 flexio_spi_slave_edma_handle_t *handle,
AnnaBridge 161:aa5281ff4a02 219 size_t *count)
AnnaBridge 161:aa5281ff4a02 220 {
AnnaBridge 161:aa5281ff4a02 221 return FLEXIO_SPI_MasterTransferGetCountEDMA(base, handle, count);
AnnaBridge 161:aa5281ff4a02 222 }
AnnaBridge 161:aa5281ff4a02 223
AnnaBridge 161:aa5281ff4a02 224 /*! @} */
AnnaBridge 161:aa5281ff4a02 225
AnnaBridge 161:aa5281ff4a02 226 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 227 }
AnnaBridge 161:aa5281ff4a02 228 #endif
AnnaBridge 161:aa5281ff4a02 229
AnnaBridge 161:aa5281ff4a02 230 /*!
AnnaBridge 161:aa5281ff4a02 231 * @}
AnnaBridge 161:aa5281ff4a02 232 */
AnnaBridge 161:aa5281ff4a02 233 #endif