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 DMA2_IT_TC5,
249#endif
250#if defined(UART5)
251 DMA2_IT_TC4,
252#endif
253#if defined(UART6)
254 DMA2_IT_TC6,
255#endif
256#if defined(UART7)
257 DMA2_IT_TC8,
258#endif
259#if defined(UART8)
260 DMA2_IT_TC10,
261#endif
262};
263
264static constexpr DMA_Channel_TypeDef *CH32_UART_TX_DMA_CHANNEL_MAP[] = {
265#if defined(USART1)
266 DMA1_Channel4,
267#endif
268#if defined(USART2)
269 DMA1_Channel7,
270#endif
271#if defined(USART3)
272 DMA1_Channel2,
273#endif
274#if defined(USART4)
275 DMA1_Channelx,
276#endif
277#if defined(USART5)
278 DMA1_Channelx,
279#endif
280#if defined(USART6)
281 DMA1_Channelx,
282#endif
283#if defined(USART7)
284 DMA1_Channelx,
285#endif
286#if defined(USART8)
287 DMA1_Channelx,
288#endif
289#if defined(UART1)
290 NULL,
291#endif
292#if defined(UART2)
293 NULL,
294#endif
295#if defined(UART3)
296 NULL,
297#endif
298#if defined(UART4)
299 DMA2_Channel5,
300#endif
301#if defined(UART5)
302 DMA2_Channel4,
303#endif
304#if defined(UART6)
305 DMA2_Channel6,
306#endif
307#if defined(UART7)
308 DMA2_Channel8,
309#endif
310#if defined(UART8)
311 DMA2_Channel10,
312#endif
313};
314
315static constexpr DMA_Channel_TypeDef *CH32_UART_RX_DMA_CHANNEL_MAP[] = {
316#if defined(USART1)
317 DMA1_Channel5,
318#endif
319#if defined(USART2)
320 DMA1_Channel6,
321#endif
322#if defined(USART3)
323 DMA1_Channel3,
324#endif
325#if defined(USART4)
326 DMA1_Channelx,
327#endif
328#if defined(USART5)
329 DMA1_Channelx,
330#endif
331#if defined(USART6)
332 DMA1_Channelx,
333#endif
334#if defined(USART7)
335 DMA1_Channelx,
336#endif
337#if defined(USART8)
338 DMA1_Channelx,
339#endif
340#if defined(UART1)
341 NULL,
342#endif
343#if defined(UART2)
344 NULL,
345#endif
346#if defined(UART3)
347 NULL,
348#endif
349#if defined(UART4)
350 DMA2_Channel3,
351#endif
352#if defined(UART5)
353 DMA2_Channel2,
354#endif
355#if defined(UART6)
356 DMA2_Channel7,
357#endif
358#if defined(UART7)
359 DMA2_Channel9,
360#endif
361#if defined(UART8)
362 DMA2_Channel11,
363#endif
364};
365
366static constexpr IRQn_Type CH32_UART_IRQ_MAP[] = {
367#if defined(USART1)
368 USART1_IRQn,
369#endif
370#if defined(USART2)
371 USART2_IRQn,
372#endif
373#if defined(USART3)
374 USART3_IRQn,
375#endif
376#if defined(USART4)
377 USART4_IRQn,
378#endif
379#if defined(USART5)
380 USART5_IRQn,
381#endif
382#if defined(USART6)
383 USART6_IRQn,
384#endif
385#if defined(USART7)
386 USART7_IRQn,
387#endif
388#if defined(USART8)
389 USART8_IRQn,
390#endif
391#if defined(UART1)
392 UART1_IRQn,
393#endif
394#if defined(UART2)
395 UART2_IRQn,
396#endif
397#if defined(UART3)
398 UART3_IRQn,
399#endif
400#if defined(UART4)
401 UART4_IRQn,
402#endif
403#if defined(UART5)
404 UART5_IRQn,
405#endif
406#if defined(UART6)
407 UART6_IRQn,
408#endif
409#if defined(UART7)
410 UART7_IRQn,
411#endif
412#if defined(UART8)
413 UART8_IRQn,
414#endif
415};
416
417ch32_uart_id_t CH32_UART_GetID(USART_TypeDef *addr);
418USART_TypeDef *CH32_UART_GetInstanceID(ch32_uart_id_t);