1 /**
2   ******************************************************************************
3   * @file    stm32c0xx_ll_dma.h
4   * @author  MCD Application Team
5   * @brief   Header file of DMA LL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2022 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   ******************************************************************************
17   */
18 
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef STM32C0xx_LL_DMA_H
21 #define STM32C0xx_LL_DMA_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32c0xx.h"
29 #include "stm32c0xx_ll_dmamux.h"
30 
31 /** @addtogroup STM32C0xx_LL_Driver
32   * @{
33   */
34 
35 #if defined (DMA1)
36 
37 /** @defgroup DMA_LL DMA
38   * @{
39   */
40 
41 /* Private types -------------------------------------------------------------*/
42 /* Private variables ---------------------------------------------------------*/
43 /** @defgroup DMA_LL_Private_Variables DMA Private Variables
44   * @{
45   */
46 /* Array used to get the DMA channel register offset versus channel index LL_DMA_CHANNEL_x */
47 static const uint8_t CHANNEL_OFFSET_TAB[] =
48 {
49   (uint8_t)(DMA1_Channel1_BASE - DMA1_BASE),
50   (uint8_t)(DMA1_Channel2_BASE - DMA1_BASE),
51   (uint8_t)(DMA1_Channel3_BASE - DMA1_BASE),
52 #if defined(DMA1_Channel4_BASE)
53   (uint8_t)(DMA1_Channel4_BASE - DMA1_BASE),
54 #endif /* DMA1_Channel4_BASE */
55 #if defined(DMA1_Channel5_BASE)
56   (uint8_t)(DMA1_Channel5_BASE - DMA1_BASE),
57 #endif /* DMA1_Channel5_BASE */
58 };
59 /**
60   * @}
61   */
62 
63 /* Private constants ---------------------------------------------------------*/
64 /* Private macros ------------------------------------------------------------*/
65 /** @defgroup DMA_LL_Private_Macros DMA Private Macros
66   * @{
67   */
68 /**
69   * @}
70   */
71 
72 /* Exported types ------------------------------------------------------------*/
73 #if defined(USE_FULL_LL_DRIVER)
74 /** @defgroup DMA_LL_ES_INIT DMA Exported Init structure
75   * @{
76   */
77 typedef struct
78 {
79   uint32_t PeriphOrM2MSrcAddress;  /*!< Specifies the peripheral base address for DMA transfer
80                                         or as Source base address in case of memory to memory transfer direction.
81 
82                                         This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF */
83 
84   uint32_t MemoryOrM2MDstAddress;  /*!< Specifies the memory base address for DMA transfer
85                                         or as Destination base address in case of memory to memory transfer direction.
86 
87                                         This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF */
88 
89   uint32_t Direction;              /*!< Specifies if the data will be transferred from memory to peripheral,
90                                         from memory to memory or from peripheral to memory.
91                                         This parameter can be a value of @ref DMA_LL_EC_DIRECTION
92 
93                                         This feature can be modified afterwards using unitary function
94                                         @ref LL_DMA_SetDataTransferDirection(). */
95 
96   uint32_t Mode;                   /*!< Specifies the normal or circular operation mode.
97                                         This parameter can be a value of @ref DMA_LL_EC_MODE
98                                         @note: The circular buffer mode cannot be used if the memory to memory
99                                                data transfer direction is configured on the selected Channel
100 
101                                         This feature can be modified afterwards using unitary function
102                                         @ref LL_DMA_SetMode(). */
103 
104   uint32_t PeriphOrM2MSrcIncMode;  /*!< Specifies whether the Peripheral address or Source address in case of memory to
105                                         memory transfer directionis incremented or not.
106                                         This parameter can be a value of @ref DMA_LL_EC_PERIPH
107 
108                                         This feature can be modified afterwards using unitary function
109                                         @ref LL_DMA_SetPeriphIncMode(). */
110 
111   uint32_t MemoryOrM2MDstIncMode;  /*!< Specifies whether the Memory address or Destination address in case of memory to
112                                         memory transfer direction is incremented or not.
113                                         This parameter can be a value of @ref DMA_LL_EC_MEMORY
114 
115                                         This feature can be modified afterwards using unitary function
116                                         @ref LL_DMA_SetMemoryIncMode(). */
117 
118   uint32_t PeriphOrM2MSrcDataSize; /*!< Specifies the Peripheral data size alignment or Source data size alignment
119                                         (byte, half word, word)in case of memory to memory transfer direction.
120                                         This parameter can be a value of @ref DMA_LL_EC_PDATAALIGN
121 
122                                         This feature can be modified afterwards using unitary function
123                                         @ref LL_DMA_SetPeriphSize(). */
124 
125   uint32_t MemoryOrM2MDstDataSize; /*!< Specifies the Memory data size alignment or Destination data size alignment
126                                         (byte, half word, word) in case of memory to memory transfer direction.
127                                         This parameter can be a value of @ref DMA_LL_EC_MDATAALIGN
128 
129                                         This feature can be modified afterwards using unitary function
130                                         @ref LL_DMA_SetMemorySize(). */
131 
132   uint32_t NbData;                 /*!< Specifies the number of data to transfer, in data unit.
133                                         The data unit is equal to the source buffer configuration set in PeripheralSize
134                                         or MemorySize parameters depending in the transfer direction.
135                                         This parameter must be a value between Min_Data = 0 and Max_Data = 0x0000FFFF
136 
137                                         This feature can be modified afterwards using unitary function
138                                         @ref LL_DMA_SetDataLength(). */
139 
140   uint32_t PeriphRequest;          /*!< Specifies the peripheral request.
141                                         This parameter can be a value of @ref DMAMUX_LL_EC_REQUEST
142 
143                                         This feature can be modified afterwards using unitary function
144                                         @ref LL_DMA_SetPeriphRequest(). */
145 
146   uint32_t Priority;               /*!< Specifies the channel priority level.
147                                         This parameter can be a value of @ref DMA_LL_EC_PRIORITY
148 
149                                         This feature can be modified afterwards using unitary function
150                                         @ref LL_DMA_SetChannelPriorityLevel(). */
151 
152 } LL_DMA_InitTypeDef;
153 /**
154   * @}
155   */
156 #endif /*USE_FULL_LL_DRIVER*/
157 
158 /* Exported constants --------------------------------------------------------*/
159 /** @defgroup DMA_LL_Exported_Constants DMA Exported Constants
160   * @{
161   */
162 /** @defgroup DMA_LL_EC_CLEAR_FLAG Clear Flags Defines
163   * @brief    Flags defines which can be used with LL_DMA_WriteReg function
164   * @{
165   */
166 #define LL_DMA_IFCR_CGIF1                 DMA_IFCR_CGIF1        /*!< Channel 1 global flag            */
167 #define LL_DMA_IFCR_CTCIF1                DMA_IFCR_CTCIF1       /*!< Channel 1 transfer complete flag */
168 #define LL_DMA_IFCR_CHTIF1                DMA_IFCR_CHTIF1       /*!< Channel 1 half transfer flag     */
169 #define LL_DMA_IFCR_CTEIF1                DMA_IFCR_CTEIF1       /*!< Channel 1 transfer error flag    */
170 #define LL_DMA_IFCR_CGIF2                 DMA_IFCR_CGIF2        /*!< Channel 2 global flag            */
171 #define LL_DMA_IFCR_CTCIF2                DMA_IFCR_CTCIF2       /*!< Channel 2 transfer complete flag */
172 #define LL_DMA_IFCR_CHTIF2                DMA_IFCR_CHTIF2       /*!< Channel 2 half transfer flag     */
173 #define LL_DMA_IFCR_CTEIF2                DMA_IFCR_CTEIF2       /*!< Channel 2 transfer error flag    */
174 #define LL_DMA_IFCR_CGIF3                 DMA_IFCR_CGIF3        /*!< Channel 3 global flag            */
175 #define LL_DMA_IFCR_CTCIF3                DMA_IFCR_CTCIF3       /*!< Channel 3 transfer complete flag */
176 #define LL_DMA_IFCR_CHTIF3                DMA_IFCR_CHTIF3       /*!< Channel 3 half transfer flag     */
177 #define LL_DMA_IFCR_CTEIF3                DMA_IFCR_CTEIF3       /*!< Channel 3 transfer error flag    */
178 #if defined(DMA1_Channel4)
179 #define LL_DMA_IFCR_CGIF4                 DMA_IFCR_CGIF4        /*!< Channel 4 global flag            */
180 #define LL_DMA_IFCR_CTCIF4                DMA_IFCR_CTCIF4       /*!< Channel 4 transfer complete flag */
181 #define LL_DMA_IFCR_CHTIF4                DMA_IFCR_CHTIF4       /*!< Channel 4 half transfer flag     */
182 #define LL_DMA_IFCR_CTEIF4                DMA_IFCR_CTEIF4       /*!< Channel 4 transfer error flag    */
183 #endif /* DMA1_Channel4 */
184 #if defined(DMA1_Channel5)
185 #define LL_DMA_IFCR_CGIF5                 DMA_IFCR_CGIF5        /*!< Channel 5 global flag            */
186 #define LL_DMA_IFCR_CTCIF5                DMA_IFCR_CTCIF5       /*!< Channel 5 transfer complete flag */
187 #define LL_DMA_IFCR_CHTIF5                DMA_IFCR_CHTIF5       /*!< Channel 5 half transfer flag     */
188 #define LL_DMA_IFCR_CTEIF5                DMA_IFCR_CTEIF5       /*!< Channel 5 transfer error flag    */
189 #endif /* DMA1_Channel5 */
190 
191 /**
192   * @}
193   */
194 
195 /** @defgroup DMA_LL_EC_GET_FLAG Get Flags Defines
196   * @brief    Flags defines which can be used with LL_DMA_ReadReg function
197   * @{
198   */
199 #define LL_DMA_ISR_GIF1                   DMA_ISR_GIF1          /*!< Channel 1 global flag            */
200 #define LL_DMA_ISR_TCIF1                  DMA_ISR_TCIF1         /*!< Channel 1 transfer complete flag */
201 #define LL_DMA_ISR_HTIF1                  DMA_ISR_HTIF1         /*!< Channel 1 half transfer flag     */
202 #define LL_DMA_ISR_TEIF1                  DMA_ISR_TEIF1         /*!< Channel 1 transfer error flag    */
203 #define LL_DMA_ISR_GIF2                   DMA_ISR_GIF2          /*!< Channel 2 global flag            */
204 #define LL_DMA_ISR_TCIF2                  DMA_ISR_TCIF2         /*!< Channel 2 transfer complete flag */
205 #define LL_DMA_ISR_HTIF2                  DMA_ISR_HTIF2         /*!< Channel 2 half transfer flag     */
206 #define LL_DMA_ISR_TEIF2                  DMA_ISR_TEIF2         /*!< Channel 2 transfer error flag    */
207 #define LL_DMA_ISR_GIF3                   DMA_ISR_GIF3          /*!< Channel 3 global flag            */
208 #define LL_DMA_ISR_TCIF3                  DMA_ISR_TCIF3         /*!< Channel 3 transfer complete flag */
209 #define LL_DMA_ISR_HTIF3                  DMA_ISR_HTIF3         /*!< Channel 3 half transfer flag     */
210 #define LL_DMA_ISR_TEIF3                  DMA_ISR_TEIF3         /*!< Channel 3 transfer error flag    */
211 #if defined(DMA1_Channel4)
212 #define LL_DMA_ISR_GIF4                   DMA_ISR_GIF4          /*!< Channel 4 global flag            */
213 #define LL_DMA_ISR_TCIF4                  DMA_ISR_TCIF4         /*!< Channel 4 transfer complete flag */
214 #define LL_DMA_ISR_HTIF4                  DMA_ISR_HTIF4         /*!< Channel 4 half transfer flag     */
215 #define LL_DMA_ISR_TEIF4                  DMA_ISR_TEIF4         /*!< Channel 4 transfer error flag    */
216 #endif /* DMA1_Channel4 */
217 #if defined(DMA1_Channel5)
218 #define LL_DMA_ISR_GIF5                   DMA_ISR_GIF5          /*!< Channel 5 global flag            */
219 #define LL_DMA_ISR_TCIF5                  DMA_ISR_TCIF5         /*!< Channel 5 transfer complete flag */
220 #define LL_DMA_ISR_HTIF5                  DMA_ISR_HTIF5         /*!< Channel 5 half transfer flag     */
221 #define LL_DMA_ISR_TEIF5                  DMA_ISR_TEIF5         /*!< Channel 5 transfer error flag    */
222 #endif /* DMA1_Channel5 */
223 /**
224   * @}
225   */
226 
227 /** @defgroup DMA_LL_EC_IT IT Defines
228   * @brief    IT defines which can be used with LL_DMA_ReadReg and  LL_DMA_WriteReg functions
229   * @{
230   */
231 #define LL_DMA_CCR_TCIE                   DMA_CCR_TCIE          /*!< Transfer complete interrupt */
232 #define LL_DMA_CCR_HTIE                   DMA_CCR_HTIE          /*!< Half Transfer interrupt     */
233 #define LL_DMA_CCR_TEIE                   DMA_CCR_TEIE          /*!< Transfer error interrupt    */
234 /**
235   * @}
236   */
237 
238 /** @defgroup DMA_LL_EC_CHANNEL CHANNEL
239   * @{
240   */
241 #define LL_DMA_CHANNEL_1                  0x00000001U /*!< DMA Channel 1 */
242 #define LL_DMA_CHANNEL_2                  0x00000002U /*!< DMA Channel 2 */
243 #define LL_DMA_CHANNEL_3                  0x00000003U /*!< DMA Channel 3 */
244 #if defined(DMA1_Channel4)
245 #define LL_DMA_CHANNEL_4                  0x00000004U /*!< DMA Channel 4 */
246 #endif /* DMA1_Channel4 */
247 #if defined(DMA1_Channel5)
248 #define LL_DMA_CHANNEL_5                  0x00000005U /*!< DMA Channel 5 */
249 #endif /* DMA1_Channel5 */
250 #if defined(USE_FULL_LL_DRIVER)
251 #define LL_DMA_CHANNEL_ALL                0xFFFF0000U /*!< DMA Channel all (used only for function
252                                                       @ref LL_DMA_DeInit(). */
253 #endif /*USE_FULL_LL_DRIVER*/
254 /**
255   * @}
256   */
257 
258 /** @defgroup DMA_LL_EC_DIRECTION Transfer Direction
259   * @{
260   */
261 #define LL_DMA_DIRECTION_PERIPH_TO_MEMORY 0x00000000U             /*!< Peripheral to memory direction */
262 #define LL_DMA_DIRECTION_MEMORY_TO_PERIPH DMA_CCR_DIR             /*!< Memory to peripheral direction */
263 #define LL_DMA_DIRECTION_MEMORY_TO_MEMORY DMA_CCR_MEM2MEM         /*!< Memory to memory direction     */
264 /**
265   * @}
266   */
267 
268 /** @defgroup DMA_LL_EC_MODE Transfer mode
269   * @{
270   */
271 #define LL_DMA_MODE_NORMAL                0x00000000U             /*!< Normal Mode                  */
272 #define LL_DMA_MODE_CIRCULAR              DMA_CCR_CIRC            /*!< Circular Mode                */
273 /**
274   * @}
275   */
276 
277 /** @defgroup DMA_LL_EC_PERIPH Peripheral increment mode
278   * @{
279   */
280 #define LL_DMA_PERIPH_INCREMENT           DMA_CCR_PINC            /*!< Peripheral increment mode Enable */
281 #define LL_DMA_PERIPH_NOINCREMENT         0x00000000U             /*!< Peripheral increment mode Disable */
282 /**
283   * @}
284   */
285 
286 /** @defgroup DMA_LL_EC_MEMORY Memory increment mode
287   * @{
288   */
289 #define LL_DMA_MEMORY_INCREMENT           DMA_CCR_MINC            /*!< Memory increment mode Enable  */
290 #define LL_DMA_MEMORY_NOINCREMENT         0x00000000U             /*!< Memory increment mode Disable */
291 /**
292   * @}
293   */
294 
295 /** @defgroup DMA_LL_EC_PDATAALIGN Peripheral data alignment
296   * @{
297   */
298 #define LL_DMA_PDATAALIGN_BYTE            0x00000000U             /*!< Peripheral data alignment : Byte     */
299 #define LL_DMA_PDATAALIGN_HALFWORD        DMA_CCR_PSIZE_0         /*!< Peripheral data alignment : HalfWord */
300 #define LL_DMA_PDATAALIGN_WORD            DMA_CCR_PSIZE_1         /*!< Peripheral data alignment : Word     */
301 /**
302   * @}
303   */
304 
305 /** @defgroup DMA_LL_EC_MDATAALIGN Memory data alignment
306   * @{
307   */
308 #define LL_DMA_MDATAALIGN_BYTE            0x00000000U             /*!< Memory data alignment : Byte     */
309 #define LL_DMA_MDATAALIGN_HALFWORD        DMA_CCR_MSIZE_0         /*!< Memory data alignment : HalfWord */
310 #define LL_DMA_MDATAALIGN_WORD            DMA_CCR_MSIZE_1         /*!< Memory data alignment : Word     */
311 /**
312   * @}
313   */
314 
315 /** @defgroup DMA_LL_EC_PRIORITY Transfer Priority level
316   * @{
317   */
318 #define LL_DMA_PRIORITY_LOW               0x00000000U             /*!< Priority level : Low       */
319 #define LL_DMA_PRIORITY_MEDIUM            DMA_CCR_PL_0            /*!< Priority level : Medium    */
320 #define LL_DMA_PRIORITY_HIGH              DMA_CCR_PL_1            /*!< Priority level : High      */
321 #define LL_DMA_PRIORITY_VERYHIGH          DMA_CCR_PL              /*!< Priority level : Very_High */
322 /**
323   * @}
324   */
325 
326 /**
327   * @}
328   */
329 
330 /* Exported macro ------------------------------------------------------------*/
331 /** @defgroup DMA_LL_Exported_Macros DMA Exported Macros
332   * @{
333   */
334 
335 /** @defgroup DMA_LL_EM_WRITE_READ Common Write and read registers macros
336   * @{
337   */
338 /**
339   * @brief  Write a value in DMA register
340   * @param  __INSTANCE__ DMA Instance
341   * @param  __REG__ Register to be written
342   * @param  __VALUE__ Value to be written in the register
343   * @retval None
344   */
345 #define LL_DMA_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
346 
347 /**
348   * @brief  Read a value in DMA register
349   * @param  __INSTANCE__ DMA Instance
350   * @param  __REG__ Register to be read
351   * @retval Register value
352   */
353 #define LL_DMA_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
354 /**
355   * @}
356   */
357 
358 /** @defgroup DMA_LL_EM_CONVERT_DMAxCHANNELy Convert DMAxChannely
359   * @{
360   */
361 /**
362   * @brief  Convert DMAx_Channely into DMAx
363   * @param  __CHANNEL_INSTANCE__ DMAx_Channely
364   * @retval DMAx
365   */
366 #define __LL_DMA_GET_INSTANCE(__CHANNEL_INSTANCE__)  (DMA1)
367 
368 /**
369   * @brief  Convert DMAx_Channely into LL_DMA_CHANNEL_y
370   * @param  __CHANNEL_INSTANCE__ DMAx_Channely
371   * @retval LL_DMA_CHANNEL_y
372   */
373 #if defined(LL_DMA_CHANNEL_5)
374 #define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__)   \
375   (((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \
376    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \
377    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel3)) ? LL_DMA_CHANNEL_3 : \
378    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel4)) ? LL_DMA_CHANNEL_4 : \
379    LL_DMA_CHANNEL_5)
380 #else
381 #define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__)   \
382   (((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \
383    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \
384    LL_DMA_CHANNEL_3)
385 #endif /* LL_DMA_CHANNEL_5 */
386 
387 /**
388   * @brief  Convert DMA Instance DMAx and LL_DMA_CHANNEL_y into DMAx_Channely
389   * @param  __DMA_INSTANCE__ DMAx
390   * @param  __CHANNEL__ LL_DMA_CHANNEL_y
391   * @retval DMAx_Channely
392   */
393 #if defined(LL_DMA_CHANNEL_5)
394 #define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__)   \
395   ((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \
396    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \
397    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA1_Channel3 : \
398    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA1_Channel4 : \
399    DMA1_Channel5)
400 #else
401 #define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__)   \
402   ((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \
403    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \
404    DMA1_Channel3)
405 #endif /* LL_DMA_CHANNEL_5 */
406 
407 /**
408   * @}
409   */
410 
411 /**
412   * @}
413   */
414 
415 /* Exported functions --------------------------------------------------------*/
416 /** @defgroup DMA_LL_Exported_Functions DMA Exported Functions
417   * @{
418   */
419 
420 /** @defgroup DMA_LL_EF_Configuration Configuration
421   * @{
422   */
423 /**
424   * @brief  Enable DMA channel.
425   * @rmtoll CCR          EN            LL_DMA_EnableChannel
426   * @param  DMAx DMAx Instance
427   * @param  Channel This parameter can be one of the following values:
428   *         @arg @ref LL_DMA_CHANNEL_1
429   *         @arg @ref LL_DMA_CHANNEL_2
430   *         @arg @ref LL_DMA_CHANNEL_3
431   *         @arg @ref LL_DMA_CHANNEL_4 (*)
432   *         @arg @ref LL_DMA_CHANNEL_5 (*)
433   * @note (*) Availability depends on devices
434   * @retval None
435   */
LL_DMA_EnableChannel(DMA_TypeDef * DMAx,uint32_t Channel)436 __STATIC_INLINE void LL_DMA_EnableChannel(DMA_TypeDef *DMAx, uint32_t Channel)
437 {
438   uint32_t dma_base_addr = (uint32_t)DMAx;
439   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR, DMA_CCR_EN);
440 }
441 
442 /**
443   * @brief  Disable DMA channel.
444   * @rmtoll CCR          EN            LL_DMA_DisableChannel
445   * @param  DMAx DMAx Instance
446   * @param  Channel This parameter can be one of the following values:
447   *         @arg @ref LL_DMA_CHANNEL_1
448   *         @arg @ref LL_DMA_CHANNEL_2
449   *         @arg @ref LL_DMA_CHANNEL_3
450   *         @arg @ref LL_DMA_CHANNEL_4 (*)
451   *         @arg @ref LL_DMA_CHANNEL_5 (*)
452   * @note (*) Availability depends on devices
453   * @retval None
454   */
LL_DMA_DisableChannel(DMA_TypeDef * DMAx,uint32_t Channel)455 __STATIC_INLINE void LL_DMA_DisableChannel(DMA_TypeDef *DMAx, uint32_t Channel)
456 {
457   uint32_t dma_base_addr = (uint32_t)DMAx;
458   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR, DMA_CCR_EN);
459 }
460 
461 /**
462   * @brief  Check if DMA channel is enabled or disabled.
463   * @rmtoll CCR          EN            LL_DMA_IsEnabledChannel
464   * @param  DMAx DMAx Instance
465   * @param  Channel This parameter can be one of the following values:
466   *         @arg @ref LL_DMA_CHANNEL_1
467   *         @arg @ref LL_DMA_CHANNEL_2
468   *         @arg @ref LL_DMA_CHANNEL_3
469   *         @arg @ref LL_DMA_CHANNEL_4 (*)
470   *         @arg @ref LL_DMA_CHANNEL_5 (*)
471   * @note (*) Availability depends on devices
472   * @retval State of bit (1 or 0).
473   */
LL_DMA_IsEnabledChannel(DMA_TypeDef * DMAx,uint32_t Channel)474 __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannel(DMA_TypeDef *DMAx, uint32_t Channel)
475 {
476   uint32_t dma_base_addr = (uint32_t)DMAx;
477   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR,
478                     DMA_CCR_EN) == (DMA_CCR_EN)) ? 1UL : 0UL);
479 }
480 
481 /**
482   * @brief  Configure all parameters link to DMA transfer.
483   * @rmtoll CCR          DIR           LL_DMA_ConfigTransfer\n
484   *         CCR          MEM2MEM       LL_DMA_ConfigTransfer\n
485   *         CCR          CIRC          LL_DMA_ConfigTransfer\n
486   *         CCR          PINC          LL_DMA_ConfigTransfer\n
487   *         CCR          MINC          LL_DMA_ConfigTransfer\n
488   *         CCR          PSIZE         LL_DMA_ConfigTransfer\n
489   *         CCR          MSIZE         LL_DMA_ConfigTransfer\n
490   *         CCR          PL            LL_DMA_ConfigTransfer
491   * @param  DMAx DMAx Instance
492   * @param  Channel This parameter can be one of the following values:
493   *         @arg @ref LL_DMA_CHANNEL_1
494   *         @arg @ref LL_DMA_CHANNEL_2
495   *         @arg @ref LL_DMA_CHANNEL_3
496   *         @arg @ref LL_DMA_CHANNEL_4 (*)
497   *         @arg @ref LL_DMA_CHANNEL_5 (*)
498   * @note (*) Availability depends on devices
499   * @param  Configuration This parameter must be a combination of all the following values:
500   *         @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY or @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH or
501   *              @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
502   *         @arg @ref LL_DMA_MODE_NORMAL or @ref LL_DMA_MODE_CIRCULAR
503   *         @arg @ref LL_DMA_PERIPH_INCREMENT or @ref LL_DMA_PERIPH_NOINCREMENT
504   *         @arg @ref LL_DMA_MEMORY_INCREMENT or @ref LL_DMA_MEMORY_NOINCREMENT
505   *         @arg @ref LL_DMA_PDATAALIGN_BYTE or @ref LL_DMA_PDATAALIGN_HALFWORD or @ref LL_DMA_PDATAALIGN_WORD
506   *         @arg @ref LL_DMA_MDATAALIGN_BYTE or @ref LL_DMA_MDATAALIGN_HALFWORD or @ref LL_DMA_MDATAALIGN_WORD
507   *         @arg @ref LL_DMA_PRIORITY_LOW or @ref LL_DMA_PRIORITY_MEDIUM or @ref LL_DMA_PRIORITY_HIGH or
508   *              @ref LL_DMA_PRIORITY_VERYHIGH
509   * @retval None
510   */
LL_DMA_ConfigTransfer(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Configuration)511 __STATIC_INLINE void LL_DMA_ConfigTransfer(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
512 {
513   uint32_t dma_base_addr = (uint32_t)DMAx;
514   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR,
515              DMA_CCR_DIR | DMA_CCR_MEM2MEM | DMA_CCR_CIRC | DMA_CCR_PINC | DMA_CCR_MINC | DMA_CCR_PSIZE | \
516              DMA_CCR_MSIZE | DMA_CCR_PL, Configuration);
517 }
518 
519 /**
520   * @brief  Set Data transfer direction (read from peripheral or from memory).
521   * @rmtoll CCR          DIR           LL_DMA_SetDataTransferDirection\n
522   *         CCR          MEM2MEM       LL_DMA_SetDataTransferDirection
523   * @param  DMAx DMAx Instance
524   * @param  Channel This parameter can be one of the following values:
525   *         @arg @ref LL_DMA_CHANNEL_1
526   *         @arg @ref LL_DMA_CHANNEL_2
527   *         @arg @ref LL_DMA_CHANNEL_3
528   *         @arg @ref LL_DMA_CHANNEL_4 (*)
529   *         @arg @ref LL_DMA_CHANNEL_5 (*)
530   * @note (*) Availability depends on devices
531   * @param  Direction This parameter can be one of the following values:
532   *         @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
533   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
534   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
535   * @retval None
536   */
LL_DMA_SetDataTransferDirection(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Direction)537 __STATIC_INLINE void LL_DMA_SetDataTransferDirection(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Direction)
538 {
539   uint32_t dma_base_addr = (uint32_t)DMAx;
540   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR,
541              DMA_CCR_DIR | DMA_CCR_MEM2MEM, Direction);
542 }
543 
544 /**
545   * @brief  Get Data transfer direction (read from peripheral or from memory).
546   * @rmtoll CCR          DIR           LL_DMA_GetDataTransferDirection\n
547   *         CCR          MEM2MEM       LL_DMA_GetDataTransferDirection
548   * @param  DMAx DMAx Instance
549   * @param  Channel This parameter can be one of the following values:
550   *         @arg @ref LL_DMA_CHANNEL_1
551   *         @arg @ref LL_DMA_CHANNEL_2
552   *         @arg @ref LL_DMA_CHANNEL_3
553   *         @arg @ref LL_DMA_CHANNEL_4 (*)
554   *         @arg @ref LL_DMA_CHANNEL_5 (*)
555   * @note (*) Availability depends on devices
556   * @retval Returned value can be one of the following values:
557   *         @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
558   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
559   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
560   */
LL_DMA_GetDataTransferDirection(DMA_TypeDef * DMAx,uint32_t Channel)561 __STATIC_INLINE uint32_t LL_DMA_GetDataTransferDirection(DMA_TypeDef *DMAx, uint32_t Channel)
562 {
563   uint32_t dma_base_addr = (uint32_t)DMAx;
564   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR,
565                    DMA_CCR_DIR | DMA_CCR_MEM2MEM));
566 }
567 
568 /**
569   * @brief  Set DMA mode circular or normal.
570   * @note The circular buffer mode cannot be used if the memory-to-memory
571   * data transfer is configured on the selected Channel.
572   * @rmtoll CCR          CIRC          LL_DMA_SetMode
573   * @param  DMAx DMAx Instance
574   * @param  Channel This parameter can be one of the following values:
575   *         @arg @ref LL_DMA_CHANNEL_1
576   *         @arg @ref LL_DMA_CHANNEL_2
577   *         @arg @ref LL_DMA_CHANNEL_3
578   *         @arg @ref LL_DMA_CHANNEL_4 (*)
579   *         @arg @ref LL_DMA_CHANNEL_5 (*)
580   * @note (*) Availability depends on devices
581   * @param  Mode This parameter can be one of the following values:
582   *         @arg @ref LL_DMA_MODE_NORMAL
583   *         @arg @ref LL_DMA_MODE_CIRCULAR
584   * @retval None
585   */
LL_DMA_SetMode(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Mode)586 __STATIC_INLINE void LL_DMA_SetMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Mode)
587 {
588   uint32_t dma_base_addr = (uint32_t)DMAx;
589   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR, DMA_CCR_CIRC,
590              Mode);
591 }
592 
593 /**
594   * @brief  Get DMA mode circular or normal.
595   * @rmtoll CCR          CIRC          LL_DMA_GetMode
596   * @param  DMAx DMAx Instance
597   * @param  Channel This parameter can be one of the following values:
598   *         @arg @ref LL_DMA_CHANNEL_1
599   *         @arg @ref LL_DMA_CHANNEL_2
600   *         @arg @ref LL_DMA_CHANNEL_3
601   *         @arg @ref LL_DMA_CHANNEL_4 (*)
602   *         @arg @ref LL_DMA_CHANNEL_5 (*)
603   * @note (*) Availability depends on devices
604   * @retval Returned value can be one of the following values:
605   *         @arg @ref LL_DMA_MODE_NORMAL
606   *         @arg @ref LL_DMA_MODE_CIRCULAR
607   */
LL_DMA_GetMode(DMA_TypeDef * DMAx,uint32_t Channel)608 __STATIC_INLINE uint32_t LL_DMA_GetMode(DMA_TypeDef *DMAx, uint32_t Channel)
609 {
610   uint32_t dma_base_addr = (uint32_t)DMAx;
611   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR,
612                    DMA_CCR_CIRC));
613 }
614 
615 /**
616   * @brief  Set Peripheral increment mode.
617   * @rmtoll CCR          PINC          LL_DMA_SetPeriphIncMode
618   * @param  DMAx DMAx Instance
619   * @param  Channel This parameter can be one of the following values:
620   *         @arg @ref LL_DMA_CHANNEL_1
621   *         @arg @ref LL_DMA_CHANNEL_2
622   *         @arg @ref LL_DMA_CHANNEL_3
623   *         @arg @ref LL_DMA_CHANNEL_4 (*)
624   *         @arg @ref LL_DMA_CHANNEL_5 (*)
625   * @note (*) Availability depends on devices
626   * @param  PeriphOrM2MSrcIncMode This parameter can be one of the following values:
627   *         @arg @ref LL_DMA_PERIPH_INCREMENT
628   *         @arg @ref LL_DMA_PERIPH_NOINCREMENT
629   * @retval None
630   */
LL_DMA_SetPeriphIncMode(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t PeriphOrM2MSrcIncMode)631 __STATIC_INLINE void LL_DMA_SetPeriphIncMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphOrM2MSrcIncMode)
632 {
633   uint32_t dma_base_addr = (uint32_t)DMAx;
634   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR, DMA_CCR_PINC,
635              PeriphOrM2MSrcIncMode);
636 }
637 
638 /**
639   * @brief  Get Peripheral increment mode.
640   * @rmtoll CCR          PINC          LL_DMA_GetPeriphIncMode
641   * @param  DMAx DMAx Instance
642   * @param  Channel This parameter can be one of the following values:
643   *         @arg @ref LL_DMA_CHANNEL_1
644   *         @arg @ref LL_DMA_CHANNEL_2
645   *         @arg @ref LL_DMA_CHANNEL_3
646   *         @arg @ref LL_DMA_CHANNEL_4 (*)
647   *         @arg @ref LL_DMA_CHANNEL_5 (*)
648   * @note (*) Availability depends on devices
649   * @retval Returned value can be one of the following values:
650   *         @arg @ref LL_DMA_PERIPH_INCREMENT
651   *         @arg @ref LL_DMA_PERIPH_NOINCREMENT
652   */
LL_DMA_GetPeriphIncMode(DMA_TypeDef * DMAx,uint32_t Channel)653 __STATIC_INLINE uint32_t LL_DMA_GetPeriphIncMode(DMA_TypeDef *DMAx, uint32_t Channel)
654 {
655   uint32_t dma_base_addr = (uint32_t)DMAx;
656   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR,
657                    DMA_CCR_PINC));
658 }
659 
660 /**
661   * @brief  Set Memory increment mode.
662   * @rmtoll CCR          MINC          LL_DMA_SetMemoryIncMode
663   * @param  DMAx DMAx Instance
664   * @param  Channel This parameter can be one of the following values:
665   *         @arg @ref LL_DMA_CHANNEL_1
666   *         @arg @ref LL_DMA_CHANNEL_2
667   *         @arg @ref LL_DMA_CHANNEL_3
668   *         @arg @ref LL_DMA_CHANNEL_4 (*)
669   *         @arg @ref LL_DMA_CHANNEL_5 (*)
670   * @note (*) Availability depends on devices
671   * @param  MemoryOrM2MDstIncMode This parameter can be one of the following values:
672   *         @arg @ref LL_DMA_MEMORY_INCREMENT
673   *         @arg @ref LL_DMA_MEMORY_NOINCREMENT
674   * @retval None
675   */
LL_DMA_SetMemoryIncMode(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t MemoryOrM2MDstIncMode)676 __STATIC_INLINE void LL_DMA_SetMemoryIncMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryOrM2MDstIncMode)
677 {
678   uint32_t dma_base_addr = (uint32_t)DMAx;
679   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR, DMA_CCR_MINC,
680              MemoryOrM2MDstIncMode);
681 }
682 
683 /**
684   * @brief  Get Memory increment mode.
685   * @rmtoll CCR          MINC          LL_DMA_GetMemoryIncMode
686   * @param  DMAx DMAx Instance
687   * @param  Channel This parameter can be one of the following values:
688   *         @arg @ref LL_DMA_CHANNEL_1
689   *         @arg @ref LL_DMA_CHANNEL_2
690   *         @arg @ref LL_DMA_CHANNEL_3
691   *         @arg @ref LL_DMA_CHANNEL_4 (*)
692   *         @arg @ref LL_DMA_CHANNEL_5 (*)
693   * @note (*) Availability depends on devices
694   * @retval Returned value can be one of the following values:
695   *         @arg @ref LL_DMA_MEMORY_INCREMENT
696   *         @arg @ref LL_DMA_MEMORY_NOINCREMENT
697   */
LL_DMA_GetMemoryIncMode(DMA_TypeDef * DMAx,uint32_t Channel)698 __STATIC_INLINE uint32_t LL_DMA_GetMemoryIncMode(DMA_TypeDef *DMAx, uint32_t Channel)
699 {
700   uint32_t dma_base_addr = (uint32_t)DMAx;
701   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR,
702                    DMA_CCR_MINC));
703 }
704 
705 /**
706   * @brief  Set Peripheral size.
707   * @rmtoll CCR          PSIZE         LL_DMA_SetPeriphSize
708   * @param  DMAx DMAx Instance
709   * @param  Channel This parameter can be one of the following values:
710   *         @arg @ref LL_DMA_CHANNEL_1
711   *         @arg @ref LL_DMA_CHANNEL_2
712   *         @arg @ref LL_DMA_CHANNEL_3
713   *         @arg @ref LL_DMA_CHANNEL_4 (*)
714   *         @arg @ref LL_DMA_CHANNEL_5 (*)
715   * @note (*) Availability depends on devices
716   * @param  PeriphOrM2MSrcDataSize This parameter can be one of the following values:
717   *         @arg @ref LL_DMA_PDATAALIGN_BYTE
718   *         @arg @ref LL_DMA_PDATAALIGN_HALFWORD
719   *         @arg @ref LL_DMA_PDATAALIGN_WORD
720   * @retval None
721   */
LL_DMA_SetPeriphSize(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t PeriphOrM2MSrcDataSize)722 __STATIC_INLINE void LL_DMA_SetPeriphSize(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphOrM2MSrcDataSize)
723 {
724   uint32_t dma_base_addr = (uint32_t)DMAx;
725   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR, DMA_CCR_PSIZE,
726              PeriphOrM2MSrcDataSize);
727 }
728 
729 /**
730   * @brief  Get Peripheral size.
731   * @rmtoll CCR          PSIZE         LL_DMA_GetPeriphSize
732   * @param  DMAx DMAx Instance
733   * @param  Channel This parameter can be one of the following values:
734   *         @arg @ref LL_DMA_CHANNEL_1
735   *         @arg @ref LL_DMA_CHANNEL_2
736   *         @arg @ref LL_DMA_CHANNEL_3
737   *         @arg @ref LL_DMA_CHANNEL_4 (*)
738   *         @arg @ref LL_DMA_CHANNEL_5 (*)
739   * @note (*) Availability depends on devices
740   * @retval Returned value can be one of the following values:
741   *         @arg @ref LL_DMA_PDATAALIGN_BYTE
742   *         @arg @ref LL_DMA_PDATAALIGN_HALFWORD
743   *         @arg @ref LL_DMA_PDATAALIGN_WORD
744   */
LL_DMA_GetPeriphSize(DMA_TypeDef * DMAx,uint32_t Channel)745 __STATIC_INLINE uint32_t LL_DMA_GetPeriphSize(DMA_TypeDef *DMAx, uint32_t Channel)
746 {
747   uint32_t dma_base_addr = (uint32_t)DMAx;
748   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR,
749                    DMA_CCR_PSIZE));
750 }
751 
752 /**
753   * @brief  Set Memory size.
754   * @rmtoll CCR          MSIZE         LL_DMA_SetMemorySize
755   * @param  DMAx DMAx Instance
756   * @param  Channel This parameter can be one of the following values:
757   *         @arg @ref LL_DMA_CHANNEL_1
758   *         @arg @ref LL_DMA_CHANNEL_2
759   *         @arg @ref LL_DMA_CHANNEL_3
760   *         @arg @ref LL_DMA_CHANNEL_4 (*)
761   *         @arg @ref LL_DMA_CHANNEL_5 (*)
762   * @note (*) Availability depends on devices
763   * @param  MemoryOrM2MDstDataSize This parameter can be one of the following values:
764   *         @arg @ref LL_DMA_MDATAALIGN_BYTE
765   *         @arg @ref LL_DMA_MDATAALIGN_HALFWORD
766   *         @arg @ref LL_DMA_MDATAALIGN_WORD
767   * @retval None
768   */
LL_DMA_SetMemorySize(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t MemoryOrM2MDstDataSize)769 __STATIC_INLINE void LL_DMA_SetMemorySize(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryOrM2MDstDataSize)
770 {
771   uint32_t dma_base_addr = (uint32_t)DMAx;
772   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR, DMA_CCR_MSIZE,
773              MemoryOrM2MDstDataSize);
774 }
775 
776 /**
777   * @brief  Get Memory size.
778   * @rmtoll CCR          MSIZE         LL_DMA_GetMemorySize
779   * @param  DMAx DMAx Instance
780   * @param  Channel This parameter can be one of the following values:
781   *         @arg @ref LL_DMA_CHANNEL_1
782   *         @arg @ref LL_DMA_CHANNEL_2
783   *         @arg @ref LL_DMA_CHANNEL_3
784   *         @arg @ref LL_DMA_CHANNEL_4 (*)
785   *         @arg @ref LL_DMA_CHANNEL_5 (*)
786   * @note (*) Availability depends on devices
787   * @retval Returned value can be one of the following values:
788   *         @arg @ref LL_DMA_MDATAALIGN_BYTE
789   *         @arg @ref LL_DMA_MDATAALIGN_HALFWORD
790   *         @arg @ref LL_DMA_MDATAALIGN_WORD
791   */
LL_DMA_GetMemorySize(DMA_TypeDef * DMAx,uint32_t Channel)792 __STATIC_INLINE uint32_t LL_DMA_GetMemorySize(DMA_TypeDef *DMAx, uint32_t Channel)
793 {
794   uint32_t dma_base_addr = (uint32_t)DMAx;
795   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR,
796                    DMA_CCR_MSIZE));
797 }
798 
799 /**
800   * @brief  Set Channel priority level.
801   * @rmtoll CCR          PL            LL_DMA_SetChannelPriorityLevel
802   * @param  DMAx DMAx Instance
803   * @param  Channel This parameter can be one of the following values:
804   *         @arg @ref LL_DMA_CHANNEL_1
805   *         @arg @ref LL_DMA_CHANNEL_2
806   *         @arg @ref LL_DMA_CHANNEL_3
807   *         @arg @ref LL_DMA_CHANNEL_4 (*)
808   *         @arg @ref LL_DMA_CHANNEL_5 (*)
809   * @note (*) Availability depends on devices
810   * @param  Priority This parameter can be one of the following values:
811   *         @arg @ref LL_DMA_PRIORITY_LOW
812   *         @arg @ref LL_DMA_PRIORITY_MEDIUM
813   *         @arg @ref LL_DMA_PRIORITY_HIGH
814   *         @arg @ref LL_DMA_PRIORITY_VERYHIGH
815   * @retval None
816   */
LL_DMA_SetChannelPriorityLevel(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Priority)817 __STATIC_INLINE void LL_DMA_SetChannelPriorityLevel(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Priority)
818 {
819   uint32_t dma_base_addr = (uint32_t)DMAx;
820   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR, DMA_CCR_PL,
821              Priority);
822 }
823 
824 /**
825   * @brief  Get Channel priority level.
826   * @rmtoll CCR          PL            LL_DMA_GetChannelPriorityLevel
827   * @param  DMAx DMAx Instance
828   * @param  Channel This parameter can be one of the following values:
829   *         @arg @ref LL_DMA_CHANNEL_1
830   *         @arg @ref LL_DMA_CHANNEL_2
831   *         @arg @ref LL_DMA_CHANNEL_3
832   *         @arg @ref LL_DMA_CHANNEL_4 (*)
833   *         @arg @ref LL_DMA_CHANNEL_5 (*)
834   * @note (*) Availability depends on devices
835   * @retval Returned value can be one of the following values:
836   *         @arg @ref LL_DMA_PRIORITY_LOW
837   *         @arg @ref LL_DMA_PRIORITY_MEDIUM
838   *         @arg @ref LL_DMA_PRIORITY_HIGH
839   *         @arg @ref LL_DMA_PRIORITY_VERYHIGH
840   */
LL_DMA_GetChannelPriorityLevel(DMA_TypeDef * DMAx,uint32_t Channel)841 __STATIC_INLINE uint32_t LL_DMA_GetChannelPriorityLevel(DMA_TypeDef *DMAx, uint32_t Channel)
842 {
843   uint32_t dma_base_addr = (uint32_t)DMAx;
844   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR,
845                    DMA_CCR_PL));
846 }
847 
848 /**
849   * @brief  Set Number of data to transfer.
850   * @note   This action has no effect if
851   *         channel is enabled.
852   * @rmtoll CNDTR        NDT           LL_DMA_SetDataLength
853   * @param  DMAx DMAx Instance
854   * @param  Channel This parameter can be one of the following values:
855   *         @arg @ref LL_DMA_CHANNEL_1
856   *         @arg @ref LL_DMA_CHANNEL_2
857   *         @arg @ref LL_DMA_CHANNEL_3
858   *         @arg @ref LL_DMA_CHANNEL_4 (*)
859   *         @arg @ref LL_DMA_CHANNEL_5 (*)
860   * @note (*) Availability depends on devices
861   * @param  NbData Between Min_Data = 0 and Max_Data = 0x0000FFFF
862   * @retval None
863   */
LL_DMA_SetDataLength(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t NbData)864 __STATIC_INLINE void LL_DMA_SetDataLength(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t NbData)
865 {
866   uint32_t dma_base_addr = (uint32_t)DMAx;
867   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CNDTR,
868              DMA_CNDTR_NDT, NbData);
869 }
870 
871 /**
872   * @brief  Get Number of data to transfer.
873   * @note   Once the channel is enabled, the return value indicate the
874   *         remaining bytes to be transmitted.
875   * @rmtoll CNDTR        NDT           LL_DMA_GetDataLength
876   * @param  DMAx DMAx Instance
877   * @param  Channel This parameter can be one of the following values:
878   *         @arg @ref LL_DMA_CHANNEL_1
879   *         @arg @ref LL_DMA_CHANNEL_2
880   *         @arg @ref LL_DMA_CHANNEL_3
881   *         @arg @ref LL_DMA_CHANNEL_4 (*)
882   *         @arg @ref LL_DMA_CHANNEL_5 (*)
883   * @note (*) Availability depends on devices
884   * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
885   */
LL_DMA_GetDataLength(DMA_TypeDef * DMAx,uint32_t Channel)886 __STATIC_INLINE uint32_t LL_DMA_GetDataLength(DMA_TypeDef *DMAx, uint32_t Channel)
887 {
888   uint32_t dma_base_addr = (uint32_t)DMAx;
889   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CNDTR,
890                    DMA_CNDTR_NDT));
891 }
892 
893 /**
894   * @brief  Configure the Source and Destination addresses.
895   * @note   This API must not be called when the DMA channel is enabled.
896   * @note   Each peripheral using DMA provides an API to get directly the register address (LL_PPP_DMA_GetRegAddr).
897   * @rmtoll CPAR         PA            LL_DMA_ConfigAddresses\n
898   *         CMAR         MA            LL_DMA_ConfigAddresses
899   * @param  DMAx DMAx Instance
900   * @param  Channel This parameter can be one of the following values:
901   *         @arg @ref LL_DMA_CHANNEL_1
902   *         @arg @ref LL_DMA_CHANNEL_2
903   *         @arg @ref LL_DMA_CHANNEL_3
904   *         @arg @ref LL_DMA_CHANNEL_4 (*)
905   *         @arg @ref LL_DMA_CHANNEL_5 (*)
906   * @note (*) Availability depends on devices
907   * @param  SrcAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
908   * @param  DstAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
909   * @param  Direction This parameter can be one of the following values:
910   *         @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
911   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
912   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
913   * @retval None
914   */
LL_DMA_ConfigAddresses(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcAddress,uint32_t DstAddress,uint32_t Direction)915 __STATIC_INLINE void LL_DMA_ConfigAddresses(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcAddress,
916                                             uint32_t DstAddress, uint32_t Direction)
917 {
918   uint32_t dma_base_addr = (uint32_t)DMAx;
919   /* Direction Memory to Periph */
920   if (Direction == LL_DMA_DIRECTION_MEMORY_TO_PERIPH)
921   {
922     WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CMAR, SrcAddress);
923     WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CPAR, DstAddress);
924   }
925   /* Direction Periph to Memory and Memory to Memory */
926   else
927   {
928     WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CPAR, SrcAddress);
929     WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CMAR, DstAddress);
930   }
931 }
932 
933 /**
934   * @brief  Set the Memory address.
935   * @note   Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
936   * @note   This API must not be called when the DMA channel is enabled.
937   * @rmtoll CMAR         MA            LL_DMA_SetMemoryAddress
938   * @param  DMAx DMAx Instance
939   * @param  Channel This parameter can be one of the following values:
940   *         @arg @ref LL_DMA_CHANNEL_1
941   *         @arg @ref LL_DMA_CHANNEL_2
942   *         @arg @ref LL_DMA_CHANNEL_3
943   *         @arg @ref LL_DMA_CHANNEL_4 (*)
944   *         @arg @ref LL_DMA_CHANNEL_5 (*)
945   * @note (*) Availability depends on devices
946   * @param  MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
947   * @retval None
948   */
LL_DMA_SetMemoryAddress(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t MemoryAddress)949 __STATIC_INLINE void LL_DMA_SetMemoryAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
950 {
951   uint32_t dma_base_addr = (uint32_t)DMAx;
952   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CMAR, MemoryAddress);
953 }
954 
955 /**
956   * @brief  Set the Peripheral address.
957   * @note   Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
958   * @note   This API must not be called when the DMA channel is enabled.
959   * @rmtoll CPAR         PA            LL_DMA_SetPeriphAddress
960   * @param  DMAx DMAx Instance
961   * @param  Channel This parameter can be one of the following values:
962   *         @arg @ref LL_DMA_CHANNEL_1
963   *         @arg @ref LL_DMA_CHANNEL_2
964   *         @arg @ref LL_DMA_CHANNEL_3
965   *         @arg @ref LL_DMA_CHANNEL_4 (*)
966   *         @arg @ref LL_DMA_CHANNEL_5 (*)
967   * @note (*) Availability depends on devices
968   * @param  PeriphAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
969   * @retval None
970   */
LL_DMA_SetPeriphAddress(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t PeriphAddress)971 __STATIC_INLINE void LL_DMA_SetPeriphAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphAddress)
972 {
973   uint32_t dma_base_addr = (uint32_t)DMAx;
974   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CPAR, PeriphAddress);
975 }
976 
977 /**
978   * @brief  Get Memory address.
979   * @note   Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
980   * @rmtoll CMAR         MA            LL_DMA_GetMemoryAddress
981   * @param  DMAx DMAx Instance
982   * @param  Channel This parameter can be one of the following values:
983   *         @arg @ref LL_DMA_CHANNEL_1
984   *         @arg @ref LL_DMA_CHANNEL_2
985   *         @arg @ref LL_DMA_CHANNEL_3
986   *         @arg @ref LL_DMA_CHANNEL_4 (*)
987   *         @arg @ref LL_DMA_CHANNEL_5 (*)
988   * @note (*) Availability depends on devices
989   * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
990   */
LL_DMA_GetMemoryAddress(DMA_TypeDef * DMAx,uint32_t Channel)991 __STATIC_INLINE uint32_t LL_DMA_GetMemoryAddress(DMA_TypeDef *DMAx, uint32_t Channel)
992 {
993   uint32_t dma_base_addr = (uint32_t)DMAx;
994   return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CMAR));
995 }
996 
997 /**
998   * @brief  Get Peripheral address.
999   * @note   Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
1000   * @rmtoll CPAR         PA            LL_DMA_GetPeriphAddress
1001   * @param  DMAx DMAx Instance
1002   * @param  Channel This parameter can be one of the following values:
1003   *         @arg @ref LL_DMA_CHANNEL_1
1004   *         @arg @ref LL_DMA_CHANNEL_2
1005   *         @arg @ref LL_DMA_CHANNEL_3
1006   *         @arg @ref LL_DMA_CHANNEL_4 (*)
1007   *         @arg @ref LL_DMA_CHANNEL_5 (*)
1008   * @note (*) Availability depends on devices
1009   * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
1010   */
LL_DMA_GetPeriphAddress(DMA_TypeDef * DMAx,uint32_t Channel)1011 __STATIC_INLINE uint32_t LL_DMA_GetPeriphAddress(DMA_TypeDef *DMAx, uint32_t Channel)
1012 {
1013   uint32_t dma_base_addr = (uint32_t)DMAx;
1014   return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CPAR));
1015 }
1016 
1017 /**
1018   * @brief  Set the Memory to Memory Source address.
1019   * @note   Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
1020   * @note   This API must not be called when the DMA channel is enabled.
1021   * @rmtoll CPAR         PA            LL_DMA_SetM2MSrcAddress
1022   * @param  DMAx DMAx Instance
1023   * @param  Channel This parameter can be one of the following values:
1024   *         @arg @ref LL_DMA_CHANNEL_1
1025   *         @arg @ref LL_DMA_CHANNEL_2
1026   *         @arg @ref LL_DMA_CHANNEL_3
1027   *         @arg @ref LL_DMA_CHANNEL_4 (*)
1028   *         @arg @ref LL_DMA_CHANNEL_5 (*)
1029   * @note (*) Availability depends on devices
1030   * @param  MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
1031   * @retval None
1032   */
LL_DMA_SetM2MSrcAddress(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t MemoryAddress)1033 __STATIC_INLINE void LL_DMA_SetM2MSrcAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
1034 {
1035   uint32_t dma_base_addr = (uint32_t)DMAx;
1036   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CPAR, MemoryAddress);
1037 }
1038 
1039 /**
1040   * @brief  Set the Memory to Memory Destination address.
1041   * @note   Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
1042   * @note   This API must not be called when the DMA channel is enabled.
1043   * @rmtoll CMAR         MA            LL_DMA_SetM2MDstAddress
1044   * @param  DMAx DMAx Instance
1045   * @param  Channel This parameter can be one of the following values:
1046   *         @arg @ref LL_DMA_CHANNEL_1
1047   *         @arg @ref LL_DMA_CHANNEL_2
1048   *         @arg @ref LL_DMA_CHANNEL_3
1049   *         @arg @ref LL_DMA_CHANNEL_4 (*)
1050   *         @arg @ref LL_DMA_CHANNEL_5 (*)
1051   * @note (*) Availability depends on devices
1052   * @param  MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
1053   * @retval None
1054   */
LL_DMA_SetM2MDstAddress(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t MemoryAddress)1055 __STATIC_INLINE void LL_DMA_SetM2MDstAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
1056 {
1057   uint32_t dma_base_addr = (uint32_t)DMAx;
1058   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CMAR, MemoryAddress);
1059 }
1060 
1061 /**
1062   * @brief  Get the Memory to Memory Source address.
1063   * @note   Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
1064   * @rmtoll CPAR         PA            LL_DMA_GetM2MSrcAddress
1065   * @param  DMAx DMAx Instance
1066   * @param  Channel This parameter can be one of the following values:
1067   *         @arg @ref LL_DMA_CHANNEL_1
1068   *         @arg @ref LL_DMA_CHANNEL_2
1069   *         @arg @ref LL_DMA_CHANNEL_3
1070   *         @arg @ref LL_DMA_CHANNEL_4 (*)
1071   *         @arg @ref LL_DMA_CHANNEL_5 (*)
1072   * @note (*) Availability depends on devices
1073   * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
1074   */
LL_DMA_GetM2MSrcAddress(DMA_TypeDef * DMAx,uint32_t Channel)1075 __STATIC_INLINE uint32_t LL_DMA_GetM2MSrcAddress(DMA_TypeDef *DMAx, uint32_t Channel)
1076 {
1077   uint32_t dma_base_addr = (uint32_t)DMAx;
1078   return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CPAR));
1079 }
1080 
1081 /**
1082   * @brief  Get the Memory to Memory Destination address.
1083   * @note   Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
1084   * @rmtoll CMAR         MA            LL_DMA_GetM2MDstAddress
1085   * @param  DMAx DMAx Instance
1086   * @param  Channel This parameter can be one of the following values:
1087   *         @arg @ref LL_DMA_CHANNEL_1
1088   *         @arg @ref LL_DMA_CHANNEL_2
1089   *         @arg @ref LL_DMA_CHANNEL_3
1090   *         @arg @ref LL_DMA_CHANNEL_4 (*)
1091   *         @arg @ref LL_DMA_CHANNEL_5 (*)
1092   * @note (*) Availability depends on devices
1093   * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
1094   */
LL_DMA_GetM2MDstAddress(DMA_TypeDef * DMAx,uint32_t Channel)1095 __STATIC_INLINE uint32_t LL_DMA_GetM2MDstAddress(DMA_TypeDef *DMAx, uint32_t Channel)
1096 {
1097   uint32_t dma_base_addr = (uint32_t)DMAx;
1098   return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CMAR));
1099 }
1100 
1101 /**
1102   * @brief  Set DMA request for DMA Channels on DMAMUX Channel x.
1103   * @note   DMAMUX channel 0 to 4 are mapped to DMA1 channel 1 to 5.
1104   * @rmtoll CxCR         DMAREQ_ID     LL_DMA_SetPeriphRequest
1105   * @param  DMAx DMAx Instance
1106   * @param  Channel This parameter can be one of the following values:
1107   *         @arg @ref LL_DMA_CHANNEL_1
1108   *         @arg @ref LL_DMA_CHANNEL_2
1109   *         @arg @ref LL_DMA_CHANNEL_3
1110   *         @arg @ref LL_DMA_CHANNEL_4 (*)
1111   *         @arg @ref LL_DMA_CHANNEL_5 (*)
1112   * @param  Request This parameter can be one of the following values:
1113   *         @arg @ref LL_DMAMUX_REQ_MEM2MEM
1114   *         @arg @ref LL_DMAMUX_REQ_GENERATOR0
1115   *         @arg @ref LL_DMAMUX_REQ_GENERATOR1
1116   *         @arg @ref LL_DMAMUX_REQ_GENERATOR2
1117   *         @arg @ref LL_DMAMUX_REQ_GENERATOR3
1118   *         @arg @ref LL_DMAMUX_REQ_ADC1
1119   *         @arg @ref LL_DMAMUX_REQ_I2C1_RX
1120   *         @arg @ref LL_DMAMUX_REQ_I2C1_TX
1121   *         @arg @ref LL_DMAMUX_REQ_I2C2_RX (*)
1122   *         @arg @ref LL_DMAMUX_REQ_I2C2_TX (*)
1123   *         @arg @ref LL_DMAMUX_REQ_SPI1_RX
1124   *         @arg @ref LL_DMAMUX_REQ_SPI1_TX
1125   *         @arg @ref LL_DMAMUX_REQ_SPI2_RX (*)
1126   *         @arg @ref LL_DMAMUX_REQ_SPI2_TX (*)
1127   *         @arg @ref LL_DMAMUX_REQ_TIM1_CH1
1128   *         @arg @ref LL_DMAMUX_REQ_TIM1_CH2
1129   *         @arg @ref LL_DMAMUX_REQ_TIM1_CH3
1130   *         @arg @ref LL_DMAMUX_REQ_TIM1_CH4
1131   *         @arg @ref LL_DMAMUX_REQ_TIM1_TRIG_COM
1132   *         @arg @ref LL_DMAMUX_REQ_TIM1_UP
1133   *         @arg @ref LL_DMAMUX_REQ_TIM2_CH1 (*)
1134   *         @arg @ref LL_DMAMUX_REQ_TIM2_CH2 (*)
1135   *         @arg @ref LL_DMAMUX_REQ_TIM2_CH3 (*)
1136   *         @arg @ref LL_DMAMUX_REQ_TIM2_CH4 (*)
1137   *         @arg @ref LL_DMAMUX_REQ_TIM2_TRIG_COM (*)
1138   *         @arg @ref LL_DMAMUX_REQ_TIM2_UP (*)
1139   *         @arg @ref LL_DMAMUX_REQ_TIM3_CH1
1140   *         @arg @ref LL_DMAMUX_REQ_TIM3_CH2
1141   *         @arg @ref LL_DMAMUX_REQ_TIM3_CH3
1142   *         @arg @ref LL_DMAMUX_REQ_TIM3_CH4
1143   *         @arg @ref LL_DMAMUX_REQ_TIM3_TRIG
1144   *         @arg @ref LL_DMAMUX_REQ_TIM3_UP
1145   *         @arg @ref LL_DMAMUX_REQ_TIM16_CH1
1146   *         @arg @ref LL_DMAMUX_REQ_TIM16_TRIG_COM
1147   *         @arg @ref LL_DMAMUX_REQ_TIM16_UP
1148   *         @arg @ref LL_DMAMUX_REQ_TIM17_CH1
1149   *         @arg @ref LL_DMAMUX_REQ_TIM17_TRIG_COM
1150   *         @arg @ref LL_DMAMUX_REQ_TIM17_UP
1151   *         @arg @ref LL_DMAMUX_REQ_USART1_RX
1152   *         @arg @ref LL_DMAMUX_REQ_USART1_TX
1153   *         @arg @ref LL_DMAMUX_REQ_USART2_RX
1154   *         @arg @ref LL_DMAMUX_REQ_USART2_TX
1155   * @note (*) Availability depends on devices
1156   * @retval None
1157   */
LL_DMA_SetPeriphRequest(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Request)1158 __STATIC_INLINE void LL_DMA_SetPeriphRequest(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Request)
1159 {
1160   (void)(DMAx);
1161   MODIFY_REG(((DMAMUX_Channel_TypeDef *)((uint32_t)DMAMUX1_Channel0 + (DMAMUX_CCR_SIZE * (Channel - 1UL))))->CCR,
1162              DMAMUX_CxCR_DMAREQ_ID, Request);
1163 }
1164 
1165 /**
1166   * @brief  Get DMA request for DMA Channels on DMAMUX Channel x.
1167   * @note   DMAMUX channel 0 to 4 are mapped to DMA1 channel 1 to 5.
1168   * @rmtoll CxCR         DMAREQ_ID     LL_DMA_GetPeriphRequest
1169   * @param  DMAx DMAx Instance
1170   * @param  Channel This parameter can be one of the following values:
1171   *         @arg @ref LL_DMA_CHANNEL_1
1172   *         @arg @ref LL_DMA_CHANNEL_2
1173   *         @arg @ref LL_DMA_CHANNEL_3
1174   *         @arg @ref LL_DMA_CHANNEL_4 (*)
1175   *         @arg @ref LL_DMA_CHANNEL_5 (*)
1176   * @retval Returned value can be one of the following values:
1177   *         @arg @ref LL_DMAMUX_REQ_MEM2MEM
1178   *         @arg @ref LL_DMAMUX_REQ_GENERATOR0
1179   *         @arg @ref LL_DMAMUX_REQ_GENERATOR1
1180   *         @arg @ref LL_DMAMUX_REQ_GENERATOR2
1181   *         @arg @ref LL_DMAMUX_REQ_GENERATOR3
1182   *         @arg @ref LL_DMAMUX_REQ_ADC1
1183   *         @arg @ref LL_DMAMUX_REQ_I2C1_RX
1184   *         @arg @ref LL_DMAMUX_REQ_I2C1_TX
1185   *         @arg @ref LL_DMAMUX_REQ_I2C2_RX (*)
1186   *         @arg @ref LL_DMAMUX_REQ_I2C2_TX (*)
1187   *         @arg @ref LL_DMAMUX_REQ_SPI1_RX
1188   *         @arg @ref LL_DMAMUX_REQ_SPI1_TX
1189   *         @arg @ref LL_DMAMUX_REQ_SPI2_RX (*)
1190   *         @arg @ref LL_DMAMUX_REQ_SPI2_TX (*)
1191   *         @arg @ref LL_DMAMUX_REQ_TIM1_CH1
1192   *         @arg @ref LL_DMAMUX_REQ_TIM1_CH2
1193   *         @arg @ref LL_DMAMUX_REQ_TIM1_CH3
1194   *         @arg @ref LL_DMAMUX_REQ_TIM1_CH4
1195   *         @arg @ref LL_DMAMUX_REQ_TIM1_TRIG_COM
1196   *         @arg @ref LL_DMAMUX_REQ_TIM1_UP
1197   *         @arg @ref LL_DMAMUX_REQ_TIM2_CH1 (*)
1198   *         @arg @ref LL_DMAMUX_REQ_TIM2_CH2 (*)
1199   *         @arg @ref LL_DMAMUX_REQ_TIM2_CH3 (*)
1200   *         @arg @ref LL_DMAMUX_REQ_TIM2_CH4 (*)
1201   *         @arg @ref LL_DMAMUX_REQ_TIM2_TRIG_COM (*)
1202   *         @arg @ref LL_DMAMUX_REQ_TIM2_UP (*)
1203   *         @arg @ref LL_DMAMUX_REQ_TIM3_CH1
1204   *         @arg @ref LL_DMAMUX_REQ_TIM3_CH2
1205   *         @arg @ref LL_DMAMUX_REQ_TIM3_CH3
1206   *         @arg @ref LL_DMAMUX_REQ_TIM3_CH4
1207   *         @arg @ref LL_DMAMUX_REQ_TIM3_TRIG
1208   *         @arg @ref LL_DMAMUX_REQ_TIM3_UP
1209   *         @arg @ref LL_DMAMUX_REQ_TIM16_CH1
1210   *         @arg @ref LL_DMAMUX_REQ_TIM16_TRIG_COM
1211   *         @arg @ref LL_DMAMUX_REQ_TIM16_UP
1212   *         @arg @ref LL_DMAMUX_REQ_TIM17_CH1
1213   *         @arg @ref LL_DMAMUX_REQ_TIM17_TRIG_COM
1214   *         @arg @ref LL_DMAMUX_REQ_TIM17_UP
1215   *         @arg @ref LL_DMAMUX_REQ_USART1_RX
1216   *         @arg @ref LL_DMAMUX_REQ_USART1_TX
1217   *         @arg @ref LL_DMAMUX_REQ_USART2_RX
1218   *         @arg @ref LL_DMAMUX_REQ_USART2_TX
1219   * @note (*) Availability depends on devices
1220   */
LL_DMA_GetPeriphRequest(DMA_TypeDef * DMAx,uint32_t Channel)1221 __STATIC_INLINE uint32_t LL_DMA_GetPeriphRequest(DMA_TypeDef *DMAx, uint32_t Channel)
1222 {
1223   (void)(DMAx);
1224   return (READ_BIT(((DMAMUX_Channel_TypeDef *)(((uint32_t)DMAMUX1_Channel0 + (DMAMUX_CCR_SIZE * \
1225                                                                               (Channel - 1UL)))))->CCR,
1226                    DMAMUX_CxCR_DMAREQ_ID));
1227 }
1228 
1229 /**
1230   * @}
1231   */
1232 
1233 /** @defgroup DMA_LL_EF_FLAG_Management FLAG_Management
1234   * @{
1235   */
1236 
1237 /**
1238   * @brief  Get Channel 1 global interrupt flag.
1239   * @rmtoll ISR          GIF1          LL_DMA_IsActiveFlag_GI1
1240   * @param  DMAx DMAx Instance
1241   * @retval State of bit (1 or 0).
1242   */
LL_DMA_IsActiveFlag_GI1(DMA_TypeDef * DMAx)1243 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI1(DMA_TypeDef *DMAx)
1244 {
1245   return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF1) == (DMA_ISR_GIF1)) ? 1UL : 0UL);
1246 }
1247 
1248 /**
1249   * @brief  Get Channel 2 global interrupt flag.
1250   * @rmtoll ISR          GIF2          LL_DMA_IsActiveFlag_GI2
1251   * @param  DMAx DMAx Instance
1252   * @retval State of bit (1 or 0).
1253   */
LL_DMA_IsActiveFlag_GI2(DMA_TypeDef * DMAx)1254 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI2(DMA_TypeDef *DMAx)
1255 {
1256   return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF2) == (DMA_ISR_GIF2)) ? 1UL : 0UL);
1257 }
1258 
1259 /**
1260   * @brief  Get Channel 3 global interrupt flag.
1261   * @rmtoll ISR          GIF3          LL_DMA_IsActiveFlag_GI3
1262   * @param  DMAx DMAx Instance
1263   * @retval State of bit (1 or 0).
1264   */
LL_DMA_IsActiveFlag_GI3(DMA_TypeDef * DMAx)1265 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI3(DMA_TypeDef *DMAx)
1266 {
1267   return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF3) == (DMA_ISR_GIF3)) ? 1UL : 0UL);
1268 }
1269 
1270 #if defined(DMA_ISR_GIF4)
1271 /**
1272   * @brief  Get Channel 4 global interrupt flag.
1273   * @rmtoll ISR          GIF4          LL_DMA_IsActiveFlag_GI4
1274   * @param  DMAx DMAx Instance
1275   * @retval State of bit (1 or 0).
1276   */
LL_DMA_IsActiveFlag_GI4(DMA_TypeDef * DMAx)1277 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI4(DMA_TypeDef *DMAx)
1278 {
1279   return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF4) == (DMA_ISR_GIF4)) ? 1UL : 0UL);
1280 }
1281 #endif /* DMA_ISR_GIF4 */
1282 
1283 #if defined(DMA_ISR_GIF5)
1284 /**
1285   * @brief  Get Channel 5 global interrupt flag.
1286   * @rmtoll ISR          GIF5          LL_DMA_IsActiveFlag_GI5
1287   * @param  DMAx DMAx Instance
1288   * @retval State of bit (1 or 0).
1289   */
LL_DMA_IsActiveFlag_GI5(DMA_TypeDef * DMAx)1290 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI5(DMA_TypeDef *DMAx)
1291 {
1292   return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF5) == (DMA_ISR_GIF5)) ? 1UL : 0UL);
1293 }
1294 #endif /* DMA_ISR_GIF5 */
1295 
1296 /**
1297   * @brief  Get Channel 1 transfer complete flag.
1298   * @rmtoll ISR          TCIF1         LL_DMA_IsActiveFlag_TC1
1299   * @param  DMAx DMAx Instance
1300   * @retval State of bit (1 or 0).
1301   */
LL_DMA_IsActiveFlag_TC1(DMA_TypeDef * DMAx)1302 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC1(DMA_TypeDef *DMAx)
1303 {
1304   return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF1) == (DMA_ISR_TCIF1)) ? 1UL : 0UL);
1305 }
1306 
1307 /**
1308   * @brief  Get Channel 2 transfer complete flag.
1309   * @rmtoll ISR          TCIF2         LL_DMA_IsActiveFlag_TC2
1310   * @param  DMAx DMAx Instance
1311   * @retval State of bit (1 or 0).
1312   */
LL_DMA_IsActiveFlag_TC2(DMA_TypeDef * DMAx)1313 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC2(DMA_TypeDef *DMAx)
1314 {
1315   return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF2) == (DMA_ISR_TCIF2)) ? 1UL : 0UL);
1316 }
1317 
1318 /**
1319   * @brief  Get Channel 3 transfer complete flag.
1320   * @rmtoll ISR          TCIF3         LL_DMA_IsActiveFlag_TC3
1321   * @param  DMAx DMAx Instance
1322   * @retval State of bit (1 or 0).
1323   */
LL_DMA_IsActiveFlag_TC3(DMA_TypeDef * DMAx)1324 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC3(DMA_TypeDef *DMAx)
1325 {
1326   return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF3) == (DMA_ISR_TCIF3)) ? 1UL : 0UL);
1327 }
1328 
1329 #if defined(DMA_ISR_TCIF4)
1330 /**
1331   * @brief  Get Channel 4 transfer complete flag.
1332   * @rmtoll ISR          TCIF4         LL_DMA_IsActiveFlag_TC4
1333   * @param  DMAx DMAx Instance
1334   * @retval State of bit (1 or 0).
1335   */
LL_DMA_IsActiveFlag_TC4(DMA_TypeDef * DMAx)1336 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC4(DMA_TypeDef *DMAx)
1337 {
1338   return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF4) == (DMA_ISR_TCIF4)) ? 1UL : 0UL);
1339 }
1340 #endif /* DMA_ISR_TCIF4 */
1341 
1342 #if defined(DMA_ISR_TCIF5)
1343 /**
1344   * @brief  Get Channel 5 transfer complete flag.
1345   * @rmtoll ISR          TCIF5         LL_DMA_IsActiveFlag_TC5
1346   * @param  DMAx DMAx Instance
1347   * @retval State of bit (1 or 0).
1348   */
LL_DMA_IsActiveFlag_TC5(DMA_TypeDef * DMAx)1349 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC5(DMA_TypeDef *DMAx)
1350 {
1351   return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF5) == (DMA_ISR_TCIF5)) ? 1UL : 0UL);
1352 }
1353 #endif /* DMA_ISR_TCIF5 */
1354 
1355 /**
1356   * @brief  Get Channel 1 half transfer flag.
1357   * @rmtoll ISR          HTIF1         LL_DMA_IsActiveFlag_HT1
1358   * @param  DMAx DMAx Instance
1359   * @retval State of bit (1 or 0).
1360   */
LL_DMA_IsActiveFlag_HT1(DMA_TypeDef * DMAx)1361 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT1(DMA_TypeDef *DMAx)
1362 {
1363   return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF1) == (DMA_ISR_HTIF1)) ? 1UL : 0UL);
1364 }
1365 
1366 /**
1367   * @brief  Get Channel 2 half transfer flag.
1368   * @rmtoll ISR          HTIF2         LL_DMA_IsActiveFlag_HT2
1369   * @param  DMAx DMAx Instance
1370   * @retval State of bit (1 or 0).
1371   */
LL_DMA_IsActiveFlag_HT2(DMA_TypeDef * DMAx)1372 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT2(DMA_TypeDef *DMAx)
1373 {
1374   return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF2) == (DMA_ISR_HTIF2)) ? 1UL : 0UL);
1375 }
1376 
1377 /**
1378   * @brief  Get Channel 3 half transfer flag.
1379   * @rmtoll ISR          HTIF3         LL_DMA_IsActiveFlag_HT3
1380   * @param  DMAx DMAx Instance
1381   * @retval State of bit (1 or 0).
1382   */
LL_DMA_IsActiveFlag_HT3(DMA_TypeDef * DMAx)1383 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT3(DMA_TypeDef *DMAx)
1384 {
1385   return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF3) == (DMA_ISR_HTIF3)) ? 1UL : 0UL);
1386 }
1387 
1388 #if defined(DMA_ISR_HTIF4)
1389 /**
1390   * @brief  Get Channel 4 half transfer flag.
1391   * @rmtoll ISR          HTIF4         LL_DMA_IsActiveFlag_HT4
1392   * @param  DMAx DMAx Instance
1393   * @retval State of bit (1 or 0).
1394   */
LL_DMA_IsActiveFlag_HT4(DMA_TypeDef * DMAx)1395 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT4(DMA_TypeDef *DMAx)
1396 {
1397   return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF4) == (DMA_ISR_HTIF4)) ? 1UL : 0UL);
1398 }
1399 #endif /* DMA_ISR_HTIF4 */
1400 
1401 #if defined(DMA_ISR_HTIF5)
1402 /**
1403   * @brief  Get Channel 5 half transfer flag.
1404   * @rmtoll ISR          HTIF5         LL_DMA_IsActiveFlag_HT5
1405   * @param  DMAx DMAx Instance
1406   * @retval State of bit (1 or 0).
1407   */
LL_DMA_IsActiveFlag_HT5(DMA_TypeDef * DMAx)1408 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT5(DMA_TypeDef *DMAx)
1409 {
1410   return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF5) == (DMA_ISR_HTIF5)) ? 1UL : 0UL);
1411 }
1412 #endif /* DMA_ISR_HTIF5 */
1413 
1414 /**
1415   * @brief  Get Channel 1 transfer error flag.
1416   * @rmtoll ISR          TEIF1         LL_DMA_IsActiveFlag_TE1
1417   * @param  DMAx DMAx Instance
1418   * @retval State of bit (1 or 0).
1419   */
LL_DMA_IsActiveFlag_TE1(DMA_TypeDef * DMAx)1420 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE1(DMA_TypeDef *DMAx)
1421 {
1422   return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF1) == (DMA_ISR_TEIF1)) ? 1UL : 0UL);
1423 }
1424 
1425 /**
1426   * @brief  Get Channel 2 transfer error flag.
1427   * @rmtoll ISR          TEIF2         LL_DMA_IsActiveFlag_TE2
1428   * @param  DMAx DMAx Instance
1429   * @retval State of bit (1 or 0).
1430   */
LL_DMA_IsActiveFlag_TE2(DMA_TypeDef * DMAx)1431 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE2(DMA_TypeDef *DMAx)
1432 {
1433   return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF2) == (DMA_ISR_TEIF2)) ? 1UL : 0UL);
1434 }
1435 
1436 /**
1437   * @brief  Get Channel 3 transfer error flag.
1438   * @rmtoll ISR          TEIF3         LL_DMA_IsActiveFlag_TE3
1439   * @param  DMAx DMAx Instance
1440   * @retval State of bit (1 or 0).
1441   */
LL_DMA_IsActiveFlag_TE3(DMA_TypeDef * DMAx)1442 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE3(DMA_TypeDef *DMAx)
1443 {
1444   return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF3) == (DMA_ISR_TEIF3)) ? 1UL : 0UL);
1445 }
1446 
1447 #if defined(DMA_ISR_TEIF4)
1448 /**
1449   * @brief  Get Channel 4 transfer error flag.
1450   * @rmtoll ISR          TEIF4         LL_DMA_IsActiveFlag_TE4
1451   * @param  DMAx DMAx Instance
1452   * @retval State of bit (1 or 0).
1453   */
LL_DMA_IsActiveFlag_TE4(DMA_TypeDef * DMAx)1454 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE4(DMA_TypeDef *DMAx)
1455 {
1456   return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF4) == (DMA_ISR_TEIF4)) ? 1UL : 0UL);
1457 }
1458 #endif /* DMA_ISR_TEIF4 */
1459 
1460 #if defined(DMA_ISR_TEIF5)
1461 /**
1462   * @brief  Get Channel 5 transfer error flag.
1463   * @rmtoll ISR          TEIF5         LL_DMA_IsActiveFlag_TE5
1464   * @param  DMAx DMAx Instance
1465   * @retval State of bit (1 or 0).
1466   */
LL_DMA_IsActiveFlag_TE5(DMA_TypeDef * DMAx)1467 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE5(DMA_TypeDef *DMAx)
1468 {
1469   return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF5) == (DMA_ISR_TEIF5)) ? 1UL : 0UL);
1470 }
1471 #endif /* DMA_ISR_TEIF5 */
1472 
1473 /**
1474   * @brief  Clear Channel 1 global interrupt flag.
1475   * @note Do not Clear Channel 1 global interrupt flag when the channel in ON.
1476     Instead clear specific flags transfer complete, half transfer & transfer
1477     error flag with LL_DMA_ClearFlag_TC1, LL_DMA_ClearFlag_HT1,
1478     LL_DMA_ClearFlag_TE1. bug id 2.4.1 in Product Errata Sheet.
1479   * @rmtoll IFCR         CGIF1         LL_DMA_ClearFlag_GI1
1480   * @param  DMAx DMAx Instance
1481   * @retval None
1482   */
LL_DMA_ClearFlag_GI1(DMA_TypeDef * DMAx)1483 __STATIC_INLINE void LL_DMA_ClearFlag_GI1(DMA_TypeDef *DMAx)
1484 {
1485   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF1);
1486 }
1487 
1488 /**
1489   * @brief  Clear Channel 2 global interrupt flag.
1490   * @note Do not Clear Channel 2 global interrupt flag when the channel in ON.
1491     Instead clear specific flags transfer complete, half transfer & transfer
1492     error flag with LL_DMA_ClearFlag_TC2, LL_DMA_ClearFlag_HT2,
1493     LL_DMA_ClearFlag_TE2. bug id 2.4.1 in Product Errata Sheet.
1494   * @rmtoll IFCR         CGIF2         LL_DMA_ClearFlag_GI2
1495   * @param  DMAx DMAx Instance
1496   * @retval None
1497   */
LL_DMA_ClearFlag_GI2(DMA_TypeDef * DMAx)1498 __STATIC_INLINE void LL_DMA_ClearFlag_GI2(DMA_TypeDef *DMAx)
1499 {
1500   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF2);
1501 }
1502 
1503 /**
1504   * @brief  Clear Channel 3 global interrupt flag.
1505   * @note Do not Clear Channel 3 global interrupt flag when the channel in ON.
1506     Instead clear specific flags transfer complete, half transfer & transfer
1507     error flag with LL_DMA_ClearFlag_TC3, LL_DMA_ClearFlag_HT3,
1508     LL_DMA_ClearFlag_TE3. bug id 2.4.1 in Product Errata Sheet.
1509   * @rmtoll IFCR         CGIF3         LL_DMA_ClearFlag_GI3
1510   * @param  DMAx DMAx Instance
1511   * @retval None
1512   */
LL_DMA_ClearFlag_GI3(DMA_TypeDef * DMAx)1513 __STATIC_INLINE void LL_DMA_ClearFlag_GI3(DMA_TypeDef *DMAx)
1514 {
1515   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF3);
1516 }
1517 
1518 #if defined(DMA_IFCR_CGIF4)
1519 /**
1520   * @brief  Clear Channel 4 global interrupt flag.
1521   * @note Do not Clear Channel 4 global interrupt flag when the channel in ON.
1522     Instead clear specific flags transfer complete, half transfer & transfer
1523     error flag with LL_DMA_ClearFlag_TC4, LL_DMA_ClearFlag_HT4,
1524     LL_DMA_ClearFlag_TE4. bug id 2.4.1 in Product Errata Sheet.
1525   * @rmtoll IFCR         CGIF4         LL_DMA_ClearFlag_GI4
1526   * @param  DMAx DMAx Instance
1527   * @retval None
1528   */
LL_DMA_ClearFlag_GI4(DMA_TypeDef * DMAx)1529 __STATIC_INLINE void LL_DMA_ClearFlag_GI4(DMA_TypeDef *DMAx)
1530 {
1531   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF4);
1532 }
1533 #endif /* DMA_IFCR_CGIF4 */
1534 
1535 #if defined(DMA_IFCR_CGIF5)
1536 /**
1537   * @brief  Clear Channel 5 global interrupt flag.
1538   * @note Do not Clear Channel 5 global interrupt flag when the channel in ON.
1539     Instead clear specific flags transfer complete, half transfer & transfer
1540     error flag with LL_DMA_ClearFlag_TC5, LL_DMA_ClearFlag_HT5,
1541     LL_DMA_ClearFlag_TE5. bug id 2.4.1 in Product Errata Sheet.
1542   * @rmtoll IFCR         CGIF5         LL_DMA_ClearFlag_GI5
1543   * @param  DMAx DMAx Instance
1544   * @retval None
1545   */
LL_DMA_ClearFlag_GI5(DMA_TypeDef * DMAx)1546 __STATIC_INLINE void LL_DMA_ClearFlag_GI5(DMA_TypeDef *DMAx)
1547 {
1548   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF5);
1549 }
1550 #endif /* DMA_IFCR_CGIF5 */
1551 
1552 /**
1553   * @brief  Clear Channel 1  transfer complete flag.
1554   * @rmtoll IFCR         CTCIF1        LL_DMA_ClearFlag_TC1
1555   * @param  DMAx DMAx Instance
1556   * @retval None
1557   */
LL_DMA_ClearFlag_TC1(DMA_TypeDef * DMAx)1558 __STATIC_INLINE void LL_DMA_ClearFlag_TC1(DMA_TypeDef *DMAx)
1559 {
1560   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF1);
1561 }
1562 
1563 /**
1564   * @brief  Clear Channel 2  transfer complete flag.
1565   * @rmtoll IFCR         CTCIF2        LL_DMA_ClearFlag_TC2
1566   * @param  DMAx DMAx Instance
1567   * @retval None
1568   */
LL_DMA_ClearFlag_TC2(DMA_TypeDef * DMAx)1569 __STATIC_INLINE void LL_DMA_ClearFlag_TC2(DMA_TypeDef *DMAx)
1570 {
1571   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF2);
1572 }
1573 
1574 /**
1575   * @brief  Clear Channel 3  transfer complete flag.
1576   * @rmtoll IFCR         CTCIF3        LL_DMA_ClearFlag_TC3
1577   * @param  DMAx DMAx Instance
1578   * @retval None
1579   */
LL_DMA_ClearFlag_TC3(DMA_TypeDef * DMAx)1580 __STATIC_INLINE void LL_DMA_ClearFlag_TC3(DMA_TypeDef *DMAx)
1581 {
1582   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF3);
1583 }
1584 
1585 #if defined(DMA_IFCR_CTCIF4)
1586 /**
1587   * @brief  Clear Channel 4  transfer complete flag.
1588   * @rmtoll IFCR         CTCIF4        LL_DMA_ClearFlag_TC4
1589   * @param  DMAx DMAx Instance
1590   * @retval None
1591   */
LL_DMA_ClearFlag_TC4(DMA_TypeDef * DMAx)1592 __STATIC_INLINE void LL_DMA_ClearFlag_TC4(DMA_TypeDef *DMAx)
1593 {
1594   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF4);
1595 }
1596 #endif /* DMA_IFCR_CTCIF4 */
1597 
1598 #if defined(DMA_IFCR_CTCIF5)
1599 /**
1600   * @brief  Clear Channel 5 transfer complete flag.
1601   * @rmtoll IFCR         CTCIF5        LL_DMA_ClearFlag_TC5
1602   * @param  DMAx DMAx Instance
1603   * @retval None
1604   */
LL_DMA_ClearFlag_TC5(DMA_TypeDef * DMAx)1605 __STATIC_INLINE void LL_DMA_ClearFlag_TC5(DMA_TypeDef *DMAx)
1606 {
1607   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF5);
1608 }
1609 #endif /* DMA_IFCR_CTCIF5 */
1610 
1611 /**
1612   * @brief  Clear Channel 1 half transfer flag.
1613   * @rmtoll IFCR         CHTIF1        LL_DMA_ClearFlag_HT1
1614   * @param  DMAx DMAx Instance
1615   * @retval None
1616   */
LL_DMA_ClearFlag_HT1(DMA_TypeDef * DMAx)1617 __STATIC_INLINE void LL_DMA_ClearFlag_HT1(DMA_TypeDef *DMAx)
1618 {
1619   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF1);
1620 }
1621 
1622 /**
1623   * @brief  Clear Channel 2 half transfer flag.
1624   * @rmtoll IFCR         CHTIF2        LL_DMA_ClearFlag_HT2
1625   * @param  DMAx DMAx Instance
1626   * @retval None
1627   */
LL_DMA_ClearFlag_HT2(DMA_TypeDef * DMAx)1628 __STATIC_INLINE void LL_DMA_ClearFlag_HT2(DMA_TypeDef *DMAx)
1629 {
1630   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF2);
1631 }
1632 
1633 /**
1634   * @brief  Clear Channel 3 half transfer flag.
1635   * @rmtoll IFCR         CHTIF3        LL_DMA_ClearFlag_HT3
1636   * @param  DMAx DMAx Instance
1637   * @retval None
1638   */
LL_DMA_ClearFlag_HT3(DMA_TypeDef * DMAx)1639 __STATIC_INLINE void LL_DMA_ClearFlag_HT3(DMA_TypeDef *DMAx)
1640 {
1641   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF3);
1642 }
1643 
1644 #if defined(DMA_IFCR_CHTIF4)
1645 /**
1646   * @brief  Clear Channel 4 half transfer flag.
1647   * @rmtoll IFCR         CHTIF4        LL_DMA_ClearFlag_HT4
1648   * @param  DMAx DMAx Instance
1649   * @retval None
1650   */
LL_DMA_ClearFlag_HT4(DMA_TypeDef * DMAx)1651 __STATIC_INLINE void LL_DMA_ClearFlag_HT4(DMA_TypeDef *DMAx)
1652 {
1653   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF4);
1654 }
1655 #endif /* DMA_IFCR_CHTIF4 */
1656 
1657 #if defined(DMA_IFCR_CHTIF5)
1658 /**
1659   * @brief  Clear Channel 5 half transfer flag.
1660   * @rmtoll IFCR         CHTIF5        LL_DMA_ClearFlag_HT5
1661   * @param  DMAx DMAx Instance
1662   * @retval None
1663   */
LL_DMA_ClearFlag_HT5(DMA_TypeDef * DMAx)1664 __STATIC_INLINE void LL_DMA_ClearFlag_HT5(DMA_TypeDef *DMAx)
1665 {
1666   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF5);
1667 }
1668 #endif /* DMA_IFCR_CHTIF5 */
1669 
1670 /**
1671   * @brief  Clear Channel 1 transfer error flag.
1672   * @rmtoll IFCR         CTEIF1        LL_DMA_ClearFlag_TE1
1673   * @param  DMAx DMAx Instance
1674   * @retval None
1675   */
LL_DMA_ClearFlag_TE1(DMA_TypeDef * DMAx)1676 __STATIC_INLINE void LL_DMA_ClearFlag_TE1(DMA_TypeDef *DMAx)
1677 {
1678   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF1);
1679 }
1680 
1681 /**
1682   * @brief  Clear Channel 2 transfer error flag.
1683   * @rmtoll IFCR         CTEIF2        LL_DMA_ClearFlag_TE2
1684   * @param  DMAx DMAx Instance
1685   * @retval None
1686   */
LL_DMA_ClearFlag_TE2(DMA_TypeDef * DMAx)1687 __STATIC_INLINE void LL_DMA_ClearFlag_TE2(DMA_TypeDef *DMAx)
1688 {
1689   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF2);
1690 }
1691 
1692 /**
1693   * @brief  Clear Channel 3 transfer error flag.
1694   * @rmtoll IFCR         CTEIF3        LL_DMA_ClearFlag_TE3
1695   * @param  DMAx DMAx Instance
1696   * @retval None
1697   */
LL_DMA_ClearFlag_TE3(DMA_TypeDef * DMAx)1698 __STATIC_INLINE void LL_DMA_ClearFlag_TE3(DMA_TypeDef *DMAx)
1699 {
1700   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF3);
1701 }
1702 
1703 #if defined(DMA_IFCR_CTEIF4)
1704 /**
1705   * @brief  Clear Channel 4 transfer error flag.
1706   * @rmtoll IFCR         CTEIF4        LL_DMA_ClearFlag_TE4
1707   * @param  DMAx DMAx Instance
1708   * @retval None
1709   */
LL_DMA_ClearFlag_TE4(DMA_TypeDef * DMAx)1710 __STATIC_INLINE void LL_DMA_ClearFlag_TE4(DMA_TypeDef *DMAx)
1711 {
1712   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF4);
1713 }
1714 #endif /* DMA_IFCR_CTEIF4 */
1715 
1716 #if defined(DMA_IFCR_CTEIF5)
1717 /**
1718   * @brief  Clear Channel 5 transfer error flag.
1719   * @rmtoll IFCR         CTEIF5        LL_DMA_ClearFlag_TE5
1720   * @param  DMAx DMAx Instance
1721   * @retval None
1722   */
LL_DMA_ClearFlag_TE5(DMA_TypeDef * DMAx)1723 __STATIC_INLINE void LL_DMA_ClearFlag_TE5(DMA_TypeDef *DMAx)
1724 {
1725   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF5);
1726 }
1727 #endif /* DMA_IFCR_CTEIF5 */
1728 
1729 /**
1730   * @}
1731   */
1732 
1733 /** @defgroup DMA_LL_EF_IT_Management IT_Management
1734   * @{
1735   */
1736 /**
1737   * @brief  Enable Transfer complete interrupt.
1738   * @rmtoll CCR          TCIE          LL_DMA_EnableIT_TC
1739   * @param  DMAx DMAx Instance
1740   * @param  Channel This parameter can be one of the following values:
1741   *         @arg @ref LL_DMA_CHANNEL_1
1742   *         @arg @ref LL_DMA_CHANNEL_2
1743   *         @arg @ref LL_DMA_CHANNEL_3
1744   *         @arg @ref LL_DMA_CHANNEL_4 (*)
1745   *         @arg @ref LL_DMA_CHANNEL_5 (*)
1746   * @note (*) Availability depends on devices
1747   * @retval None
1748   */
LL_DMA_EnableIT_TC(DMA_TypeDef * DMAx,uint32_t Channel)1749 __STATIC_INLINE void LL_DMA_EnableIT_TC(DMA_TypeDef *DMAx, uint32_t Channel)
1750 {
1751   uint32_t dma_base_addr = (uint32_t)DMAx;
1752   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR, DMA_CCR_TCIE);
1753 }
1754 
1755 /**
1756   * @brief  Enable Half transfer interrupt.
1757   * @rmtoll CCR          HTIE          LL_DMA_EnableIT_HT
1758   * @param  DMAx DMAx Instance
1759   * @param  Channel This parameter can be one of the following values:
1760   *         @arg @ref LL_DMA_CHANNEL_1
1761   *         @arg @ref LL_DMA_CHANNEL_2
1762   *         @arg @ref LL_DMA_CHANNEL_3
1763   *         @arg @ref LL_DMA_CHANNEL_4 (*)
1764   *         @arg @ref LL_DMA_CHANNEL_5 (*)
1765   * @note (*) Availability depends on devices
1766   * @retval None
1767   */
LL_DMA_EnableIT_HT(DMA_TypeDef * DMAx,uint32_t Channel)1768 __STATIC_INLINE void LL_DMA_EnableIT_HT(DMA_TypeDef *DMAx, uint32_t Channel)
1769 {
1770   uint32_t dma_base_addr = (uint32_t)DMAx;
1771   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR, DMA_CCR_HTIE);
1772 }
1773 
1774 /**
1775   * @brief  Enable Transfer error interrupt.
1776   * @rmtoll CCR          TEIE          LL_DMA_EnableIT_TE
1777   * @param  DMAx DMAx Instance
1778   * @param  Channel This parameter can be one of the following values:
1779   *         @arg @ref LL_DMA_CHANNEL_1
1780   *         @arg @ref LL_DMA_CHANNEL_2
1781   *         @arg @ref LL_DMA_CHANNEL_3
1782   *         @arg @ref LL_DMA_CHANNEL_4 (*)
1783   *         @arg @ref LL_DMA_CHANNEL_5 (*)
1784   * @note (*) Availability depends on devices
1785   * @retval None
1786   */
LL_DMA_EnableIT_TE(DMA_TypeDef * DMAx,uint32_t Channel)1787 __STATIC_INLINE void LL_DMA_EnableIT_TE(DMA_TypeDef *DMAx, uint32_t Channel)
1788 {
1789   uint32_t dma_base_addr = (uint32_t)DMAx;
1790   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR, DMA_CCR_TEIE);
1791 }
1792 
1793 /**
1794   * @brief  Disable Transfer complete interrupt.
1795   * @rmtoll CCR          TCIE          LL_DMA_DisableIT_TC
1796   * @param  DMAx DMAx Instance
1797   * @param  Channel This parameter can be one of the following values:
1798   *         @arg @ref LL_DMA_CHANNEL_1
1799   *         @arg @ref LL_DMA_CHANNEL_2
1800   *         @arg @ref LL_DMA_CHANNEL_3
1801   *         @arg @ref LL_DMA_CHANNEL_4 (*)
1802   *         @arg @ref LL_DMA_CHANNEL_5 (*)
1803   * @note (*) Availability depends on devices
1804   * @retval None
1805   */
LL_DMA_DisableIT_TC(DMA_TypeDef * DMAx,uint32_t Channel)1806 __STATIC_INLINE void LL_DMA_DisableIT_TC(DMA_TypeDef *DMAx, uint32_t Channel)
1807 {
1808   uint32_t dma_base_addr = (uint32_t)DMAx;
1809   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR, DMA_CCR_TCIE);
1810 }
1811 
1812 /**
1813   * @brief  Disable Half transfer interrupt.
1814   * @rmtoll CCR          HTIE          LL_DMA_DisableIT_HT
1815   * @param  DMAx DMAx Instance
1816   * @param  Channel This parameter can be one of the following values:
1817   *         @arg @ref LL_DMA_CHANNEL_1
1818   *         @arg @ref LL_DMA_CHANNEL_2
1819   *         @arg @ref LL_DMA_CHANNEL_3
1820   *         @arg @ref LL_DMA_CHANNEL_4 (*)
1821   *         @arg @ref LL_DMA_CHANNEL_5 (*)
1822   * @note (*) Availability depends on devices
1823   * @retval None
1824   */
LL_DMA_DisableIT_HT(DMA_TypeDef * DMAx,uint32_t Channel)1825 __STATIC_INLINE void LL_DMA_DisableIT_HT(DMA_TypeDef *DMAx, uint32_t Channel)
1826 {
1827   uint32_t dma_base_addr = (uint32_t)DMAx;
1828   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR, DMA_CCR_HTIE);
1829 }
1830 
1831 /**
1832   * @brief  Disable Transfer error interrupt.
1833   * @rmtoll CCR          TEIE          LL_DMA_DisableIT_TE
1834   * @param  DMAx DMAx Instance
1835   * @param  Channel This parameter can be one of the following values:
1836   *         @arg @ref LL_DMA_CHANNEL_1
1837   *         @arg @ref LL_DMA_CHANNEL_2
1838   *         @arg @ref LL_DMA_CHANNEL_3
1839   *         @arg @ref LL_DMA_CHANNEL_4 (*)
1840   *         @arg @ref LL_DMA_CHANNEL_5 (*)
1841   * @note (*) Availability depends on devices
1842   * @retval None
1843   */
LL_DMA_DisableIT_TE(DMA_TypeDef * DMAx,uint32_t Channel)1844 __STATIC_INLINE void LL_DMA_DisableIT_TE(DMA_TypeDef *DMAx, uint32_t Channel)
1845 {
1846   uint32_t dma_base_addr = (uint32_t)DMAx;
1847   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR, DMA_CCR_TEIE);
1848 }
1849 
1850 /**
1851   * @brief  Check if Transfer complete Interrupt is enabled.
1852   * @rmtoll CCR          TCIE          LL_DMA_IsEnabledIT_TC
1853   * @param  DMAx DMAx Instance
1854   * @param  Channel This parameter can be one of the following values:
1855   *         @arg @ref LL_DMA_CHANNEL_1
1856   *         @arg @ref LL_DMA_CHANNEL_2
1857   *         @arg @ref LL_DMA_CHANNEL_3
1858   *         @arg @ref LL_DMA_CHANNEL_4 (*)
1859   *         @arg @ref LL_DMA_CHANNEL_5 (*)
1860   * @note (*) Availability depends on devices
1861   * @retval State of bit (1 or 0).
1862   */
LL_DMA_IsEnabledIT_TC(DMA_TypeDef * DMAx,uint32_t Channel)1863 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TC(DMA_TypeDef *DMAx, uint32_t Channel)
1864 {
1865   uint32_t dma_base_addr = (uint32_t)DMAx;
1866   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR,
1867                     DMA_CCR_TCIE) == (DMA_CCR_TCIE)) ? 1UL : 0UL);
1868 }
1869 
1870 /**
1871   * @brief  Check if Half transfer Interrupt is enabled.
1872   * @rmtoll CCR          HTIE          LL_DMA_IsEnabledIT_HT
1873   * @param  DMAx DMAx Instance
1874   * @param  Channel This parameter can be one of the following values:
1875   *         @arg @ref LL_DMA_CHANNEL_1
1876   *         @arg @ref LL_DMA_CHANNEL_2
1877   *         @arg @ref LL_DMA_CHANNEL_3
1878   *         @arg @ref LL_DMA_CHANNEL_4 (*)
1879   *         @arg @ref LL_DMA_CHANNEL_5 (*)
1880   * @note (*) Availability depends on devices
1881   * @retval State of bit (1 or 0).
1882   */
LL_DMA_IsEnabledIT_HT(DMA_TypeDef * DMAx,uint32_t Channel)1883 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_HT(DMA_TypeDef *DMAx, uint32_t Channel)
1884 {
1885   uint32_t dma_base_addr = (uint32_t)DMAx;
1886   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR,
1887                     DMA_CCR_HTIE) == (DMA_CCR_HTIE)) ? 1UL : 0UL);
1888 }
1889 
1890 /**
1891   * @brief  Check if Transfer error Interrupt is enabled.
1892   * @rmtoll CCR          TEIE          LL_DMA_IsEnabledIT_TE
1893   * @param  DMAx DMAx Instance
1894   * @param  Channel This parameter can be one of the following values:
1895   *         @arg @ref LL_DMA_CHANNEL_1
1896   *         @arg @ref LL_DMA_CHANNEL_2
1897   *         @arg @ref LL_DMA_CHANNEL_3
1898   *         @arg @ref LL_DMA_CHANNEL_4 (*)
1899   *         @arg @ref LL_DMA_CHANNEL_5 (*)
1900   * @note (*) Availability depends on devices
1901   * @retval State of bit (1 or 0).
1902   */
LL_DMA_IsEnabledIT_TE(DMA_TypeDef * DMAx,uint32_t Channel)1903 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TE(DMA_TypeDef *DMAx, uint32_t Channel)
1904 {
1905   uint32_t dma_base_addr = (uint32_t)DMAx;
1906   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel - 1U]))->CCR,
1907                     DMA_CCR_TEIE) == (DMA_CCR_TEIE)) ? 1UL : 0UL);
1908 }
1909 
1910 /**
1911   * @}
1912   */
1913 
1914 #if defined(USE_FULL_LL_DRIVER)
1915 /** @defgroup DMA_LL_EF_Init Initialization and de-initialization functions
1916   * @{
1917   */
1918 ErrorStatus LL_DMA_Init(DMA_TypeDef *DMAx, uint32_t Channel, LL_DMA_InitTypeDef *DMA_InitStruct);
1919 ErrorStatus LL_DMA_DeInit(DMA_TypeDef *DMAx, uint32_t Channel);
1920 void LL_DMA_StructInit(LL_DMA_InitTypeDef *DMA_InitStruct);
1921 /**
1922   * @}
1923   */
1924 #endif /* USE_FULL_LL_DRIVER */
1925 
1926 /**
1927   * @}
1928   */
1929 
1930 /**
1931   * @}
1932   */
1933 
1934 #endif /* DMA1 */
1935 
1936 /**
1937   * @}
1938   */
1939 
1940 #ifdef __cplusplus
1941 }
1942 #endif
1943 
1944 #endif /* STM32C0xx_LL_DMA_H */
1945