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_revc.h"
26 #include "uart_common.h"
27 #include "dma.h"
28 
MXC_UART_DMACallback(int ch,int error)29 void MXC_UART_DMACallback(int ch, int error)
30 {
31     MXC_UART_RevC_DMACallback(ch, error);
32 }
33 
MXC_UART_AsyncCallback(mxc_uart_regs_t * uart,int retVal)34 int MXC_UART_AsyncCallback(mxc_uart_regs_t *uart, int retVal)
35 {
36     return MXC_UART_RevC_AsyncCallback((mxc_uart_revc_regs_t *)uart, retVal);
37 }
38 
MXC_UART_AsyncStop(mxc_uart_regs_t * uart)39 int MXC_UART_AsyncStop(mxc_uart_regs_t *uart)
40 {
41     return MXC_UART_RevC_AsyncStop((mxc_uart_revc_regs_t *)uart);
42 }
43 
MXC_UART_Init(mxc_uart_regs_t * uart,unsigned int baud)44 int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud)
45 {
46 #ifndef MSDK_NO_GPIO_CLK_INIT
47     int retval;
48 
49     retval = MXC_UART_Shutdown(uart);
50 
51     if (retval) {
52         return retval;
53     }
54 
55     switch (MXC_UART_GET_IDX(uart)) {
56     case 0:
57         MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_UART0);
58         MXC_GPIO_Config(&gpio_cfg_uart0);
59         break;
60 
61     default:
62         return E_BAD_PARAM;
63         break;
64     }
65 #endif
66 
67     return MXC_UART_RevC_Init((mxc_uart_revc_regs_t *)uart, baud);
68 }
69 
MXC_UART_Shutdown(mxc_uart_regs_t * uart)70 int MXC_UART_Shutdown(mxc_uart_regs_t *uart)
71 {
72     switch (MXC_UART_GET_IDX(uart)) {
73     case 0:
74         MXC_SYS_Reset_Periph(MXC_SYS_RESET_UART0);
75         MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_UART0);
76         break;
77 
78     default:
79         return E_BAD_PARAM;
80         break;
81     }
82 
83     return E_NO_ERROR;
84 }
85 
MXC_UART_ReadyForSleep(mxc_uart_regs_t * uart)86 int MXC_UART_ReadyForSleep(mxc_uart_regs_t *uart)
87 {
88     return MXC_UART_RevC_ReadyForSleep((mxc_uart_revc_regs_t *)uart);
89 }
90 
MXC_UART_SetFrequency(mxc_uart_regs_t * uart,unsigned int baud)91 int MXC_UART_SetFrequency(mxc_uart_regs_t *uart, unsigned int baud)
92 {
93     return MXC_UART_RevC_SetFrequency((mxc_uart_revc_regs_t *)uart, baud);
94 }
95 
MXC_UART_GetFrequency(mxc_uart_regs_t * uart)96 int MXC_UART_GetFrequency(mxc_uart_regs_t *uart)
97 {
98     return MXC_UART_RevC_GetFrequency((mxc_uart_revc_regs_t *)uart);
99 }
100 
MXC_UART_SetDataSize(mxc_uart_regs_t * uart,int dataSize)101 int MXC_UART_SetDataSize(mxc_uart_regs_t *uart, int dataSize)
102 {
103     return MXC_UART_RevC_SetDataSize((mxc_uart_revc_regs_t *)uart, dataSize);
104 }
105 
MXC_UART_SetStopBits(mxc_uart_regs_t * uart,mxc_uart_stop_t stopBits)106 int MXC_UART_SetStopBits(mxc_uart_regs_t *uart, mxc_uart_stop_t stopBits)
107 {
108     return MXC_UART_RevC_SetStopBits((mxc_uart_revc_regs_t *)uart, stopBits);
109 }
110 
MXC_UART_SetParity(mxc_uart_regs_t * uart,mxc_uart_parity_t parity)111 int MXC_UART_SetParity(mxc_uart_regs_t *uart, mxc_uart_parity_t parity)
112 {
113     return MXC_UART_RevC_SetParity((mxc_uart_revc_regs_t *)uart, parity);
114 }
115 
MXC_UART_GetActive(mxc_uart_regs_t * uart)116 int MXC_UART_GetActive(mxc_uart_regs_t *uart)
117 {
118     return MXC_UART_RevC_GetActive((mxc_uart_revc_regs_t *)uart);
119 }
120 
MXC_UART_AbortTransmission(mxc_uart_regs_t * uart)121 int MXC_UART_AbortTransmission(mxc_uart_regs_t *uart)
122 {
123     return MXC_UART_RevC_AbortTransmission((mxc_uart_revc_regs_t *)uart);
124 }
125 
MXC_UART_ReadCharacterRaw(mxc_uart_regs_t * uart)126 int MXC_UART_ReadCharacterRaw(mxc_uart_regs_t *uart)
127 {
128     return MXC_UART_RevC_ReadCharacterRaw((mxc_uart_revc_regs_t *)uart);
129 }
130 
MXC_UART_WriteCharacterRaw(mxc_uart_regs_t * uart,uint8_t character)131 int MXC_UART_WriteCharacterRaw(mxc_uart_regs_t *uart, uint8_t character)
132 {
133     return MXC_UART_RevC_WriteCharacterRaw((mxc_uart_revc_regs_t *)uart, character);
134 }
135 
MXC_UART_ReadCharacter(mxc_uart_regs_t * uart)136 int MXC_UART_ReadCharacter(mxc_uart_regs_t *uart)
137 {
138     return MXC_UART_Common_ReadCharacter(uart);
139 }
140 
MXC_UART_WriteCharacter(mxc_uart_regs_t * uart,uint8_t character)141 int MXC_UART_WriteCharacter(mxc_uart_regs_t *uart, uint8_t character)
142 {
143     return MXC_UART_Common_WriteCharacter(uart, character);
144 }
145 
MXC_UART_Read(mxc_uart_regs_t * uart,uint8_t * buffer,int * len)146 int MXC_UART_Read(mxc_uart_regs_t *uart, uint8_t *buffer, int *len)
147 {
148     return MXC_UART_RevC_Read((mxc_uart_revc_regs_t *)uart, buffer, len);
149 }
150 
MXC_UART_Write(mxc_uart_regs_t * uart,uint8_t * byte,int * len)151 int MXC_UART_Write(mxc_uart_regs_t *uart, uint8_t *byte, int *len)
152 {
153     return MXC_UART_RevC_Write((mxc_uart_revc_regs_t *)uart, byte, len);
154 }
155 
MXC_UART_ReadRXFIFO(mxc_uart_regs_t * uart,unsigned char * bytes,unsigned int len)156 unsigned int MXC_UART_ReadRXFIFO(mxc_uart_regs_t *uart, unsigned char *bytes, unsigned int len)
157 {
158     return MXC_UART_RevC_ReadRXFIFO((mxc_uart_revc_regs_t *)uart, bytes, len);
159 }
160 
MXC_UART_ReadRXFIFODMA(mxc_uart_regs_t * uart,unsigned char * bytes,unsigned int len,mxc_uart_dma_complete_cb_t callback)161 int MXC_UART_ReadRXFIFODMA(mxc_uart_regs_t *uart, unsigned char *bytes, unsigned int len,
162                            mxc_uart_dma_complete_cb_t callback)
163 {
164     mxc_dma_config_t config;
165 
166     int uart_num = MXC_UART_GET_IDX(uart);
167 
168     switch (uart_num) {
169     case 0:
170         config.reqsel = MXC_DMA_REQUEST_UART0RX;
171         break;
172 
173     default:
174         return E_BAD_PARAM;
175         break;
176     }
177 
178     return MXC_UART_RevC_ReadRXFIFODMA((mxc_uart_revc_regs_t *)uart, bytes, len, callback, config);
179 }
180 
MXC_UART_GetRXFIFOAvailable(mxc_uart_regs_t * uart)181 unsigned int MXC_UART_GetRXFIFOAvailable(mxc_uart_regs_t *uart)
182 {
183     return MXC_UART_RevC_GetRXFIFOAvailable((mxc_uart_revc_regs_t *)uart);
184 }
185 
MXC_UART_WriteTXFIFO(mxc_uart_regs_t * uart,unsigned char * bytes,unsigned int len)186 unsigned int MXC_UART_WriteTXFIFO(mxc_uart_regs_t *uart, unsigned char *bytes, unsigned int len)
187 {
188     return MXC_UART_RevC_WriteTXFIFO((mxc_uart_revc_regs_t *)uart, bytes, len);
189 }
190 
MXC_UART_WriteTXFIFODMA(mxc_uart_regs_t * uart,unsigned char * bytes,unsigned int len,mxc_uart_dma_complete_cb_t callback)191 int MXC_UART_WriteTXFIFODMA(mxc_uart_regs_t *uart, unsigned char *bytes, unsigned int len,
192                             mxc_uart_dma_complete_cb_t callback)
193 {
194     mxc_dma_config_t config;
195 
196     int uart_num = MXC_UART_GET_IDX(uart);
197 
198     switch (uart_num) {
199     case 0:
200         config.reqsel = MXC_DMA_REQUEST_UART0TX;
201         break;
202 
203     default:
204         return E_BAD_PARAM;
205         break;
206     }
207 
208     return MXC_UART_RevC_WriteTXFIFODMA((mxc_uart_revc_regs_t *)uart, bytes, len, callback, config);
209 }
210 
MXC_UART_GetTXFIFOAvailable(mxc_uart_regs_t * uart)211 unsigned int MXC_UART_GetTXFIFOAvailable(mxc_uart_regs_t *uart)
212 {
213     return MXC_UART_RevC_GetTXFIFOAvailable((mxc_uart_revc_regs_t *)uart);
214 }
215 
MXC_UART_ClearRXFIFO(mxc_uart_regs_t * uart)216 int MXC_UART_ClearRXFIFO(mxc_uart_regs_t *uart)
217 {
218     return MXC_UART_RevC_ClearRXFIFO((mxc_uart_revc_regs_t *)uart);
219 }
220 
MXC_UART_ClearTXFIFO(mxc_uart_regs_t * uart)221 int MXC_UART_ClearTXFIFO(mxc_uart_regs_t *uart)
222 {
223     return MXC_UART_RevC_ClearTXFIFO((mxc_uart_revc_regs_t *)uart);
224 }
225 
MXC_UART_SetRXThreshold(mxc_uart_regs_t * uart,unsigned int numBytes)226 int MXC_UART_SetRXThreshold(mxc_uart_regs_t *uart, unsigned int numBytes)
227 {
228     return MXC_UART_RevC_SetRXThreshold((mxc_uart_revc_regs_t *)uart, numBytes);
229 }
230 
MXC_UART_GetRXThreshold(mxc_uart_regs_t * uart)231 unsigned int MXC_UART_GetRXThreshold(mxc_uart_regs_t *uart)
232 {
233     return MXC_UART_RevC_GetRXThreshold((mxc_uart_revc_regs_t *)uart);
234 }
235 
MXC_UART_GetFlags(mxc_uart_regs_t * uart)236 unsigned int MXC_UART_GetFlags(mxc_uart_regs_t *uart)
237 {
238     return MXC_UART_RevC_GetFlags((mxc_uart_revc_regs_t *)uart);
239 }
240 
MXC_UART_ClearFlags(mxc_uart_regs_t * uart,unsigned int flags)241 int MXC_UART_ClearFlags(mxc_uart_regs_t *uart, unsigned int flags)
242 {
243     return MXC_UART_RevC_ClearFlags((mxc_uart_revc_regs_t *)uart, flags);
244 }
245 
MXC_UART_EnableInt(mxc_uart_regs_t * uart,unsigned int mask)246 int MXC_UART_EnableInt(mxc_uart_regs_t *uart, unsigned int mask)
247 {
248     return MXC_UART_RevC_EnableInt((mxc_uart_revc_regs_t *)uart, mask);
249 }
250 
MXC_UART_DisableInt(mxc_uart_regs_t * uart,unsigned int mask)251 int MXC_UART_DisableInt(mxc_uart_regs_t *uart, unsigned int mask)
252 {
253     return MXC_UART_RevC_DisableInt((mxc_uart_revc_regs_t *)uart, mask);
254 }
255 
MXC_UART_GetStatus(mxc_uart_regs_t * uart)256 unsigned int MXC_UART_GetStatus(mxc_uart_regs_t *uart)
257 {
258     return MXC_UART_RevC_GetStatus((mxc_uart_revc_regs_t *)uart);
259 }
260 
MXC_UART_Transaction(mxc_uart_req_t * req)261 int MXC_UART_Transaction(mxc_uart_req_t *req)
262 {
263     return MXC_UART_RevC_Transaction((mxc_uart_revc_req_t *)req);
264 }
265 
MXC_UART_TransactionAsync(mxc_uart_req_t * req)266 int MXC_UART_TransactionAsync(mxc_uart_req_t *req)
267 {
268     return MXC_UART_RevC_TransactionAsync((mxc_uart_revc_req_t *)req);
269 }
270 
MXC_UART_TransactionDMA(mxc_uart_req_t * req)271 int MXC_UART_TransactionDMA(mxc_uart_req_t *req)
272 {
273     return MXC_UART_RevC_TransactionDMA((mxc_uart_revc_req_t *)req);
274 }
275 
MXC_UART_AbortAsync(mxc_uart_regs_t * uart)276 int MXC_UART_AbortAsync(mxc_uart_regs_t *uart)
277 {
278     return MXC_UART_RevC_AbortAsync((mxc_uart_revc_regs_t *)uart);
279 }
280 
MXC_UART_AsyncHandler(mxc_uart_regs_t * uart)281 int MXC_UART_AsyncHandler(mxc_uart_regs_t *uart)
282 {
283     return MXC_UART_RevC_AsyncHandler((mxc_uart_revc_regs_t *)uart);
284 }
285 
MXC_UART_GetAsyncTXCount(mxc_uart_req_t * req)286 uint32_t MXC_UART_GetAsyncTXCount(mxc_uart_req_t *req)
287 {
288     return req->txCnt;
289 }
290 
MXC_UART_GetAsyncRXCount(mxc_uart_req_t * req)291 uint32_t MXC_UART_GetAsyncRXCount(mxc_uart_req_t *req)
292 {
293     return req->rxCnt;
294 }
295