1 /*
2 * Copyright (c) 2013-2024, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Licensed under the Apache License, Version 2.0 (the License); you may
7 * not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
14 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19 #include "Driver_USART.h"
20
21 #include "tfm_hal_device_header.h"
22 #include "cmsis_driver_config.h"
23 #include "RTE_Device.h"
24
25 #ifndef ARG_UNUSED
26 #define ARG_UNUSED(arg) (void)arg
27 #endif
28
29 /* Driver version */
30 #define ARM_USART_DRV_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR(2, 2)
31
32 /* Driver Version */
33 static const ARM_DRIVER_VERSION DriverVersion = {
34 ARM_USART_API_VERSION,
35 ARM_USART_DRV_VERSION
36 };
37
38 /* Driver Capabilities */
39 static const ARM_USART_CAPABILITIES DriverCapabilities = {
40 1, /* supports UART (Asynchronous) mode */
41 0, /* supports Synchronous Master mode */
42 0, /* supports Synchronous Slave mode */
43 0, /* supports UART Single-wire mode */
44 0, /* supports UART IrDA mode */
45 0, /* supports UART Smart Card mode */
46 0, /* Smart Card Clock generator available */
47 0, /* RTS Flow Control available */
48 0, /* CTS Flow Control available */
49 0, /* Transmit completed event: \ref ARM_USARTx_EVENT_TX_COMPLETE */
50 0, /* Signal receive character timeout event: \ref ARM_USARTx_EVENT_RX_TIMEOUT */
51 0, /* RTS Line: 0=not available, 1=available */
52 0, /* CTS Line: 0=not available, 1=available */
53 0, /* DTR Line: 0=not available, 1=available */
54 0, /* DSR Line: 0=not available, 1=available */
55 0, /* DCD Line: 0=not available, 1=available */
56 0, /* RI Line: 0=not available, 1=available */
57 0, /* Signal CTS change event: \ref ARM_USARTx_EVENT_CTS */
58 0, /* Signal DSR change event: \ref ARM_USARTx_EVENT_DSR */
59 0, /* Signal DCD change event: \ref ARM_USARTx_EVENT_DCD */
60 0, /* Signal RI change event: \ref ARM_USARTx_EVENT_RI */
61 0 /* Reserved */
62 };
63
ARM_USART_GetVersion(void)64 static ARM_DRIVER_VERSION ARM_USART_GetVersion(void)
65 {
66 return DriverVersion;
67 }
68
ARM_USART_GetCapabilities(void)69 static ARM_USART_CAPABILITIES ARM_USART_GetCapabilities(void)
70 {
71 return DriverCapabilities;
72 }
73
74 typedef struct {
75 struct arm_uart_dev_t* dev; /* UART device structure */
76 uint32_t tx_nbr_bytes; /* Number of bytes transfered */
77 uint32_t rx_nbr_bytes; /* Number of bytes recevied */
78 ARM_USART_SignalEvent_t cb_event; /* Callback function for events */
79 } UARTx_Resources;
80
ARM_USARTx_Initialize(UARTx_Resources * uart_dev)81 static int32_t ARM_USARTx_Initialize(UARTx_Resources* uart_dev)
82 {
83 /* Initializes generic UART driver */
84 arm_uart_init(uart_dev->dev, PeripheralClock);
85
86 return ARM_DRIVER_OK;
87 }
88
ARM_USARTx_PowerControl(UARTx_Resources * uart_dev,ARM_POWER_STATE state)89 static int32_t ARM_USARTx_PowerControl(UARTx_Resources* uart_dev,
90 ARM_POWER_STATE state)
91 {
92 ARG_UNUSED(uart_dev);
93
94 switch (state) {
95 case ARM_POWER_OFF:
96 case ARM_POWER_LOW:
97 return ARM_DRIVER_ERROR_UNSUPPORTED;
98 case ARM_POWER_FULL:
99 /* Nothing to be done */
100 return ARM_DRIVER_OK;
101 /* default: The default is not defined intentionally to force the
102 * compiler to check that all the enumeration values are
103 * covered in the switch.*/
104 }
105 }
106
ARM_USARTx_Send(UARTx_Resources * uart_dev,const void * data,uint32_t num)107 static int32_t ARM_USARTx_Send(UARTx_Resources* uart_dev, const void *data,
108 uint32_t num)
109 {
110 const uint8_t* p_data = (const uint8_t*)data;
111
112 if ((data == NULL) || (num == 0U)) {
113 /* Invalid parameters */
114 return ARM_DRIVER_ERROR_PARAMETER;
115 }
116
117 /* Resets previous TX counter */
118 uart_dev->tx_nbr_bytes = 0;
119
120 while(uart_dev->tx_nbr_bytes != num) {
121 /* Waits until UART is ready to transmit */
122 while(!arm_uart_tx_ready(uart_dev->dev)) {};
123
124 /* As UART is ready to transmit at this point, the write function can
125 * not return any transmit error */
126 (void)arm_uart_write(uart_dev->dev, *p_data);
127
128 uart_dev->tx_nbr_bytes++;
129 p_data++;
130 }
131
132 if (uart_dev->cb_event != NULL) {
133 uart_dev->cb_event(ARM_USART_EVENT_SEND_COMPLETE);
134 }
135
136 /* Waits until character is transmited */
137 while (!arm_uart_tx_ready(uart_dev->dev)){};
138
139 return ARM_DRIVER_OK;
140 }
141
ARM_USARTx_Receive(UARTx_Resources * uart_dev,void * data,uint32_t num)142 static int32_t ARM_USARTx_Receive(UARTx_Resources* uart_dev,
143 void *data, uint32_t num)
144 {
145 uint8_t* p_data = (uint8_t*)data;
146
147 if ((data == NULL) || (num == 0U)) {
148 // Invalid parameters
149 return ARM_DRIVER_ERROR_PARAMETER;
150 }
151
152 /* Resets previous RX counter */
153 uart_dev->rx_nbr_bytes = 0;
154
155 while(uart_dev->rx_nbr_bytes != num) {
156 /* Waits until one character is received */
157 while (!arm_uart_rx_ready(uart_dev->dev)){};
158
159 /* As UART has received one byte, the read can not
160 * return any receive error at this point */
161 (void)arm_uart_read(uart_dev->dev, p_data);
162
163 uart_dev->rx_nbr_bytes++;
164 p_data++;
165 }
166
167 if (uart_dev->cb_event != NULL) {
168 uart_dev->cb_event(ARM_USART_EVENT_RECEIVE_COMPLETE);
169 }
170
171 return ARM_DRIVER_OK;
172 }
173
ARM_USARTx_GetTxCount(UARTx_Resources * uart_dev)174 static uint32_t ARM_USARTx_GetTxCount(UARTx_Resources* uart_dev)
175 {
176 return uart_dev->tx_nbr_bytes;
177 }
178
ARM_USARTx_GetRxCount(UARTx_Resources * uart_dev)179 static uint32_t ARM_USARTx_GetRxCount(UARTx_Resources* uart_dev)
180 {
181 return uart_dev->rx_nbr_bytes;
182 }
183
ARM_USARTx_Control(UARTx_Resources * uart_dev,uint32_t control,uint32_t arg)184 static int32_t ARM_USARTx_Control(UARTx_Resources* uart_dev, uint32_t control,
185 uint32_t arg)
186 {
187 switch (control & ARM_USART_CONTROL_Msk) {
188 #ifdef UART_TX_RX_CONTROL_ENABLED
189 case ARM_USART_CONTROL_TX:
190 if (arg == 0) {
191 arm_uart_tx_disable(uart_dev->dev);
192 } else if (arg == 1) {
193 if (arm_uart_tx_enable(uart_dev->dev) != ARM_UART_ERR_NONE) {
194 return ARM_DRIVER_ERROR;
195 }
196 } else {
197 return ARM_DRIVER_ERROR_PARAMETER;
198 }
199 break;
200 case ARM_USART_CONTROL_RX:
201 if (arg == 0) {
202 arm_uart_rx_disable(uart_dev->dev);
203 } else if (arg == 1) {
204 if (arm_uart_rx_enable(uart_dev->dev) != ARM_UART_ERR_NONE) {
205 return ARM_DRIVER_ERROR;
206 }
207 } else {
208 return ARM_DRIVER_ERROR_PARAMETER;
209 }
210 break;
211 #endif
212 case ARM_USART_MODE_ASYNCHRONOUS:
213 if(arm_uart_set_baudrate(uart_dev->dev, arg) != ARM_UART_ERR_NONE) {
214 return ARM_USART_ERROR_BAUDRATE;
215 }
216 break;
217 /* Unsupported command */
218 default:
219 return ARM_DRIVER_ERROR_UNSUPPORTED;
220 }
221
222 /* UART Data bits */
223 if(control & ARM_USART_DATA_BITS_Msk) {
224 /* Data bit is not configurable */
225 return ARM_DRIVER_ERROR_UNSUPPORTED;
226 }
227
228 /* UART Parity */
229 if(control & ARM_USART_PARITY_Msk) {
230 /* Parity is not configurable */
231 return ARM_USART_ERROR_PARITY;
232 }
233
234 /* USART Stop bits */
235 if(control & ARM_USART_STOP_BITS_Msk) {
236 /* Stop bit is not configurable */
237 return ARM_USART_ERROR_STOP_BITS;
238 }
239
240 return ARM_DRIVER_OK;
241 }
242
243 #if (RTE_USART0)
244 /* USART0 Driver wrapper functions */
245 static UARTx_Resources USART0_DEV = {
246 .dev = &UART0_DEV,
247 .tx_nbr_bytes = 0,
248 .rx_nbr_bytes = 0,
249 .cb_event = NULL,
250 };
251
ARM_USART0_Initialize(ARM_USART_SignalEvent_t cb_event)252 static int32_t ARM_USART0_Initialize(ARM_USART_SignalEvent_t cb_event)
253 {
254 USART0_DEV.cb_event = cb_event;
255
256 return ARM_USARTx_Initialize(&USART0_DEV);
257 }
258
ARM_USART0_Uninitialize(void)259 static int32_t ARM_USART0_Uninitialize(void)
260 {
261 /* Nothing to be done */
262 return ARM_DRIVER_OK;
263 }
264
ARM_USART0_PowerControl(ARM_POWER_STATE state)265 static int32_t ARM_USART0_PowerControl(ARM_POWER_STATE state)
266 {
267 return ARM_USARTx_PowerControl(&USART0_DEV, state);
268 }
269
ARM_USART0_Send(const void * data,uint32_t num)270 static int32_t ARM_USART0_Send(const void *data, uint32_t num)
271 {
272 return ARM_USARTx_Send(&USART0_DEV, data, num);
273 }
274
ARM_USART0_Receive(void * data,uint32_t num)275 static int32_t ARM_USART0_Receive(void *data, uint32_t num)
276 {
277 return ARM_USARTx_Receive(&USART0_DEV, data, num);
278 }
279
ARM_USART0_Transfer(const void * data_out,void * data_in,uint32_t num)280 static int32_t ARM_USART0_Transfer(const void *data_out, void *data_in,
281 uint32_t num)
282 {
283 ARG_UNUSED(data_out);
284 ARG_UNUSED(data_in);
285 ARG_UNUSED(num);
286
287 return ARM_DRIVER_ERROR_UNSUPPORTED;
288 }
289
ARM_USART0_GetTxCount(void)290 static uint32_t ARM_USART0_GetTxCount(void)
291 {
292 return ARM_USARTx_GetTxCount(&USART0_DEV);
293 }
294
ARM_USART0_GetRxCount(void)295 static uint32_t ARM_USART0_GetRxCount(void)
296 {
297 return ARM_USARTx_GetRxCount(&USART0_DEV);
298 }
ARM_USART0_Control(uint32_t control,uint32_t arg)299 static int32_t ARM_USART0_Control(uint32_t control, uint32_t arg)
300 {
301 return ARM_USARTx_Control(&USART0_DEV, control, arg);
302 }
303
ARM_USART0_GetStatus(void)304 static ARM_USART_STATUS ARM_USART0_GetStatus(void)
305 {
306 ARM_USART_STATUS status = {0, 0, 0, 0, 0, 0, 0, 0};
307 return status;
308 }
309
ARM_USART0_SetModemControl(ARM_USART_MODEM_CONTROL control)310 static int32_t ARM_USART0_SetModemControl(ARM_USART_MODEM_CONTROL control)
311 {
312 ARG_UNUSED(control);
313 return ARM_DRIVER_ERROR_UNSUPPORTED;
314 }
315
ARM_USART0_GetModemStatus(void)316 static ARM_USART_MODEM_STATUS ARM_USART0_GetModemStatus(void)
317 {
318 ARM_USART_MODEM_STATUS modem_status = {0, 0, 0, 0, 0};
319 return modem_status;
320 }
321
322 extern ARM_DRIVER_USART Driver_USART0;
323 ARM_DRIVER_USART Driver_USART0 = {
324 ARM_USART_GetVersion,
325 ARM_USART_GetCapabilities,
326 ARM_USART0_Initialize,
327 ARM_USART0_Uninitialize,
328 ARM_USART0_PowerControl,
329 ARM_USART0_Send,
330 ARM_USART0_Receive,
331 ARM_USART0_Transfer,
332 ARM_USART0_GetTxCount,
333 ARM_USART0_GetRxCount,
334 ARM_USART0_Control,
335 ARM_USART0_GetStatus,
336 ARM_USART0_SetModemControl,
337 ARM_USART0_GetModemStatus
338 };
339 #endif /* RTE_USART0 */
340
341 #if (RTE_USART1)
342 /* USART1 Driver wrapper functions */
343 static UARTx_Resources USART1_DEV = {
344 .dev = &UART1_DEV,
345 .tx_nbr_bytes = 0,
346 .rx_nbr_bytes = 0,
347 .cb_event = NULL,
348 };
349
ARM_USART1_Initialize(ARM_USART_SignalEvent_t cb_event)350 static int32_t ARM_USART1_Initialize(ARM_USART_SignalEvent_t cb_event)
351 {
352 USART1_DEV.cb_event = cb_event;
353
354 return ARM_USARTx_Initialize(&USART1_DEV);
355 }
356
ARM_USART1_Uninitialize(void)357 static int32_t ARM_USART1_Uninitialize(void)
358 {
359 /* Nothing to be done */
360 return ARM_DRIVER_OK;
361 }
362
ARM_USART1_PowerControl(ARM_POWER_STATE state)363 static int32_t ARM_USART1_PowerControl(ARM_POWER_STATE state)
364 {
365 return ARM_USARTx_PowerControl(&USART1_DEV, state);
366 }
367
ARM_USART1_Send(const void * data,uint32_t num)368 static int32_t ARM_USART1_Send(const void *data, uint32_t num)
369 {
370 return ARM_USARTx_Send(&USART1_DEV, data, num);
371 }
372
ARM_USART1_Receive(void * data,uint32_t num)373 static int32_t ARM_USART1_Receive(void *data, uint32_t num)
374 {
375 return ARM_USARTx_Receive(&USART1_DEV, data, num);
376 }
377
ARM_USART1_Transfer(const void * data_out,void * data_in,uint32_t num)378 static int32_t ARM_USART1_Transfer(const void *data_out, void *data_in,
379 uint32_t num)
380 {
381 ARG_UNUSED(data_out);
382 ARG_UNUSED(data_in);
383 ARG_UNUSED(num);
384
385 return ARM_DRIVER_ERROR_UNSUPPORTED;
386 }
387
ARM_USART1_GetTxCount(void)388 static uint32_t ARM_USART1_GetTxCount(void)
389 {
390 return ARM_USARTx_GetTxCount(&USART1_DEV);
391 }
392
ARM_USART1_GetRxCount(void)393 static uint32_t ARM_USART1_GetRxCount(void)
394 {
395 return ARM_USARTx_GetRxCount(&USART1_DEV);
396 }
ARM_USART1_Control(uint32_t control,uint32_t arg)397 static int32_t ARM_USART1_Control(uint32_t control, uint32_t arg)
398 {
399 return ARM_USARTx_Control(&USART1_DEV, control, arg);
400 }
401
ARM_USART1_GetStatus(void)402 static ARM_USART_STATUS ARM_USART1_GetStatus(void)
403 {
404 ARM_USART_STATUS status = {0, 0, 0, 0, 0, 0, 0, 0};
405 return status;
406 }
407
ARM_USART1_SetModemControl(ARM_USART_MODEM_CONTROL control)408 static int32_t ARM_USART1_SetModemControl(ARM_USART_MODEM_CONTROL control)
409 {
410 ARG_UNUSED(control);
411 return ARM_DRIVER_ERROR_UNSUPPORTED;
412 }
413
ARM_USART1_GetModemStatus(void)414 static ARM_USART_MODEM_STATUS ARM_USART1_GetModemStatus(void)
415 {
416 ARM_USART_MODEM_STATUS modem_status = {0, 0, 0, 0, 0};
417 return modem_status;
418 }
419
420 extern ARM_DRIVER_USART Driver_USART1;
421 ARM_DRIVER_USART Driver_USART1 = {
422 ARM_USART_GetVersion,
423 ARM_USART_GetCapabilities,
424 ARM_USART1_Initialize,
425 ARM_USART1_Uninitialize,
426 ARM_USART1_PowerControl,
427 ARM_USART1_Send,
428 ARM_USART1_Receive,
429 ARM_USART1_Transfer,
430 ARM_USART1_GetTxCount,
431 ARM_USART1_GetRxCount,
432 ARM_USART1_Control,
433 ARM_USART1_GetStatus,
434 ARM_USART1_SetModemControl,
435 ARM_USART1_GetModemStatus
436 };
437 #endif /* RTE_USART1 */
438
439 #if (RTE_USART2)
440 /* USART2 Driver wrapper functions */
441 static UARTx_Resources USART2_DEV = {
442 .dev = &UART2_DEV,
443 .tx_nbr_bytes = 0,
444 .rx_nbr_bytes = 0,
445 .cb_event = NULL,
446 };
447
ARM_USART2_Initialize(ARM_USART_SignalEvent_t cb_event)448 static int32_t ARM_USART2_Initialize(ARM_USART_SignalEvent_t cb_event)
449 {
450 USART2_DEV.cb_event = cb_event;
451
452 return ARM_USARTx_Initialize(&USART2_DEV);
453 }
454
ARM_USART2_Uninitialize(void)455 static int32_t ARM_USART2_Uninitialize(void)
456 {
457 /* Nothing to be done */
458 return ARM_DRIVER_OK;
459 }
460
ARM_USART2_PowerControl(ARM_POWER_STATE state)461 static int32_t ARM_USART2_PowerControl(ARM_POWER_STATE state)
462 {
463 return ARM_USARTx_PowerControl(&USART2_DEV, state);
464 }
465
ARM_USART2_Send(const void * data,uint32_t num)466 static int32_t ARM_USART2_Send(const void *data, uint32_t num)
467 {
468 return ARM_USARTx_Send(&USART2_DEV, data, num);
469 }
470
ARM_USART2_Receive(void * data,uint32_t num)471 static int32_t ARM_USART2_Receive(void *data, uint32_t num)
472 {
473 return ARM_USARTx_Receive(&USART2_DEV, data, num);
474 }
475
ARM_USART2_Transfer(const void * data_out,void * data_in,uint32_t num)476 static int32_t ARM_USART2_Transfer(const void *data_out, void *data_in,
477 uint32_t num)
478 {
479 ARG_UNUSED(data_out);
480 ARG_UNUSED(data_in);
481 ARG_UNUSED(num);
482
483 return ARM_DRIVER_ERROR_UNSUPPORTED;
484 }
485
ARM_USART2_GetTxCount(void)486 static uint32_t ARM_USART2_GetTxCount(void)
487 {
488 return ARM_USARTx_GetTxCount(&USART2_DEV);
489 }
490
ARM_USART2_GetRxCount(void)491 static uint32_t ARM_USART2_GetRxCount(void)
492 {
493 return ARM_USARTx_GetRxCount(&USART2_DEV);
494 }
ARM_USART2_Control(uint32_t control,uint32_t arg)495 static int32_t ARM_USART2_Control(uint32_t control, uint32_t arg)
496 {
497 return ARM_USARTx_Control(&USART2_DEV, control, arg);
498 }
499
ARM_USART2_GetStatus(void)500 static ARM_USART_STATUS ARM_USART2_GetStatus(void)
501 {
502 ARM_USART_STATUS status = {0, 0, 0, 0, 0, 0, 0, 0};
503 return status;
504 }
505
ARM_USART2_SetModemControl(ARM_USART_MODEM_CONTROL control)506 static int32_t ARM_USART2_SetModemControl(ARM_USART_MODEM_CONTROL control)
507 {
508 ARG_UNUSED(control);
509 return ARM_DRIVER_ERROR_UNSUPPORTED;
510 }
511
ARM_USART2_GetModemStatus(void)512 static ARM_USART_MODEM_STATUS ARM_USART2_GetModemStatus(void)
513 {
514 ARM_USART_MODEM_STATUS modem_status = {0, 0, 0, 0, 0};
515 return modem_status;
516 }
517
518 extern ARM_DRIVER_USART Driver_USART2;
519 ARM_DRIVER_USART Driver_USART2 = {
520 ARM_USART_GetVersion,
521 ARM_USART_GetCapabilities,
522 ARM_USART2_Initialize,
523 ARM_USART2_Uninitialize,
524 ARM_USART2_PowerControl,
525 ARM_USART2_Send,
526 ARM_USART2_Receive,
527 ARM_USART2_Transfer,
528 ARM_USART2_GetTxCount,
529 ARM_USART2_GetRxCount,
530 ARM_USART2_Control,
531 ARM_USART2_GetStatus,
532 ARM_USART2_SetModemControl,
533 ARM_USART2_GetModemStatus
534 };
535 #endif /* RTE_USART2 */
536
537 #if (RTE_USART3)
538 /* USART3 Driver wrapper functions */
539 static UARTx_Resources USART3_DEV = {
540 .dev = &UART3_DEV,
541 .tx_nbr_bytes = 0,
542 .rx_nbr_bytes = 0,
543 .cb_event = NULL,
544 };
545
ARM_USART3_Initialize(ARM_USART_SignalEvent_t cb_event)546 static int32_t ARM_USART3_Initialize(ARM_USART_SignalEvent_t cb_event)
547 {
548 USART3_DEV.cb_event = cb_event;
549
550 return ARM_USARTx_Initialize(&USART3_DEV);
551 }
552
ARM_USART3_Uninitialize(void)553 static int32_t ARM_USART3_Uninitialize(void)
554 {
555 /* Nothing to be done */
556 return ARM_DRIVER_OK;
557 }
558
ARM_USART3_PowerControl(ARM_POWER_STATE state)559 static int32_t ARM_USART3_PowerControl(ARM_POWER_STATE state)
560 {
561 return ARM_USARTx_PowerControl(&USART3_DEV, state);
562 }
563
ARM_USART3_Send(const void * data,uint32_t num)564 static int32_t ARM_USART3_Send(const void *data, uint32_t num)
565 {
566 return ARM_USARTx_Send(&USART3_DEV, data, num);
567 }
568
ARM_USART3_Receive(void * data,uint32_t num)569 static int32_t ARM_USART3_Receive(void *data, uint32_t num)
570 {
571 return ARM_USARTx_Receive(&USART3_DEV, data, num);
572 }
573
ARM_USART3_Transfer(const void * data_out,void * data_in,uint32_t num)574 static int32_t ARM_USART3_Transfer(const void *data_out, void *data_in,
575 uint32_t num)
576 {
577 ARG_UNUSED(data_out);
578 ARG_UNUSED(data_in);
579 ARG_UNUSED(num);
580
581 return ARM_DRIVER_ERROR_UNSUPPORTED;
582 }
583
ARM_USART3_GetTxCount(void)584 static uint32_t ARM_USART3_GetTxCount(void)
585 {
586 return ARM_USARTx_GetTxCount(&USART3_DEV);
587 }
588
ARM_USART3_GetRxCount(void)589 static uint32_t ARM_USART3_GetRxCount(void)
590 {
591 return ARM_USARTx_GetRxCount(&USART3_DEV);
592 }
ARM_USART3_Control(uint32_t control,uint32_t arg)593 static int32_t ARM_USART3_Control(uint32_t control, uint32_t arg)
594 {
595 return ARM_USARTx_Control(&USART3_DEV, control, arg);
596 }
597
ARM_USART3_GetStatus(void)598 static ARM_USART_STATUS ARM_USART3_GetStatus(void)
599 {
600 ARM_USART_STATUS status = {0, 0, 0, 0, 0, 0, 0, 0};
601 return status;
602 }
603
ARM_USART3_SetModemControl(ARM_USART_MODEM_CONTROL control)604 static int32_t ARM_USART3_SetModemControl(ARM_USART_MODEM_CONTROL control)
605 {
606 ARG_UNUSED(control);
607 return ARM_DRIVER_ERROR_UNSUPPORTED;
608 }
609
ARM_USART3_GetModemStatus(void)610 static ARM_USART_MODEM_STATUS ARM_USART3_GetModemStatus(void)
611 {
612 ARM_USART_MODEM_STATUS modem_status = {0, 0, 0, 0, 0};
613 return modem_status;
614 }
615
616 extern ARM_DRIVER_USART Driver_USART3;
617 ARM_DRIVER_USART Driver_USART3 = {
618 ARM_USART_GetVersion,
619 ARM_USART_GetCapabilities,
620 ARM_USART3_Initialize,
621 ARM_USART3_Uninitialize,
622 ARM_USART3_PowerControl,
623 ARM_USART3_Send,
624 ARM_USART3_Receive,
625 ARM_USART3_Transfer,
626 ARM_USART3_GetTxCount,
627 ARM_USART3_GetRxCount,
628 ARM_USART3_Control,
629 ARM_USART3_GetStatus,
630 ARM_USART3_SetModemControl,
631 ARM_USART3_GetModemStatus
632 };
633 #endif /* RTE_USART3 */
634
635 #if (RTE_USART4)
636 /* USART4 Driver wrapper functions */
637 static UARTx_Resources USART4_DEV = {
638 .dev = &UART4_DEV,
639 .tx_nbr_bytes = 0,
640 .rx_nbr_bytes = 0,
641 .cb_event = NULL,
642 };
643
ARM_USART4_Initialize(ARM_USART_SignalEvent_t cb_event)644 static int32_t ARM_USART4_Initialize(ARM_USART_SignalEvent_t cb_event)
645 {
646 USART4_DEV.cb_event = cb_event;
647
648 return ARM_USARTx_Initialize(&USART4_DEV);
649 }
650
ARM_USART4_Uninitialize(void)651 static int32_t ARM_USART4_Uninitialize(void)
652 {
653 /* Nothing to be done */
654 return ARM_DRIVER_OK;
655 }
656
ARM_USART4_PowerControl(ARM_POWER_STATE state)657 static int32_t ARM_USART4_PowerControl(ARM_POWER_STATE state)
658 {
659 return ARM_USARTx_PowerControl(&USART4_DEV, state);
660 }
661
ARM_USART4_Send(const void * data,uint32_t num)662 static int32_t ARM_USART4_Send(const void *data, uint32_t num)
663 {
664 return ARM_USARTx_Send(&USART4_DEV, data, num);
665 }
666
ARM_USART4_Receive(void * data,uint32_t num)667 static int32_t ARM_USART4_Receive(void *data, uint32_t num)
668 {
669 return ARM_USARTx_Receive(&USART4_DEV, data, num);
670 }
671
ARM_USART4_Transfer(const void * data_out,void * data_in,uint32_t num)672 static int32_t ARM_USART4_Transfer(const void *data_out, void *data_in,
673 uint32_t num)
674 {
675 ARG_UNUSED(data_out);
676 ARG_UNUSED(data_in);
677 ARG_UNUSED(num);
678
679 return ARM_DRIVER_ERROR_UNSUPPORTED;
680 }
681
ARM_USART4_GetTxCount(void)682 static uint32_t ARM_USART4_GetTxCount(void)
683 {
684 return ARM_USARTx_GetTxCount(&USART4_DEV);
685 }
686
ARM_USART4_GetRxCount(void)687 static uint32_t ARM_USART4_GetRxCount(void)
688 {
689 return ARM_USARTx_GetRxCount(&USART4_DEV);
690 }
ARM_USART4_Control(uint32_t control,uint32_t arg)691 static int32_t ARM_USART4_Control(uint32_t control, uint32_t arg)
692 {
693 return ARM_USARTx_Control(&USART4_DEV, control, arg);
694 }
695
ARM_USART4_GetStatus(void)696 static ARM_USART_STATUS ARM_USART4_GetStatus(void)
697 {
698 ARM_USART_STATUS status = {0, 0, 0, 0, 0, 0, 0, 0};
699 return status;
700 }
701
ARM_USART4_SetModemControl(ARM_USART_MODEM_CONTROL control)702 static int32_t ARM_USART4_SetModemControl(ARM_USART_MODEM_CONTROL control)
703 {
704 ARG_UNUSED(control);
705 return ARM_DRIVER_ERROR_UNSUPPORTED;
706 }
707
ARM_USART4_GetModemStatus(void)708 static ARM_USART_MODEM_STATUS ARM_USART4_GetModemStatus(void)
709 {
710 ARM_USART_MODEM_STATUS modem_status = {0, 0, 0, 0, 0};
711 return modem_status;
712 }
713
714 extern ARM_DRIVER_USART Driver_USART4;
715 ARM_DRIVER_USART Driver_USART4 = {
716 ARM_USART_GetVersion,
717 ARM_USART_GetCapabilities,
718 ARM_USART4_Initialize,
719 ARM_USART4_Uninitialize,
720 ARM_USART4_PowerControl,
721 ARM_USART4_Send,
722 ARM_USART4_Receive,
723 ARM_USART4_Transfer,
724 ARM_USART4_GetTxCount,
725 ARM_USART4_GetRxCount,
726 ARM_USART4_Control,
727 ARM_USART4_GetStatus,
728 ARM_USART4_SetModemControl,
729 ARM_USART4_GetModemStatus
730 };
731 #endif /* RTE_USART4 */
732