1 /*
2  * Copyright 2018, 2020, 2022 NXP
3  * All rights reserved.
4  *
5  *
6  * SPDX-License-Identifier: BSD-3-Clause
7  */
8 
9 #include "fsl_lpuart.h"
10 
11 #include "fsl_adapter_uart.h"
12 
13 #if (defined(FSL_FEATURE_LPUART_IS_LPFLEXCOMM) && (FSL_FEATURE_LPUART_IS_LPFLEXCOMM > 0U))
14 #include "fsl_lpflexcomm.h"
15 #endif /* FSL_FEATURE_LPUART_IS_LPFLEXCOMM */
16 
17 /*! @brief MACROs for whether a software idleline detection should be used. */
18 #if (defined(HAL_UART_DMA_ENABLE) && (HAL_UART_DMA_ENABLE > 0U))
19 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
20 #if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
21 #define HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION (1)
22 #else /* HAL_UART_TRANSFER_MODE */
23 #define HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION (0)
24 #endif /* HAL_UART_TRANSFER_MODE */
25 #else  /* UART_ADAPTER_NON_BLOCKING_MODE */
26 #define HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION (1)
27 #endif /* UART_ADAPTER_NON_BLOCKING_MODE */
28 #endif /* HAL_UART_DMA_ENABLE */
29 
30 #if (defined(HAL_UART_DMA_ENABLE) && (HAL_UART_DMA_ENABLE > 0U))
31 #if (defined(HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION) && (HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION > 0U))
32 #include "fsl_component_timer_manager.h"
33 #endif /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
34 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
35 #include "fsl_lpuart_edma.h"
36 #elif (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
37 #include "fsl_lpuart_dma.h"
38 #endif
39 #if defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT
40 #include "fsl_dmamux.h"
41 #endif
42 #ifdef DMA_IRQS
43 #define DMA_CHN_IRQS DMA_IRQS
44 #endif
45 #endif /* HAL_UART_DMA_ENABLE */
46 
47 /*******************************************************************************
48  * Definitions
49  ******************************************************************************/
50 #ifndef NDEBUG
51 #if (defined(DEBUG_CONSOLE_ASSERT_DISABLE) && (DEBUG_CONSOLE_ASSERT_DISABLE > 0U))
52 #undef assert
53 #define assert(n)
54 #endif
55 #endif
56 
57 #ifndef HAL_UART_ADAPTER_LOWPOWER_RESTORE
58 #define HAL_UART_ADAPTER_LOWPOWER_RESTORE (1)
59 #endif
60 
61 #ifndef HAL_UART_DMA_RING_BUFFER_ENABLE
62 #define HAL_UART_DMA_RING_BUFFER_ENABLE (0U)
63 #endif /* HAL_UART_DMA_ENABLE */
64 #ifndef LPUART_RING_BUFFER_SIZE
65 #define LPUART_RING_BUFFER_SIZE (128U)
66 #endif
67 
68 #if (defined(HAL_UART_DMA_ENABLE) && (HAL_UART_DMA_ENABLE > 0U))
69 /*! @brief uart RX state structure. */
70 typedef struct _hal_uart_dma_receive_state
71 {
72     uint8_t *volatile buffer;
73     volatile uint32_t bufferLength;
74     volatile uint32_t bufferSofar;
75     volatile uint32_t timeout;
76     volatile bool receiveAll;
77 } hal_uart_dma_receive_state_t;
78 
79 /*! @brief uart TX state structure. */
80 typedef struct _hal_uart_dma_send_state
81 {
82     uint8_t *volatile buffer;
83     volatile uint32_t bufferLength;
84     volatile uint32_t bufferSofar;
85     volatile uint32_t timeout;
86 } hal_uart_dma_send_state_t;
87 
88 typedef struct _hal_uart_dma_state
89 {
90     struct _hal_uart_dma_state *next;
91     uint8_t instance; /* LPUART instance */
92     hal_uart_dma_transfer_callback_t dma_callback;
93     void *dma_callback_param;
94 
95 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
96     lpuart_edma_handle_t edmaHandle;
97     edma_handle_t txEdmaHandle;
98     edma_handle_t rxEdmaHandle;
99 #elif (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
100     lpuart_dma_handle_t dmaHandle;
101     dma_handle_t txDmaHandle;
102     dma_handle_t rxDmaHandle;
103 #endif
104     hal_uart_dma_receive_state_t dma_rx;
105     hal_uart_dma_send_state_t dma_tx;
106 #if (defined(HAL_UART_ADAPTER_LOWPOWER) && (HAL_UART_ADAPTER_LOWPOWER > 0U))
107     dma_channel_mux_configure_t dma_channel_mux_configure;
108     dma_mux_configure_t dma_mux_configure;
109     hal_uart_dma_config_t hal_uart_dma_config;
110 #endif
111 } hal_uart_dma_state_t;
112 
113 typedef struct _lpuart_dma_list
114 {
115 #if (defined(HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION) && (HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION > 0U))
116     TIMER_MANAGER_HANDLE_DEFINE(timerManagerHandle);
117 #endif /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
118     hal_uart_dma_state_t *dma_list;
119     volatile int8_t activeCount;
120 } hal_lpuart_dma_list_t;
121 
122 static hal_lpuart_dma_list_t s_dmaHandleList;
123 #endif /* HAL_UART_DMA_ENABLE */
124 
125 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
126 /*! @brief uart RX state structure. */
127 typedef struct _hal_uart_receive_state
128 {
129     uint8_t *volatile buffer;
130     volatile uint32_t bufferLength;
131     volatile uint32_t bufferSofar;
132 } hal_uart_receive_state_t;
133 
134 /*! @brief uart TX state structure. */
135 typedef struct _hal_uart_send_state
136 {
137     uint8_t *volatile buffer;
138     volatile uint32_t bufferLength;
139     volatile uint32_t bufferSofar;
140 } hal_uart_send_state_t;
141 #endif
142 /*! @brief uart state structure. */
143 typedef struct _hal_uart_state
144 {
145     uint8_t instance;
146 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
147     hal_uart_transfer_callback_t callback;
148     void *callbackParam;
149 #if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
150     lpuart_handle_t hardwareHandle;
151 #endif
152     hal_uart_receive_state_t rx;
153     hal_uart_send_state_t tx;
154 #endif
155 #if (defined(HAL_UART_ADAPTER_LOWPOWER) && (HAL_UART_ADAPTER_LOWPOWER > 0U))
156 #if (defined(HAL_UART_ADAPTER_LOWPOWER_RESTORE) && (HAL_UART_ADAPTER_LOWPOWER_RESTORE > 0U))
157     uint32_t reg_BAUD;
158     uint32_t reg_CTRL;
159     uint32_t reg_WATER;
160     uint32_t reg_MODIR;
161 #else
162     hal_uart_config_t config;
163 #endif
164 #endif
165 #if (defined(HAL_UART_DMA_ENABLE) && (HAL_UART_DMA_ENABLE > 0U))
166     hal_uart_dma_state_t *dmaHandle;
167 #endif /* HAL_UART_DMA_ENABLE */
168 } hal_uart_state_t;
169 
170 /*******************************************************************************
171  * Prototypes
172  ******************************************************************************/
173 
174 /*******************************************************************************
175  * Variables
176  ******************************************************************************/
177 static LPUART_Type *const s_LpuartAdapterBase[] = LPUART_BASE_PTRS;
178 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
179 #if (defined(HAL_UART_ADAPTER_LOWPOWER) && (HAL_UART_ADAPTER_LOWPOWER > 0U))
180 #if (defined(HAL_UART_ADAPTER_LOWPOWER_RESTORE) && (HAL_UART_ADAPTER_LOWPOWER_RESTORE > 0U))
181 static const clock_ip_name_t s_LpuartAdapterClock[] = LPUART_CLOCKS;
182 #endif /* HAL_UART_ADAPTER_LOWPOWER_RESTORE */
183 #endif /* HAL_UART_ADAPTER_LOWPOWER */
184 #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */
185 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
186 
187 #if !(defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
188 /* Array of LPUART IRQ number. */
189 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
190 static const IRQn_Type s_LpuartRxIRQ[] = LPUART_RX_IRQS;
191 static const IRQn_Type s_LpuartTxIRQ[] = LPUART_TX_IRQS;
192 #else
193 static const IRQn_Type s_LpuartIRQ[] = LPUART_RX_TX_IRQS;
194 #endif
195 #endif
196 
197 #if !(defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
198 static hal_uart_state_t *s_UartState[sizeof(s_LpuartAdapterBase) / sizeof(LPUART_Type *)];
199 #endif
200 #endif
201 
202 #if (defined(HAL_UART_DMA_ENABLE) && (HAL_UART_DMA_ENABLE > 0U))
203 #if (defined(HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION) && (HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION > 0U))
204 #else  /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
205 static hal_uart_dma_state_t *s_UartDmaState[sizeof(s_LpuartAdapterBase) / sizeof(LPUART_Type *)] = {0};
206 #endif /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
207 #if (defined(HAL_UART_DMA_RING_BUFFER_ENABLE) && (HAL_UART_DMA_RING_BUFFER_ENABLE > 0U))
208 /* allocate ring buffer section. */
209 AT_NONCACHEABLE_SECTION_INIT(
210     static uint8_t s_ringBuffer[sizeof(s_LpuartAdapterBase) / sizeof(LPUART_Type *)][LPUART_RING_BUFFER_SIZE]) = {0};
211 /* Allocate TCD memory poll with ring buffer used. */
212 AT_NONCACHEABLE_SECTION_ALIGN(
213     static edma_tcd_t tcdMemoryPoolPtr[sizeof(s_LpuartAdapterBase) / sizeof(LPUART_Type *)][1], sizeof(edma_tcd_t));
214 
215 static volatile uint32_t ringBufferIndex[sizeof(s_LpuartAdapterBase) / sizeof(LPUART_Type *)] = {0U};
216 static void LPUART_StartRingBufferEDMA(hal_uart_handle_t handle);
217 static void LPUART_DMACallbacks(LPUART_Type *base, lpuart_edma_handle_t *handle, status_t status, void *userData);
218 #endif
219 #endif /* HAL_UART_DMA_ENABLE */
220 
221 /*******************************************************************************
222  * Code
223  ******************************************************************************/
224 
225 #if ((defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U)) || \
226      (defined(HAL_UART_DMA_ENABLE) && (HAL_UART_DMA_ENABLE > 0U)))
HAL_UartGetStatus(status_t status)227 static hal_uart_status_t HAL_UartGetStatus(status_t status)
228 {
229     hal_uart_status_t uartStatus = kStatus_HAL_UartError;
230     switch (status)
231     {
232         case (int32_t)kStatus_Success:
233             uartStatus = kStatus_HAL_UartSuccess;
234             break;
235         case (int32_t)kStatus_LPUART_TxBusy:
236             uartStatus = kStatus_HAL_UartTxBusy;
237             break;
238         case (int32_t)kStatus_LPUART_RxBusy:
239             uartStatus = kStatus_HAL_UartRxBusy;
240             break;
241         case (int32_t)kStatus_LPUART_TxIdle:
242             uartStatus = kStatus_HAL_UartTxIdle;
243             break;
244         case (int32_t)kStatus_LPUART_RxIdle:
245             uartStatus = kStatus_HAL_UartRxIdle;
246             break;
247         case (int32_t)kStatus_LPUART_BaudrateNotSupport:
248             uartStatus = kStatus_HAL_UartBaudrateNotSupport;
249             break;
250         case (int32_t)kStatus_LPUART_NoiseError:
251         case (int32_t)kStatus_LPUART_FramingError:
252         case (int32_t)kStatus_LPUART_ParityError:
253             uartStatus = kStatus_HAL_UartProtocolError;
254             break;
255         default:
256             /*MISRA rule 16.4*/
257             break;
258     }
259     return uartStatus;
260 }
261 #else
HAL_UartGetStatus(status_t status)262 static hal_uart_status_t HAL_UartGetStatus(status_t status)
263 {
264     hal_uart_status_t uartStatus;
265     if ((int32_t)kStatus_Success == status)
266     {
267         uartStatus = kStatus_HAL_UartSuccess; /* Successfully */
268     }
269     else
270     {
271         uartStatus = kStatus_HAL_UartError; /* Error occurs on HAL uart */
272     }
273     return uartStatus;
274 }
275 #endif
276 
277 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
278 #if (defined(HAL_UART_DMA_ENABLE) && (HAL_UART_DMA_ENABLE > 0U))
279 #if (defined(HAL_UART_DMA_RING_BUFFER_ENABLE) && (HAL_UART_DMA_RING_BUFFER_ENABLE > 0U))
HAL_UartGetDmaReceivedBytes(uint8_t instance)280 static uint32_t HAL_UartGetDmaReceivedBytes(uint8_t instance)
281 {
282     volatile uint32_t receivedBytes = 0U;
283     uint32_t remainingBytes         = 0U;
284     uint32_t newIndex               = 0U;
285 
286     hal_uart_dma_state_t *uartDmaHandle = s_UartDmaState[instance];
287 
288     remainingBytes =
289         EDMA_GetRemainingMajorLoopCount(uartDmaHandle->rxEdmaHandle.base, uartDmaHandle->rxEdmaHandle.channel);
290     if (remainingBytes == LPUART_RING_BUFFER_SIZE)
291     {
292         remainingBytes = 0;
293     }
294     else
295     {
296         newIndex = LPUART_RING_BUFFER_SIZE - remainingBytes;
297     }
298 
299     if (newIndex < ringBufferIndex[instance])
300     {
301         newIndex = newIndex + LPUART_RING_BUFFER_SIZE;
302     }
303     receivedBytes = newIndex - ringBufferIndex[instance];
304 
305     return receivedBytes;
306 }
307 #endif
308 #if (defined(HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION) && (HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION > 0U))
309 #else /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
HAL_UartDMAIdlelineInterruptHandle(uint8_t instance)310 static void HAL_UartDMAIdlelineInterruptHandle(uint8_t instance)
311 {
312     hal_uart_dma_state_t *uartDmaHandle = s_UartDmaState[instance];
313     hal_dma_callback_msg_t dmaMsg;
314 #if (defined(HAL_UART_DMA_RING_BUFFER_ENABLE) && (HAL_UART_DMA_RING_BUFFER_ENABLE > 0U))
315     uint32_t receiveLength  = 0;
316     uint32_t callbackLength = 0;
317     uint32_t remianLength   = 0;
318     uint32_t key;
319 #endif /* HAL_UART_DMA_RING_BUFFER_ENABLE */
320     assert(uartDmaHandle);
321 #if (defined(HAL_UART_DMA_RING_BUFFER_ENABLE) && (HAL_UART_DMA_RING_BUFFER_ENABLE > 0U))
322     if ((NULL != uartDmaHandle->dma_callback) && (NULL != uartDmaHandle->dma_rx.buffer))
323     {
324         key           = DisableGlobalIRQ();
325 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
326         receiveLength = HAL_UartGetDmaReceivedBytes(instance);
327 #elif (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
328 
329 #endif /* FSL_FEATURE_SOC_EDMA_COUNT */
330         if (uartDmaHandle->dma_rx.receiveAll == true)
331         {
332             if (receiveLength < uartDmaHandle->dma_rx.bufferLength)
333             {
334                 LPUART_EnableInterrupts(s_LpuartAdapterBase[instance], (uint32_t)kLPUART_IdleLineInterruptEnable);
335                 EnableGlobalIRQ(key);
336                 return;
337             }
338         }
339         callbackLength =
340             (receiveLength < uartDmaHandle->dma_rx.bufferLength) ? receiveLength : uartDmaHandle->dma_rx.bufferLength;
341         if (callbackLength != 0U)
342         {
343             dmaMsg.status   = kStatus_HAL_UartDmaIdleline;
344             dmaMsg.dataSize = callbackLength;
345 
346             if (ringBufferIndex[instance] + callbackLength < LPUART_RING_BUFFER_SIZE)
347             {
348                 (void)memcpy(uartDmaHandle->dma_rx.buffer, &s_ringBuffer[instance][ringBufferIndex[instance]],
349                              callbackLength);
350                 ringBufferIndex[instance] += callbackLength;
351             }
352             else
353             {
354                 remianLength = callbackLength + ringBufferIndex[instance] - LPUART_RING_BUFFER_SIZE;
355                 (void)memcpy(uartDmaHandle->dma_rx.buffer, &s_ringBuffer[instance][ringBufferIndex[instance]],
356                              (callbackLength - remianLength));
357                 (void)memcpy(uartDmaHandle->dma_rx.buffer + (callbackLength - remianLength), &s_ringBuffer[instance][0],
358                              remianLength);
359                 ringBufferIndex[instance] = remianLength;
360             }
361             dmaMsg.data                     = uartDmaHandle->dma_rx.buffer;
362             uartDmaHandle->dma_rx.buffer = NULL;
363 
364             uartDmaHandle->dma_callback(uartDmaHandle, &dmaMsg, uartDmaHandle->dma_callback_param);
365         }
366         EnableGlobalIRQ(key);
367     }
368 #else
369     if ((NULL != uartDmaHandle->dma_callback) && (NULL != uartDmaHandle->dma_rx.buffer))
370     {
371         /* HAL_UartDMAGetReceiveCount(uartDmaHandle, &msg.dataSize); */
372         /* HAL_UartDMAAbortReceive(uartDmaHandle); */
373 
374 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
375         (void)LPUART_TransferGetReceiveCountEDMA(s_LpuartAdapterBase[uartDmaHandle->instance],
376                                                  &uartDmaHandle->edmaHandle, &dmaMsg.dataSize);
377         LPUART_TransferAbortReceiveEDMA(s_LpuartAdapterBase[uartDmaHandle->instance], &uartDmaHandle->edmaHandle);
378 #elif (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
379 #endif /* FSL_FEATURE_SOC_EDMA_COUNT */
380         dmaMsg.status                   = kStatus_HAL_UartDmaIdleline;
381         dmaMsg.data                     = uartDmaHandle->dma_rx.buffer;
382         uartDmaHandle->dma_rx.buffer = NULL;
383 
384         uartDmaHandle->dma_callback(uartDmaHandle, &dmaMsg, uartDmaHandle->dma_callback_param);
385     }
386 
387 #endif
388 }
389 #endif /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
390 #endif /* HAL_UART_DMA_ENABLE */
391 
392 #if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
HAL_UartCallback(LPUART_Type * base,lpuart_handle_t * handle,status_t status,void * callbackParam)393 static void HAL_UartCallback(LPUART_Type *base, lpuart_handle_t *handle, status_t status, void *callbackParam)
394 {
395     hal_uart_state_t *uartHandle;
396     hal_uart_status_t uartStatus = HAL_UartGetStatus(status);
397     assert(callbackParam);
398 
399     uartHandle = (hal_uart_state_t *)callbackParam;
400 
401     if (kStatus_HAL_UartProtocolError == uartStatus)
402     {
403         if (0U != uartHandle->hardwareHandle.rxDataSize)
404         {
405             uartStatus = kStatus_HAL_UartError;
406         }
407     }
408 
409     if (NULL != uartHandle->callback)
410     {
411         uartHandle->callback(uartHandle, uartStatus, uartHandle->callbackParam);
412     }
413 }
414 
415 #else /* HAL_UART_TRANSFER_MODE */
416 
HAL_UartInterruptHandle(uint8_t instance)417 static void HAL_UartInterruptHandle(uint8_t instance)
418 {
419 #if (defined(HAL_UART_DMA_ENABLE) && (HAL_UART_DMA_ENABLE > 0U))
420 #if (defined(HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION) && (HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION > 0U))
421 #else  /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
422     hal_dma_callback_msg_t dmaMsg;
423     hal_uart_dma_state_t *uartDmaHandle = s_UartDmaState[instance];
424     uint32_t sentCount = 0U;
425 #endif /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
426 #endif /* HAL_UART_DMA_ENABLE */
427     hal_uart_state_t *uartHandle = s_UartState[instance];
428     uint32_t status;
429 #if (defined(HAL_UART_ADAPTER_FIFO) && (HAL_UART_ADAPTER_FIFO > 0u))
430     uint8_t count;
431 #endif
432 
433     assert(NULL != uartHandle);
434 
435     status = LPUART_GetStatusFlags(s_LpuartAdapterBase[instance]);
436 
437 #if (defined(HAL_UART_DMA_ENABLE) && (HAL_UART_DMA_ENABLE > 0U))
438 #if (defined(HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION) && (HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION > 0U))
439 #else /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
440     /* DMA send complete interrupt. */
441     if ((NULL != uartDmaHandle) && (instance == uartDmaHandle->instance))
442     {
443         if (NULL != uartDmaHandle->dma_tx.buffer)
444         {
445             if ((0U != ((uint32_t)kLPUART_TransmissionCompleteFlag & status)) &&
446                 (0U != (LPUART_GetEnabledInterrupts(s_LpuartAdapterBase[instance]) &
447                         (uint32_t)kLPUART_TransmissionCompleteFlag)))
448 
449             {
450 #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
451 #elif (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
452                 (void)LPUART_TransferGetSendCountEDMA(s_LpuartAdapterBase[uartDmaHandle->instance],
453                                                 &uartDmaHandle->edmaHandle, &sentCount);
454 #endif /* FSL_FEATURE_SOC_EDMA_COUNT */
455 
456                 /* Disable tx complete interrupt */
457                 (void)LPUART_DisableInterrupts(s_LpuartAdapterBase[instance],
458                                                (uint32_t)kLPUART_TransmissionCompleteFlag);
459                 uartDmaHandle->edmaHandle.txState = 0;
460                 dmaMsg.status                        = kStatus_HAL_UartDmaTxIdle;
461                 dmaMsg.data                          = uartDmaHandle->dma_tx.buffer;
462                 dmaMsg.dataSize                      = uartDmaHandle->dma_tx.bufferLength;
463                 uartDmaHandle->dma_tx.buffer      = NULL;
464                 uartDmaHandle->dma_callback(uartDmaHandle, &dmaMsg, uartDmaHandle->dma_callback_param);
465             }
466         }
467         /* DMA receive Idleline interrupt. */
468 #if (defined(HAL_UART_DMA_RING_BUFFER_ENABLE) && (HAL_UART_DMA_RING_BUFFER_ENABLE > 0U))
469         if (NULL != uartDmaHandle->dma_rx.buffer)
470 #else
471         if ((NULL != uartDmaHandle->dma_rx.buffer) && (false == uartDmaHandle->dma_rx.receiveAll))
472 #endif
473         {
474             if ((0U != ((uint32_t)kLPUART_IdleLineFlag & status)) &&
475                 (0U != (LPUART_GetEnabledInterrupts(s_LpuartAdapterBase[instance]) &
476                         (uint32_t)kLPUART_IdleLineInterruptEnable)))
477             {
478                 HAL_UartDMAIdlelineInterruptHandle(instance);
479                 (void)LPUART_ClearStatusFlags(s_LpuartAdapterBase[instance], (uint32_t)kLPUART_IdleLineFlag);
480             }
481         }
482     }
483 
484 #endif /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
485 #endif /* HAL_UART_DMA_ENABLE */
486 
487 #if (defined(HAL_UART_ADAPTER_FIFO) && (HAL_UART_ADAPTER_FIFO > 0u))
488     /* If RX overrun. */
489     if ((uint32_t)kLPUART_RxOverrunFlag == ((uint32_t)kLPUART_RxOverrunFlag & status))
490     {
491         /* Clear overrun flag, otherwise the RX does not work. */
492         s_LpuartAdapterBase[instance]->STAT =
493             ((s_LpuartAdapterBase[instance]->STAT & 0x3FE00000U) | LPUART_STAT_OR_MASK);
494     }
495 #endif
496     if ((0u != ((uint32_t)kLPUART_NoiseErrorFlag & status)) || (0u != ((uint32_t)kLPUART_FramingErrorFlag & status)) ||
497         (0u != ((uint32_t)kLPUART_ParityErrorFlag & status)))
498     {
499         if (0u != ((uint32_t)kLPUART_NoiseErrorFlag & status))
500         {
501             (void)LPUART_ClearStatusFlags(s_LpuartAdapterBase[instance], (uint32_t)kLPUART_NoiseErrorFlag);
502         }
503         if (0u != ((uint32_t)kLPUART_FramingErrorFlag & status))
504         {
505             (void)LPUART_ClearStatusFlags(s_LpuartAdapterBase[instance], (uint32_t)kLPUART_FramingErrorFlag);
506         }
507         if (0u != ((uint32_t)kLPUART_ParityErrorFlag & status))
508         {
509             (void)LPUART_ClearStatusFlags(s_LpuartAdapterBase[instance], (uint32_t)kLPUART_ParityErrorFlag);
510         }
511 
512         /*clean RDRF flag and drop the data with status error*/
513         if (0u != ((uint32_t)(kLPUART_RxDataRegFullFlag)&status))
514         {
515             (void)LPUART_ReadByte(s_LpuartAdapterBase[instance]);
516         }
517         status = LPUART_GetStatusFlags(s_LpuartAdapterBase[instance]);
518     }
519 #if (defined(FSL_FEATURE_LPUART_IS_LPFLEXCOMM) && (FSL_FEATURE_LPUART_IS_LPFLEXCOMM > 0U))
520     if (((0U != ((uint32_t)kLPUART_RxDataRegFullFlag & status)) &&
521 #else
522     /* Receive data register full */
523     if (((0U != ((uint32_t)kLPUART_RxDataRegFullFlag & status)) &&
524 #endif /* FSL_FEATURE_LPUART_IS_LPFLEXCOMM */
525          (0U != (LPUART_GetEnabledInterrupts(s_LpuartAdapterBase[instance]) &
526                  (uint32_t)kLPUART_RxDataRegFullInterruptEnable)))
527 #if (defined(HAL_UART_ADAPTER_FIFO) && (HAL_UART_ADAPTER_FIFO > 0u))
528         || ((0U != ((uint32_t)kLPUART_IdleLineFlag & status)) &&
529             (0U !=
530              (LPUART_GetEnabledInterrupts(s_LpuartAdapterBase[instance]) & (uint32_t)kLPUART_IdleLineInterruptEnable)))
531 #endif
532     )
533     {
534         if (NULL != uartHandle->rx.buffer)
535         {
536 #if (defined(HAL_UART_ADAPTER_FIFO) && (HAL_UART_ADAPTER_FIFO > 0u))
537             /* Get the size that can be stored into buffer for this interrupt. */
538 #if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
539             count = ((uint8_t)((s_LpuartAdapterBase[instance]->WATER & LPUART_WATER_RXCOUNT_MASK) >>
540                                LPUART_WATER_RXCOUNT_SHIFT));
541 #else
542             if (0U != (status & (uint32_t)kLPUART_RxDataRegFullInterruptEnable))
543             {
544                 count = 1U;
545             }
546             else
547             {
548                 count = 0U;
549             }
550 #endif
551             while (0u != count)
552             {
553                 count--;
554 #endif
555                 uartHandle->rx.buffer[uartHandle->rx.bufferSofar++] = LPUART_ReadByte(s_LpuartAdapterBase[instance]);
556                 if (uartHandle->rx.bufferSofar >= uartHandle->rx.bufferLength)
557                 {
558                     LPUART_DisableInterrupts(
559                         s_LpuartAdapterBase[instance], (uint32_t)kLPUART_RxDataRegFullInterruptEnable |
560                                                            (uint32_t)kLPUART_RxOverrunInterruptEnable
561 #if (defined(HAL_UART_ADAPTER_FIFO) && (HAL_UART_ADAPTER_FIFO > 0u))
562                                                            | (uint32_t)kLPUART_IdleLineInterruptEnable
563 #endif
564                     );
565                     uartHandle->rx.buffer = NULL;
566 #if (defined(HAL_UART_ADAPTER_FIFO) && (HAL_UART_ADAPTER_FIFO > 0u))
567                     count = 0u;
568 #endif
569                     if (NULL != uartHandle->callback)
570                     {
571                         uartHandle->callback(uartHandle, kStatus_HAL_UartRxIdle, uartHandle->callbackParam);
572                     }
573                 }
574 #if (defined(HAL_UART_ADAPTER_FIFO) && (HAL_UART_ADAPTER_FIFO > 0u))
575             }
576 #endif
577         }
578 #if (defined(HAL_UART_ADAPTER_FIFO) && (HAL_UART_ADAPTER_FIFO > 0u))
579         if ((0U != ((uint32_t)kLPUART_IdleLineFlag & status)) &&
580             (0U !=
581              (LPUART_GetEnabledInterrupts(s_LpuartAdapterBase[instance]) & (uint32_t)kLPUART_IdleLineInterruptEnable)))
582         {
583             s_LpuartAdapterBase[instance]->STAT |= ((uint32_t)kLPUART_IdleLineFlag);
584         }
585 #endif
586     }
587 
588     /* Send data register empty and the interrupt is enabled. */
589     if ((0U != (LPUART_STAT_TDRE_MASK & status)) && (0U != (LPUART_GetEnabledInterrupts(s_LpuartAdapterBase[instance]) &
590                                                             (uint32_t)kLPUART_TxDataRegEmptyInterruptEnable)))
591     {
592         if (NULL != uartHandle->tx.buffer)
593         {
594 #if (defined(HAL_UART_ADAPTER_FIFO) && (HAL_UART_ADAPTER_FIFO > 0u))
595             /* Get the size that transmit buffer for this interrupt. */
596 #if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
597             count = (uint8_t)FSL_FEATURE_LPUART_FIFO_SIZEn(s_LpuartAdapterBase[instance]) -
598                     (uint8_t)((s_LpuartAdapterBase[instance]->WATER & LPUART_WATER_TXCOUNT_MASK) >>
599                               LPUART_WATER_TXCOUNT_SHIFT);
600 #else
601             count = 1u;
602 #endif
603             while (0u != count)
604             {
605                 count--;
606 #endif
607                 LPUART_WriteByte(s_LpuartAdapterBase[instance], uartHandle->tx.buffer[uartHandle->tx.bufferSofar++]);
608                 if (uartHandle->tx.bufferSofar >= uartHandle->tx.bufferLength)
609                 {
610                     LPUART_DisableInterrupts(s_LpuartAdapterBase[instance],
611                                              (uint32_t)kLPUART_TxDataRegEmptyInterruptEnable);
612                     uartHandle->tx.buffer = NULL;
613 #if (defined(HAL_UART_ADAPTER_FIFO) && (HAL_UART_ADAPTER_FIFO > 0u))
614                     count = 0u;
615 #endif
616                     if (NULL != uartHandle->callback)
617                     {
618                         uartHandle->callback(uartHandle, kStatus_HAL_UartTxIdle, uartHandle->callbackParam);
619                     }
620                 }
621 #if (defined(HAL_UART_ADAPTER_FIFO) && (HAL_UART_ADAPTER_FIFO > 0u))
622             }
623 #endif
624         }
625     }
626 
627 #if !(defined(HAL_UART_ADAPTER_FIFO) && (HAL_UART_ADAPTER_FIFO > 0u))
628     (void)LPUART_ClearStatusFlags(s_LpuartAdapterBase[instance], status);
629 #endif
630 }
631 #endif /* HAL_UART_TRANSFER_MODE */
632 #if (defined(FSL_FEATURE_LPUART_IS_LPFLEXCOMM) && (FSL_FEATURE_LPUART_IS_LPFLEXCOMM > 0U))
HAL_LpUartInterruptHandle_Wapper(uint32_t instance,void * handle)633 static void HAL_LpUartInterruptHandle_Wapper(uint32_t instance, void *handle)
634 {
635     hal_uart_state_t *uartHandle = (hal_uart_state_t *)handle;
636     HAL_UartInterruptHandle(uartHandle->instance);
637 }
638 #endif /* FSL_FEATURE_LPUART_IS_LPFLEXCOMM */
639 
640 #endif /* UART_ADAPTER_NON_BLOCKING_MODE */
641 
HAL_UartInitCommon(hal_uart_handle_t handle,const hal_uart_config_t * uart_config)642 static hal_uart_status_t HAL_UartInitCommon(hal_uart_handle_t handle, const hal_uart_config_t *uart_config)
643 {
644     lpuart_config_t lpuartConfig;
645     status_t status;
646     hal_uart_status_t uartStatus = kStatus_HAL_UartSuccess;
647 
648     LPUART_GetDefaultConfig(&lpuartConfig);
649     lpuartConfig.baudRate_Bps = uart_config->baudRate_Bps;
650     lpuartConfig.parityMode   = (lpuart_parity_mode_t)uart_config->parityMode;
651     lpuartConfig.stopBitCount = (lpuart_stop_bit_count_t)uart_config->stopBitCount;
652     lpuartConfig.enableRx     = (bool)uart_config->enableRx;
653     lpuartConfig.enableTx     = (bool)uart_config->enableTx;
654 #if (defined(HAL_UART_ADAPTER_FIFO) && (HAL_UART_ADAPTER_FIFO > 0u))
655 #if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
656     if (uart_config->txFifoWatermark > 0U)
657     {
658         lpuartConfig.txFifoWatermark =
659             MIN(uart_config->txFifoWatermark,
660                 (uint8_t)FSL_FEATURE_LPUART_FIFO_SIZEn(s_LpuartAdapterBase[uart_config->instance])) -
661             1U;
662     }
663     if (uart_config->rxFifoWatermark > 0U)
664     {
665         lpuartConfig.rxFifoWatermark =
666             MIN(uart_config->rxFifoWatermark,
667                 (uint8_t)FSL_FEATURE_LPUART_FIFO_SIZEn(s_LpuartAdapterBase[uart_config->instance])) -
668             1U;
669     }
670 #endif
671 #endif
672 #if defined(FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT) && FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT
673     lpuartConfig.enableRxRTS = (bool)uart_config->enableRxRTS;
674     lpuartConfig.enableTxCTS = (bool)uart_config->enableTxCTS;
675 #endif /* FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT */
676 
677     /* Idleline config */
678 #if (defined(HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION) && (HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION > 0U))
679 #else  /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
680     lpuartConfig.rxIdleType   = kLPUART_IdleTypeStopBit;
681     lpuartConfig.rxIdleConfig = kLPUART_IdleCharacter2;
682 #endif /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
683 
684     status = LPUART_Init(s_LpuartAdapterBase[uart_config->instance], (const lpuart_config_t *)&lpuartConfig, uart_config->srcClock_Hz);
685 
686     if ((int32_t)kStatus_Success != status)
687     {
688         uartStatus = HAL_UartGetStatus(status); /*Get current uart status*/
689     }
690 
691     return uartStatus;
692 }
693 
HAL_UartInit(hal_uart_handle_t handle,const hal_uart_config_t * uart_config)694 hal_uart_status_t HAL_UartInit(hal_uart_handle_t handle, const hal_uart_config_t *uart_config)
695 {
696     hal_uart_state_t *uartHandle;
697     hal_uart_status_t uartStatus;
698     assert(NULL != handle);
699     assert(NULL != uart_config);
700     assert(uart_config->instance < (sizeof(s_LpuartAdapterBase) / sizeof(LPUART_Type *)));
701     assert(NULL != s_LpuartAdapterBase[uart_config->instance]);
702     assert(HAL_UART_HANDLE_SIZE >= sizeof(hal_uart_state_t));
703 
704     uartStatus = HAL_UartInitCommon(handle, uart_config);
705 
706     if (kStatus_HAL_UartSuccess == uartStatus)
707     {
708         uartHandle           = (hal_uart_state_t *)handle;
709         uartHandle->instance = uart_config->instance;
710 #if (defined(HAL_UART_DMA_ENABLE) && (HAL_UART_DMA_ENABLE > 0U))
711         uartHandle->dmaHandle = NULL;
712 #endif /* HAL_UART_DMA_ENABLE */
713 
714 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
715 #if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
716         LPUART_TransferCreateHandle(s_LpuartAdapterBase[uart_config->instance], &uartHandle->hardwareHandle,
717                                     (lpuart_transfer_callback_t)HAL_UartCallback, handle);
718 #else
719         s_UartState[uartHandle->instance] = uartHandle;
720 #if (defined(FSL_FEATURE_LPUART_IS_LPFLEXCOMM) && (FSL_FEATURE_LPUART_IS_LPFLEXCOMM > 0U))
721         LP_FLEXCOMM_SetIRQHandler(uart_config->instance, HAL_LpUartInterruptHandle_Wapper, handle,
722                                   LP_FLEXCOMM_PERIPH_LPUART);
723 #endif /* FSL_FEATURE_LPUART_IS_LPFLEXCOMM */
724 
725 /* Enable interrupt in NVIC. */
726 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
727         NVIC_SetPriority((IRQn_Type)s_LpuartRxIRQ[uartHandle->instance], HAL_UART_ISR_PRIORITY);
728         EnableIRQ(s_LpuartRxIRQ[uartHandle->instance]);
729         NVIC_SetPriority((IRQn_Type)s_LpuartTxIRQ[uartHandle->instance], HAL_UART_ISR_PRIORITY);
730         EnableIRQ(s_LpuartTxIRQ[uartHandle->instance]);
731 #else
732         NVIC_SetPriority((IRQn_Type)s_LpuartIRQ[uartHandle->instance], HAL_UART_ISR_PRIORITY);
733         (void)EnableIRQ(s_LpuartIRQ[uartHandle->instance]);
734 #endif
735 #endif
736 
737 #endif
738 #if (defined(HAL_UART_ADAPTER_LOWPOWER) && (HAL_UART_ADAPTER_LOWPOWER > 0U))
739 #if (defined(HAL_UART_ADAPTER_LOWPOWER_RESTORE) && (HAL_UART_ADAPTER_LOWPOWER_RESTORE > 0U))
740         uartHandle->reg_BAUD  = s_LpuartAdapterBase[uartHandle->instance]->BAUD;
741         uartHandle->reg_CTRL  = s_LpuartAdapterBase[uartHandle->instance]->CTRL;
742         uartHandle->reg_WATER = s_LpuartAdapterBase[uartHandle->instance]->WATER;
743         uartHandle->reg_MODIR = s_LpuartAdapterBase[uartHandle->instance]->MODIR;
744 #else
745         (void)memcpy(&uartHandle->config, uart_config, sizeof(hal_uart_config_t));
746 #endif
747 #endif
748     }
749 
750     return uartStatus;
751 }
752 
HAL_UartDeinit(hal_uart_handle_t handle)753 hal_uart_status_t HAL_UartDeinit(hal_uart_handle_t handle)
754 {
755     hal_uart_state_t *uartHandle;
756 
757     assert(NULL != handle);
758 
759     uartHandle = (hal_uart_state_t *)handle;
760 
761     LPUART_Deinit(s_LpuartAdapterBase[uartHandle->instance]); /*LPUART Deinitialization*/
762 
763 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
764 
765 #if !(defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
766     s_UartState[uartHandle->instance] = NULL;
767 #endif
768 
769 #endif
770 
771     return kStatus_HAL_UartSuccess;
772 }
773 
HAL_UartReceiveBlocking(hal_uart_handle_t handle,uint8_t * data,size_t length)774 hal_uart_status_t HAL_UartReceiveBlocking(hal_uart_handle_t handle, uint8_t *data, size_t length)
775 {
776     hal_uart_state_t *uartHandle;
777     status_t status;
778     assert(NULL != handle);
779     assert(NULL != data);
780     assert(length > 0U);
781 
782     uartHandle = (hal_uart_state_t *)handle;
783 
784     status = LPUART_ReadBlocking(s_LpuartAdapterBase[uartHandle->instance], data, length);
785 
786     return HAL_UartGetStatus(status);
787 }
788 
HAL_UartSendBlocking(hal_uart_handle_t handle,const uint8_t * data,size_t length)789 hal_uart_status_t HAL_UartSendBlocking(hal_uart_handle_t handle, const uint8_t *data, size_t length)
790 {
791     hal_uart_state_t *uartHandle;
792 
793     assert(NULL != handle);
794     assert(NULL != data);
795     assert(length > 0U);
796 
797     uartHandle = (hal_uart_state_t *)handle;
798 
799     (void)LPUART_WriteBlocking(s_LpuartAdapterBase[uartHandle->instance], data, length);
800 
801     return kStatus_HAL_UartSuccess;
802 }
803 
HAL_UartEnterLowpower(hal_uart_handle_t handle)804 hal_uart_status_t HAL_UartEnterLowpower(hal_uart_handle_t handle)
805 {
806     assert(NULL != handle);
807 
808     return kStatus_HAL_UartSuccess;
809 }
810 
HAL_UartExitLowpower(hal_uart_handle_t handle)811 hal_uart_status_t HAL_UartExitLowpower(hal_uart_handle_t handle)
812 {
813 #if (defined(HAL_UART_ADAPTER_LOWPOWER) && (HAL_UART_ADAPTER_LOWPOWER > 0U))
814     hal_uart_state_t *uartHandle;
815     assert(handle);
816 
817     uartHandle = (hal_uart_state_t *)handle;
818 
819 #if (defined(HAL_UART_ADAPTER_LOWPOWER_RESTORE) && (HAL_UART_ADAPTER_LOWPOWER_RESTORE > 0U))
820 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
821     /* Enable lpuart clock */
822     CLOCK_EnableClock(s_LpuartAdapterClock[uartHandle->instance]);
823 #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */
824     s_LpuartAdapterBase[uartHandle->instance]->BAUD  = uartHandle->reg_BAUD;
825     s_LpuartAdapterBase[uartHandle->instance]->WATER = uartHandle->reg_WATER;
826     s_LpuartAdapterBase[uartHandle->instance]->MODIR = uartHandle->reg_MODIR;
827 #if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
828     /* Enable tx/rx FIFO */
829     s_LpuartAdapterBase[uartHandle->instance]->FIFO |= (LPUART_FIFO_TXFE_MASK | LPUART_FIFO_RXFE_MASK);
830     /* Flush FIFO */
831     s_LpuartAdapterBase[uartHandle->instance]->FIFO |= (LPUART_FIFO_TXFLUSH_MASK | LPUART_FIFO_RXFLUSH_MASK);
832 #endif /* FSL_FEATURE_LPUART_HAS_FIFO */
833     s_LpuartAdapterBase[uartHandle->instance]->CTRL = uartHandle->reg_CTRL;
834 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
835     s_UartState[uartHandle->instance] = handle;
836 /* Enable interrupt in NVIC. */
837 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
838     NVIC_SetPriority((IRQn_Type)s_LpuartRxIRQ[uartHandle->instance], HAL_UART_ISR_PRIORITY);
839     EnableIRQ(s_LpuartRxIRQ[uartHandle->instance]);
840     NVIC_SetPriority((IRQn_Type)s_LpuartTxIRQ[uartHandle->instance], HAL_UART_ISR_PRIORITY);
841     EnableIRQ(s_LpuartTxIRQ[uartHandle->instance]);
842 #else
843     NVIC_SetPriority((IRQn_Type)s_LpuartIRQ[uartHandle->instance], HAL_UART_ISR_PRIORITY);
844     (void)EnableIRQ(s_LpuartIRQ[uartHandle->instance]);
845 #endif
846     s_LpuartAdapterBase[uartHandle->instance]->CTRL |= LPUART_CTRL_RIE_MASK;
847     HAL_UartIsrFunction(uartHandle);
848 
849 #endif
850 #else
851     (void)HAL_UartInit(handle, &uartHandle->config);
852 #endif
853 #if (defined(HAL_UART_DMA_ENABLE) && (HAL_UART_DMA_ENABLE > 0U))
854 #if (defined(HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION) && (HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION > 0U))
855 #else
856     /* Enable RX interrupt for detecting the IDLE line interrupt. */
857     LPUART_EnableInterrupts(s_LpuartAdapterBase[uartHandle->instance], kLPUART_IdleLineInterruptEnable);
858 #endif /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
859 
860 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
861     HAL_UartDMAInit(uartHandle, uartHandle->dmaHandle, &uartHandle->dmaHandle->hal_uart_dma_config);
862     LPUART_StartRingBufferEDMA(handle);
863     ringBufferIndex[uartHandle->instance] = 0;
864 #elif (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
865 #endif /* FSL_FEATURE_SOC_EDMA_COUNT */
866 #endif
867 #endif
868     return kStatus_HAL_UartSuccess;
869 }
870 
871 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
872 
873 #if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
874 
HAL_UartTransferInstallCallback(hal_uart_handle_t handle,hal_uart_transfer_callback_t callback,void * callbackParam)875 hal_uart_status_t HAL_UartTransferInstallCallback(hal_uart_handle_t handle,
876                                                   hal_uart_transfer_callback_t callback,
877                                                   void *callbackParam)
878 {
879     hal_uart_state_t *uartHandle;
880 
881     assert(handle);
882     assert(0U != HAL_UART_TRANSFER_MODE);
883 
884     uartHandle = (hal_uart_state_t *)handle;
885 
886     uartHandle->callbackParam = callbackParam;
887     uartHandle->callback      = callback;
888 
889     return kStatus_HAL_UartSuccess;
890 }
891 
HAL_UartTransferReceiveNonBlocking(hal_uart_handle_t handle,hal_uart_transfer_t * transfer)892 hal_uart_status_t HAL_UartTransferReceiveNonBlocking(hal_uart_handle_t handle, hal_uart_transfer_t *transfer)
893 {
894     hal_uart_state_t *uartHandle;
895     status_t status;
896     assert(handle);
897     assert(transfer);
898     assert(0U != HAL_UART_TRANSFER_MODE);
899 
900     uartHandle = (hal_uart_state_t *)handle;
901 
902     status = LPUART_TransferReceiveNonBlocking(s_LpuartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle,
903                                                (lpuart_transfer_t *)(void *)transfer, NULL);
904 
905     return HAL_UartGetStatus(status);
906 }
907 
HAL_UartTransferSendNonBlocking(hal_uart_handle_t handle,hal_uart_transfer_t * transfer)908 hal_uart_status_t HAL_UartTransferSendNonBlocking(hal_uart_handle_t handle, hal_uart_transfer_t *transfer)
909 {
910     hal_uart_state_t *uartHandle;
911     status_t status;
912     assert(handle);
913     assert(transfer);
914     assert(0U != HAL_UART_TRANSFER_MODE);
915 
916     uartHandle = (hal_uart_state_t *)handle;
917 
918     status = LPUART_TransferSendNonBlocking(s_LpuartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle,
919                                             (lpuart_transfer_t *)(void *)transfer);
920 
921     return HAL_UartGetStatus(status);
922 }
923 
HAL_UartTransferGetReceiveCount(hal_uart_handle_t handle,uint32_t * count)924 hal_uart_status_t HAL_UartTransferGetReceiveCount(hal_uart_handle_t handle, uint32_t *count)
925 {
926     hal_uart_state_t *uartHandle;
927     status_t status;
928     assert(handle);
929     assert(count);
930     assert(0U != HAL_UART_TRANSFER_MODE);
931 
932     uartHandle = (hal_uart_state_t *)handle;
933 
934     status =
935         LPUART_TransferGetReceiveCount(s_LpuartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle, count);
936 
937     return HAL_UartGetStatus(status);
938 }
939 
HAL_UartTransferGetSendCount(hal_uart_handle_t handle,uint32_t * count)940 hal_uart_status_t HAL_UartTransferGetSendCount(hal_uart_handle_t handle, uint32_t *count)
941 {
942     hal_uart_state_t *uartHandle;
943     status_t status;
944     assert(handle);
945     assert(count);
946     assert(0U != HAL_UART_TRANSFER_MODE);
947 
948     uartHandle = (hal_uart_state_t *)handle;
949 
950     status = LPUART_TransferGetSendCount(s_LpuartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle, count);
951 
952     return HAL_UartGetStatus(status);
953 }
954 
HAL_UartTransferAbortReceive(hal_uart_handle_t handle)955 hal_uart_status_t HAL_UartTransferAbortReceive(hal_uart_handle_t handle)
956 {
957     hal_uart_state_t *uartHandle;
958     assert(handle);
959     assert(0U != HAL_UART_TRANSFER_MODE);
960 
961     uartHandle = (hal_uart_state_t *)handle;
962 
963     LPUART_TransferAbortReceive(s_LpuartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle);
964 
965     return kStatus_HAL_UartSuccess;
966 }
967 
HAL_UartTransferAbortSend(hal_uart_handle_t handle)968 hal_uart_status_t HAL_UartTransferAbortSend(hal_uart_handle_t handle)
969 {
970     hal_uart_state_t *uartHandle;
971     assert(handle);
972     assert(0U != HAL_UART_TRANSFER_MODE);
973 
974     uartHandle = (hal_uart_state_t *)handle;
975 
976     LPUART_TransferAbortSend(s_LpuartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle);
977 
978     return kStatus_HAL_UartSuccess;
979 }
980 
981 #else /* HAL_UART_TRANSFER_MODE */
982 
983 /* None transactional API with non-blocking mode. */
HAL_UartInstallCallback(hal_uart_handle_t handle,hal_uart_transfer_callback_t callback,void * callbackParam)984 hal_uart_status_t HAL_UartInstallCallback(hal_uart_handle_t handle,
985                                           hal_uart_transfer_callback_t callback,
986                                           void *callbackParam)
987 {
988     hal_uart_state_t *uartHandle;
989 
990     assert(NULL != handle);
991     assert(0U == HAL_UART_TRANSFER_MODE);
992 
993     uartHandle = (hal_uart_state_t *)handle;
994     uartHandle->callbackParam = callbackParam;
995     uartHandle->callback = callback;
996 
997     return kStatus_HAL_UartSuccess;
998 }
999 
HAL_UartReceiveNonBlocking(hal_uart_handle_t handle,uint8_t * data,size_t length)1000 hal_uart_status_t HAL_UartReceiveNonBlocking(hal_uart_handle_t handle, uint8_t *data, size_t length)
1001 {
1002     hal_uart_state_t *uartHandle;
1003     assert(NULL != handle);
1004     assert(NULL != data);
1005     assert(length > 0U);
1006     assert(0U == HAL_UART_TRANSFER_MODE);
1007 
1008     uartHandle = (hal_uart_state_t *)handle;
1009     if (NULL != uartHandle->rx.buffer)
1010     {
1011         return kStatus_HAL_UartRxBusy;
1012     }
1013 
1014     uartHandle->rx.bufferLength = length;
1015     uartHandle->rx.bufferSofar = 0;
1016     uartHandle->rx.buffer = data;
1017     LPUART_EnableInterrupts(s_LpuartAdapterBase[uartHandle->instance], (uint32_t)kLPUART_RxDataRegFullInterruptEnable |
1018                                                                            (uint32_t)kLPUART_RxOverrunInterruptEnable
1019 #if (defined(HAL_UART_ADAPTER_FIFO) && (HAL_UART_ADAPTER_FIFO > 0u))
1020                                                                            | (uint32_t)kLPUART_IdleLineInterruptEnable
1021 #endif
1022     );
1023     return kStatus_HAL_UartSuccess;
1024 }
1025 
HAL_UartSendNonBlocking(hal_uart_handle_t handle,uint8_t * data,size_t length)1026 hal_uart_status_t HAL_UartSendNonBlocking(hal_uart_handle_t handle, uint8_t *data, size_t length)
1027 {
1028     hal_uart_state_t *uartHandle;
1029     assert(NULL != handle);
1030     assert(NULL != data);
1031     assert(length > 0U);
1032     assert(0U == HAL_UART_TRANSFER_MODE);
1033 
1034     uartHandle = (hal_uart_state_t *)handle;
1035     if (NULL != uartHandle->tx.buffer)
1036     {
1037         return kStatus_HAL_UartTxBusy;
1038     }
1039     uartHandle->tx.bufferLength = length;
1040     uartHandle->tx.bufferSofar = 0;
1041     uartHandle->tx.buffer = data;
1042     LPUART_EnableInterrupts(s_LpuartAdapterBase[uartHandle->instance], (uint32_t)kLPUART_TxDataRegEmptyInterruptEnable);
1043     return kStatus_HAL_UartSuccess;
1044 }
1045 
HAL_UartGetReceiveCount(hal_uart_handle_t handle,uint32_t * reCount)1046 hal_uart_status_t HAL_UartGetReceiveCount(hal_uart_handle_t handle, uint32_t *reCount)
1047 {
1048     hal_uart_state_t *uartHandle;
1049     assert(NULL != handle);
1050     assert(NULL != reCount);
1051     assert(0U == HAL_UART_TRANSFER_MODE);
1052 
1053     uartHandle = (hal_uart_state_t *)handle;
1054     if (NULL != uartHandle->rx.buffer)
1055     {
1056         *reCount = uartHandle->rx.bufferSofar;
1057         return kStatus_HAL_UartSuccess;
1058     }
1059     return kStatus_HAL_UartError;
1060 }
1061 
HAL_UartGetSendCount(hal_uart_handle_t handle,uint32_t * seCount)1062 hal_uart_status_t HAL_UartGetSendCount(hal_uart_handle_t handle, uint32_t *seCount)
1063 {
1064     hal_uart_state_t *uartHandle;
1065     assert(NULL != handle);
1066     assert(NULL != seCount);
1067     assert(0U == HAL_UART_TRANSFER_MODE);
1068 
1069     uartHandle = (hal_uart_state_t *)handle;
1070     if (NULL != uartHandle->tx.buffer)
1071     {
1072         *seCount = uartHandle->tx.bufferSofar;
1073         return kStatus_HAL_UartSuccess;
1074     }
1075     return kStatus_HAL_UartError;
1076 }
1077 
HAL_UartAbortReceive(hal_uart_handle_t handle)1078 hal_uart_status_t HAL_UartAbortReceive(hal_uart_handle_t handle)
1079 {
1080     hal_uart_state_t *uartHandle;
1081     assert(NULL != handle);
1082     assert(0U == HAL_UART_TRANSFER_MODE);
1083 
1084     uartHandle = (hal_uart_state_t *)handle;
1085 
1086     if (NULL != uartHandle->rx.buffer)
1087     {
1088         LPUART_DisableInterrupts(
1089             s_LpuartAdapterBase[uartHandle->instance],
1090             (uint32_t)kLPUART_RxDataRegFullInterruptEnable | (uint32_t)kLPUART_RxOverrunInterruptEnable);
1091         uartHandle->rx.buffer = NULL;
1092     }
1093 
1094     return kStatus_HAL_UartSuccess;
1095 }
1096 
HAL_UartAbortSend(hal_uart_handle_t handle)1097 hal_uart_status_t HAL_UartAbortSend(hal_uart_handle_t handle)
1098 {
1099     hal_uart_state_t *uartHandle;
1100     assert(NULL != handle);
1101     assert(0U == HAL_UART_TRANSFER_MODE);
1102 
1103     uartHandle = (hal_uart_state_t *)handle;
1104 
1105     if (NULL != uartHandle->tx.buffer)
1106     {
1107         LPUART_DisableInterrupts(s_LpuartAdapterBase[uartHandle->instance],
1108                                  (uint32_t)kLPUART_TxDataRegEmptyInterruptEnable);
1109         uartHandle->tx.buffer = NULL;
1110     }
1111 
1112     return kStatus_HAL_UartSuccess;
1113 }
1114 
1115 #endif /* HAL_UART_TRANSFER_MODE */
1116 
1117 #if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
1118 
HAL_UartIsrFunction(hal_uart_handle_t handle)1119 void HAL_UartIsrFunction(hal_uart_handle_t handle)
1120 {
1121     hal_uart_state_t *uartHandle;
1122     assert(NULL != handle);
1123     assert(0U != HAL_UART_TRANSFER_MODE);
1124 
1125     uartHandle = (hal_uart_state_t *)handle;
1126 
1127 #if 0
1128 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
1129     DisableIRQ(s_LpuartRxIRQ[uartHandle->instance]);
1130     DisableIRQ(s_LpuartTxIRQ[uartHandle->instance]);
1131 #else
1132     DisableIRQ(s_LpuartIRQ[uartHandle->instance]);
1133 #endif
1134 #endif
1135     LPUART_TransferHandleIRQ(s_LpuartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle);
1136 #if 0
1137 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
1138     NVIC_SetPriority((IRQn_Type)s_LpuartRxIRQ[uartHandle->instance], HAL_UART_ISR_PRIORITY);
1139     EnableIRQ(s_LpuartRxIRQ[uartHandle->instance]);
1140     NVIC_SetPriority((IRQn_Type)s_LpuartTxIRQ[uartHandle->instance], HAL_UART_ISR_PRIORITY);
1141     EnableIRQ(s_LpuartTxIRQ[uartHandle->instance]);
1142 #else
1143     NVIC_SetPriority((IRQn_Type)s_LpuartIRQ[uartHandle->instance], HAL_UART_ISR_PRIORITY);
1144     EnableIRQ(s_LpuartIRQ[uartHandle->instance]);
1145 #endif
1146 #endif
1147 }
1148 
1149 #else /* HAL_UART_TRANSFER_MODE */
1150 
HAL_UartIsrFunction(hal_uart_handle_t handle)1151 void HAL_UartIsrFunction(hal_uart_handle_t handle)
1152 {
1153     hal_uart_state_t *uartHandle;
1154     assert(NULL != handle);
1155     assert(0U == HAL_UART_TRANSFER_MODE);
1156 
1157     uartHandle = (hal_uart_state_t *)handle;
1158 #if (defined(HAL_UART_DMA_ENABLE) && (HAL_UART_DMA_ENABLE > 0U))
1159     hal_uart_dma_state_t *uartDmaHandle = s_UartDmaState[uartHandle->instance];
1160 #endif
1161 #if 0
1162 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
1163     DisableIRQ(s_LpuartRxIRQ[uartHandle->instance]);
1164     DisableIRQ(s_LpuartTxIRQ[uartHandle->instance]);
1165 #else
1166     DisableIRQ(s_LpuartIRQ[uartHandle->instance]);
1167 #endif
1168 #endif
1169 #if (defined(HAL_UART_DMA_ENABLE) && (HAL_UART_DMA_ENABLE > 0U))
1170 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
1171     if ((NULL != uartDmaHandle) && (uartDmaHandle->dma_tx.buffer != NULL))
1172     {
1173         EDMA_HandleIRQ(&uartHandle->dmaHandle->txEdmaHandle);
1174     }
1175 #endif
1176 #endif
1177 
1178     HAL_UartInterruptHandle(uartHandle->instance);
1179 
1180 #if 0
1181 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
1182     NVIC_SetPriority((IRQn_Type)s_LpuartRxIRQ[uartHandle->instance], HAL_UART_ISR_PRIORITY);
1183     EnableIRQ(s_LpuartRxIRQ[uartHandle->instance]);
1184     NVIC_SetPriority((IRQn_Type)s_LpuartTxIRQ[uartHandle->instance], HAL_UART_ISR_PRIORITY);
1185     EnableIRQ(s_LpuartTxIRQ[uartHandle->instance]);
1186 #else
1187     NVIC_SetPriority((IRQn_Type)s_LpuartIRQ[uartHandle->instance], HAL_UART_ISR_PRIORITY);
1188     EnableIRQ(s_LpuartIRQ[uartHandle->instance]);
1189 #endif
1190 #endif
1191 }
1192 
1193 #if defined(FSL_FEATURE_LPUART_HAS_SHARED_IRQ0_IRQ1) && FSL_FEATURE_LPUART_HAS_SHARED_IRQ0_IRQ1
1194 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART0_LPUART1_RX_IRQHandler(void)1195 void LPUART0_LPUART1_RX_IRQHandler(void)
1196 {
1197     if ((s_UartState[0]))
1198     {
1199         if ((LPUART_STAT_OR_MASK & LPUART0->STAT) ||
1200             ((LPUART_STAT_RDRF_MASK & LPUART0->STAT) && (LPUART_CTRL_RIE_MASK & LPUART0->CTRL)) ||
1201             ((LPUART_STAT_IDLE_MASK & LPUART0->STAT) && (LPUART_STAT_IDLE_MASK & LPUART0->CTRL)))
1202         {
1203             HAL_UartInterruptHandle(0);
1204         }
1205     }
1206     if ((s_UartState[1]))
1207     {
1208         if ((LPUART_STAT_OR_MASK & LPUART1->STAT) ||
1209             ((LPUART_STAT_RDRF_MASK & LPUART1->STAT) && (LPUART_CTRL_RIE_MASK & LPUART1->CTRL)) ||
1210             ((LPUART_STAT_IDLE_MASK & LPUART1->STAT) && (LPUART_STAT_IDLE_MASK & LPUART1->CTRL)))
1211         {
1212             HAL_UartInterruptHandle(1);
1213         }
1214     }
1215     SDK_ISR_EXIT_BARRIER;
1216 }
LPUART0_LPUART1_TX_IRQHandler(void)1217 void LPUART0_LPUART1_TX_IRQHandler(void)
1218 {
1219     if ((s_UartState[0]))
1220     {
1221         if ((LPUART_STAT_OR_MASK & LPUART0->STAT) ||
1222             ((LPUART0->STAT & LPUART_STAT_TDRE_MASK) && (LPUART0->CTRL & LPUART_CTRL_TIE_MASK)) ||
1223             ((LPUART_CTRL_TCIE_MASK & LPUART0->STAT) && (LPUART_CTRL_TCIE_MASK & LPUART0->CTRL)))
1224         {
1225             HAL_UartInterruptHandle(0);
1226         }
1227     }
1228     if ((s_UartState[1]))
1229     {
1230         if ((LPUART_STAT_OR_MASK & LPUART1->STAT) ||
1231             ((LPUART1->STAT & LPUART_STAT_TDRE_MASK) && (LPUART1->CTRL & LPUART_CTRL_TIE_MASK)) ||
1232             ((LPUART_CTRL_TCIE_MASK & LPUART1->STAT) && (LPUART_CTRL_TCIE_MASK & LPUART1->CTRL)))
1233         {
1234             HAL_UartInterruptHandle(1);
1235         }
1236     }
1237     SDK_ISR_EXIT_BARRIER;
1238 }
1239 #else  /* FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ */
1240 void LPUART0_LPUART1_IRQHandler(void);
LPUART0_LPUART1_IRQHandler(void)1241 void LPUART0_LPUART1_IRQHandler(void)
1242 {
1243     uint32_t orMask;
1244     uint32_t rdrfMask;
1245     uint32_t rieMask;
1246     uint32_t tdreMask;
1247     uint32_t tieMask;
1248     uint32_t ilieMask;
1249     uint32_t tcieMask;
1250     if (NULL != (s_UartState[0]))
1251     {
1252         orMask = LPUART_STAT_OR_MASK & LPUART0->STAT;
1253         rdrfMask = LPUART_STAT_RDRF_MASK & LPUART0->STAT;
1254         rieMask = LPUART_CTRL_RIE_MASK & LPUART0->CTRL;
1255         tdreMask = LPUART0->STAT & LPUART_STAT_TDRE_MASK;
1256         tieMask = LPUART0->CTRL & LPUART_CTRL_TIE_MASK;
1257         ilieMask = LPUART0->STAT & LPUART_CTRL_ILIE_MASK;
1258         tcieMask = LPUART0->STAT & LPUART_CTRL_TCIE_MASK;
1259         if ((bool)orMask || ((bool)rdrfMask && (bool)rieMask) || ((bool)tdreMask && (bool)tieMask) || (bool)ilieMask ||
1260             (bool)tcieMask)
1261         {
1262             HAL_UartInterruptHandle(0);
1263         }
1264     }
1265     if (NULL != (s_UartState[1]))
1266     {
1267         orMask = LPUART_STAT_OR_MASK & LPUART1->STAT;
1268         rdrfMask = LPUART_STAT_RDRF_MASK & LPUART1->STAT;
1269         rieMask = LPUART_CTRL_RIE_MASK & LPUART1->CTRL;
1270         tdreMask = LPUART1->STAT & LPUART_STAT_TDRE_MASK;
1271         tieMask = LPUART1->CTRL & LPUART_CTRL_TIE_MASK;
1272         ilieMask = LPUART1->STAT & LPUART_CTRL_ILIE_MASK;
1273         tcieMask = LPUART1->STAT & LPUART_CTRL_TCIE_MASK;
1274         if ((bool)orMask || ((bool)rdrfMask && (bool)rieMask) || ((bool)tdreMask && (bool)tieMask) || (bool)ilieMask ||
1275             (bool)tcieMask)
1276         {
1277             HAL_UartInterruptHandle(1);
1278         }
1279     }
1280     SDK_ISR_EXIT_BARRIER;
1281 }
1282 #endif /* FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ */
1283 #endif /* FSL_FEATURE_LPUART_HAS_SHARED_IRQ0_IRQ1 */
1284 
1285 #if defined(LPUART0)
1286 #if !(defined(FSL_FEATURE_LPUART_HAS_SHARED_IRQ0_IRQ1) && FSL_FEATURE_LPUART_HAS_SHARED_IRQ0_IRQ1)
1287 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART0_TX_IRQHandler(void)1288 void LPUART0_TX_IRQHandler(void)
1289 {
1290     HAL_UartInterruptHandle(0);
1291     SDK_ISR_EXIT_BARRIER;
1292 }
LPUART0_RX_IRQHandler(void)1293 void LPUART0_RX_IRQHandler(void)
1294 {
1295     HAL_UartInterruptHandle(0);
1296     SDK_ISR_EXIT_BARRIER;
1297 }
1298 #else
1299 #if defined(LP_FLEXCOMM0)
1300 void LP_FLEXCOMM0_IRQHandler(void);
LP_FLEXCOMM0_IRQHandler(void)1301 void LP_FLEXCOMM0_IRQHandler(void)
1302 #else /* LP_FLEXCOMM0 */
1303 void LPUART0_IRQHandler(void);
1304 void LPUART0_IRQHandler(void)
1305 #endif /* LP_FLEXCOMM0 */
1306 {
1307     HAL_UartInterruptHandle(0);
1308     SDK_ISR_EXIT_BARRIER;
1309 }
1310 #endif /* FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ */
1311 #endif /* FSL_FEATURE_LPUART_HAS_SHARED_IRQ0_IRQ1 */
1312 #endif /* LPUART0 */
1313 
1314 #if defined(LPUART1)
1315 #if !(defined(FSL_FEATURE_LPUART_HAS_SHARED_IRQ0_IRQ1) && FSL_FEATURE_LPUART_HAS_SHARED_IRQ0_IRQ1)
1316 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART1_TX_IRQHandler(void)1317 void LPUART1_TX_IRQHandler(void)
1318 {
1319     HAL_UartInterruptHandle(1);
1320     SDK_ISR_EXIT_BARRIER;
1321 }
LPUART1_RX_IRQHandler(void)1322 void LPUART1_RX_IRQHandler(void)
1323 {
1324     HAL_UartInterruptHandle(1);
1325     SDK_ISR_EXIT_BARRIER;
1326 }
1327 #else  /* FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ */
1328 #if defined(LP_FLEXCOMM1)
1329 void LP_FLEXCOMM1_IRQHandler(void);
LP_FLEXCOMM1_IRQHandler(void)1330 void LP_FLEXCOMM1_IRQHandler(void)
1331 #else /* LP_FLEXCOMM1 */
1332 void LPUART1_IRQHandler(void);
1333 void LPUART1_IRQHandler(void)
1334 #endif /* LP_FLEXCOMM1 */
1335 {
1336     HAL_UartInterruptHandle(1);
1337     SDK_ISR_EXIT_BARRIER;
1338 }
1339 #endif /* FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ */
1340 #endif /* FSL_FEATURE_LPUART_HAS_SHARED_IRQ0_IRQ1 */
1341 #endif /* LPUART1 */
1342 
1343 #if defined(LPUART2)
1344 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART2_TX_IRQHandler(void)1345 void LPUART2_TX_IRQHandler(void)
1346 {
1347     HAL_UartInterruptHandle(2);
1348     SDK_ISR_EXIT_BARRIER;
1349 }
LPUART2_RX_IRQHandler(void)1350 void LPUART2_RX_IRQHandler(void)
1351 {
1352     HAL_UartInterruptHandle(2);
1353     SDK_ISR_EXIT_BARRIER;
1354 }
1355 #else
1356 #if defined(LP_FLEXCOMM2)
1357 void LP_FLEXCOMM2_IRQHandler(void);
LP_FLEXCOMM2_IRQHandler(void)1358 void LP_FLEXCOMM2_IRQHandler(void)
1359 #else /* LP_FLEXCOMM2 */
1360 void LPUART2_IRQHandler(void);
1361 void LPUART2_IRQHandler(void)
1362 #endif /* LP_FLEXCOMM2 */
1363 {
1364     HAL_UartInterruptHandle(2);
1365     SDK_ISR_EXIT_BARRIER;
1366 }
1367 #endif
1368 #endif /* LPUART2 */
1369 
1370 #if defined(LPUART3)
1371 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART3_TX_IRQHandler(void)1372 void LPUART3_TX_IRQHandler(void)
1373 {
1374     HAL_UartInterruptHandle(3);
1375     SDK_ISR_EXIT_BARRIER;
1376 }
LPUART3_RX_IRQHandler(void)1377 void LPUART3_RX_IRQHandler(void)
1378 {
1379     HAL_UartInterruptHandle(3);
1380     SDK_ISR_EXIT_BARRIER;
1381 }
1382 #else
1383 #if defined(LP_FLEXCOMM3)
1384 void LP_FLEXCOMM3_IRQHandler(void);
LP_FLEXCOMM3_IRQHandler(void)1385 void LP_FLEXCOMM3_IRQHandler(void)
1386 #else /* LP_FLEXCOMM3 */
1387 void LPUART3_IRQHandler(void);
1388 void LPUART3_IRQHandler(void)
1389 #endif /* LP_FLEXCOMM3 */
1390 {
1391     HAL_UartInterruptHandle(3);
1392     SDK_ISR_EXIT_BARRIER;
1393 }
1394 #endif
1395 #endif /* LPUART3 */
1396 
1397 #if defined(LPUART4)
1398 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART4_TX_IRQHandler(void)1399 void LPUART4_TX_IRQHandler(void)
1400 {
1401     HAL_UartInterruptHandle(4);
1402     SDK_ISR_EXIT_BARRIER;
1403 }
LPUART4_RX_IRQHandler(void)1404 void LPUART4_RX_IRQHandler(void)
1405 {
1406     HAL_UartInterruptHandle(4);
1407     SDK_ISR_EXIT_BARRIER;
1408 }
1409 #else
1410 #if defined(LP_FLEXCOMM4)
1411 void LP_FLEXCOMM4_IRQHandler(void);
LP_FLEXCOMM4_IRQHandler(void)1412 void LP_FLEXCOMM4_IRQHandler(void)
1413 #else /* LP_FLEXCOMM4 */
1414 void LPUART4_IRQHandler(void);
1415 void LPUART4_IRQHandler(void)
1416 #endif /* LP_FLEXCOMM4 */
1417 {
1418     HAL_UartInterruptHandle(4);
1419     SDK_ISR_EXIT_BARRIER;
1420 }
1421 #endif
1422 #endif /* LPUART4 */
1423 
1424 #if defined(LPUART5)
1425 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART5_TX_IRQHandler(void)1426 void LPUART5_TX_IRQHandler(void)
1427 {
1428     HAL_UartInterruptHandle(5);
1429     SDK_ISR_EXIT_BARRIER;
1430 }
LPUART5_RX_IRQHandler(void)1431 void LPUART5_RX_IRQHandler(void)
1432 {
1433     HAL_UartInterruptHandle(5);
1434     SDK_ISR_EXIT_BARRIER;
1435 }
1436 #else
1437 #if defined(LP_FLEXCOMM5)
1438 void LP_FLEXCOMM5_IRQHandler(void);
LP_FLEXCOMM5_IRQHandler(void)1439 void LP_FLEXCOMM5_IRQHandler(void)
1440 #else /* LP_FLEXCOMM5 */
1441 void LPUART5_IRQHandler(void);
1442 void LPUART5_IRQHandler(void)
1443 #endif /* LP_FLEXCOMM5 */
1444 {
1445     HAL_UartInterruptHandle(5);
1446     SDK_ISR_EXIT_BARRIER;
1447 }
1448 #endif
1449 #endif /* LPUART5 */
1450 
1451 #if defined(LPUART6)
1452 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART6_TX_IRQHandler(void)1453 void LPUART6_TX_IRQHandler(void)
1454 {
1455     HAL_UartInterruptHandle(6);
1456     SDK_ISR_EXIT_BARRIER;
1457 }
LPUART6_RX_IRQHandler(void)1458 void LPUART6_RX_IRQHandler(void)
1459 {
1460     HAL_UartInterruptHandle(6);
1461     SDK_ISR_EXIT_BARRIER;
1462 }
1463 #else
1464 #if defined(LP_FLEXCOMM6)
1465 void LP_FLEXCOMM6_IRQHandler(void);
LP_FLEXCOMM6_IRQHandler(void)1466 void LP_FLEXCOMM6_IRQHandler(void)
1467 #else /* LP_FLEXCOMM6 */
1468 void LPUART6_IRQHandler(void);
1469 void LPUART6_IRQHandler(void)
1470 #endif /* LP_FLEXCOMM6 */
1471 {
1472     HAL_UartInterruptHandle(6);
1473     SDK_ISR_EXIT_BARRIER;
1474 }
1475 #endif
1476 #endif /* LPUART6 */
1477 
1478 #if defined(LPUART7)
1479 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART7_TX_IRQHandler(void)1480 void LPUART7_TX_IRQHandler(void)
1481 {
1482     HAL_UartInterruptHandle(7);
1483     SDK_ISR_EXIT_BARRIER;
1484 }
LPUART7_RX_IRQHandler(void)1485 void LPUART7_RX_IRQHandler(void)
1486 {
1487     HAL_UartInterruptHandle(7);
1488     SDK_ISR_EXIT_BARRIER;
1489 }
1490 #else
1491 #if defined(LP_FLEXCOMM7)
1492 void LP_FLEXCOMM7_IRQHandler(void);
LP_FLEXCOMM7_IRQHandler(void)1493 void LP_FLEXCOMM7_IRQHandler(void)
1494 #else /* LP_FLEXCOMM7 */
1495 void LPUART7_IRQHandler(void);
1496 void LPUART7_IRQHandler(void)
1497 #endif /* LP_FLEXCOMM7 */
1498 {
1499     HAL_UartInterruptHandle(7);
1500     SDK_ISR_EXIT_BARRIER;
1501 }
1502 #endif
1503 #endif /* LPUART7 */
1504 
1505 #if defined(LPUART8)
1506 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART8_TX_IRQHandler(void)1507 void LPUART8_TX_IRQHandler(void)
1508 {
1509     HAL_UartInterruptHandle(8);
1510     SDK_ISR_EXIT_BARRIER;
1511 }
LPUART8_RX_IRQHandler(void)1512 void LPUART8_RX_IRQHandler(void)
1513 {
1514     HAL_UartInterruptHandle(8);
1515     SDK_ISR_EXIT_BARRIER;
1516 }
1517 #else
1518 #if defined(LP_FLEXCOMM8)
1519 void LP_FLEXCOMM8_IRQHandler(void);
LP_FLEXCOMM8_IRQHandler(void)1520 void LP_FLEXCOMM8_IRQHandler(void)
1521 #else /* LP_FLEXCOMM8 */
1522 void LPUART8_IRQHandler(void);
1523 void LPUART8_IRQHandler(void)
1524 #endif /* LP_FLEXCOMM8 */
1525 {
1526     HAL_UartInterruptHandle(8);
1527     SDK_ISR_EXIT_BARRIER;
1528 }
1529 #endif
1530 #endif /* LPUART8 */
1531 
1532 #if defined(LPUART9)
1533 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART9_TX_IRQHandler(void)1534 void LPUART9_TX_IRQHandler(void)
1535 {
1536     HAL_UartInterruptHandle(9);
1537     SDK_ISR_EXIT_BARRIER;
1538 }
LPUART9_RX_IRQHandler(void)1539 void LPUART9_RX_IRQHandler(void)
1540 {
1541     HAL_UartInterruptHandle(9);
1542     SDK_ISR_EXIT_BARRIER;
1543 }
1544 #else
1545 #if defined(LP_FLEXCOMM9)
1546 void LP_FLEXCOMM9_IRQHandler(void);
LP_FLEXCOMM9_IRQHandler(void)1547 void LP_FLEXCOMM9_IRQHandler(void)
1548 #else /* LP_FLEXCOMM9 */
1549 void LPUART9_IRQHandler(void);
1550 void LPUART9_IRQHandler(void)
1551 #endif /* LP_FLEXCOMM9 */
1552 {
1553     HAL_UartInterruptHandle(9);
1554     SDK_ISR_EXIT_BARRIER;
1555 }
1556 #endif
1557 #endif /* LPUART9 */
1558 
1559 #if defined(LPUART10)
1560 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART10_TX_IRQHandler(void)1561 void LPUART10_TX_IRQHandler(void)
1562 {
1563     HAL_UartInterruptHandle(10);
1564     SDK_ISR_EXIT_BARRIER;
1565 }
LPUART10_RX_IRQHandler(void)1566 void LPUART10_RX_IRQHandler(void)
1567 {
1568     HAL_UartInterruptHandle(10);
1569     SDK_ISR_EXIT_BARRIER;
1570 }
1571 #else
1572 #if defined(LP_FLEXCOMM10)
1573 void LP_FLEXCOMM10_IRQHandler(void);
LP_FLEXCOMM10_IRQHandler(void)1574 void LP_FLEXCOMM10_IRQHandler(void)
1575 #else /* LP_FLEXCOMM10 */
1576 void LPUART10_IRQHandler(void);
1577 void LPUART10_IRQHandler(void)
1578 #endif /* LP_FLEXCOMM10 */
1579 {
1580     HAL_UartInterruptHandle(10);
1581     SDK_ISR_EXIT_BARRIER;
1582 }
1583 #endif
1584 #endif /* LPUART10 */
1585 
1586 #if defined(LPUART11)
1587 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART11_TX_IRQHandler(void)1588 void LPUART11_TX_IRQHandler(void)
1589 {
1590     HAL_UartInterruptHandle(11);
1591     SDK_ISR_EXIT_BARRIER;
1592 }
LPUART11_RX_IRQHandler(void)1593 void LPUART11_RX_IRQHandler(void)
1594 {
1595     HAL_UartInterruptHandle(11);
1596     SDK_ISR_EXIT_BARRIER;
1597 }
1598 #else
1599 #if defined(LP_FLEXCOMM11)
1600 void LP_FLEXCOMM11_IRQHandler(void);
LP_FLEXCOMM11_IRQHandler(void)1601 void LP_FLEXCOMM11_IRQHandler(void)
1602 #else /* LP_FLEXCOMM11 */
1603 void LPUART11_IRQHandler(void);
1604 void LPUART11_IRQHandler(void)
1605 #endif /* LP_FLEXCOMM11 */
1606 {
1607     HAL_UartInterruptHandle(11);
1608     SDK_ISR_EXIT_BARRIER;
1609 }
1610 #endif
1611 #endif /* LPUART11 */
1612 
1613 #if defined(LPUART12)
1614 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART12_TX_IRQHandler(void)1615 void LPUART12_TX_IRQHandler(void)
1616 {
1617     HAL_UartInterruptHandle(12);
1618     SDK_ISR_EXIT_BARRIER;
1619 }
LPUART12_RX_IRQHandler(void)1620 void LPUART12_RX_IRQHandler(void)
1621 {
1622     HAL_UartInterruptHandle(12);
1623     SDK_ISR_EXIT_BARRIER;
1624 }
1625 #else
1626 #if defined(LP_FLEXCOMM12)
1627 void LP_FLEXCOMM12_IRQHandler(void);
LP_FLEXCOMM12_IRQHandler(void)1628 void LP_FLEXCOMM12_IRQHandler(void)
1629 #else /* LP_FLEXCOMM12 */
1630 void LPUART12_IRQHandler(void);
1631 void LPUART12_IRQHandler(void)
1632 #endif /* LP_FLEXCOMM12 */
1633 {
1634     HAL_UartInterruptHandle(12);
1635     SDK_ISR_EXIT_BARRIER;
1636 }
1637 #endif
1638 #endif /* LPUART12 */
1639 
1640 #if defined(LPUART13)
1641 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART13_TX_IRQHandler(void)1642 void LPUART13_TX_IRQHandler(void)
1643 {
1644     HAL_UartInterruptHandle(13);
1645     SDK_ISR_EXIT_BARRIER;
1646 }
LPUART13_RX_IRQHandler(void)1647 void LPUART13_RX_IRQHandler(void)
1648 {
1649     HAL_UartInterruptHandle(13);
1650     SDK_ISR_EXIT_BARRIER;
1651 }
1652 #else
1653 #if defined(LP_FLEXCOMM13)
1654 void LP_FLEXCOMM13_IRQHandler(void);
LP_FLEXCOMM13_IRQHandler(void)1655 void LP_FLEXCOMM13_IRQHandler(void)
1656 #else /* LP_FLEXCOMM13 */
1657 void LPUART13_IRQHandler(void);
1658 void LPUART13_IRQHandler(void)
1659 #endif /* LP_FLEXCOMM13 */
1660 {
1661     HAL_UartInterruptHandle(13);
1662     SDK_ISR_EXIT_BARRIER;
1663 }
1664 #endif
1665 #endif /* LPUART13 */
1666 
1667 #if defined(LPUART17)
1668 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART17_TX_IRQHandler(void)1669 void LPUART17_TX_IRQHandler(void)
1670 {
1671     HAL_UartInterruptHandle(17);
1672     SDK_ISR_EXIT_BARRIER;
1673 }
LPUART17_RX_IRQHandler(void)1674 void LPUART17_RX_IRQHandler(void)
1675 {
1676     HAL_UartInterruptHandle(17);
1677     SDK_ISR_EXIT_BARRIER;
1678 }
1679 #else
1680 #if defined(LP_FLEXCOMM17)
1681 void LP_FLEXCOMM17_IRQHandler(void);
LP_FLEXCOMM17_IRQHandler(void)1682 void LP_FLEXCOMM17_IRQHandler(void)
1683 #else /* LP_FLEXCOMM17 */
1684 void LPUART17_IRQHandler(void);
1685 void LPUART17_IRQHandler(void)
1686 #endif /* LP_FLEXCOMM17 */
1687 {
1688     HAL_UartInterruptHandle(17);
1689     SDK_ISR_EXIT_BARRIER;
1690 }
1691 #endif
1692 #endif /* LPUART17 */
1693 
1694 #if defined(LPUART18)
1695 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART18_TX_IRQHandler(void)1696 void LPUART18_TX_IRQHandler(void)
1697 {
1698     HAL_UartInterruptHandle(18);
1699     SDK_ISR_EXIT_BARRIER;
1700 }
LPUART18_RX_IRQHandler(void)1701 void LPUART18_RX_IRQHandler(void)
1702 {
1703     HAL_UartInterruptHandle(18);
1704     SDK_ISR_EXIT_BARRIER;
1705 }
1706 #else
1707 #if defined(LP_FLEXCOMM18)
1708 void LP_FLEXCOMM18_IRQHandler(void);
LP_FLEXCOMM18_IRQHandler(void)1709 void LP_FLEXCOMM18_IRQHandler(void)
1710 #else /* LP_FLEXCOMM18 */
1711 void LPUART18_IRQHandler(void);
1712 void LPUART18_IRQHandler(void)
1713 #endif /* LP_FLEXCOMM18 */
1714 {
1715     HAL_UartInterruptHandle(18);
1716     SDK_ISR_EXIT_BARRIER;
1717 }
1718 #endif
1719 #endif /* LPUART18 */
1720 
1721 #if defined(LPUART19)
1722 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART19_TX_IRQHandler(void)1723 void LPUART19_TX_IRQHandler(void)
1724 {
1725     HAL_UartInterruptHandle(19);
1726     SDK_ISR_EXIT_BARRIER;
1727 }
LPUART19_RX_IRQHandler(void)1728 void LPUART19_RX_IRQHandler(void)
1729 {
1730     HAL_UartInterruptHandle(19);
1731     SDK_ISR_EXIT_BARRIER;
1732 }
1733 #else
1734 #if defined(LP_FLEXCOMM19)
1735 void LP_FLEXCOMM19_IRQHandler(void);
LP_FLEXCOMM19_IRQHandler(void)1736 void LP_FLEXCOMM19_IRQHandler(void)
1737 #else /* LP_FLEXCOMM19 */
1738 void LPUART19_IRQHandler(void);
1739 void LPUART19_IRQHandler(void)
1740 #endif /* LP_FLEXCOMM19 */
1741 {
1742     HAL_UartInterruptHandle(19);
1743     SDK_ISR_EXIT_BARRIER;
1744 }
1745 #endif
1746 #endif /* LPUART19 */
1747 
1748 #if defined(LPUART20)
1749 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
LPUART20_TX_IRQHandler(void)1750 void LPUART20_TX_IRQHandler(void)
1751 {
1752     HAL_UartInterruptHandle(20);
1753     SDK_ISR_EXIT_BARRIER;
1754 }
LPUART20_RX_IRQHandler(void)1755 void LPUART20_RX_IRQHandler(void)
1756 {
1757     HAL_UartInterruptHandle(20);
1758     SDK_ISR_EXIT_BARRIER;
1759 }
1760 #else
1761 #if defined(LP_FLEXCOMM20)
1762 void LP_FLEXCOMM20_IRQHandler(void);
LP_FLEXCOMM20_IRQHandler(void)1763 void LP_FLEXCOMM20_IRQHandler(void)
1764 #else /* LP_FLEXCOMM20 */
1765 void LPUART20_IRQHandler(void);
1766 void LPUART20_IRQHandler(void)
1767 #endif /* LP_FLEXCOMM20 */
1768 {
1769     HAL_UartInterruptHandle(20);
1770     SDK_ISR_EXIT_BARRIER;
1771 }
1772 #endif
1773 #endif /* LPUART20 */
1774 
1775 #if defined(CM4_0__LPUART)
1776 void M4_0_LPUART_IRQHandler(void);
M4_0_LPUART_IRQHandler(void)1777 void M4_0_LPUART_IRQHandler(void)
1778 {
1779     HAL_UartInterruptHandle(LPUART_GetInstance(CM4_0__LPUART));
1780     SDK_ISR_EXIT_BARRIER;
1781 }
1782 #endif
1783 
1784 #if defined(CM4_1__LPUART)
1785 void M4_1_LPUART_IRQHandler(void);
M4_1_LPUART_IRQHandler(void)1786 void M4_1_LPUART_IRQHandler(void)
1787 {
1788     HAL_UartInterruptHandle(LPUART_GetInstance(CM4_1__LPUART));
1789     SDK_ISR_EXIT_BARRIER;
1790 }
1791 #endif
1792 
1793 #if defined(CM4__LPUART)
1794 void M4_LPUART_IRQHandler(void);
M4_LPUART_IRQHandler(void)1795 void M4_LPUART_IRQHandler(void)
1796 {
1797     HAL_UartInterruptHandle((uint8_t)LPUART_GetInstance(CM4__LPUART));
1798     SDK_ISR_EXIT_BARRIER;
1799 }
1800 #endif
1801 
1802 #if defined(DMA__LPUART0)
DMA_UART0_INT_IRQHandler(void)1803 void DMA_UART0_INT_IRQHandler(void)
1804 {
1805     HAL_UartInterruptHandle(LPUART_GetInstance(DMA__LPUART0));
1806     SDK_ISR_EXIT_BARRIER;
1807 }
1808 #endif
1809 
1810 #if defined(DMA__LPUART1)
DMA_UART1_INT_IRQHandler(void)1811 void DMA_UART1_INT_IRQHandler(void)
1812 {
1813     HAL_UartInterruptHandle(LPUART_GetInstance(DMA__LPUART1));
1814     SDK_ISR_EXIT_BARRIER;
1815 }
1816 #endif
1817 
1818 #if defined(DMA__LPUART2)
DMA_UART2_INT_IRQHandler(void)1819 void DMA_UART2_INT_IRQHandler(void)
1820 {
1821     HAL_UartInterruptHandle(LPUART_GetInstance(DMA__LPUART2));
1822     SDK_ISR_EXIT_BARRIER;
1823 }
1824 #endif
1825 
1826 #if defined(DMA__LPUART3)
DMA_UART3_INT_IRQHandler(void)1827 void DMA_UART3_INT_IRQHandler(void)
1828 {
1829     HAL_UartInterruptHandle(LPUART_GetInstance(DMA__LPUART3));
1830     SDK_ISR_EXIT_BARRIER;
1831 }
1832 #endif
1833 
1834 #if defined(DMA__LPUART4)
DMA_UART4_INT_IRQHandler(void)1835 void DMA_UART4_INT_IRQHandler(void)
1836 {
1837     HAL_UartInterruptHandle(LPUART_GetInstance(DMA__LPUART4));
1838     SDK_ISR_EXIT_BARRIER;
1839 }
1840 #endif
1841 
1842 #if defined(ADMA__LPUART0)
1843 void ADMA_UART0_INT_IRQHandler(void);
ADMA_UART0_INT_IRQHandler(void)1844 void ADMA_UART0_INT_IRQHandler(void)
1845 {
1846     HAL_UartInterruptHandle((uint8_t)LPUART_GetInstance(ADMA__LPUART0));
1847     SDK_ISR_EXIT_BARRIER;
1848 }
1849 #endif
1850 
1851 #if defined(ADMA__LPUART1)
1852 void ADMA_UART1_INT_IRQHandler(void);
ADMA_UART1_INT_IRQHandler(void)1853 void ADMA_UART1_INT_IRQHandler(void)
1854 {
1855     HAL_UartInterruptHandle((uint8_t)LPUART_GetInstance(ADMA__LPUART1));
1856     SDK_ISR_EXIT_BARRIER;
1857 }
1858 #endif
1859 
1860 #if defined(ADMA__LPUART2)
1861 void ADMA_UART2_INT_IRQHandler(void);
ADMA_UART2_INT_IRQHandler(void)1862 void ADMA_UART2_INT_IRQHandler(void)
1863 {
1864     HAL_UartInterruptHandle((uint8_t)LPUART_GetInstance(ADMA__LPUART2));
1865     SDK_ISR_EXIT_BARRIER;
1866 }
1867 #endif
1868 
1869 #if defined(ADMA__LPUART3)
1870 void ADMA_UART3_INT_IRQHandler(void);
ADMA_UART3_INT_IRQHandler(void)1871 void ADMA_UART3_INT_IRQHandler(void)
1872 {
1873     HAL_UartInterruptHandle((uint8_t)LPUART_GetInstance(ADMA__LPUART3));
1874     SDK_ISR_EXIT_BARRIER;
1875 }
1876 #endif
1877 
1878 #endif /* HAL_UART_TRANSFER_MODE */
1879 
1880 #endif /* UART_ADAPTER_NON_BLOCKING_MODE */
1881 
1882 #if (defined(HAL_UART_DMA_ENABLE) && (HAL_UART_DMA_ENABLE > 0U))
1883 #if (defined(HAL_UART_DMA_RING_BUFFER_ENABLE) && (HAL_UART_DMA_RING_BUFFER_ENABLE > 0U))
1884 static volatile uint32_t ringBufferFlag = 0U;
1885 /* LPUART RX EDMA call back. */
LPUART_RxEDMACallback(edma_handle_t * handle,void * param,bool transferDone,uint32_t tcds)1886 static void LPUART_RxEDMACallback(edma_handle_t *handle, void *param, bool transferDone, uint32_t tcds)
1887 {
1888     if (true == transferDone)
1889     {
1890         ringBufferFlag++;
1891     }
1892 }
1893 
1894 /* Start ring buffer. */
LPUART_StartRingBufferEDMA(hal_uart_handle_t handle)1895 static void LPUART_StartRingBufferEDMA(hal_uart_handle_t handle)
1896 {
1897     hal_uart_state_t *uartHandle;
1898     hal_uart_dma_state_t *uartDmaHandle;
1899 
1900     assert(handle);
1901 
1902     uartHandle    = (hal_uart_state_t *)handle;
1903     uartDmaHandle = uartHandle->dmaHandle;
1904 
1905     edma_transfer_config_t xferConfig;
1906 
1907     /* Install TCD memory for using only one TCD queue. */
1908     EDMA_InstallTCDMemory(&uartDmaHandle->rxEdmaHandle, (edma_tcd_t *)&tcdMemoryPoolPtr[uartHandle->instance], 1U);
1909 
1910     /* Prepare transfer to receive data to ring buffer. */
1911     EDMA_PrepareTransfer(&xferConfig,
1912                          (void *)(uint32_t *)LPUART_GetDataRegisterAddress(s_LpuartAdapterBase[uartHandle->instance]),
1913                          sizeof(uint8_t), &s_ringBuffer[uartHandle->instance], sizeof(uint8_t), sizeof(uint8_t),
1914                          LPUART_RING_BUFFER_SIZE, kEDMA_PeripheralToMemory);
1915 
1916     /* Submit transfer. */
1917     uartDmaHandle->rxEdmaHandle.tcdUsed = 1U;
1918     uartDmaHandle->rxEdmaHandle.tail    = 0U;
1919     EDMA_TcdReset(&uartDmaHandle->rxEdmaHandle.tcdPool[0U]);
1920     EDMA_TcdSetTransferConfig(&uartDmaHandle->rxEdmaHandle.tcdPool[0U], &xferConfig,
1921                               tcdMemoryPoolPtr[uartHandle->instance]);
1922 
1923     /* Enable major interrupt for counting received bytes. */
1924     uartDmaHandle->rxEdmaHandle.tcdPool[0U].CSR |= 0x2U;
1925 
1926     /* There is no live chain, TCD block need to be installed in TCD registers. */
1927     EDMA_InstallTCD(uartDmaHandle->rxEdmaHandle.base, uartDmaHandle->rxEdmaHandle.channel,
1928                     &uartDmaHandle->rxEdmaHandle.tcdPool[0U]);
1929 
1930     /* Setup call back function. */
1931     EDMA_SetCallback(&uartDmaHandle->rxEdmaHandle, LPUART_RxEDMACallback, NULL);
1932 
1933     /* Start EDMA transfer. */
1934     EDMA_StartTransfer(&uartDmaHandle->rxEdmaHandle);
1935 
1936     /* Enable LPUART RX EDMA. */
1937     LPUART_EnableRxDMA(s_LpuartAdapterBase[uartHandle->instance], true);
1938 
1939     /* Enable RX interrupt for detecting the IDLE line interrupt. */
1940     LPUART_EnableInterrupts(s_LpuartAdapterBase[uartHandle->instance], (uint32_t)kLPUART_IdleLineInterruptEnable);
1941     //   EnableIRQ(s_LpuartRxIRQ[uartHandle->instance]);
1942 }
1943 #endif
1944 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
LPUART_DMACallbacks(LPUART_Type * base,lpuart_edma_handle_t * handle,status_t status,void * userData)1945 static void LPUART_DMACallbacks(LPUART_Type *base, lpuart_edma_handle_t *handle, status_t status, void *userData)
1946 {
1947     hal_uart_dma_state_t *uartDmaHandle;
1948     hal_uart_status_t uartStatus = HAL_UartGetStatus(status);
1949     hal_dma_callback_msg_t dmaMsg;
1950     assert(handle);
1951 
1952     uartDmaHandle = (hal_uart_dma_state_t *)userData;
1953 
1954     if (NULL != uartDmaHandle->dma_callback)
1955     {
1956         if (kStatus_HAL_UartTxIdle == uartStatus)
1957         {
1958             dmaMsg.status                   = kStatus_HAL_UartDmaTxIdle;
1959             dmaMsg.data                     = uartDmaHandle->dma_tx.buffer;
1960             dmaMsg.dataSize                 = uartDmaHandle->dma_tx.bufferLength;
1961             uartDmaHandle->dma_tx.buffer = NULL;
1962         }
1963         else if (kStatus_HAL_UartRxIdle == uartStatus)
1964         {
1965             dmaMsg.status                   = kStatus_HAL_UartDmaRxIdle;
1966             dmaMsg.data                     = uartDmaHandle->dma_rx.buffer;
1967             dmaMsg.dataSize                 = uartDmaHandle->dma_rx.bufferLength;
1968             uartDmaHandle->dma_rx.buffer = NULL;
1969         }
1970         else
1971         {
1972             /* MISRA */
1973         }
1974 
1975         uartDmaHandle->dma_callback(uartDmaHandle, &dmaMsg, uartDmaHandle->dma_callback_param);
1976     }
1977 }
1978 #endif
1979 #if (defined(HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION) && (HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION > 0U))
TimeoutTimer_Callbcak(void * param)1980 static void TimeoutTimer_Callbcak(void *param)
1981 {
1982     hal_lpuart_dma_list_t *uartDmaHandleList;
1983     hal_uart_dma_state_t *uartDmaHandle;
1984     hal_dma_callback_msg_t dmaMsg;
1985     uint32_t newReceived = 0U;
1986 
1987     uartDmaHandleList = (hal_lpuart_dma_list_t *)param;
1988     uartDmaHandle     = uartDmaHandleList->dma_list;
1989 
1990     while (NULL != uartDmaHandle)
1991     {
1992         if ((NULL != uartDmaHandle->dma_rx.buffer) && (false == uartDmaHandle->dma_rx.receiveAll))
1993         {
1994             /* HAL_UartDMAGetReceiveCount(uartDmaHandle, &msg.dataSize); */
1995 #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
1996 
1997 #elif (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
1998             LPUART_TransferGetReceiveCountEDMA(s_LpuartAdapterBase[uartDmaHandle->instance], &uartDmaHandle->edmaHandle,
1999                                                &dmaMsg.dataSize);
2000 #endif /* FSL_FEATURE_SOC_EDMA_COUNT */
2001             newReceived                       = dmaMsg.dataSize - uartDmaHandle->dma_rx.bufferSofar;
2002             uartDmaHandle->dma_rx.bufferSofar = dmaMsg.dataSize;
2003 
2004             /* 1, If it is in idle state. */
2005             if ((0U == newReceived) && (0U < uartDmaHandle->dma_rx.bufferSofar))
2006             {
2007                 uartDmaHandle->dma_rx.timeout++;
2008                 if (uartDmaHandle->dma_rx.timeout >= HAL_UART_DMA_IDLELINE_TIMEOUT)
2009                 {
2010                     /* HAL_UartDMAAbortReceive(uartDmaHandle); */
2011 #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
2012 
2013 #elif (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
2014                     LPUART_TransferAbortReceiveEDMA(s_LpuartAdapterBase[uartDmaHandle->instance],
2015                                                     &uartDmaHandle->edmaHandle);
2016 #endif /* FSL_FEATURE_SOC_EDMA_COUNT */
2017                     dmaMsg.data                     = uartDmaHandle->dma_rx.buffer;
2018                     dmaMsg.status                   = kStatus_HAL_UartDmaIdleline;
2019                     uartDmaHandle->dma_rx.buffer = NULL;
2020                     uartDmaHandle->dma_callback(uartDmaHandle, &dmaMsg, uartDmaHandle->dma_callback_param);
2021                 }
2022             }
2023             /* 2, If got new data again. */
2024             if ((0U < newReceived) && (0U < uartDmaHandle->dma_rx.bufferSofar))
2025             {
2026                 uartDmaHandle->dma_rx.timeout = 0U;
2027             }
2028         }
2029 
2030         uartDmaHandle = uartDmaHandle->next;
2031     }
2032 }
2033 #endif /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
2034 
HAL_UartDMAInit(hal_uart_handle_t handle,hal_uart_dma_handle_t dmaHandle,hal_uart_dma_config_t * dmaConfig)2035 hal_uart_dma_status_t HAL_UartDMAInit(hal_uart_handle_t handle,
2036                                       hal_uart_dma_handle_t dmaHandle,
2037                                       hal_uart_dma_config_t *dmaConfig)
2038 {
2039     hal_uart_state_t *uartHandle;
2040     hal_uart_dma_state_t *uartDmaHandle;
2041 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
2042 #if (defined(HAL_UART_DMA_INIT_ENABLE) && (HAL_UART_DMA_INIT_ENABLE > 0U))
2043     edma_config_t config;
2044 #endif /* HAL_UART_DMA_INIT_ENABLE > 0 */
2045 #endif
2046     assert(handle);
2047 
2048     uartHandle            = (hal_uart_state_t *)handle;
2049     uartDmaHandle         = (hal_uart_dma_state_t *)dmaHandle;
2050     uartHandle->dmaHandle = uartDmaHandle;
2051 
2052     /* DMA init process. */
2053     uartDmaHandle->instance = dmaConfig->uart_instance;
2054 
2055 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
2056 #if (defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && (FSL_FEATURE_SOC_DMAMUX_COUNT > 0U))
2057     dma_mux_configure_t *dmaMux = dmaConfig->dma_mux_configure;
2058     /* Set channel for LPUART */
2059     DMAMUX_Type *dmaMuxBases[] = DMAMUX_BASE_PTRS;
2060     DMAMUX_Init(dmaMuxBases[dmaMux->dma_dmamux_configure.dma_mux_instance]);
2061     DMAMUX_SetSource(dmaMuxBases[dmaMux->dma_dmamux_configure.dma_mux_instance], dmaConfig->tx_channel,
2062                      (int32_t)dmaMux->dma_dmamux_configure.tx_request);
2063     DMAMUX_SetSource(dmaMuxBases[dmaMux->dma_dmamux_configure.dma_mux_instance], dmaConfig->rx_channel,
2064                      (int32_t)dmaMux->dma_dmamux_configure.rx_request);
2065     DMAMUX_EnableChannel(dmaMuxBases[dmaMux->dma_dmamux_configure.dma_mux_instance], dmaConfig->tx_channel);
2066     DMAMUX_EnableChannel(dmaMuxBases[dmaMux->dma_dmamux_configure.dma_mux_instance], dmaConfig->rx_channel);
2067 #if (defined(HAL_UART_ADAPTER_LOWPOWER) && (HAL_UART_ADAPTER_LOWPOWER > 0U))
2068     (void)memcpy(&uartDmaHandle->dma_mux_configure, dmaConfig->dma_mux_configure, sizeof(dma_mux_configure_t));
2069 #endif /* HAL_UART_ADAPTER_LOWPOWER */
2070 #endif /* FSL_FEATURE_SOC_DMAMUX_COUNT */
2071     /* Init the EDMA module */
2072 #if defined(EDMA_BASE_PTRS)
2073     EDMA_Type *dmaBases[]                                             = EDMA_BASE_PTRS;
2074     IRQn_Type s_edmaIRQNumbers[][FSL_FEATURE_EDMA_MODULE_CHANNEL] = EDMA_CHN_IRQS;
2075 #elif (defined(FSL_FEATURE_LPUART_IS_LPFLEXCOMM) && (FSL_FEATURE_LPUART_IS_LPFLEXCOMM > 0U))
2076     DMA_Type *dmaBases[]                                              = DMA_BASE_PTRS;
2077     IRQn_Type s_edmaIRQNumbers[][FSL_FEATURE_EDMA_MODULE_CHANNEL] = DMA_CHN_IRQS;
2078 #else
2079     DMA_Type *dmaBases[]                                          = DMA_BASE_PTRS;
2080     IRQn_Type s_edmaIRQNumbers[][FSL_FEATURE_EDMA_MODULE_CHANNEL] = DMA_CHN_IRQS;
2081 #endif
2082 
2083 #if (defined(HAL_UART_DMA_INIT_ENABLE) && (HAL_UART_DMA_INIT_ENABLE > 0U))
2084     EDMA_GetDefaultConfig(&config);
2085 #if defined FSL_FEATURE_EDMA_HAS_CHANNEL_CONFIG && FSL_FEATURE_EDMA_HAS_CHANNEL_CONFIG
2086     edma_channel_config_t channelConfig = {
2087         .enableMasterIDReplication = true,
2088 #if !(defined(FSL_FEATURE_EDMA_HAS_NO_CH_SBR_SEC) && FSL_FEATURE_EDMA_HAS_NO_CH_SBR_SEC)
2089         .securityLevel             = kEDMA_ChannelSecurityLevelSecure,
2090 #endif
2091         .protectionLevel           = kEDMA_ChannelProtectionLevelPrivileged,
2092     };
2093 
2094     config.enableMasterIdReplication            = true;
2095     config.channelConfig[dmaConfig->tx_channel] = &channelConfig;
2096     config.channelConfig[dmaConfig->rx_channel] = &channelConfig;
2097 #endif
2098     EDMA_Init(dmaBases[dmaConfig->dma_instance], &config);
2099 #endif /* HAL_UART_DMA_INIT_ENABLE > 0 */
2100     EDMA_CreateHandle(&uartDmaHandle->txEdmaHandle, dmaBases[dmaConfig->dma_instance], dmaConfig->tx_channel);
2101     EDMA_CreateHandle(&uartDmaHandle->rxEdmaHandle, dmaBases[dmaConfig->dma_instance], dmaConfig->rx_channel);
2102 #if (defined(FSL_FEATURE_EDMA_HAS_CHANNEL_MUX) && (FSL_FEATURE_EDMA_HAS_CHANNEL_MUX > 0U))
2103 #if (defined(FSL_EDMA_SOC_IP_DMA4) && (FSL_EDMA_SOC_IP_DMA4 > 0) && \
2104      defined(FSL_EDMA_SOC_IP_DMA3) && (FSL_EDMA_SOC_IP_DMA3 > 0))
2105     if(dmaBases[dmaConfig->dma_instance] == (EDMA_Type *)DMA4)
2106     {
2107         dma_channel_mux_configure_t *dmaChannelMux = dmaConfig->dma_channel_mux_configure;
2108         EDMA_SetChannelMux(dmaBases[dmaConfig->dma_instance], dmaConfig->tx_channel,
2109                            (dma4_request_source_t)dmaChannelMux->dma_dmamux_configure.dma_tx_channel_mux);
2110         EDMA_SetChannelMux(dmaBases[dmaConfig->dma_instance], dmaConfig->rx_channel,
2111                            (dma4_request_source_t)dmaChannelMux->dma_dmamux_configure.dma_rx_channel_mux);
2112     }
2113     else
2114     {
2115         dma_channel_mux_configure_t *dmaChannelMux = dmaConfig->dma_channel_mux_configure;
2116         EDMA_SetChannelMux(dmaBases[dmaConfig->dma_instance], dmaConfig->tx_channel,
2117                            (dma3_request_source_t)dmaChannelMux->dma_dmamux_configure.dma_tx_channel_mux);
2118         EDMA_SetChannelMux(dmaBases[dmaConfig->dma_instance], dmaConfig->rx_channel,
2119                            (dma3_request_source_t)dmaChannelMux->dma_dmamux_configure.dma_rx_channel_mux);
2120     }
2121 #else
2122     dma_channel_mux_configure_t *dmaChannelMux = dmaConfig->dma_channel_mux_configure;
2123     EDMA_SetChannelMux(dmaBases[dmaConfig->dma_instance], dmaConfig->tx_channel,
2124                        (int32_t)dmaChannelMux->dma_dmamux_configure.dma_tx_channel_mux);
2125     EDMA_SetChannelMux(dmaBases[dmaConfig->dma_instance], dmaConfig->rx_channel,
2126                        (int32_t)dmaChannelMux->dma_dmamux_configure.dma_rx_channel_mux);
2127 #endif
2128 #if (defined(HAL_UART_ADAPTER_LOWPOWER) && (HAL_UART_ADAPTER_LOWPOWER > 0U))
2129     (void)memcpy(&uartDmaHandle->dma_channel_mux_configure, dmaConfig->dma_channel_mux_configure,
2130                  sizeof(dma_channel_mux_configure_t));
2131 #endif /* HAL_UART_ADAPTER_LOWPOWER */
2132 #endif /* FSL_FEATURE_EDMA_HAS_CHANNEL_MUX */
2133 #if (defined(HAL_UART_ADAPTER_LOWPOWER) && (HAL_UART_ADAPTER_LOWPOWER > 0U))
2134     (void)memcpy(&uartDmaHandle->hal_uart_dma_config, dmaConfig, sizeof(hal_uart_dma_config_t));
2135     uartDmaHandle->hal_uart_dma_config.dma_mux_configure         = &uartDmaHandle->dma_mux_configure;
2136     uartDmaHandle->hal_uart_dma_config.dma_channel_mux_configure = &uartDmaHandle->dma_channel_mux_configure;
2137 #endif /* HAL_UART_ADAPTER_LOWPOWER */
2138 #elif (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
2139 #endif /* FSL_FEATURE_SOC_EDMA_COUNT */
2140 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
2141     NVIC_SetPriority(s_edmaIRQNumbers[dmaConfig->dma_instance][dmaConfig->tx_channel], HAL_UART_ISR_PRIORITY);
2142     NVIC_SetPriority(s_edmaIRQNumbers[dmaConfig->dma_instance][dmaConfig->rx_channel], HAL_UART_ISR_PRIORITY);
2143 #endif
2144 #if (defined(HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION) && (HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION > 0U))
2145 #else /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
2146     s_UartDmaState[uartDmaHandle->instance] = uartDmaHandle;
2147 
2148     /* Enable RX interrupt for detecting the IDLE line interrupt. */
2149     LPUART_EnableInterrupts(s_LpuartAdapterBase[uartHandle->instance], (uint32_t)kLPUART_IdleLineInterruptEnable);
2150 #if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
2151     (void)EnableIRQ(s_LpuartRxIRQ[uartHandle->instance]);
2152 #else  /* FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ */
2153     (void)EnableIRQ(s_LpuartIRQ[uartHandle->instance]);
2154 #endif /* FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ */
2155 #endif /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
2156 
2157     if (0 == s_dmaHandleList.activeCount)
2158     {
2159         s_dmaHandleList.dma_list = uartDmaHandle;
2160         uartDmaHandle->next      = NULL;
2161         s_dmaHandleList.activeCount++;
2162 
2163 #if (defined(HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION) && (HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION > 0U))
2164         timer_status_t timerStatus;
2165         timerStatus = TM_Open((timer_handle_t)s_dmaHandleList.timerManagerHandle);
2166         assert(kStatus_TimerSuccess == timerStatus);
2167 
2168         timerStatus = TM_InstallCallback((timer_handle_t)s_dmaHandleList.timerManagerHandle, TimeoutTimer_Callbcak,
2169                                          &s_dmaHandleList);
2170         assert(kStatus_TimerSuccess == timerStatus);
2171 
2172         (void)TM_Start((timer_handle_t)s_dmaHandleList.timerManagerHandle, (uint8_t)kTimerModeIntervalTimer, 1);
2173 
2174         (void)timerStatus;
2175 #endif /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
2176     }
2177     else
2178     {
2179         uartDmaHandle->next      = s_dmaHandleList.dma_list;
2180         s_dmaHandleList.dma_list = uartDmaHandle;
2181     }
2182 
2183     return kStatus_HAL_UartDmaSuccess;
2184 }
2185 
HAL_UartDMADeinit(hal_uart_handle_t handle)2186 hal_uart_dma_status_t HAL_UartDMADeinit(hal_uart_handle_t handle)
2187 {
2188     hal_uart_state_t *uartHandle;
2189     hal_uart_dma_state_t *uartDmaHandle;
2190     hal_uart_dma_state_t *prev;
2191     hal_uart_dma_state_t *curr;
2192 
2193     assert(handle);
2194 
2195     uartHandle    = (hal_uart_state_t *)handle;
2196     uartDmaHandle = uartHandle->dmaHandle;
2197 
2198     uartHandle->dmaHandle = NULL;
2199 
2200     assert(uartDmaHandle);
2201 
2202     /* Abort rx/tx */
2203 
2204 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
2205     /* Here we should not abort before create transfer handle. */
2206     if (NULL != uartDmaHandle->edmaHandle.rxEdmaHandle)
2207     {
2208         LPUART_TransferAbortReceiveEDMA(s_LpuartAdapterBase[uartDmaHandle->instance], &uartDmaHandle->edmaHandle);
2209     }
2210     if (NULL != uartDmaHandle->edmaHandle.txEdmaHandle)
2211     {
2212         LPUART_TransferAbortSendEDMA(s_LpuartAdapterBase[uartDmaHandle->instance], &uartDmaHandle->edmaHandle);
2213     }
2214 #elif (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
2215 
2216 #endif /* FSL_FEATURE_SOC_EDMA_COUNT */
2217 
2218     /* Disable rx/tx channels */
2219 
2220     /* Remove handle from list */
2221     prev = NULL;
2222     curr = s_dmaHandleList.dma_list;
2223     while (curr != NULL)
2224     {
2225         if (curr == uartDmaHandle)
2226         {
2227             /* 1, if it is the first one */
2228             if (prev == NULL)
2229             {
2230                 s_dmaHandleList.dma_list = curr->next;
2231             }
2232             /* 2, if it is the last one */
2233             else if (curr->next == NULL)
2234             {
2235                 prev->next = NULL;
2236             }
2237             /* 3, if it is in the middle */
2238             else
2239             {
2240                 prev->next = curr->next;
2241             }
2242             break;
2243         }
2244 
2245         prev = curr;
2246         curr = curr->next;
2247     }
2248 
2249     /* Reset all handle data. */
2250     (void)memset(uartDmaHandle, 0, sizeof(hal_uart_dma_state_t));
2251 
2252     s_dmaHandleList.activeCount = (s_dmaHandleList.activeCount > 0) ? (s_dmaHandleList.activeCount - 1) : 0;
2253 #if (defined(HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION) && (HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION > 0U))
2254     if (0 == s_dmaHandleList.activeCount)
2255     {
2256         (void)TM_Close((timer_handle_t)s_dmaHandleList.timerManagerHandle);
2257     }
2258 #endif /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
2259 
2260     return kStatus_HAL_UartDmaSuccess;
2261 }
2262 
HAL_UartDMATransferInstallCallback(hal_uart_handle_t handle,hal_uart_dma_transfer_callback_t callback,void * callbackParam)2263 hal_uart_dma_status_t HAL_UartDMATransferInstallCallback(hal_uart_handle_t handle,
2264                                                          hal_uart_dma_transfer_callback_t callback,
2265                                                          void *callbackParam)
2266 {
2267     hal_uart_state_t *uartHandle;
2268     hal_uart_dma_state_t *uartDmaHandle;
2269 
2270     assert(handle);
2271 
2272     uartHandle    = (hal_uart_state_t *)handle;
2273     uartDmaHandle = uartHandle->dmaHandle;
2274 
2275     assert(uartDmaHandle);
2276 
2277     uartDmaHandle->dma_callback       = callback;
2278     uartDmaHandle->dma_callback_param = callbackParam;
2279 
2280 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
2281     LPUART_TransferCreateHandleEDMA(s_LpuartAdapterBase[uartDmaHandle->instance], &uartDmaHandle->edmaHandle,
2282                                     LPUART_DMACallbacks, uartDmaHandle, &uartDmaHandle->txEdmaHandle,
2283                                     &uartDmaHandle->rxEdmaHandle);
2284 
2285 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
2286 #if (defined(FSL_FEATURE_LPUART_IS_LPFLEXCOMM) && (FSL_FEATURE_LPUART_IS_LPFLEXCOMM > 0U))
2287     LP_FLEXCOMM_SetIRQHandler(uartHandle->instance, HAL_LpUartInterruptHandle_Wapper, handle,
2288                               LP_FLEXCOMM_PERIPH_LPUART);
2289 #endif /* FSL_FEATURE_LPUART_IS_LPFLEXCOMM */
2290 #endif /* UART_ADAPTER_NON_BLOCKING_MODE */
2291 
2292 #if (defined(HAL_UART_DMA_RING_BUFFER_ENABLE) && (HAL_UART_DMA_RING_BUFFER_ENABLE > 0U))
2293     LPUART_StartRingBufferEDMA(handle);
2294 #endif /* HAL_UART_DMA_RING_BUFFER_ENABLE */
2295 #elif (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
2296 #endif /* FSL_FEATURE_SOC_EDMA_COUNT */
2297 
2298     return kStatus_HAL_UartDmaSuccess;
2299 }
2300 
HAL_UartDMATransferReceive(hal_uart_handle_t handle,uint8_t * data,size_t length,bool receiveAll)2301 hal_uart_dma_status_t HAL_UartDMATransferReceive(hal_uart_handle_t handle,
2302                                                  uint8_t *data,
2303                                                  size_t length,
2304                                                  bool receiveAll)
2305 {
2306     hal_uart_state_t *uartHandle;
2307     hal_uart_dma_state_t *uartDmaHandle;
2308 
2309     assert(handle);
2310     assert(data);
2311 
2312     uartHandle    = (hal_uart_state_t *)handle;
2313     uartDmaHandle = uartHandle->dmaHandle;
2314 
2315     assert(uartDmaHandle);
2316 
2317     if (NULL == uartDmaHandle->dma_rx.buffer)
2318     {
2319         uartDmaHandle->dma_rx.buffer       = data;
2320         uartDmaHandle->dma_rx.bufferLength = length;
2321         uartDmaHandle->dma_rx.bufferSofar  = 0U;
2322         uartDmaHandle->dma_rx.timeout      = 0U;
2323         uartDmaHandle->dma_rx.receiveAll   = receiveAll;
2324     }
2325     else
2326     {
2327         /* Already in reading process. */
2328         return kStatus_HAL_UartDmaRxBusy;
2329     }
2330 #if (defined(HAL_UART_DMA_RING_BUFFER_ENABLE) && (HAL_UART_DMA_RING_BUFFER_ENABLE > 0U))
2331 
2332 #if (defined(HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION) && (HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION > 0U))
2333 #else /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
2334     HAL_UartDMAIdlelineInterruptHandle(uartHandle->instance);
2335 #endif
2336 #else /* HAL_UART_DMA_RING_BUFFER_ENABLE */
2337 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
2338     lpuart_transfer_t xfer;
2339     xfer.data = data;
2340     xfer.dataSize = length;
2341 #endif
2342 #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
2343 
2344 #elif (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
2345     (void)LPUART_ReceiveEDMA(s_LpuartAdapterBase[uartDmaHandle->instance], &uartDmaHandle->edmaHandle, &xfer);
2346 #endif /* FSL_FEATURE_SOC_EDMA_COUNT */
2347 
2348 #endif
2349 #if (defined(HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION) && (HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION > 0U))
2350 #else
2351     /* Enable RX interrupt for detecting the IDLE line interrupt. */
2352     LPUART_EnableInterrupts(s_LpuartAdapterBase[uartHandle->instance], (uint32_t)kLPUART_IdleLineInterruptEnable);
2353 #endif /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
2354     return kStatus_HAL_UartDmaSuccess;
2355 }
2356 
HAL_UartDMATransferSend(hal_uart_handle_t handle,uint8_t * data,size_t length)2357 hal_uart_dma_status_t HAL_UartDMATransferSend(hal_uart_handle_t handle, uint8_t *data, size_t length)
2358 {
2359     hal_uart_state_t *uartHandle;
2360     hal_uart_dma_state_t *uartDmaHandle;
2361 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
2362     lpuart_transfer_t xfer;
2363 #endif
2364     assert(handle);
2365     assert(data);
2366 
2367     uartHandle    = (hal_uart_state_t *)handle;
2368     uartDmaHandle = uartHandle->dmaHandle;
2369 
2370     assert(uartDmaHandle);
2371 
2372     if (NULL == uartDmaHandle->dma_tx.buffer)
2373     {
2374         uartDmaHandle->dma_tx.buffer       = data;
2375         uartDmaHandle->dma_tx.bufferLength = length;
2376         uartDmaHandle->dma_tx.bufferSofar  = 0U;
2377     }
2378     else
2379     {
2380         /* Already in writing process. */
2381         return kStatus_HAL_UartDmaTxBusy;
2382     }
2383 
2384 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
2385     xfer.data     = data;
2386     xfer.dataSize = length;
2387     (void)LPUART_SendEDMA(s_LpuartAdapterBase[uartDmaHandle->instance], &uartDmaHandle->edmaHandle, &xfer);
2388 #elif (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
2389 #endif /* FSL_FEATURE_SOC_EDMA_COUNT */
2390 
2391 #if (defined(HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION) && (HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION > 0U))
2392 #else
2393     /* Enable RX interrupt for detecting the IDLE line interrupt. */
2394     LPUART_EnableInterrupts(s_LpuartAdapterBase[uartHandle->instance], (uint32_t)kLPUART_IdleLineInterruptEnable);
2395 #endif /* HAL_UART_DMA_USE_SOFTWARE_IDLELINE_DETECTION */
2396 
2397     return kStatus_HAL_UartDmaSuccess;
2398 }
2399 
HAL_UartDMAGetReceiveCount(hal_uart_handle_t handle,uint32_t * reCount)2400 hal_uart_dma_status_t HAL_UartDMAGetReceiveCount(hal_uart_handle_t handle, uint32_t *reCount)
2401 {
2402     hal_uart_state_t *uartHandle;
2403     hal_uart_dma_state_t *uartDmaHandle;
2404 
2405     assert(handle);
2406 
2407     uartHandle    = (hal_uart_state_t *)handle;
2408     uartDmaHandle = uartHandle->dmaHandle;
2409 
2410     assert(uartDmaHandle);
2411     (void)uartDmaHandle;
2412 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
2413 #if (defined(HAL_UART_DMA_RING_BUFFER_ENABLE) && (HAL_UART_DMA_RING_BUFFER_ENABLE > 0U))
2414 
2415 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
2416     *reCount = HAL_UartGetDmaReceivedBytes(uartDmaHandle->instance);
2417 #elif (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
2418 #endif /* FSL_FEATURE_SOC_EDMA_COUNT */
2419 #else  /* HAL_UART_DMA_RING_BUFFER_ENABLE */
2420 #if (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
2421     if (kStatus_Success != LPUART_TransferGetReceiveCountEDMA(s_LpuartAdapterBase[uartDmaHandle->instance],
2422                                                               &uartDmaHandle->edmaHandle, reCount))
2423     {
2424         return kStatus_HAL_UartDmaError;
2425     }
2426 #elif (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
2427 #endif /* FSL_FEATURE_SOC_DMA_COUNT */
2428 
2429 #endif
2430 #else
2431     *reCount = 0;
2432 
2433 #endif
2434 
2435     return kStatus_HAL_UartDmaSuccess;
2436 }
2437 
HAL_UartDMAGetSendCount(hal_uart_handle_t handle,uint32_t * seCount)2438 hal_uart_dma_status_t HAL_UartDMAGetSendCount(hal_uart_handle_t handle, uint32_t *seCount)
2439 {
2440     hal_uart_state_t *uartHandle;
2441     hal_uart_dma_state_t *uartDmaHandle;
2442 
2443     assert(handle);
2444 
2445     uartHandle    = (hal_uart_state_t *)handle;
2446     uartDmaHandle = uartHandle->dmaHandle;
2447 
2448     assert(uartDmaHandle);
2449 
2450 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
2451     if (kStatus_Success != LPUART_TransferGetSendCountEDMA(s_LpuartAdapterBase[uartDmaHandle->instance],
2452                                                            &uartDmaHandle->edmaHandle, seCount))
2453     {
2454         return kStatus_HAL_UartDmaError;
2455     }
2456 #elif (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
2457 
2458 #endif /* FSL_FEATURE_SOC_EDMA_COUNT */
2459 
2460     return kStatus_HAL_UartDmaSuccess;
2461 }
2462 
HAL_UartDMAAbortReceive(hal_uart_handle_t handle)2463 hal_uart_dma_status_t HAL_UartDMAAbortReceive(hal_uart_handle_t handle)
2464 {
2465     hal_uart_state_t *uartHandle;
2466     hal_uart_dma_state_t *uartDmaHandle;
2467 
2468     assert(handle);
2469 
2470     uartHandle    = (hal_uart_state_t *)handle;
2471     uartDmaHandle = uartHandle->dmaHandle;
2472 
2473     assert(uartDmaHandle);
2474 
2475 #if (defined(HAL_UART_DMA_RING_BUFFER_ENABLE) && (HAL_UART_DMA_RING_BUFFER_ENABLE > 0U))
2476     /* Make sure to re-initialize the ring bufferIndex */
2477     ringBufferIndex[uartDmaHandle->instance] = 0U;
2478 #endif
2479 
2480 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
2481     LPUART_TransferAbortReceiveEDMA(s_LpuartAdapterBase[uartDmaHandle->instance], &uartDmaHandle->edmaHandle);
2482 #elif (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
2483 #endif /* FSL_FEATURE_SOC_EDMA_COUNT */
2484 
2485     return kStatus_HAL_UartDmaSuccess;
2486 }
2487 
HAL_UartDMAAbortSend(hal_uart_handle_t handle)2488 hal_uart_dma_status_t HAL_UartDMAAbortSend(hal_uart_handle_t handle)
2489 {
2490     hal_uart_state_t *uartHandle;
2491     hal_uart_dma_state_t *uartDmaHandle;
2492 
2493     assert(handle);
2494 
2495     uartHandle    = (hal_uart_state_t *)handle;
2496     uartDmaHandle = uartHandle->dmaHandle;
2497 
2498     assert(uartDmaHandle);
2499 
2500 #if (defined(FSL_FEATURE_SOC_EDMA_COUNT) && (FSL_FEATURE_SOC_EDMA_COUNT > 0U))
2501     LPUART_TransferAbortSendEDMA(s_LpuartAdapterBase[uartDmaHandle->instance], &uartDmaHandle->edmaHandle);
2502 #elif (defined(FSL_FEATURE_SOC_DMA_COUNT) && (FSL_FEATURE_SOC_DMA_COUNT > 0U))
2503 #endif /* FSL_FEATURE_SOC_EDMA_COUNT */
2504 
2505     return kStatus_HAL_UartDmaSuccess;
2506 }
2507 #endif /* HAL_UART_DMA_ENABLE */
2508