libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
ch32_dma.cpp
1#include "ch32_dma.hpp"
2
3#include "ch32_uart.hpp"
4
5/* UART/USART TX DMA */
6
7extern "C" void DMA1_Channel4_IRQHandler(void) __attribute__((interrupt));
8extern "C" void DMA1_Channel7_IRQHandler(void) __attribute__((interrupt));
9extern "C" void DMA1_Channel2_IRQHandler(void) __attribute__((interrupt));
10extern "C" void DMA2_Channel5_IRQHandler(void) __attribute__((interrupt));
11extern "C" void DMA2_Channel4_IRQHandler(void) __attribute__((interrupt));
12extern "C" void DMA2_Channel6_IRQHandler(void) __attribute__((interrupt));
13extern "C" void DMA2_Channel8_IRQHandler(void) __attribute__((interrupt));
14extern "C" void DMA2_Channel10_IRQHandler(void) __attribute__((interrupt));
15
16extern "C" void DMA1_Channel4_IRQHandler(void)
17{
18 LibXR::CH32UART::TxDmaIRQHandler(DMA1_Channel4, ch32_uart_id_t::CH32_USART1);
19}
20
21extern "C" void DMA1_Channel7_IRQHandler(void)
22{
23 LibXR::CH32UART::TxDmaIRQHandler(DMA1_Channel7, ch32_uart_id_t::CH32_USART2);
24}
25
26extern "C" void DMA1_Channel2_IRQHandler(void)
27{
28 LibXR::CH32UART::TxDmaIRQHandler(DMA1_Channel2, ch32_uart_id_t::CH32_USART3);
29}
30
31extern "C" void DMA2_Channel5_IRQHandler(void)
32{
33 LibXR::CH32UART::TxDmaIRQHandler(DMA2_Channel5, ch32_uart_id_t::CH32_UART4);
34}
35
36extern "C" void DMA2_Channel4_IRQHandler(void)
37{
38 LibXR::CH32UART::TxDmaIRQHandler(DMA2_Channel4, ch32_uart_id_t::CH32_UART5);
39}
40
41extern "C" void DMA2_Channel6_IRQHandler(void)
42{
43 LibXR::CH32UART::TxDmaIRQHandler(DMA2_Channel6, ch32_uart_id_t::CH32_UART6);
44}
45
46extern "C" void DMA2_Channel8_IRQHandler(void)
47{
48 LibXR::CH32UART::TxDmaIRQHandler(DMA2_Channel8, ch32_uart_id_t::CH32_UART7);
49}
50
51extern "C" void DMA2_Channel10_IRQHandler(void)
52{
53 LibXR::CH32UART::TxDmaIRQHandler(DMA2_Channel10, ch32_uart_id_t::CH32_UART8);
54}
55
56/* UART/USART RX DMA */
57
58extern "C" void DMA1_Channel5_IRQHandler(void) __attribute__((interrupt));
59extern "C" void DMA1_Channel6_IRQHandler(void) __attribute__((interrupt));
60extern "C" void DMA1_Channel3_IRQHandler(void) __attribute__((interrupt));
61extern "C" void DMA2_Channel3_IRQHandler(void) __attribute__((interrupt));
62extern "C" void DMA2_Channel2_IRQHandler(void) __attribute__((interrupt));
63extern "C" void DMA2_Channel7_IRQHandler(void) __attribute__((interrupt));
64extern "C" void DMA2_Channel9_IRQHandler(void) __attribute__((interrupt));
65extern "C" void DMA2_Channel11_IRQHandler(void) __attribute__((interrupt));
66
67extern "C" void DMA1_Channel5_IRQHandler(void)
68{
69 LibXR::CH32UART::RxDmaIRQHandler(DMA1_Channel5, ch32_uart_id_t::CH32_USART1);
70}
71
72extern "C" void DMA1_Channel6_IRQHandler(void)
73{
74 LibXR::CH32UART::RxDmaIRQHandler(DMA1_Channel6, ch32_uart_id_t::CH32_USART2);
75}
76
77extern "C" void DMA1_Channel3_IRQHandler(void)
78{
79 LibXR::CH32UART::RxDmaIRQHandler(DMA1_Channel3, ch32_uart_id_t::CH32_USART3);
80}
81
82extern "C" void DMA2_Channel3_IRQHandler(void)
83{
84 LibXR::CH32UART::RxDmaIRQHandler(DMA2_Channel3, ch32_uart_id_t::CH32_UART4);
85}
86
87extern "C" void DMA2_Channel2_IRQHandler(void)
88{
89 LibXR::CH32UART::RxDmaIRQHandler(DMA2_Channel2, ch32_uart_id_t::CH32_UART5);
90}
91
92extern "C" void DMA2_Channel7_IRQHandler(void)
93{
94 LibXR::CH32UART::RxDmaIRQHandler(DMA2_Channel7, ch32_uart_id_t::CH32_UART6);
95}
96
97extern "C" void DMA2_Channel9_IRQHandler(void)
98{
99 LibXR::CH32UART::RxDmaIRQHandler(DMA2_Channel9, ch32_uart_id_t::CH32_UART7);
100}
101
102extern "C" void DMA2_Channel11_IRQHandler(void)
103{
104 LibXR::CH32UART::RxDmaIRQHandler(DMA2_Channel11, ch32_uart_id_t::CH32_UART8);
105}
106
107ch32_dma_channel_t CH32_DMA_GetID(DMA_Channel_TypeDef *channel)
108{
109#if defined(DMA1_Channel1)
110 if (channel == DMA1_Channel1)
111 {
112 return CH32_DMA1_CHANNEL1;
113 }
114#endif
115
116#if defined(DMA1_Channel2)
117 if (channel == DMA1_Channel2)
118 {
119 return CH32_DMA1_CHANNEL2;
120 }
121#endif
122
123#if defined(DMA1_Channel3)
124 if (channel == DMA1_Channel3)
125 {
126 return CH32_DMA1_CHANNEL3;
127 }
128#endif
129
130#if defined(DMA1_Channel4)
131 if (channel == DMA1_Channel4)
132 {
133 return CH32_DMA1_CHANNEL4;
134 }
135#endif
136
137#if defined(DMA1_Channel5)
138 if (channel == DMA1_Channel5)
139 {
140 return CH32_DMA1_CHANNEL5;
141 }
142#endif
143
144#if defined(DMA1_Channel6)
145 if (channel == DMA1_Channel6)
146 {
147 return CH32_DMA1_CHANNEL6;
148 }
149#endif
150
151#if defined(DMA1_Channel7)
152 if (channel == DMA1_Channel7)
153 {
154 return CH32_DMA1_CHANNEL7;
155 }
156#endif
157
158#if defined(DMA2_Channel1)
159 if (channel == DMA2_Channel1)
160 {
161 return CH32_DMA2_CHANNEL1;
162 }
163#endif
164
165#if defined(DMA2_Channel2)
166 if (channel == DMA2_Channel2)
167 {
168 return CH32_DMA2_CHANNEL2;
169 }
170#endif
171
172#if defined(DMA2_Channel3)
173 if (channel == DMA2_Channel3)
174 {
175 return CH32_DMA2_CHANNEL3;
176 }
177#endif
178
179#if defined(DMA2_Channel4)
180 if (channel == DMA2_Channel4)
181 {
182 return CH32_DMA2_CHANNEL4;
183 }
184#endif
185
186#if defined(DMA2_Channel5)
187 if (channel == DMA2_Channel5)
188 {
189 return CH32_DMA2_CHANNEL5;
190 }
191#endif
192
193#if defined(DMA2_Channel6)
194 if (channel == DMA2_Channel6)
195 {
196 return CH32_DMA2_CHANNEL6;
197 }
198#endif
199
200#if defined(DMA2_Channel7)
201 if (channel == DMA2_Channel7)
202 {
203 return CH32_DMA2_CHANNEL7;
204 }
205#endif
206
207#if defined(DMA2_Channel8)
208 if (channel == DMA2_Channel8)
209 {
210 return CH32_DMA2_CHANNEL8;
211 }
212#endif
213
214#if defined(DMA2_Channel9)
215 if (channel == DMA2_Channel9)
216 {
217 return CH32_DMA2_CHANNEL9;
218 }
219#endif
220
221#if defined(DMA2_Channel10)
222 if (channel == DMA2_Channel10)
223 {
224 return CH32_DMA2_CHANNEL10;
225 }
226#endif
227
228#if defined(DMA2_Channel11)
229 if (channel == DMA2_Channel11)
230 {
231 return CH32_DMA2_CHANNEL11;
232 }
233#endif
234
235 return CH32_DMA_CHANNEL_NONE;
236}
237
238DMA_Channel_TypeDef *CH32_DMA_GetChannel(ch32_dma_channel_t id)
239{
240#if defined(DMA1_Channel1)
241 if (id == CH32_DMA1_CHANNEL1)
242 {
243 return DMA1_Channel1;
244 }
245#endif
246
247#if defined(DMA1_Channel2)
248 if (id == CH32_DMA1_CHANNEL2)
249 {
250 return DMA1_Channel2;
251 }
252#endif
253
254#if defined(DMA1_Channel3)
255 if (id == CH32_DMA1_CHANNEL3)
256 {
257 return DMA1_Channel3;
258 }
259#endif
260
261#if defined(DMA1_Channel4)
262 if (id == CH32_DMA1_CHANNEL4)
263 {
264 return DMA1_Channel4;
265 }
266#endif
267
268#if defined(DMA1_Channel5)
269 if (id == CH32_DMA1_CHANNEL5)
270 {
271 return DMA1_Channel5;
272 }
273#endif
274
275#if defined(DMA1_Channel6)
276 if (id == CH32_DMA1_CHANNEL6)
277 {
278 return DMA1_Channel6;
279 }
280#endif
281
282#if defined(DMA1_Channel7)
283 if (id == CH32_DMA1_CHANNEL7)
284 {
285 return DMA1_Channel7;
286 }
287#endif
288
289#if defined(DMA2_Channel1)
290 if (id == CH32_DMA2_CHANNEL1)
291 {
292 return DMA2_Channel1;
293 }
294#endif
295
296#if defined(DMA2_Channel2)
297 if (id == CH32_DMA2_CHANNEL2)
298 {
299 return DMA2_Channel2;
300 }
301#endif
302
303#if defined(DMA2_Channel3)
304 if (id == CH32_DMA2_CHANNEL3)
305 {
306 return DMA2_Channel3;
307 }
308#endif
309
310#if defined(DMA2_Channel4)
311 if (id == CH32_DMA2_CHANNEL4)
312 {
313 return DMA2_Channel4;
314 }
315#endif
316
317#if defined(DMA2_Channel5)
318 if (id == CH32_DMA2_CHANNEL5)
319 {
320 return DMA2_Channel5;
321 }
322#endif
323
324#if defined(DMA2_Channel6)
325 if (id == CH32_DMA2_CHANNEL6)
326 {
327 return DMA2_Channel6;
328 }
329#endif
330
331#if defined(DMA2_Channel7)
332 if (id == CH32_DMA2_CHANNEL7)
333 {
334 return DMA2_Channel7;
335 }
336#endif
337
338#if defined(DMA2_Channel8)
339 if (id == CH32_DMA2_CHANNEL8)
340 {
341 return DMA2_Channel8;
342 }
343#endif
344
345#if defined(DMA2_Channel9)
346 if (id == CH32_DMA2_CHANNEL9)
347 {
348 return DMA2_Channel9;
349 }
350#endif
351
352#if defined(DMA2_Channel10)
353 if (id == CH32_DMA2_CHANNEL10)
354 {
355 return DMA2_Channel10;
356 }
357#endif
358
359#if defined(DMA2_Channel11)
360 if (id == CH32_DMA2_CHANNEL11)
361 {
362 return DMA2_Channel11;
363 }
364#endif
365
366 return NULL;
367}