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