6 ch32_dma_callback_t fun;
8} ch32_dma_callback_map[CH32_DMA_CHANNEL_NUMBER] = {};
10void ch32_dma_register_callback(ch32_dma_channel_t
id, ch32_dma_callback_t callback,
13 ASSERT(
id < CH32_DMA_CHANNEL_NUMBER);
14 ch32_dma_callback_map[id] = {callback, arg};
17ch32_dma_channel_t ch32_dma_get_id(DMA_Channel_TypeDef* channel)
19#if defined(DMA1_Channel1)
20 if (channel == DMA1_Channel1)
22 return CH32_DMA1_CHANNEL1;
26#if defined(DMA1_Channel2)
27 if (channel == DMA1_Channel2)
29 return CH32_DMA1_CHANNEL2;
33#if defined(DMA1_Channel3)
34 if (channel == DMA1_Channel3)
36 return CH32_DMA1_CHANNEL3;
40#if defined(DMA1_Channel4)
41 if (channel == DMA1_Channel4)
43 return CH32_DMA1_CHANNEL4;
47#if defined(DMA1_Channel5)
48 if (channel == DMA1_Channel5)
50 return CH32_DMA1_CHANNEL5;
54#if defined(DMA1_Channel6)
55 if (channel == DMA1_Channel6)
57 return CH32_DMA1_CHANNEL6;
61#if defined(DMA1_Channel7)
62 if (channel == DMA1_Channel7)
64 return CH32_DMA1_CHANNEL7;
68#if defined(DMA1_Channel8)
69 if (channel == DMA1_Channel8)
71 return CH32_DMA1_CHANNEL8;
75#if defined(DMA2_Channel1)
76 if (channel == DMA2_Channel1)
78 return CH32_DMA2_CHANNEL1;
82#if defined(DMA2_Channel2)
83 if (channel == DMA2_Channel2)
85 return CH32_DMA2_CHANNEL2;
89#if defined(DMA2_Channel3)
90 if (channel == DMA2_Channel3)
92 return CH32_DMA2_CHANNEL3;
96#if defined(DMA2_Channel4)
97 if (channel == DMA2_Channel4)
99 return CH32_DMA2_CHANNEL4;
103#if defined(DMA2_Channel5)
104 if (channel == DMA2_Channel5)
106 return CH32_DMA2_CHANNEL5;
110#if defined(DMA2_Channel6)
111 if (channel == DMA2_Channel6)
113 return CH32_DMA2_CHANNEL6;
117#if defined(DMA2_Channel7)
118 if (channel == DMA2_Channel7)
120 return CH32_DMA2_CHANNEL7;
124#if defined(DMA2_Channel8)
125 if (channel == DMA2_Channel8)
127 return CH32_DMA2_CHANNEL8;
131#if defined(DMA2_Channel9)
132 if (channel == DMA2_Channel9)
134 return CH32_DMA2_CHANNEL9;
138#if defined(DMA2_Channel10)
139 if (channel == DMA2_Channel10)
141 return CH32_DMA2_CHANNEL10;
145#if defined(DMA2_Channel11)
146 if (channel == DMA2_Channel11)
148 return CH32_DMA2_CHANNEL11;
152 return CH32_DMA_CHANNEL_NONE;
155DMA_Channel_TypeDef* ch32_dma_get_channel(ch32_dma_channel_t
id)
157#if defined(DMA1_Channel1)
158 if (
id == CH32_DMA1_CHANNEL1)
160 return DMA1_Channel1;
164#if defined(DMA1_Channel2)
165 if (
id == CH32_DMA1_CHANNEL2)
167 return DMA1_Channel2;
171#if defined(DMA1_Channel3)
172 if (
id == CH32_DMA1_CHANNEL3)
174 return DMA1_Channel3;
178#if defined(DMA1_Channel4)
179 if (
id == CH32_DMA1_CHANNEL4)
181 return DMA1_Channel4;
185#if defined(DMA1_Channel5)
186 if (
id == CH32_DMA1_CHANNEL5)
188 return DMA1_Channel5;
192#if defined(DMA1_Channel6)
193 if (
id == CH32_DMA1_CHANNEL6)
195 return DMA1_Channel6;
199#if defined(DMA1_Channel7)
200 if (
id == CH32_DMA1_CHANNEL7)
202 return DMA1_Channel7;
206#if defined(DMA1_Channel8)
207 if (
id == CH32_DMA1_CHANNEL8)
209 return DMA1_Channel8;
213#if defined(DMA2_Channel1)
214 if (
id == CH32_DMA2_CHANNEL1)
216 return DMA2_Channel1;
220#if defined(DMA2_Channel2)
221 if (
id == CH32_DMA2_CHANNEL2)
223 return DMA2_Channel2;
227#if defined(DMA2_Channel3)
228 if (
id == CH32_DMA2_CHANNEL3)
230 return DMA2_Channel3;
234#if defined(DMA2_Channel4)
235 if (
id == CH32_DMA2_CHANNEL4)
237 return DMA2_Channel4;
241#if defined(DMA2_Channel5)
242 if (
id == CH32_DMA2_CHANNEL5)
244 return DMA2_Channel5;
248#if defined(DMA2_Channel6)
249 if (
id == CH32_DMA2_CHANNEL6)
251 return DMA2_Channel6;
255#if defined(DMA2_Channel7)
256 if (
id == CH32_DMA2_CHANNEL7)
258 return DMA2_Channel7;
262#if defined(DMA2_Channel8)
263 if (
id == CH32_DMA2_CHANNEL8)
265 return DMA2_Channel8;
269#if defined(DMA2_Channel9)
270 if (
id == CH32_DMA2_CHANNEL9)
272 return DMA2_Channel9;
276#if defined(DMA2_Channel10)
277 if (
id == CH32_DMA2_CHANNEL10)
279 return DMA2_Channel10;
283#if defined(DMA2_Channel11)
284 if (
id == CH32_DMA2_CHANNEL11)
286 return DMA2_Channel11;
293#if defined(DMA1_Channel1)
295extern "C" void DMA1_Channel1_IRQHandler(
void)
296 __attribute__((interrupt(
"WCH-Interrupt-fast")));
298extern "C" void DMA1_Channel1_IRQHandler(
void)
300 if (ch32_dma_callback_map[CH32_DMA1_CHANNEL1].fun !=
nullptr)
302 ch32_dma_callback_map[CH32_DMA1_CHANNEL1].fun(
303 ch32_dma_callback_map[CH32_DMA1_CHANNEL1].arg);
308#if defined(DMA1_Channel2)
310extern "C" void DMA1_Channel2_IRQHandler(
void)
311 __attribute__((interrupt(
"WCH-Interrupt-fast")));
313extern "C" void DMA1_Channel2_IRQHandler(
void)
315 if (ch32_dma_callback_map[CH32_DMA1_CHANNEL2].fun !=
nullptr)
317 ch32_dma_callback_map[CH32_DMA1_CHANNEL2].fun(
318 ch32_dma_callback_map[CH32_DMA1_CHANNEL2].arg);
323#if defined(DMA1_Channel3)
325extern "C" void DMA1_Channel3_IRQHandler(
void)
326 __attribute__((interrupt(
"WCH-Interrupt-fast")));
328extern "C" void DMA1_Channel3_IRQHandler(
void)
330 if (ch32_dma_callback_map[CH32_DMA1_CHANNEL3].fun !=
nullptr)
332 ch32_dma_callback_map[CH32_DMA1_CHANNEL3].fun(
333 ch32_dma_callback_map[CH32_DMA1_CHANNEL3].arg);
338#if defined(DMA1_Channel4)
340extern "C" void DMA1_Channel4_IRQHandler(
void)
341 __attribute__((interrupt(
"WCH-Interrupt-fast")));
343extern "C" void DMA1_Channel4_IRQHandler(
void)
345 if (ch32_dma_callback_map[CH32_DMA1_CHANNEL4].fun !=
nullptr)
347 ch32_dma_callback_map[CH32_DMA1_CHANNEL4].fun(
348 ch32_dma_callback_map[CH32_DMA1_CHANNEL4].arg);
353#if defined(DMA1_Channel5)
355extern "C" void DMA1_Channel5_IRQHandler(
void)
356 __attribute__((interrupt(
"WCH-Interrupt-fast")));
358extern "C" void DMA1_Channel5_IRQHandler(
void)
360 if (ch32_dma_callback_map[CH32_DMA1_CHANNEL5].fun !=
nullptr)
362 ch32_dma_callback_map[CH32_DMA1_CHANNEL5].fun(
363 ch32_dma_callback_map[CH32_DMA1_CHANNEL5].arg);
368#if defined(DMA1_Channel6)
370extern "C" void DMA1_Channel6_IRQHandler(
void)
371 __attribute__((interrupt(
"WCH-Interrupt-fast")));
373extern "C" void DMA1_Channel6_IRQHandler(
void)
375 if (ch32_dma_callback_map[CH32_DMA1_CHANNEL6].fun !=
nullptr)
377 ch32_dma_callback_map[CH32_DMA1_CHANNEL6].fun(
378 ch32_dma_callback_map[CH32_DMA1_CHANNEL6].arg);
383#if defined(DMA1_Channel7)
385extern "C" void DMA1_Channel7_IRQHandler(
void)
386 __attribute__((interrupt(
"WCH-Interrupt-fast")));
388extern "C" void DMA1_Channel7_IRQHandler(
void)
390 if (ch32_dma_callback_map[CH32_DMA1_CHANNEL7].fun !=
nullptr)
392 ch32_dma_callback_map[CH32_DMA1_CHANNEL7].fun(
393 ch32_dma_callback_map[CH32_DMA1_CHANNEL7].arg);
398#if defined(DMA1_Channel8)
400extern "C" void DMA1_Channel8_IRQHandler(
void)
401 __attribute__((interrupt(
"WCH-Interrupt-fast")));
403extern "C" void DMA1_Channel8_IRQHandler(
void)
405 if (ch32_dma_callback_map[CH32_DMA1_CHANNEL8].fun !=
nullptr)
407 ch32_dma_callback_map[CH32_DMA1_CHANNEL8].fun(
408 ch32_dma_callback_map[CH32_DMA1_CHANNEL8].arg);
413#if defined(DMA2_Channel1)
415extern "C" void DMA2_Channel1_IRQHandler(
void)
416 __attribute__((interrupt(
"WCH-Interrupt-fast")));
418extern "C" void DMA2_Channel1_IRQHandler(
void)
420 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL1].fun !=
nullptr)
422 ch32_dma_callback_map[CH32_DMA2_CHANNEL1].fun(
423 ch32_dma_callback_map[CH32_DMA2_CHANNEL1].arg);
428#if defined(DMA2_Channel2)
430extern "C" void DMA2_Channel2_IRQHandler(
void)
431 __attribute__((interrupt(
"WCH-Interrupt-fast")));
433extern "C" void DMA2_Channel2_IRQHandler(
void)
435 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL2].fun !=
nullptr)
437 ch32_dma_callback_map[CH32_DMA2_CHANNEL2].fun(
438 ch32_dma_callback_map[CH32_DMA2_CHANNEL2].arg);
443#if defined(DMA2_Channel3)
445extern "C" void DMA2_Channel3_IRQHandler(
void)
446 __attribute__((interrupt(
"WCH-Interrupt-fast")));
448extern "C" void DMA2_Channel3_IRQHandler(
void)
450 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL3].fun !=
nullptr)
452 ch32_dma_callback_map[CH32_DMA2_CHANNEL3].fun(
453 ch32_dma_callback_map[CH32_DMA2_CHANNEL3].arg);
458#if defined(DMA2_Channel4)
460extern "C" void DMA2_Channel4_IRQHandler(
void)
461 __attribute__((interrupt(
"WCH-Interrupt-fast")));
463extern "C" void DMA2_Channel4_IRQHandler(
void)
465 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL4].fun !=
nullptr)
467 ch32_dma_callback_map[CH32_DMA2_CHANNEL4].fun(
468 ch32_dma_callback_map[CH32_DMA2_CHANNEL4].arg);
473#if defined(DMA2_Channel5)
475extern "C" void DMA2_Channel5_IRQHandler(
void)
476 __attribute__((interrupt(
"WCH-Interrupt-fast")));
478extern "C" void DMA2_Channel5_IRQHandler(
void)
480 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL5].fun !=
nullptr)
482 ch32_dma_callback_map[CH32_DMA2_CHANNEL5].fun(
483 ch32_dma_callback_map[CH32_DMA2_CHANNEL5].arg);
488#if defined(DMA2_Channel6)
490extern "C" void DMA2_Channel6_IRQHandler(
void)
491 __attribute__((interrupt(
"WCH-Interrupt-fast")));
493extern "C" void DMA2_Channel6_IRQHandler(
void)
495 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL6].fun !=
nullptr)
497 ch32_dma_callback_map[CH32_DMA2_CHANNEL6].fun(
498 ch32_dma_callback_map[CH32_DMA2_CHANNEL6].arg);
503#if defined(DMA2_Channel7)
505extern "C" void DMA2_Channel7_IRQHandler(
void)
506 __attribute__((interrupt(
"WCH-Interrupt-fast")));
508extern "C" void DMA2_Channel7_IRQHandler(
void)
510 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL7].fun !=
nullptr)
512 ch32_dma_callback_map[CH32_DMA2_CHANNEL7].fun(
513 ch32_dma_callback_map[CH32_DMA2_CHANNEL7].arg);
518#if defined(DMA2_Channel8)
520extern "C" void DMA2_Channel8_IRQHandler(
void)
521 __attribute__((interrupt(
"WCH-Interrupt-fast")));
523extern "C" void DMA2_Channel8_IRQHandler(
void)
525 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL8].fun !=
nullptr)
527 ch32_dma_callback_map[CH32_DMA2_CHANNEL8].fun(
528 ch32_dma_callback_map[CH32_DMA2_CHANNEL8].arg);
533#if defined(DMA2_Channel9)
535extern "C" void DMA2_Channel9_IRQHandler(
void)
536 __attribute__((interrupt(
"WCH-Interrupt-fast")));
538extern "C" void DMA2_Channel9_IRQHandler(
void)
540 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL9].fun !=
nullptr)
542 ch32_dma_callback_map[CH32_DMA2_CHANNEL9].fun(
543 ch32_dma_callback_map[CH32_DMA2_CHANNEL9].arg);
548#if defined(DMA2_Channel10)
550extern "C" void DMA2_Channel10_IRQHandler(
void)
551 __attribute__((interrupt(
"WCH-Interrupt-fast")));
553extern "C" void DMA2_Channel10_IRQHandler(
void)
555 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL10].fun !=
nullptr)
557 ch32_dma_callback_map[CH32_DMA2_CHANNEL10].fun(
558 ch32_dma_callback_map[CH32_DMA2_CHANNEL10].arg);
563#if defined(DMA2_Channel11)
565extern "C" void DMA2_Channel11_IRQHandler(
void)
566 __attribute__((interrupt(
"WCH-Interrupt-fast")));
568extern "C" void DMA2_Channel11_IRQHandler(
void)
570 if (ch32_dma_callback_map[CH32_DMA2_CHANNEL11].fun !=
nullptr)
572 ch32_dma_callback_map[CH32_DMA2_CHANNEL11].fun(
573 ch32_dma_callback_map[CH32_DMA2_CHANNEL11].arg);