1 /********************************** (C) COPYRIGHT  *******************************
2 * File Name          : ch32f20x_dma.h
3 * Author             : WCH
4 * Version            : V1.0.0
5 * Date               : 2021/08/08
6 * Description        : This file contains all the functions prototypes for the
7 *                      DMA firmware library.
8 *******************************************************************************/
9 #ifndef __CH32F20x_DMA_H
10 #define __CH32F20x_DMA_H
11 
12 #ifdef __cplusplus
13  extern "C" {
14 #endif
15 
16 #include "ch32f20x.h"
17 
18 /* DMA Init structure definition */
19 typedef struct
20 {
21   uint32_t DMA_PeripheralBaseAddr; /* Specifies the peripheral base address for DMAy Channelx. */
22 
23   uint32_t DMA_MemoryBaseAddr;     /* Specifies the memory base address for DMAy Channelx. */
24 
25   uint32_t DMA_DIR;                /* Specifies if the peripheral is the source or destination.
26                                       This parameter can be a value of @ref DMA_data_transfer_direction */
27 
28   uint32_t DMA_BufferSize;         /* Specifies the buffer size, in data unit, of the specified Channel.
29                                       The data unit is equal to the configuration set in DMA_PeripheralDataSize
30                                       or DMA_MemoryDataSize members depending in the transfer direction. */
31 
32   uint32_t DMA_PeripheralInc;      /* Specifies whether the Peripheral address register is incremented or not.
33                                       This parameter can be a value of @ref DMA_peripheral_incremented_mode */
34 
35   uint32_t DMA_MemoryInc;          /* Specifies whether the memory address register is incremented or not.
36                                       This parameter can be a value of @ref DMA_memory_incremented_mode */
37 
38   uint32_t DMA_PeripheralDataSize; /* Specifies the Peripheral data width.
39                                       This parameter can be a value of @ref DMA_peripheral_data_size */
40 
41   uint32_t DMA_MemoryDataSize;     /* Specifies the Memory data width.
42                                       This parameter can be a value of @ref DMA_memory_data_size */
43 
44   uint32_t DMA_Mode;               /* Specifies the operation mode of the DMAy Channelx.
45                                       This parameter can be a value of @ref DMA_circular_normal_mode.
46                                       @note: The circular buffer mode cannot be used if the memory-to-memory
47                                             data transfer is configured on the selected Channel */
48 
49   uint32_t DMA_Priority;           /* Specifies the software priority for the DMAy Channelx.
50                                       This parameter can be a value of @ref DMA_priority_level */
51 
52   uint32_t DMA_M2M;                /* Specifies if the DMAy Channelx will be used in memory-to-memory transfer.
53                                       This parameter can be a value of @ref DMA_memory_to_memory */
54 }DMA_InitTypeDef;
55 
56 /* DMA_data_transfer_direction */
57 #define DMA_DIR_PeripheralDST              ((uint32_t)0x00000010)
58 #define DMA_DIR_PeripheralSRC              ((uint32_t)0x00000000)
59 
60 /* DMA_peripheral_incremented_mode */
61 #define DMA_PeripheralInc_Enable           ((uint32_t)0x00000040)
62 #define DMA_PeripheralInc_Disable          ((uint32_t)0x00000000)
63 
64 /* DMA_memory_incremented_mode */
65 #define DMA_MemoryInc_Enable               ((uint32_t)0x00000080)
66 #define DMA_MemoryInc_Disable              ((uint32_t)0x00000000)
67 
68 /* DMA_peripheral_data_size */
69 #define DMA_PeripheralDataSize_Byte        ((uint32_t)0x00000000)
70 #define DMA_PeripheralDataSize_HalfWord    ((uint32_t)0x00000100)
71 #define DMA_PeripheralDataSize_Word        ((uint32_t)0x00000200)
72 
73 /* DMA_memory_data_size */
74 #define DMA_MemoryDataSize_Byte            ((uint32_t)0x00000000)
75 #define DMA_MemoryDataSize_HalfWord        ((uint32_t)0x00000400)
76 #define DMA_MemoryDataSize_Word            ((uint32_t)0x00000800)
77 
78 /* DMA_circular_normal_mode */
79 #define DMA_Mode_Circular                  ((uint32_t)0x00000020)
80 #define DMA_Mode_Normal                    ((uint32_t)0x00000000)
81 
82 /* DMA_priority_level */
83 #define DMA_Priority_VeryHigh              ((uint32_t)0x00003000)
84 #define DMA_Priority_High                  ((uint32_t)0x00002000)
85 #define DMA_Priority_Medium                ((uint32_t)0x00001000)
86 #define DMA_Priority_Low                   ((uint32_t)0x00000000)
87 
88 /* DMA_memory_to_memory */
89 #define DMA_M2M_Enable                     ((uint32_t)0x00004000)
90 #define DMA_M2M_Disable                    ((uint32_t)0x00000000)
91 
92 /* DMA_interrupts_definition */
93 #define DMA_IT_TC                          ((uint32_t)0x00000002)
94 #define DMA_IT_HT                          ((uint32_t)0x00000004)
95 #define DMA_IT_TE                          ((uint32_t)0x00000008)
96 
97 #define DMA1_IT_GL1                        ((uint32_t)0x00000001)
98 #define DMA1_IT_TC1                        ((uint32_t)0x00000002)
99 #define DMA1_IT_HT1                        ((uint32_t)0x00000004)
100 #define DMA1_IT_TE1                        ((uint32_t)0x00000008)
101 #define DMA1_IT_GL2                        ((uint32_t)0x00000010)
102 #define DMA1_IT_TC2                        ((uint32_t)0x00000020)
103 #define DMA1_IT_HT2                        ((uint32_t)0x00000040)
104 #define DMA1_IT_TE2                        ((uint32_t)0x00000080)
105 #define DMA1_IT_GL3                        ((uint32_t)0x00000100)
106 #define DMA1_IT_TC3                        ((uint32_t)0x00000200)
107 #define DMA1_IT_HT3                        ((uint32_t)0x00000400)
108 #define DMA1_IT_TE3                        ((uint32_t)0x00000800)
109 #define DMA1_IT_GL4                        ((uint32_t)0x00001000)
110 #define DMA1_IT_TC4                        ((uint32_t)0x00002000)
111 #define DMA1_IT_HT4                        ((uint32_t)0x00004000)
112 #define DMA1_IT_TE4                        ((uint32_t)0x00008000)
113 #define DMA1_IT_GL5                        ((uint32_t)0x00010000)
114 #define DMA1_IT_TC5                        ((uint32_t)0x00020000)
115 #define DMA1_IT_HT5                        ((uint32_t)0x00040000)
116 #define DMA1_IT_TE5                        ((uint32_t)0x00080000)
117 #define DMA1_IT_GL6                        ((uint32_t)0x00100000)
118 #define DMA1_IT_TC6                        ((uint32_t)0x00200000)
119 #define DMA1_IT_HT6                        ((uint32_t)0x00400000)
120 #define DMA1_IT_TE6                        ((uint32_t)0x00800000)
121 #define DMA1_IT_GL7                        ((uint32_t)0x01000000)
122 #define DMA1_IT_TC7                        ((uint32_t)0x02000000)
123 #define DMA1_IT_HT7                        ((uint32_t)0x04000000)
124 #define DMA1_IT_TE7                        ((uint32_t)0x08000000)
125 
126 #define DMA2_IT_GL1                        ((uint32_t)0x10000001)
127 #define DMA2_IT_TC1                        ((uint32_t)0x10000002)
128 #define DMA2_IT_HT1                        ((uint32_t)0x10000004)
129 #define DMA2_IT_TE1                        ((uint32_t)0x10000008)
130 #define DMA2_IT_GL2                        ((uint32_t)0x10000010)
131 #define DMA2_IT_TC2                        ((uint32_t)0x10000020)
132 #define DMA2_IT_HT2                        ((uint32_t)0x10000040)
133 #define DMA2_IT_TE2                        ((uint32_t)0x10000080)
134 #define DMA2_IT_GL3                        ((uint32_t)0x10000100)
135 #define DMA2_IT_TC3                        ((uint32_t)0x10000200)
136 #define DMA2_IT_HT3                        ((uint32_t)0x10000400)
137 #define DMA2_IT_TE3                        ((uint32_t)0x10000800)
138 #define DMA2_IT_GL4                        ((uint32_t)0x10001000)
139 #define DMA2_IT_TC4                        ((uint32_t)0x10002000)
140 #define DMA2_IT_HT4                        ((uint32_t)0x10004000)
141 #define DMA2_IT_TE4                        ((uint32_t)0x10008000)
142 #define DMA2_IT_GL5                        ((uint32_t)0x10010000)
143 #define DMA2_IT_TC5                        ((uint32_t)0x10020000)
144 #define DMA2_IT_HT5                        ((uint32_t)0x10040000)
145 #define DMA2_IT_TE5                        ((uint32_t)0x10080000)
146 #define DMA2_IT_GL6                        ((uint32_t)0x10100000)
147 #define DMA2_IT_TC6                        ((uint32_t)0x10200000)
148 #define DMA2_IT_HT6                        ((uint32_t)0x10400000)
149 #define DMA2_IT_TE6                        ((uint32_t)0x10800000)
150 #define DMA2_IT_GL7                        ((uint32_t)0x11000000)
151 #define DMA2_IT_TC7                        ((uint32_t)0x12000000)
152 #define DMA2_IT_HT7                        ((uint32_t)0x14000000)
153 #define DMA2_IT_TE7                        ((uint32_t)0x18000000)
154 
155 #define DMA2_IT_GL8                        ((uint32_t)0x20000001)
156 #define DMA2_IT_TC8                        ((uint32_t)0x20000002)
157 #define DMA2_IT_HT8                        ((uint32_t)0x20000004)
158 #define DMA2_IT_TE8                        ((uint32_t)0x20000008)
159 #define DMA2_IT_GL9                        ((uint32_t)0x20000010)
160 #define DMA2_IT_TC9                        ((uint32_t)0x20000020)
161 #define DMA2_IT_HT9                        ((uint32_t)0x20000040)
162 #define DMA2_IT_TE9                        ((uint32_t)0x20000080)
163 #define DMA2_IT_GL10                       ((uint32_t)0x20000100)
164 #define DMA2_IT_TC10                       ((uint32_t)0x20000200)
165 #define DMA2_IT_HT10                       ((uint32_t)0x20000400)
166 #define DMA2_IT_TE10                       ((uint32_t)0x20000800)
167 #define DMA2_IT_GL11                       ((uint32_t)0x20001000)
168 #define DMA2_IT_TC11                       ((uint32_t)0x20002000)
169 #define DMA2_IT_HT11                       ((uint32_t)0x20004000)
170 #define DMA2_IT_TE11                       ((uint32_t)0x20008000)
171 
172 /* DMA_flags_definition */
173 #define DMA1_FLAG_GL1                      ((uint32_t)0x00000001)
174 #define DMA1_FLAG_TC1                      ((uint32_t)0x00000002)
175 #define DMA1_FLAG_HT1                      ((uint32_t)0x00000004)
176 #define DMA1_FLAG_TE1                      ((uint32_t)0x00000008)
177 #define DMA1_FLAG_GL2                      ((uint32_t)0x00000010)
178 #define DMA1_FLAG_TC2                      ((uint32_t)0x00000020)
179 #define DMA1_FLAG_HT2                      ((uint32_t)0x00000040)
180 #define DMA1_FLAG_TE2                      ((uint32_t)0x00000080)
181 #define DMA1_FLAG_GL3                      ((uint32_t)0x00000100)
182 #define DMA1_FLAG_TC3                      ((uint32_t)0x00000200)
183 #define DMA1_FLAG_HT3                      ((uint32_t)0x00000400)
184 #define DMA1_FLAG_TE3                      ((uint32_t)0x00000800)
185 #define DMA1_FLAG_GL4                      ((uint32_t)0x00001000)
186 #define DMA1_FLAG_TC4                      ((uint32_t)0x00002000)
187 #define DMA1_FLAG_HT4                      ((uint32_t)0x00004000)
188 #define DMA1_FLAG_TE4                      ((uint32_t)0x00008000)
189 #define DMA1_FLAG_GL5                      ((uint32_t)0x00010000)
190 #define DMA1_FLAG_TC5                      ((uint32_t)0x00020000)
191 #define DMA1_FLAG_HT5                      ((uint32_t)0x00040000)
192 #define DMA1_FLAG_TE5                      ((uint32_t)0x00080000)
193 #define DMA1_FLAG_GL6                      ((uint32_t)0x00100000)
194 #define DMA1_FLAG_TC6                      ((uint32_t)0x00200000)
195 #define DMA1_FLAG_HT6                      ((uint32_t)0x00400000)
196 #define DMA1_FLAG_TE6                      ((uint32_t)0x00800000)
197 #define DMA1_FLAG_GL7                      ((uint32_t)0x01000000)
198 #define DMA1_FLAG_TC7                      ((uint32_t)0x02000000)
199 #define DMA1_FLAG_HT7                      ((uint32_t)0x04000000)
200 #define DMA1_FLAG_TE7                      ((uint32_t)0x08000000)
201 
202 #define DMA2_FLAG_GL1                      ((uint32_t)0x10000001)
203 #define DMA2_FLAG_TC1                      ((uint32_t)0x10000002)
204 #define DMA2_FLAG_HT1                      ((uint32_t)0x10000004)
205 #define DMA2_FLAG_TE1                      ((uint32_t)0x10000008)
206 #define DMA2_FLAG_GL2                      ((uint32_t)0x10000010)
207 #define DMA2_FLAG_TC2                      ((uint32_t)0x10000020)
208 #define DMA2_FLAG_HT2                      ((uint32_t)0x10000040)
209 #define DMA2_FLAG_TE2                      ((uint32_t)0x10000080)
210 #define DMA2_FLAG_GL3                      ((uint32_t)0x10000100)
211 #define DMA2_FLAG_TC3                      ((uint32_t)0x10000200)
212 #define DMA2_FLAG_HT3                      ((uint32_t)0x10000400)
213 #define DMA2_FLAG_TE3                      ((uint32_t)0x10000800)
214 #define DMA2_FLAG_GL4                      ((uint32_t)0x10001000)
215 #define DMA2_FLAG_TC4                      ((uint32_t)0x10002000)
216 #define DMA2_FLAG_HT4                      ((uint32_t)0x10004000)
217 #define DMA2_FLAG_TE4                      ((uint32_t)0x10008000)
218 #define DMA2_FLAG_GL5                      ((uint32_t)0x10010000)
219 #define DMA2_FLAG_TC5                      ((uint32_t)0x10020000)
220 #define DMA2_FLAG_HT5                      ((uint32_t)0x10040000)
221 #define DMA2_FLAG_TE5                      ((uint32_t)0x10080000)
222 #define DMA2_FLAG_GL6                      ((uint32_t)0x10100000)
223 #define DMA2_FLAG_TC6                      ((uint32_t)0x10200000)
224 #define DMA2_FLAG_HT6                      ((uint32_t)0x10400000)
225 #define DMA2_FLAG_TE6                      ((uint32_t)0x10800000)
226 #define DMA2_FLAG_GL7                      ((uint32_t)0x11000000)
227 #define DMA2_FLAG_TC7                      ((uint32_t)0x12000000)
228 #define DMA2_FLAG_HT7                      ((uint32_t)0x14000000)
229 #define DMA2_FLAG_TE7                      ((uint32_t)0x18000000)
230 
231 #define DMA2_FLAG_GL8                      ((uint32_t)0x20000001)
232 #define DMA2_FLAG_TC8                      ((uint32_t)0x20000002)
233 #define DMA2_FLAG_HT8                      ((uint32_t)0x20000004)
234 #define DMA2_FLAG_TE8                      ((uint32_t)0x20000008)
235 #define DMA2_FLAG_GL9                      ((uint32_t)0x20000010)
236 #define DMA2_FLAG_TC9                      ((uint32_t)0x20000020)
237 #define DMA2_FLAG_HT9                      ((uint32_t)0x20000040)
238 #define DMA2_FLAG_TE9                      ((uint32_t)0x20000080)
239 #define DMA2_FLAG_GL10                     ((uint32_t)0x20000100)
240 #define DMA2_FLAG_TC10                     ((uint32_t)0x20000200)
241 #define DMA2_FLAG_HT10                     ((uint32_t)0x20000400)
242 #define DMA2_FLAG_TE10                     ((uint32_t)0x20000800)
243 #define DMA2_FLAG_GL11                     ((uint32_t)0x20001000)
244 #define DMA2_FLAG_TC11                     ((uint32_t)0x20002000)
245 #define DMA2_FLAG_HT11                     ((uint32_t)0x20004000)
246 #define DMA2_FLAG_TE11                     ((uint32_t)0x20008000)
247 
248 
249 void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx);
250 void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct);
251 void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct);
252 void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState);
253 void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState);
254 void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber);
255 uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx);
256 FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG);
257 void DMA_ClearFlag(uint32_t DMAy_FLAG);
258 ITStatus DMA_GetITStatus(uint32_t DMAy_IT);
259 void DMA_ClearITPendingBit(uint32_t DMAy_IT);
260 
261 #ifdef __cplusplus
262 }
263 #endif
264 
265 #endif
266 
267