VSF Documented
usart_template.inc
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#if VSF_HAL_USE_USART == ENABLED
19
20/*============================ INCLUDES ======================================*/
21/*============================ MACROS ========================================*/
22
23#ifndef VSF_USART_CFG_REIMPLEMENT_API_REQUEST
24# define VSF_USART_CFG_REIMPLEMENT_API_REQUEST DISABLED
25#endif
26
27#ifndef VSF_USART_CFG_REIMPLEMENT_API_CAPABILITY
28# define VSF_USART_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
29#endif
30
31#ifndef VSF_USART_CFG_REIMPLEMENT_API_CTRL
32# define VSF_USART_CFG_REIMPLEMENT_API_CTRL DISABLED
33#endif
34
35#ifndef VSF_USART_CFG_REIMPLEMENT_API_GET_CONFIGURATION
36# define VSF_USART_CFG_REIMPLEMENT_API_GET_CONFIGURATION DISABLED
37#endif
38
39#ifndef VSF_USART_CFG_REIMPLEMENT_API_IRQ_CLEAR
40# define VSF_USART_CFG_REIMPLEMENT_API_IRQ_CLEAR DISABLED
41#endif
42
43#ifdef VSF_USART_CFG_IMP_REMAP_PREFIX
44# undef VSF_USART_CFG_REIMPLEMENT_API_REQUEST
45# undef VSF_USART_CFG_REIMPLEMENT_API_CAPABILITY
46# undef VSF_USART_CFG_REIMPLEMENT_API_CTRL
47# undef VSF_USART_CFG_REIMPLEMENT_API_GET_CONFIGURATION
48# undef VSF_USART_CFG_REIMPLEMENT_API_IRQ_CLEAR
49# define VSF_USART_CFG_REIMPLEMENT_API_REQUEST ENABLED
50# define VSF_USART_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
51# define VSF_USART_CFG_REIMPLEMENT_API_CTRL ENABLED
52# define VSF_USART_CFG_REIMPLEMENT_API_GET_CONFIGURATION ENABLED
53# define VSF_USART_CFG_REIMPLEMENT_API_IRQ_CLEAR ENABLED
54#endif
55
56#if VSF_USART_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
57# ifndef VSF_USART_CFG_CAPABILITY_IRQ_MASK
58# define VSF_USART_CFG_CAPABILITY_IRQ_MASK VSF_USART_IRQ_ALL_BITS_MASK
59# endif
60# ifndef VSF_USART_CFG_CAPABILITY_MAX_BAUDRATE
61# define VSF_USART_CFG_CAPABILITY_MAX_BAUDRATE 921600
62# endif
63# ifndef VSF_USART_CFG_CAPABILITY_MIN_BAUDRATE
64# define VSF_USART_CFG_CAPABILITY_MIN_BAUDRATE 4800
65# endif
66# ifndef VSF_USART_CFG_CAPABILITY_TXFIFO_DEPTH
67# define VSF_USART_CFG_CAPABILITY_TXFIFO_DEPTH 64
68# endif
69# ifndef VSF_USART_CFG_CAPABILITY_RXFIFO_DEPTH
70# define VSF_USART_CFG_CAPABILITY_RXFIFO_DEPTH 64
71# endif
72# ifndef VSF_USART_CFG_CAPABILITY_MAX_DATA_BITS
73# define VSF_USART_CFG_CAPABILITY_MAX_DATA_BITS 9
74# endif
75# ifndef VSF_USART_CFG_CAPABILITY_MIN_DATA_BITS
76# define VSF_USART_CFG_CAPABILITY_MIN_DATA_BITS 8
77# endif
78# ifndef VSF_USART_CFG_CAPABILITY_SUPPORT_RX_TIMEOUT
79# define VSF_USART_CFG_CAPABILITY_SUPPORT_RX_TIMEOUT 1
80# endif
81# ifndef VSF_USART_CFG_CAPABILITY_SUPPORT_SEND_BREAK
82# define VSF_USART_CFG_CAPABILITY_SUPPORT_SEND_BREAK 1
83# endif
84# ifndef VSF_USART_CFG_CAPABILITY_SUPPORT_SET_AND_CLEAR_BREAK
85# define VSF_USART_CFG_CAPABILITY_SUPPORT_SET_AND_CLEAR_BREAK 0
86# endif
87#endif
88
89#if defined(VSF_USART_CFG_IMP_RENAME_DEVICE_PREFIX) && (VSF_USART_CFG_IMP_RENAME_DEVICE_PREFIX == ENABLED)
90# define vsf_real_usart_t VSF_MCONNECT(VSF_USART_CFG_IMP_DEVICE_PREFIX, _t)
91# define vsf_real_usart_request_rx VSF_MCONNECT(VSF_USART_CFG_IMP_DEVICE_PREFIX, _request_rx)
92# define vsf_real_usart_cancel_rx VSF_MCONNECT(VSF_USART_CFG_IMP_DEVICE_PREFIX, _cancel_rx)
93# define vsf_real_usart_get_rx_count VSF_MCONNECT(VSF_USART_CFG_IMP_DEVICE_PREFIX, _get_rx_count)
94# define vsf_real_usart_request_tx VSF_MCONNECT(VSF_USART_CFG_IMP_DEVICE_PREFIX, _request_tx)
95# define vsf_real_usart_cancel_tx VSF_MCONNECT(VSF_USART_CFG_IMP_DEVICE_PREFIX, _cancel_tx)
96# define vsf_real_usart_get_tx_count VSF_MCONNECT(VSF_USART_CFG_IMP_DEVICE_PREFIX, _get_tx_count)
97# define vsf_real_usart_capability VSF_MCONNECT(VSF_USART_CFG_IMP_DEVICE_PREFIX, _capability)
98# define vsf_real_usart_ctrl VSF_MCONNECT(VSF_USART_CFG_IMP_DEVICE_PREFIX, _ctrl)
99# define vsf_real_usart_get_configuration VSF_MCONNECT(VSF_USART_CFG_IMP_DEVICE_PREFIX, _get_configuration)
100# define vsf_real_usart_irq_clear VSF_MCONNECT(VSF_USART_CFG_IMP_DEVICE_PREFIX, _irq_clear)
101# define vsf_real_usart_tx_send_break VSF_MCONNECT(VSF_USART_CFG_IMP_DEVICE_PREFIX, _tx_send_break)
102#else
103# define vsf_real_usart_t VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_t)
104# define vsf_real_usart_request_rx VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_request_rx)
105# define vsf_real_usart_cancel_rx VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_cancel_rx)
106# define vsf_real_usart_get_rx_count VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_get_rx_count)
107# define vsf_real_usart_request_tx VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_request_tx)
108# define vsf_real_usart_cancel_tx VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_cancel_tx)
109# define vsf_real_usart_get_tx_count VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_get_tx_count)
110# define vsf_real_usart_capability VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_capability)
111# define vsf_real_usart_ctrl VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_ctrl)
112# define vsf_real_usart_get_configuration VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_get_configuration)
113# define vsf_real_usart_irq_clear VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_irq_clear)
114# define vsf_real_usart_tx_send_break VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_tx_send_break)
115#endif
116
117/*============================ IMPLEMENTATION ================================*/
118
119#if VSF_USART_CFG_REIMPLEMENT_API_REQUEST == DISABLED
120
121vsf_err_t vsf_real_usart_request_rx(vsf_real_usart_t *usart_ptr, void *buffer_ptr, uint_fast32_t count)
122{
123 VSF_HAL_ASSERT(NULL != usart_ptr);
125 return VSF_ERR_FAIL;
126}
127
128vsf_err_t vsf_real_usart_cancel_rx(vsf_real_usart_t *usart_ptr)
129{
130 VSF_HAL_ASSERT(NULL != usart_ptr);
132 return VSF_ERR_FAIL;
133}
134
135int_fast32_t vsf_real_usart_get_rx_count(vsf_real_usart_t *usart_ptr)
136{
137 VSF_HAL_ASSERT(NULL != usart_ptr);
139 return -1;
140}
141
142vsf_err_t vsf_real_usart_request_tx(vsf_real_usart_t *usart_ptr, void *buffer_ptr, uint_fast32_t count)
143{
144 VSF_HAL_ASSERT(NULL != usart_ptr);
146 return VSF_ERR_FAIL;
147}
148
149vsf_err_t vsf_real_usart_cancel_tx(vsf_real_usart_t *usart_ptr)
150{
151 VSF_HAL_ASSERT(NULL != usart_ptr);
153 return VSF_ERR_FAIL;
154}
155
156int_fast32_t vsf_real_usart_get_tx_count(vsf_real_usart_t *usart_ptr)
157{
158 VSF_HAL_ASSERT(NULL != usart_ptr);
160 return -1;
161}
162
163#endif
164
165#if VSF_USART_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
166vsf_usart_capability_t vsf_real_usart_capability(vsf_real_usart_t *usart_ptr)
167{
168 VSF_HAL_ASSERT(NULL != usart_ptr);
169
170 vsf_usart_capability_t usart_capability = {
171 .irq_mask = VSF_USART_CFG_CAPABILITY_IRQ_MASK,
172 .max_baudrate = VSF_USART_CFG_CAPABILITY_MAX_BAUDRATE,
173 .min_baudrate = VSF_USART_CFG_CAPABILITY_MIN_BAUDRATE,
174 .txfifo_depth = VSF_USART_CFG_CAPABILITY_TXFIFO_DEPTH,
175 .rxfifo_depth = VSF_USART_CFG_CAPABILITY_RXFIFO_DEPTH,
176 .max_data_bits = VSF_USART_CFG_CAPABILITY_MAX_DATA_BITS,
177 .min_data_bits = VSF_USART_CFG_CAPABILITY_MIN_DATA_BITS,
178 .support_rx_timeout = VSF_USART_CFG_CAPABILITY_SUPPORT_RX_TIMEOUT,
179 .support_send_break = VSF_USART_CFG_CAPABILITY_SUPPORT_SEND_BREAK,
180 .support_set_and_clear_break = VSF_USART_CFG_CAPABILITY_SUPPORT_SET_AND_CLEAR_BREAK,
181 };
182
183 return usart_capability;
184}
185#endif
186
187#if VSF_USART_CFG_REIMPLEMENT_API_CTRL == DISABLED
188vsf_err_t vsf_real_usart_ctrl(vsf_real_usart_t *usart_ptr, vsf_usart_ctrl_t ctrl, void * param)
189{
190 VSF_HAL_ASSERT(NULL != usart_ptr);
191
192 // Default implementation: not supported, trigger assertion
194
195 return VSF_ERR_NOT_SUPPORT;
196}
197#endif
198
199#if VSF_USART_CFG_REIMPLEMENT_API_GET_CONFIGURATION == DISABLED
200vsf_err_t vsf_real_usart_get_configuration(vsf_real_usart_t *usart_ptr, vsf_usart_cfg_t *cfg_ptr)
201{
202 VSF_HAL_ASSERT(NULL != usart_ptr);
203 VSF_HAL_ASSERT(NULL != cfg_ptr);
204
205 // Default implementation: not supported, trigger assertion
207
208 return VSF_ERR_NOT_SUPPORT;
209}
210#endif
211
212#if VSF_USART_CFG_REIMPLEMENT_API_IRQ_CLEAR == DISABLED
213vsf_usart_irq_mask_t vsf_real_usart_irq_clear(vsf_real_usart_t *usart_ptr, vsf_usart_irq_mask_t irq_mask)
214{
215 VSF_HAL_ASSERT(NULL != usart_ptr);
216
217 // Default implementation: not supported, trigger assertion
219
220 return 0;
221}
222#endif
223
224/*============================ MACROS ========================================*/
225
226#undef VSF_USART_CFG_REIMPLEMENT_TYPE_CAPABILITY
227#undef VSF_USART_CFG_REIMPLEMENT_TYPE_CFG
228#undef VSF_USART_CFG_REIMPLEMENT_TYPE_CTRL
229#undef VSF_USART_CFG_REIMPLEMENT_TYPE_IRQ_MASK
230#undef VSF_USART_CFG_REIMPLEMENT_TYPE_MODE
231#undef VSF_USART_CFG_REIMPLEMENT_TYPE_STATUS
232#undef VSF_USART_CFG_REIMPLEMENT_API_CAPABILITY
233#undef VSF_USART_CFG_CAPABILITY_IRQ_MASK
234#undef VSF_USART_CFG_CAPABILITY_MAX_BAUDRATE
235#undef VSF_USART_CFG_CAPABILITY_MIN_BAUDRATE
236#undef VSF_USART_CFG_CAPABILITY_TXFIFO_DEPTH
237#undef VSF_USART_CFG_CAPABILITY_RXFIFO_DEPTH
238#undef VSF_USART_CFG_CAPABILITY_MAX_DATA_BITS
239#undef VSF_USART_CFG_CAPABILITY_MIN_DATA_BITS
240#undef VSF_USART_CFG_CAPABILITY_SUPPORT_RX_TIMEOUT
241#undef VSF_USART_CFG_REIMPLEMENT_API_REQUEST
242#undef VSF_USART_CFG_REIMPLEMENT_API_CTRL
243#undef VSF_USART_CFG_REIMPLEMENT_API_GET_CONFIGURATION
244#undef VSF_USART_CFG_REIMPLEMENT_API_IRQ_CLEAR
245#undef vsf_real_usart_t
246#undef vsf_real_usart_init
247#undef vsf_real_usart_fini
248#undef vsf_real_usart_rxfifo_read
249#undef vsf_real_usart_txfifo_write
250#undef vsf_real_usart_irq_enable
251#undef vsf_real_usart_irq_disable
252#undef vsf_real_usart_request_rx
253#undef vsf_real_usart_cancel_rx
254#undef vsf_real_usart_get_rx_count
255#undef vsf_real_usart_request_tx
256#undef vsf_real_usart_cancel_tx
257#undef vsf_real_usart_get_tx_count
258#undef vsf_real_usart_capability
259#undef vsf_real_usart_ctrl
260#undef vsf_real_usart_get_configuration
261#undef vsf_real_usart_irq_clear
262#undef vsf_real_usart_tx_send_break
263
264/*============================ IMPLEMENTATION ================================*/
265/*============================ MACROS ========================================*/
266
267#ifdef VSF_USART_CFG_IMP_REMAP_PREFIX
268# define vsf_imp_usart_t VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_t)
269# define vsf_imp_usart_init VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_init)
270# define vsf_imp_usart_fini VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_fini)
271# define vsf_imp_usart_capability VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_capability)
272# define vsf_imp_usart_enable VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_enable)
273# define vsf_imp_usart_disable VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_disable)
274# define vsf_imp_usart_irq_enable VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_irq_enable)
275# define vsf_imp_usart_irq_disable VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_irq_disable)
276# define vsf_imp_usart_irq_clear VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_irq_clear)
277# define vsf_imp_usart_status VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_status)
278# define vsf_imp_usart_rxfifo_get_data_count VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_rxfifo_get_data_count)
279# define vsf_imp_usart_rxfifo_read VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_rxfifo_read)
280# define vsf_imp_usart_txfifo_get_free_count VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_txfifo_get_free_count)
281# define vsf_imp_usart_txfifo_write VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_txfifo_write)
282# define vsf_imp_usart_request_rx VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_request_rx)
283# define vsf_imp_usart_request_tx VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_request_tx)
284# define vsf_imp_usart_cancel_rx VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_cancel_rx)
285# define vsf_imp_usart_cancel_tx VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_cancel_tx)
286# define vsf_imp_usart_get_rx_count VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_get_rx_count)
287# define vsf_imp_usart_get_tx_count VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_get_tx_count)
288# define vsf_imp_usart_ctrl VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_ctrl)
289# define vsf_imp_usart_get_configuration VSF_MCONNECT(VSF_USART_CFG_IMP_PREFIX, _usart_get_configuration)
290
291# define vsf_remap_usart_t VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_t)
292# define vsf_remap_usart_init VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_init)
293# define vsf_remap_usart_fini VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_fini)
294# define vsf_remap_usart_capability VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_capability)
295# define vsf_remap_usart_enable VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_enable)
296# define vsf_remap_usart_disable VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_disable)
297# define vsf_remap_usart_irq_enable VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_irq_enable)
298# define vsf_remap_usart_irq_disable VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_irq_disable)
299# define vsf_remap_usart_irq_clear VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_irq_clear)
300# define vsf_remap_usart_status VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_status)
301# define vsf_remap_usart_rxfifo_get_data_count VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_rxfifo_get_data_count)
302# define vsf_remap_usart_rxfifo_read VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_rxfifo_read)
303# define vsf_remap_usart_txfifo_get_free_count VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_txfifo_get_free_count)
304# define vsf_remap_usart_txfifo_write VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_txfifo_write)
305# define vsf_remap_usart_request_rx VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_request_rx)
306# define vsf_remap_usart_request_tx VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_request_tx)
307# define vsf_remap_usart_cancel_rx VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_cancel_rx)
308# define vsf_remap_usart_cancel_tx VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_cancel_tx)
309# define vsf_remap_usart_get_rx_count VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_get_rx_count)
310# define vsf_remap_usart_get_tx_count VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_get_tx_count)
311# define vsf_remap_usart_ctrl VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_ctrl)
312# define vsf_remap_usart_get_configuration VSF_MCONNECT(VSF_USART_CFG_IMP_REMAP_PREFIX, _usart_get_configuration)
313# define VSF_USART_CFG_IMP_REMAP_FUNCTIONS \
314 vsf_err_t vsf_imp_usart_init(vsf_imp_usart_t *usart_ptr, vsf_usart_cfg_t *cfg_ptr) \
315 { \
316 VSF_HAL_ASSERT(usart_ptr != NULL); \
317 return vsf_remap_usart_init(usart_ptr, cfg_ptr); \
318 } \
319 void vsf_imp_usart_fini(vsf_imp_usart_t *usart_ptr) \
320 { \
321 VSF_HAL_ASSERT(usart_ptr != NULL); \
322 vsf_remap_usart_fini(usart_ptr); \
323 } \
324 fsm_rt_t vsf_imp_usart_enable(vsf_imp_usart_t *usart_ptr) \
325 { \
326 VSF_HAL_ASSERT(usart_ptr != NULL); \
327 return vsf_remap_usart_enable(usart_ptr); \
328 } \
329 fsm_rt_t vsf_imp_usart_disable(vsf_imp_usart_t *usart_ptr) \
330 { \
331 VSF_HAL_ASSERT(usart_ptr != NULL); \
332 return vsf_remap_usart_disable(usart_ptr); \
333 } \
334 void vsf_imp_usart_irq_enable(vsf_imp_usart_t *usart_ptr, vsf_usart_irq_mask_t irq_mask) \
335 { \
336 VSF_HAL_ASSERT(usart_ptr != NULL); \
337 vsf_remap_usart_irq_enable(usart_ptr, irq_mask); \
338 } \
339 void vsf_imp_usart_irq_disable(vsf_imp_usart_t *usart_ptr, vsf_usart_irq_mask_t irq_mask) \
340 { \
341 VSF_HAL_ASSERT(usart_ptr != NULL); \
342 vsf_remap_usart_irq_disable(usart_ptr, irq_mask); \
343 } \
344 vsf_usart_irq_mask_t vsf_imp_usart_irq_clear(vsf_imp_usart_t *usart_ptr, vsf_usart_irq_mask_t irq_mask) \
345 { \
346 VSF_HAL_ASSERT(usart_ptr != NULL); \
347 return vsf_remap_usart_irq_clear(usart_ptr, irq_mask); \
348 } \
349 vsf_usart_status_t vsf_imp_usart_status(vsf_imp_usart_t *usart_ptr) \
350 { \
351 VSF_HAL_ASSERT(usart_ptr != NULL); \
352 return vsf_remap_usart_status(usart_ptr); \
353 } \
354 vsf_usart_capability_t vsf_imp_usart_capability(vsf_imp_usart_t *usart_ptr) \
355 { \
356 VSF_HAL_ASSERT(usart_ptr != NULL); \
357 return vsf_remap_usart_capability(usart_ptr); \
358 } \
359 uint_fast32_t vsf_imp_usart_rxfifo_get_data_count(vsf_imp_usart_t *usart_ptr) \
360 { \
361 VSF_HAL_ASSERT(usart_ptr != NULL); \
362 return vsf_remap_usart_rxfifo_get_data_count(usart_ptr); \
363 } \
364 uint_fast32_t vsf_imp_usart_rxfifo_read(vsf_imp_usart_t *usart_ptr, void *buffer_ptr, uint_fast32_t count) \
365 { \
366 VSF_HAL_ASSERT(usart_ptr != NULL); \
367 return vsf_remap_usart_rxfifo_read(usart_ptr, buffer_ptr, count); \
368 } \
369 uint_fast32_t vsf_imp_usart_txfifo_get_free_count(vsf_imp_usart_t *usart_ptr) \
370 { \
371 VSF_HAL_ASSERT(usart_ptr != NULL); \
372 return vsf_remap_usart_txfifo_get_free_count(usart_ptr); \
373 } \
374 uint_fast32_t vsf_imp_usart_txfifo_write(vsf_imp_usart_t *usart_ptr, void *buffer_ptr, uint_fast32_t count) \
375 { \
376 VSF_HAL_ASSERT(usart_ptr != NULL); \
377 return vsf_remap_usart_txfifo_write(usart_ptr, buffer_ptr, count); \
378 } \
379 vsf_err_t vsf_imp_usart_request_rx(vsf_imp_usart_t *usart_ptr, void *buffer_ptr, uint_fast32_t count) \
380 { \
381 VSF_HAL_ASSERT(usart_ptr != NULL); \
382 return vsf_remap_usart_request_rx(usart_ptr, buffer_ptr, count); \
383 } \
384 vsf_err_t vsf_imp_usart_request_tx(vsf_imp_usart_t *usart_ptr, void *buffer_ptr, uint_fast32_t count) \
385 { \
386 VSF_HAL_ASSERT(usart_ptr != NULL); \
387 return vsf_remap_usart_request_tx(usart_ptr, buffer_ptr, count); \
388 } \
389 vsf_err_t vsf_imp_usart_cancel_rx(vsf_imp_usart_t *usart_ptr) \
390 { \
391 VSF_HAL_ASSERT(usart_ptr != NULL); \
392 return vsf_remap_usart_cancel_rx(usart_ptr); \
393 } \
394 vsf_err_t vsf_imp_usart_cancel_tx(vsf_imp_usart_t *usart_ptr) \
395 { \
396 VSF_HAL_ASSERT(usart_ptr != NULL); \
397 return vsf_remap_usart_cancel_tx(usart_ptr); \
398 } \
399 int_fast32_t vsf_imp_usart_get_rx_count(vsf_imp_usart_t *usart_ptr) \
400 { \
401 VSF_HAL_ASSERT(usart_ptr != NULL); \
402 return vsf_remap_usart_get_rx_count(usart_ptr); \
403 } \
404 int_fast32_t vsf_imp_usart_get_tx_count(vsf_imp_usart_t *usart_ptr) \
405 { \
406 VSF_HAL_ASSERT(usart_ptr != NULL); \
407 return vsf_remap_usart_get_tx_count(usart_ptr); \
408 } \
409 vsf_err_t vsf_imp_usart_ctrl(vsf_imp_usart_t *usart_ptr, vsf_usart_ctrl_t ctrl, void *param) \
410 { \
411 VSF_HAL_ASSERT(usart_ptr != NULL); \
412 return vsf_remap_usart_ctrl(usart_ptr, ctrl, param); \
413 } \
414 vsf_err_t vsf_imp_usart_get_configuration(vsf_imp_usart_t *usart_ptr, vsf_usart_cfg_t *cfg_ptr) \
415 { \
416 VSF_HAL_ASSERT(usart_ptr != NULL); \
417 VSF_HAL_ASSERT(cfg_ptr != NULL); \
418 return vsf_remap_usart_get_configuration(usart_ptr, cfg_ptr); \
419 }
420#endif
421
422/*============================ GLOBAL VARIABLES ==============================*/
423
424#define VSF_HAL_TEMPLATE_IMP_NAME _usart
425#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _USART
426
427#if !defined(VSF_USART_CFG_IMP_PREFIX) && !defined(VSF_USART_CFG_IMP_DEVICE_PREFIX)
428# error "Please define VSF_USART_CFG_IMP_PREFIX in usart driver"
429#endif
430
431#if !defined(VSF_USART_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_USART_CFG_IMP_DEVICE_UPCASE_PREFIX)
432# error "Please define VSF_USART_CFG_IMP_UPCASE_PREFIX in usart driver"
433#endif
434
435#ifndef VSF_USART_CFG_IMP_COUNT_MASK_PREFIX
436# define VSF_USART_CFG_IMP_COUNT_MASK_PREFIX VSF_USART_CFG_IMP_UPCASE_PREFIX
437#endif
438
439#ifdef VSF_USART_CFG_IMP_REMAP_FUNCTIONS
440# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_USART_CFG_IMP_REMAP_FUNCTIONS
441#endif
442
444
445#undef VSF_USART_CFG_IMP_PREFIX
446#undef VSF_USART_CFG_IMP_COUNT_MASK_PREFIX
447#undef VSF_USART_CFG_IMP_UPCASE_PREFIX
448#undef VSF_USART_CFG_IMP_DEVICE_PREFIX
449#undef VSF_USART_CFG_IMP_DEVICE_UPCASE_PREFIX
450#undef VSF_USART_CFG_IMP_REMAP_PREFIX
451#undef VSF_USART_CFG_IMP_LV0
452#undef VSF_USART_CFG_IMP_REMAP_FUNCTIONS
453#undef VSF_USART_CFG_IMP_HAS_OP
454#undef VSF_USART_CFG_IMP_EXTERN_OP
455#undef VSF_USART_CFG_IMP_RENAME_DEVICE_PREFIX
456
457#undef vsf_imp_usart_t
458#undef vsf_imp_usart_init
459#undef vsf_imp_usart_fini
460#undef vsf_imp_usart_capability
461#undef vsf_imp_usart_enable
462#undef vsf_imp_usart_disable
463#undef vsf_imp_usart_irq_enable
464#undef vsf_imp_usart_irq_disable
465#undef vsf_imp_usart_irq_clear
466#undef vsf_imp_usart_status
467#undef vsf_imp_usart_rxfifo_get_data_count
468#undef vsf_imp_usart_rxfifo_read
469#undef vsf_imp_usart_txfifo_get_free_count
470#undef vsf_imp_usart_txfifo_write
471#undef vsf_imp_usart_request_rx
472#undef vsf_imp_usart_request_tx
473#undef vsf_imp_usart_cancel_rx
474#undef vsf_imp_usart_cancel_tx
475#undef vsf_imp_usart_get_rx_count
476#undef vsf_imp_usart_get_tx_count
477#undef vsf_imp_usart_ctrl
478#undef vsf_imp_usart_get_configuration
479#undef vsf_imp_usart_tx_send_break
480
481#undef vsf_remap_usart_t
482#undef vsf_remap_usart_init
483#undef vsf_remap_usart_fini
484#undef vsf_remap_usart_capability
485#undef vsf_remap_usart_enable
486#undef vsf_remap_usart_disable
487#undef vsf_remap_usart_irq_enable
488#undef vsf_remap_usart_irq_disable
489#undef vsf_remap_usart_irq_clear
490#undef vsf_remap_usart_status
491#undef vsf_remap_usart_rxfifo_get_data_count
492#undef vsf_remap_usart_rxfifo_read
493#undef vsf_remap_usart_txfifo_get_free_count
494#undef vsf_remap_usart_txfifo_write
495#undef vsf_remap_usart_request_rx
496#undef vsf_remap_usart_request_tx
497#undef vsf_remap_usart_cancel_rx
498#undef vsf_remap_usart_cancel_tx
499#undef vsf_remap_usart_get_rx_count
500#undef vsf_remap_usart_get_tx_count
501#undef vsf_remap_usart_ctrl
502#undef vsf_remap_usart_get_configuration
503#undef vsf_remap_usart_tx_send_break
504
505/*============================ STATIC ASSERTIONS ==============================*/
506
507
508/* User-extensible macros for custom mode and IRQ mask values
509 * Users can define these macros before including this template to append
510 * their custom enum values to the uniqueness checks.
511 *
512 * Check modes for custom values:
513 * VSF_USART_CFG_MODE_CHECK_UNIQUE - Check mode for custom mode values
514 * Default: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
515 * Can be set to: VSF_HAL_CHECK_MODE_LOOSE (no overlapping bits)
516 * VSF_USART_CFG_IRQ_MASK_CHECK_UNIQUE - Check mode for custom IRQ mask values
517 * Default: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
518 * Can be set to: VSF_HAL_CHECK_MODE_LOOSE (no overlapping bits)
519 *
520 * Example usage in vendor driver:
521 * #define VSF_USART_CUSTOM_MODE_VALUES MY_CUSTOM_MODE1, MY_CUSTOM_MODE2
522 * #define VSF_USART_CFG_MODE_CHECK_UNIQUE VSF_HAL_CHECK_MODE_LOOSE
523 * #define VSF_USART_CUSTOM_IRQ_MASK_VALUES MY_CUSTOM_IRQ1, MY_CUSTOM_IRQ2
524 * #define VSF_USART_CFG_IRQ_MASK_CHECK_UNIQUE VSF_HAL_CHECK_MODE_LOOSE
525 * #include "hal/driver/common/usart/usart_template.inc"
526 */
527
528
529#undef VSF_HAL_TEMPLATE_IMP_NAME
530#undef VSF_HAL_TEMPLATE_IMP_UPCASE_NAME
531
532#ifdef VSF_USART_CFG_MODE_CHECK_UNIQUE
533/* Default mode lists - can be redefined by users before including this file */
534#ifndef VSF_USART_CHECK_UNIQUE_PARITY_MODES
535# define VSF_USART_CHECK_UNIQUE_PARITY_MODES \
536 VSF_USART_NO_PARITY, \
537 VSF_USART_EVEN_PARITY, \
538 VSF_USART_ODD_PARITY, \
539 VSF_USART_FORCE_0_PARITY, \
540 VSF_USART_FORCE_1_PARITY
541#endif
542
543#ifndef VSF_USART_CHECK_UNIQUE_STOP_BIT_MODES
544# define VSF_USART_CHECK_UNIQUE_STOP_BIT_MODES \
545 VSF_USART_1_STOPBIT, \
546 VSF_USART_1_5_STOPBIT, \
547 VSF_USART_0_5_STOPBIT, \
548 VSF_USART_2_STOPBIT
549#endif
550
551#ifndef VSF_USART_CHECK_UNIQUE_DATA_BIT_MODES
552# define VSF_USART_CHECK_UNIQUE_DATA_BIT_MODES \
553 VSF_USART_5_BIT_LENGTH, \
554 VSF_USART_6_BIT_LENGTH, \
555 VSF_USART_7_BIT_LENGTH, \
556 VSF_USART_8_BIT_LENGTH, \
557 VSF_USART_9_BIT_LENGTH, \
558 VSF_USART_10_BIT_LENGTH
559#endif
560
561#ifndef VSF_USART_CHECK_UNIQUE_HW_CONTROL_MODES
562# define VSF_USART_CHECK_UNIQUE_HW_CONTROL_MODES \
563 VSF_USART_NO_HWCONTROL, \
564 VSF_USART_RTS_HWCONTROL, \
565 VSF_USART_CTS_HWCONTROL, \
566 VSF_USART_RTS_CTS_HWCONTROL
567#endif
568
569#ifndef VSF_USART_CHECK_UNIQUE_TX_ENABLE_MODES
570# define VSF_USART_CHECK_UNIQUE_TX_ENABLE_MODES \
571 VSF_USART_TX_ENABLE, \
572 VSF_USART_TX_DISABLE
573#endif
574#ifndef VSF_USART_CHECK_UNIQUE_RX_ENABLE_MODES
575# define VSF_USART_CHECK_UNIQUE_RX_ENABLE_MODES \
576 VSF_USART_RX_ENABLE, \
577 VSF_USART_RX_DISABLE
578#endif
579
580#ifndef VSF_USART_CHECK_UNIQUE_SYNC_CLOCK_MODES
581# define VSF_USART_CHECK_UNIQUE_SYNC_CLOCK_MODES \
582 VSF_USART_SYNC_CLOCK_ENABLE, \
583 VSF_USART_SYNC_CLOCK_DISABLE
584#endif
585
586#ifndef VSF_USART_CHECK_UNIQUE_HALF_DUPLEX_MODES
587# define VSF_USART_CHECK_UNIQUE_HALF_DUPLEX_MODES \
588 VSF_USART_HALF_DUPLEX_DISABLE, \
589 VSF_USART_HALF_DUPLEX_ENABLE
590#endif
591
592#ifndef VSF_USART_CHECK_UNIQUE_TX_FIFO_THRESHOLD_MODES
593# define VSF_USART_CHECK_UNIQUE_TX_FIFO_THRESHOLD_MODES \
594 VSF_USART_TX_FIFO_THRESHOLD_EMPTY, \
595 VSF_USART_TX_FIFO_THRESHOLD_HALF_EMPTY, \
596 VSF_USART_TX_FIFO_THRESHOLD_NOT_FULL
597#endif
598
599#ifndef VSF_USART_CHECK_UNIQUE_RX_FIFO_THRESHOLD_MODES
600# define VSF_USART_CHECK_UNIQUE_RX_FIFO_THRESHOLD_MODES \
601 VSF_USART_RX_FIFO_THRESHOLD_NOT_EMPTY, \
602 VSF_USART_RX_FIFO_THRESHOLD_HALF_FULL, \
603 VSF_USART_RX_FIFO_THRESHOLD_FULL
604#endif
605
606#ifndef VSF_USART_CHECK_UNIQUE_SYNC_CLOCK_POLARITY_MODES
607# define VSF_USART_CHECK_UNIQUE_SYNC_CLOCK_POLARITY_MODES \
608 VSF_USART_SYNC_CLOCK_POLARITY_LOW, \
609 VSF_USART_SYNC_CLOCK_POLARITY_HIGH
610#endif
611
612#ifndef VSF_USART_CHECK_UNIQUE_SYNC_CLOCK_PHASE_MODES
613# define VSF_USART_CHECK_UNIQUE_SYNC_CLOCK_PHASE_MODES \
614 VSF_USART_SYNC_CLOCK_PHASE_1_EDGE, \
615 VSF_USART_SYNC_CLOCK_PHASE_2_EDGE
616#endif
617
618/* ==================== GROUP INTERNAL UNIQUENESS CHECKS ==================== */
619/* Check uniqueness within each functional group */
620
621/* Check parity mode uniqueness - all parity modes should have different values
622 * Mandatory: VSF_USART_NO_PARITY, VSF_USART_EVEN_PARITY, VSF_USART_ODD_PARITY
623 * Implementation Required: VSF_USART_FORCE_0_PARITY, VSF_USART_FORCE_1_PARITY
624 */
625VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_USART_CFG_MODE_CHECK_UNIQUE, VSF_USART_CHECK_UNIQUE_PARITY_MODES);
626
627/* Check stop bit uniqueness - all stop bit modes should have different values
628 * Mandatory: VSF_USART_1_STOPBIT
629 * Implementation Required: VSF_USART_1_5_STOPBIT, VSF_USART_0_5_STOPBIT, VSF_USART_2_STOPBIT
630 */
631VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_USART_CFG_MODE_CHECK_UNIQUE, VSF_USART_CHECK_UNIQUE_STOP_BIT_MODES);
632
633/* Check data bit length uniqueness - all data bit length modes should have different values
634 * Mandatory: VSF_USART_8_BIT_LENGTH
635 * Implementation Required: VSF_USART_5_BIT_LENGTH, VSF_USART_6_BIT_LENGTH, VSF_USART_7_BIT_LENGTH,
636 * VSF_USART_9_BIT_LENGTH, VSF_USART_10_BIT_LENGTH
637 */
638VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_USART_CFG_MODE_CHECK_UNIQUE, VSF_USART_CHECK_UNIQUE_DATA_BIT_MODES);
639
640/* Check hardware flow control uniqueness - all hw control modes should have different values
641 * Mandatory: VSF_USART_NO_HWCONTROL
642 * Implementation Required: VSF_USART_RTS_HWCONTROL, VSF_USART_CTS_HWCONTROL, VSF_USART_RTS_CTS_HWCONTROL
643 */
644VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_USART_CFG_MODE_CHECK_UNIQUE, VSF_USART_CHECK_UNIQUE_HW_CONTROL_MODES);
645
646/* Check TX enable/disable uniqueness
647 * Mandatory: VSF_USART_TX_ENABLE
648 * Implementation Required: VSF_USART_TX_DISABLE
649 */
650VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_USART_CFG_MODE_CHECK_UNIQUE, VSF_USART_CHECK_UNIQUE_TX_ENABLE_MODES);
651
652/* Check RX enable/disable uniqueness
653 * Mandatory: VSF_USART_RX_ENABLE
654 * Implementation Required: VSF_USART_RX_DISABLE
655 */
656VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_USART_CFG_MODE_CHECK_UNIQUE, VSF_USART_CHECK_UNIQUE_RX_ENABLE_MODES);
657
658/* Check sync clock enable/disable uniqueness
659 * Mandatory: VSF_USART_SYNC_CLOCK_DISABLE
660 * Implementation Required: VSF_USART_SYNC_CLOCK_ENABLE
661 */
662VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_USART_CFG_MODE_CHECK_UNIQUE, VSF_USART_CHECK_UNIQUE_SYNC_CLOCK_MODES);
663
664/* Check half duplex enable/disable uniqueness
665 * Mandatory: VSF_USART_HALF_DUPLEX_DISABLE
666 * Implementation Required: VSF_USART_HALF_DUPLEX_ENABLE
667 */
668VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_USART_CFG_MODE_CHECK_UNIQUE, VSF_USART_CHECK_UNIQUE_HALF_DUPLEX_MODES);
669
670/* Check TX FIFO threshold uniqueness - all TX FIFO threshold modes should have different values
671 * Mandatory: VSF_USART_TX_FIFO_THRESHOLD_EMPTY
672 * Implementation Required: VSF_USART_TX_FIFO_THRESHOLD_HALF_EMPTY, VSF_USART_TX_FIFO_THRESHOLD_NOT_FULL
673 */
674VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_USART_CFG_MODE_CHECK_UNIQUE, VSF_USART_CHECK_UNIQUE_TX_FIFO_THRESHOLD_MODES);
675
676/* Check RX FIFO threshold uniqueness - all RX FIFO threshold modes should have different values
677 * Mandatory: VSF_USART_RX_FIFO_THRESHOLD_NOT_EMPTY
678 * Implementation Required: VSF_USART_RX_FIFO_THRESHOLD_HALF_FULL, VSF_USART_RX_FIFO_THRESHOLD_FULL
679 */
680VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_USART_CFG_MODE_CHECK_UNIQUE, VSF_USART_CHECK_UNIQUE_RX_FIFO_THRESHOLD_MODES);
681
682/* Check sync clock polarity uniqueness - Implementation Required */
683#ifdef VSF_USART_SYNC_CLOCK_POLARITY_LOW
684VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_USART_CFG_MODE_CHECK_UNIQUE, VSF_USART_CHECK_UNIQUE_SYNC_CLOCK_POLARITY_MODES);
685#endif
686
687/* Check sync clock phase uniqueness - Implementation Required */
688#ifdef VSF_USART_SYNC_CLOCK_PHASE_1_EDGE
689VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_USART_CFG_MODE_CHECK_UNIQUE, VSF_USART_CHECK_UNIQUE_SYNC_CLOCK_PHASE_MODES);
690#endif
691
692#ifdef VSF_USART_CUSTOM_MODE_VALUES
693/* Check uniqueness among custom mode values using user-specified check mode */
695#endif
696
699 /* Mandatory modes - always included */
705 /* Implementation Required modes - conditionally included */
708#endif
711#endif
714#endif
717#endif
720#endif
723#endif
726#endif
729#endif
732#endif
735#endif
738#endif
741#endif
744#endif
747#endif
750#endif
753#endif
756#endif
759#endif
762#endif
765#endif
768#endif
771#endif
774#endif
777#endif
780#endif
781 /* Standard Optional modes - only included when __VSF_USART_CFG_SUPPORT_STANDARD_OPTIONAL is enabled */
783#ifdef VSF_USART_SWAP
785#endif
788#endif
791#endif
792#endif
793 /* User-defined modes - appended by user configuration */
794#ifdef VSF_USART_CUSTOM_MODE_VALUES
795 , VSF_USART_CUSTOM_MODE_VALUES
796#endif
797);
798
799#undef VSF_USART_CHECK_UNIQUE_PARITY_MODES
800#undef VSF_USART_CHECK_UNIQUE_STOP_BIT_MODES
801#undef VSF_USART_CHECK_UNIQUE_DATA_BIT_MODES
802#undef VSF_USART_CHECK_UNIQUE_HW_CONTROL_MODES
803#undef VSF_USART_CHECK_UNIQUE_TX_ENABLE_MODES
804#undef VSF_USART_CHECK_UNIQUE_RX_ENABLE_MODES
805#undef VSF_USART_CHECK_UNIQUE_SYNC_CLOCK_MODES
806#undef VSF_USART_CHECK_UNIQUE_HALF_DUPLEX_MODES
807#undef VSF_USART_CHECK_UNIQUE_TX_FIFO_THRESHOLD_MODES
808#undef VSF_USART_CHECK_UNIQUE_RX_FIFO_THRESHOLD_MODES
809#undef VSF_USART_CHECK_UNIQUE_SYNC_CLOCK_POLARITY_MODES
810#undef VSF_USART_CHECK_UNIQUE_SYNC_CLOCK_PHASE_MODES
811#endif /* VSF_USART_CFG_MODE_CHECK_UNIQUE */
812
813/* ==================== IRQ MASK UNIQUENESS CHECKS ==================== */
814
815#ifdef VSF_USART_CFG_IRQ_MASK_CHECK_UNIQUE
816
817#ifdef VSF_USART_CUSTOM_IRQ_MASK_VALUES
818/* Check uniqueness among custom IRQ mask values using user-specified check mode */
820#endif
821
822/* Check uniqueness within vsf_usart_irq_mask_t enum */
823
824/* Check IRQ mask uniqueness - all IRQ mask bits should have different values
825 * Mandatory: VSF_USART_IRQ_MASK_TX_CPL, VSF_USART_IRQ_MASK_RX_CPL,
826 * VSF_USART_IRQ_MASK_TX, VSF_USART_IRQ_MASK_RX
827 * Implementation Required: VSF_USART_IRQ_MASK_RX_TIMEOUT, VSF_USART_IRQ_MASK_CTS,
828 * VSF_USART_IRQ_MASK_FRAME_ERR, VSF_USART_IRQ_MASK_BREAK_ERR,
829 * VSF_USART_IRQ_MASK_PARITY_ERR, VSF_USART_IRQ_MASK_RX_OVERFLOW_ERR,
830 * VSF_USART_IRQ_MASK_RX_IDLE
831 * Standard Optional: VSF_USART_IRQ_MASK_TX_OVERFLOW_ERR, VSF_USART_IRQ_MASK_NOISE_ERR
832 */
835 /* Mandatory IRQ masks - always included */
840 /* Implementation Required IRQ masks - conditionally included */
843#endif
846#endif
849#endif
852#endif
855#endif
858#endif
861#endif
864#endif
865#ifdef VSF_USART_IRQ_MASK_TX_HALF_CPL
866 , VSF_USART_IRQ_MASK_TX_HALF_CPL
867#endif
868#ifdef VSF_USART_IRQ_MASK_RX_HALF_CPL
869 , VSF_USART_IRQ_MASK_RX_HALF_CPL
870#endif
871#ifdef VSF_USART_IRQ_MASK_CANCEL_TX_CPL
872 , VSF_USART_IRQ_MASK_CANCEL_TX_CPL
873#endif
874#ifdef VSF_USART_IRQ_MASK_CANCEL_RX_CPL
875 , VSF_USART_IRQ_MASK_CANCEL_RX_CPL
876#endif
877 /* Standard Optional IRQ masks - only included when __VSF_USART_CFG_SUPPORT_STANDARD_OPTIONAL is enabled */
879#ifdef VSF_USART_IRQ_MASK_TX_OVERFLOW_ERR
880 , VSF_USART_IRQ_MASK_TX_OVERFLOW_ERR
881#endif
884#endif
885#endif
886 /* User-defined IRQ masks - appended by user configuration */
887#ifdef VSF_USART_CUSTOM_IRQ_MASK_VALUES
888 , VSF_USART_CUSTOM_IRQ_MASK_VALUES
889#endif
890);
891#endif /* VSF_USART_CFG_IRQ_MASK_CHECK_UNIQUE */
892
893/* ==================== CTRL UNIQUENESS CHECKS ==================== */
894
895#ifdef VSF_USART_CFG_CTRL_CHECK_UNIQUE
896
897#ifdef VSF_USART_CUSTOM_CTRL_VALUES
898/* Check uniqueness among custom ctrl values using user-specified check mode */
899VSF_HAL_CHECK_UNIQUE_CUSTOM(VSF_USART_CFG_CTRL_CHECK_UNIQUE, VSF_USART_CUSTOM_CTRL_VALUES);
900#endif
901
902/* Check ctrl uniqueness - all ctrl values should have different values
903 * Mandatory: VSF_USART_CTRL_SEND_BREAK, VSF_USART_CTRL_SET_BREAK, VSF_USART_CTRL_CLEAR_BREAK
904 */
906 VSF_USART_CFG_CTRL_CHECK_UNIQUE,
907 /* Mandatory ctrls - always included */
911 /* User-defined ctrls - appended by user configuration */
912#ifdef VSF_USART_CUSTOM_CTRL_VALUES
913 , VSF_USART_CUSTOM_CTRL_VALUES
914#endif
915);
916#endif /* VSF_USART_CFG_CTRL_CHECK_UNIQUE */
917
918#undef VSF_USART_CFG_MODE_CHECK_UNIQUE
919#undef VSF_USART_CFG_IRQ_MASK_CHECK_UNIQUE
920#undef VSF_USART_CFG_CTRL_CHECK_UNIQUE
921#undef VSF_USART_CUSTOM_MODE_VALUES
922#undef VSF_USART_CUSTOM_IRQ_MASK_VALUES
923#undef VSF_USART_CUSTOM_CTRL_VALUES
924
925#endif /* VSF_HAL_USE_USART */
926
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
@ VSF_ERR_FAIL
failed
Definition __type.h:51
@ VSF_USART_HALF_DUPLEX_DISABLE
Definition uart.h:72
@ VSF_USART_8_BIT_LENGTH
Definition uart.h:34
@ VSF_USART_EVEN_PARITY
Definition uart.h:46
@ VSF_USART_ODD_PARITY
Definition uart.h:45
@ VSF_USART_NO_PARITY
Definition uart.h:44
@ VSF_USART_RX_ENABLE
Definition uart.h:66
@ VSF_USART_TX_ENABLE
Definition uart.h:63
@ VSF_USART_1_STOPBIT
Definition uart.h:40
@ VSF_USART_NO_HWCONTROL
Definition uart.h:58
vsf_usart_irq_mask_t
Definition uart.h:106
@ VSF_USART_IRQ_MASK_TX_CPL
Definition uart.h:125
@ VSF_USART_IRQ_MASK_TX
Definition uart.h:109
@ VSF_USART_IRQ_MASK_RX
Definition uart.h:108
@ VSF_USART_IRQ_MASK_RX_CPL
Definition uart.h:124
#define VSF_USART_CFG_MODE_CHECK_UNIQUE
Definition usart.c:426
#define VSF_USART_CFG_IRQ_MASK_CHECK_UNIQUE
Definition usart.c:427
#define VSF_USART_7_BIT_LENGTH
Definition usart.h:105
#define VSF_USART_CTS_HWCONTROL
Definition usart.h:94
#define VSF_USART_SYNC_CLOCK_DISABLE
Definition usart.h:132
#define VSF_USART_HALF_DUPLEX_ENABLE
Definition usart.h:77
#define VSF_USART_1_5_STOPBIT
Definition usart.h:117
#define VSF_USART_SYNC_CLOCK_POLARITY_HIGH
Definition usart.h:134
#define VSF_USART_SWAP
Definition usart.h:145
#define VSF_USART_CTRL_SEND_BREAK
Definition usart.h:264
#define VSF_USART_SYNC_CLOCK_PHASE_2_EDGE
Definition usart.h:136
#define VSF_USART_TX_FIFO_THRESHOLD_EMPTY
Definition usart.h:189
#define VSF_USART_TX_DISABLE
Definition usart.h:84
#define VSF_USART_RX_FIFO_THRESHOLD_FULL
Definition usart.h:198
#define VSF_USART_RTS_CTS_HWCONTROL
Definition usart.h:95
#define VSF_USART_RTS_HWCONTROL
Definition usart.h:93
#define VSF_USART_RX_FIFO_THRESHOLD_NOT_EMPTY
Definition usart.h:195
#define VSF_USART_SYNC_CLOCK_PHASE_1_EDGE
Definition usart.h:135
#define VSF_USART_0_5_STOPBIT
Definition usart.h:116
#define VSF_USART_SYNC_CLOCK_ENABLE
Definition usart.h:131
#define VSF_USART_2_STOPBIT
Definition usart.h:118
vsf_usart_ctrl_t
Definition usart.h:261
#define VSF_USART_IRQ_MASK_TX_IDLE
Definition usart.h:223
#define VSF_USART_RX_DISABLE
Definition usart.h:85
#define VSF_USART_IRQ_MASK_RX_IDLE
Definition usart.h:230
#define VSF_USART_TX_FIFO_THRESHOLD_NOT_FULL
Definition usart.h:192
#define VSF_USART_SYNC_CLOCK_POLARITY_LOW
Definition usart.h:133
@ VSF_USART_TX_INVERT
Definition usart.h:144
@ VSF_USART_RX_INVERT
Definition usart.h:145
#define VSF_USART_IRQ_MASK_NOISE_ERR
Definition usart.h:276
#define NULL
Definition lvgl.h:26
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
unsigned int uint_fast32_t
Definition stdint.h:27
int int_fast32_t
Definition stdint.h:26
USART capability structure Defines the hardware capabilities and limitations of the USART interface.
Definition vsf_template_usart.h:1085
vsf_usart_irq_mask_t irq_mask
Definition usart.h:387
USART configuration structure Contains all parameters needed to initialize and configure a USART inst...
Definition vsf_template_usart.h:945
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
#define VSF_HAL_CHECK_UNIQUE_CUSTOM(__CHECK_FUNC,...)
Definition vsf_template_static_assert_unique.h:2426
#define VSF_USART_IRQ_MASK_RX_TIMEOUT
Definition vsf_template_usart.h:677
#define VSF_USART_IRQ_MASK_FRAME_ERR
Definition vsf_template_usart.h:731
#define VSF_USART_IRQ_MASK_CTS
Definition vsf_template_usart.h:693
#define VSF_USART_5_BIT_LENGTH
Definition vsf_template_usart.h:421
#define VSF_USART_9_BIT_LENGTH
Definition vsf_template_usart.h:427
#define VSF_USART_CTRL_SET_BREAK
Definition vsf_template_usart.h:1001
#define VSF_USART_FORCE_1_PARITY
Definition vsf_template_usart.h:397
#define VSF_USART_RX_FIFO_THRESHOLD_HALF_FULL
Definition vsf_template_usart.h:504
#define VSF_USART_10_BIT_LENGTH
Definition vsf_template_usart.h:429
#define VSF_USART_IRQ_MASK_RX_OVERFLOW_ERR
Definition vsf_template_usart.h:765
#define VSF_USART_IRQ_MASK_BREAK_ERR
Definition vsf_template_usart.h:733
#define VSF_USART_FORCE_0_PARITY
Definition vsf_template_usart.h:395
#define VSF_USART_IRQ_MASK_PARITY_ERR
Definition vsf_template_usart.h:749
#define VSF_USART_CTRL_CLEAR_BREAK
Definition vsf_template_usart.h:1012
#define VSF_USART_TX_FIFO_THRESHOLD_HALF_EMPTY
Definition vsf_template_usart.h:489
#define __VSF_USART_CFG_SUPPORT_STANDARD_OPTIONAL
Enable standard optional features support.
Definition vsf_template_usart.h:248
#define VSF_USART_6_BIT_LENGTH
Definition vsf_template_usart.h:423
Generated from commit: vsfteam/vsf@b2e9e8a