anyThing Connected Team / mbed-dev

Dependents:   BREAK_SENSOR_LED

Fork of mbed-dev by mbed official

Committer:
Anythingconnected
Date:
Mon Dec 18 10:14:27 2017 +0000
Revision:
180:d79f997829d6
Parent:
154:37f96f9d4de2
Getting byte by byte read to work

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 154:37f96f9d4de2 1 /*
<> 154:37f96f9d4de2 2 * Copyright (c) 2015, Freescale Semiconductor, Inc.
<> 154:37f96f9d4de2 3 * All rights reserved.
<> 154:37f96f9d4de2 4 *
<> 154:37f96f9d4de2 5 * Redistribution and use in source and binary forms, with or without modification,
<> 154:37f96f9d4de2 6 * are permitted provided that the following conditions are met:
<> 154:37f96f9d4de2 7 *
<> 154:37f96f9d4de2 8 * o Redistributions of source code must retain the above copyright notice, this list
<> 154:37f96f9d4de2 9 * of conditions and the following disclaimer.
<> 154:37f96f9d4de2 10 *
<> 154:37f96f9d4de2 11 * o Redistributions in binary form must reproduce the above copyright notice, this
<> 154:37f96f9d4de2 12 * list of conditions and the following disclaimer in the documentation and/or
<> 154:37f96f9d4de2 13 * other materials provided with the distribution.
<> 154:37f96f9d4de2 14 *
<> 154:37f96f9d4de2 15 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
<> 154:37f96f9d4de2 16 * contributors may be used to endorse or promote products derived from this
<> 154:37f96f9d4de2 17 * software without specific prior written permission.
<> 154:37f96f9d4de2 18 *
<> 154:37f96f9d4de2 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
<> 154:37f96f9d4de2 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
<> 154:37f96f9d4de2 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
<> 154:37f96f9d4de2 22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
<> 154:37f96f9d4de2 23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
<> 154:37f96f9d4de2 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
<> 154:37f96f9d4de2 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
<> 154:37f96f9d4de2 26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
<> 154:37f96f9d4de2 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
<> 154:37f96f9d4de2 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<> 154:37f96f9d4de2 29 */
<> 154:37f96f9d4de2 30
<> 154:37f96f9d4de2 31 #include "fsl_flexio_uart_edma.h"
<> 154:37f96f9d4de2 32 #include "fsl_dmamux.h"
<> 154:37f96f9d4de2 33
<> 154:37f96f9d4de2 34 /*******************************************************************************
<> 154:37f96f9d4de2 35 * Definitions
<> 154:37f96f9d4de2 36 ******************************************************************************/
<> 154:37f96f9d4de2 37
<> 154:37f96f9d4de2 38 /*<! Structure definition for uart_edma_private_handle_t. The structure is private. */
<> 154:37f96f9d4de2 39 typedef struct _flexio_uart_edma_private_handle
<> 154:37f96f9d4de2 40 {
<> 154:37f96f9d4de2 41 FLEXIO_UART_Type *base;
<> 154:37f96f9d4de2 42 flexio_uart_edma_handle_t *handle;
<> 154:37f96f9d4de2 43 } flexio_uart_edma_private_handle_t;
<> 154:37f96f9d4de2 44
<> 154:37f96f9d4de2 45 /* UART EDMA transfer handle. */
<> 154:37f96f9d4de2 46 enum _flexio_uart_edma_tansfer_states
<> 154:37f96f9d4de2 47 {
<> 154:37f96f9d4de2 48 kFLEXIO_UART_TxIdle, /* TX idle. */
<> 154:37f96f9d4de2 49 kFLEXIO_UART_TxBusy, /* TX busy. */
<> 154:37f96f9d4de2 50 kFLEXIO_UART_RxIdle, /* RX idle. */
<> 154:37f96f9d4de2 51 kFLEXIO_UART_RxBusy /* RX busy. */
<> 154:37f96f9d4de2 52 };
<> 154:37f96f9d4de2 53
<> 154:37f96f9d4de2 54 /*******************************************************************************
<> 154:37f96f9d4de2 55 * Definitions
<> 154:37f96f9d4de2 56 ******************************************************************************/
<> 154:37f96f9d4de2 57 /*< @brief user configurable flexio uart handle count. */
<> 154:37f96f9d4de2 58 #define FLEXIO_UART_HANDLE_COUNT 2
<> 154:37f96f9d4de2 59
<> 154:37f96f9d4de2 60 /*<! Private handle only used for internally. */
<> 154:37f96f9d4de2 61 static flexio_uart_edma_private_handle_t s_edmaPrivateHandle[FLEXIO_UART_HANDLE_COUNT];
<> 154:37f96f9d4de2 62
<> 154:37f96f9d4de2 63 /*******************************************************************************
<> 154:37f96f9d4de2 64 * Prototypes
<> 154:37f96f9d4de2 65 ******************************************************************************/
<> 154:37f96f9d4de2 66
<> 154:37f96f9d4de2 67 /*!
<> 154:37f96f9d4de2 68 * @brief FLEXIO UART EDMA send finished callback function.
<> 154:37f96f9d4de2 69 *
<> 154:37f96f9d4de2 70 * This function is called when FLEXIO UART EDMA send finished. It disables the UART
<> 154:37f96f9d4de2 71 * TX EDMA request and sends @ref kStatus_FLEXIO_UART_TxIdle to FLEXIO UART callback.
<> 154:37f96f9d4de2 72 *
<> 154:37f96f9d4de2 73 * @param handle The EDMA handle.
<> 154:37f96f9d4de2 74 * @param param Callback function parameter.
<> 154:37f96f9d4de2 75 */
<> 154:37f96f9d4de2 76 static void FLEXIO_UART_TransferSendEDMACallback(edma_handle_t *handle, void *param, bool transferDone, uint32_t tcds);
<> 154:37f96f9d4de2 77
<> 154:37f96f9d4de2 78 /*!
<> 154:37f96f9d4de2 79 * @brief FLEXIO UART EDMA receive finished callback function.
<> 154:37f96f9d4de2 80 *
<> 154:37f96f9d4de2 81 * This function is called when FLEXIO UART EDMA receive finished. It disables the UART
<> 154:37f96f9d4de2 82 * RX EDMA request and sends @ref kStatus_FLEXIO_UART_RxIdle to UART callback.
<> 154:37f96f9d4de2 83 *
<> 154:37f96f9d4de2 84 * @param handle The EDMA handle.
<> 154:37f96f9d4de2 85 * @param param Callback function parameter.
<> 154:37f96f9d4de2 86 */
<> 154:37f96f9d4de2 87 static void FLEXIO_UART_TransferReceiveEDMACallback(edma_handle_t *handle,
<> 154:37f96f9d4de2 88 void *param,
<> 154:37f96f9d4de2 89 bool transferDone,
<> 154:37f96f9d4de2 90 uint32_t tcds);
<> 154:37f96f9d4de2 91
<> 154:37f96f9d4de2 92 /*******************************************************************************
<> 154:37f96f9d4de2 93 * Code
<> 154:37f96f9d4de2 94 ******************************************************************************/
<> 154:37f96f9d4de2 95
<> 154:37f96f9d4de2 96 static void FLEXIO_UART_TransferSendEDMACallback(edma_handle_t *handle, void *param, bool transferDone, uint32_t tcds)
<> 154:37f96f9d4de2 97 {
<> 154:37f96f9d4de2 98 flexio_uart_edma_private_handle_t *uartPrivateHandle = (flexio_uart_edma_private_handle_t *)param;
<> 154:37f96f9d4de2 99
<> 154:37f96f9d4de2 100 assert(uartPrivateHandle->handle);
<> 154:37f96f9d4de2 101
<> 154:37f96f9d4de2 102 /* Avoid the warning for unused variables. */
<> 154:37f96f9d4de2 103 handle = handle;
<> 154:37f96f9d4de2 104 tcds = tcds;
<> 154:37f96f9d4de2 105
<> 154:37f96f9d4de2 106 if (transferDone)
<> 154:37f96f9d4de2 107 {
<> 154:37f96f9d4de2 108 FLEXIO_UART_TransferAbortSendEDMA(uartPrivateHandle->base, uartPrivateHandle->handle);
<> 154:37f96f9d4de2 109
<> 154:37f96f9d4de2 110 if (uartPrivateHandle->handle->callback)
<> 154:37f96f9d4de2 111 {
<> 154:37f96f9d4de2 112 uartPrivateHandle->handle->callback(uartPrivateHandle->base, uartPrivateHandle->handle,
<> 154:37f96f9d4de2 113 kStatus_FLEXIO_UART_TxIdle, uartPrivateHandle->handle->userData);
<> 154:37f96f9d4de2 114 }
<> 154:37f96f9d4de2 115 }
<> 154:37f96f9d4de2 116 }
<> 154:37f96f9d4de2 117
<> 154:37f96f9d4de2 118 static void FLEXIO_UART_TransferReceiveEDMACallback(edma_handle_t *handle,
<> 154:37f96f9d4de2 119 void *param,
<> 154:37f96f9d4de2 120 bool transferDone,
<> 154:37f96f9d4de2 121 uint32_t tcds)
<> 154:37f96f9d4de2 122 {
<> 154:37f96f9d4de2 123 flexio_uart_edma_private_handle_t *uartPrivateHandle = (flexio_uart_edma_private_handle_t *)param;
<> 154:37f96f9d4de2 124
<> 154:37f96f9d4de2 125 assert(uartPrivateHandle->handle);
<> 154:37f96f9d4de2 126
<> 154:37f96f9d4de2 127 /* Avoid the warning for unused variables. */
<> 154:37f96f9d4de2 128 handle = handle;
<> 154:37f96f9d4de2 129 tcds = tcds;
<> 154:37f96f9d4de2 130
<> 154:37f96f9d4de2 131 if (transferDone)
<> 154:37f96f9d4de2 132 {
<> 154:37f96f9d4de2 133 /* Disable transfer. */
<> 154:37f96f9d4de2 134 FLEXIO_UART_TransferAbortReceiveEDMA(uartPrivateHandle->base, uartPrivateHandle->handle);
<> 154:37f96f9d4de2 135
<> 154:37f96f9d4de2 136 if (uartPrivateHandle->handle->callback)
<> 154:37f96f9d4de2 137 {
<> 154:37f96f9d4de2 138 uartPrivateHandle->handle->callback(uartPrivateHandle->base, uartPrivateHandle->handle,
<> 154:37f96f9d4de2 139 kStatus_FLEXIO_UART_RxIdle, uartPrivateHandle->handle->userData);
<> 154:37f96f9d4de2 140 }
<> 154:37f96f9d4de2 141 }
<> 154:37f96f9d4de2 142 }
<> 154:37f96f9d4de2 143
<> 154:37f96f9d4de2 144 status_t FLEXIO_UART_TransferCreateHandleEDMA(FLEXIO_UART_Type *base,
<> 154:37f96f9d4de2 145 flexio_uart_edma_handle_t *handle,
<> 154:37f96f9d4de2 146 flexio_uart_edma_transfer_callback_t callback,
<> 154:37f96f9d4de2 147 void *userData,
<> 154:37f96f9d4de2 148 edma_handle_t *txEdmaHandle,
<> 154:37f96f9d4de2 149 edma_handle_t *rxEdmaHandle)
<> 154:37f96f9d4de2 150 {
<> 154:37f96f9d4de2 151 assert(handle);
<> 154:37f96f9d4de2 152
<> 154:37f96f9d4de2 153 uint8_t index = 0;
<> 154:37f96f9d4de2 154
<> 154:37f96f9d4de2 155 /* Find the an empty handle pointer to store the handle. */
<> 154:37f96f9d4de2 156 for (index = 0; index < FLEXIO_UART_HANDLE_COUNT; index++)
<> 154:37f96f9d4de2 157 {
<> 154:37f96f9d4de2 158 if (s_edmaPrivateHandle[index].base == NULL)
<> 154:37f96f9d4de2 159 {
<> 154:37f96f9d4de2 160 s_edmaPrivateHandle[index].base = base;
<> 154:37f96f9d4de2 161 s_edmaPrivateHandle[index].handle = handle;
<> 154:37f96f9d4de2 162 break;
<> 154:37f96f9d4de2 163 }
<> 154:37f96f9d4de2 164 }
<> 154:37f96f9d4de2 165
<> 154:37f96f9d4de2 166 if (index == FLEXIO_UART_HANDLE_COUNT)
<> 154:37f96f9d4de2 167 {
<> 154:37f96f9d4de2 168 return kStatus_OutOfRange;
<> 154:37f96f9d4de2 169 }
<> 154:37f96f9d4de2 170
<> 154:37f96f9d4de2 171 memset(handle, 0, sizeof(*handle));
<> 154:37f96f9d4de2 172
<> 154:37f96f9d4de2 173 handle->rxState = kFLEXIO_UART_RxIdle;
<> 154:37f96f9d4de2 174 handle->txState = kFLEXIO_UART_TxIdle;
<> 154:37f96f9d4de2 175
<> 154:37f96f9d4de2 176 handle->rxEdmaHandle = rxEdmaHandle;
<> 154:37f96f9d4de2 177 handle->txEdmaHandle = txEdmaHandle;
<> 154:37f96f9d4de2 178
<> 154:37f96f9d4de2 179 handle->callback = callback;
<> 154:37f96f9d4de2 180 handle->userData = userData;
<> 154:37f96f9d4de2 181
<> 154:37f96f9d4de2 182 /* Configure TX. */
<> 154:37f96f9d4de2 183 if (txEdmaHandle)
<> 154:37f96f9d4de2 184 {
<> 154:37f96f9d4de2 185 EDMA_SetCallback(handle->txEdmaHandle, FLEXIO_UART_TransferSendEDMACallback, &s_edmaPrivateHandle);
<> 154:37f96f9d4de2 186 }
<> 154:37f96f9d4de2 187
<> 154:37f96f9d4de2 188 /* Configure RX. */
<> 154:37f96f9d4de2 189 if (rxEdmaHandle)
<> 154:37f96f9d4de2 190 {
<> 154:37f96f9d4de2 191 EDMA_SetCallback(handle->rxEdmaHandle, FLEXIO_UART_TransferReceiveEDMACallback, &s_edmaPrivateHandle);
<> 154:37f96f9d4de2 192 }
<> 154:37f96f9d4de2 193
<> 154:37f96f9d4de2 194 return kStatus_Success;
<> 154:37f96f9d4de2 195 }
<> 154:37f96f9d4de2 196
<> 154:37f96f9d4de2 197 status_t FLEXIO_UART_TransferSendEDMA(FLEXIO_UART_Type *base,
<> 154:37f96f9d4de2 198 flexio_uart_edma_handle_t *handle,
<> 154:37f96f9d4de2 199 flexio_uart_transfer_t *xfer)
<> 154:37f96f9d4de2 200 {
<> 154:37f96f9d4de2 201 assert(handle->txEdmaHandle);
<> 154:37f96f9d4de2 202
<> 154:37f96f9d4de2 203 edma_transfer_config_t xferConfig;
<> 154:37f96f9d4de2 204 status_t status;
<> 154:37f96f9d4de2 205
<> 154:37f96f9d4de2 206 /* Return error if xfer invalid. */
<> 154:37f96f9d4de2 207 if ((0U == xfer->dataSize) || (NULL == xfer->data))
<> 154:37f96f9d4de2 208 {
<> 154:37f96f9d4de2 209 return kStatus_InvalidArgument;
<> 154:37f96f9d4de2 210 }
<> 154:37f96f9d4de2 211
<> 154:37f96f9d4de2 212 /* If previous TX not finished. */
<> 154:37f96f9d4de2 213 if (kFLEXIO_UART_TxBusy == handle->txState)
<> 154:37f96f9d4de2 214 {
<> 154:37f96f9d4de2 215 status = kStatus_FLEXIO_UART_TxBusy;
<> 154:37f96f9d4de2 216 }
<> 154:37f96f9d4de2 217 else
<> 154:37f96f9d4de2 218 {
<> 154:37f96f9d4de2 219 handle->txState = kFLEXIO_UART_TxBusy;
<> 154:37f96f9d4de2 220
<> 154:37f96f9d4de2 221 /* Prepare transfer. */
<> 154:37f96f9d4de2 222 EDMA_PrepareTransfer(&xferConfig, xfer->data, sizeof(uint8_t),
<> 154:37f96f9d4de2 223 (void *)FLEXIO_UART_GetTxDataRegisterAddress(base), sizeof(uint8_t), sizeof(uint8_t),
<> 154:37f96f9d4de2 224 xfer->dataSize, kEDMA_MemoryToPeripheral);
<> 154:37f96f9d4de2 225
<> 154:37f96f9d4de2 226 /* Submit transfer. */
<> 154:37f96f9d4de2 227 EDMA_SubmitTransfer(handle->txEdmaHandle, &xferConfig);
<> 154:37f96f9d4de2 228 EDMA_StartTransfer(handle->txEdmaHandle);
<> 154:37f96f9d4de2 229
<> 154:37f96f9d4de2 230 /* Enable UART TX EDMA. */
<> 154:37f96f9d4de2 231 FLEXIO_UART_EnableTxDMA(base, true);
<> 154:37f96f9d4de2 232
<> 154:37f96f9d4de2 233 status = kStatus_Success;
<> 154:37f96f9d4de2 234 }
<> 154:37f96f9d4de2 235
<> 154:37f96f9d4de2 236 return status;
<> 154:37f96f9d4de2 237 }
<> 154:37f96f9d4de2 238
<> 154:37f96f9d4de2 239 status_t FLEXIO_UART_TransferReceiveEDMA(FLEXIO_UART_Type *base,
<> 154:37f96f9d4de2 240 flexio_uart_edma_handle_t *handle,
<> 154:37f96f9d4de2 241 flexio_uart_transfer_t *xfer)
<> 154:37f96f9d4de2 242 {
<> 154:37f96f9d4de2 243 assert(handle->rxEdmaHandle);
<> 154:37f96f9d4de2 244
<> 154:37f96f9d4de2 245 edma_transfer_config_t xferConfig;
<> 154:37f96f9d4de2 246 status_t status;
<> 154:37f96f9d4de2 247
<> 154:37f96f9d4de2 248 /* Return error if xfer invalid. */
<> 154:37f96f9d4de2 249 if ((0U == xfer->dataSize) || (NULL == xfer->data))
<> 154:37f96f9d4de2 250 {
<> 154:37f96f9d4de2 251 return kStatus_InvalidArgument;
<> 154:37f96f9d4de2 252 }
<> 154:37f96f9d4de2 253
<> 154:37f96f9d4de2 254 /* If previous RX not finished. */
<> 154:37f96f9d4de2 255 if (kFLEXIO_UART_RxBusy == handle->rxState)
<> 154:37f96f9d4de2 256 {
<> 154:37f96f9d4de2 257 status = kStatus_FLEXIO_UART_RxBusy;
<> 154:37f96f9d4de2 258 }
<> 154:37f96f9d4de2 259 else
<> 154:37f96f9d4de2 260 {
<> 154:37f96f9d4de2 261 handle->rxState = kFLEXIO_UART_RxBusy;
<> 154:37f96f9d4de2 262
<> 154:37f96f9d4de2 263 /* Prepare transfer. */
<> 154:37f96f9d4de2 264 EDMA_PrepareTransfer(&xferConfig, (void *)FLEXIO_UART_GetRxDataRegisterAddress(base), sizeof(uint8_t),
<> 154:37f96f9d4de2 265 xfer->data, sizeof(uint8_t), sizeof(uint8_t), xfer->dataSize, kEDMA_PeripheralToMemory);
<> 154:37f96f9d4de2 266
<> 154:37f96f9d4de2 267 /* Submit transfer. */
<> 154:37f96f9d4de2 268 EDMA_SubmitTransfer(handle->rxEdmaHandle, &xferConfig);
<> 154:37f96f9d4de2 269 EDMA_StartTransfer(handle->rxEdmaHandle);
<> 154:37f96f9d4de2 270
<> 154:37f96f9d4de2 271 /* Enable UART RX EDMA. */
<> 154:37f96f9d4de2 272 FLEXIO_UART_EnableRxDMA(base, true);
<> 154:37f96f9d4de2 273
<> 154:37f96f9d4de2 274 status = kStatus_Success;
<> 154:37f96f9d4de2 275 }
<> 154:37f96f9d4de2 276
<> 154:37f96f9d4de2 277 return status;
<> 154:37f96f9d4de2 278 }
<> 154:37f96f9d4de2 279
<> 154:37f96f9d4de2 280 void FLEXIO_UART_TransferAbortSendEDMA(FLEXIO_UART_Type *base, flexio_uart_edma_handle_t *handle)
<> 154:37f96f9d4de2 281 {
<> 154:37f96f9d4de2 282 assert(handle->txEdmaHandle);
<> 154:37f96f9d4de2 283
<> 154:37f96f9d4de2 284 /* Disable UART TX EDMA. */
<> 154:37f96f9d4de2 285 FLEXIO_UART_EnableTxDMA(base, false);
<> 154:37f96f9d4de2 286
<> 154:37f96f9d4de2 287 /* Stop transfer. */
<> 154:37f96f9d4de2 288 EDMA_StopTransfer(handle->txEdmaHandle);
<> 154:37f96f9d4de2 289
<> 154:37f96f9d4de2 290 handle->txState = kFLEXIO_UART_TxIdle;
<> 154:37f96f9d4de2 291 }
<> 154:37f96f9d4de2 292
<> 154:37f96f9d4de2 293 void FLEXIO_UART_TransferAbortReceiveEDMA(FLEXIO_UART_Type *base, flexio_uart_edma_handle_t *handle)
<> 154:37f96f9d4de2 294 {
<> 154:37f96f9d4de2 295 assert(handle->rxEdmaHandle);
<> 154:37f96f9d4de2 296
<> 154:37f96f9d4de2 297 /* Disable UART RX EDMA. */
<> 154:37f96f9d4de2 298 FLEXIO_UART_EnableRxDMA(base, false);
<> 154:37f96f9d4de2 299
<> 154:37f96f9d4de2 300 /* Stop transfer. */
<> 154:37f96f9d4de2 301 EDMA_StopTransfer(handle->rxEdmaHandle);
<> 154:37f96f9d4de2 302
<> 154:37f96f9d4de2 303 handle->rxState = kFLEXIO_UART_RxIdle;
<> 154:37f96f9d4de2 304 }
<> 154:37f96f9d4de2 305
<> 154:37f96f9d4de2 306 status_t FLEXIO_UART_TransferGetReceiveCountEDMA(FLEXIO_UART_Type *base,
<> 154:37f96f9d4de2 307 flexio_uart_edma_handle_t *handle,
<> 154:37f96f9d4de2 308 size_t *count)
<> 154:37f96f9d4de2 309 {
<> 154:37f96f9d4de2 310 assert(handle->rxEdmaHandle);
<> 154:37f96f9d4de2 311
<> 154:37f96f9d4de2 312 if (!count)
<> 154:37f96f9d4de2 313 {
<> 154:37f96f9d4de2 314 return kStatus_InvalidArgument;
<> 154:37f96f9d4de2 315 }
<> 154:37f96f9d4de2 316
<> 154:37f96f9d4de2 317 if (kFLEXIO_UART_RxBusy == handle->rxState)
<> 154:37f96f9d4de2 318 {
<> 154:37f96f9d4de2 319 *count = (handle->rxSize - EDMA_GetRemainingBytes(handle->rxEdmaHandle->base, handle->rxEdmaHandle->channel));
<> 154:37f96f9d4de2 320 }
<> 154:37f96f9d4de2 321 else
<> 154:37f96f9d4de2 322 {
<> 154:37f96f9d4de2 323 *count = handle->rxSize;
<> 154:37f96f9d4de2 324 }
<> 154:37f96f9d4de2 325
<> 154:37f96f9d4de2 326 return kStatus_Success;
<> 154:37f96f9d4de2 327 }
<> 154:37f96f9d4de2 328
<> 154:37f96f9d4de2 329 status_t FLEXIO_UART_TransferGetSendCountEDMA(FLEXIO_UART_Type *base, flexio_uart_edma_handle_t *handle, size_t *count)
<> 154:37f96f9d4de2 330 {
<> 154:37f96f9d4de2 331 assert(handle->txEdmaHandle);
<> 154:37f96f9d4de2 332
<> 154:37f96f9d4de2 333 if (!count)
<> 154:37f96f9d4de2 334 {
<> 154:37f96f9d4de2 335 return kStatus_InvalidArgument;
<> 154:37f96f9d4de2 336 }
<> 154:37f96f9d4de2 337
<> 154:37f96f9d4de2 338 if (kFLEXIO_UART_TxBusy == handle->txState)
<> 154:37f96f9d4de2 339 {
<> 154:37f96f9d4de2 340 *count = (handle->txSize - EDMA_GetRemainingBytes(handle->txEdmaHandle->base, handle->txEdmaHandle->channel));
<> 154:37f96f9d4de2 341 }
<> 154:37f96f9d4de2 342 else
<> 154:37f96f9d4de2 343 {
<> 154:37f96f9d4de2 344 *count = handle->txSize;
<> 154:37f96f9d4de2 345 }
<> 154:37f96f9d4de2 346
<> 154:37f96f9d4de2 347 return kStatus_Success;
<> 154:37f96f9d4de2 348 }