1 /*
2 * Copyright 2018 NXP
3 * All rights reserved.
4 *
5 *
6 * SPDX-License-Identifier: BSD-3-Clause
7 */
8
9 #include "fsl_common.h"
10 #include "fsl_uart.h"
11
12 #include "fsl_adapter_uart.h"
13
14 /*******************************************************************************
15 * Definitions
16 ******************************************************************************/
17 #ifndef NDEBUG
18 #if (defined(DEBUG_CONSOLE_ASSERT_DISABLE) && (DEBUG_CONSOLE_ASSERT_DISABLE > 0U))
19 #undef assert
20 #define assert(n)
21 #endif
22 #endif
23
24 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
25 /*! @brief uart RX state structure. */
26 typedef struct _hal_uart_receive_state
27 {
28 volatile uint8_t *buffer;
29 volatile uint32_t bufferLength;
30 volatile uint32_t bufferSofar;
31 } hal_uart_receive_state_t;
32
33 /*! @brief uart TX state structure. */
34 typedef struct _hal_uart_send_state
35 {
36 volatile uint8_t *buffer;
37 volatile uint32_t bufferLength;
38 volatile uint32_t bufferSofar;
39 } hal_uart_send_state_t;
40 #endif
41 /*! @brief uart state structure. */
42 typedef struct _hal_uart_state
43 {
44 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
45 hal_uart_transfer_callback_t callback;
46 void *callbackParam;
47 #if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
48 uart_handle_t hardwareHandle;
49 #endif
50 hal_uart_receive_state_t rx;
51 hal_uart_send_state_t tx;
52 #endif
53 uint8_t instance;
54 } hal_uart_state_t;
55
56 /*******************************************************************************
57 * Prototypes
58 ******************************************************************************/
59
60 /*******************************************************************************
61 * Variables
62 ******************************************************************************/
63 static UART_Type *const s_UartAdapterBase[] = UART_BASE_PTRS;
64
65 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
66
67 #if !(defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
68 /* Array of UART IRQ number. */
69 static const IRQn_Type s_UartIRQ[] = UART_RX_TX_IRQS;
70
71 static hal_uart_state_t *s_UartState[sizeof(s_UartAdapterBase) / sizeof(UART_Type *)];
72 #endif
73
74 #endif
75
76 /*******************************************************************************
77 * Code
78 ******************************************************************************/
79
80 #if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
HAL_UartGetStatus(status_t status)81 static hal_uart_status_t HAL_UartGetStatus(status_t status)
82 {
83 hal_uart_status_t uartStatus = kStatus_HAL_UartError;
84 switch (status)
85 {
86 case kStatus_Success:
87 uartStatus = kStatus_HAL_UartSuccess;
88 break;
89 case kStatus_UART_TxBusy:
90 uartStatus = kStatus_HAL_UartTxBusy;
91 break;
92 case kStatus_UART_RxBusy:
93 uartStatus = kStatus_HAL_UartRxBusy;
94 break;
95 case kStatus_UART_TxIdle:
96 uartStatus = kStatus_HAL_UartTxIdle;
97 break;
98 case kStatus_UART_RxIdle:
99 uartStatus = kStatus_HAL_UartRxIdle;
100 break;
101 case kStatus_UART_BaudrateNotSupport:
102 uartStatus = kStatus_HAL_UartBaudrateNotSupport;
103 break;
104 case kStatus_UART_NoiseError:
105 case kStatus_UART_FramingError:
106 case kStatus_UART_ParityError:
107 uartStatus = kStatus_HAL_UartProtocolError;
108 break;
109 default:
110 /* This comments for MISRA C-2012 Rule 16.4 */
111 break;
112 }
113 return uartStatus;
114 }
115 #else
HAL_UartGetStatus(status_t status)116 static hal_uart_status_t HAL_UartGetStatus(status_t status)
117 {
118 if (kStatus_Success == status)
119 {
120 return kStatus_HAL_UartSuccess;
121 }
122 else
123 {
124 return kStatus_HAL_UartError;
125 }
126 }
127 #endif
128
129 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
130
131 #if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
HAL_UartCallback(UART_Type * base,uart_handle_t * handle,status_t status,void * callbackParam)132 static void HAL_UartCallback(UART_Type *base, uart_handle_t *handle, status_t status, void *callbackParam)
133 {
134 hal_uart_state_t *uartHandle;
135 hal_uart_status_t uartStatus = HAL_UartGetStatus(status);
136 assert(callbackParam);
137
138 uartHandle = (hal_uart_state_t *)callbackParam;
139
140 if (kStatus_HAL_UartProtocolError == uartStatus)
141 {
142 if (0U != uartHandle->hardwareHandle.rxDataSize)
143 {
144 uartStatus = kStatus_HAL_UartError;
145 }
146 }
147
148 if (NULL != uartHandle->callback)
149 {
150 uartHandle->callback(uartHandle, uartStatus, uartHandle->callbackParam);
151 }
152 }
153
154 #else
155
HAL_UartInterruptHandle(uint8_t instance)156 static void HAL_UartInterruptHandle(uint8_t instance)
157 {
158 hal_uart_state_t *uartHandle = s_UartState[instance];
159 uint32_t status;
160 uint32_t clearStatus = 0;
161
162 if (NULL == uartHandle)
163 {
164 return;
165 }
166
167 status = UART_GetStatusFlags(s_UartAdapterBase[instance]);
168
169 /* Receive data register full */
170 if ((0U != ((uint32_t)kUART_RxDataRegFullFlag & status)) &&
171 (0U != (UART_GetEnabledInterrupts(s_UartAdapterBase[instance]) & (uint32_t)kUART_RxDataRegFullInterruptEnable)))
172 {
173 clearStatus |= (uint32_t)kUART_RxDataRegFullFlag | (uint32_t)kUART_RxOverrunFlag;
174 if (NULL != uartHandle->rx.buffer)
175 {
176 uartHandle->rx.buffer[uartHandle->rx.bufferSofar++] = UART_ReadByte(s_UartAdapterBase[instance]);
177 if (uartHandle->rx.bufferSofar >= uartHandle->rx.bufferLength)
178 {
179 UART_DisableInterrupts(s_UartAdapterBase[instance], (uint32_t)kUART_RxDataRegFullInterruptEnable |
180 (uint32_t)kUART_RxOverrunInterruptEnable);
181 uartHandle->rx.buffer = NULL;
182 if (NULL != uartHandle->callback)
183 {
184 uartHandle->callback(uartHandle, kStatus_HAL_UartRxIdle, uartHandle->callbackParam);
185 }
186 }
187 }
188 }
189
190 /* Send data register empty and the interrupt is enabled. */
191 if ((0U != ((uint32_t)kUART_TxDataRegEmptyFlag & status)) &&
192 (0U !=
193 (UART_GetEnabledInterrupts(s_UartAdapterBase[instance]) & (uint32_t)kUART_TxDataRegEmptyInterruptEnable)))
194 {
195 clearStatus |= (uint32_t)kUART_TxDataRegEmptyFlag | (uint32_t)kUART_TransmissionCompleteFlag;
196 if (NULL != uartHandle->tx.buffer)
197 {
198 UART_WriteByte(s_UartAdapterBase[instance], uartHandle->tx.buffer[uartHandle->tx.bufferSofar++]);
199 if (uartHandle->tx.bufferSofar >= uartHandle->tx.bufferLength)
200 {
201 UART_DisableInterrupts(s_UartAdapterBase[uartHandle->instance],
202 (uint32_t)kUART_TxDataRegEmptyInterruptEnable);
203 uartHandle->tx.buffer = NULL;
204 if (NULL != uartHandle->callback)
205 {
206 uartHandle->callback(uartHandle, kStatus_HAL_UartTxIdle, uartHandle->callbackParam);
207 }
208 }
209 }
210 }
211
212 #if 1
213 (void)UART_ClearStatusFlags(s_UartAdapterBase[instance], clearStatus);
214 #endif
215 }
216 #endif
217
218 #endif
219
HAL_UartInit(hal_uart_handle_t handle,const hal_uart_config_t * uart_config)220 hal_uart_status_t HAL_UartInit(hal_uart_handle_t handle, const hal_uart_config_t *uart_config)
221 {
222 hal_uart_state_t *uartHandle;
223 uart_config_t uartConfig;
224 status_t status;
225 assert(handle);
226 assert(uart_config);
227 assert(uart_config->instance < (sizeof(s_UartAdapterBase) / sizeof(UART_Type *)));
228 assert(s_UartAdapterBase[uart_config->instance]);
229
230 assert(HAL_UART_HANDLE_SIZE >= sizeof(hal_uart_state_t));
231
232 UART_GetDefaultConfig(&uartConfig);
233 uartConfig.baudRate_Bps = uart_config->baudRate_Bps;
234
235 if (kHAL_UartParityEven == uart_config->parityMode)
236 {
237 uartConfig.parityMode = kUART_ParityEven;
238 }
239 else if (kHAL_UartParityOdd == uart_config->parityMode)
240 {
241 uartConfig.parityMode = kUART_ParityOdd;
242 }
243 else
244 {
245 uartConfig.parityMode = kUART_ParityDisabled;
246 }
247 #if defined(FSL_FEATURE_UART_HAS_STOP_BIT_CONFIG_SUPPORT) && FSL_FEATURE_UART_HAS_STOP_BIT_CONFIG_SUPPORT
248 if (kHAL_UartTwoStopBit == uart_config->stopBitCount)
249 {
250 uartConfig.stopBitCount = kUART_TwoStopBit;
251 }
252 else
253 {
254 uartConfig.stopBitCount = kUART_OneStopBit;
255 }
256 #endif
257 uartConfig.enableRx = (bool)uart_config->enableRx;
258 uartConfig.enableTx = (bool)uart_config->enableTx;
259 #if defined(FSL_FEATURE_UART_HAS_MODEM_SUPPORT) && FSL_FEATURE_UART_HAS_MODEM_SUPPORT
260 uartConfig.enableRxRTS = (bool)uart_config->enableRxRTS;
261 uartConfig.enableTxCTS = (bool)uart_config->enableTxCTS;
262 #endif
263 #if defined(FSL_FEATURE_UART_HAS_FIFO) && FSL_FEATURE_UART_HAS_FIFO
264 uartConfig.txFifoWatermark = 0;
265 uartConfig.rxFifoWatermark = 1;
266 #endif
267 status = UART_Init(s_UartAdapterBase[uart_config->instance], &uartConfig, uart_config->srcClock_Hz);
268
269 if (kStatus_Success != status)
270 {
271 return HAL_UartGetStatus(status);
272 }
273
274 uartHandle = (hal_uart_state_t *)handle;
275 uartHandle->instance = uart_config->instance;
276
277 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
278
279 #if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
280 UART_TransferCreateHandle(s_UartAdapterBase[uart_config->instance], &uartHandle->hardwareHandle,
281 (uart_transfer_callback_t)HAL_UartCallback, handle);
282 #else
283 s_UartState[uartHandle->instance] = uartHandle;
284 /* Enable interrupt in NVIC. */
285 NVIC_SetPriority((IRQn_Type)s_UartIRQ[uart_config->instance], HAL_UART_ISR_PRIORITY);
286 (void)EnableIRQ(s_UartIRQ[uart_config->instance]);
287 #endif
288
289 #endif
290
291 return kStatus_HAL_UartSuccess;
292 }
293
HAL_UartDeinit(hal_uart_handle_t handle)294 hal_uart_status_t HAL_UartDeinit(hal_uart_handle_t handle)
295 {
296 hal_uart_state_t *uartHandle;
297
298 assert(handle);
299
300 uartHandle = (hal_uart_state_t *)handle;
301
302 UART_Deinit(s_UartAdapterBase[uartHandle->instance]);
303
304 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
305
306 #if !(defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
307 s_UartState[uartHandle->instance] = NULL;
308 #endif
309
310 #endif
311
312 return kStatus_HAL_UartSuccess;
313 }
314
HAL_UartReceiveBlocking(hal_uart_handle_t handle,uint8_t * data,size_t length)315 hal_uart_status_t HAL_UartReceiveBlocking(hal_uart_handle_t handle, uint8_t *data, size_t length)
316 {
317 hal_uart_state_t *uartHandle;
318 status_t status;
319 assert(handle);
320 assert(data);
321 assert(length);
322
323 uartHandle = (hal_uart_state_t *)handle;
324
325 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
326 if (NULL != uartHandle->rx.buffer)
327 {
328 return kStatus_HAL_UartRxBusy;
329 }
330 #endif
331
332 status = UART_ReadBlocking(s_UartAdapterBase[uartHandle->instance], data, length);
333
334 return HAL_UartGetStatus(status);
335 }
336
HAL_UartSendBlocking(hal_uart_handle_t handle,const uint8_t * data,size_t length)337 hal_uart_status_t HAL_UartSendBlocking(hal_uart_handle_t handle, const uint8_t *data, size_t length)
338 {
339 hal_uart_state_t *uartHandle;
340 assert(handle);
341 assert(data);
342 assert(length);
343
344 uartHandle = (hal_uart_state_t *)handle;
345
346 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
347 if (NULL != uartHandle->tx.buffer)
348 {
349 return kStatus_HAL_UartTxBusy;
350 }
351 #endif
352
353 (void)UART_WriteBlocking(s_UartAdapterBase[uartHandle->instance], data, length);
354
355 return kStatus_HAL_UartSuccess;
356 }
357
HAL_UartEnterLowpower(hal_uart_handle_t handle)358 hal_uart_status_t HAL_UartEnterLowpower(hal_uart_handle_t handle)
359 {
360 assert(handle);
361
362 return kStatus_HAL_UartSuccess;
363 }
364
HAL_UartExitLowpower(hal_uart_handle_t handle)365 hal_uart_status_t HAL_UartExitLowpower(hal_uart_handle_t handle)
366 {
367 assert(handle);
368
369 return kStatus_HAL_UartSuccess;
370 }
371
372 #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U))
373
374 #if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
375
HAL_UartTransferInstallCallback(hal_uart_handle_t handle,hal_uart_transfer_callback_t callback,void * callbackParam)376 hal_uart_status_t HAL_UartTransferInstallCallback(hal_uart_handle_t handle,
377 hal_uart_transfer_callback_t callback,
378 void *callbackParam)
379 {
380 hal_uart_state_t *uartHandle;
381
382 assert(handle);
383 assert(HAL_UART_TRANSFER_MODE);
384
385 uartHandle = (hal_uart_state_t *)handle;
386
387 uartHandle->callbackParam = callbackParam;
388 uartHandle->callback = callback;
389
390 return kStatus_HAL_UartSuccess;
391 }
392
HAL_UartTransferReceiveNonBlocking(hal_uart_handle_t handle,hal_uart_transfer_t * transfer)393 hal_uart_status_t HAL_UartTransferReceiveNonBlocking(hal_uart_handle_t handle, hal_uart_transfer_t *transfer)
394 {
395 hal_uart_state_t *uartHandle;
396 status_t status;
397 assert(handle);
398 assert(transfer);
399 assert(HAL_UART_TRANSFER_MODE);
400
401 uartHandle = (hal_uart_state_t *)handle;
402
403 status = UART_TransferReceiveNonBlocking(s_UartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle,
404 (uart_transfer_t *)(void *)transfer, NULL);
405
406 return HAL_UartGetStatus(status);
407 }
408
HAL_UartTransferSendNonBlocking(hal_uart_handle_t handle,hal_uart_transfer_t * transfer)409 hal_uart_status_t HAL_UartTransferSendNonBlocking(hal_uart_handle_t handle, hal_uart_transfer_t *transfer)
410 {
411 hal_uart_state_t *uartHandle;
412 status_t status;
413 assert(handle);
414 assert(transfer);
415 assert(HAL_UART_TRANSFER_MODE);
416
417 uartHandle = (hal_uart_state_t *)handle;
418
419 status = UART_TransferSendNonBlocking(s_UartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle,
420 (uart_transfer_t *)(void *)transfer);
421
422 return HAL_UartGetStatus(status);
423 }
424
HAL_UartTransferGetReceiveCount(hal_uart_handle_t handle,uint32_t * count)425 hal_uart_status_t HAL_UartTransferGetReceiveCount(hal_uart_handle_t handle, uint32_t *count)
426 {
427 hal_uart_state_t *uartHandle;
428 status_t status;
429 assert(handle);
430 assert(count);
431 assert(HAL_UART_TRANSFER_MODE);
432
433 uartHandle = (hal_uart_state_t *)handle;
434
435 status = UART_TransferGetReceiveCount(s_UartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle, count);
436
437 return HAL_UartGetStatus(status);
438 }
439
HAL_UartTransferGetSendCount(hal_uart_handle_t handle,uint32_t * count)440 hal_uart_status_t HAL_UartTransferGetSendCount(hal_uart_handle_t handle, uint32_t *count)
441 {
442 hal_uart_state_t *uartHandle;
443 status_t status;
444 assert(handle);
445 assert(count);
446 assert(HAL_UART_TRANSFER_MODE);
447
448 uartHandle = (hal_uart_state_t *)handle;
449
450 status = UART_TransferGetSendCount(s_UartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle, count);
451
452 return HAL_UartGetStatus(status);
453 }
454
HAL_UartTransferAbortReceive(hal_uart_handle_t handle)455 hal_uart_status_t HAL_UartTransferAbortReceive(hal_uart_handle_t handle)
456 {
457 hal_uart_state_t *uartHandle;
458 assert(handle);
459 assert(HAL_UART_TRANSFER_MODE);
460
461 uartHandle = (hal_uart_state_t *)handle;
462
463 UART_TransferAbortReceive(s_UartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle);
464
465 return kStatus_HAL_UartSuccess;
466 }
467
HAL_UartTransferAbortSend(hal_uart_handle_t handle)468 hal_uart_status_t HAL_UartTransferAbortSend(hal_uart_handle_t handle)
469 {
470 hal_uart_state_t *uartHandle;
471 assert(handle);
472 assert(HAL_UART_TRANSFER_MODE);
473
474 uartHandle = (hal_uart_state_t *)handle;
475
476 UART_TransferAbortSend(s_UartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle);
477
478 return kStatus_HAL_UartSuccess;
479 }
480
481 #else
482
483 /* None transactional API with non-blocking mode. */
HAL_UartInstallCallback(hal_uart_handle_t handle,hal_uart_transfer_callback_t callback,void * callbackParam)484 hal_uart_status_t HAL_UartInstallCallback(hal_uart_handle_t handle,
485 hal_uart_transfer_callback_t callback,
486 void *callbackParam)
487 {
488 hal_uart_state_t *uartHandle;
489
490 assert(handle);
491 assert(0U == HAL_UART_TRANSFER_MODE);
492
493 uartHandle = (hal_uart_state_t *)handle;
494
495 uartHandle->callbackParam = callbackParam;
496 uartHandle->callback = callback;
497
498 return kStatus_HAL_UartSuccess;
499 }
500
HAL_UartReceiveNonBlocking(hal_uart_handle_t handle,uint8_t * data,size_t length)501 hal_uart_status_t HAL_UartReceiveNonBlocking(hal_uart_handle_t handle, uint8_t *data, size_t length)
502 {
503 hal_uart_state_t *uartHandle;
504 assert(handle);
505 assert(data);
506 assert(length);
507 assert(0U == HAL_UART_TRANSFER_MODE);
508
509 uartHandle = (hal_uart_state_t *)handle;
510
511 if (NULL != uartHandle->rx.buffer)
512 {
513 return kStatus_HAL_UartRxBusy;
514 }
515
516 uartHandle->rx.bufferLength = length;
517 uartHandle->rx.bufferSofar = 0;
518 uartHandle->rx.buffer = data;
519 UART_EnableInterrupts(s_UartAdapterBase[uartHandle->instance],
520 (uint32_t)kUART_RxDataRegFullInterruptEnable | (uint32_t)kUART_RxOverrunInterruptEnable);
521 return kStatus_HAL_UartSuccess;
522 }
523
HAL_UartSendNonBlocking(hal_uart_handle_t handle,uint8_t * data,size_t length)524 hal_uart_status_t HAL_UartSendNonBlocking(hal_uart_handle_t handle, uint8_t *data, size_t length)
525 {
526 hal_uart_state_t *uartHandle;
527 assert(handle);
528 assert(data);
529 assert(length);
530 assert(0U == HAL_UART_TRANSFER_MODE);
531
532 uartHandle = (hal_uart_state_t *)handle;
533
534 if (NULL != uartHandle->tx.buffer)
535 {
536 return kStatus_HAL_UartTxBusy;
537 }
538 uartHandle->tx.bufferLength = length;
539 uartHandle->tx.bufferSofar = 0;
540 uartHandle->tx.buffer = (volatile uint8_t *)data;
541 UART_EnableInterrupts(s_UartAdapterBase[uartHandle->instance], (uint32_t)kUART_TxDataRegEmptyInterruptEnable);
542 return kStatus_HAL_UartSuccess;
543 }
544
HAL_UartGetReceiveCount(hal_uart_handle_t handle,uint32_t * reCount)545 hal_uart_status_t HAL_UartGetReceiveCount(hal_uart_handle_t handle, uint32_t *reCount)
546 {
547 hal_uart_state_t *uartHandle;
548 assert(handle);
549 assert(reCount);
550 assert(0U == HAL_UART_TRANSFER_MODE);
551
552 uartHandle = (hal_uart_state_t *)handle;
553
554 if (NULL != uartHandle->rx.buffer)
555 {
556 *reCount = uartHandle->rx.bufferSofar;
557 return kStatus_HAL_UartSuccess;
558 }
559 return kStatus_HAL_UartError;
560 }
561
HAL_UartGetSendCount(hal_uart_handle_t handle,uint32_t * seCount)562 hal_uart_status_t HAL_UartGetSendCount(hal_uart_handle_t handle, uint32_t *seCount)
563 {
564 hal_uart_state_t *uartHandle;
565 assert(handle);
566 assert(seCount);
567 assert(0U == HAL_UART_TRANSFER_MODE);
568
569 uartHandle = (hal_uart_state_t *)handle;
570
571 if (NULL != uartHandle->tx.buffer)
572 {
573 *seCount = uartHandle->tx.bufferSofar;
574 return kStatus_HAL_UartSuccess;
575 }
576 return kStatus_HAL_UartError;
577 }
578
HAL_UartAbortReceive(hal_uart_handle_t handle)579 hal_uart_status_t HAL_UartAbortReceive(hal_uart_handle_t handle)
580 {
581 hal_uart_state_t *uartHandle;
582 assert(handle);
583 assert(0U == HAL_UART_TRANSFER_MODE);
584
585 uartHandle = (hal_uart_state_t *)handle;
586
587 if (NULL != uartHandle->rx.buffer)
588 {
589 UART_DisableInterrupts(s_UartAdapterBase[uartHandle->instance],
590 (uint32_t)kUART_RxDataRegFullInterruptEnable | (uint32_t)kUART_RxOverrunInterruptEnable);
591 uartHandle->rx.buffer = NULL;
592 }
593
594 return kStatus_HAL_UartSuccess;
595 }
596
HAL_UartAbortSend(hal_uart_handle_t handle)597 hal_uart_status_t HAL_UartAbortSend(hal_uart_handle_t handle)
598 {
599 hal_uart_state_t *uartHandle;
600 assert(handle);
601 assert(0U == HAL_UART_TRANSFER_MODE);
602
603 uartHandle = (hal_uart_state_t *)handle;
604
605 if (NULL != uartHandle->tx.buffer)
606 {
607 UART_DisableInterrupts(s_UartAdapterBase[uartHandle->instance], (uint32_t)kUART_TxDataRegEmptyInterruptEnable);
608 uartHandle->tx.buffer = NULL;
609 }
610
611 return kStatus_HAL_UartSuccess;
612 }
613
614 #endif
615
616 #if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U))
617
HAL_UartIsrFunction(hal_uart_handle_t handle)618 void HAL_UartIsrFunction(hal_uart_handle_t handle)
619 {
620 hal_uart_state_t *uartHandle;
621 assert(handle);
622 assert(HAL_UART_TRANSFER_MODE);
623
624 uartHandle = (hal_uart_state_t *)handle;
625
626 #if 0
627 DisableIRQ(s_UartIRQ[uartHandle->instance]);
628 #endif
629 UART_TransferHandleIRQ(s_UartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle);
630 #if 0
631 NVIC_SetPriority((IRQn_Type)s_UartIRQ[uartHandle->instance], HAL_UART_ISR_PRIORITY);
632 EnableIRQ(s_UartIRQ[uartHandle->instance]);
633 #endif
634 }
635
636 #else
637
HAL_UartIsrFunction(hal_uart_handle_t handle)638 void HAL_UartIsrFunction(hal_uart_handle_t handle)
639 {
640 hal_uart_state_t *uartHandle;
641 assert(handle);
642 assert(0U == HAL_UART_TRANSFER_MODE);
643
644 uartHandle = (hal_uart_state_t *)handle;
645
646 #if 0
647 DisableIRQ(s_UartIRQ[uartHandle->instance]);
648 #endif
649 HAL_UartInterruptHandle(uartHandle->instance);
650 #if 0
651 NVIC_SetPriority((IRQn_Type)s_UartIRQ[uartHandle->instance], HAL_UART_ISR_PRIORITY);
652 EnableIRQ(s_UartIRQ[uartHandle->instance]);
653 #endif
654 }
655
656 #if defined(UART0)
657 #if ((!(defined(FSL_FEATURE_SOC_LPSCI_COUNT))) || \
658 ((defined(FSL_FEATURE_SOC_LPSCI_COUNT)) && (FSL_FEATURE_SOC_LPSCI_COUNT == 0)))
659 void UART0_IRQHandler(void);
UART0_IRQHandler(void)660 void UART0_IRQHandler(void)
661 {
662 HAL_UartInterruptHandle(0);
663 SDK_ISR_EXIT_BARRIER;
664 }
665
666 void UART0_RX_TX_IRQHandler(void);
UART0_RX_TX_IRQHandler(void)667 void UART0_RX_TX_IRQHandler(void)
668 {
669 UART0_IRQHandler();
670 SDK_ISR_EXIT_BARRIER;
671 }
672 #endif
673 #endif
674
675 #if defined(UART1)
676 void UART1_IRQHandler(void);
UART1_IRQHandler(void)677 void UART1_IRQHandler(void)
678 {
679 HAL_UartInterruptHandle(1);
680 SDK_ISR_EXIT_BARRIER;
681 }
682
683 void UART1_RX_TX_IRQHandler(void);
UART1_RX_TX_IRQHandler(void)684 void UART1_RX_TX_IRQHandler(void)
685 {
686 UART1_IRQHandler();
687 SDK_ISR_EXIT_BARRIER;
688 }
689 #endif
690
691 #if defined(UART2)
692 void UART2_IRQHandler(void);
UART2_IRQHandler(void)693 void UART2_IRQHandler(void)
694 {
695 HAL_UartInterruptHandle(2);
696 SDK_ISR_EXIT_BARRIER;
697 }
698
699 void UART2_RX_TX_IRQHandler(void);
UART2_RX_TX_IRQHandler(void)700 void UART2_RX_TX_IRQHandler(void)
701 {
702 UART2_IRQHandler();
703 SDK_ISR_EXIT_BARRIER;
704 }
705 #endif
706
707 #if defined(UART3)
708 void UART3_IRQHandler(void);
UART3_IRQHandler(void)709 void UART3_IRQHandler(void)
710 {
711 HAL_UartInterruptHandle(3);
712 SDK_ISR_EXIT_BARRIER;
713 }
714 void UART3_RX_TX_IRQHandler(void);
UART3_RX_TX_IRQHandler(void)715 void UART3_RX_TX_IRQHandler(void)
716 {
717 UART3_IRQHandler();
718 SDK_ISR_EXIT_BARRIER;
719 }
720 #endif
721
722 #if defined(UART4)
723 void UART4_IRQHandler(void);
UART4_IRQHandler(void)724 void UART4_IRQHandler(void)
725 {
726 HAL_UartInterruptHandle(4);
727 SDK_ISR_EXIT_BARRIER;
728 }
729 void UART4_RX_TX_IRQHandler(void);
UART4_RX_TX_IRQHandler(void)730 void UART4_RX_TX_IRQHandler(void)
731 {
732 UART4_IRQHandler();
733 SDK_ISR_EXIT_BARRIER;
734 }
735 #endif
736
737 #if defined(UART5)
738 void UART5_IRQHandler(void);
UART5_IRQHandler(void)739 void UART5_IRQHandler(void)
740 {
741 HAL_UartInterruptHandle(5);
742 SDK_ISR_EXIT_BARRIER;
743 }
744 void UART5_RX_TX_IRQHandler(void);
UART5_RX_TX_IRQHandler(void)745 void UART5_RX_TX_IRQHandler(void)
746 {
747 UART5_IRQHandler();
748 SDK_ISR_EXIT_BARRIER;
749 }
750 #endif
751
752 #if defined(FSL_FEATURE_UART_HAS_SHARED_IRQ0_IRQ1_IRQ2_IRQ3) && FSL_FEATURE_UART_HAS_SHARED_IRQ0_IRQ1_IRQ2_IRQ3
UART0_UART1_UART2_UART3_IRQHandler(void)753 void UART0_UART1_UART2_UART3_IRQHandler(void)
754 {
755 for (uint32_t instance = 0U; instance < 4U; instance++)
756 {
757 HAL_UartInterruptHandle(instance);
758 }
759 SDK_ISR_EXIT_BARRIER;
760 }
761 #endif /* FSL_FEATURE_UART_HAS_SHARED_IRQ0_IRQ1_IRQ2_IRQ3 */
762
763 #endif
764
765 #endif
766