summaryrefslogtreecommitdiff
path: root/bsp/mm32f327x/Libraries/MM32F327x/HAL_Lib/Inc/hal_dma.h
blob: 892e750b54ce92a171fd1e2308526e8654e69102 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
////////////////////////////////////////////////////////////////////////////////
/// @file     hal_dma.h
/// @author   AE TEAM
/// @brief    THIS FILE CONTAINS ALL THE FUNCTIONS PROTOTYPES FOR THE DMA
///           FIRMWARE LIBRARY.
////////////////////////////////////////////////////////////////////////////////
/// @attention
///
/// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE
/// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE
/// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR
/// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH
/// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN
/// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS.
///
/// <H2><CENTER>&COPY; COPYRIGHT MINDMOTION </CENTER></H2>
////////////////////////////////////////////////////////////////////////////////

// Define to prevent recursive inclusion
#ifndef __HAL_DMA_H
#define __HAL_DMA_H
// Files includes
#include "types.h"
#include "reg_common.h"
#include "reg_dma.h"

////////////////////////////////////////////////////////////////////////////////
/// @addtogroup MM32_Hardware_Abstract_Layer
/// @{

////////////////////////////////////////////////////////////////////////////////
/// @defgroup DMA_HAL
/// @brief DMA HAL modules
/// @{

////////////////////////////////////////////////////////////////////////////////
/// @defgroup DMA_Exported_Types
/// @{

////////////////////////////////////////////////////////////////////////////////
/// @brief DMA data transfer direction Enumerate definition
/// @anchor DMA_data_transfer_direction
////////////////////////////////////////////////////////////////////////////////
typedef enum {
    DMA_DIR_PeripheralSRC = 0U,
    DMA_DIR_PeripheralDST = DMA_CCR_DIR  // 0x00000010U
} DMA_data_transfer_direction_TypeDef;

////////////////////////////////////////////////////////////////////////////////
/// @brief DMA peripheral incremented mode Enumerate definition
/// @anchor DMA_peripheral_incremented_mode
////////////////////////////////////////////////////////////////////////////////
typedef enum {
    DMA_PeripheralInc_Disable = 0U,
    DMA_PeripheralInc_Enable  = DMA_CCR_PINC  // 0x00000040U
} DMA_peripheral_incremented_mode_TypeDef;

////////////////////////////////////////////////////////////////////////////////
/// @brief DMA memory incremented mode Enumerate definition
/// @anchor DMA_memory_incremented_mode
////////////////////////////////////////////////////////////////////////////////
typedef enum {
    DMA_MemoryInc_Disable = 0U,
    DMA_MemoryInc_Enable  = DMA_CCR_MINC  // 0x00000080U
} DMA_memory_incremented_mode_TypeDef;

////////////////////////////////////////////////////////////////////////////////
/// @brief DMA peripheral data size Enumerate definition
/// @anchor DMA_peripheral_data_size
////////////////////////////////////////////////////////////////////////////////
typedef enum {
    DMA_PeripheralDataSize_Byte     = 0U,
    DMA_PeripheralDataSize_HalfWord = DMA_CCR_PSIZE_HALFWORD,
    DMA_PeripheralDataSize_Word     = DMA_CCR_PSIZE_WORD
} DMA_peripheral_data_size_TypeDef;

////////////////////////////////////////////////////////////////////////////////
/// @brief DMA memory data size Enumerate definition
/// @anchor DMA_memory_data_size
////////////////////////////////////////////////////////////////////////////////
typedef enum {
    DMA_MemoryDataSize_Byte     = 0U,
    DMA_MemoryDataSize_HalfWord = DMA_CCR_MSIZE_HALFWORD,                       // 0x00000400U
    DMA_MemoryDataSize_Word     = DMA_CCR_MSIZE_WORD                            // 0x00000800U
} DMA_memory_data_size_TypeDef;

////////////////////////////////////////////////////////////////////////////////
/// @brief DMA circular normal mode Enumerate definition
/// @anchor DMA_circular_normal_mode
////////////////////////////////////////////////////////////////////////////////
typedef enum {
    DMA_Mode_Normal   = 0U,
    DMA_Mode_Circular = DMA_CCR_CIRC                                            // 0x00000020U
} DMA_circular_normal_mode_TypeDef;

////////////////////////////////////////////////////////////////////////////////
/// @brief DMA priority level Enumerate definition
/// @anchor DMA_priority_level
////////////////////////////////////////////////////////////////////////////////
typedef enum {
    DMA_Priority_Low      = 0U,
    DMA_Priority_Medium   = DMA_CCR_PL_Medium,                                  // 0x00001000U
    DMA_Priority_High     = DMA_CCR_PL_High,                                    // 0x00002000U
    DMA_Priority_VeryHigh = DMA_CCR_PL_VeryHigh                                 // 0x00003000U
} DMA_priority_level_TypeDef;

////////////////////////////////////////////////////////////////////////////////
/// @brief DMA memory to memory Enumerate definition
/// @anchor DMA_memory_to_memory
////////////////////////////////////////////////////////////////////////////////
typedef enum {
    DMA_M2M_Disable = 0U,
    DMA_M2M_Enable  = DMA_CCR_M2M                                               // 0x00004000U
} DMA_memory_to_memory_TypeDef;

////////////////////////////////////////////////////////////////////////////////
/// @brief DMA auto reload Enumerate definition
/// @anchor DMA_auto_reload
////////////////////////////////////////////////////////////////////////////////
typedef enum {
    DMA_Auto_Reload_Disable = 0U,  //
    DMA_Auto_Reload_Enable  = DMA_CCR_ARE
} DMA_auto_reload_TypeDef;
/// @brief DMA Interrupt Setting Enumerate definition
/// @anchor DMA_auto_reload
////////////////////////////////////////////////////////////////////////////////
typedef enum {
    DMA_IT_TC                 = DMA_CCR_TCIE, //(0x00000002UL),
    DMA_IT_HT                 = DMA_CCR_HTIE, //(0x00000004UL),
    DMA_IT_TE                 = DMA_CCR_TEIE, //(0x00000008UL),
} DMA_Interrupt_EN_TypeDef;


////////////////////////////////////////////////////////////////////////////////
/// @brief DMA interrupts Enumerate definition
/// @anchor DMA_Flags
////////////////////////////////////////////////////////////////////////////////
typedef enum {
    DMAx_IT_GLy               = (0x00000001UL),
    DMAx_IT_TCy               = (0x00000002UL),
    DMAx_IT_HTy               = (0x00000004UL),
    DMAx_IT_TEy               = (0x00000008UL),
    DMA1_IT_GL1               = (0x00000001UL),
    DMA1_IT_TC1               = (0x00000002UL),
    DMA1_IT_HT1               = (0x00000004UL),
    DMA1_IT_TE1               = (0x00000008UL),
    DMA1_IT_GL2               = (0x00000010UL),
    DMA1_IT_TC2               = (0x00000020UL),
    DMA1_IT_HT2               = (0x00000040UL),
    DMA1_IT_TE2               = (0x00000080UL),
    DMA1_IT_GL3               = (0x00000100UL),
    DMA1_IT_TC3               = (0x00000200UL),
    DMA1_IT_HT3               = (0x00000400UL),
    DMA1_IT_TE3               = (0x00000800UL),
    DMA1_IT_GL4               = (0x00001000UL),
    DMA1_IT_TC4               = (0x00002000UL),
    DMA1_IT_HT4               = (0x00004000UL),
    DMA1_IT_TE4               = (0x00008000UL),
    DMA1_IT_GL5               = (0x00010000UL),
    DMA1_IT_TC5               = (0x00020000UL),
    DMA1_IT_HT5               = (0x00040000UL),
    DMA1_IT_TE5               = (0x00080000UL),
    DMA1_IT_GL6               = (0x00100000UL),
    DMA1_IT_TC6               = (0x00200000UL),
    DMA1_IT_HT6               = (0x00400000UL),
    DMA1_IT_TE6               = (0x00800000UL),
    DMA1_IT_GL7               = (0x01000000UL),
    DMA1_IT_TC7               = (0x02000000UL),
    DMA1_IT_HT7               = (0x04000000UL),
    DMA1_IT_TE7               = (0x08000000UL),
    DMA2_IT_GL1               = (0x10000001UL),
    DMA2_IT_TC1               = (0x10000002UL),
    DMA2_IT_HT1               = (0x10000004UL),
    DMA2_IT_TE1               = (0x10000008UL),
    DMA2_IT_GL2               = (0x10000010UL),
    DMA2_IT_TC2               = (0x10000020UL),
    DMA2_IT_HT2               = (0x10000040UL),
    DMA2_IT_TE2               = (0x10000080UL),
    DMA2_IT_GL3               = (0x10000100UL),
    DMA2_IT_TC3               = (0x10000200UL),
    DMA2_IT_HT3               = (0x10000400UL),
    DMA2_IT_TE3               = (0x10000800UL),
    DMA2_IT_GL4               = (0x10001000UL),
    DMA2_IT_TC4               = (0x10002000UL),
    DMA2_IT_HT4               = (0x10004000UL),
    DMA2_IT_TE4               = (0x10008000UL),
    DMA2_IT_GL5               = (0x10010000UL),
    DMA2_IT_TC5               = (0x10020000UL),
    DMA2_IT_HT5               = (0x10040000UL),
    DMA2_IT_TE5               = (0x10080000UL),
} DMA_Interrupts_TypeDef;
typedef enum {
    DMAx_FLAG_GLy               = (0x00000001UL),
    DMAx_FLAG_TCy               = (0x00000002UL),
    DMAx_FLAG_HTy               = (0x00000004UL),
    DMAx_FLAG_TEy               = (0x00000008UL),
    DMA1_FLAG_GL1               = (0x00000001UL),
    DMA1_FLAG_TC1               = (0x00000002UL),
    DMA1_FLAG_HT1               = (0x00000004UL),
    DMA1_FLAG_TE1               = (0x00000008UL),
    DMA1_FLAG_GL2               = (0x00000010UL),
    DMA1_FLAG_TC2               = (0x00000020UL),
    DMA1_FLAG_HT2               = (0x00000040UL),
    DMA1_FLAG_TE2               = (0x00000080UL),
    DMA1_FLAG_GL3               = (0x00000100UL),
    DMA1_FLAG_TC3               = (0x00000200UL),
    DMA1_FLAG_HT3               = (0x00000400UL),
    DMA1_FLAG_TE3               = (0x00000800UL),
    DMA1_FLAG_GL4               = (0x00001000UL),
    DMA1_FLAG_TC4               = (0x00002000UL),
    DMA1_FLAG_HT4               = (0x00004000UL),
    DMA1_FLAG_TE4               = (0x00008000UL),
    DMA1_FLAG_GL5               = (0x00010000UL),
    DMA1_FLAG_TC5               = (0x00020000UL),
    DMA1_FLAG_HT5               = (0x00040000UL),
    DMA1_FLAG_TE5               = (0x00080000UL),
    DMA1_FLAG_GL6               = (0x00100000UL),
    DMA1_FLAG_TC6               = (0x00200000UL),
    DMA1_FLAG_HT6               = (0x00400000UL),
    DMA1_FLAG_TE6               = (0x00800000UL),
    DMA1_FLAG_GL7               = (0x01000000UL),
    DMA1_FLAG_TC7               = (0x02000000UL),
    DMA1_FLAG_HT7               = (0x04000000UL),
    DMA1_FLAG_TE7               = (0x08000000UL),
    DMA2_FLAG_GL1               = (0x10000001UL),
    DMA2_FLAG_TC1               = (0x10000002UL),
    DMA2_FLAG_HT1               = (0x10000004UL),
    DMA2_FLAG_TE1               = (0x10000008UL),
    DMA2_FLAG_GL2               = (0x10000010UL),
    DMA2_FLAG_TC2               = (0x10000020UL),
    DMA2_FLAG_HT2               = (0x10000040UL),
    DMA2_FLAG_TE2               = (0x10000080UL),
    DMA2_FLAG_GL3               = (0x10000100UL),
    DMA2_FLAG_TC3               = (0x10000200UL),
    DMA2_FLAG_HT3               = (0x10000400UL),
    DMA2_FLAG_TE3               = (0x10000800UL),
    DMA2_FLAG_GL4               = (0x10001000UL),
    DMA2_FLAG_TC4               = (0x10002000UL),
    DMA2_FLAG_HT4               = (0x10004000UL),
    DMA2_FLAG_TE4               = (0x10008000UL),
    DMA2_FLAG_GL5               = (0x10010000UL),
    DMA2_FLAG_TC5               = (0x10020000UL),
    DMA2_FLAG_HT5               = (0x10040000UL),
    DMA2_FLAG_TE5               = (0x10080000UL),
} DMA_Flags_TypeDef;
////////////////////////////////////////////////////////////////////////////////
/// @brief  DMA Init structure definition
////////////////////////////////////////////////////////////////////////////////
typedef struct {
    u32 DMA_PeripheralBaseAddr;                                 ///< the peripheral base address for DMA Channeln.
    u32 DMA_MemoryBaseAddr;                                     ///< the memory base address for DMA Channeln.
    DMA_data_transfer_direction_TypeDef DMA_DIR;                ///< the peripheral is the source or destination.
    u32 DMA_BufferSize;                                         ///< Specifies the buffer size, in data unit, of the Buffer size
    DMA_peripheral_incremented_mode_TypeDef DMA_PeripheralInc;  ///< Specifies whether the Peripheral address increment or not
    DMA_memory_incremented_mode_TypeDef DMA_MemoryInc;          ///< Specifies whether the memory address register is increment or not
    DMA_peripheral_data_size_TypeDef DMA_PeripheralDataSize;    ///< Specifies the Peripheral data width.
    DMA_memory_data_size_TypeDef DMA_MemoryDataSize;            ///< Specifies the Memory data width.
    DMA_circular_normal_mode_TypeDef DMA_Mode;                  ///< Specifies the operation mode of the DMA Channeln  circular or normal mode.
    DMA_priority_level_TypeDef DMA_Priority;                    ///< Specifies the software priority for the DMA priority level
    DMA_memory_to_memory_TypeDef DMA_M2M;                       ///< Specifies if the DMA Channeln will be used in  memory-to-memory transfer.
    DMA_auto_reload_TypeDef DMA_Auto_reload;                     ///< Specifies if the DMA Channeln will auto reload the CNDTR register
} DMA_InitTypeDef;

/// @}

////////////////////////////////////////////////////////////////////////////////
/// @defgroup DMA_Exported_Variables
/// @{
#ifdef _HAL_DMA_C_

#define GLOBAL
#else
#define GLOBAL extern
#endif

#undef GLOBAL
/// @}

////////////////////////////////////////////////////////////////////////////////
/// @defgroup DMA_Exported_Functions
/// @{

void DMA_DeInit(DMA_Channel_TypeDef* channel);
void DMA_Init(DMA_Channel_TypeDef* channel, DMA_InitTypeDef* init_struct);
void DMA_StructInit(DMA_InitTypeDef* init_struct);
void DMA_Cmd(DMA_Channel_TypeDef* channel, FunctionalState state);
void DMA_ITConfig(DMA_Channel_TypeDef* channel, DMA_Interrupt_EN_TypeDef it, FunctionalState state);
void DMA_ClearFlag(DMA_Flags_TypeDef flag);
void DMA_ClearITPendingBit(DMA_Interrupts_TypeDef it);
void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* channel, u16 length);
u16        DMA_GetCurrDataCounter(DMA_Channel_TypeDef* channel);
FlagStatus DMA_GetFlagStatus(DMA_Flags_TypeDef flag);
ITStatus   DMA_GetITStatus(DMA_Interrupts_TypeDef it);

void exDMA_SetPeripheralAddress(DMA_Channel_TypeDef* channel, u32 addr);
void exDMA_SetTransmitLen(DMA_Channel_TypeDef* channel, u16 len);
void exDMA_SetMemoryAddress(DMA_Channel_TypeDef* channel, u32 addr);

/// @}

/// @}

/// @}
////////////////////////////////////////////////////////////////////////////////
#endif //__HAL_DMA_H
////////////////////////////////////////////////////////////////////////////////