1 /*
2  * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2022-04-28     CDT          first version
9  */
10 
11 #ifndef __UART_CONFIG_H__
12 #define __UART_CONFIG_H__
13 
14 #include <rtthread.h>
15 #include "irq_config.h"
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 
22 #if defined(BSP_USING_UART1)
23 #ifndef UART1_CONFIG
24 #define UART1_CONFIG                                            \
25     {                                                           \
26         .name     = "uart1",                                    \
27         .Instance = CM_USART1,                                  \
28         .clock    = FCG1_PERIPH_USART1,                         \
29         .rxerr_irq.irq_config =                                 \
30         {                                                       \
31             .irq_num    = BSP_UART1_RXERR_IRQ_NUM,              \
32             .irq_prio   = BSP_UART1_RXERR_IRQ_PRIO,             \
33             .int_src    = INT_SRC_USART1_EI,                    \
34         },                                                      \
35         .rx_irq.irq_config =                                    \
36         {                                                       \
37             .irq_num    = BSP_UART1_RX_IRQ_NUM,                 \
38             .irq_prio   = BSP_UART1_RX_IRQ_PRIO,                \
39             .int_src    = INT_SRC_USART1_RI,                    \
40         },                                                      \
41         .tx_irq.irq_config =                                    \
42         {                                                       \
43             .irq_num    = BSP_UART1_TX_IRQ_NUM,                 \
44             .irq_prio   = BSP_UART1_TX_IRQ_PRIO,                \
45             .int_src    = INT_SRC_USART1_TI,                    \
46         },                                                      \
47     }
48 #endif /* UART1_CONFIG */
49 
50 #if defined(BSP_UART1_RX_USING_DMA)
51 #ifndef UART1_DMA_RX_CONFIG
52 #define UART1_DMA_RX_CONFIG                                     \
53     {                                                           \
54         .Instance       = UART1_RX_DMA_INSTANCE,                \
55         .channel        = UART1_RX_DMA_CHANNEL,                 \
56         .clock          = UART1_RX_DMA_CLOCK,                   \
57         .trigger_select = UART1_RX_DMA_TRIG_SELECT,             \
58         .trigger_event  = EVT_SRC_USART1_RI,                    \
59         .flag           = UART1_RX_DMA_TRANS_FLAG,              \
60         .irq_config     =                                       \
61         {                                                       \
62             .irq_num    = UART1_RX_DMA_IRQn,                    \
63             .irq_prio   = UART1_RX_DMA_INT_PRIO,                \
64             .int_src    = UART1_RX_DMA_INT_SRC,                 \
65         },                                                      \
66     }
67 #endif /* UART1_DMA_RX_CONFIG */
68 
69 #ifndef UART1_RXTO_CONFIG
70 #define UART1_RXTO_CONFIG                                       \
71     {                                                           \
72         .TMR0_Instance = CM_TMR0_1,                             \
73         .channel       = TMR0_CH_A,                             \
74         .clock         = FCG2_PERIPH_TMR0_1,                    \
75         .timeout_bits  = 20UL,                                  \
76         .irq_config    =                                        \
77         {                                                       \
78             .irq_num   = BSP_UART1_RXTO_IRQ_NUM,                \
79             .irq_prio  = BSP_UART1_RXTO_IRQ_PRIO,               \
80             .int_src   = INT_SRC_USART1_RTO,                    \
81         },                                                      \
82     }
83 #endif /* UART1_RXTO_CONFIG */
84 #endif /* BSP_UART1_RX_USING_DMA */
85 
86 #if defined(RT_USING_SERIAL_V1) && defined(BSP_UART1_TX_USING_DMA)
87 #ifndef UART1_TX_CPLT_CONFIG
88 #define UART1_TX_CPLT_CONFIG                                    \
89     {                                                           \
90         .irq_config     =                                       \
91         {                                                       \
92             .irq_num    = BSP_UART1_TX_CPLT_IRQ_NUM,            \
93             .irq_prio   = BSP_UART1_TX_CPLT_IRQ_PRIO,           \
94             .int_src    = INT_SRC_USART1_TCI,                   \
95         },                                                      \
96     }
97 #endif
98 #elif defined(RT_USING_SERIAL_V2)
99 #ifndef UART1_TX_CPLT_CONFIG
100 #define UART1_TX_CPLT_CONFIG                                    \
101     {                                                           \
102         .irq_config     =                                       \
103         {                                                       \
104             .irq_num    = BSP_UART1_TX_CPLT_IRQ_NUM,            \
105             .irq_prio   = BSP_UART1_TX_CPLT_IRQ_PRIO,           \
106             .int_src    = INT_SRC_USART1_TCI,                   \
107         },                                                      \
108     }
109 #endif
110 #endif /* UART1_TX_CPLT_CONFIG */
111 
112 #if defined(BSP_UART1_TX_USING_DMA)
113 #ifndef UART1_DMA_TX_CONFIG
114 #define UART1_DMA_TX_CONFIG                                     \
115     {                                                           \
116         .Instance       = UART1_TX_DMA_INSTANCE,                \
117         .channel        = UART1_TX_DMA_CHANNEL,                 \
118         .clock          = UART1_TX_DMA_CLOCK,                   \
119         .trigger_select = UART1_TX_DMA_TRIG_SELECT,             \
120         .trigger_event  = EVT_SRC_USART1_TI,                    \
121         .flag           = UART1_TX_DMA_TRANS_FLAG,              \
122         .irq_config     =                                       \
123         {                                                       \
124             .irq_num    = UART1_TX_DMA_IRQn,                    \
125             .irq_prio   = UART1_TX_DMA_INT_PRIO,                \
126             .int_src    = UART1_TX_DMA_INT_SRC,                 \
127         },                                                      \
128     }
129 #endif /* UART1_DMA_TX_CONFIG */
130 #endif /* BSP_UART1_TX_USING_DMA */
131 #endif /* BSP_USING_UART1 */
132 
133 #if defined(BSP_USING_UART2)
134 #ifndef UART2_CONFIG
135 #define UART2_CONFIG                                            \
136     {                                                           \
137         .name     = "uart2",                                    \
138         .Instance = CM_USART2,                                  \
139         .clock    = FCG1_PERIPH_USART2,                         \
140         .rxerr_irq.irq_config =                                 \
141         {                                                       \
142             .irq_num    = BSP_UART2_RXERR_IRQ_NUM,              \
143             .irq_prio   = BSP_UART2_RXERR_IRQ_PRIO,             \
144             .int_src    = INT_SRC_USART2_EI,                    \
145         },                                                      \
146         .rx_irq.irq_config =                                    \
147         {                                                       \
148             .irq_num    = BSP_UART2_RX_IRQ_NUM,                 \
149             .irq_prio   = BSP_UART2_RX_IRQ_PRIO,                \
150             .int_src    = INT_SRC_USART2_RI,                    \
151         },                                                      \
152         .tx_irq.irq_config =                                    \
153         {                                                       \
154             .irq_num    = BSP_UART2_TX_IRQ_NUM,                 \
155             .irq_prio   = BSP_UART2_TX_IRQ_PRIO,                \
156             .int_src    = INT_SRC_USART2_TI,                    \
157         },                                                      \
158     }
159 #endif /* UART2_CONFIG */
160 
161 #if defined(BSP_UART2_RX_USING_DMA)
162 #ifndef UART2_DMA_RX_CONFIG
163 #define UART2_DMA_RX_CONFIG                                     \
164     {                                                           \
165         .Instance       = UART2_RX_DMA_INSTANCE,                \
166         .channel        = UART2_RX_DMA_CHANNEL,                 \
167         .clock          = UART2_RX_DMA_CLOCK,                   \
168         .trigger_select = UART2_RX_DMA_TRIG_SELECT,             \
169         .trigger_event  = EVT_SRC_USART2_RI,                    \
170         .flag           = UART2_RX_DMA_TRANS_FLAG,              \
171         .irq_config     =                                       \
172         {                                                       \
173             .irq_num    = UART2_RX_DMA_IRQn,                    \
174             .irq_prio   = UART2_RX_DMA_INT_PRIO,                \
175             .int_src    = UART2_RX_DMA_INT_SRC,                 \
176         },                                                      \
177     }
178 #endif /* UART2_DMA_RX_CONFIG */
179 
180 #ifndef UART2_RXTO_CONFIG
181 #define UART2_RXTO_CONFIG                                       \
182     {                                                           \
183         .TMR0_Instance = CM_TMR0_1,                             \
184         .channel       = TMR0_CH_B,                             \
185         .clock         = FCG2_PERIPH_TMR0_1,                    \
186         .timeout_bits  = 20UL,                                  \
187         .irq_config    =                                        \
188         {                                                       \
189             .irq_num   = BSP_UART2_RXTO_IRQ_NUM,                \
190             .irq_prio  = BSP_UART2_RXTO_IRQ_PRIO,               \
191             .int_src   = INT_SRC_USART2_RTO,                    \
192         },                                                      \
193     }
194 #endif /* UART2_RXTO_CONFIG */
195 #endif /* BSP_UART2_RX_USING_DMA */
196 
197 #if defined(RT_USING_SERIAL_V1) && defined(BSP_UART2_TX_USING_DMA)
198 #ifndef UART2_TX_CPLT_CONFIG
199 #define UART2_TX_CPLT_CONFIG                                    \
200     {                                                           \
201         .irq_config     =                                       \
202         {                                                       \
203             .irq_num    = BSP_UART2_TX_CPLT_IRQ_NUM,            \
204             .irq_prio   = BSP_UART2_TX_CPLT_IRQ_PRIO,           \
205             .int_src    = INT_SRC_USART2_TCI,                   \
206         },                                                      \
207     }
208 #endif
209 #elif defined(RT_USING_SERIAL_V2)
210 #ifndef UART2_TX_CPLT_CONFIG
211 #define UART2_TX_CPLT_CONFIG                                    \
212     {                                                           \
213         .irq_config     =                                       \
214         {                                                       \
215             .irq_num    = BSP_UART2_TX_CPLT_IRQ_NUM,            \
216             .irq_prio   = BSP_UART2_TX_CPLT_IRQ_PRIO,           \
217             .int_src    = INT_SRC_USART2_TCI,                   \
218         },                                                      \
219     }
220 #endif
221 #endif /* UART2_TX_CPLT_CONFIG */
222 
223 #if defined(BSP_UART2_TX_USING_DMA)
224 #ifndef UART2_DMA_TX_CONFIG
225 #define UART2_DMA_TX_CONFIG                                     \
226     {                                                           \
227         .Instance       = UART2_TX_DMA_INSTANCE,                \
228         .channel        = UART2_TX_DMA_CHANNEL,                 \
229         .clock          = UART2_TX_DMA_CLOCK,                   \
230         .trigger_select = UART2_TX_DMA_TRIG_SELECT,             \
231         .trigger_event  = EVT_SRC_USART2_TI,                    \
232         .flag           = UART2_TX_DMA_TRANS_FLAG,              \
233         .irq_config     =                                       \
234         {                                                       \
235             .irq_num     = UART2_TX_DMA_IRQn,                   \
236             .irq_prio   = UART2_TX_DMA_INT_PRIO,                \
237             .int_src    = UART2_TX_DMA_INT_SRC,                 \
238         },                                                      \
239     }
240 #endif /* UART2_DMA_TX_CONFIG */
241 #endif /* BSP_UART2_TX_USING_DMA */
242 #endif /* BSP_USING_UART2 */
243 
244 #if defined(BSP_USING_UART3)
245 #ifndef UART3_CONFIG
246 #define UART3_CONFIG                                            \
247     {                                                           \
248         .name     = "uart3",                                    \
249         .Instance = CM_USART3,                                  \
250         .clock    = FCG1_PERIPH_USART3,                         \
251         .rxerr_irq.irq_config =                                 \
252         {                                                       \
253             .irq_num    = BSP_UART3_RXERR_IRQ_NUM,              \
254             .irq_prio   = BSP_UART3_RXERR_IRQ_PRIO,             \
255             .int_src    = INT_SRC_USART3_EI,                    \
256         },                                                      \
257         .rx_irq.irq_config =                                    \
258         {                                                       \
259             .irq_num    = BSP_UART3_RX_IRQ_NUM,                 \
260             .irq_prio   = BSP_UART3_RX_IRQ_PRIO,                \
261             .int_src    = INT_SRC_USART3_RI,                    \
262         },                                                      \
263         .tx_irq.irq_config =                                    \
264         {                                                       \
265             .irq_num    = BSP_UART3_TX_IRQ_NUM,                 \
266             .irq_prio   = BSP_UART3_TX_IRQ_PRIO,                \
267             .int_src    = INT_SRC_USART3_TI,                    \
268         },                                                      \
269     }
270 #endif /* UART3_CONFIG */
271 
272 #if defined(BSP_UART3_RX_USING_DMA)
273 #ifndef UART3_DMA_RX_CONFIG
274 #define UART3_DMA_RX_CONFIG                                     \
275     {                                                           \
276         .Instance       = UART3_RX_DMA_INSTANCE,                \
277         .channel        = UART3_RX_DMA_CHANNEL,                 \
278         .clock          = UART3_RX_DMA_CLOCK,                   \
279         .trigger_select = UART3_RX_DMA_TRIG_SELECT,             \
280         .trigger_event  = EVT_SRC_USART3_RI,                    \
281         .flag           = UART3_RX_DMA_TRANS_FLAG,              \
282         .irq_config     =                                       \
283         {                                                       \
284             .irq_num    = UART3_RX_DMA_IRQn,                    \
285             .irq_prio   = UART3_RX_DMA_INT_PRIO,                \
286             .int_src    = UART3_RX_DMA_INT_SRC,                 \
287         },                                                      \
288     }
289 #endif /* UART3_DMA_RX_CONFIG */
290 
291 #ifndef UART3_RXTO_CONFIG
292 #define UART3_RXTO_CONFIG                                       \
293     {                                                           \
294         .TMR0_Instance = CM_TMR0_2,                             \
295         .channel       = TMR0_CH_A,                             \
296         .clock         = FCG2_PERIPH_TMR0_2,                    \
297         .timeout_bits  = 20UL,                                  \
298         .irq_config    =                                        \
299         {                                                       \
300             .irq_num   = BSP_UART3_RXTO_IRQ_NUM,                \
301             .irq_prio  = BSP_UART3_RXTO_IRQ_PRIO,               \
302             .int_src   = INT_SRC_USART3_RTO,                    \
303         },                                                      \
304     }
305 #endif /* UART3_RXTO_CONFIG */
306 #endif /* BSP_UART3_RX_USING_DMA */
307 
308 #if defined(RT_USING_SERIAL_V1) && defined(BSP_UART3_TX_USING_DMA)
309 #ifndef UART3_TX_CPLT_CONFIG
310 #define UART3_TX_CPLT_CONFIG                                    \
311     {                                                           \
312         .irq_config     =                                       \
313         {                                                       \
314             .irq_num    = BSP_UART3_TX_CPLT_IRQ_NUM,            \
315             .irq_prio   = BSP_UART3_TX_CPLT_IRQ_PRIO,           \
316             .int_src    = INT_SRC_USART3_TCI,                   \
317         },                                                      \
318     }
319 #endif
320 #elif defined(RT_USING_SERIAL_V2)
321 #ifndef UART3_TX_CPLT_CONFIG
322 #define UART3_TX_CPLT_CONFIG                                    \
323     {                                                           \
324         .irq_config     =                                       \
325         {                                                       \
326             .irq_num    = BSP_UART3_TX_CPLT_IRQ_NUM,            \
327             .irq_prio   = BSP_UART3_TX_CPLT_IRQ_PRIO,           \
328             .int_src    = INT_SRC_USART3_TCI,                   \
329         },                                                      \
330     }
331 #endif
332 #endif /* UART3_TX_CPLT_CONFIG */
333 
334 #if defined(BSP_UART3_TX_USING_DMA)
335 #ifndef UART3_DMA_TX_CONFIG
336 #define UART3_DMA_TX_CONFIG                                     \
337     {                                                           \
338         .Instance       = UART3_TX_DMA_INSTANCE,                \
339         .channel        = UART3_TX_DMA_CHANNEL,                 \
340         .clock          = UART3_TX_DMA_CLOCK,                   \
341         .trigger_select = UART3_TX_DMA_TRIG_SELECT,             \
342         .trigger_event  = EVT_SRC_USART3_TI,                    \
343         .flag           = UART3_TX_DMA_TRANS_FLAG,              \
344         .irq_config     =                                       \
345         {                                                       \
346             .irq_num    = UART3_TX_DMA_IRQn,                    \
347             .irq_prio   = UART3_TX_DMA_INT_PRIO,                \
348             .int_src    = UART3_TX_DMA_INT_SRC,                 \
349         },                                                      \
350     }
351 #endif /* UART3_DMA_TX_CONFIG */
352 #endif /* BSP_UART3_TX_USING_DMA */
353 #endif /* BSP_USING_UART3 */
354 
355 #if defined(BSP_USING_UART4)
356 #ifndef UART4_CONFIG
357 #define UART4_CONFIG                                            \
358     {                                                           \
359         .name     = "uart4",                                    \
360         .Instance = CM_USART4,                                  \
361         .clock    = FCG1_PERIPH_USART4,                         \
362         .rxerr_irq.irq_config =                                 \
363         {                                                       \
364             .irq_num    = BSP_UART4_RXERR_IRQ_NUM,              \
365             .irq_prio   = BSP_UART4_RXERR_IRQ_PRIO,             \
366             .int_src    = INT_SRC_USART4_EI,                    \
367         },                                                      \
368         .rx_irq.irq_config =                                    \
369         {                                                       \
370             .irq_num    = BSP_UART4_RX_IRQ_NUM,                 \
371             .irq_prio   = BSP_UART4_RX_IRQ_PRIO,                \
372             .int_src    = INT_SRC_USART4_RI,                    \
373         },                                                      \
374         .tx_irq.irq_config =                                    \
375         {                                                       \
376             .irq_num    = BSP_UART4_TX_IRQ_NUM,                 \
377             .irq_prio   = BSP_UART4_TX_IRQ_PRIO,                \
378             .int_src    = INT_SRC_USART4_TI,                    \
379         },                                                      \
380     }
381 #endif /* UART4_CONFIG */
382 
383 #if defined(BSP_UART4_RX_USING_DMA)
384 #ifndef UART4_DMA_RX_CONFIG
385 #define UART4_DMA_RX_CONFIG                                     \
386     {                                                           \
387         .Instance       = UART4_RX_DMA_INSTANCE,                \
388         .channel        = UART4_RX_DMA_CHANNEL,                 \
389         .clock          = UART4_RX_DMA_CLOCK,                   \
390         .trigger_select = UART4_RX_DMA_TRIG_SELECT,             \
391         .trigger_event  = EVT_SRC_USART4_RI,                    \
392         .flag           = UART4_RX_DMA_TRANS_FLAG,              \
393         .irq_config     =                                       \
394         {                                                       \
395             .irq_num    = UART4_RX_DMA_IRQn,                    \
396             .irq_prio   = UART4_RX_DMA_INT_PRIO,                \
397             .int_src    = UART4_RX_DMA_INT_SRC,                 \
398         },                                                      \
399     }
400 #endif /* UART4_DMA_RX_CONFIG */
401 
402 #ifndef UART4_RXTO_CONFIG
403 #define UART4_RXTO_CONFIG                                       \
404     {                                                           \
405         .TMR0_Instance = CM_TMR0_2,                             \
406         .channel       = TMR0_CH_B,                             \
407         .clock         = FCG2_PERIPH_TMR0_2,                    \
408         .timeout_bits  = 20UL,                                  \
409         .irq_config    =                                        \
410         {                                                       \
411             .irq_num   = BSP_UART4_RXTO_IRQ_NUM,                \
412             .irq_prio  = BSP_UART4_RXTO_IRQ_PRIO,               \
413             .int_src   = INT_SRC_USART4_RTO,                    \
414         },                                                      \
415     }
416 #endif /* UART4_RXTO_CONFIG */
417 #endif /* BSP_UART4_RX_USING_DMA */
418 
419 #if defined(RT_USING_SERIAL_V1) && defined(BSP_UART4_TX_USING_DMA)
420 #ifndef UART4_TX_CPLT_CONFIG
421 #define UART4_TX_CPLT_CONFIG                                    \
422     {                                                           \
423         .irq_config     =                                       \
424         {                                                       \
425             .irq_num    = BSP_UART4_TX_CPLT_IRQ_NUM,            \
426             .irq_prio   = BSP_UART4_TX_CPLT_IRQ_PRIO,           \
427             .int_src    = INT_SRC_USART4_TCI,                   \
428         },                                                      \
429     }
430 #endif
431 #elif defined(RT_USING_SERIAL_V2)
432 #ifndef UART4_TX_CPLT_CONFIG
433 #define UART4_TX_CPLT_CONFIG                                    \
434     {                                                           \
435         .irq_config     =                                       \
436         {                                                       \
437             .irq_num    = BSP_UART4_TX_CPLT_IRQ_NUM,            \
438             .irq_prio   = BSP_UART4_TX_CPLT_IRQ_PRIO,           \
439             .int_src    = INT_SRC_USART4_TCI,                   \
440         },                                                      \
441     }
442 #endif
443 #endif /* UART4_TX_CPLT_CONFIG */
444 
445 #if defined(BSP_UART4_TX_USING_DMA)
446 #ifndef UART4_DMA_TX_CONFIG
447 #define UART4_DMA_TX_CONFIG                                     \
448     {                                                           \
449         .Instance       = UART4_TX_DMA_INSTANCE,                \
450         .channel        = UART4_TX_DMA_CHANNEL,                 \
451         .clock          = UART4_TX_DMA_CLOCK,                   \
452         .trigger_select = UART4_TX_DMA_TRIG_SELECT,             \
453         .trigger_event  = EVT_SRC_USART4_TI,                    \
454         .flag           = UART4_TX_DMA_TRANS_FLAG,              \
455         .irq_config     =                                       \
456         {                                                       \
457             .irq_num    = UART4_TX_DMA_IRQn,                    \
458             .irq_prio   = UART4_TX_DMA_INT_PRIO,                \
459             .int_src    = UART4_TX_DMA_INT_SRC,                 \
460         },                                                      \
461     }
462 #endif /* UART4_DMA_TX_CONFIG */
463 #endif /* BSP_UART4_TX_USING_DMA */
464 #endif /* BSP_USING_UART4 */
465 
466 #ifdef __cplusplus
467 }
468 #endif
469 
470 #endif
471