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