libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
ch32_dma.cpp
1// NOLINTBEGIN(cppcoreguidelines-pro-type-cstyle-cast,performance-no-int-to-ptr)
2#include "ch32_dma.hpp"
3
4static struct
5{
6 ch32_dma_callback_t fun;
7 void* arg;
8} ch32_dma_callback_map[CH32_DMA_CHANNEL_NUMBER] = {};
9
10void ch32_dma_register_callback(ch32_dma_channel_t id, ch32_dma_callback_t callback,
11 void* arg)
12{
13 ASSERT(id < CH32_DMA_CHANNEL_NUMBER);
14 ch32_dma_callback_map[id] = {callback, arg};
15}
16
17ch32_dma_channel_t ch32_dma_get_id(DMA_Channel_TypeDef* channel)
18{
19#if defined(DMA1_Channel1)
20 if (channel == DMA1_Channel1)
21 {
22 return CH32_DMA1_CHANNEL1;
23 }
24#endif
25
26#if defined(DMA1_Channel2)
27 if (channel == DMA1_Channel2)
28 {
29 return CH32_DMA1_CHANNEL2;
30 }
31#endif
32
33#if defined(DMA1_Channel3)
34 if (channel == DMA1_Channel3)
35 {
36 return CH32_DMA1_CHANNEL3;
37 }
38#endif
39
40#if defined(DMA1_Channel4)
41 if (channel == DMA1_Channel4)
42 {
43 return CH32_DMA1_CHANNEL4;
44 }
45#endif
46
47#if defined(DMA1_Channel5)
48 if (channel == DMA1_Channel5)
49 {
50 return CH32_DMA1_CHANNEL5;
51 }
52#endif
53
54#if defined(DMA1_Channel6)
55 if (channel == DMA1_Channel6)
56 {
57 return CH32_DMA1_CHANNEL6;
58 }
59#endif
60
61#if defined(DMA1_Channel7)
62 if (channel == DMA1_Channel7)
63 {
64 return CH32_DMA1_CHANNEL7;
65 }
66#endif
67
68#if defined(DMA1_Channel8)
69 if (channel == DMA1_Channel8)
70 {
71 return CH32_DMA1_CHANNEL8;
72 }
73#endif
74
75#if defined(DMA2_Channel1)
76 if (channel == DMA2_Channel1)
77 {
78 return CH32_DMA2_CHANNEL1;
79 }
80#endif
81
82#if defined(DMA2_Channel2)
83 if (channel == DMA2_Channel2)
84 {
85 return CH32_DMA2_CHANNEL2;
86 }
87#endif
88
89#if defined(DMA2_Channel3)
90 if (channel == DMA2_Channel3)
91 {
92 return CH32_DMA2_CHANNEL3;
93 }
94#endif
95
96#if defined(DMA2_Channel4)
97 if (channel == DMA2_Channel4)
98 {
99 return CH32_DMA2_CHANNEL4;
100 }
101#endif
102
103#if defined(DMA2_Channel5)
104 if (channel == DMA2_Channel5)
105 {
106 return CH32_DMA2_CHANNEL5;
107 }
108#endif
109
110#if defined(DMA2_Channel6)
111 if (channel == DMA2_Channel6)
112 {
113 return CH32_DMA2_CHANNEL6;
114 }
115#endif
116
117#if defined(DMA2_Channel7)
118 if (channel == DMA2_Channel7)
119 {
120 return CH32_DMA2_CHANNEL7;
121 }
122#endif
123
124#if defined(DMA2_Channel8)
125 if (channel == DMA2_Channel8)
126 {
127 return CH32_DMA2_CHANNEL8;
128 }
129#endif
130
131#if defined(DMA2_Channel9)
132 if (channel == DMA2_Channel9)
133 {
134 return CH32_DMA2_CHANNEL9;
135 }
136#endif
137
138#if defined(DMA2_Channel10)
139 if (channel == DMA2_Channel10)
140 {
141 return CH32_DMA2_CHANNEL10;
142 }
143#endif
144
145#if defined(DMA2_Channel11)
146 if (channel == DMA2_Channel11)
147 {
148 return CH32_DMA2_CHANNEL11;
149 }
150#endif
151
152 return CH32_DMA_CHANNEL_NONE;
153}
154
155DMA_Channel_TypeDef* ch32_dma_get_channel(ch32_dma_channel_t id)
156{
157#if defined(DMA1_Channel1)
158 if (id == CH32_DMA1_CHANNEL1)
159 {
160 return DMA1_Channel1;
161 }
162#endif
163
164#if defined(DMA1_Channel2)
165 if (id == CH32_DMA1_CHANNEL2)
166 {
167 return DMA1_Channel2;
168 }
169#endif
170
171#if defined(DMA1_Channel3)
172 if (id == CH32_DMA1_CHANNEL3)
173 {
174 return DMA1_Channel3;
175 }
176#endif
177
178#if defined(DMA1_Channel4)
179 if (id == CH32_DMA1_CHANNEL4)
180 {
181 return DMA1_Channel4;
182 }
183#endif
184
185#if defined(DMA1_Channel5)
186 if (id == CH32_DMA1_CHANNEL5)
187 {
188 return DMA1_Channel5;
189 }
190#endif
191
192#if defined(DMA1_Channel6)
193 if (id == CH32_DMA1_CHANNEL6)
194 {
195 return DMA1_Channel6;
196 }
197#endif
198
199#if defined(DMA1_Channel7)
200 if (id == CH32_DMA1_CHANNEL7)
201 {
202 return DMA1_Channel7;
203 }
204#endif
205
206#if defined(DMA1_Channel8)
207 if (id == CH32_DMA1_CHANNEL8)
208 {
209 return DMA1_Channel8;
210 }
211#endif
212
213#if defined(DMA2_Channel1)
214 if (id == CH32_DMA2_CHANNEL1)
215 {
216 return DMA2_Channel1;
217 }
218#endif
219
220#if defined(DMA2_Channel2)
221 if (id == CH32_DMA2_CHANNEL2)
222 {
223 return DMA2_Channel2;
224 }
225#endif
226
227#if defined(DMA2_Channel3)
228 if (id == CH32_DMA2_CHANNEL3)
229 {
230 return DMA2_Channel3;
231 }
232#endif
233
234#if defined(DMA2_Channel4)
235 if (id == CH32_DMA2_CHANNEL4)
236 {
237 return DMA2_Channel4;
238 }
239#endif
240
241#if defined(DMA2_Channel5)
242 if (id == CH32_DMA2_CHANNEL5)
243 {
244 return DMA2_Channel5;
245 }
246#endif
247
248#if defined(DMA2_Channel6)
249 if (id == CH32_DMA2_CHANNEL6)
250 {
251 return DMA2_Channel6;
252 }
253#endif
254
255#if defined(DMA2_Channel7)
256 if (id == CH32_DMA2_CHANNEL7)
257 {
258 return DMA2_Channel7;
259 }
260#endif
261
262#if defined(DMA2_Channel8)
263 if (id == CH32_DMA2_CHANNEL8)
264 {
265 return DMA2_Channel8;
266 }
267#endif
268
269#if defined(DMA2_Channel9)
270 if (id == CH32_DMA2_CHANNEL9)
271 {
272 return DMA2_Channel9;
273 }
274#endif
275
276#if defined(DMA2_Channel10)
277 if (id == CH32_DMA2_CHANNEL10)
278 {
279 return DMA2_Channel10;
280 }
281#endif
282
283#if defined(DMA2_Channel11)
284 if (id == CH32_DMA2_CHANNEL11)
285 {
286 return DMA2_Channel11;
287 }
288#endif
289
290 return NULL;
291}
292
293#if defined(DMA1_Channel1)
294// NOLINTNEXTLINE(readability-identifier-naming)
295extern "C" void DMA1_Channel1_IRQHandler(void) __attribute__((interrupt));
296// NOLINTNEXTLINE(readability-identifier-naming)
297extern "C" void DMA1_Channel1_IRQHandler(void)
298{
299 if (ch32_dma_callback_map[CH32_DMA1_CHANNEL1].fun != nullptr)
300 {
301 ch32_dma_callback_map[CH32_DMA1_CHANNEL1].fun(
302 ch32_dma_callback_map[CH32_DMA1_CHANNEL1].arg);
303 }
304}
305#endif
306
307#if defined(DMA1_Channel2)
308// NOLINTNEXTLINE(readability-identifier-naming)
309extern "C" void DMA1_Channel2_IRQHandler(void) __attribute__((interrupt));
310// NOLINTNEXTLINE(readability-identifier-naming)
311extern "C" void DMA1_Channel2_IRQHandler(void)
312{
313 if (ch32_dma_callback_map[CH32_DMA1_CHANNEL2].fun != nullptr)
314 {
315 ch32_dma_callback_map[CH32_DMA1_CHANNEL2].fun(
316 ch32_dma_callback_map[CH32_DMA1_CHANNEL2].arg);
317 }
318}
319#endif
320
321#if defined(DMA1_Channel3)
322// NOLINTNEXTLINE(readability-identifier-naming)
323extern "C" void DMA1_Channel3_IRQHandler(void) __attribute__((interrupt));
324// NOLINTNEXTLINE(readability-identifier-naming)
325extern "C" void DMA1_Channel3_IRQHandler(void)
326{
327 if (ch32_dma_callback_map[CH32_DMA1_CHANNEL3].fun != nullptr)
328 {
329 ch32_dma_callback_map[CH32_DMA1_CHANNEL3].fun(
330 ch32_dma_callback_map[CH32_DMA1_CHANNEL3].arg);
331 }
332}
333#endif
334
335#if defined(DMA1_Channel4)
336// NOLINTNEXTLINE(readability-identifier-naming)
337extern "C" void DMA1_Channel4_IRQHandler(void) __attribute__((interrupt));
338// NOLINTNEXTLINE(readability-identifier-naming)
339extern "C" void DMA1_Channel4_IRQHandler(void)
340{
341 if (ch32_dma_callback_map[CH32_DMA1_CHANNEL4].fun != nullptr)
342 {
343 ch32_dma_callback_map[CH32_DMA1_CHANNEL4].fun(
344 ch32_dma_callback_map[CH32_DMA1_CHANNEL4].arg);
345 }
346}
347#endif
348
349#if defined(DMA1_Channel5)
350// NOLINTNEXTLINE(readability-identifier-naming)
351extern "C" void DMA1_Channel5_IRQHandler(void) __attribute__((interrupt));
352// NOLINTNEXTLINE(readability-identifier-naming)
353extern "C" void DMA1_Channel5_IRQHandler(void)
354{
355 if (ch32_dma_callback_map[CH32_DMA1_CHANNEL5].fun != nullptr)
356 {
357 ch32_dma_callback_map[CH32_DMA1_CHANNEL5].fun(
358 ch32_dma_callback_map[CH32_DMA1_CHANNEL5].arg);
359 }
360}
361#endif
362
363#if defined(DMA1_Channel6)
364// NOLINTNEXTLINE(readability-identifier-naming)
365extern "C" void DMA1_Channel6_IRQHandler(void) __attribute__((interrupt));
366// NOLINTNEXTLINE(readability-identifier-naming)
367extern "C" void DMA1_Channel6_IRQHandler(void)
368{
369 if (ch32_dma_callback_map[CH32_DMA1_CHANNEL6].fun != nullptr)
370 {
371 ch32_dma_callback_map[CH32_DMA1_CHANNEL6].fun(
372 ch32_dma_callback_map[CH32_DMA1_CHANNEL6].arg);
373 }
374}
375#endif
376
377#if defined(DMA1_Channel7)
378// NOLINTNEXTLINE(readability-identifier-naming)
379extern "C" void DMA1_Channel7_IRQHandler(void) __attribute__((interrupt));
380// NOLINTNEXTLINE(readability-identifier-naming)
381extern "C" void DMA1_Channel7_IRQHandler(void)
382{
383 if (ch32_dma_callback_map[CH32_DMA1_CHANNEL7].fun != nullptr)
384 {
385 ch32_dma_callback_map[CH32_DMA1_CHANNEL7].fun(
386 ch32_dma_callback_map[CH32_DMA1_CHANNEL7].arg);
387 }
388}
389#endif
390
391#if defined(DMA1_Channel8)
392// NOLINTNEXTLINE(readability-identifier-naming)
393extern "C" void DMA1_Channel8_IRQHandler(void) __attribute__((interrupt));
394// NOLINTNEXTLINE(readability-identifier-naming)
395extern "C" void DMA1_Channel8_IRQHandler(void)
396{
397 if (ch32_dma_callback_map[CH32_DMA1_CHANNEL8].fun != nullptr)
398 {
399 ch32_dma_callback_map[CH32_DMA1_CHANNEL8].fun(
400 ch32_dma_callback_map[CH32_DMA1_CHANNEL8].arg);
401 }
402}
403#endif
404
405#if defined(DMA2_Channel1)
406// NOLINTNEXTLINE(readability-identifier-naming)
407extern "C" void DMA2_Channel1_IRQHandler(void) __attribute__((interrupt));
408// NOLINTNEXTLINE(readability-identifier-naming)
409extern "C" void DMA2_Channel1_IRQHandler(void)
410{
411 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL1].fun != nullptr)
412 {
413 ch32_dma_callback_map[CH32_DMA2_CHANNEL1].fun(
414 ch32_dma_callback_map[CH32_DMA2_CHANNEL1].arg);
415 }
416}
417#endif
418
419#if defined(DMA2_Channel2)
420// NOLINTNEXTLINE(readability-identifier-naming)
421extern "C" void DMA2_Channel2_IRQHandler(void) __attribute__((interrupt));
422// NOLINTNEXTLINE(readability-identifier-naming)
423extern "C" void DMA2_Channel2_IRQHandler(void)
424{
425 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL2].fun != nullptr)
426 {
427 ch32_dma_callback_map[CH32_DMA2_CHANNEL2].fun(
428 ch32_dma_callback_map[CH32_DMA2_CHANNEL2].arg);
429 }
430}
431#endif
432
433#if defined(DMA2_Channel3)
434// NOLINTNEXTLINE(readability-identifier-naming)
435extern "C" void DMA2_Channel3_IRQHandler(void) __attribute__((interrupt));
436// NOLINTNEXTLINE(readability-identifier-naming)
437extern "C" void DMA2_Channel3_IRQHandler(void)
438{
439 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL3].fun != nullptr)
440 {
441 ch32_dma_callback_map[CH32_DMA2_CHANNEL3].fun(
442 ch32_dma_callback_map[CH32_DMA2_CHANNEL3].arg);
443 }
444}
445#endif
446
447#if defined(DMA2_Channel4)
448// NOLINTNEXTLINE(readability-identifier-naming)
449extern "C" void DMA2_Channel4_IRQHandler(void) __attribute__((interrupt));
450// NOLINTNEXTLINE(readability-identifier-naming)
451extern "C" void DMA2_Channel4_IRQHandler(void)
452{
453 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL4].fun != nullptr)
454 {
455 ch32_dma_callback_map[CH32_DMA2_CHANNEL4].fun(
456 ch32_dma_callback_map[CH32_DMA2_CHANNEL4].arg);
457 }
458}
459#endif
460
461#if defined(DMA2_Channel5)
462// NOLINTNEXTLINE(readability-identifier-naming)
463extern "C" void DMA2_Channel5_IRQHandler(void) __attribute__((interrupt));
464// NOLINTNEXTLINE(readability-identifier-naming)
465extern "C" void DMA2_Channel5_IRQHandler(void)
466{
467 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL5].fun != nullptr)
468 {
469 ch32_dma_callback_map[CH32_DMA2_CHANNEL5].fun(
470 ch32_dma_callback_map[CH32_DMA2_CHANNEL5].arg);
471 }
472}
473#endif
474
475#if defined(DMA2_Channel6)
476// NOLINTNEXTLINE(readability-identifier-naming)
477extern "C" void DMA2_Channel6_IRQHandler(void) __attribute__((interrupt));
478// NOLINTNEXTLINE(readability-identifier-naming)
479extern "C" void DMA2_Channel6_IRQHandler(void)
480{
481 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL6].fun != nullptr)
482 {
483 ch32_dma_callback_map[CH32_DMA2_CHANNEL6].fun(
484 ch32_dma_callback_map[CH32_DMA2_CHANNEL6].arg);
485 }
486}
487#endif
488
489#if defined(DMA2_Channel7)
490// NOLINTNEXTLINE(readability-identifier-naming)
491extern "C" void DMA2_Channel7_IRQHandler(void) __attribute__((interrupt));
492// NOLINTNEXTLINE(readability-identifier-naming)
493extern "C" void DMA2_Channel7_IRQHandler(void)
494{
495 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL7].fun != nullptr)
496 {
497 ch32_dma_callback_map[CH32_DMA2_CHANNEL7].fun(
498 ch32_dma_callback_map[CH32_DMA2_CHANNEL7].arg);
499 }
500}
501#endif
502
503#if defined(DMA2_Channel8)
504// NOLINTNEXTLINE(readability-identifier-naming)
505extern "C" void DMA2_Channel8_IRQHandler(void) __attribute__((interrupt));
506// NOLINTNEXTLINE(readability-identifier-naming)
507extern "C" void DMA2_Channel8_IRQHandler(void)
508{
509 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL8].fun != nullptr)
510 {
511 ch32_dma_callback_map[CH32_DMA2_CHANNEL8].fun(
512 ch32_dma_callback_map[CH32_DMA2_CHANNEL8].arg);
513 }
514}
515#endif
516
517#if defined(DMA2_Channel9)
518// NOLINTNEXTLINE(readability-identifier-naming)
519extern "C" void DMA2_Channel9_IRQHandler(void) __attribute__((interrupt));
520// NOLINTNEXTLINE(readability-identifier-naming)
521extern "C" void DMA2_Channel9_IRQHandler(void)
522{
523 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL9].fun != nullptr)
524 {
525 ch32_dma_callback_map[CH32_DMA2_CHANNEL9].fun(
526 ch32_dma_callback_map[CH32_DMA2_CHANNEL9].arg);
527 }
528}
529#endif
530
531#if defined(DMA2_Channel10)
532// NOLINTNEXTLINE(readability-identifier-naming)
533extern "C" void DMA2_Channel10_IRQHandler(void) __attribute__((interrupt));
534// NOLINTNEXTLINE(readability-identifier-naming)
535extern "C" void DMA2_Channel10_IRQHandler(void)
536{
537 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL10].fun != nullptr)
538 {
539 ch32_dma_callback_map[CH32_DMA2_CHANNEL10].fun(
540 ch32_dma_callback_map[CH32_DMA2_CHANNEL10].arg);
541 }
542}
543#endif
544
545#if defined(DMA2_Channel11)
546// NOLINTNEXTLINE(readability-identifier-naming)
547extern "C" void DMA2_Channel11_IRQHandler(void) __attribute__((interrupt));
548// NOLINTNEXTLINE(readability-identifier-naming)
549extern "C" void DMA2_Channel11_IRQHandler(void)
550{
551 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL11].fun != nullptr)
552 {
553 ch32_dma_callback_map[CH32_DMA2_CHANNEL11].fun(
554 ch32_dma_callback_map[CH32_DMA2_CHANNEL11].arg);
555 }
556}
557#endif
558
559// NOLINTEND(cppcoreguidelines-pro-type-cstyle-cast,performance-no-int-to-ptr)