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:
Thu Nov 08 11:45:42 2018 +0000
Revision:
171:3a7713b1edbc
mbed library. Release version 164

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 171:3a7713b1edbc 1 /*
AnnaBridge 171:3a7713b1edbc 2 * Copyright (c) 2015, Freescale Semiconductor, Inc.
AnnaBridge 171:3a7713b1edbc 3 * All rights reserved.
AnnaBridge 171:3a7713b1edbc 4 *
AnnaBridge 171:3a7713b1edbc 5 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 171:3a7713b1edbc 6 * are permitted provided that the following conditions are met:
AnnaBridge 171:3a7713b1edbc 7 *
AnnaBridge 171:3a7713b1edbc 8 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 171:3a7713b1edbc 9 * of conditions and the following disclaimer.
AnnaBridge 171:3a7713b1edbc 10 *
AnnaBridge 171:3a7713b1edbc 11 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 171:3a7713b1edbc 12 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 171:3a7713b1edbc 13 * other materials provided with the distribution.
AnnaBridge 171:3a7713b1edbc 14 *
AnnaBridge 171:3a7713b1edbc 15 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
AnnaBridge 171:3a7713b1edbc 16 * contributors may be used to endorse or promote products derived from this
AnnaBridge 171:3a7713b1edbc 17 * software without specific prior written permission.
AnnaBridge 171:3a7713b1edbc 18 *
AnnaBridge 171:3a7713b1edbc 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 171:3a7713b1edbc 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 171:3a7713b1edbc 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 171:3a7713b1edbc 22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 171:3a7713b1edbc 23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 171:3a7713b1edbc 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 171:3a7713b1edbc 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 171:3a7713b1edbc 26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 171:3a7713b1edbc 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 171:3a7713b1edbc 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 171:3a7713b1edbc 29 */
AnnaBridge 171:3a7713b1edbc 30
AnnaBridge 171:3a7713b1edbc 31 #ifndef _FSL_EDMA_H_
AnnaBridge 171:3a7713b1edbc 32 #define _FSL_EDMA_H_
AnnaBridge 171:3a7713b1edbc 33
AnnaBridge 171:3a7713b1edbc 34 #include "fsl_common.h"
AnnaBridge 171:3a7713b1edbc 35
AnnaBridge 171:3a7713b1edbc 36 /*!
AnnaBridge 171:3a7713b1edbc 37 * @addtogroup edma_driver
AnnaBridge 171:3a7713b1edbc 38 * @{
AnnaBridge 171:3a7713b1edbc 39 */
AnnaBridge 171:3a7713b1edbc 40
AnnaBridge 171:3a7713b1edbc 41 /*! @file */
AnnaBridge 171:3a7713b1edbc 42 /*******************************************************************************
AnnaBridge 171:3a7713b1edbc 43 * Definitions
AnnaBridge 171:3a7713b1edbc 44 ******************************************************************************/
AnnaBridge 171:3a7713b1edbc 45
AnnaBridge 171:3a7713b1edbc 46 /*! @name Driver version */
AnnaBridge 171:3a7713b1edbc 47 /*@{*/
AnnaBridge 171:3a7713b1edbc 48 /*! @brief eDMA driver version */
AnnaBridge 171:3a7713b1edbc 49 #define FSL_EDMA_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0. */
AnnaBridge 171:3a7713b1edbc 50 /*@}*/
AnnaBridge 171:3a7713b1edbc 51
AnnaBridge 171:3a7713b1edbc 52 /*! @brief Compute the offset unit from DCHPRI3 */
AnnaBridge 171:3a7713b1edbc 53 #define DMA_DCHPRI_INDEX(channel) (((channel) & ~0x03U) | (3 - ((channel)&0x03U)))
AnnaBridge 171:3a7713b1edbc 54
AnnaBridge 171:3a7713b1edbc 55 /*! @brief Get the pointer of DCHPRIn */
AnnaBridge 171:3a7713b1edbc 56 #define DMA_DCHPRIn(base, channel) ((volatile uint8_t *)&(base->DCHPRI3))[DMA_DCHPRI_INDEX(channel)]
AnnaBridge 171:3a7713b1edbc 57
AnnaBridge 171:3a7713b1edbc 58 /*! @brief eDMA transfer configuration */
AnnaBridge 171:3a7713b1edbc 59 typedef enum _edma_transfer_size
AnnaBridge 171:3a7713b1edbc 60 {
AnnaBridge 171:3a7713b1edbc 61 kEDMA_TransferSize1Bytes = 0x0U, /*!< Source/Destination data transfer size is 1 byte every time */
AnnaBridge 171:3a7713b1edbc 62 kEDMA_TransferSize2Bytes = 0x1U, /*!< Source/Destination data transfer size is 2 bytes every time */
AnnaBridge 171:3a7713b1edbc 63 kEDMA_TransferSize4Bytes = 0x2U, /*!< Source/Destination data transfer size is 4 bytes every time */
AnnaBridge 171:3a7713b1edbc 64 kEDMA_TransferSize16Bytes = 0x4U, /*!< Source/Destination data transfer size is 16 bytes every time */
AnnaBridge 171:3a7713b1edbc 65 kEDMA_TransferSize32Bytes = 0x5U, /*!< Source/Destination data transfer size is 32 bytes every time */
AnnaBridge 171:3a7713b1edbc 66 } edma_transfer_size_t;
AnnaBridge 171:3a7713b1edbc 67
AnnaBridge 171:3a7713b1edbc 68 /*! @brief eDMA modulo configuration */
AnnaBridge 171:3a7713b1edbc 69 typedef enum _edma_modulo
AnnaBridge 171:3a7713b1edbc 70 {
AnnaBridge 171:3a7713b1edbc 71 kEDMA_ModuloDisable = 0x0U, /*!< Disable modulo */
AnnaBridge 171:3a7713b1edbc 72 kEDMA_Modulo2bytes, /*!< Circular buffer size is 2 bytes. */
AnnaBridge 171:3a7713b1edbc 73 kEDMA_Modulo4bytes, /*!< Circular buffer size is 4 bytes. */
AnnaBridge 171:3a7713b1edbc 74 kEDMA_Modulo8bytes, /*!< Circular buffer size is 8 bytes. */
AnnaBridge 171:3a7713b1edbc 75 kEDMA_Modulo16bytes, /*!< Circular buffer size is 16 bytes. */
AnnaBridge 171:3a7713b1edbc 76 kEDMA_Modulo32bytes, /*!< Circular buffer size is 32 bytes. */
AnnaBridge 171:3a7713b1edbc 77 kEDMA_Modulo64bytes, /*!< Circular buffer size is 64 bytes. */
AnnaBridge 171:3a7713b1edbc 78 kEDMA_Modulo128bytes, /*!< Circular buffer size is 128 bytes. */
AnnaBridge 171:3a7713b1edbc 79 kEDMA_Modulo256bytes, /*!< Circular buffer size is 256 bytes. */
AnnaBridge 171:3a7713b1edbc 80 kEDMA_Modulo512bytes, /*!< Circular buffer size is 512 bytes. */
AnnaBridge 171:3a7713b1edbc 81 kEDMA_Modulo1Kbytes, /*!< Circular buffer size is 1K bytes. */
AnnaBridge 171:3a7713b1edbc 82 kEDMA_Modulo2Kbytes, /*!< Circular buffer size is 2K bytes. */
AnnaBridge 171:3a7713b1edbc 83 kEDMA_Modulo4Kbytes, /*!< Circular buffer size is 4K bytes. */
AnnaBridge 171:3a7713b1edbc 84 kEDMA_Modulo8Kbytes, /*!< Circular buffer size is 8K bytes. */
AnnaBridge 171:3a7713b1edbc 85 kEDMA_Modulo16Kbytes, /*!< Circular buffer size is 16K bytes. */
AnnaBridge 171:3a7713b1edbc 86 kEDMA_Modulo32Kbytes, /*!< Circular buffer size is 32K bytes. */
AnnaBridge 171:3a7713b1edbc 87 kEDMA_Modulo64Kbytes, /*!< Circular buffer size is 64K bytes. */
AnnaBridge 171:3a7713b1edbc 88 kEDMA_Modulo128Kbytes, /*!< Circular buffer size is 128K bytes. */
AnnaBridge 171:3a7713b1edbc 89 kEDMA_Modulo256Kbytes, /*!< Circular buffer size is 256K bytes. */
AnnaBridge 171:3a7713b1edbc 90 kEDMA_Modulo512Kbytes, /*!< Circular buffer size is 512K bytes. */
AnnaBridge 171:3a7713b1edbc 91 kEDMA_Modulo1Mbytes, /*!< Circular buffer size is 1M bytes. */
AnnaBridge 171:3a7713b1edbc 92 kEDMA_Modulo2Mbytes, /*!< Circular buffer size is 2M bytes. */
AnnaBridge 171:3a7713b1edbc 93 kEDMA_Modulo4Mbytes, /*!< Circular buffer size is 4M bytes. */
AnnaBridge 171:3a7713b1edbc 94 kEDMA_Modulo8Mbytes, /*!< Circular buffer size is 8M bytes. */
AnnaBridge 171:3a7713b1edbc 95 kEDMA_Modulo16Mbytes, /*!< Circular buffer size is 16M bytes. */
AnnaBridge 171:3a7713b1edbc 96 kEDMA_Modulo32Mbytes, /*!< Circular buffer size is 32M bytes. */
AnnaBridge 171:3a7713b1edbc 97 kEDMA_Modulo64Mbytes, /*!< Circular buffer size is 64M bytes. */
AnnaBridge 171:3a7713b1edbc 98 kEDMA_Modulo128Mbytes, /*!< Circular buffer size is 128M bytes. */
AnnaBridge 171:3a7713b1edbc 99 kEDMA_Modulo256Mbytes, /*!< Circular buffer size is 256M bytes. */
AnnaBridge 171:3a7713b1edbc 100 kEDMA_Modulo512Mbytes, /*!< Circular buffer size is 512M bytes. */
AnnaBridge 171:3a7713b1edbc 101 kEDMA_Modulo1Gbytes, /*!< Circular buffer size is 1G bytes. */
AnnaBridge 171:3a7713b1edbc 102 kEDMA_Modulo2Gbytes, /*!< Circular buffer size is 2G bytes. */
AnnaBridge 171:3a7713b1edbc 103 } edma_modulo_t;
AnnaBridge 171:3a7713b1edbc 104
AnnaBridge 171:3a7713b1edbc 105 /*! @brief Bandwidth control */
AnnaBridge 171:3a7713b1edbc 106 typedef enum _edma_bandwidth
AnnaBridge 171:3a7713b1edbc 107 {
AnnaBridge 171:3a7713b1edbc 108 kEDMA_BandwidthStallNone = 0x0U, /*!< No eDMA engine stalls. */
AnnaBridge 171:3a7713b1edbc 109 kEDMA_BandwidthStall4Cycle = 0x2U, /*!< eDMA engine stalls for 4 cycles after each read/write. */
AnnaBridge 171:3a7713b1edbc 110 kEDMA_BandwidthStall8Cycle = 0x3U, /*!< eDMA engine stalls for 8 cycles after each read/write. */
AnnaBridge 171:3a7713b1edbc 111 } edma_bandwidth_t;
AnnaBridge 171:3a7713b1edbc 112
AnnaBridge 171:3a7713b1edbc 113 /*! @brief Channel link type */
AnnaBridge 171:3a7713b1edbc 114 typedef enum _edma_channel_link_type
AnnaBridge 171:3a7713b1edbc 115 {
AnnaBridge 171:3a7713b1edbc 116 kEDMA_LinkNone = 0x0U, /*!< No channel link */
AnnaBridge 171:3a7713b1edbc 117 kEDMA_MinorLink, /*!< Channel link after each minor loop */
AnnaBridge 171:3a7713b1edbc 118 kEDMA_MajorLink, /*!< Channel link while major loop count exhausted */
AnnaBridge 171:3a7713b1edbc 119 } edma_channel_link_type_t;
AnnaBridge 171:3a7713b1edbc 120
AnnaBridge 171:3a7713b1edbc 121 /*!@brief eDMA channel status flags. */
AnnaBridge 171:3a7713b1edbc 122 enum _edma_channel_status_flags
AnnaBridge 171:3a7713b1edbc 123 {
AnnaBridge 171:3a7713b1edbc 124 kEDMA_DoneFlag = 0x1U, /*!< DONE flag, set while transfer finished, CITER value exhausted*/
AnnaBridge 171:3a7713b1edbc 125 kEDMA_ErrorFlag = 0x2U, /*!< eDMA error flag, an error occurred in a transfer */
AnnaBridge 171:3a7713b1edbc 126 kEDMA_InterruptFlag = 0x4U, /*!< eDMA interrupt flag, set while an interrupt occurred of this channel */
AnnaBridge 171:3a7713b1edbc 127 };
AnnaBridge 171:3a7713b1edbc 128
AnnaBridge 171:3a7713b1edbc 129 /*! @brief eDMA channel error status flags. */
AnnaBridge 171:3a7713b1edbc 130 enum _edma_error_status_flags
AnnaBridge 171:3a7713b1edbc 131 {
AnnaBridge 171:3a7713b1edbc 132 kEDMA_DestinationBusErrorFlag = DMA_ES_DBE_MASK, /*!< Bus error on destination address */
AnnaBridge 171:3a7713b1edbc 133 kEDMA_SourceBusErrorFlag = DMA_ES_SBE_MASK, /*!< Bus error on the source address */
AnnaBridge 171:3a7713b1edbc 134 kEDMA_ScatterGatherErrorFlag = DMA_ES_SGE_MASK, /*!< Error on the Scatter/Gather address, not 32byte aligned. */
AnnaBridge 171:3a7713b1edbc 135 kEDMA_NbytesErrorFlag = DMA_ES_NCE_MASK, /*!< NBYTES/CITER configuration error */
AnnaBridge 171:3a7713b1edbc 136 kEDMA_DestinationOffsetErrorFlag = DMA_ES_DOE_MASK, /*!< Destination offset not aligned with destination size */
AnnaBridge 171:3a7713b1edbc 137 kEDMA_DestinationAddressErrorFlag = DMA_ES_DAE_MASK, /*!< Destination address not aligned with destination size */
AnnaBridge 171:3a7713b1edbc 138 kEDMA_SourceOffsetErrorFlag = DMA_ES_SOE_MASK, /*!< Source offset not aligned with source size */
AnnaBridge 171:3a7713b1edbc 139 kEDMA_SourceAddressErrorFlag = DMA_ES_SAE_MASK, /*!< Source address not aligned with source size*/
AnnaBridge 171:3a7713b1edbc 140 kEDMA_ErrorChannelFlag = DMA_ES_ERRCHN_MASK, /*!< Error channel number of the cancelled channel number */
AnnaBridge 171:3a7713b1edbc 141 kEDMA_ChannelPriorityErrorFlag = DMA_ES_CPE_MASK, /*!< Channel priority is not unique. */
AnnaBridge 171:3a7713b1edbc 142 kEDMA_TransferCanceledFlag = DMA_ES_ECX_MASK, /*!< Transfer cancelled */
AnnaBridge 171:3a7713b1edbc 143 #if defined(FSL_FEATURE_EDMA_CHANNEL_GROUP_COUNT) && FSL_FEATURE_EDMA_CHANNEL_GROUP_COUNT > 1
AnnaBridge 171:3a7713b1edbc 144 kEDMA_GroupPriorityErrorFlag = DMA_ES_GPE_MASK, /*!< Group priority is not unique. */
AnnaBridge 171:3a7713b1edbc 145 #endif
AnnaBridge 171:3a7713b1edbc 146 kEDMA_ValidFlag = DMA_ES_VLD_MASK, /*!< No error occurred, this bit will be 0, otherwise be 1 */
AnnaBridge 171:3a7713b1edbc 147 };
AnnaBridge 171:3a7713b1edbc 148
AnnaBridge 171:3a7713b1edbc 149 /*! @brief eDMA interrupt source */
AnnaBridge 171:3a7713b1edbc 150 typedef enum _edma_interrupt_enable
AnnaBridge 171:3a7713b1edbc 151 {
AnnaBridge 171:3a7713b1edbc 152 kEDMA_ErrorInterruptEnable = 0x1U, /*!< Enable interrupt while channel error occurs. */
AnnaBridge 171:3a7713b1edbc 153 kEDMA_MajorInterruptEnable = DMA_CSR_INTMAJOR_MASK, /*!< Enable interrupt while major count exhausted. */
AnnaBridge 171:3a7713b1edbc 154 kEDMA_HalfInterruptEnable = DMA_CSR_INTHALF_MASK, /*!< Enable interrupt while major count to half value. */
AnnaBridge 171:3a7713b1edbc 155 } edma_interrupt_enable_t;
AnnaBridge 171:3a7713b1edbc 156
AnnaBridge 171:3a7713b1edbc 157 /*! @brief eDMA transfer type */
AnnaBridge 171:3a7713b1edbc 158 typedef enum _edma_transfer_type
AnnaBridge 171:3a7713b1edbc 159 {
AnnaBridge 171:3a7713b1edbc 160 kEDMA_MemoryToMemory = 0x0U, /*!< Transfer from memory to memory */
AnnaBridge 171:3a7713b1edbc 161 kEDMA_PeripheralToMemory, /*!< Transfer from peripheral to memory */
AnnaBridge 171:3a7713b1edbc 162 kEDMA_MemoryToPeripheral, /*!< Transfer from memory to peripheral */
AnnaBridge 171:3a7713b1edbc 163 } edma_transfer_type_t;
AnnaBridge 171:3a7713b1edbc 164
AnnaBridge 171:3a7713b1edbc 165 /*! @brief eDMA transfer status */
AnnaBridge 171:3a7713b1edbc 166 enum _edma_transfer_status
AnnaBridge 171:3a7713b1edbc 167 {
AnnaBridge 171:3a7713b1edbc 168 kStatus_EDMA_QueueFull = MAKE_STATUS(kStatusGroup_EDMA, 0), /*!< TCD queue is full. */
AnnaBridge 171:3a7713b1edbc 169 kStatus_EDMA_Busy = MAKE_STATUS(kStatusGroup_EDMA, 1), /*!< Channel is busy and can't handle the
AnnaBridge 171:3a7713b1edbc 170 transfer request. */
AnnaBridge 171:3a7713b1edbc 171 };
AnnaBridge 171:3a7713b1edbc 172
AnnaBridge 171:3a7713b1edbc 173 /*! @brief eDMA global configuration structure.*/
AnnaBridge 171:3a7713b1edbc 174 typedef struct _edma_config
AnnaBridge 171:3a7713b1edbc 175 {
AnnaBridge 171:3a7713b1edbc 176 bool enableContinuousLinkMode; /*!< Enable (true) continuous link mode. Upon minor loop completion, the channel
AnnaBridge 171:3a7713b1edbc 177 activates again if that channel has a minor loop channel link enabled and
AnnaBridge 171:3a7713b1edbc 178 the link channel is itself. */
AnnaBridge 171:3a7713b1edbc 179 bool enableHaltOnError; /*!< Enable (true) transfer halt on error. Any error causes the HALT bit to set.
AnnaBridge 171:3a7713b1edbc 180 Subsequently, all service requests are ignored until the HALT bit is cleared.*/
AnnaBridge 171:3a7713b1edbc 181 bool enableRoundRobinArbitration; /*!< Enable (true) round robin channel arbitration method, or fixed priority
AnnaBridge 171:3a7713b1edbc 182 arbitration is used for channel selection */
AnnaBridge 171:3a7713b1edbc 183 bool enableDebugMode; /*!< Enable(true) eDMA debug mode. When in debug mode, the eDMA stalls the start of
AnnaBridge 171:3a7713b1edbc 184 a new channel. Executing channels are allowed to complete. */
AnnaBridge 171:3a7713b1edbc 185 } edma_config_t;
AnnaBridge 171:3a7713b1edbc 186
AnnaBridge 171:3a7713b1edbc 187 /*!
AnnaBridge 171:3a7713b1edbc 188 * @brief eDMA transfer configuration
AnnaBridge 171:3a7713b1edbc 189 *
AnnaBridge 171:3a7713b1edbc 190 * This structure configures the source/destination transfer attribute.
AnnaBridge 171:3a7713b1edbc 191 * This figure shows the eDMA's transfer model:
AnnaBridge 171:3a7713b1edbc 192 * _________________________________________________
AnnaBridge 171:3a7713b1edbc 193 * | Transfer Size | |
AnnaBridge 171:3a7713b1edbc 194 * Minor Loop |_______________| Major loop Count 1 |
AnnaBridge 171:3a7713b1edbc 195 * Bytes | Transfer Size | |
AnnaBridge 171:3a7713b1edbc 196 * ____________|_______________|____________________|--> Minor loop complete
AnnaBridge 171:3a7713b1edbc 197 * ____________________________________
AnnaBridge 171:3a7713b1edbc 198 * | | |
AnnaBridge 171:3a7713b1edbc 199 * |_______________| Major Loop Count 2 |
AnnaBridge 171:3a7713b1edbc 200 * | | |
AnnaBridge 171:3a7713b1edbc 201 * |_______________|____________________|--> Minor loop Complete
AnnaBridge 171:3a7713b1edbc 202 *
AnnaBridge 171:3a7713b1edbc 203 * ---------------------------------------------------------> Transfer complete
AnnaBridge 171:3a7713b1edbc 204 */
AnnaBridge 171:3a7713b1edbc 205 typedef struct _edma_transfer_config
AnnaBridge 171:3a7713b1edbc 206 {
AnnaBridge 171:3a7713b1edbc 207 uint32_t srcAddr; /*!< Source data address. */
AnnaBridge 171:3a7713b1edbc 208 uint32_t destAddr; /*!< Destination data address. */
AnnaBridge 171:3a7713b1edbc 209 edma_transfer_size_t srcTransferSize; /*!< Source data transfer size. */
AnnaBridge 171:3a7713b1edbc 210 edma_transfer_size_t destTransferSize; /*!< Destination data transfer size. */
AnnaBridge 171:3a7713b1edbc 211 int16_t srcOffset; /*!< Sign-extended offset applied to the current source address to
AnnaBridge 171:3a7713b1edbc 212 form the next-state value as each source read is completed. */
AnnaBridge 171:3a7713b1edbc 213 int16_t destOffset; /*!< Sign-extended offset applied to the current destination address to
AnnaBridge 171:3a7713b1edbc 214 form the next-state value as each destination write is completed. */
AnnaBridge 171:3a7713b1edbc 215 uint16_t minorLoopBytes; /*!< Bytes to transfer in a minor loop*/
AnnaBridge 171:3a7713b1edbc 216 uint32_t majorLoopCounts; /*!< Major loop iteration count. */
AnnaBridge 171:3a7713b1edbc 217 } edma_transfer_config_t;
AnnaBridge 171:3a7713b1edbc 218
AnnaBridge 171:3a7713b1edbc 219 /*! @brief eDMA channel priority configuration */
AnnaBridge 171:3a7713b1edbc 220 typedef struct _edma_channel_Preemption_config
AnnaBridge 171:3a7713b1edbc 221 {
AnnaBridge 171:3a7713b1edbc 222 bool enableChannelPreemption; /*!< If true: channel can be suspended by other channel with higher priority */
AnnaBridge 171:3a7713b1edbc 223 bool enablePreemptAbility; /*!< If true: channel can suspend other channel with low priority */
AnnaBridge 171:3a7713b1edbc 224 uint8_t channelPriority; /*!< Channel priority */
AnnaBridge 171:3a7713b1edbc 225 } edma_channel_Preemption_config_t;
AnnaBridge 171:3a7713b1edbc 226
AnnaBridge 171:3a7713b1edbc 227 /*! @brief eDMA minor offset configuration */
AnnaBridge 171:3a7713b1edbc 228 typedef struct _edma_minor_offset_config
AnnaBridge 171:3a7713b1edbc 229 {
AnnaBridge 171:3a7713b1edbc 230 bool enableSrcMinorOffset; /*!< Enable(true) or Disable(false) source minor loop offset. */
AnnaBridge 171:3a7713b1edbc 231 bool enableDestMinorOffset; /*!< Enable(true) or Disable(false) destination minor loop offset. */
AnnaBridge 171:3a7713b1edbc 232 uint32_t minorOffset; /*!< Offset for minor loop mapping. */
AnnaBridge 171:3a7713b1edbc 233 } edma_minor_offset_config_t;
AnnaBridge 171:3a7713b1edbc 234
AnnaBridge 171:3a7713b1edbc 235 /*!
AnnaBridge 171:3a7713b1edbc 236 * @brief eDMA TCD.
AnnaBridge 171:3a7713b1edbc 237 *
AnnaBridge 171:3a7713b1edbc 238 * This structure is same as TCD register which is described in reference manual,
AnnaBridge 171:3a7713b1edbc 239 * and is used to configure scatter/gather feature as a next hardware TCD.
AnnaBridge 171:3a7713b1edbc 240 */
AnnaBridge 171:3a7713b1edbc 241 typedef struct _edma_tcd
AnnaBridge 171:3a7713b1edbc 242 {
AnnaBridge 171:3a7713b1edbc 243 __IO uint32_t SADDR; /*!< SADDR register, used to save source address */
AnnaBridge 171:3a7713b1edbc 244 __IO uint16_t SOFF; /*!< SOFF register, save offset bytes every transfer */
AnnaBridge 171:3a7713b1edbc 245 __IO uint16_t ATTR; /*!< ATTR register, source/destination transfer size and modulo */
AnnaBridge 171:3a7713b1edbc 246 __IO uint32_t NBYTES; /*!< Nbytes register, minor loop length in bytes */
AnnaBridge 171:3a7713b1edbc 247 __IO uint32_t SLAST; /*!< SLAST register */
AnnaBridge 171:3a7713b1edbc 248 __IO uint32_t DADDR; /*!< DADDR register, used for destination address */
AnnaBridge 171:3a7713b1edbc 249 __IO uint16_t DOFF; /*!< DOFF register, used for destination offset */
AnnaBridge 171:3a7713b1edbc 250 __IO uint16_t CITER; /*!< CITER register, current minor loop numbers, for unfinished minor loop.*/
AnnaBridge 171:3a7713b1edbc 251 __IO uint32_t DLAST_SGA; /*!< DLASTSGA register, next stcd address used in scatter-gather mode */
AnnaBridge 171:3a7713b1edbc 252 __IO uint16_t CSR; /*!< CSR register, for TCD control status */
AnnaBridge 171:3a7713b1edbc 253 __IO uint16_t BITER; /*!< BITER register, begin minor loop count. */
AnnaBridge 171:3a7713b1edbc 254 } edma_tcd_t;
AnnaBridge 171:3a7713b1edbc 255
AnnaBridge 171:3a7713b1edbc 256 /*! @brief Callback for eDMA */
AnnaBridge 171:3a7713b1edbc 257 struct _edma_handle;
AnnaBridge 171:3a7713b1edbc 258
AnnaBridge 171:3a7713b1edbc 259 /*! @brief Define Callback function for eDMA. */
AnnaBridge 171:3a7713b1edbc 260 typedef void (*edma_callback)(struct _edma_handle *handle, void *userData, bool transferDone, uint32_t tcds);
AnnaBridge 171:3a7713b1edbc 261
AnnaBridge 171:3a7713b1edbc 262 /*! @brief eDMA transfer handle structure */
AnnaBridge 171:3a7713b1edbc 263 typedef struct _edma_handle
AnnaBridge 171:3a7713b1edbc 264 {
AnnaBridge 171:3a7713b1edbc 265 edma_callback callback; /*!< Callback function for major count exhausted. */
AnnaBridge 171:3a7713b1edbc 266 void *userData; /*!< Callback function parameter. */
AnnaBridge 171:3a7713b1edbc 267 DMA_Type *base; /*!< eDMA peripheral base address. */
AnnaBridge 171:3a7713b1edbc 268 edma_tcd_t *tcdPool; /*!< Pointer to memory stored TCDs. */
AnnaBridge 171:3a7713b1edbc 269 uint8_t channel; /*!< eDMA channel number. */
AnnaBridge 171:3a7713b1edbc 270 volatile int8_t header; /*!< The first TCD index. */
AnnaBridge 171:3a7713b1edbc 271 volatile int8_t tail; /*!< The last TCD index. */
AnnaBridge 171:3a7713b1edbc 272 volatile int8_t tcdUsed; /*!< The number of used TCD slots. */
AnnaBridge 171:3a7713b1edbc 273 volatile int8_t tcdSize; /*!< The total number of TCD slots in the queue. */
AnnaBridge 171:3a7713b1edbc 274 uint8_t flags; /*!< The status of the current channel. */
AnnaBridge 171:3a7713b1edbc 275 } edma_handle_t;
AnnaBridge 171:3a7713b1edbc 276
AnnaBridge 171:3a7713b1edbc 277 /*******************************************************************************
AnnaBridge 171:3a7713b1edbc 278 * APIs
AnnaBridge 171:3a7713b1edbc 279 ******************************************************************************/
AnnaBridge 171:3a7713b1edbc 280 #if defined(__cplusplus)
AnnaBridge 171:3a7713b1edbc 281 extern "C" {
AnnaBridge 171:3a7713b1edbc 282 #endif /* __cplusplus */
AnnaBridge 171:3a7713b1edbc 283
AnnaBridge 171:3a7713b1edbc 284 /*!
AnnaBridge 171:3a7713b1edbc 285 * @name eDMA initialization and De-initialization
AnnaBridge 171:3a7713b1edbc 286 * @{
AnnaBridge 171:3a7713b1edbc 287 */
AnnaBridge 171:3a7713b1edbc 288
AnnaBridge 171:3a7713b1edbc 289 /*!
AnnaBridge 171:3a7713b1edbc 290 * @brief Initializes eDMA peripheral.
AnnaBridge 171:3a7713b1edbc 291 *
AnnaBridge 171:3a7713b1edbc 292 * This function ungates the eDMA clock and configure eDMA peripheral according
AnnaBridge 171:3a7713b1edbc 293 * to the configuration structure.
AnnaBridge 171:3a7713b1edbc 294 *
AnnaBridge 171:3a7713b1edbc 295 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 296 * @param config Pointer to configuration structure, see "edma_config_t".
AnnaBridge 171:3a7713b1edbc 297 * @note This function enable the minor loop map feature.
AnnaBridge 171:3a7713b1edbc 298 */
AnnaBridge 171:3a7713b1edbc 299 void EDMA_Init(DMA_Type *base, const edma_config_t *config);
AnnaBridge 171:3a7713b1edbc 300
AnnaBridge 171:3a7713b1edbc 301 /*!
AnnaBridge 171:3a7713b1edbc 302 * @brief Deinitializes eDMA peripheral.
AnnaBridge 171:3a7713b1edbc 303 *
AnnaBridge 171:3a7713b1edbc 304 * This function gates the eDMA clock.
AnnaBridge 171:3a7713b1edbc 305 *
AnnaBridge 171:3a7713b1edbc 306 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 307 */
AnnaBridge 171:3a7713b1edbc 308 void EDMA_Deinit(DMA_Type *base);
AnnaBridge 171:3a7713b1edbc 309
AnnaBridge 171:3a7713b1edbc 310 /*!
AnnaBridge 171:3a7713b1edbc 311 * @brief Gets the eDMA default configuration structure.
AnnaBridge 171:3a7713b1edbc 312 *
AnnaBridge 171:3a7713b1edbc 313 * This function sets the configuration structure to a default value.
AnnaBridge 171:3a7713b1edbc 314 * The default configuration is set to the following value:
AnnaBridge 171:3a7713b1edbc 315 * @code
AnnaBridge 171:3a7713b1edbc 316 * config.enableContinuousLinkMode = false;
AnnaBridge 171:3a7713b1edbc 317 * config.enableHaltOnError = true;
AnnaBridge 171:3a7713b1edbc 318 * config.enableRoundRobinArbitration = false;
AnnaBridge 171:3a7713b1edbc 319 * config.enableDebugMode = false;
AnnaBridge 171:3a7713b1edbc 320 * @endcode
AnnaBridge 171:3a7713b1edbc 321 *
AnnaBridge 171:3a7713b1edbc 322 * @param config Pointer to eDMA configuration structure.
AnnaBridge 171:3a7713b1edbc 323 */
AnnaBridge 171:3a7713b1edbc 324 void EDMA_GetDefaultConfig(edma_config_t *config);
AnnaBridge 171:3a7713b1edbc 325
AnnaBridge 171:3a7713b1edbc 326 /* @} */
AnnaBridge 171:3a7713b1edbc 327 /*!
AnnaBridge 171:3a7713b1edbc 328 * @name eDMA Channel Operation
AnnaBridge 171:3a7713b1edbc 329 * @{
AnnaBridge 171:3a7713b1edbc 330 */
AnnaBridge 171:3a7713b1edbc 331
AnnaBridge 171:3a7713b1edbc 332 /*!
AnnaBridge 171:3a7713b1edbc 333 * @brief Sets all TCD registers to a default value.
AnnaBridge 171:3a7713b1edbc 334 *
AnnaBridge 171:3a7713b1edbc 335 * This function sets TCD registers for this channel to default value.
AnnaBridge 171:3a7713b1edbc 336 *
AnnaBridge 171:3a7713b1edbc 337 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 338 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 339 * @note This function must not be called while the channel transfer is on-going,
AnnaBridge 171:3a7713b1edbc 340 * or it will case unpredicated results.
AnnaBridge 171:3a7713b1edbc 341 * @note This function will enable auto stop request feature.
AnnaBridge 171:3a7713b1edbc 342 */
AnnaBridge 171:3a7713b1edbc 343 void EDMA_ResetChannel(DMA_Type *base, uint32_t channel);
AnnaBridge 171:3a7713b1edbc 344
AnnaBridge 171:3a7713b1edbc 345 /*!
AnnaBridge 171:3a7713b1edbc 346 * @brief Configures the eDMA transfer attribute.
AnnaBridge 171:3a7713b1edbc 347 *
AnnaBridge 171:3a7713b1edbc 348 * This function configure the transfer attribute, including source address, destination address,
AnnaBridge 171:3a7713b1edbc 349 * transfer size, address offset, and so on. It also configures the scatter gather feature if the
AnnaBridge 171:3a7713b1edbc 350 * user supplies the TCD address.
AnnaBridge 171:3a7713b1edbc 351 * Example:
AnnaBridge 171:3a7713b1edbc 352 * @code
AnnaBridge 171:3a7713b1edbc 353 * edma_transfer_t config;
AnnaBridge 171:3a7713b1edbc 354 * edma_tcd_t tcd;
AnnaBridge 171:3a7713b1edbc 355 * config.srcAddr = ..;
AnnaBridge 171:3a7713b1edbc 356 * config.destAddr = ..;
AnnaBridge 171:3a7713b1edbc 357 * ...
AnnaBridge 171:3a7713b1edbc 358 * EDMA_SetTransferConfig(DMA0, channel, &config, &stcd);
AnnaBridge 171:3a7713b1edbc 359 * @endcode
AnnaBridge 171:3a7713b1edbc 360 *
AnnaBridge 171:3a7713b1edbc 361 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 362 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 363 * @param config Pointer to eDMA transfer configuration structure.
AnnaBridge 171:3a7713b1edbc 364 * @param nextTcd Point to TCD structure. It can be NULL if user
AnnaBridge 171:3a7713b1edbc 365 * do not want to enable scatter/gather feature.
AnnaBridge 171:3a7713b1edbc 366 * @note If nextTcd is not NULL, it means scatter gather feature will be enabled.
AnnaBridge 171:3a7713b1edbc 367 * And DREQ bit will be cleared in the previous transfer configuration which
AnnaBridge 171:3a7713b1edbc 368 * will be set in eDMA_ResetChannel.
AnnaBridge 171:3a7713b1edbc 369 */
AnnaBridge 171:3a7713b1edbc 370 void EDMA_SetTransferConfig(DMA_Type *base,
AnnaBridge 171:3a7713b1edbc 371 uint32_t channel,
AnnaBridge 171:3a7713b1edbc 372 const edma_transfer_config_t *config,
AnnaBridge 171:3a7713b1edbc 373 edma_tcd_t *nextTcd);
AnnaBridge 171:3a7713b1edbc 374
AnnaBridge 171:3a7713b1edbc 375 /*!
AnnaBridge 171:3a7713b1edbc 376 * @brief Configures the eDMA minor offset feature.
AnnaBridge 171:3a7713b1edbc 377 *
AnnaBridge 171:3a7713b1edbc 378 * Minor offset means signed-extended value added to source address or destination
AnnaBridge 171:3a7713b1edbc 379 * address after each minor loop.
AnnaBridge 171:3a7713b1edbc 380 *
AnnaBridge 171:3a7713b1edbc 381 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 382 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 383 * @param config Pointer to Minor offset configuration structure.
AnnaBridge 171:3a7713b1edbc 384 */
AnnaBridge 171:3a7713b1edbc 385 void EDMA_SetMinorOffsetConfig(DMA_Type *base, uint32_t channel, const edma_minor_offset_config_t *config);
AnnaBridge 171:3a7713b1edbc 386
AnnaBridge 171:3a7713b1edbc 387 /*!
AnnaBridge 171:3a7713b1edbc 388 * @brief Configures the eDMA channel preemption feature.
AnnaBridge 171:3a7713b1edbc 389 *
AnnaBridge 171:3a7713b1edbc 390 * This function configures the channel preemption attribute and the priority of the channel.
AnnaBridge 171:3a7713b1edbc 391 *
AnnaBridge 171:3a7713b1edbc 392 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 393 * @param channel eDMA channel number
AnnaBridge 171:3a7713b1edbc 394 * @param config Pointer to channel preemption configuration structure.
AnnaBridge 171:3a7713b1edbc 395 */
AnnaBridge 171:3a7713b1edbc 396 static inline void EDMA_SetChannelPreemptionConfig(DMA_Type *base,
AnnaBridge 171:3a7713b1edbc 397 uint32_t channel,
AnnaBridge 171:3a7713b1edbc 398 const edma_channel_Preemption_config_t *config)
AnnaBridge 171:3a7713b1edbc 399 {
AnnaBridge 171:3a7713b1edbc 400 assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL);
AnnaBridge 171:3a7713b1edbc 401 assert(config != NULL);
AnnaBridge 171:3a7713b1edbc 402
AnnaBridge 171:3a7713b1edbc 403 DMA_DCHPRIn(base, channel) =
AnnaBridge 171:3a7713b1edbc 404 (DMA_DCHPRI0_DPA(!config->enablePreemptAbility) | DMA_DCHPRI0_ECP(config->enableChannelPreemption) |
AnnaBridge 171:3a7713b1edbc 405 DMA_DCHPRI0_CHPRI(config->channelPriority));
AnnaBridge 171:3a7713b1edbc 406 }
AnnaBridge 171:3a7713b1edbc 407
AnnaBridge 171:3a7713b1edbc 408 /*!
AnnaBridge 171:3a7713b1edbc 409 * @brief Sets the channel link for the eDMA transfer.
AnnaBridge 171:3a7713b1edbc 410 *
AnnaBridge 171:3a7713b1edbc 411 * This function configures minor link or major link mode. The minor link means that the channel link is
AnnaBridge 171:3a7713b1edbc 412 * triggered every time CITER decreases by 1. The major link means that the channel link is triggered when the CITER is exhausted.
AnnaBridge 171:3a7713b1edbc 413 *
AnnaBridge 171:3a7713b1edbc 414 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 415 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 416 * @param type Channel link type, it can be one of:
AnnaBridge 171:3a7713b1edbc 417 * @arg kEDMA_LinkNone
AnnaBridge 171:3a7713b1edbc 418 * @arg kEDMA_MinorLink
AnnaBridge 171:3a7713b1edbc 419 * @arg kEDMA_MajorLink
AnnaBridge 171:3a7713b1edbc 420 * @param linkedChannel The linked channel number.
AnnaBridge 171:3a7713b1edbc 421 * @note User should ensure that DONE flag is cleared before call this interface, or the configuration will be invalid.
AnnaBridge 171:3a7713b1edbc 422 */
AnnaBridge 171:3a7713b1edbc 423 void EDMA_SetChannelLink(DMA_Type *base, uint32_t channel, edma_channel_link_type_t type, uint32_t linkedChannel);
AnnaBridge 171:3a7713b1edbc 424
AnnaBridge 171:3a7713b1edbc 425 /*!
AnnaBridge 171:3a7713b1edbc 426 * @brief Sets the bandwidth for the eDMA transfer.
AnnaBridge 171:3a7713b1edbc 427 *
AnnaBridge 171:3a7713b1edbc 428 * In general, because the eDMA processes the minor loop, it continuously generates read/write sequences
AnnaBridge 171:3a7713b1edbc 429 * until the minor count is exhausted. The bandwidth forces the eDMA to stall after the completion of
AnnaBridge 171:3a7713b1edbc 430 * each read/write access to control the bus request bandwidth seen by the crossbar switch.
AnnaBridge 171:3a7713b1edbc 431 *
AnnaBridge 171:3a7713b1edbc 432 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 433 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 434 * @param bandWidth Bandwidth setting, it can be one of:
AnnaBridge 171:3a7713b1edbc 435 * @arg kEDMABandwidthStallNone
AnnaBridge 171:3a7713b1edbc 436 * @arg kEDMABandwidthStall4Cycle
AnnaBridge 171:3a7713b1edbc 437 * @arg kEDMABandwidthStall8Cycle
AnnaBridge 171:3a7713b1edbc 438 */
AnnaBridge 171:3a7713b1edbc 439 void EDMA_SetBandWidth(DMA_Type *base, uint32_t channel, edma_bandwidth_t bandWidth);
AnnaBridge 171:3a7713b1edbc 440
AnnaBridge 171:3a7713b1edbc 441 /*!
AnnaBridge 171:3a7713b1edbc 442 * @brief Sets the source modulo and destination modulo for eDMA transfer.
AnnaBridge 171:3a7713b1edbc 443 *
AnnaBridge 171:3a7713b1edbc 444 * This function defines a specific address range specified to be the value after (SADDR + SOFF)/(DADDR + DOFF)
AnnaBridge 171:3a7713b1edbc 445 * calculation is performed or the original register value. It provides the ability to implement a circular data
AnnaBridge 171:3a7713b1edbc 446 * queue easily.
AnnaBridge 171:3a7713b1edbc 447 *
AnnaBridge 171:3a7713b1edbc 448 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 449 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 450 * @param srcModulo Source modulo value.
AnnaBridge 171:3a7713b1edbc 451 * @param destModulo Destination modulo value.
AnnaBridge 171:3a7713b1edbc 452 */
AnnaBridge 171:3a7713b1edbc 453 void EDMA_SetModulo(DMA_Type *base, uint32_t channel, edma_modulo_t srcModulo, edma_modulo_t destModulo);
AnnaBridge 171:3a7713b1edbc 454
AnnaBridge 171:3a7713b1edbc 455 #if defined(FSL_FEATURE_EDMA_ASYNCHRO_REQUEST_CHANNEL_COUNT) && FSL_FEATURE_EDMA_ASYNCHRO_REQUEST_CHANNEL_COUNT
AnnaBridge 171:3a7713b1edbc 456 /*!
AnnaBridge 171:3a7713b1edbc 457 * @brief Enables an async request for the eDMA transfer.
AnnaBridge 171:3a7713b1edbc 458 *
AnnaBridge 171:3a7713b1edbc 459 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 460 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 461 * @param enable The command for enable(ture) or disable(false).
AnnaBridge 171:3a7713b1edbc 462 */
AnnaBridge 171:3a7713b1edbc 463 static inline void EDMA_EnableAsyncRequest(DMA_Type *base, uint32_t channel, bool enable)
AnnaBridge 171:3a7713b1edbc 464 {
AnnaBridge 171:3a7713b1edbc 465 assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL);
AnnaBridge 171:3a7713b1edbc 466
AnnaBridge 171:3a7713b1edbc 467 base->EARS = (base->EARS & (~(1U << channel))) | ((uint32_t)enable << channel);
AnnaBridge 171:3a7713b1edbc 468 }
AnnaBridge 171:3a7713b1edbc 469 #endif /* FSL_FEATURE_EDMA_ASYNCHRO_REQUEST_CHANNEL_COUNT */
AnnaBridge 171:3a7713b1edbc 470
AnnaBridge 171:3a7713b1edbc 471 /*!
AnnaBridge 171:3a7713b1edbc 472 * @brief Enables an auto stop request for the eDMA transfer.
AnnaBridge 171:3a7713b1edbc 473 *
AnnaBridge 171:3a7713b1edbc 474 * If enabling the auto stop request, the eDMA hardware automatically disables the hardware channel request.
AnnaBridge 171:3a7713b1edbc 475 *
AnnaBridge 171:3a7713b1edbc 476 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 477 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 478 * @param enable The command for enable (true) or disable (false).
AnnaBridge 171:3a7713b1edbc 479 */
AnnaBridge 171:3a7713b1edbc 480 static inline void EDMA_EnableAutoStopRequest(DMA_Type *base, uint32_t channel, bool enable)
AnnaBridge 171:3a7713b1edbc 481 {
AnnaBridge 171:3a7713b1edbc 482 assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL);
AnnaBridge 171:3a7713b1edbc 483
AnnaBridge 171:3a7713b1edbc 484 base->TCD[channel].CSR = (base->TCD[channel].CSR & (~DMA_CSR_DREQ_MASK)) | DMA_CSR_DREQ(enable);
AnnaBridge 171:3a7713b1edbc 485 }
AnnaBridge 171:3a7713b1edbc 486
AnnaBridge 171:3a7713b1edbc 487 /*!
AnnaBridge 171:3a7713b1edbc 488 * @brief Enables the interrupt source for the eDMA transfer.
AnnaBridge 171:3a7713b1edbc 489 *
AnnaBridge 171:3a7713b1edbc 490 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 491 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 492 * @param mask The mask of interrupt source to be set. User need to use
AnnaBridge 171:3a7713b1edbc 493 * the defined edma_interrupt_enable_t type.
AnnaBridge 171:3a7713b1edbc 494 */
AnnaBridge 171:3a7713b1edbc 495 void EDMA_EnableChannelInterrupts(DMA_Type *base, uint32_t channel, uint32_t mask);
AnnaBridge 171:3a7713b1edbc 496
AnnaBridge 171:3a7713b1edbc 497 /*!
AnnaBridge 171:3a7713b1edbc 498 * @brief Disables the interrupt source for the eDMA transfer.
AnnaBridge 171:3a7713b1edbc 499 *
AnnaBridge 171:3a7713b1edbc 500 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 501 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 502 * @param mask The mask of interrupt source to be set. Use
AnnaBridge 171:3a7713b1edbc 503 * the defined edma_interrupt_enable_t type.
AnnaBridge 171:3a7713b1edbc 504 */
AnnaBridge 171:3a7713b1edbc 505 void EDMA_DisableChannelInterrupts(DMA_Type *base, uint32_t channel, uint32_t mask);
AnnaBridge 171:3a7713b1edbc 506
AnnaBridge 171:3a7713b1edbc 507 /* @} */
AnnaBridge 171:3a7713b1edbc 508 /*!
AnnaBridge 171:3a7713b1edbc 509 * @name eDMA TCD Operation
AnnaBridge 171:3a7713b1edbc 510 * @{
AnnaBridge 171:3a7713b1edbc 511 */
AnnaBridge 171:3a7713b1edbc 512
AnnaBridge 171:3a7713b1edbc 513 /*!
AnnaBridge 171:3a7713b1edbc 514 * @brief Sets all fields to default values for the TCD structure.
AnnaBridge 171:3a7713b1edbc 515 *
AnnaBridge 171:3a7713b1edbc 516 * This function sets all fields for this TCD structure to default value.
AnnaBridge 171:3a7713b1edbc 517 *
AnnaBridge 171:3a7713b1edbc 518 * @param tcd Pointer to the TCD structure.
AnnaBridge 171:3a7713b1edbc 519 * @note This function will enable auto stop request feature.
AnnaBridge 171:3a7713b1edbc 520 */
AnnaBridge 171:3a7713b1edbc 521 void EDMA_TcdReset(edma_tcd_t *tcd);
AnnaBridge 171:3a7713b1edbc 522
AnnaBridge 171:3a7713b1edbc 523 /*!
AnnaBridge 171:3a7713b1edbc 524 * @brief Configures the eDMA TCD transfer attribute.
AnnaBridge 171:3a7713b1edbc 525 *
AnnaBridge 171:3a7713b1edbc 526 * TCD is a transfer control descriptor. The content of the TCD is the same as hardware TCD registers.
AnnaBridge 171:3a7713b1edbc 527 * STCD is used in scatter-gather mode.
AnnaBridge 171:3a7713b1edbc 528 * This function configures the TCD transfer attribute, including source address, destination address,
AnnaBridge 171:3a7713b1edbc 529 * transfer size, address offset, and so on. It also configures the scatter gather feature if the
AnnaBridge 171:3a7713b1edbc 530 * user supplies the next TCD address.
AnnaBridge 171:3a7713b1edbc 531 * Example:
AnnaBridge 171:3a7713b1edbc 532 * @code
AnnaBridge 171:3a7713b1edbc 533 * edma_transfer_t config = {
AnnaBridge 171:3a7713b1edbc 534 * ...
AnnaBridge 171:3a7713b1edbc 535 * }
AnnaBridge 171:3a7713b1edbc 536 * edma_tcd_t tcd __aligned(32);
AnnaBridge 171:3a7713b1edbc 537 * edma_tcd_t nextTcd __aligned(32);
AnnaBridge 171:3a7713b1edbc 538 * EDMA_TcdSetTransferConfig(&tcd, &config, &nextTcd);
AnnaBridge 171:3a7713b1edbc 539 * @endcode
AnnaBridge 171:3a7713b1edbc 540 *
AnnaBridge 171:3a7713b1edbc 541 * @param tcd Pointer to the TCD structure.
AnnaBridge 171:3a7713b1edbc 542 * @param config Pointer to eDMA transfer configuration structure.
AnnaBridge 171:3a7713b1edbc 543 * @param nextTcd Pointer to the next TCD structure. It can be NULL if user
AnnaBridge 171:3a7713b1edbc 544 * do not want to enable scatter/gather feature.
AnnaBridge 171:3a7713b1edbc 545 * @note TCD address should be 32 bytes aligned, or it will cause eDMA error.
AnnaBridge 171:3a7713b1edbc 546 * @note If nextTcd is not NULL, it means scatter gather feature will be enabled.
AnnaBridge 171:3a7713b1edbc 547 * And DREQ bit will be cleared in the previous transfer configuration which
AnnaBridge 171:3a7713b1edbc 548 * will be set in EDMA_TcdReset.
AnnaBridge 171:3a7713b1edbc 549 */
AnnaBridge 171:3a7713b1edbc 550 void EDMA_TcdSetTransferConfig(edma_tcd_t *tcd, const edma_transfer_config_t *config, edma_tcd_t *nextTcd);
AnnaBridge 171:3a7713b1edbc 551
AnnaBridge 171:3a7713b1edbc 552 /*!
AnnaBridge 171:3a7713b1edbc 553 * @brief Configures the eDMA TCD minor offset feature.
AnnaBridge 171:3a7713b1edbc 554 *
AnnaBridge 171:3a7713b1edbc 555 * Minor offset is a signed-extended value added to the source address or destination
AnnaBridge 171:3a7713b1edbc 556 * address after each minor loop.
AnnaBridge 171:3a7713b1edbc 557 *
AnnaBridge 171:3a7713b1edbc 558 * @param tcd Point to the TCD structure.
AnnaBridge 171:3a7713b1edbc 559 * @param config Pointer to Minor offset configuration structure.
AnnaBridge 171:3a7713b1edbc 560 */
AnnaBridge 171:3a7713b1edbc 561 void EDMA_TcdSetMinorOffsetConfig(edma_tcd_t *tcd, const edma_minor_offset_config_t *config);
AnnaBridge 171:3a7713b1edbc 562
AnnaBridge 171:3a7713b1edbc 563 /*!
AnnaBridge 171:3a7713b1edbc 564 * @brief Sets the channel link for eDMA TCD.
AnnaBridge 171:3a7713b1edbc 565 *
AnnaBridge 171:3a7713b1edbc 566 * This function configures either a minor link or a major link. The minor link means the channel link is
AnnaBridge 171:3a7713b1edbc 567 * triggered every time CITER decreases by 1. The major link means that the channel link is triggered when the CITER is exhausted.
AnnaBridge 171:3a7713b1edbc 568 *
AnnaBridge 171:3a7713b1edbc 569 * @note User should ensure that DONE flag is cleared before call this interface, or the configuration will be invalid.
AnnaBridge 171:3a7713b1edbc 570 * @param tcd Point to the TCD structure.
AnnaBridge 171:3a7713b1edbc 571 * @param type Channel link type, it can be one of:
AnnaBridge 171:3a7713b1edbc 572 * @arg kEDMA_LinkNone
AnnaBridge 171:3a7713b1edbc 573 * @arg kEDMA_MinorLink
AnnaBridge 171:3a7713b1edbc 574 * @arg kEDMA_MajorLink
AnnaBridge 171:3a7713b1edbc 575 * @param linkedChannel The linked channel number.
AnnaBridge 171:3a7713b1edbc 576 */
AnnaBridge 171:3a7713b1edbc 577 void EDMA_TcdSetChannelLink(edma_tcd_t *tcd, edma_channel_link_type_t type, uint32_t linkedChannel);
AnnaBridge 171:3a7713b1edbc 578
AnnaBridge 171:3a7713b1edbc 579 /*!
AnnaBridge 171:3a7713b1edbc 580 * @brief Sets the bandwidth for the eDMA TCD.
AnnaBridge 171:3a7713b1edbc 581 *
AnnaBridge 171:3a7713b1edbc 582 * In general, because the eDMA processes the minor loop, it continuously generates read/write sequences
AnnaBridge 171:3a7713b1edbc 583 * until the minor count is exhausted. Bandwidth forces the eDMA to stall after the completion of
AnnaBridge 171:3a7713b1edbc 584 * each read/write access to control the bus request bandwidth seen by the crossbar switch.
AnnaBridge 171:3a7713b1edbc 585 * @param tcd Point to the TCD structure.
AnnaBridge 171:3a7713b1edbc 586 * @param bandWidth Bandwidth setting, it can be one of:
AnnaBridge 171:3a7713b1edbc 587 * @arg kEDMABandwidthStallNone
AnnaBridge 171:3a7713b1edbc 588 * @arg kEDMABandwidthStall4Cycle
AnnaBridge 171:3a7713b1edbc 589 * @arg kEDMABandwidthStall8Cycle
AnnaBridge 171:3a7713b1edbc 590 */
AnnaBridge 171:3a7713b1edbc 591 static inline void EDMA_TcdSetBandWidth(edma_tcd_t *tcd, edma_bandwidth_t bandWidth)
AnnaBridge 171:3a7713b1edbc 592 {
AnnaBridge 171:3a7713b1edbc 593 assert(tcd != NULL);
AnnaBridge 171:3a7713b1edbc 594 assert(((uint32_t)tcd & 0x1FU) == 0);
AnnaBridge 171:3a7713b1edbc 595
AnnaBridge 171:3a7713b1edbc 596 tcd->CSR = (tcd->CSR & (~DMA_CSR_BWC_MASK)) | DMA_CSR_BWC(bandWidth);
AnnaBridge 171:3a7713b1edbc 597 }
AnnaBridge 171:3a7713b1edbc 598
AnnaBridge 171:3a7713b1edbc 599 /*!
AnnaBridge 171:3a7713b1edbc 600 * @brief Sets the source modulo and destination modulo for eDMA TCD.
AnnaBridge 171:3a7713b1edbc 601 *
AnnaBridge 171:3a7713b1edbc 602 * This function defines a specific address range specified to be the value after (SADDR + SOFF)/(DADDR + DOFF)
AnnaBridge 171:3a7713b1edbc 603 * calculation is performed or the original register value. It provides the ability to implement a circular data
AnnaBridge 171:3a7713b1edbc 604 * queue easily.
AnnaBridge 171:3a7713b1edbc 605 *
AnnaBridge 171:3a7713b1edbc 606 * @param tcd Point to the TCD structure.
AnnaBridge 171:3a7713b1edbc 607 * @param srcModulo Source modulo value.
AnnaBridge 171:3a7713b1edbc 608 * @param destModulo Destination modulo value.
AnnaBridge 171:3a7713b1edbc 609 */
AnnaBridge 171:3a7713b1edbc 610 void EDMA_TcdSetModulo(edma_tcd_t *tcd, edma_modulo_t srcModulo, edma_modulo_t destModulo);
AnnaBridge 171:3a7713b1edbc 611
AnnaBridge 171:3a7713b1edbc 612 /*!
AnnaBridge 171:3a7713b1edbc 613 * @brief Sets the auto stop request for the eDMA TCD.
AnnaBridge 171:3a7713b1edbc 614 *
AnnaBridge 171:3a7713b1edbc 615 * If enabling the auto stop request, the eDMA hardware automatically disables the hardware channel request.
AnnaBridge 171:3a7713b1edbc 616 *
AnnaBridge 171:3a7713b1edbc 617 * @param tcd Point to the TCD structure.
AnnaBridge 171:3a7713b1edbc 618 * @param enable The command for enable(ture) or disable(false).
AnnaBridge 171:3a7713b1edbc 619 */
AnnaBridge 171:3a7713b1edbc 620 static inline void EDMA_TcdEnableAutoStopRequest(edma_tcd_t *tcd, bool enable)
AnnaBridge 171:3a7713b1edbc 621 {
AnnaBridge 171:3a7713b1edbc 622 assert(tcd != NULL);
AnnaBridge 171:3a7713b1edbc 623 assert(((uint32_t)tcd & 0x1FU) == 0);
AnnaBridge 171:3a7713b1edbc 624
AnnaBridge 171:3a7713b1edbc 625 tcd->CSR = (tcd->CSR & (~DMA_CSR_DREQ_MASK)) | DMA_CSR_DREQ(enable);
AnnaBridge 171:3a7713b1edbc 626 }
AnnaBridge 171:3a7713b1edbc 627
AnnaBridge 171:3a7713b1edbc 628 /*!
AnnaBridge 171:3a7713b1edbc 629 * @brief Enables the interrupt source for the eDMA TCD.
AnnaBridge 171:3a7713b1edbc 630 *
AnnaBridge 171:3a7713b1edbc 631 * @param tcd Point to the TCD structure.
AnnaBridge 171:3a7713b1edbc 632 * @param mask The mask of interrupt source to be set. User need to use
AnnaBridge 171:3a7713b1edbc 633 * the defined edma_interrupt_enable_t type.
AnnaBridge 171:3a7713b1edbc 634 */
AnnaBridge 171:3a7713b1edbc 635 void EDMA_TcdEnableInterrupts(edma_tcd_t *tcd, uint32_t mask);
AnnaBridge 171:3a7713b1edbc 636
AnnaBridge 171:3a7713b1edbc 637 /*!
AnnaBridge 171:3a7713b1edbc 638 * @brief Disables the interrupt source for the eDMA TCD.
AnnaBridge 171:3a7713b1edbc 639 *
AnnaBridge 171:3a7713b1edbc 640 * @param tcd Point to the TCD structure.
AnnaBridge 171:3a7713b1edbc 641 * @param mask The mask of interrupt source to be set. User need to use
AnnaBridge 171:3a7713b1edbc 642 * the defined edma_interrupt_enable_t type.
AnnaBridge 171:3a7713b1edbc 643 */
AnnaBridge 171:3a7713b1edbc 644 void EDMA_TcdDisableInterrupts(edma_tcd_t *tcd, uint32_t mask);
AnnaBridge 171:3a7713b1edbc 645
AnnaBridge 171:3a7713b1edbc 646 /*! @} */
AnnaBridge 171:3a7713b1edbc 647 /*!
AnnaBridge 171:3a7713b1edbc 648 * @name eDMA Channel Transfer Operation
AnnaBridge 171:3a7713b1edbc 649 * @{
AnnaBridge 171:3a7713b1edbc 650 */
AnnaBridge 171:3a7713b1edbc 651
AnnaBridge 171:3a7713b1edbc 652 /*!
AnnaBridge 171:3a7713b1edbc 653 * @brief Enables the eDMA hardware channel request.
AnnaBridge 171:3a7713b1edbc 654 *
AnnaBridge 171:3a7713b1edbc 655 * This function enables the hardware channel request.
AnnaBridge 171:3a7713b1edbc 656 *
AnnaBridge 171:3a7713b1edbc 657 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 658 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 659 */
AnnaBridge 171:3a7713b1edbc 660 static inline void EDMA_EnableChannelRequest(DMA_Type *base, uint32_t channel)
AnnaBridge 171:3a7713b1edbc 661 {
AnnaBridge 171:3a7713b1edbc 662 assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL);
AnnaBridge 171:3a7713b1edbc 663
AnnaBridge 171:3a7713b1edbc 664 base->SERQ = DMA_SERQ_SERQ(channel);
AnnaBridge 171:3a7713b1edbc 665 }
AnnaBridge 171:3a7713b1edbc 666
AnnaBridge 171:3a7713b1edbc 667 /*!
AnnaBridge 171:3a7713b1edbc 668 * @brief Disables the eDMA hardware channel request.
AnnaBridge 171:3a7713b1edbc 669 *
AnnaBridge 171:3a7713b1edbc 670 * This function disables the hardware channel request.
AnnaBridge 171:3a7713b1edbc 671 *
AnnaBridge 171:3a7713b1edbc 672 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 673 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 674 */
AnnaBridge 171:3a7713b1edbc 675 static inline void EDMA_DisableChannelRequest(DMA_Type *base, uint32_t channel)
AnnaBridge 171:3a7713b1edbc 676 {
AnnaBridge 171:3a7713b1edbc 677 assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL);
AnnaBridge 171:3a7713b1edbc 678
AnnaBridge 171:3a7713b1edbc 679 base->CERQ = DMA_CERQ_CERQ(channel);
AnnaBridge 171:3a7713b1edbc 680 }
AnnaBridge 171:3a7713b1edbc 681
AnnaBridge 171:3a7713b1edbc 682 /*!
AnnaBridge 171:3a7713b1edbc 683 * @brief Starts the eDMA transfer by software trigger.
AnnaBridge 171:3a7713b1edbc 684 *
AnnaBridge 171:3a7713b1edbc 685 * This function starts a minor loop transfer.
AnnaBridge 171:3a7713b1edbc 686 *
AnnaBridge 171:3a7713b1edbc 687 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 688 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 689 */
AnnaBridge 171:3a7713b1edbc 690 static inline void EDMA_TriggerChannelStart(DMA_Type *base, uint32_t channel)
AnnaBridge 171:3a7713b1edbc 691 {
AnnaBridge 171:3a7713b1edbc 692 assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL);
AnnaBridge 171:3a7713b1edbc 693
AnnaBridge 171:3a7713b1edbc 694 base->SSRT = DMA_SSRT_SSRT(channel);
AnnaBridge 171:3a7713b1edbc 695 }
AnnaBridge 171:3a7713b1edbc 696
AnnaBridge 171:3a7713b1edbc 697 /*! @} */
AnnaBridge 171:3a7713b1edbc 698 /*!
AnnaBridge 171:3a7713b1edbc 699 * @name eDMA Channel Status Operation
AnnaBridge 171:3a7713b1edbc 700 * @{
AnnaBridge 171:3a7713b1edbc 701 */
AnnaBridge 171:3a7713b1edbc 702
AnnaBridge 171:3a7713b1edbc 703 /*!
AnnaBridge 171:3a7713b1edbc 704 * @brief Gets the Remaining bytes from the eDMA current channel TCD.
AnnaBridge 171:3a7713b1edbc 705 *
AnnaBridge 171:3a7713b1edbc 706 * This function checks the TCD (Task Control Descriptor) status for a specified
AnnaBridge 171:3a7713b1edbc 707 * eDMA channel and returns the the number of bytes that have not finished.
AnnaBridge 171:3a7713b1edbc 708 *
AnnaBridge 171:3a7713b1edbc 709 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 710 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 711 * @return Bytes have not been transferred yet for the current TCD.
AnnaBridge 171:3a7713b1edbc 712 * @note This function can only be used to get unfinished bytes of transfer without
AnnaBridge 171:3a7713b1edbc 713 * the next TCD, or it might be inaccuracy.
AnnaBridge 171:3a7713b1edbc 714 */
AnnaBridge 171:3a7713b1edbc 715 uint32_t EDMA_GetRemainingBytes(DMA_Type *base, uint32_t channel);
AnnaBridge 171:3a7713b1edbc 716
AnnaBridge 171:3a7713b1edbc 717 /*!
AnnaBridge 171:3a7713b1edbc 718 * @brief Gets the eDMA channel error status flags.
AnnaBridge 171:3a7713b1edbc 719 *
AnnaBridge 171:3a7713b1edbc 720 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 721 * @return The mask of error status flags. User need to use the
AnnaBridge 171:3a7713b1edbc 722 * _edma_error_status_flags type to decode the return variables.
AnnaBridge 171:3a7713b1edbc 723 */
AnnaBridge 171:3a7713b1edbc 724 static inline uint32_t EDMA_GetErrorStatusFlags(DMA_Type *base)
AnnaBridge 171:3a7713b1edbc 725 {
AnnaBridge 171:3a7713b1edbc 726 return base->ES;
AnnaBridge 171:3a7713b1edbc 727 }
AnnaBridge 171:3a7713b1edbc 728
AnnaBridge 171:3a7713b1edbc 729 /*!
AnnaBridge 171:3a7713b1edbc 730 * @brief Gets the eDMA channel status flags.
AnnaBridge 171:3a7713b1edbc 731 *
AnnaBridge 171:3a7713b1edbc 732 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 733 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 734 * @return The mask of channel status flags. User need to use the
AnnaBridge 171:3a7713b1edbc 735 * _edma_channel_status_flags type to decode the return variables.
AnnaBridge 171:3a7713b1edbc 736 */
AnnaBridge 171:3a7713b1edbc 737 uint32_t EDMA_GetChannelStatusFlags(DMA_Type *base, uint32_t channel);
AnnaBridge 171:3a7713b1edbc 738
AnnaBridge 171:3a7713b1edbc 739 /*!
AnnaBridge 171:3a7713b1edbc 740 * @brief Clears the eDMA channel status flags.
AnnaBridge 171:3a7713b1edbc 741 *
AnnaBridge 171:3a7713b1edbc 742 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 743 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 744 * @param mask The mask of channel status to be cleared. User need to use
AnnaBridge 171:3a7713b1edbc 745 * the defined _edma_channel_status_flags type.
AnnaBridge 171:3a7713b1edbc 746 */
AnnaBridge 171:3a7713b1edbc 747 void EDMA_ClearChannelStatusFlags(DMA_Type *base, uint32_t channel, uint32_t mask);
AnnaBridge 171:3a7713b1edbc 748
AnnaBridge 171:3a7713b1edbc 749 /*! @} */
AnnaBridge 171:3a7713b1edbc 750 /*!
AnnaBridge 171:3a7713b1edbc 751 * @name eDMA Transactional Operation
AnnaBridge 171:3a7713b1edbc 752 */
AnnaBridge 171:3a7713b1edbc 753
AnnaBridge 171:3a7713b1edbc 754 /*!
AnnaBridge 171:3a7713b1edbc 755 * @brief Creates the eDMA handle.
AnnaBridge 171:3a7713b1edbc 756 *
AnnaBridge 171:3a7713b1edbc 757 * This function is called if using transaction API for eDMA. This function
AnnaBridge 171:3a7713b1edbc 758 * initializes the internal state of eDMA handle.
AnnaBridge 171:3a7713b1edbc 759 *
AnnaBridge 171:3a7713b1edbc 760 * @param handle eDMA handle pointer. The eDMA handle stores callback function and
AnnaBridge 171:3a7713b1edbc 761 * parameters.
AnnaBridge 171:3a7713b1edbc 762 * @param base eDMA peripheral base address.
AnnaBridge 171:3a7713b1edbc 763 * @param channel eDMA channel number.
AnnaBridge 171:3a7713b1edbc 764 */
AnnaBridge 171:3a7713b1edbc 765 void EDMA_CreateHandle(edma_handle_t *handle, DMA_Type *base, uint32_t channel);
AnnaBridge 171:3a7713b1edbc 766
AnnaBridge 171:3a7713b1edbc 767 /*!
AnnaBridge 171:3a7713b1edbc 768 * @brief Installs the TCDs memory pool into eDMA handle.
AnnaBridge 171:3a7713b1edbc 769 *
AnnaBridge 171:3a7713b1edbc 770 * This function is called after the EDMA_CreateHandle to use scatter/gather feature.
AnnaBridge 171:3a7713b1edbc 771 *
AnnaBridge 171:3a7713b1edbc 772 * @param handle eDMA handle pointer.
AnnaBridge 171:3a7713b1edbc 773 * @param tcdPool Memory pool to store TCDs. It must be 32 bytes aligned.
AnnaBridge 171:3a7713b1edbc 774 * @param tcdSize The number of TCD slots.
AnnaBridge 171:3a7713b1edbc 775 */
AnnaBridge 171:3a7713b1edbc 776 void EDMA_InstallTCDMemory(edma_handle_t *handle, edma_tcd_t *tcdPool, uint32_t tcdSize);
AnnaBridge 171:3a7713b1edbc 777
AnnaBridge 171:3a7713b1edbc 778 /*!
AnnaBridge 171:3a7713b1edbc 779 * @brief Installs a callback function for the eDMA transfer.
AnnaBridge 171:3a7713b1edbc 780 *
AnnaBridge 171:3a7713b1edbc 781 * This callback is called in eDMA IRQ handler. Use the callback to do something after
AnnaBridge 171:3a7713b1edbc 782 * the current major loop transfer completes.
AnnaBridge 171:3a7713b1edbc 783 *
AnnaBridge 171:3a7713b1edbc 784 * @param handle eDMA handle pointer.
AnnaBridge 171:3a7713b1edbc 785 * @param callback eDMA callback function pointer.
AnnaBridge 171:3a7713b1edbc 786 * @param userData Parameter for callback function.
AnnaBridge 171:3a7713b1edbc 787 */
AnnaBridge 171:3a7713b1edbc 788 void EDMA_SetCallback(edma_handle_t *handle, edma_callback callback, void *userData);
AnnaBridge 171:3a7713b1edbc 789
AnnaBridge 171:3a7713b1edbc 790 /*!
AnnaBridge 171:3a7713b1edbc 791 * @brief Prepares the eDMA transfer structure.
AnnaBridge 171:3a7713b1edbc 792 *
AnnaBridge 171:3a7713b1edbc 793 * This function prepares the transfer configuration structure according to the user input.
AnnaBridge 171:3a7713b1edbc 794 *
AnnaBridge 171:3a7713b1edbc 795 * @param config The user configuration structure of type edma_transfer_t.
AnnaBridge 171:3a7713b1edbc 796 * @param srcAddr eDMA transfer source address.
AnnaBridge 171:3a7713b1edbc 797 * @param srcWidth eDMA transfer source address width(bytes).
AnnaBridge 171:3a7713b1edbc 798 * @param destAddr eDMA transfer destination address.
AnnaBridge 171:3a7713b1edbc 799 * @param destWidth eDMA transfer destination address width(bytes).
AnnaBridge 171:3a7713b1edbc 800 * @param bytesEachRequest eDMA transfer bytes per channel request.
AnnaBridge 171:3a7713b1edbc 801 * @param transferBytes eDMA transfer bytes to be transferred.
AnnaBridge 171:3a7713b1edbc 802 * @param type eDMA transfer type.
AnnaBridge 171:3a7713b1edbc 803 * @note The data address and the data width must be consistent. For example, if the SRC
AnnaBridge 171:3a7713b1edbc 804 * is 4 bytes, so the source address must be 4 bytes aligned, or it shall result in
AnnaBridge 171:3a7713b1edbc 805 * source address error(SAE).
AnnaBridge 171:3a7713b1edbc 806 */
AnnaBridge 171:3a7713b1edbc 807 void EDMA_PrepareTransfer(edma_transfer_config_t *config,
AnnaBridge 171:3a7713b1edbc 808 void *srcAddr,
AnnaBridge 171:3a7713b1edbc 809 uint32_t srcWidth,
AnnaBridge 171:3a7713b1edbc 810 void *destAddr,
AnnaBridge 171:3a7713b1edbc 811 uint32_t destWidth,
AnnaBridge 171:3a7713b1edbc 812 uint32_t bytesEachRequest,
AnnaBridge 171:3a7713b1edbc 813 uint32_t transferBytes,
AnnaBridge 171:3a7713b1edbc 814 edma_transfer_type_t type);
AnnaBridge 171:3a7713b1edbc 815
AnnaBridge 171:3a7713b1edbc 816 /*!
AnnaBridge 171:3a7713b1edbc 817 * @brief Submits the eDMA transfer request.
AnnaBridge 171:3a7713b1edbc 818 *
AnnaBridge 171:3a7713b1edbc 819 * This function submits the eDMA transfer request according to the transfer configuration structure.
AnnaBridge 171:3a7713b1edbc 820 * If the user submits the transfer request repeatedly, this function packs an unprocessed request as
AnnaBridge 171:3a7713b1edbc 821 * a TCD and enables scatter/gather feature to process it in the next time.
AnnaBridge 171:3a7713b1edbc 822 *
AnnaBridge 171:3a7713b1edbc 823 * @param handle eDMA handle pointer.
AnnaBridge 171:3a7713b1edbc 824 * @param config Pointer to eDMA transfer configuration structure.
AnnaBridge 171:3a7713b1edbc 825 * @retval kStatus_EDMA_Success It means submit transfer request succeed.
AnnaBridge 171:3a7713b1edbc 826 * @retval kStatus_EDMA_QueueFull It means TCD queue is full. Submit transfer request is not allowed.
AnnaBridge 171:3a7713b1edbc 827 * @retval kStatus_EDMA_Busy It means the given channel is busy, need to submit request later.
AnnaBridge 171:3a7713b1edbc 828 */
AnnaBridge 171:3a7713b1edbc 829 status_t EDMA_SubmitTransfer(edma_handle_t *handle, const edma_transfer_config_t *config);
AnnaBridge 171:3a7713b1edbc 830
AnnaBridge 171:3a7713b1edbc 831 /*!
AnnaBridge 171:3a7713b1edbc 832 * @brief eDMA start transfer.
AnnaBridge 171:3a7713b1edbc 833 *
AnnaBridge 171:3a7713b1edbc 834 * This function enables the channel request. User can call this function after submitting the transfer request
AnnaBridge 171:3a7713b1edbc 835 * or before submitting the transfer request.
AnnaBridge 171:3a7713b1edbc 836 *
AnnaBridge 171:3a7713b1edbc 837 * @param handle eDMA handle pointer.
AnnaBridge 171:3a7713b1edbc 838 */
AnnaBridge 171:3a7713b1edbc 839 void EDMA_StartTransfer(edma_handle_t *handle);
AnnaBridge 171:3a7713b1edbc 840
AnnaBridge 171:3a7713b1edbc 841 /*!
AnnaBridge 171:3a7713b1edbc 842 * @brief eDMA stop transfer.
AnnaBridge 171:3a7713b1edbc 843 *
AnnaBridge 171:3a7713b1edbc 844 * This function disables the channel request to pause the transfer. User can call EDMA_StartTransfer()
AnnaBridge 171:3a7713b1edbc 845 * again to resume the transfer.
AnnaBridge 171:3a7713b1edbc 846 *
AnnaBridge 171:3a7713b1edbc 847 * @param handle eDMA handle pointer.
AnnaBridge 171:3a7713b1edbc 848 */
AnnaBridge 171:3a7713b1edbc 849 void EDMA_StopTransfer(edma_handle_t *handle);
AnnaBridge 171:3a7713b1edbc 850
AnnaBridge 171:3a7713b1edbc 851 /*!
AnnaBridge 171:3a7713b1edbc 852 * @brief eDMA abort transfer.
AnnaBridge 171:3a7713b1edbc 853 *
AnnaBridge 171:3a7713b1edbc 854 * This function disables the channel request and clear transfer status bits.
AnnaBridge 171:3a7713b1edbc 855 * User can submit another transfer after calling this API.
AnnaBridge 171:3a7713b1edbc 856 *
AnnaBridge 171:3a7713b1edbc 857 * @param handle DMA handle pointer.
AnnaBridge 171:3a7713b1edbc 858 */
AnnaBridge 171:3a7713b1edbc 859 void EDMA_AbortTransfer(edma_handle_t *handle);
AnnaBridge 171:3a7713b1edbc 860
AnnaBridge 171:3a7713b1edbc 861 /*!
AnnaBridge 171:3a7713b1edbc 862 * @brief eDMA IRQ handler for current major loop transfer complete.
AnnaBridge 171:3a7713b1edbc 863 *
AnnaBridge 171:3a7713b1edbc 864 * This function clears the channel major interrupt flag and call
AnnaBridge 171:3a7713b1edbc 865 * the callback function if it is not NULL.
AnnaBridge 171:3a7713b1edbc 866 *
AnnaBridge 171:3a7713b1edbc 867 * @param handle eDMA handle pointer.
AnnaBridge 171:3a7713b1edbc 868 */
AnnaBridge 171:3a7713b1edbc 869 void EDMA_HandleIRQ(edma_handle_t *handle);
AnnaBridge 171:3a7713b1edbc 870
AnnaBridge 171:3a7713b1edbc 871 /* @} */
AnnaBridge 171:3a7713b1edbc 872
AnnaBridge 171:3a7713b1edbc 873 #if defined(__cplusplus)
AnnaBridge 171:3a7713b1edbc 874 }
AnnaBridge 171:3a7713b1edbc 875 #endif /* __cplusplus */
AnnaBridge 171:3a7713b1edbc 876
AnnaBridge 171:3a7713b1edbc 877 /* @} */
AnnaBridge 171:3a7713b1edbc 878
AnnaBridge 171:3a7713b1edbc 879 #endif /*_FSL_EDMA_H_*/