1 /******************************************************************************
2  *
3  * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by
4  * Analog Devices, Inc.),
5  * Copyright (C) 2023-2024 Analog Devices, Inc.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  ******************************************************************************/
20 
21 #include "uart.h"
22 #include "mxc_device.h"
23 #include "mxc_pins.h"
24 #include "mxc_assert.h"
25 #include "uart_revb.h"
26 #include "uart_common.h"
27 #include "lpgcr_regs.h"
28 #include "dma.h"
29 
MXC_UART_DMACallback(int ch,int error)30 void MXC_UART_DMACallback(int ch, int error)
31 {
32     MXC_UART_RevB_DMACallback(ch, error);
33 }
34 
MXC_UART_AsyncCallback(mxc_uart_regs_t * uart,int retVal)35 int MXC_UART_AsyncCallback(mxc_uart_regs_t *uart, int retVal)
36 {
37     return MXC_UART_RevB_AsyncCallback((mxc_uart_revb_regs_t *)uart, retVal);
38 }
39 
MXC_UART_AsyncStop(mxc_uart_regs_t * uart)40 int MXC_UART_AsyncStop(mxc_uart_regs_t *uart)
41 {
42     return MXC_UART_RevB_AsyncStop((mxc_uart_revb_regs_t *)uart);
43 }
44 
MXC_UART_Init(mxc_uart_regs_t * uart,unsigned int baud,mxc_uart_clock_t clock)45 int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock)
46 {
47 #ifndef MSDK_NO_GPIO_CLK_INIT
48     int retval;
49 
50     retval = MXC_UART_Shutdown(uart);
51 
52     if (retval) {
53         return retval;
54     }
55 
56     switch (clock) {
57     case MXC_UART_ERTCO_CLK:
58         MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERTCO);
59         break;
60 
61     case MXC_UART_IBRO_CLK:
62         MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO);
63         break;
64 
65     case MXC_UART_ERFO_CLK:
66         MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERFO);
67         break;
68 
69     default:
70         break;
71     }
72 
73     switch (MXC_UART_GET_IDX(uart)) {
74     case 0:
75         MXC_GPIO_Config(&gpio_cfg_uart0);
76         MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_UART0);
77         break;
78 
79     case 1:
80         MXC_GPIO_Config(&gpio_cfg_uart1);
81         MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_UART1);
82         break;
83 
84     case 2:
85         MXC_GPIO_Config(&gpio_cfg_uart2);
86         MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_UART2);
87         break;
88 
89     case 3:
90         MXC_GPIO_Config(&gpio_cfg_uart3);
91         MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_UART3);
92         break;
93 
94     default:
95         return E_BAD_PARAM;
96     }
97 #endif
98 
99     return MXC_UART_RevB_Init((mxc_uart_revb_regs_t *)uart, baud, (mxc_uart_revb_clock_t)clock);
100 }
101 
MXC_UART_Shutdown(mxc_uart_regs_t * uart)102 int MXC_UART_Shutdown(mxc_uart_regs_t *uart)
103 {
104     switch (MXC_UART_GET_IDX(uart)) {
105     case 0:
106         MXC_SYS_Reset_Periph(MXC_SYS_RESET0_UART0);
107         MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_UART0);
108         break;
109 
110     case 1:
111         MXC_SYS_Reset_Periph(MXC_SYS_RESET0_UART1);
112         MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_UART1);
113         break;
114 
115     case 2:
116         MXC_SYS_Reset_Periph(MXC_SYS_RESET0_UART2);
117         MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_UART2);
118         break;
119 
120     case 3:
121         MXC_SYS_Reset_Periph(MXC_SYS_RESET_UART3);
122         MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_UART3);
123         break;
124 
125     default:
126         return E_BAD_PARAM;
127     }
128 
129     return E_NO_ERROR;
130 }
131 
MXC_UART_ReadyForSleep(mxc_uart_regs_t * uart)132 int MXC_UART_ReadyForSleep(mxc_uart_regs_t *uart)
133 {
134     return MXC_UART_RevB_ReadyForSleep((mxc_uart_revb_regs_t *)uart);
135 }
136 
MXC_UART_SetFrequency(mxc_uart_regs_t * uart,unsigned int baud,mxc_uart_clock_t clock)137 int MXC_UART_SetFrequency(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock)
138 {
139     int freq;
140     int mod = 0;
141     int clkdiv = 0;
142 
143     if (MXC_UART_GET_IDX(uart) < 0) {
144         return E_BAD_PARAM;
145     }
146 
147     // check if the uart is LPUART
148     if (uart == MXC_UART3) {
149         // OSR default value
150         uart->osr = 5;
151 
152         switch (clock) {
153         case MXC_UART_APB_CLK:
154         case MXC_UART_IBRO_CLK:
155             clkdiv = ((IBRO_FREQ) / baud);
156             mod = ((IBRO_FREQ) % baud);
157             break;
158 
159         case MXC_UART_ERTCO_CLK:
160             uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_EXTERNAL_CLOCK;
161             uart->ctrl |= MXC_F_UART_CTRL_FDM;
162             if (baud == 9600) {
163                 clkdiv = 7;
164                 mod = 0;
165             } else {
166                 clkdiv = ((ERTCO_FREQ * 2) / baud);
167                 mod = ((ERTCO_FREQ * 2) % baud);
168             }
169 
170             if (baud > 2400) {
171                 uart->osr = 0;
172             } else {
173                 uart->osr = 1;
174             }
175             break;
176 
177         default:
178             return E_BAD_PARAM;
179         }
180 
181         if (!clkdiv || mod > (baud / 2)) {
182             clkdiv++;
183         }
184         uart->clkdiv = clkdiv;
185 
186         freq = MXC_UART_GetFrequency(uart);
187     } else {
188         uart->osr = 5;
189 
190         switch (clock) {
191         case MXC_UART_APB_CLK:
192             uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_PERIPHERAL_CLOCK;
193             clkdiv = PeripheralClock / baud;
194             mod = PeripheralClock % baud;
195             break;
196 
197         case MXC_UART_ERFO_CLK:
198             uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_EXTERNAL_CLOCK;
199             clkdiv = ERFO_FREQ / baud;
200             mod = ERFO_FREQ % baud;
201             break;
202 
203         case MXC_UART_IBRO_CLK:
204             uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_CLK2;
205             clkdiv = IBRO_FREQ / baud;
206             mod = IBRO_FREQ % baud;
207             break;
208 
209         default:
210             return E_BAD_PARAM;
211         }
212 
213         if (!clkdiv || mod > (baud / 2)) {
214             clkdiv++;
215         }
216         uart->clkdiv = clkdiv;
217 
218         freq = MXC_UART_GetFrequency(uart);
219     }
220 
221     if (freq > 0) {
222         // Enable baud clock and wait for it to become ready.
223         uart->ctrl |= MXC_F_UART_CTRL_BCLKEN;
224         while (((uart->ctrl & MXC_F_UART_CTRL_BCLKRDY) >> MXC_F_UART_CTRL_BCLKRDY_POS) == 0) {}
225     }
226 
227     return freq;
228 }
229 
MXC_UART_GetFrequency(mxc_uart_regs_t * uart)230 int MXC_UART_GetFrequency(mxc_uart_regs_t *uart)
231 {
232     int periphClock = 0;
233 
234     if (MXC_UART_GET_IDX(uart) < 0) {
235         return E_BAD_PARAM;
236     }
237 
238     // check if UARt is LP UART
239     if (uart == MXC_UART3) {
240         if ((uart->ctrl & MXC_F_UART_CTRL_BCLKSRC) == MXC_S_UART_CTRL_BCLKSRC_EXTERNAL_CLOCK) {
241             periphClock = ERTCO_FREQ * 2;
242         } else if ((uart->ctrl & MXC_F_UART_CTRL_BCLKSRC) ==
243                    MXC_S_UART_CTRL_BCLKSRC_PERIPHERAL_CLOCK) {
244             periphClock = IBRO_FREQ;
245         } else {
246             return E_BAD_PARAM;
247         }
248         return (periphClock / uart->clkdiv);
249     } else {
250         if ((uart->ctrl & MXC_F_UART_CTRL_BCLKSRC) == MXC_S_UART_CTRL_BCLKSRC_EXTERNAL_CLOCK) {
251             periphClock = ERFO_FREQ;
252         } else if ((uart->ctrl & MXC_F_UART_CTRL_BCLKSRC) ==
253                    MXC_S_UART_CTRL_BCLKSRC_PERIPHERAL_CLOCK) {
254             periphClock = PeripheralClock;
255         } else if ((uart->ctrl & MXC_F_UART_CTRL_BCLKSRC) == MXC_S_UART_CTRL_BCLKSRC_CLK2) {
256             periphClock = IBRO_FREQ;
257         } else {
258             return E_BAD_PARAM;
259         }
260         return (periphClock / uart->clkdiv);
261     }
262 }
263 
MXC_UART_SetDataSize(mxc_uart_regs_t * uart,int dataSize)264 int MXC_UART_SetDataSize(mxc_uart_regs_t *uart, int dataSize)
265 {
266     return MXC_UART_RevB_SetDataSize((mxc_uart_revb_regs_t *)uart, dataSize);
267 }
268 
MXC_UART_SetStopBits(mxc_uart_regs_t * uart,mxc_uart_stop_t stopBits)269 int MXC_UART_SetStopBits(mxc_uart_regs_t *uart, mxc_uart_stop_t stopBits)
270 {
271     return MXC_UART_RevB_SetStopBits((mxc_uart_revb_regs_t *)uart, stopBits);
272 }
273 
MXC_UART_SetParity(mxc_uart_regs_t * uart,mxc_uart_parity_t parity)274 int MXC_UART_SetParity(mxc_uart_regs_t *uart, mxc_uart_parity_t parity)
275 {
276     return MXC_UART_RevB_SetParity((mxc_uart_revb_regs_t *)uart, parity);
277 }
278 
MXC_UART_SetFlowCtrl(mxc_uart_regs_t * uart,mxc_uart_flow_t flowCtrl,int rtsThreshold)279 int MXC_UART_SetFlowCtrl(mxc_uart_regs_t *uart, mxc_uart_flow_t flowCtrl, int rtsThreshold)
280 {
281     if (flowCtrl == MXC_UART_FLOW_EN) {
282         switch (MXC_UART_GET_IDX(uart)) {
283         case 0:
284             MXC_GPIO_Config(&gpio_cfg_uart0_flow);
285             break;
286 
287         case 1:
288             MXC_GPIO_Config(&gpio_cfg_uart1_flow);
289             break;
290 
291         case 2:
292             MXC_GPIO_Config(&gpio_cfg_uart2_flow);
293             break;
294 
295         case 3:
296             MXC_GPIO_Config(&gpio_cfg_uart3_flow);
297             break;
298 
299         default:
300             return E_BAD_PARAM;
301         }
302     } else {
303         switch (MXC_UART_GET_IDX(uart)) {
304         case 0:
305             MXC_GPIO_Config(&gpio_cfg_uart0_flow_disable);
306             break;
307 
308         case 1:
309             MXC_GPIO_Config(&gpio_cfg_uart1_flow_disable);
310             break;
311 
312         case 2:
313             MXC_GPIO_Config(&gpio_cfg_uart2_flow_disable);
314             break;
315 
316         case 3:
317             MXC_GPIO_Config(&gpio_cfg_uart3_flow_disable);
318             break;
319 
320         default:
321             return E_BAD_PARAM;
322         }
323     }
324 
325     return MXC_UART_RevB_SetFlowCtrl((mxc_uart_revb_regs_t *)uart, flowCtrl, rtsThreshold);
326 }
327 
MXC_UART_SetClockSource(mxc_uart_regs_t * uart,mxc_uart_clock_t clock)328 int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock)
329 {
330     return MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, (mxc_uart_revb_clock_t)clock);
331 }
332 
MXC_UART_GetActive(mxc_uart_regs_t * uart)333 int MXC_UART_GetActive(mxc_uart_regs_t *uart)
334 {
335     return MXC_UART_RevB_GetActive((mxc_uart_revb_regs_t *)uart);
336 }
337 
MXC_UART_AbortTransmission(mxc_uart_regs_t * uart)338 int MXC_UART_AbortTransmission(mxc_uart_regs_t *uart)
339 {
340     return MXC_UART_RevB_AbortTransmission((mxc_uart_revb_regs_t *)uart);
341 }
342 
MXC_UART_ReadCharacterRaw(mxc_uart_regs_t * uart)343 int MXC_UART_ReadCharacterRaw(mxc_uart_regs_t *uart)
344 {
345     return MXC_UART_RevB_ReadCharacterRaw((mxc_uart_revb_regs_t *)uart);
346 }
347 
MXC_UART_WriteCharacterRaw(mxc_uart_regs_t * uart,uint8_t character)348 int MXC_UART_WriteCharacterRaw(mxc_uart_regs_t *uart, uint8_t character)
349 {
350     return MXC_UART_RevB_WriteCharacterRaw((mxc_uart_revb_regs_t *)uart, character);
351 }
352 
MXC_UART_ReadCharacter(mxc_uart_regs_t * uart)353 int MXC_UART_ReadCharacter(mxc_uart_regs_t *uart)
354 {
355     return MXC_UART_Common_ReadCharacter(uart);
356 }
357 
MXC_UART_WriteCharacter(mxc_uart_regs_t * uart,uint8_t character)358 int MXC_UART_WriteCharacter(mxc_uart_regs_t *uart, uint8_t character)
359 {
360     return MXC_UART_Common_WriteCharacter(uart, character);
361 }
362 
MXC_UART_Read(mxc_uart_regs_t * uart,uint8_t * buffer,int * len)363 int MXC_UART_Read(mxc_uart_regs_t *uart, uint8_t *buffer, int *len)
364 {
365     return MXC_UART_RevB_Read((mxc_uart_revb_regs_t *)uart, buffer, len);
366 }
367 
MXC_UART_Write(mxc_uart_regs_t * uart,const uint8_t * byte,int * len)368 int MXC_UART_Write(mxc_uart_regs_t *uart, const uint8_t *byte, int *len)
369 {
370     return MXC_UART_RevB_Write((mxc_uart_revb_regs_t *)uart, byte, len);
371 }
372 
MXC_UART_ReadRXFIFO(mxc_uart_regs_t * uart,unsigned char * bytes,unsigned int len)373 unsigned int MXC_UART_ReadRXFIFO(mxc_uart_regs_t *uart, unsigned char *bytes, unsigned int len)
374 {
375     return MXC_UART_RevB_ReadRXFIFO((mxc_uart_revb_regs_t *)uart, bytes, len);
376 }
377 
MXC_UART_ReadRXFIFODMA(mxc_uart_regs_t * uart,unsigned char * bytes,unsigned int len,mxc_uart_dma_complete_cb_t callback)378 int MXC_UART_ReadRXFIFODMA(mxc_uart_regs_t *uart, unsigned char *bytes, unsigned int len,
379                            mxc_uart_dma_complete_cb_t callback)
380 {
381     mxc_dma_config_t config;
382 
383     int uart_num = MXC_UART_GET_IDX(uart);
384 
385     switch (uart_num) {
386     case 0:
387         config.reqsel = MXC_DMA_REQUEST_UART0RX;
388         break;
389 
390     case 1:
391         config.reqsel = MXC_DMA_REQUEST_UART1RX;
392         break;
393 
394     case 2:
395         config.reqsel = MXC_DMA_REQUEST_UART2RX;
396         break;
397 
398     case 3:
399         config.reqsel = MXC_DMA_REQUEST_UART3RX;
400         break;
401 
402     default:
403         return E_BAD_PARAM;
404         break;
405     }
406 
407     return MXC_UART_RevB_ReadRXFIFODMA((mxc_uart_revb_regs_t *)uart, bytes, len, callback, config);
408 }
409 
MXC_UART_GetRXFIFOAvailable(mxc_uart_regs_t * uart)410 unsigned int MXC_UART_GetRXFIFOAvailable(mxc_uart_regs_t *uart)
411 {
412     return MXC_UART_RevB_GetRXFIFOAvailable((mxc_uart_revb_regs_t *)uart);
413 }
414 
MXC_UART_WriteTXFIFO(mxc_uart_regs_t * uart,const unsigned char * bytes,unsigned int len)415 unsigned int MXC_UART_WriteTXFIFO(mxc_uart_regs_t *uart, const unsigned char *bytes,
416                                   unsigned int len)
417 {
418     return MXC_UART_RevB_WriteTXFIFO((mxc_uart_revb_regs_t *)uart, bytes, len);
419 }
420 
MXC_UART_WriteTXFIFODMA(mxc_uart_regs_t * uart,const unsigned char * bytes,unsigned int len,mxc_uart_dma_complete_cb_t callback)421 int MXC_UART_WriteTXFIFODMA(mxc_uart_regs_t *uart, const unsigned char *bytes, unsigned int len,
422                             mxc_uart_dma_complete_cb_t callback)
423 {
424     mxc_dma_config_t config;
425 
426     int uart_num = MXC_UART_GET_IDX(uart);
427     switch (uart_num) {
428     case 0:
429         config.reqsel = MXC_DMA_REQUEST_UART0TX;
430         break;
431 
432     case 1:
433         config.reqsel = MXC_DMA_REQUEST_UART1TX;
434         break;
435 
436     case 2:
437         config.reqsel = MXC_DMA_REQUEST_UART2TX;
438         break;
439 
440     case 3:
441         config.reqsel = MXC_DMA_REQUEST_UART3TX;
442         break;
443 
444     default:
445         return E_BAD_PARAM;
446         break;
447     }
448 
449     return MXC_UART_RevB_WriteTXFIFODMA((mxc_uart_revb_regs_t *)uart, bytes, len, callback, config);
450 }
451 
MXC_UART_GetTXFIFOAvailable(mxc_uart_regs_t * uart)452 unsigned int MXC_UART_GetTXFIFOAvailable(mxc_uart_regs_t *uart)
453 {
454     return MXC_UART_RevB_GetTXFIFOAvailable((mxc_uart_revb_regs_t *)uart);
455 }
456 
MXC_UART_ClearRXFIFO(mxc_uart_regs_t * uart)457 int MXC_UART_ClearRXFIFO(mxc_uart_regs_t *uart)
458 {
459     return MXC_UART_RevB_ClearRXFIFO((mxc_uart_revb_regs_t *)uart);
460 }
461 
MXC_UART_ClearTXFIFO(mxc_uart_regs_t * uart)462 int MXC_UART_ClearTXFIFO(mxc_uart_regs_t *uart)
463 {
464     return MXC_UART_RevB_ClearTXFIFO((mxc_uart_revb_regs_t *)uart);
465 }
466 
MXC_UART_SetRXThreshold(mxc_uart_regs_t * uart,unsigned int numBytes)467 int MXC_UART_SetRXThreshold(mxc_uart_regs_t *uart, unsigned int numBytes)
468 {
469     return MXC_UART_RevB_SetRXThreshold((mxc_uart_revb_regs_t *)uart, numBytes);
470 }
471 
MXC_UART_GetRXThreshold(mxc_uart_regs_t * uart)472 unsigned int MXC_UART_GetRXThreshold(mxc_uart_regs_t *uart)
473 {
474     return MXC_UART_RevB_GetRXThreshold((mxc_uart_revb_regs_t *)uart);
475 }
476 
MXC_UART_SetTXThreshold(mxc_uart_regs_t * uart,unsigned int numBytes)477 int MXC_UART_SetTXThreshold(mxc_uart_regs_t *uart, unsigned int numBytes)
478 {
479     return E_NOT_SUPPORTED;
480 }
481 
MXC_UART_GetTXThreshold(mxc_uart_regs_t * uart)482 unsigned int MXC_UART_GetTXThreshold(mxc_uart_regs_t *uart)
483 {
484     return 0;
485 }
486 
MXC_UART_GetFlags(mxc_uart_regs_t * uart)487 unsigned int MXC_UART_GetFlags(mxc_uart_regs_t *uart)
488 {
489     return MXC_UART_RevB_GetFlags((mxc_uart_revb_regs_t *)uart);
490 }
491 
MXC_UART_ClearFlags(mxc_uart_regs_t * uart,unsigned int flags)492 int MXC_UART_ClearFlags(mxc_uart_regs_t *uart, unsigned int flags)
493 {
494     return MXC_UART_RevB_ClearFlags((mxc_uart_revb_regs_t *)uart, flags);
495 }
496 
MXC_UART_EnableInt(mxc_uart_regs_t * uart,unsigned int intEn)497 int MXC_UART_EnableInt(mxc_uart_regs_t *uart, unsigned int intEn)
498 {
499     return MXC_UART_RevB_EnableInt((mxc_uart_revb_regs_t *)uart, intEn);
500 }
501 
MXC_UART_DisableInt(mxc_uart_regs_t * uart,unsigned int intDis)502 int MXC_UART_DisableInt(mxc_uart_regs_t *uart, unsigned int intDis)
503 {
504     return MXC_UART_RevB_DisableInt((mxc_uart_revb_regs_t *)uart, intDis);
505 }
506 
MXC_UART_GetStatus(mxc_uart_regs_t * uart)507 unsigned int MXC_UART_GetStatus(mxc_uart_regs_t *uart)
508 {
509     return MXC_UART_RevB_GetStatus((mxc_uart_revb_regs_t *)uart);
510 }
511 
MXC_UART_Transaction(mxc_uart_req_t * req)512 int MXC_UART_Transaction(mxc_uart_req_t *req)
513 {
514     return MXC_UART_RevB_Transaction((mxc_uart_revb_req_t *)req);
515 }
516 
MXC_UART_TransactionAsync(mxc_uart_req_t * req)517 int MXC_UART_TransactionAsync(mxc_uart_req_t *req)
518 {
519     return MXC_UART_RevB_TransactionAsync((mxc_uart_revb_req_t *)req);
520 }
521 
MXC_UART_TransactionDMA(mxc_uart_req_t * req)522 int MXC_UART_TransactionDMA(mxc_uart_req_t *req)
523 {
524     return MXC_UART_RevB_TransactionDMA((mxc_uart_revb_req_t *)req);
525 }
526 
MXC_UART_AbortAsync(mxc_uart_regs_t * uart)527 int MXC_UART_AbortAsync(mxc_uart_regs_t *uart)
528 {
529     return MXC_UART_RevB_AbortAsync((mxc_uart_revb_regs_t *)uart);
530 }
531 
MXC_UART_AsyncHandler(mxc_uart_regs_t * uart)532 int MXC_UART_AsyncHandler(mxc_uart_regs_t *uart)
533 {
534     return MXC_UART_RevB_AsyncHandler((mxc_uart_revb_regs_t *)uart);
535 }
536 
MXC_UART_GetAsyncTXCount(mxc_uart_req_t * req)537 uint32_t MXC_UART_GetAsyncTXCount(mxc_uart_req_t *req)
538 {
539     return req->txCnt;
540 }
541 
MXC_UART_GetAsyncRXCount(mxc_uart_req_t * req)542 uint32_t MXC_UART_GetAsyncRXCount(mxc_uart_req_t *req)
543 {
544     return req->rxCnt;
545 }
546 
MXC_UART_SetAutoDMAHandlers(mxc_uart_regs_t * uart,bool enable)547 int MXC_UART_SetAutoDMAHandlers(mxc_uart_regs_t *uart, bool enable)
548 {
549     return MXC_UART_RevB_SetAutoDMAHandlers((mxc_uart_revb_regs_t *)uart, enable);
550 }
551 
MXC_UART_SetTXDMAChannel(mxc_uart_regs_t * uart,unsigned int channel)552 int MXC_UART_SetTXDMAChannel(mxc_uart_regs_t *uart, unsigned int channel)
553 {
554     return MXC_UART_RevB_SetTXDMAChannel((mxc_uart_revb_regs_t *)uart, channel);
555 }
556 
MXC_UART_GetTXDMAChannel(mxc_uart_regs_t * uart)557 int MXC_UART_GetTXDMAChannel(mxc_uart_regs_t *uart)
558 {
559     return MXC_UART_RevB_GetTXDMAChannel((mxc_uart_revb_regs_t *)uart);
560 }
561 
MXC_UART_SetRXDMAChannel(mxc_uart_regs_t * uart,unsigned int channel)562 int MXC_UART_SetRXDMAChannel(mxc_uart_regs_t *uart, unsigned int channel)
563 {
564     return MXC_UART_RevB_SetRXDMAChannel((mxc_uart_revb_regs_t *)uart, channel);
565 }
566 
MXC_UART_GetRXDMAChannel(mxc_uart_regs_t * uart)567 int MXC_UART_GetRXDMAChannel(mxc_uart_regs_t *uart)
568 {
569     return MXC_UART_RevB_GetTXDMAChannel((mxc_uart_revb_regs_t *)uart);
570 }
571