VSF Documented
vsf_template_usart.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_TEMPLATE_USART_H__
19#define __VSF_TEMPLATE_USART_H__
20
21/*============================ INCLUDES ======================================*/
22
24#include "hal/arch/vsf_arch.h"
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29/*============================ MACROS ========================================*/
30
31// multi-class support enabled by default for maximum availability.
32#ifndef VSF_USART_CFG_MULTI_CLASS
33# define VSF_USART_CFG_MULTI_CLASS ENABLED
34#endif
35
36#if defined(VSF_HW_USART_COUNT) && !defined(VSF_HW_USART_MASK)
37# define VSF_HW_USART_MASK VSF_HAL_COUNT_TO_MASK(VSF_HW_USART_COUNT)
38#endif
39
40#if defined(VSF_HW_USART_MASK) && !defined(VSF_HW_USART_COUNT)
41# define VSF_HW_USART_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HW_USART_MASK)
42#endif
43
53#ifndef VSF_USART_CFG_PREFIX
54# if VSF_USART_CFG_MULTI_CLASS == ENABLED
55# define VSF_USART_CFG_PREFIX vsf
56# elif defined(VSF_HW_USART_COUNT) && (VSF_HW_USART_COUNT != 0)
57# define VSF_USART_CFG_PREFIX vsf_hw
58# else
59# define VSF_USART_CFG_PREFIX vsf
60# endif
61#endif
62
65#ifndef VSF_USART_CFG_FUNCTION_RENAME
66# define VSF_USART_CFG_FUNCTION_RENAME ENABLED
67#endif
68
71#ifndef VSF_USART_CFG_REIMPLEMENT_TYPE_MODE
72# define VSF_USART_CFG_REIMPLEMENT_TYPE_MODE DISABLED
73#endif
74
77#ifndef VSF_USART_CFG_REIMPLEMENT_TYPE_IRQ_MASK
78# define VSF_USART_CFG_REIMPLEMENT_TYPE_IRQ_MASK DISABLED
79#endif
80
83#ifndef VSF_USART_CFG_REIMPLEMENT_TYPE_STATUS
84# define VSF_USART_CFG_REIMPLEMENT_TYPE_STATUS DISABLED
85#endif
86
89#ifndef VSF_USART_CFG_REIMPLEMENT_TYPE_CMD
90# define VSF_USART_CFG_REIMPLEMENT_TYPE_CMD DISABLED
91#endif
92
93#ifndef VSF_USART_CFG_REIMPLEMENT_MODE_TO_DATA_BITS
94# define VSF_USART_CFG_REIMPLEMENT_MODE_TO_DATA_BITS \
95 DISABLED
96#endif
97
101#if VSF_USART_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
102# define VSF_USART_CFG_REIMPLEMENT_TYPE_CFG DISABLED
103#endif
104
108#if VSF_USART_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
109# define VSF_USART_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
110#endif
111
112#ifndef VSF_USART_CFG_INHERT_HAL_CAPABILITY
113# define VSF_USART_CFG_INHERT_HAL_CAPABILITY ENABLED
114#endif
115
116#ifndef VSF_USART_CFG_REQUEST_API
117# define VSF_USART_CFG_REQUEST_API ENABLED
118#endif
119
120#ifndef VSF_USART_CFG_FIFO_API
121# define VSF_USART_CFG_FIFO_API ENABLED
122#endif
123
124/*============================ MACROFIED FUNCTIONS ===========================*/
125
126#define __VSF_USART_BASE_APIS(__prefix_name) \
127 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, usart, init, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, vsf_usart_cfg_t *cfg_ptr) \
128 __VSF_HAL_TEMPLATE_API(__prefix_name, void, usart, fini, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
129 __VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, usart, enable, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
130 __VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, usart, disable, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
131 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_usart_capability_t, usart, capability, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
132 __VSF_HAL_TEMPLATE_API(__prefix_name, void, usart, irq_enable, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, vsf_usart_irq_mask_t irq_mask) \
133 __VSF_HAL_TEMPLATE_API(__prefix_name, void, usart, irq_disable, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, vsf_usart_irq_mask_t irq_mask) \
134 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_usart_status_t, usart, status, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr)
135
136#if VSF_USART_CFG_FIFO_API == ENABLED
137# define __VSF_USART_FIFO_APIS(__prefix_name) \
138 __VSF_HAL_TEMPLATE_API(__prefix_name, uint_fast16_t, usart, rxfifo_get_data_count, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
139 __VSF_HAL_TEMPLATE_API(__prefix_name, uint_fast16_t, usart, rxfifo_read, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, void *buffer_ptr, uint_fast16_t count) \
140 __VSF_HAL_TEMPLATE_API(__prefix_name, uint_fast16_t, usart, txfifo_get_free_count, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
141 __VSF_HAL_TEMPLATE_API(__prefix_name, uint_fast16_t, usart, txfifo_write, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, void *buffer_ptr, uint_fast16_t count)
142#else
143# define __VSF_USART_FIFO_APIS(__prefix_name)
144#endif
145
146#if VSF_USART_CFG_REQUEST_API == ENABLED
147# define __VSF_USART_REQUEST_APIS(__prefix_name) \
148 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, usart, request_rx, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, void *buffer_ptr, uint_fast32_t count) \
149 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, usart, request_tx, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, void *buffer_ptr, uint_fast32_t count) \
150 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, usart, cancel_rx, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
151 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, usart, cancel_tx, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
152 __VSF_HAL_TEMPLATE_API(__prefix_name, int_fast32_t, usart, get_rx_count, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
153 __VSF_HAL_TEMPLATE_API(__prefix_name, int_fast32_t, usart, get_tx_count, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr)
154#else
155# define __VSF_USART_REQUEST_APIS(__prefix_name)
156#endif
157
158#define __VSF_USART_REQUEST_EXTRA_APIS(__prefix_name) \
159 __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, usart, cmd, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, vsf_usart_cmd_t cmd, void* param)
160
161#define VSF_USART_ADDITIONAL_APIS(__prefix_name) \
162 static inline vsf_err_t VSF_MCONNECT(__prefix_name, _usart_send_break) \
163 (VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
164 { \
165 return VSF_MCONNECT(__prefix_name, _usart_cmd)(usart_ptr, \
166 VSF_USART_CMD_SEND_BREAK, NULL); \
167 } \
168 static inline vsf_err_t VSF_MCONNECT(__prefix_name, _usart_set_break) \
169 (VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
170 { \
171 vsf_usart_capability_t cap = \
172 VSF_MCONNECT(__prefix_name, _usart_capability)(usart_ptr); \
173 VSF_HAL_ASSERT(cap.support_set_and_clear_break); \
174 return VSF_MCONNECT(__prefix_name, _usart_cmd)(usart_ptr, \
175 VSF_USART_CMD_SET_BREAK, NULL); \
176 } \
177 static inline vsf_err_t VSF_MCONNECT(__prefix_name, _usart_clear_break) \
178 (VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
179 { \
180 vsf_usart_capability_t cap = \
181 VSF_MCONNECT(__prefix_name, _usart_capability)(usart_ptr); \
182 VSF_HAL_ASSERT(cap.support_set_and_clear_break); \
183 return VSF_MCONNECT(__prefix_name, _usart_cmd)(usart_ptr, \
184 VSF_USART_CMD_CLEAR_BREAK, NULL); \
185 }
186
187#define VSF_USART_APIS(__prefix_name) \
188 __VSF_USART_BASE_APIS(__prefix_name) \
189 __VSF_USART_FIFO_APIS(__prefix_name) \
190 __VSF_USART_REQUEST_APIS(__prefix_name) \
191 __VSF_USART_REQUEST_EXTRA_APIS(__prefix_name)
192
193/*============================ TYPES =========================================*/
194
195#if VSF_USART_CFG_REIMPLEMENT_TYPE_MODE == DISABLED
270typedef enum vsf_usart_mode_t {
272 VSF_USART_NO_PARITY = (0x0ul << 0),
273 VSF_USART_EVEN_PARITY = (0x1ul << 0),
274 VSF_USART_ODD_PARITY = (0x2ul << 0),
277
279 VSF_USART_1_STOPBIT = (0x0ul << 3),
280 VSF_USART_1_5_STOPBIT = (0x1ul << 3),
281 VSF_USART_0_5_STOPBIT = (0x2ul << 3),
282 VSF_USART_2_STOPBIT = (0x3ul << 3),
283
285 VSF_USART_5_BIT_LENGTH = (0x0ul << 5),
286 VSF_USART_6_BIT_LENGTH = (0x1ul << 5),
287 VSF_USART_7_BIT_LENGTH = (0x2ul << 5),
288 VSF_USART_8_BIT_LENGTH = (0x3ul << 5),
289 VSF_USART_9_BIT_LENGTH = (0x4ul << 5),
290 VSF_USART_10_BIT_LENGTH = (0x5ul << 5),
291
297
298 VSF_USART_TX_ENABLE = (0x0ul << 9),
299 VSF_USART_TX_DISABLE = (0x1ul << 9),
300
301 VSF_USART_RX_ENABLE = (0x0ul << 10),
302 VSF_USART_RX_DISABLE = (0x1ul << 10),
303
306
309
318
324
325 /* Optional mode
327 VSF_USART_IRDA_ENABLE = (0x1ul << 18),
328 VSF_USART_IRDA_DISABLE = (0x0ul << 18),
329 #define VSF_USART_IRDA_ENABLE VSF_USART_IRDA_ENABLE
330 #define VSF_USART_IRDA_DISABLE VSF_USART_IRDA_DISABLE
331 #define VSF_USART_IRDA_MASK VSF_USART_IRDA_ENABLE | VSF_USART_IRDA_DISABLE
332
333 VSF_USART_SMARTCARD_ENABLE = (0x1ul << 19),
334 VSF_USART_SMARTCARD_DISABLE = (0x0ul << 19),
335 #define VSF_USART_SMARTCARD_ENABLE VSF_USART_SMARTCARD_ENABLE
336 #define VSF_USART_SMARTCARD_DISABLE VSF_USART_SMARTCARD_DISABLE
337 #define VSF_USART_SMARTCARD_MASK VSF_USART_SMARTCARDENABLE | VSF_USART_SMARTCARD_DISABLE
338
339 // whether the clock pulse corresponding to the last transmitted
340 VSF_USART_SYNC_CLOCK_LAST_BIT_ENABLE = (0x0ul << 20),
341 VSF_USART_SYNC_CLOCK_LAST_BIT_DISABLE = (0x0ul << 20),
342 #define VSF_USART_SYNC_CLOCK_LAST_BIT_ENABLE VSF_USART_SYNC_CLOCK_LAST_BIT_ENABLE
343 #define VSF_USART_SYNC_CLOCK_LAST_BIT_DISABLE VSF_USART_SYNC_CLOCK_LAST_BIT_DISABLE
344 #define VSF_USART_SYNC_CLOCK_LAST_BIT_MASK VSF_USART_SYNC_CLOCK_LAST_BIT_ENABLE | \
345 VSF_USART_SYNC_CLOCK_LAST_BIT_DISABLE
346
347 // divisor of IRDA clock
348 VSF_USART_IRDA_PRESCALER_BIT_OFFSET = (21),
349 VSF_USART_IRDA_PRESCALER_MASK = (0xFul << VSF_USART_IRDA_PRESCALER_BIT_OFFSET),
350 #define VSF_USART_IRDA_PRESCALER_BIT_OFFSET VSF_USART_IRDA_PRESCALER_BIT_OFFSET
351 #define VSF_USART_IRDA_PRESCALER_MASK VSF_USART_IRDA_PRESCALER_MASK
352 */
354#endif
355
356enum {
357#ifndef VSF_USART_PARITY_MASK
363#endif
364
365#ifndef VSF_USART_STOPBIT_MASK
370#endif
371
372#ifndef VSF_USART_BIT_LENGTH_MASK
379#endif
380
381#ifndef VSF_USART_TX_FIFO_THRESH_MASK
385#endif
386
387#ifndef VSF_USART_RX_FIFO_THRESH_MASK
391#endif
392
393#ifndef VSF_USART_HWCONTROL_MASK
398#endif
399
402
405
408
411
415
418
419
420
433#ifdef VSF_USART_SYNC_CLOCK_LAST_BIT_MASK
435#endif
436
437#ifdef VSF_USART_IRDA_PRESCALER_MASK
438 | VSF_USART_IRDA_PRESCALER_MASK
439#endif
440#ifdef VSF_USART_IRDA_MASK
441 | VSF_USART_IRDA_MASK
442#endif
443
444#ifdef VSF_USART_SMARTCARD_MASK
445 | VSF_USART_SMARTCARD_MASK
446#endif
448
449#if VSF_USART_CFG_REIMPLEMENT_TYPE_IRQ_MASK == DISABLED
473 // request_rx/request_tx complete
476
477 // TX/RX reach fifo threshold, thres hold on some devices is bound to 1
478 VSF_USART_IRQ_MASK_TX = (0x1ul << 2),
479 VSF_USART_IRQ_MASK_RX = (0x1ul << 3),
481
482 // clear to send interrupt
484
485 // Error interrupt
490
491 /*
492 VSF_USART_IRQ_MASK_TX_HALF_CPL = (0x1ul << 10),
493 #define VSF_USART_IRQ_MASK_TX_HALF_CPL VSF_USART_IRQ_MASK_TX_HALF_CPL
494 VSF_USART_IRQ_MASK_RX_HALF_CPL = (0x1ul << 11),
495 #define VSF_USART_IRQ_MASK_RX_HALF_CPL VSF_USART_IRQ_MASK_RX_HALF_CPL
496
497 VSF_USART_IRQ_MASK_CANCEL_TX_CPL = (0x1ul << 12),
498 #define VSF_USART_IRQ_MASK_CANCEL_TX_CPL VSF_USART_IRQ_MASK_CANCEL_TX_CPL
499 VSF_USART_IRQ_MASK_CANCEL_RX_CPL = (0x1ul << 13),
500 #define VSF_USART_IRQ_MASK_CANCEL_RX_CPL VSF_USART_IRQ_MASK_CANCEL_RX_CPL
501
502 VSF_USART_IRQ_MASK_NOISE_ERR = (0x1ul << 14),
503 #define VSF_USART_IRQ_MASK_NOISE_ERR VSF_USART_IRQ_MASK_NOISE_ERR
504 */
506#endif
507
508enum {
512
513#ifndef VSF_USART_IRQ_MASK_ERR
518#endif
519
520#ifndef VSF_USART_IRQ_ALL_BITS_MASK
528# ifdef VSF_USART_IRQ_MASK_TX_HALF_CPL
529 | VSF_USART_IRQ_MASK_TX_HALF_CPL
530# endif
531# ifdef VSF_USART_IRQ_MASK_RX_HALF_CPL
532 | VSF_USART_IRQ_MASK_RX_HALF_CPL
533# endif
534# ifdef VSF_USART_IRQ_MASK_CANCEL_TX_CPL
535 | VSF_USART_IRQ_MASK_CANCEL_TX_CPL
536# endif
537# ifdef VSF_USART_IRQ_MASK_CANCEL_RX_CPL
538 | VSF_USART_IRQ_MASK_CANCEL_RX_CPL
539# endif
540#endif
541};
542
543#if VSF_USART_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
545
546typedef void vsf_usart_isr_handler_t(void *target_ptr,
547 vsf_usart_t *usart_ptr,
549
550typedef struct vsf_usart_isr_t {
555
556typedef struct vsf_usart_cfg_t {
562#endif
563
564#if VSF_USART_CFG_REIMPLEMENT_TYPE_CMD == DISABLED
582typedef enum vsf_usart_cmd_t {
587
589 VSF_USART_CMD_SET_BREAK = (0x01ul << 1),
592
593 /*
594 VSF_USART_CMD_REQUEST_RX_RESUME = (0x1ul << 3),
595 #define VSF_USART_CMD_REQUEST_RX_RESUME VSF_USART_CMD_REQUEST_RX_RESUME
596 VSF_USART_CMD_REQUEST_TX_RESUME = (0x1ul << 4),
597 #define VSF_USART_CMD_REQUEST_TX_RESUME VSF_USART_CMD_REQUEST_TX_RESUME
598
599 VSF_USART_CMD_REQUEST_RX_PAUSE = (0x1ul << 5),
600 #define VSF_USART_CMD_REQUEST_RX_PAUSE VSF_USART_CMD_REQUEST_RX_PAUSE
601 VSF_USART_CMD_REQUEST_TX_PAUSE = (0x1ul << 6),
602 #define VSF_USART_CMD_REQUEST_TX_PAUSE VSF_USART_CMD_REQUEST_TX_PAUSE
603
604 VSF_USART_CMD_HALF_DUPLEX_ENABLE_TRANSMITTER = (0x1ul << 7),
605 #define VSF_USART_CMD_HALF_DUPLEX_ENABLE_TRANSMITTER VSF_USART_CMD_HALF_DUPLEX_ENABLE_TRANSMITTER
606
607 VSF_USART_CMD_HALF_DUPLEX_ENABLE_RECEIVER = (0x1ul << 8),
608 #define VSF_USART_CMD_HALF_DUPLEX_ENABLE_RECEIVER VSF_USART_CMD_HALF_DUPLEX_ENABLE_RECEIVER
609 */
611#endif
612
613#if VSF_USART_CFG_REIMPLEMENT_TYPE_STATUS == DISABLED
614typedef struct vsf_usart_status_t {
615 union {
617 struct {
618 uint32_t is_busy : 1;
619 uint32_t is_tx_busy : 1;
620 uint32_t is_rx_busy : 1;
621 // tx fifo threshold in bytes
622 uint32_t tx_fifo_thresh : 8;
623 // rx fifo threshold in bytes
624 uint32_t rx_fifo_thresh : 8;
625 };
626 };
628#endif
629
631#if VSF_USART_CFG_INHERT_HAL_CAPABILITY == ENABLED
633#endif
635
636 // baudrate range
639
640 // tx fifo depth, in data count (frame)
642 // rx fifo depth, in data count (frame)
644
647
652
653typedef struct vsf_usart_op_t {
654#undef __VSF_HAL_TEMPLATE_API
655#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
656
657 VSF_USART_APIS(vsf)
659
660#if VSF_USART_CFG_MULTI_CLASS == ENABLED
663};
664#endif
665
666/*============================ PROTOTYPES ====================================*/
667
687extern vsf_err_t vsf_usart_init(vsf_usart_t *usart_ptr, vsf_usart_cfg_t *cfg_ptr);
688
700extern void vsf_usart_fini(vsf_usart_t *usart_ptr);
701
713extern fsm_rt_t vsf_usart_enable(vsf_usart_t *usart_ptr);
714
726extern fsm_rt_t vsf_usart_disable(vsf_usart_t *usart_ptr);
727
744
759
772
785
798
814extern uint_fast16_t vsf_usart_rxfifo_read(vsf_usart_t *usart_ptr, void *buffer_ptr, uint_fast16_t count);
815
834
850extern uint_fast16_t vsf_usart_txfifo_write(vsf_usart_t *usart_ptr, void *buffer_ptr, uint_fast16_t count);
851
867extern vsf_err_t vsf_usart_request_rx(vsf_usart_t *usart_ptr, void *buffer_ptr, uint_fast32_t count);
868
886extern vsf_err_t vsf_usart_request_tx(vsf_usart_t *usart_ptr, void *buffer_ptr, uint_fast32_t count);
887
899extern vsf_err_t vsf_usart_cancel_rx(vsf_usart_t *usart_ptr);
900
911extern vsf_err_t vsf_usart_cancel_tx(vsf_usart_t *usart_ptr);
912
926
940
956extern vsf_err_t vsf_usart_cmd(vsf_usart_t *usart_ptr, vsf_usart_cmd_t cmd, void * param);
957
958/*============================ INLINE FUNCTIONS ==============================*/
959
960#if VSF_USART_CFG_REIMPLEMENT_MODE_TO_DATA_BITS == DISABLED
961static inline uint8_t vsf_usart_mode_to_data_bits(vsf_usart_mode_t mode)
962{
963 switch (mode & VSF_USART_BIT_LENGTH_MASK) {
965 return 5;
967 return 6;
969 return 7;
971 return 8;
973 return 9;
975 return 10;
976 default:
977 return 0;
978 }
979}
980#endif
981
994static inline vsf_err_t vsf_usart_send_break(vsf_usart_t *usart_ptr)
995{
998
999 return vsf_usart_cmd(usart_ptr, VSF_USART_CMD_SEND_BREAK, NULL);
1000}
1001
1013static inline vsf_err_t vsf_usart_set_break(vsf_usart_t *usart_ptr)
1014{
1017
1018 return vsf_usart_cmd(usart_ptr, VSF_USART_CMD_SET_BREAK, NULL);
1019}
1020
1032static inline vsf_err_t vsf_usart_clear_break(vsf_usart_t *usart_ptr)
1033{
1036
1037 return vsf_usart_cmd(usart_ptr, VSF_USART_CMD_CLEAR_BREAK, NULL);
1038}
1039
1040/*============================ MACROFIED FUNCTIONS ===========================*/
1041
1042#if VSF_USART_CFG_FUNCTION_RENAME == ENABLED
1043# define __vsf_usart_t VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_t)
1044# define vsf_usart_init(__USART, ...) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_init) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
1045# define vsf_usart_fini(__USART) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_fini) ((__vsf_usart_t *)(__USART))
1046# define vsf_usart_capability(__USART) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_capability) ((__vsf_usart_t *)(__USART))
1047# define vsf_usart_enable(__USART) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_enable) ((__vsf_usart_t *)(__USART))
1048# define vsf_usart_disable(__USART) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_disable) ((__vsf_usart_t *)(__USART))
1049# define vsf_usart_irq_enable(__USART, ...) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_irq_enable) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
1050# define vsf_usart_irq_disable(__USART, ...) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_irq_disable) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
1051# define vsf_usart_status(__USART) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_status) ((__vsf_usart_t *)(__USART))
1052# define vsf_usart_rxfifo_get_data_count(__USART, ...) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_rxfifo_get_data_count) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
1053# define vsf_usart_rxfifo_read(__USART, ...) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_rxfifo_read) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
1054# define vsf_usart_txfifo_get_free_count(__USART, ...) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_txfifo_get_free_count) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
1055# define vsf_usart_txfifo_write(__USART, ...) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_txfifo_write) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
1056# define vsf_usart_request_rx(__USART, ...) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_request_rx) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
1057# define vsf_usart_request_tx(__USART, ...) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_request_tx) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
1058# define vsf_usart_cancel_rx(__USART) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_cancel_rx) ((__vsf_usart_t *)(__USART))
1059# define vsf_usart_cancel_tx(__USART) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_cancel_tx) ((__vsf_usart_t *)(__USART))
1060# define vsf_usart_get_rx_count(__USART) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_get_rx_count) ((__vsf_usart_t *)(__USART))
1061# define vsf_usart_get_tx_count(__USART) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_get_tx_count) ((__vsf_usart_t *)(__USART))
1062# define vsf_usart_send_break(__USART, ...) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_send_break) ((__vsf_usart_t *)(__USART))
1063# define vsf_usart_set_break(__USART) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_send_break) ((__vsf_usart_t *)(__USART))
1064# define vsf_usart_clear_break(__USART) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_send_break) ((__vsf_usart_t *)(__USART))
1065# define vsf_usart_cmd(__USART, ...) VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_cmd) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
1066#endif
1067
1068/*============================ INCLUDES ======================================*/
1069
1070#ifdef __cplusplus
1071}
1072#endif
1073
1074#endif
vsf_err_t
Definition __type.h:42
vsf_usart_mode_t
Definition uart.h:32
vsf_usart_irq_mask_t
Definition uart.h:105
#define VSF_USART_SYNC_CLOCK_LAST_BIT_MASK
Definition usart.h:129
vsf_arch_prio_t
Definition cortex_a_generic.h:88
#define NULL
Definition stddef.h:52
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
unsigned uint32_t
Definition stdint.h:9
unsigned int uint_fast32_t
Definition stdint.h:27
int int_fast32_t
Definition stdint.h:26
unsigned short uint_fast16_t
Definition stdint.h:25
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_hal_driver.h:203
Definition vsf_template_hal_driver.h:196
Definition vsf_template_usart.h:630
uint8_t max_data_bits
Definition vsf_template_usart.h:645
uint8_t support_set_and_clear_break
Definition vsf_template_usart.h:650
inherit(vsf_peripheral_capability_t) vsf_usart_irq_mask_t irq_mask
uint8_t support_rx_timeout
Definition vsf_template_usart.h:648
uint8_t rxfifo_depth
Definition vsf_template_usart.h:643
uint8_t support_send_break
Definition vsf_template_usart.h:649
uint8_t txfifo_depth
Definition vsf_template_usart.h:641
uint8_t min_data_bits
Definition vsf_template_usart.h:646
uint32_t min_baudrate
Definition vsf_template_usart.h:638
uint32_t max_baudrate
Definition vsf_template_usart.h:637
Definition vsf_template_usart.h:556
uint32_t mode
Definition vsf_template_usart.h:557
uint32_t baudrate
Definition vsf_template_usart.h:558
uint32_t rx_timeout
Definition vsf_template_usart.h:559
vsf_usart_isr_t isr
Definition vsf_template_usart.h:560
Definition vsf_template_usart.h:550
vsf_arch_prio_t prio
Definition vsf_template_usart.h:553
vsf_usart_isr_handler_t * handler_fn
Definition vsf_template_usart.h:551
void * target_ptr
Definition vsf_template_usart.h:552
Definition vsf_template_usart.h:653
Definition uart.h:156
uint32_t is_busy
Definition usart.h:276
Definition vsf_template_usart.h:661
const vsf_usart_op_t * op
Definition vsf_template_usart.h:662
fsm_rt_t
Definition vsf_fsm.h:315
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
#define vsf_usart_send_break(__USART,...)
Definition vsf_template_usart.h:1062
@ VSF_USART_IRQ_MASK_ERR
Definition vsf_template_usart.h:514
@ VSF_USART_IRQ_MASK_TX_FIFO_THRESHOLD
Definition vsf_template_usart.h:510
@ VSF_USART_IRQ_ALL_BITS_MASK
Definition vsf_template_usart.h:521
@ VSF_USART_IRQ_MASK_RX_IDLE
Definition vsf_template_usart.h:509
@ VSF_USART_IRQ_MASK_RX_FIFO_THRESHOLD
Definition vsf_template_usart.h:511
#define vsf_usart_txfifo_get_free_count(__USART,...)
Definition vsf_template_usart.h:1054
#define vsf_usart_disable(__USART)
Definition vsf_template_usart.h:1048
#define vsf_usart_init(__USART,...)
Definition vsf_template_usart.h:1044
#define vsf_usart_capability(__USART)
Definition vsf_template_usart.h:1046
vsf_usart_mode_t
Predefined VSF USART modes that can be reimplemented in specific hal drivers.
Definition vsf_template_usart.h:270
@ VSF_USART_TX_FIFO_THRESH_HALF_FULL
Half of the threshold for txfifo.
Definition vsf_template_usart.h:313
@ VSF_USART_HALF_DUPLEX_DISABLE
Definition vsf_template_usart.h:307
@ VSF_USART_8_BIT_LENGTH
data bits : 8,
Definition vsf_template_usart.h:288
@ VSF_USART_SYNC_CLOCK_ENABLE
Definition vsf_template_usart.h:304
@ VSF_USART_EVEN_PARITY
Definition vsf_template_usart.h:273
@ VSF_USART_ODD_PARITY
Definition vsf_template_usart.h:274
@ VSF_USART_SYNC_CLOCK_PHASE_1_EDGE
Definition vsf_template_usart.h:322
@ VSF_USART_NO_PARITY
USART Parity.
Definition vsf_template_usart.h:272
@ VSF_USART_10_BIT_LENGTH
data bits : 10,
Definition vsf_template_usart.h:290
@ VSF_USART_RTS_HWCONTROL
Definition vsf_template_usart.h:294
@ VSF_USART_RX_FIFO_THRESH_FULL
Full of the threshold for txfifo.
Definition vsf_template_usart.h:317
@ VSF_USART_RX_ENABLE
Definition vsf_template_usart.h:301
@ VSF_USART_RX_FIFO_THRESH_ONE
one data for txfifo
Definition vsf_template_usart.h:315
@ VSF_USART_FORCE_0_PARITY
Definition vsf_template_usart.h:275
@ VSF_USART_TX_FIFO_THRESH_ONE
one data for txfifo
Definition vsf_template_usart.h:312
@ VSF_USART_TX_ENABLE
Definition vsf_template_usart.h:298
@ VSF_USART_SYNC_CLOCK_POLARITY_HIGH
Definition vsf_template_usart.h:321
@ VSF_USART_9_BIT_LENGTH
data bits : 9,
Definition vsf_template_usart.h:289
@ VSF_USART_7_BIT_LENGTH
data bits : 7,
Definition vsf_template_usart.h:287
@ VSF_USART_1_STOPBIT
USART Stopbit.
Definition vsf_template_usart.h:279
@ VSF_USART_FORCE_1_PARITY
Definition vsf_template_usart.h:276
@ VSF_USART_SYNC_CLOCK_POLARITY_LOW
USART SYNC Mode Clock.
Definition vsf_template_usart.h:320
@ VSF_USART_RX_DISABLE
Definition vsf_template_usart.h:302
@ VSF_USART_2_STOPBIT
stopbit: 2 bit
Definition vsf_template_usart.h:282
@ VSF_USART_CTS_HWCONTROL
Definition vsf_template_usart.h:295
@ VSF_USART_5_BIT_LENGTH
USART Databit Lenght.
Definition vsf_template_usart.h:285
@ VSF_USART_RX_FIFO_THRESH_HALF_FULL
Half of the threshold for txfifo.
Definition vsf_template_usart.h:316
@ VSF_USART_SYNC_CLOCK_DISABLE
Definition vsf_template_usart.h:305
@ VSF_USART_RTS_CTS_HWCONTROL
Definition vsf_template_usart.h:296
@ VSF_USART_SYNC_CLOCK_PHASE_2_EDGE
Definition vsf_template_usart.h:323
@ VSF_USART_HALF_DUPLEX_ENABLE
Definition vsf_template_usart.h:308
@ VSF_USART_TX_DISABLE
Definition vsf_template_usart.h:299
@ VSF_USART_TX_FIFO_THRESH_FULL
Full of the threshold for txfifo.
Definition vsf_template_usart.h:314
@ VSF_USART_6_BIT_LENGTH
data bits : 6,
Definition vsf_template_usart.h:286
@ VSF_USART_0_5_STOPBIT
stopbit: 0.5 bit
Definition vsf_template_usart.h:281
@ VSF_USART_NO_HWCONTROL
USART Hardware Control.
Definition vsf_template_usart.h:293
@ VSF_USART_1_5_STOPBIT
stopbit: 1.5 bit
Definition vsf_template_usart.h:280
#define vsf_usart_request_tx(__USART,...)
Definition vsf_template_usart.h:1057
#define vsf_usart_clear_break(__USART)
Definition vsf_template_usart.h:1064
#define vsf_usart_rxfifo_read(__USART,...)
Definition vsf_template_usart.h:1053
#define vsf_usart_irq_disable(__USART,...)
Definition vsf_template_usart.h:1050
#define vsf_usart_rxfifo_get_data_count(__USART,...)
Definition vsf_template_usart.h:1052
#define vsf_usart_cmd(__USART,...)
Definition vsf_template_usart.h:1065
#define vsf_usart_cancel_tx(__USART)
Definition vsf_template_usart.h:1059
#define vsf_usart_request_rx(__USART,...)
Definition vsf_template_usart.h:1056
vsf_usart_cmd_t
Predefined VSF USART command that can be reimplemented in specific hal drivers.
Definition vsf_template_usart.h:582
@ VSF_USART_CMD_SET_BREAK
usart set break condition
Definition vsf_template_usart.h:589
@ VSF_USART_CMD_CLEAR_BREAK
usart clean break condition
Definition vsf_template_usart.h:591
@ VSF_USART_CMD_SEND_BREAK
Definition vsf_template_usart.h:586
@ VSF_USART_TX_FIFO_THRESH_MASK
Definition vsf_template_usart.h:382
@ VSF_USART_BIT_LENGTH_MASK
Definition vsf_template_usart.h:373
@ VSF_USART_SYNC_CLOCK_POLARITY_MASK
Definition vsf_template_usart.h:412
@ VSF_USART_PARITY_MASK
Definition vsf_template_usart.h:358
@ VSF_USART_MODE_ALL_BITS_MASK
Definition vsf_template_usart.h:421
@ VSF_USART_HALF_DUPLEX_MASK
Definition vsf_template_usart.h:409
@ VSF_USART_HWCONTROL_MASK
Definition vsf_template_usart.h:394
@ VSF_USART_RX_MASK
Definition vsf_template_usart.h:403
@ VSF_USART_SYNC_CLOCK_PHASE_MASK
Definition vsf_template_usart.h:416
@ VSF_USART_STOPBIT_MASK
Definition vsf_template_usart.h:366
@ VSF_USART_RX_FIFO_THRESH_MASK
Definition vsf_template_usart.h:388
@ VSF_USART_SYNC_CLOCK_MASK
Definition vsf_template_usart.h:406
@ VSF_USART_TX_MASK
Definition vsf_template_usart.h:400
#define vsf_usart_txfifo_write(__USART,...)
Definition vsf_template_usart.h:1055
#define vsf_usart_cancel_rx(__USART)
Definition vsf_template_usart.h:1058
vsf_usart_irq_mask_t
Predefined VSF USART interrupt that can be reimplemented in specific hal drivers.
Definition vsf_template_usart.h:472
@ VSF_USART_IRQ_MASK_TX_CPL
Definition vsf_template_usart.h:474
@ VSF_USART_IRQ_MASK_OVERFLOW_ERR
Definition vsf_template_usart.h:489
@ VSF_USART_IRQ_MASK_CTS
Definition vsf_template_usart.h:483
@ VSF_USART_IRQ_MASK_TX
Definition vsf_template_usart.h:478
@ VSF_USART_IRQ_MASK_BREAK_ERR
Definition vsf_template_usart.h:488
@ VSF_USART_IRQ_MASK_RX
Definition vsf_template_usart.h:479
@ VSF_USART_IRQ_MASK_RX_TIMEOUT
Definition vsf_template_usart.h:480
@ VSF_USART_IRQ_MASK_RX_CPL
Definition vsf_template_usart.h:475
@ VSF_USART_IRQ_MASK_PARITY_ERR
Definition vsf_template_usart.h:487
@ VSF_USART_IRQ_MASK_FRAME_ERR
Definition vsf_template_usart.h:486
#define vsf_usart_get_tx_count(__USART)
Definition vsf_template_usart.h:1061
#define vsf_usart_status(__USART)
Definition vsf_template_usart.h:1051
#define vsf_usart_get_rx_count(__USART)
Definition vsf_template_usart.h:1060
#define VSF_USART_APIS(__prefix_name)
Definition vsf_template_usart.h:187
struct vsf_usart_status_t vsf_usart_status_t
#define vsf_usart_enable(__USART)
Definition vsf_template_usart.h:1047
#define vsf_usart_fini(__USART)
Definition vsf_template_usart.h:1045
void vsf_usart_isr_handler_t(void *target_ptr, vsf_usart_t *usart_ptr, vsf_usart_irq_mask_t irq_mask)
Definition vsf_template_usart.h:546
#define vsf_usart_irq_enable(__USART,...)
Definition vsf_template_usart.h:1049
#define vsf_usart_set_break(__USART)
Definition vsf_template_usart.h:1063