libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
ch32_uart_def.hpp
1#pragma once
2
3#include "libxr.hpp"
4#include DEF2STR(LIBXR_CH32_CONFIG_FILE)
5
9typedef enum
10{
11#if defined(USART1)
12 CH32_USART1,
13#endif
14#if defined(USART2)
15 CH32_USART2,
16#endif
17#if defined(USART3)
18 CH32_USART3,
19#endif
20#if defined(USART4)
21 CH32_USART4,
22#endif
23#if defined(USART5)
24 CH32_USART5,
25#endif
26#if defined(USART6)
27 CH32_USART6,
28#endif
29#if defined(USART7)
30 CH32_USART7,
31#endif
32#if defined(USART8)
33 CH32_USART8,
34#endif
35#if defined(UART1)
36 CH32_UART1,
37#endif
38#if defined(UART2)
39 CH32_UART2,
40#endif
41#if defined(UART3)
42 CH32_UART3,
43#endif
44#if defined(UART4)
45 CH32_UART4,
46#endif
47#if defined(UART5)
48 CH32_UART5,
49#endif
50#if defined(UART6)
51 CH32_UART6,
52#endif
53#if defined(UART7)
54 CH32_UART7,
55#endif
56#if defined(UART8)
57 CH32_UART8,
58#endif
59 CH32_UART_NUMBER,
60 CH32_UART_ID_ERROR
61} ch32_uart_id_t;
62
63static constexpr uint8_t CH32_UART_APB_MAP[] = {
64#if defined(USART1)
65 2,
66#endif
67#if defined(USART2)
68 1,
69#endif
70#if defined(USART3)
71 1,
72#endif
73#if defined(USART4)
74 0,
75#endif
76#if defined(USART5)
77 0,
78#endif
79#if defined(USART6)
80 0,
81#endif
82#if defined(USART7)
83 0,
84#endif
85#if defined(USART8)
86 0,
87#endif
88#if defined(UART1)
89 0,
90#endif
91#if defined(UART2)
92 0,
93#endif
94#if defined(UART3)
95 0,
96#endif
97#if defined(UART4)
98 1,
99#endif
100#if defined(UART5)
101 1,
102#endif
103#if defined(UART6)
104 1,
105#endif
106#if defined(UART7)
107 1,
108#endif
109#if defined(UART8)
110 1,
111#endif
112};
113
114static constexpr uint32_t CH32_UART_RCC_PERIPH_MAP[] = {
115#if defined(USART1)
116 RCC_APB2Periph_USART1,
117#endif
118#if defined(USART2)
119 RCC_APB1Periph_USART2,
120#endif
121#if defined(USART3)
122 RCC_APB1Periph_USART3,
123#endif
124#if defined(USART4)
125 0,
126#endif
127#if defined(USART5)
128 0,
129#endif
130#if defined(USART6)
131 0,
132#endif
133#if defined(USART7)
134 0,
135#endif
136#if defined(USART8)
137 0,
138#endif
139#if defined(UART1)
140 0,
141#endif
142#if defined(UART2)
143 0,
144#endif
145#if defined(UART3)
146 0,
147#endif
148#if defined(UART4)
149 RCC_APB1Periph_UART4,
150#endif
151#if defined(UART5)
152 RCC_APB1Periph_UART5,
153#endif
154#if defined(UART6)
155 RCC_APB1Periph_UART6,
156#endif
157#if defined(UART7)
158 RCC_APB1Periph_UART7,
159#endif
160#if defined(UART8)
161 RCC_APB1Periph_UART8,
162#endif
163};
164
165static constexpr uint32_t CH32_UART_RCC_PERIPH_MAP_DMA[] = {
166#if defined(USART1)
167 RCC_AHBPeriph_DMA1,
168#endif
169#if defined(USART2)
170 RCC_AHBPeriph_DMA1,
171#endif
172#if defined(USART3)
173 RCC_AHBPeriph_DMA1,
174#endif
175#if defined(USART4)
176 RCC_AHBPeriph_DMA1,
177#endif
178#if defined(USART5)
179 RCC_AHBPeriph_DMA1,
180#endif
181#if defined(USART6)
182 RCC_AHBPeriph_DMA1,
183#endif
184#if defined(USART7)
185 RCC_AHBPeriph_DMA1,
186#endif
187#if defined(USART8)
188 RCC_AHBPeriph_DMA1,
189#endif
190#if defined(UART1)
191 RCC_AHBPeriph_DMA2,
192#endif
193#if defined(UART2)
194 RCC_AHBPeriph_DMA2,
195#endif
196#if defined(UART3)
197 RCC_AHBPeriph_DMA2,
198#endif
199#if defined(UART4)
200 RCC_AHBPeriph_DMA2,
201#endif
202#if defined(UART5)
203 RCC_AHBPeriph_DMA2,
204#endif
205#if defined(UART6)
206 RCC_AHBPeriph_DMA2,
207#endif
208#if defined(UART7)
209 RCC_AHBPeriph_DMA2,
210#endif
211#if defined(UART8)
212 RCC_AHBPeriph_DMA2,
213#endif
214};
215
216static constexpr uint32_t CH32_UART_TX_DMA_IT_MAP[] = {
217#if defined(USART1)
218 DMA1_IT_TC4,
219#endif
220#if defined(USART2)
221 DMA1_IT_TC7,
222#endif
223#if defined(USART3)
224 DMA1_IT_TC2,
225#endif
226#if defined(USART4)
227 0,
228#endif
229#if defined(USART5)
230 0,
231#endif
232#if defined(USART6)
233 0,
234#endif
235#if defined(USART7)
236 0,
237#endif
238#if defined(USART8)
239 0,
240#endif
241#if defined(UART1)
242 0,
243#endif
244#if defined(UART2)
245 0,
246#endif
247#if defined(UART3)
248 0,
249#endif
250#if defined(UART4)
251#if defined(DMA2_IT_TC5)
252 DMA2_IT_TC5,
253#else
254 DMA1_IT_TC1
255#endif
256#endif
257#if defined(UART5)
258 DMA2_IT_TC4,
259#endif
260#if defined(UART6)
261 DMA2_IT_TC6,
262#endif
263#if defined(UART7)
264 DMA2_IT_TC8,
265#endif
266#if defined(UART8)
267 DMA2_IT_TC10,
268#endif
269};
270
271static constexpr uint32_t CH32_UART_RX_DMA_IT_TC_MAP[] = {
272#if defined(USART1)
273 DMA1_IT_TC5,
274#endif
275#if defined(USART2)
276 DMA1_IT_TC6,
277#endif
278#if defined(USART3)
279 DMA1_IT_TC3,
280#endif
281#if defined(USART4)
282 0,
283#endif
284#if defined(USART5)
285 0,
286#endif
287#if defined(USART6)
288 0,
289#endif
290#if defined(USART7)
291 0,
292#endif
293#if defined(USART8)
294 0,
295#endif
296#if defined(UART1)
297 0,
298#endif
299#if defined(UART2)
300 0,
301#endif
302#if defined(UART3)
303 0,
304#endif
305#if defined(UART4)
306#if defined(DMA2_IT_TC3)
307 DMA2_IT_TC3,
308#else
309 DMA1_IT_TC8
310#endif
311#endif
312#if defined(UART5)
313 DMA2_IT_TC2,
314#endif
315#if defined(UART6)
316 DMA2_IT_TC7,
317#endif
318#if defined(UART7)
319 DMA2_IT_TC9,
320#endif
321#if defined(UART8)
322 DMA2_IT_TC11,
323#endif
324};
325
326static constexpr uint32_t CH32_UART_RX_DMA_IT_HT_MAP[] = {
327#if defined(USART1)
328 DMA1_IT_HT5,
329#endif
330#if defined(USART2)
331 DMA1_IT_HT6,
332#endif
333#if defined(USART3)
334 DMA1_IT_HT3,
335#endif
336#if defined(USART4)
337 0,
338#endif
339#if defined(USART5)
340 0,
341#endif
342#if defined(USART6)
343 0,
344#endif
345#if defined(USART7)
346 0,
347#endif
348#if defined(USART8)
349 0,
350#endif
351#if defined(UART1)
352 0,
353#endif
354#if defined(UART2)
355 0,
356#endif
357#if defined(UART3)
358 0,
359#endif
360#if defined(UART4)
361#if defined(DMA2_IT_HT3)
362 DMA2_IT_HT3,
363#else
364 DMA1_IT_HT8
365#endif
366#endif
367#if defined(UART5)
368 DMA2_IT_HT2,
369#endif
370#if defined(UART6)
371 DMA2_IT_HT7,
372#endif
373#if defined(UART7)
374 DMA2_IT_HT9,
375#endif
376#if defined(UART8)
377 DMA2_IT_HT11,
378#endif
379};
380
381static DMA_Channel_TypeDef* const CH32_UART_TX_DMA_CHANNEL_MAP[] = {
382#if defined(USART1)
383 DMA1_Channel4,
384#endif
385#if defined(USART2)
386 DMA1_Channel7,
387#endif
388#if defined(USART3)
389 DMA1_Channel2,
390#endif
391#if defined(USART4)
392 nullptr,
393#endif
394#if defined(USART5)
395 nullptr,
396#endif
397#if defined(USART6)
398 nullptr,
399#endif
400#if defined(USART7)
401 nullptr,
402#endif
403#if defined(USART8)
404 nullptr,
405#endif
406#if defined(UART1)
407 NULL,
408#endif
409#if defined(UART2)
410 NULL,
411#endif
412#if defined(UART3)
413 NULL,
414#endif
415#if defined(UART4)
416#if defined(DMA2_Channel5)
417 DMA2_Channel5,
418#else
419 DMA1_Channel1
420#endif
421#endif
422#if defined(UART5)
423 DMA2_Channel4,
424#endif
425#if defined(UART6)
426 DMA2_Channel6,
427#endif
428#if defined(UART7)
429 DMA2_Channel8,
430#endif
431#if defined(UART8)
432 DMA2_Channel10,
433#endif
434};
435
436static DMA_Channel_TypeDef* const CH32_UART_RX_DMA_CHANNEL_MAP[] = {
437#if defined(USART1)
438 DMA1_Channel5,
439#endif
440#if defined(USART2)
441 DMA1_Channel6,
442#endif
443#if defined(USART3)
444 DMA1_Channel3,
445#endif
446#if defined(USART4)
447 nullptr,
448#endif
449#if defined(USART5)
450 nullptr,
451#endif
452#if defined(USART6)
453 nullptr,
454#endif
455#if defined(USART7)
456 nullptr,
457#endif
458#if defined(USART8)
459 nullptr,
460#endif
461#if defined(UART1)
462 NULL,
463#endif
464#if defined(UART2)
465 NULL,
466#endif
467#if defined(UART3)
468 NULL,
469#endif
470#if defined(UART4)
471#if defined(DMA2_Channel3)
472 DMA2_Channel3,
473#else
474 DMA1_Channel8
475#endif
476#endif
477#if defined(UART5)
478 DMA2_Channel2,
479#endif
480#if defined(UART6)
481 DMA2_Channel7,
482#endif
483#if defined(UART7)
484 DMA2_Channel9,
485#endif
486#if defined(UART8)
487 DMA2_Channel11,
488#endif
489};
490
491static constexpr IRQn_Type CH32_UART_IRQ_MAP[] = {
492#if defined(USART1)
493 USART1_IRQn,
494#endif
495#if defined(USART2)
496 USART2_IRQn,
497#endif
498#if defined(USART3)
499 USART3_IRQn,
500#endif
501#if defined(USART4)
502 USART4_IRQn,
503#endif
504#if defined(USART5)
505 USART5_IRQn,
506#endif
507#if defined(USART6)
508 USART6_IRQn,
509#endif
510#if defined(USART7)
511 USART7_IRQn,
512#endif
513#if defined(USART8)
514 USART8_IRQn,
515#endif
516#if defined(UART1)
517 UART1_IRQn,
518#endif
519#if defined(UART2)
520 UART2_IRQn,
521#endif
522#if defined(UART3)
523 UART3_IRQn,
524#endif
525#if defined(UART4)
526 UART4_IRQn,
527#endif
528#if defined(UART5)
529 UART5_IRQn,
530#endif
531#if defined(UART6)
532 UART6_IRQn,
533#endif
534#if defined(UART7)
535 UART7_IRQn,
536#endif
537#if defined(UART8)
538 UART8_IRQn,
539#endif
540};
541
542ch32_uart_id_t ch32_uart_get_id(USART_TypeDef* addr);
543USART_TypeDef* ch32_uart_get_instance_id(ch32_uart_id_t);