1 /**
2   ******************************************************************************
3   * @file    stm32h5xx_ll_dma.h
4   * @author  MCD Application Team
5   * @brief   Header file of DMA LL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2023 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  @verbatim
18   ==============================================================================
19                         ##### LL DMA driver acronyms #####
20   ==============================================================================
21   [..]  Acronyms table :
22                    =========================================
23                    || Acronym ||                          ||
24                    =========================================
25                    || SRC     ||  Source                  ||
26                    || DEST    ||  Destination             ||
27                    || ADDR    ||  Address                 ||
28                    || ADDRS   ||  Addresses               ||
29                    || INC     ||  Increment / Incremented ||
30                    || DEC     ||  Decrement / Decremented ||
31                    || BLK     ||  Block                   ||
32                    || RPT     ||  Repeat / Repeated       ||
33                    || TRIG    ||  Trigger                 ||
34                    =========================================
35  @endverbatim
36   ******************************************************************************
37   */
38 
39 /* Define to prevent recursive inclusion -------------------------------------*/
40 #ifndef STM32H5xx_LL_DMA_H
41 #define STM32H5xx_LL_DMA_H
42 
43 #ifdef __cplusplus
44 extern "C" {
45 #endif /* __cplusplus */
46 
47 /* Includes ------------------------------------------------------------------*/
48 #include "stm32h5xx.h"
49 
50 /** @addtogroup STM32H5xx_LL_Driver
51   * @{
52   */
53 
54 #if defined (GPDMA1)
55 
56 /** @defgroup DMA_LL DMA
57   * @{
58   */
59 
60 /* Private types -------------------------------------------------------------*/
61 /* Private variables ---------------------------------------------------------*/
62 
63 /** @defgroup DMA_LL_Private_Variables DMA Private Variables
64   * @{
65   */
66 #define DMA_CHANNEL0_OFFSET  (0x00000050UL)
67 #define DMA_CHANNEL1_OFFSET  (0x000000D0UL)
68 #define DMA_CHANNEL2_OFFSET  (0x00000150UL)
69 #define DMA_CHANNEL3_OFFSET  (0x000001D0UL)
70 #define DMA_CHANNEL4_OFFSET  (0x00000250UL)
71 #define DMA_CHANNEL5_OFFSET  (0x000002D0UL)
72 #define DMA_CHANNEL6_OFFSET  (0x00000350UL)
73 #define DMA_CHANNEL7_OFFSET  (0x000003D0UL)
74 
75 
76 /* Array used to get the DMA Channel register offset versus Channel index LL_DMA_CHANNEL_x */
77 static const uint32_t LL_DMA_CH_OFFSET_TAB[] =
78 {
79   DMA_CHANNEL0_OFFSET,  DMA_CHANNEL1_OFFSET,  DMA_CHANNEL2_OFFSET,  DMA_CHANNEL3_OFFSET,
80   DMA_CHANNEL4_OFFSET,  DMA_CHANNEL5_OFFSET,  DMA_CHANNEL6_OFFSET,  DMA_CHANNEL7_OFFSET,
81 };
82 
83 /**
84   * @}
85   */
86 
87 /* Private constants ---------------------------------------------------------*/
88 /* Private macros ------------------------------------------------------------*/
89 /* Exported types ------------------------------------------------------------*/
90 
91 #if defined (USE_FULL_LL_DRIVER)
92 /** @defgroup DMA_LL_ES_INIT DMA Exported Init structure
93   * @{
94   */
95 
96 /**
97   * @brief  LL DMA init structure definition.
98   */
99 typedef struct
100 {
101   uint32_t SrcAddress;               /*!< This field specify the data transfer source address.
102                                           Programming this field is mandatory for all available DMA channels.
103                                           This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF.
104                                           This feature can be modified afterwards using unitary function
105                                           @ref LL_DMA_SetSrcAddress().                                                */
106 
107   uint32_t DestAddress;              /*!< This field specify the data transfer destination address.
108                                           Programming this field is mandatory for all available DMA channels.
109                                           This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF.
110                                           This feature can be modified afterwards using unitary function
111                                           @ref LL_DMA_SetDestAddress().                                               */
112 
113   uint32_t Direction;                /*!< This field specify the data transfer direction.
114                                           Programming this field is mandatory for all available DMA channels.
115                                           This parameter can be a value of @ref DMA_LL_EC_TRANSFER_DIRECTION.
116                                           This feature can be modified afterwards using unitary function
117                                           @ref LL_DMA_SetDataTransferDirection().                                     */
118 
119   uint32_t BlkHWRequest;             /*!< This field specify the hardware request unity.
120                                           Programming this field is mandatory for all available DMA channels.
121                                           This parameter can be a value of @ref DMA_LL_EC_BLKHW_REQUEST.
122                                           This feature can be modified afterwards using unitary function
123                                           @ref LL_DMA_SetBlkHWRequest().                                              */
124 
125   uint32_t DataAlignment;            /*!< This field specify the transfer data alignment.
126                                           Programming this field is mandatory for all available DMA channels.
127                                           This parameter can be a value of @ref DMA_LL_EC_DATA_ALIGNMENT.
128                                           This feature can be modified afterwards using unitary function
129                                           @ref LL_DMA_SetDataAlignment().                                             */
130 
131   uint32_t SrcBurstLength;           /*!< This field specify the source burst length of transfer in bytes.
132                                           Programming this field is mandatory for all available DMA channels.
133                                           This parameter must be a value between Min_Data = 1 and Max_Data = 64.
134                                           This feature can be modified afterwards using unitary function
135                                           @ref LL_DMA_SetSrcBurstLength().                                            */
136 
137   uint32_t DestBurstLength;          /*!< This field specify the destination burst length of transfer in bytes.
138                                           Programming this field is mandatory for all available DMA channels.
139                                           This parameter must be a value between Min_Data = 1 and Max_Data = 64.
140                                           This feature can be modified afterwards using unitary function
141                                           @ref LL_DMA_SetDestBurstLength().                                           */
142 
143   uint32_t SrcDataWidth;             /*!< This field specify the source data width.
144                                           Programming this field is mandatory for all available DMA channels.
145                                           This parameter can be a value of @ref DMA_LL_EC_SOURCE_DATA_WIDTH.
146                                           This feature can be modified afterwards using unitary function
147                                           @ref LL_DMA_SetSrcDataWidth().                                              */
148 
149   uint32_t DestDataWidth;            /*!< This field specify the destination data width.
150                                           Programming this field is mandatory for all available DMA channels.
151                                           This parameter can be a value of @ref DMA_LL_EC_DESTINATION_DATA_WIDTH.
152                                           This feature can be modified afterwards using unitary function
153                                           @ref LL_DMA_SetDestDataWidth().                                             */
154 
155   uint32_t SrcIncMode;               /*!< This field specify the source burst increment mode.
156                                           Programming this field is mandatory for all available DMA channels.
157                                           This parameter can be a value of @ref DMA_LL_EC_SOURCE_INCREMENT_MODE.
158                                           This feature can be modified afterwards using unitary function
159                                           @ref LL_DMA_SetSrcIncMode().                                                */
160 
161   uint32_t DestIncMode;              /*!< This field specify the destination burst increment mode.
162                                           Programming this field is mandatory for all available DMA channels.
163                                           This parameter can be a value of @ref DMA_LL_EC_DESTINATION_INCREMENT_MODE.
164                                           This feature can be modified afterwards using unitary function
165                                           @ref LL_DMA_SetDestIncMode().                                               */
166 
167   uint32_t Priority;                 /*!< This field specify the channel priority level.
168                                           Programming this field is mandatory for all available DMA channels.
169                                           This parameter can be a value of @ref DMA_LL_EC_PRIORITY_LEVEL.
170                                           This feature can be modified afterwards using unitary function
171                                           @ref LL_DMA_SetChannelPriorityLevel().                                      */
172 
173   uint32_t BlkDataLength;            /*!< This field specify the length of a block transfer in bytes.
174                                           Programming this field is mandatory for all available DMA channels.
175                                           This parameter must be a value between Min_Data = 0 and Max_Data = 0x0000FFFF.
176                                           This feature can be modified afterwards using unitary function
177                                           @ref LL_DMA_SetBlkDataLength().                                             */
178 
179   uint32_t BlkRptCount;              /*!< This field specify the number of repetitions of the current block.
180                                           Programming this field is mandatory only for 2D addressing channels.
181                                           This parameter can be a value between 1 and 2048 Min_Data = 0
182                                           and Max_Data = 0x000007FF.
183                                           This feature can be modified afterwards using unitary function
184                                           @ref LL_DMA_SetBlkRptCount().                                               */
185 
186   uint32_t TriggerMode;              /*!< This field specify the trigger mode.
187                                           Programming this field is mandatory for all available DMA channels.
188                                           This parameter can be a value of @ref DMA_LL_EC_TRIGGER_MODE.
189                                           This feature can be modified afterwards using unitary function
190                                           @ref LL_DMA_SetTriggerMode().                                               */
191 
192   uint32_t TriggerPolarity;          /*!< This field specify the trigger event polarity.
193                                           Programming this field is mandatory for all available DMA channels.
194                                           This parameter can be a value of @ref DMA_LL_EC_TRIGGER_POLARITY.
195                                           This feature can be modified afterwards using unitary function
196                                           @ref LL_DMA_SetTriggerPolarity().                                           */
197 
198   uint32_t TriggerSelection;         /*!< This field specify the trigger event selection.
199                                           Programming this field is mandatory for all available DMA channels.
200                                           This parameter can be a value of @ref DMA_LL_EC_TRIGGER_SELECTION.
201                                           This feature can be modified afterwards using unitary function
202                                           @ref LL_DMA_SetHWTrigger().                                                 */
203 
204   uint32_t Request;                  /*!< This field specify the peripheral request selection.
205                                           Programming this field is mandatory for all available DMA channels.
206                                           This parameter can be a value of @ref DMA_LL_EC_REQUEST_SELECTION.
207                                           This feature can be modified afterwards using unitary function
208                                           @ref LL_DMA_SetPeriphRequest().                                             */
209 
210   uint32_t TransferEventMode;        /*!< This field specify the transfer event mode.
211                                           Programming this field is mandatory for all available DMA channels.
212                                           This parameter can be a value of @ref DMA_LL_EC_TRANSFER_EVENT_MODE.
213                                           This feature can be modified afterwards using unitary function
214                                           @ref LL_DMA_SetTransferEventMode().                                         */
215 
216   uint32_t DestHWordExchange;        /*!< This field specify the destination half word exchange.
217                                           Programming this field is mandatory for all available DMA channels.
218                                           This parameter can be a value of @ref DMA_LL_EC_DEST_HALFWORD_EXCHANGE.
219                                           This feature can be modified afterwards using unitary function
220                                           @ref LL_DMA_SetDestHWordExchange().                                         */
221 
222   uint32_t DestByteExchange;         /*!< This field specify the destination byte exchange.
223                                           Programming this field is mandatory for all available DMA channels.
224                                           This parameter can be a value of @ref DMA_LL_EC_DEST_BYTE_EXCHANGE.
225                                           This feature can be modified afterwards using unitary function
226                                           @ref LL_DMA_SetDestByteExchange().                                          */
227 
228   uint32_t SrcByteExchange;          /*!< This field specify the source byte exchange.
229                                           Programming this field is mandatory for all available DMA channels.
230                                           This parameter can be a value of @ref DMA_LL_EC_SRC_BYTE_EXCHANGE.
231                                           This feature can be modified afterwards using unitary function
232                                           @ref LL_DMA_SetSrcByteExchange().                                           */
233 
234   uint32_t SrcAllocatedPort;         /*!< This field specify the source allocated port.
235                                           Programming this field is mandatory for all available DMA channels.
236                                           This parameter can be a value of @ref DMA_LL_EC_SOURCE_ALLOCATED_PORT.
237                                           This feature can be modified afterwards using unitary function
238                                           @ref LL_DMA_SetSrcAllocatedPort().                                          */
239 
240   uint32_t DestAllocatedPort;        /*!< This field specify the destination allocated port.
241                                           Programming this field is mandatory for all available DMA channels.
242                                           This parameter can be a value of @ref DMA_LL_EC_DESTINATION_ALLOCATED_PORT.
243                                           This feature can be modified afterwards using unitary function
244                                           @ref LL_DMA_SetDestAllocatedPort().                                         */
245 
246   uint32_t LinkAllocatedPort;        /*!< This field specify the linked-list allocated port.
247                                           Programming this field is mandatory for all available DMA channels.
248                                           This parameter can be a value of @ref DMA_LL_EC_LINKED_LIST_ALLOCATED_PORT.
249                                           This feature can be modified afterwards using unitary function
250                                           @ref LL_DMA_SetLinkAllocatedPort().                                         */
251 
252   uint32_t LinkStepMode;             /*!< This field specify the link step mode.
253                                           Programming this field is mandatory for all available DMA channels.
254                                           This parameter can be a value of @ref DMA_LL_EC_LINK_STEP_MODE.
255                                           This feature can be modified afterwards using unitary function
256                                           @ref LL_DMA_SetLinkStepMode().                                              */
257 
258   uint32_t SrcAddrUpdateMode;        /*!< This field specify the source address update mode.
259                                           Programming this field is mandatory only for 2D addressing channels.
260                                           This parameter can be a value of @ref DMA_LL_EC_SRC_ADDR_UPDATE_MODE.
261                                           This feature can be modified afterwards using unitary function
262                                           @ref LL_DMA_SetSrcAddrUpdate().                                             */
263 
264   uint32_t DestAddrUpdateMode;       /*!< This field specify the destination address update mode.
265                                           Programming this field is mandatory only for 2D addressing channels.
266                                           This parameter can be a value of @ref DMA_LL_EC_DEST_ADDR_UPDATE_MODE.
267                                           This feature can be modified afterwards using unitary function
268                                           @ref LL_DMA_SetDestAddrUpdate().                                            */
269 
270   uint32_t SrcAddrOffset;            /*!< This field specifies the source address offset.
271                                           Programming this field is mandatory only for 2D addressing channels.
272                                           This parameter can be a value Between 0 to 0x00001FFF.
273                                           This feature can be modified afterwards using unitary function
274                                           @ref LL_DMA_SetSrcAddrUpdateValue().                                        */
275 
276   uint32_t DestAddrOffset;           /*!< This field specifies the destination address offset.
277                                           Programming this field is mandatory only for 2D addressing channels.
278                                           This parameter can be a value Between 0 to 0x00001FFF.
279                                           This feature can be modified afterwards using unitary function
280                                           @ref LL_DMA_SetDestAddrUpdateValue().                                       */
281 
282   uint32_t BlkRptSrcAddrUpdateMode;  /*!< This field specifies the block repeat source address update mode.
283                                           Programming this field is mandatory only for 2D addressing channels.
284                                           This parameter can be a value of @ref DMA_LL_EC_BLK_RPT_SRC_ADDR_UPDATE_MODE.
285                                           This feature can be modified afterwards using unitary function
286                                           @ref LL_DMA_SetBlkRptSrcAddrUpdate().                                       */
287 
288   uint32_t BlkRptDestAddrUpdateMode; /*!< This field specifies the block repeat destination address update mode.
289                                           Programming this field is mandatory only for 2D addressing channels.
290                                           This parameter can be a value of @ref DMA_LL_EC_BLK_RPT_DEST_ADDR_UPDATE_MODE.
291                                           This feature can be modified afterwards using unitary function
292                                           @ref LL_DMA_SetBlkRptDestAddrUpdate().                                      */
293 
294   uint32_t BlkRptSrcAddrOffset;      /*!< This field specifies the block repeat source address offset.
295                                           Programming this field is mandatory only for 2D addressing channels.
296                                           This parameter can be a value Between 0 to 0x0000FFFF.
297                                           This feature can be modified afterwards using unitary function
298                                           @ref LL_DMA_SetBlkRptSrcAddrUpdateValue().                                  */
299 
300   uint32_t BlkRptDestAddrOffset;     /*!< This field specifies the block repeat destination address offset.
301                                           Programming this field is mandatory only for 2D addressing channels.
302                                           This parameter can be a value Between 0 to 0x0000FFFF.
303                                           This feature can be modified afterwards using unitary function
304                                           @ref LL_DMA_SetBlkRptDestAddrUpdateValue().                                 */
305 
306   uint32_t LinkedListBaseAddr;       /*!< This field specify the linked list base address.
307                                           Programming this field is mandatory for all available DMA channels.
308                                           This parameter can be a value Between 0 to 0xFFFF0000 (where the 4 first
309                                           bytes are always forced to 0).
310                                           This feature can be modified afterwards using unitary function
311                                           @ref LL_DMA_SetLinkedListBaseAddr().                                        */
312 
313   uint32_t LinkedListAddrOffset;     /*!< Specifies the linked list address offset.
314                                           Programming this field is mandatory for all available DMA channels.
315                                           This parameter can be a value Between 0 to 0x0000FFFC.
316                                           This feature can be modified afterwards using unitary function
317                                           @ref LL_DMA_SetLinkedListAddrOffset().                                      */
318 
319   uint32_t Mode;                     /*!< Specifies the transfer mode for the DMA channel.
320                                           This parameter can be a value of @ref DMA_LL_TRANSFER_MODE                  */
321 } LL_DMA_InitTypeDef;
322 
323 
324 /**
325   * @brief  LL DMA init linked list structure definition.
326   */
327 typedef struct
328 {
329   uint32_t Priority;             /*!< This field specify the channel priority level.
330                                       Programming this field is mandatory for all available DMA channels.
331                                       This parameter can be a value of @ref DMA_LL_EC_PRIORITY_LEVEL.
332                                       This feature can be modified afterwards using unitary function
333                                       @ref LL_DMA_SetChannelPriorityLevel().                                          */
334 
335   uint32_t LinkStepMode;         /*!< This field specify the link step mode.
336                                       Programming this field is mandatory for all available DMA channels.
337                                       This parameter can be a value of @ref DMA_LL_EC_LINK_STEP_MODE.
338                                       This feature can be modified afterwards using unitary function
339                                       @ref LL_DMA_SetLinkStepMode().                                                  */
340 
341   uint32_t LinkAllocatedPort;    /*!< This field specify the linked-list allocated port.
342                                       Programming this field is mandatory for all available DMA channels.
343                                       This parameter can be a value of @ref DMA_LL_EC_LINKED_LIST_ALLOCATED_PORT.
344                                       This feature can be modified afterwards using unitary function
345                                       @ref LL_DMA_SetLinkAllocatedPort().                                             */
346 
347   uint32_t TransferEventMode;    /*!< This field specify the transfer event mode.
348                                       Programming this field is mandatory for all available DMA channels.
349                                       This parameter can be a value of @ref DMA_LL_EC_TRANSFER_EVENT_MODE.
350                                       This feature can be modified afterwards using unitary function
351                                       @ref LL_DMA_SetTransferEventMode().                                             */
352 } LL_DMA_InitLinkedListTypeDef;
353 
354 
355 /**
356   * @brief  LL DMA node init structure definition.
357   */
358 typedef struct
359 {
360   /* CTR1 register fields ******************************************************
361      If any CTR1 fields need to be updated comparing to previous node, it is
362      mandatory to update the new value in CTR1 register fields and enable update
363      CTR1 register in UpdateRegisters fields if it is not enabled in the
364      previous node.
365 
366   */
367 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
368   uint32_t DestSecure;           /*!< This field specify the destination secure.
369                                       This parameter can be a value of @ref DMA_LL_EC_DESTINATION_SECURITY_ATTRIBUTE. */
370 #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
371 
372   uint32_t DestAllocatedPort;    /*!< This field specify the destination allocated port.
373                                       This parameter can be a value of @ref DMA_LL_EC_DESTINATION_ALLOCATED_PORT.     */
374 
375   uint32_t DestHWordExchange;    /*!< This field specify the destination half word exchange.
376                                       This parameter can be a value of @ref DMA_LL_EC_DEST_HALFWORD_EXCHANGE.         */
377 
378   uint32_t DestByteExchange;     /*!< This field specify the destination byte exchange.
379                                       This parameter can be a value of @ref DMA_LL_EC_DEST_BYTE_EXCHANGE.             */
380 
381   uint32_t DestBurstLength;      /*!< This field specify the destination burst length of transfer in bytes.
382                                       This parameter must be a value between Min_Data = 1 and Max_Data = 64.          */
383 
384   uint32_t DestIncMode;          /*!< This field specify the destination increment mode.
385                                       This parameter can be a value of @ref DMA_LL_EC_DESTINATION_INCREMENT_MODE.     */
386 
387   uint32_t DestDataWidth;        /*!< This field specify the destination data width.
388                                       This parameter can be a value of @ref DMA_LL_EC_DESTINATION_DATA_WIDTH.         */
389 
390 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
391   uint32_t SrcSecure;            /*!< This field specify the source secure.
392                                       This parameter can be a value of @ref DMA_LL_EC_SOURCE_SECURITY_ATTRIBUTE.      */
393 #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
394 
395   uint32_t SrcAllocatedPort;     /*!< This field specify the source allocated port.
396                                       This parameter can be a value of @ref DMA_LL_EC_SOURCE_ALLOCATED_PORT.          */
397 
398   uint32_t SrcByteExchange;      /*!< This field specify the source byte exchange.
399                                       This parameter can be a value of @ref DMA_LL_EC_SRC_BYTE_EXCHANGE.              */
400 
401   uint32_t DataAlignment;        /*!< This field specify the transfer data alignment.
402                                       This parameter can be a value of @ref DMA_LL_EC_DATA_ALIGNMENT.                 */
403 
404   uint32_t SrcBurstLength;       /*!< This field specify the source burst length of transfer in bytes.
405                                       This parameter must be a value between Min_Data = 1 and Max_Data = 64.          */
406 
407   uint32_t SrcIncMode;           /*!< This field specify the source increment mode.
408                                       This parameter can be a value of @ref DMA_LL_EC_SOURCE_INCREMENT_MODE.          */
409 
410   uint32_t SrcDataWidth;         /*!< This field specify the source data width.
411                                       This parameter can be a value of @ref DMA_LL_EC_SOURCE_DATA_WIDTH.              */
412 
413 
414   /* CTR2 register fields ******************************************************
415      If any CTR2 fields need to be updated comparing to previous node, it is
416      mandatory to update the new value in CTR2 register fields and enable update
417      CTR2 register in UpdateRegisters fields if it is not enabled in the
418      previous node.
419 
420      For all node created, filling all fields is mandatory.
421   */
422   uint32_t TransferEventMode;    /*!< This field specify the transfer event mode.
423                                       This parameter can be a value of @ref DMA_LL_EC_TRANSFER_EVENT_MODE.            */
424 
425   uint32_t TriggerPolarity;      /*!< This field specify the trigger event polarity.
426                                       This parameter can be a value of @ref DMA_LL_EC_TRIGGER_POLARITY.               */
427 
428   uint32_t TriggerSelection;     /*!< This field specify the trigger event selection.
429                                       This parameter can be a value of @ref DMA_LL_EC_TRIGGER_SELECTION.              */
430 
431   uint32_t TriggerMode;          /*!< This field specify the trigger mode.
432                                       This parameter can be a value of @ref DMA_LL_EC_TRIGGER_MODE.                   */
433 
434   uint32_t BlkHWRequest;         /*!< This field specify the hardware request unity.
435                                       This parameter can be a value of @ref DMA_LL_EC_BLKHW_REQUEST.                  */
436 
437   uint32_t Direction;            /*!< This field specify the transfer direction.
438                                       This parameter can be a value of @ref DMA_LL_EC_TRANSFER_DIRECTION.             */
439 
440   uint32_t Request;              /*!< This field specify the peripheral request selection.
441                                       This parameter can be a value of @ref DMA_LL_EC_REQUEST_SELECTION.              */
442 
443   uint32_t Mode;                  /*!< This field DMA Transfer Mode.
444                                       This parameter can be a value of @ref DMA_LL_TRANSFER_MODE.                     */
445 
446   /* CBR1 register fields ******************************************************
447      If any CBR1 fields need to be updated comparing to previous node, it is
448      mandatory to update the new value in CBR1 register fields and enable update
449      CBR1 register in UpdateRegisters fields if it is not enabled in the
450      previous node.
451 
452      If the node to be created is not for 2D addressing channels, there is no
453      need to fill the following fields for CBR1 register :
454      - BlkReptDestAddrUpdate.
455      - BlkRptSrcAddrUpdate.
456      - DestAddrUpdate.
457      - SrcAddrUpdate.
458      - BlkRptCount.
459   */
460   uint32_t BlkRptDestAddrUpdateMode; /*!< This field specifies the block repeat destination address update mode.
461                                           This parameter can be a value of
462                                           @ref DMA_LL_EC_BLK_RPT_DEST_ADDR_UPDATE_MODE.                               */
463 
464   uint32_t BlkRptSrcAddrUpdateMode;  /*!< This field specifies the block repeat source address update mode.
465                                           This parameter can be a value of
466                                           @ref DMA_LL_EC_BLK_RPT_SRC_ADDR_UPDATE_MODE.                                */
467 
468   uint32_t DestAddrUpdateMode;       /*!< This field specify the Destination address update mode.
469                                           This parameter can be a value of @ref DMA_LL_EC_DEST_ADDR_UPDATE_MODE.      */
470 
471   uint32_t SrcAddrUpdateMode;        /*!< This field specify the Source address update mode.
472                                           This parameter can be a value of @ref DMA_LL_EC_SRC_ADDR_UPDATE_MODE.       */
473 
474   uint32_t BlkRptCount;              /*!< This field specify the number of repetitions of the current block.
475                                           This parameter can be a value between 1 and 2048 Min_Data = 0
476                                           and Max_Data = 0x000007FF.                                                  */
477 
478   uint32_t BlkDataLength;            /*!< This field specify the length of a block transfer in bytes.
479                                           This parameter must be a value between Min_Data = 0
480                                           and Max_Data = 0x0000FFFF.                                                  */
481 
482   /* CSAR register fields ******************************************************
483      If any CSAR fields need to be updated comparing to previous node, it is
484      mandatory to update the new value in CSAR register fields and enable update
485      CSAR register in UpdateRegisters fields if it is not enabled in the
486      previous node.
487 
488      For all node created, filling all fields is mandatory.
489   */
490   uint32_t SrcAddress;              /*!< This field specify the transfer source address.
491                                          This parameter must be a value between Min_Data = 0
492                                          and Max_Data = 0xFFFFFFFF.                                                   */
493 
494 
495   /* CDAR register fields ******************************************************
496      If any CDAR fields need to be updated comparing to previous node, it is
497      mandatory to update the new value in CDAR register fields and enable update
498      CDAR register in UpdateRegisters fields if it is not enabled in the
499      previous node.
500 
501      For all node created, filling all fields is mandatory.
502   */
503   uint32_t DestAddress;             /*!< This field specify the transfer destination address.
504                                          This parameter must be a value between Min_Data = 0
505                                          and Max_Data = 0xFFFFFFFF.                                                   */
506 
507   /* CTR3 register fields ******************************************************
508      If any CTR3 fields need to be updated comparing to previous node, it is
509      mandatory to update the new value in CTR3 register fields and enable update
510      CTR3 register in UpdateRegisters fields if it is not enabled in the
511      previous node.
512 
513      This register is used only for 2D addressing channels.
514      If used channel is linear addressing, this register will be overwritten by
515      CLLR register in memory.
516      When this register is enabled on UpdateRegisters and the selected channel
517      is linear addressing, LL APIs will discard this register update in memory.
518   */
519   uint32_t DestAddrOffset;       /*!< This field specifies the destination address offset.
520                                       This parameter can be a value Between 0 to 0x00001FFF.                          */
521 
522   uint32_t SrcAddrOffset;        /*!< This field specifies the source address offset.
523                                       This parameter can be a value Between 0 to 0x00001FFF.                          */
524 
525 
526   /* CBR2 register fields ******************************************************
527      If any CBR2 fields need to be updated comparing to previous node, it is
528      mandatory to update the new value in CBR2 register fields and enable update
529      CBR2 register in UpdateRegisters fields if it is not enabled in the
530      previous node.
531 
532      This register is used only for 2D addressing channels.
533      If used channel is linear addressing, this register will be discarded in
534      memory. When this register is enabled on UpdateRegisters and the selected
535      channel is linear addressing, LL APIs will discard this register update in
536      memory.
537   */
538   uint32_t BlkRptDestAddrOffset; /*!< This field specifies the block repeat destination address offset.
539                                       This parameter can be a value Between 0 to 0x0000FFFF.                          */
540 
541   uint32_t BlkRptSrcAddrOffset;  /*!< This field specifies the block repeat source address offset.
542                                       This parameter can be a value Between 0 to 0x0000FFFF.                          */
543 
544   /* CLLR register fields ******************************************************
545      If any CLLR fields need to be updated comparing to previous node, it is
546      mandatory to update the new value in CLLR register fields and enable update
547      CLLR register in UpdateRegisters fields if it is not enabled in the
548      previous node.
549 
550      If used channel is linear addressing, there is no need to enable/disable
551      CTR3 and CBR2 register in UpdateRegisters fields as they will be discarded
552      by LL APIs.
553   */
554   uint32_t UpdateRegisters;      /*!< Specifies the linked list register update.
555                                       This parameter can be a value of @ref DMA_LL_EC_LINKEDLIST_REGISTER_UPDATE.     */
556 
557   /* DMA Node type field *******************************************************
558      This parameter defines node types as node size and node content varies
559      between channels.
560      Thanks to this fields, linked list queue could be created independently
561      from channel selection. So, one queue could be executed by all DMA channels.
562   */
563   uint32_t NodeType;             /*!< Specifies the node type to be created.
564                                       This parameter can be a value of @ref DMA_LL_EC_LINKEDLIST_NODE_TYPE.           */
565 } LL_DMA_InitNodeTypeDef;
566 
567 /**
568   * @brief  LL DMA linked list node structure definition.
569   * @note   For 2D addressing channels, the maximum node size is :
570   *         (4 Bytes * 8 registers = 32 Bytes).
571   *         For GPDMA linear addressing channels, the maximum node size is :
572   *         (4 Bytes * 6 registers = 24 Bytes).
573   */
574 typedef struct
575 {
576   __IO uint32_t LinkRegisters[8U];
577 
578 } LL_DMA_LinkNodeTypeDef;
579 /**
580   * @}
581   */
582 
583 #endif /* USE_FULL_LL_DRIVER */
584 
585 /* Exported constants --------------------------------------------------------*/
586 
587 /** @defgroup DMA_LL_Exported_Constants DMA Exported Constants
588   * @{
589   */
590 
591 /** @defgroup DMA_LL_EC_CHANNEL Channel
592   * @{
593   */
594 #define LL_DMA_CHANNEL_0   (0x00U)
595 #define LL_DMA_CHANNEL_1   (0x01U)
596 #define LL_DMA_CHANNEL_2   (0x02U)
597 #define LL_DMA_CHANNEL_3   (0x03U)
598 #define LL_DMA_CHANNEL_4   (0x04U)
599 #define LL_DMA_CHANNEL_5   (0x05U)
600 #define LL_DMA_CHANNEL_6   (0x06U)
601 #define LL_DMA_CHANNEL_7   (0x07U)
602 #define LL_DMA_CHANNEL_8   (0x08U)
603 #define LL_DMA_CHANNEL_9   (0x09U)
604 #define LL_DMA_CHANNEL_10  (0x0AU)
605 #define LL_DMA_CHANNEL_11  (0x0BU)
606 #define LL_DMA_CHANNEL_12  (0x0CU)
607 #define LL_DMA_CHANNEL_13  (0x0DU)
608 #define LL_DMA_CHANNEL_14  (0x0EU)
609 #define LL_DMA_CHANNEL_15  (0x0FU)
610 #if defined (USE_FULL_LL_DRIVER)
611 #define LL_DMA_CHANNEL_ALL (0x10U)
612 #endif /* USE_FULL_LL_DRIVER */
613 /**
614   * @}
615   */
616 
617 #if defined (USE_FULL_LL_DRIVER)
618 /** @defgroup DMA_LL_EC_CLLR_OFFSET CLLR offset
619   * @{
620   */
621 #define LL_DMA_CLLR_OFFSET0 (0x00U)
622 #define LL_DMA_CLLR_OFFSET1 (0x01U)
623 #define LL_DMA_CLLR_OFFSET2 (0x02U)
624 #define LL_DMA_CLLR_OFFSET3 (0x03U)
625 #define LL_DMA_CLLR_OFFSET4 (0x04U)
626 #define LL_DMA_CLLR_OFFSET5 (0x05U)
627 #define LL_DMA_CLLR_OFFSET6 (0x06U)
628 #define LL_DMA_CLLR_OFFSET7 (0x07U)
629 /**
630   * @}
631   */
632 #endif /* USE_FULL_LL_DRIVER */
633 
634 /** @defgroup DMA_LL_EC_PRIORITY_LEVEL Priority Level
635   * @{
636   */
637 #define LL_DMA_LOW_PRIORITY_LOW_WEIGHT  0x00000000U    /*!< Priority level : Low Priority, Low Weight  */
638 #define LL_DMA_LOW_PRIORITY_MID_WEIGHT  DMA_CCR_PRIO_0 /*!< Priority level : Low Priority, Mid Weight  */
639 #define LL_DMA_LOW_PRIORITY_HIGH_WEIGHT DMA_CCR_PRIO_1 /*!< Priority level : Low Priority, High Weight */
640 #define LL_DMA_HIGH_PRIORITY            DMA_CCR_PRIO   /*!< Priority level : High Priority             */
641 /**
642   * @}
643   */
644 
645 /** @defgroup DMA_LL_EC_LINKED_LIST_ALLOCATED_PORT Linked List Allocated Port
646   * @{
647   */
648 #define LL_DMA_LINK_ALLOCATED_PORT0 0x00000000U /*!< Linked List Allocated Port 0 */
649 #define LL_DMA_LINK_ALLOCATED_PORT1 DMA_CCR_LAP /*!< Linked List Allocated Port 1 */
650 /**
651   * @}
652   */
653 
654 /** @defgroup DMA_LL_EC_LINK_STEP_MODE Link Step Mode
655   * @{
656   */
657 #define LL_DMA_LSM_FULL_EXECUTION  0x00000000U /*!< Channel execute the full linked list        */
658 #define LL_DMA_LSM_1LINK_EXECUTION DMA_CCR_LSM /*!< Channel execute one node of the linked list */
659 /**
660   * @}
661   */
662 
663 /** @defgroup DMA_LL_EC_DEST_HALFWORD_EXCHANGE Destination Half-Word Exchange
664   * @{
665   */
666 #define LL_DMA_DEST_HALFWORD_PRESERVE 0x00000000U  /*!< No destination Half-Word exchange when destination data width
667                                                         is word                                                       */
668 #define LL_DMA_DEST_HALFWORD_EXCHANGE DMA_CTR1_DHX /*!< Destination Half-Word exchange when destination data width
669                                                         is word                                                       */
670 /**
671   * @}
672   */
673 
674 /** @defgroup DMA_LL_EC_DEST_BYTE_EXCHANGE Destination Byte Exchange
675   * @{
676   */
677 #define LL_DMA_DEST_BYTE_PRESERVE 0x00000000U  /*!< No destination Byte exchange when destination data width > Byte */
678 #define LL_DMA_DEST_BYTE_EXCHANGE DMA_CTR1_DBX /*!< Destination Byte exchange when destination data width > Byte    */
679 /**
680   * @}
681   */
682 
683 /** @defgroup DMA_LL_EC_SRC_BYTE_EXCHANGE Source Byte Exchange
684   * @{
685   */
686 #define LL_DMA_SRC_BYTE_PRESERVE 0x00000000U  /*!< No source Byte exchange when source data width is word */
687 #define LL_DMA_SRC_BYTE_EXCHANGE DMA_CTR1_SBX /*!< Source Byte exchange when source data width is word    */
688 /**
689   * @}
690   */
691 
692 /** @defgroup DMA_LL_EC_SOURCE_ALLOCATED_PORT Source Allocated Port
693   * @{
694   */
695 #define LL_DMA_SRC_ALLOCATED_PORT0 0x00000000U  /*!< Source Allocated Port 0 */
696 #define LL_DMA_SRC_ALLOCATED_PORT1 DMA_CTR1_SAP /*!< Source Allocated Port 1 */
697 /**
698   * @}
699   */
700 
701 /** @defgroup DMA_LL_EC_DESTINATION_ALLOCATED_PORT Destination Allocated Port
702   * @{
703   */
704 #define LL_DMA_DEST_ALLOCATED_PORT0 0x00000000U  /*!< Destination Allocated Port 0 */
705 #define LL_DMA_DEST_ALLOCATED_PORT1 DMA_CTR1_DAP /*!< Destination Allocated Port 1 */
706 /**
707   * @}
708   */
709 
710 /** @defgroup DMA_LL_EC_DESTINATION_INCREMENT_MODE Destination Increment Mode
711   * @{
712   */
713 #define LL_DMA_DEST_FIXED       0x00000000U   /*!< Destination fixed single/burst       */
714 #define LL_DMA_DEST_INCREMENT   DMA_CTR1_DINC /*!< Destination incremented single/burst */
715 /**
716   * @}
717   */
718 
719 /** @defgroup DMA_LL_EC_DESTINATION_DATA_WIDTH Destination Data Width
720   * @{
721   */
722 #define LL_DMA_DEST_DATAWIDTH_BYTE       0x00000000U         /*!< Destination Data Width : Byte       */
723 #define LL_DMA_DEST_DATAWIDTH_HALFWORD   DMA_CTR1_DDW_LOG2_0 /*!< Destination Data Width : HalfWord   */
724 #define LL_DMA_DEST_DATAWIDTH_WORD       DMA_CTR1_DDW_LOG2_1 /*!< Destination Data Width : Word       */
725 /**
726   * @}
727   */
728 
729 /** @defgroup DMA_LL_EC_DATA_ALIGNMENT Data Alignment
730   * @{
731   */
732 #define LL_DMA_DATA_ALIGN_ZEROPADD    0x00000000U    /*!< If src data width < dest data width :
733                                                           => Right Aligned padded with 0 up to destination
734                                                              data width.
735                                                           If src data width > dest data width :
736                                                           => Right Aligned Left Truncated down to destination
737                                                              data width.                                              */
738 #define LL_DMA_DATA_ALIGN_SIGNEXTPADD DMA_CTR1_PAM_0 /*!< If src data width < dest data width :
739                                                           => Right Aligned padded with sign extended up to destination
740                                                              data width.
741                                                           If src data width > dest data width :
742                                                           => Left Aligned Right Truncated down to the destination
743                                                              data width                                               */
744 #define LL_DMA_DATA_PACK_UNPACK       DMA_CTR1_PAM_1 /*!< If src data width < dest data width :
745                                                           => Packed at the destination data width
746                                                           If src data width > dest data width :
747                                                           => Unpacked at the destination data width                   */
748 /**
749   * @}
750   */
751 
752 /** @defgroup DMA_LL_EC_SOURCE_INCREMENT_MODE Source Increment Mode
753   * @{
754   */
755 #define LL_DMA_SRC_FIXED     0x00000000U   /*!< Source fixed single/burst */
756 #define LL_DMA_SRC_INCREMENT DMA_CTR1_SINC /*!< Source incremented single/burst    */
757 /**
758   * @}
759   */
760 
761 /** @defgroup DMA_LL_EC_SOURCE_DATA_WIDTH Source Data Width
762   * @{
763   */
764 #define LL_DMA_SRC_DATAWIDTH_BYTE        0x00000000U         /*!< Source Data Width : Byte       */
765 #define LL_DMA_SRC_DATAWIDTH_HALFWORD    DMA_CTR1_SDW_LOG2_0 /*!< Source Data Width : HalfWord   */
766 #define LL_DMA_SRC_DATAWIDTH_WORD        DMA_CTR1_SDW_LOG2_1 /*!< Source Data Width : Word       */
767 /**
768   * @}
769   */
770 
771 /** @defgroup DMA_LL_EC_BLKHW_REQUEST Block Hardware Request
772   * @{
773   */
774 #define LL_DMA_HWREQUEST_SINGLEBURST 0x00000000U   /*!< Hardware request is driven by a peripheral with a hardware
775                                                         request/acknowledge protocol at a burst level                 */
776 #define LL_DMA_HWREQUEST_BLK         DMA_CTR2_BREQ /*!< Hardware request is driven by a peripheral with a hardware
777                                                         request/acknowledge protocol at a block level                 */
778 /**
779   * @}
780   */
781 
782 /** @defgroup DMA_LL_EC_TRANSFER_EVENT_MODE Transfer Event Mode
783   * @{
784   */
785 #define LL_DMA_TCEM_BLK_TRANSFER         0x00000000U       /*!< The TC (and the HT) event is generated at the
786                                                                 (respectively half) end of each block                 */
787 #define LL_DMA_TCEM_RPT_BLK_TRANSFER     DMA_CTR2_TCEM_0   /*!< The TC (and the HT) event is generated at the
788                                                                 (respectively half) end of the repeated block         */
789 #define LL_DMA_TCEM_EACH_LLITEM_TRANSFER DMA_CTR2_TCEM_1   /*!< The TC (and the HT) event is generated at the
790                                                                 (respectively half) end of each linked-list item      */
791 #define LL_DMA_TCEM_LAST_LLITEM_TRANSFER DMA_CTR2_TCEM     /*!< The TC (and the HT) event is generated at the
792                                                                 (respectively half) end of the last linked-list item  */
793 /**
794   * @}
795   */
796 
797 /** @defgroup DMA_LL_EC_TRIGGER_POLARITY Trigger Polarity
798   * @{
799   */
800 #define LL_DMA_TRIG_POLARITY_MASKED    0x00000000U         /*!< No trigger of the selected DMA request.
801                                                                 Masked trigger event                                  */
802 #define LL_DMA_TRIG_POLARITY_RISING    DMA_CTR2_TRIGPOL_0  /*!< Trigger of the selected DMA request on the rising
803                                                                 edge of the selected trigger event input              */
804 #define LL_DMA_TRIG_POLARITY_FALLING   DMA_CTR2_TRIGPOL_1  /*!< Trigger of the selected DMA request on the falling
805                                                                 edge of the selected trigger event input              */
806 /**
807   * @}
808   */
809 
810 /** @defgroup DMA_LL_EC_TRIGGER_MODE Transfer Trigger Mode
811   * @{
812   */
813 #define LL_DMA_TRIGM_BLK_TRANSFER        0x00000000U      /*!< A block transfer is conditioned by (at least)
814                                                                one hit trigger                                        */
815 #define LL_DMA_TRIGM_RPT_BLK_TRANSFER    DMA_CTR2_TRIGM_0 /*!< A repeated block transfer is conditioned by (at least)
816                                                                one hit trigger                                        */
817 #define LL_DMA_TRIGM_LLI_LINK_TRANSFER   DMA_CTR2_TRIGM_1 /*!< A LLI link transfer is conditioned by (at least)
818                                                                one hit trigger                                        */
819 #define LL_DMA_TRIGM_SINGLBURST_TRANSFER DMA_CTR2_TRIGM   /*!< A Single/Burst transfer is conditioned by (at least)
820                                                                one hit trigger                                        */
821 /**
822   * @}
823   */
824 
825 /** @defgroup DMA_LL_EC_TRANSFER_DIRECTION Transfer Direction
826   * @{
827   */
828 #define LL_DMA_DIRECTION_MEMORY_TO_MEMORY DMA_CTR2_SWREQ /*!< Memory to memory direction     */
829 #define LL_DMA_DIRECTION_PERIPH_TO_MEMORY 0x00000000U    /*!< Peripheral to memory direction */
830 #define LL_DMA_DIRECTION_MEMORY_TO_PERIPH DMA_CTR2_DREQ  /*!< Memory to peripheral direction */
831 /**
832   * @}
833   */
834 
835 /** @defgroup DMA_LL_TRANSFER_MODE Transfer Mode
836   * @{
837   */
838 #define LL_DMA_NORMAL          0x00000000U       /*!< Normal DMA transfer                     */
839 #define LL_DMA_PFCTRL       DMA_CTR2_PFREQ       /*!< HW request peripheral flow control mode */
840 /**
841   * @}
842   */
843 
844 /** @defgroup DMA_LL_EC_BLK_RPT_SRC_ADDR_UPDATE_MODE Block Repeat Source Address Update Mode
845   * @{
846   */
847 #define LL_DMA_BLKRPT_SRC_ADDR_INCREMENT 0x00000000U     /*!< Source address pointer is incremented after each block
848                                                               transfer by source update value                         */
849 #define LL_DMA_BLKRPT_SRC_ADDR_DECREMENT DMA_CBR1_BRSDEC /*!< Source address pointer is decremented after each block
850                                                               transfer by source update value                         */
851 /**
852   * @}
853   */
854 
855 /** @defgroup DMA_LL_EC_BLK_RPT_DEST_ADDR_UPDATE_MODE Block Repeat Destination Address Update Mode
856   * @{
857   */
858 #define LL_DMA_BLKRPT_DEST_ADDR_INCREMENT 0x00000000U     /*!< Destination address is incremented after each block
859                                                                transfer by destination update value                   */
860 #define LL_DMA_BLKRPT_DEST_ADDR_DECREMENT DMA_CBR1_BRDDEC /*!< Destination address is decremented after each block
861                                                                transfer by destination update value                   */
862 /**
863   * @}
864   */
865 
866 /** @defgroup DMA_LL_EC_SRC_ADDR_UPDATE_MODE Burst Source Address Update Mode
867   * @{
868   */
869 #define LL_DMA_BURST_SRC_ADDR_INCREMENT 0x00000000U   /*!< Source address pointer is incremented after each burst
870                                                            transfer by source update value                            */
871 #define LL_DMA_BURST_SRC_ADDR_DECREMENT DMA_CBR1_SDEC /*!< Source address pointer is decremented after each burst
872                                                            transfer by source update value                            */
873 /**
874   * @}
875   */
876 
877 /** @defgroup DMA_LL_EC_DEST_ADDR_UPDATE_MODE Burst Destination Address Update Mode
878   * @{
879   */
880 #define LL_DMA_BURST_DEST_ADDR_INCREMENT 0x00000000U   /*!< Destination address pointer is incremented after each
881                                                             burst transfer by destination update value                */
882 #define LL_DMA_BURST_DEST_ADDR_DECREMENT DMA_CBR1_DDEC /*!< Destination address pointer is decremented after each
883                                                             burst transfer by destination update value                */
884 /**
885   * @}
886   */
887 
888 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
889 /** @defgroup DMA_LL_EC_SOURCE_SECURITY_ATTRIBUTE Source Security Attribute
890   * @{
891   */
892 #define LL_DMA_CHANNEL_NSEC 0x00000000U /*!< NSecure channel */
893 #define LL_DMA_CHANNEL_SEC  0x00000001U /*!< Secure channel  */
894 /**
895   * @}
896   */
897 
898 /** @defgroup DMA_LL_EC_SOURCE_SECURITY_ATTRIBUTE Source Security Attribute
899   * @{
900   */
901 #define LL_DMA_CHANNEL_SRC_NSEC 0x00000000U   /*!< NSecure transfer from the source */
902 #define LL_DMA_CHANNEL_SRC_SEC  DMA_CTR1_SSEC /*!< Secure transfer from the source  */
903 /**
904   * @}
905   */
906 
907 /** @defgroup DMA_LL_EC_DESTINATION_SECURITY_ATTRIBUTE Destination Security Attribute
908   * @{
909   */
910 #define LL_DMA_CHANNEL_DEST_NSEC 0x00000000U   /*!< NSecure transfer from the destination */
911 #define LL_DMA_CHANNEL_DEST_SEC  DMA_CTR1_DSEC /*!< Secure transfer from the destination  */
912 /**
913   * @}
914   */
915 #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
916 
917 /** @defgroup DMA_LL_EC_LINKEDLIST_NODE_TYPE Linked list node type
918   * @{
919   */
920 #define LL_DMA_GPDMA_LINEAR_NODE 0x01U /*!< GPDMA node : linear addressing node      */
921 #define LL_DMA_GPDMA_2D_NODE     0x02U /*!< GPDMA node : 2 dimension addressing node */
922 
923 /**
924   * @}
925   */
926 
927 /** @defgroup DMA_LL_EC_LINKEDLIST_REGISTER_UPDATE Linked list register update
928   * @{
929   */
930 #define LL_DMA_UPDATE_CTR1 DMA_CLLR_UT1 /*!< Update CTR1 register from memory :
931                                              available for all DMA channels                */
932 #define LL_DMA_UPDATE_CTR2 DMA_CLLR_UT2 /*!< Update CTR2 register from memory :
933                                              available for all DMA channels                */
934 #define LL_DMA_UPDATE_CBR1 DMA_CLLR_UB1 /*!< Update CBR1 register from memory :
935                                              available for all DMA channels                */
936 #define LL_DMA_UPDATE_CSAR DMA_CLLR_USA /*!< Update CSAR register from memory :
937                                              available for all DMA channels                */
938 #define LL_DMA_UPDATE_CDAR DMA_CLLR_UDA /*!< Update CDAR register from memory :
939                                              available for all DMA channels                */
940 #define LL_DMA_UPDATE_CTR3 DMA_CLLR_UT3 /*!< Update CTR3 register from memory :
941                                              available only for 2D addressing DMA channels */
942 #define LL_DMA_UPDATE_CBR2 DMA_CLLR_UB2 /*!< Update CBR2 register from memory :
943                                              available only for 2D addressing DMA channels */
944 #define LL_DMA_UPDATE_CLLR DMA_CLLR_ULL /*!< Update CLLR register from memory :
945                                              available for all DMA channels                */
946 /**
947   * @}
948   */
949 
950 /** @defgroup DMA_LL_EC_REQUEST_SELECTION Request Selection
951   * @{
952   */
953 /* GPDMA1 Hardware Requests */
954 #define LL_GPDMA1_REQUEST_ADC1           0U      /*!< GPDMA1 HW request is ADC1          */
955 #if defined (ADC2)
956 #define LL_GPDMA1_REQUEST_ADC2           1U      /*!< GPDMA1 HW request is ADC2          */
957 #endif /* ADC2 */
958 #define LL_GPDMA1_REQUEST_DAC1_CH1       2U      /*!< GPDMA1 HW request is DAC1_CH1      */
959 #define LL_GPDMA1_REQUEST_DAC1_CH2       3U      /*!< GPDMA1 HW request is DAC1_CH2      */
960 #define LL_GPDMA1_REQUEST_TIM6_UP        4U      /*!< GPDMA1 HW request is TIM6_UP       */
961 #define LL_GPDMA1_REQUEST_TIM7_UP        5U      /*!< GPDMA1 HW request is TIM7_UP       */
962 #define LL_GPDMA1_REQUEST_SPI1_RX        6U      /*!< GPDMA1 HW request is SPI1_RX       */
963 #define LL_GPDMA1_REQUEST_SPI1_TX        7U      /*!< GPDMA1 HW request is SPI1_TX       */
964 #define LL_GPDMA1_REQUEST_SPI2_RX        8U      /*!< GPDMA1 HW request is SPI2_RX       */
965 #define LL_GPDMA1_REQUEST_SPI2_TX        9U      /*!< GPDMA1 HW request is SPI2_TX       */
966 #define LL_GPDMA1_REQUEST_SPI3_RX        10U     /*!< GPDMA1 HW request is SPI3_RX       */
967 #define LL_GPDMA1_REQUEST_SPI3_TX        11U     /*!< GPDMA1 HW request is SPI3_TX       */
968 #define LL_GPDMA1_REQUEST_I2C1_RX        12U     /*!< GPDMA1 HW request is I2C1_RX       */
969 #define LL_GPDMA1_REQUEST_I2C1_TX        13U     /*!< GPDMA1 HW request is I2C1_TX       */
970 #define LL_GPDMA1_REQUEST_I2C2_RX        15U     /*!< GPDMA1 HW request is I2C2_RX       */
971 #define LL_GPDMA1_REQUEST_I2C2_TX        16U     /*!< GPDMA1 HW request is I2C2_TX       */
972 #if defined (I2C3)
973 #define LL_GPDMA1_REQUEST_I2C3_RX        18U     /*!< GPDMA1 HW request is I2C3_RX       */
974 #define LL_GPDMA1_REQUEST_I2C3_TX        19U     /*!< GPDMA1 HW request is I2C3_TX       */
975 #endif /* I2C3 */
976 #define LL_GPDMA1_REQUEST_USART1_RX      21U     /*!< GPDMA1 HW request is USART1_RX     */
977 #define LL_GPDMA1_REQUEST_USART1_TX      22U     /*!< GPDMA1 HW request is USART1_TX     */
978 #define LL_GPDMA1_REQUEST_USART2_RX      23U     /*!< GPDMA1 HW request is USART2_RX     */
979 #define LL_GPDMA1_REQUEST_USART2_TX      24U     /*!< GPDMA1 HW request is USART2_TX     */
980 #define LL_GPDMA1_REQUEST_USART3_RX      25U     /*!< GPDMA1 HW request is USART3_RX     */
981 #define LL_GPDMA1_REQUEST_USART3_TX      26U     /*!< GPDMA1 HW request is USART3_TX     */
982 #if defined (UART4)
983 #define LL_GPDMA1_REQUEST_UART4_RX       27U     /*!< GPDMA1 HW request is UART4_RX      */
984 #define LL_GPDMA1_REQUEST_UART4_TX       28U     /*!< GPDMA1 HW request is UART4_TX      */
985 #endif /* UART4 */
986 #if defined (UART4)
987 #define LL_GPDMA1_REQUEST_UART5_RX       29U     /*!< GPDMA1 HW request is UART5_RX      */
988 #define LL_GPDMA1_REQUEST_UART5_TX       30U     /*!< GPDMA1 HW request is UART5_TX      */
989 #endif /* UART5 */
990 #if defined (UART4)
991 #define LL_GPDMA1_REQUEST_USART6_RX      31U     /*!< GPDMA1 HW request is USART6_RX     */
992 #define LL_GPDMA1_REQUEST_USART6_TX      32U     /*!< GPDMA1 HW request is USART6_TX     */
993 #endif /* USART6 */
994 #if defined (UART7)
995 #define LL_GPDMA1_REQUEST_UART7_RX       33U     /*!< GPDMA1 HW request is UART7_RX      */
996 #define LL_GPDMA1_REQUEST_UART7_TX       34U     /*!< GPDMA1 HW request is UART7_TX      */
997 #endif /* UART7 */
998 #if defined (UART8)
999 #define LL_GPDMA1_REQUEST_UART8_RX       35U     /*!< GPDMA1 HW request is UART8_RX      */
1000 #define LL_GPDMA1_REQUEST_UART8_TX       36U     /*!< GPDMA1 HW request is UART8_TX      */
1001 #endif /* UART8 */
1002 #if defined (UART9)
1003 #define LL_GPDMA1_REQUEST_UART9_RX       37U     /*!< GPDMA1 HW request is UART9_RX      */
1004 #define LL_GPDMA1_REQUEST_UART9_TX       38U     /*!< GPDMA1 HW request is UART9_TX      */
1005 #endif /* UART9 */
1006 #if defined (USART10)
1007 #define LL_GPDMA1_REQUEST_USART10_RX     39U     /*!< GPDMA1 HW request is USART10_RX    */
1008 #define LL_GPDMA1_REQUEST_USART10_TX     40U     /*!< GPDMA1 HW request is USART10_TX    */
1009 #endif /* USART10 */
1010 #if defined (USART11)
1011 #define LL_GPDMA1_REQUEST_USART11_RX     41U     /*!< GPDMA1 HW request is USART11_RX    */
1012 #define LL_GPDMA1_REQUEST_USART11_TX     42U     /*!< GPDMA1 HW request is USART11_TX    */
1013 #endif /* USART11 */
1014 #if defined (UART12)
1015 #define LL_GPDMA1_REQUEST_UART12_RX      43U     /*!< GPDMA1 HW request is UART12_RX     */
1016 #define LL_GPDMA1_REQUEST_UART12_TX      44U     /*!< GPDMA1 HW request is UART12_TX     */
1017 #endif /* UART12 */
1018 #define LL_GPDMA1_REQUEST_LPUART1_RX     45U     /*!< GPDMA1 HW request is LPUART1_RX    */
1019 #define LL_GPDMA1_REQUEST_LPUART1_TX     46U     /*!< GPDMA1 HW request is LPUART1_TX    */
1020 #if defined (SPI4)
1021 #define LL_GPDMA1_REQUEST_SPI4_RX        47U     /*!< GPDMA1 HW request is SPI4_RX       */
1022 #define LL_GPDMA1_REQUEST_SPI4_TX        48U     /*!< GPDMA1 HW request is SPI4_TX       */
1023 #endif /* SPI4 */
1024 #if defined (SPI5)
1025 #define LL_GPDMA1_REQUEST_SPI5_RX        49U     /*!< GPDMA1 HW request is SPI5_RX       */
1026 #define LL_GPDMA1_REQUEST_SPI5_TX        50U     /*!< GPDMA1 HW request is SPI5_TX       */
1027 #endif /* SPI5 */
1028 #if defined (SPI6)
1029 #define LL_GPDMA1_REQUEST_SPI6_RX        51U     /*!< GPDMA1 HW request is SPI6_RX       */
1030 #define LL_GPDMA1_REQUEST_SPI6_TX        52U     /*!< GPDMA1 HW request is SPI6_TX       */
1031 #endif /* SPI6 */
1032 #if defined (SAI1)
1033 #define LL_GPDMA1_REQUEST_SAI1_A         53U     /*!< GPDMA1 HW request is SAI1_A        */
1034 #define LL_GPDMA1_REQUEST_SAI1_B         54U     /*!< GPDMA1 HW request is SAI1_B        */
1035 #endif /* SAI1 */
1036 #if defined (SAI2)
1037 #define LL_GPDMA1_REQUEST_SAI2_A         55U     /*!< GPDMA1 HW request is SAI2_A        */
1038 #define LL_GPDMA1_REQUEST_SAI2_B         56U     /*!< GPDMA1 HW request is SAI2_B        */
1039 #endif /* SAI2 */
1040 #if defined (OCTOSPI1)
1041 #define LL_GPDMA1_REQUEST_OCTOSPI1       57U     /*!< GPDMA1 HW request is OCTOSPI1      */
1042 #endif /* OCTOSPI1 */
1043 #define LL_GPDMA1_REQUEST_TIM1_CH1       58U     /*!< GPDMA1 HW request is TIM1_CH1      */
1044 #define LL_GPDMA1_REQUEST_TIM1_CH2       59U     /*!< GPDMA1 HW request is TIM1_CH2      */
1045 #define LL_GPDMA1_REQUEST_TIM1_CH3       60U     /*!< GPDMA1 HW request is TIM1_CH3      */
1046 #define LL_GPDMA1_REQUEST_TIM1_CH4       61U     /*!< GPDMA1 HW request is TIM1_CH4      */
1047 #define LL_GPDMA1_REQUEST_TIM1_UP        62U     /*!< GPDMA1 HW request is TIM1_UP       */
1048 #define LL_GPDMA1_REQUEST_TIM1_TRIG      63U     /*!< GPDMA1 HW request is TIM1_TRIG     */
1049 #define LL_GPDMA1_REQUEST_TIM1_COM       64U     /*!< GPDMA1 HW request is TIM1_COM      */
1050 #if defined (TIM8)
1051 #define LL_GPDMA1_REQUEST_TIM8_CH1       65U     /*!< GPDMA1 HW request is TIM8_CH1      */
1052 #define LL_GPDMA1_REQUEST_TIM8_CH2       66U     /*!< GPDMA1 HW request is TIM8_CH2      */
1053 #define LL_GPDMA1_REQUEST_TIM8_CH3       67U     /*!< GPDMA1 HW request is TIM8_CH3      */
1054 #define LL_GPDMA1_REQUEST_TIM8_CH4       68U     /*!< GPDMA1 HW request is TIM8_CH4      */
1055 #define LL_GPDMA1_REQUEST_TIM8_UP        69U     /*!< GPDMA1 HW request is TIM8_UP       */
1056 #define LL_GPDMA1_REQUEST_TIM8_TRIG      70U     /*!< GPDMA1 HW request is TIM8_TRIG     */
1057 #define LL_GPDMA1_REQUEST_TIM8_COM       71U     /*!< GPDMA1 HW request is TIM8_COM      */
1058 #endif /* TIM8 */
1059 #define LL_GPDMA1_REQUEST_TIM2_CH1       72U     /*!< GPDMA1 HW request is TIM2_CH1      */
1060 #define LL_GPDMA1_REQUEST_TIM2_CH2       73U     /*!< GPDMA1 HW request is TIM2_CH2      */
1061 #define LL_GPDMA1_REQUEST_TIM2_CH3       74U     /*!< GPDMA1 HW request is TIM2_CH3      */
1062 #define LL_GPDMA1_REQUEST_TIM2_CH4       75U     /*!< GPDMA1 HW request is TIM2_CH4      */
1063 #define LL_GPDMA1_REQUEST_TIM2_UP        76U     /*!< GPDMA1 HW request is TIM2_UP       */
1064 #define LL_GPDMA1_REQUEST_TIM3_CH1       77U     /*!< GPDMA1 HW request is TIM3_CH1      */
1065 #define LL_GPDMA1_REQUEST_TIM3_CH2       78U     /*!< GPDMA1 HW request is TIM3_CH2      */
1066 #define LL_GPDMA1_REQUEST_TIM3_CH3       79U     /*!< GPDMA1 HW request is TIM3_CH3      */
1067 #define LL_GPDMA1_REQUEST_TIM3_CH4       80U     /*!< GPDMA1 HW request is TIM3_CH4      */
1068 #define LL_GPDMA1_REQUEST_TIM3_UP        81U     /*!< GPDMA1 HW request is TIM3_UP       */
1069 #define LL_GPDMA1_REQUEST_TIM3_TRIG      82U     /*!< GPDMA1 HW request is TIM3_TRIG     */
1070 #if defined (TIM4)
1071 #define LL_GPDMA1_REQUEST_TIM4_CH1       83U     /*!< GPDMA1 HW request is TIM4_CH1      */
1072 #define LL_GPDMA1_REQUEST_TIM4_CH2       84U     /*!< GPDMA1 HW request is TIM4_CH2      */
1073 #define LL_GPDMA1_REQUEST_TIM4_CH3       85U     /*!< GPDMA1 HW request is TIM4_CH3      */
1074 #define LL_GPDMA1_REQUEST_TIM4_CH4       86U     /*!< GPDMA1 HW request is TIM4_CH4      */
1075 #define LL_GPDMA1_REQUEST_TIM4_UP        87U     /*!< GPDMA1 HW request is TIM4_UP       */
1076 #endif /* TIM4 */
1077 #if defined (TIM5)
1078 #define LL_GPDMA1_REQUEST_TIM5_CH1       88U     /*!< GPDMA1 HW request is TIM5_CH1      */
1079 #define LL_GPDMA1_REQUEST_TIM5_CH2       89U     /*!< GPDMA1 HW request is TIM5_CH2      */
1080 #define LL_GPDMA1_REQUEST_TIM5_CH3       90U     /*!< GPDMA1 HW request is TIM5_CH3      */
1081 #define LL_GPDMA1_REQUEST_TIM5_CH4       91U     /*!< GPDMA1 HW request is TIM5_CH4      */
1082 #define LL_GPDMA1_REQUEST_TIM5_UP        92U     /*!< GPDMA1 HW request is TIM5_UP       */
1083 #define LL_GPDMA1_REQUEST_TIM5_TRIG      93U     /*!< GPDMA1 HW request is TIM5_TRIG     */
1084 #endif /* TIM5 */
1085 #if defined (TIM15)
1086 #define LL_GPDMA1_REQUEST_TIM15_CH1      94U     /*!< GPDMA1 HW request is TIM15_CH1     */
1087 #define LL_GPDMA1_REQUEST_TIM15_UP       95U     /*!< GPDMA1 HW request is TIM15_UP      */
1088 #define LL_GPDMA1_REQUEST_TIM15_TRIG     96U     /*!< GPDMA1 HW request is TIM15_TRIG    */
1089 #define LL_GPDMA1_REQUEST_TIM15_COM      97U     /*!< GPDMA1 HW request is TIM15_COM     */
1090 #endif /* TIM15 */
1091 #if defined (TIM16)
1092 #define LL_GPDMA1_REQUEST_TIM16_CH1      98U     /*!< GPDMA1 HW request is TIM16_CH1     */
1093 #define LL_GPDMA1_REQUEST_TIM16_UP       99U     /*!< GPDMA1 HW request is TIM16_UP      */
1094 #endif /* TIM16 */
1095 #if defined (TIM17)
1096 #define LL_GPDMA1_REQUEST_TIM17_CH1      100U    /*!< GPDMA1 HW request is TIM17_CH1     */
1097 #define LL_GPDMA1_REQUEST_TIM17_UP       101U    /*!< GPDMA1 HW request is TIM17_UP      */
1098 #endif /* TIM17 */
1099 #define LL_GPDMA1_REQUEST_LPTIM1_IC1     102U    /*!< GPDMA1 HW request is LPTIM1_IC1    */
1100 #define LL_GPDMA1_REQUEST_LPTIM1_IC2     103U    /*!< GPDMA1 HW request is LPTIM1_IC2    */
1101 #define LL_GPDMA1_REQUEST_LPTIM1_UE      104U    /*!< GPDMA1 HW request is LPTIM1_UE     */
1102 #define LL_GPDMA1_REQUEST_LPTIM2_IC1     105U    /*!< GPDMA1 HW request is LPTIM2_IC1    */
1103 #define LL_GPDMA1_REQUEST_LPTIM2_IC2     106U    /*!< GPDMA1 HW request is LPTIM2_IC2    */
1104 #define LL_GPDMA1_REQUEST_LPTIM2_UE      107U    /*!< GPDMA1 HW request is LPTIM2_UE     */
1105 #if defined (DCMI)
1106 #define LL_GPDMA1_REQUEST_DCMI           108U    /*!< GPDMA1 HW request is DCMI          */
1107 #endif /* DCMI */
1108 #if defined (AES)
1109 #define LL_GPDMA1_REQUEST_AES_OUT        109U    /*!< GPDMA1 HW request is AES_OUT       */
1110 #define LL_GPDMA1_REQUEST_AES_IN         110U    /*!< GPDMA1 HW request is AES_IN        */
1111 #endif /* AES */
1112 #define LL_GPDMA1_REQUEST_HASH_IN        111U    /*!< GPDMA1 HW request is HASH_IN       */
1113 #if defined (UCPD1)
1114 #define LL_GPDMA1_REQUEST_UCPD1_RX       112U    /*!< GPDMA1 HW request is UCPD1_RX      */
1115 #define LL_GPDMA1_REQUEST_UCPD1_TX       113U    /*!< GPDMA1 HW request is UCPD1_TX      */
1116 #endif /* UCPD1 */
1117 #if defined (CORDIC)
1118 #define LL_GPDMA1_REQUEST_CORDIC_READ    114U    /*!< GPDMA1 HW request is CORDIC_READ   */
1119 #define LL_GPDMA1_REQUEST_CORDIC_WRITE   115U    /*!< GPDMA1 HW request is CORDIC_WRITE  */
1120 #endif /* CORDIC */
1121 #if defined (FMAC)
1122 #define LL_GPDMA1_REQUEST_FMAC_READ      116U    /*!< GPDMA1 HW request is FMAC_READ     */
1123 #define LL_GPDMA1_REQUEST_FMAC_WRITE     117U    /*!< GPDMA1 HW request is FMAC_WRITE    */
1124 #endif /* FMAC */
1125 #if defined (SAES)
1126 #define LL_GPDMA1_REQUEST_SAES_OUT       118U    /*!< GPDMA1 HW request is SAES_OUT      */
1127 #define LL_GPDMA1_REQUEST_SAES_IN        119U    /*!< GPDMA1 HW request is SAES_IN       */
1128 #endif /* SAES */
1129 #define LL_GPDMA1_REQUEST_I3C1_RX        120U    /*!< GPDMA1 HW request is I3C1_RX       */
1130 #define LL_GPDMA1_REQUEST_I3C1_TX        121U    /*!< GPDMA1 HW request is I3C1_TX       */
1131 #define LL_GPDMA1_REQUEST_I3C1_TC        122U    /*!< GPDMA1 HW request is I3C1_TC       */
1132 #define LL_GPDMA1_REQUEST_I3C1_RS        123U    /*!< GPDMA1 HW request is I3C1_RS       */
1133 #if defined (I2C4)
1134 #define LL_GPDMA1_REQUEST_I2C4_RX        124U    /*!< GPDMA1 HW request is I2C4_RX       */
1135 #define LL_GPDMA1_REQUEST_I2C4_TX        125U    /*!< GPDMA1 HW request is I2C4_TX       */
1136 #endif /* I2C4 */
1137 #if defined (LPTIM3)
1138 #define LL_GPDMA1_REQUEST_LPTIM3_IC1     127U    /*!< GPDMA1 HW request is LPTIM3_IC1    */
1139 #define LL_GPDMA1_REQUEST_LPTIM3_IC2     128U    /*!< GPDMA1 HW request is LPTIM3_IC2    */
1140 #define LL_GPDMA1_REQUEST_LPTIM3_UE      129U    /*!< GPDMA1 HW request is LPTIM3_UE     */
1141 #endif /* LPTIM3 */
1142 #if defined (LPTIM5)
1143 #define LL_GPDMA1_REQUEST_LPTIM5_IC1     130U    /*!< GPDMA1 HW request is LPTIM5_IC1    */
1144 #define LL_GPDMA1_REQUEST_LPTIM5_IC2     131U    /*!< GPDMA1 HW request is LPTIM5_IC2    */
1145 #define LL_GPDMA1_REQUEST_LPTIM5_UE      132U    /*!< GPDMA1 HW request is LPTIM5_UE     */
1146 #endif /* LPTIM5 */
1147 #if defined (LPTIM6)
1148 #define LL_GPDMA1_REQUEST_LPTIM6_IC1     133U    /*!< GPDMA1 HW request is LPTIM6_IC1    */
1149 #define LL_GPDMA1_REQUEST_LPTIM6_IC2     134U    /*!< GPDMA1 HW request is LPTIM6_IC2    */
1150 #define LL_GPDMA1_REQUEST_LPTIM6_UE      135U    /*!< GPDMA1 HW request is LPTIM6_UE     */
1151 #endif /* LPTIM6 */
1152 #if defined (I3C2)
1153 #define LL_GPDMA1_REQUEST_I3C2_RX        136U    /*!< GPDMA1 HW request is I3C2_RX       */
1154 #define LL_GPDMA1_REQUEST_I3C2_TX        137U    /*!< GPDMA1 HW request is I3C2_TX       */
1155 #define LL_GPDMA1_REQUEST_I3C2_TC        138U    /*!< GPDMA1 HW request is I3C2_TC       */
1156 #define LL_GPDMA1_REQUEST_I3C2_RS        139U    /*!< GPDMA1 HW request is I3C2_RS       */
1157 #endif /* I3C2 */
1158 
1159 /* GPDMA2 Hardware Requests */
1160 #define LL_GPDMA2_REQUEST_ADC1           0U      /*!< GPDMA2 HW request is ADC1          */
1161 #if defined (ADC2)
1162 #define LL_GPDMA2_REQUEST_ADC2           1U      /*!< GPDMA2 HW request is ADC2          */
1163 #endif /* ADC2 */
1164 #define LL_GPDMA2_REQUEST_DAC1_CH1       2U      /*!< GPDMA2 HW request is DAC1_CH1      */
1165 #define LL_GPDMA2_REQUEST_DAC1_CH2       3U      /*!< GPDMA2 HW request is DAC1_CH2      */
1166 #define LL_GPDMA2_REQUEST_TIM6_UP        4U      /*!< GPDMA2 HW request is TIM6_UP       */
1167 #define LL_GPDMA2_REQUEST_TIM7_UP        5U      /*!< GPDMA2 HW request is TIM7_UP       */
1168 #define LL_GPDMA2_REQUEST_SPI1_RX        6U      /*!< GPDMA2 HW request is SPI1_RX       */
1169 #define LL_GPDMA2_REQUEST_SPI1_TX        7U      /*!< GPDMA2 HW request is SPI1_TX       */
1170 #define LL_GPDMA2_REQUEST_SPI2_RX        8U      /*!< GPDMA2 HW request is SPI2_RX       */
1171 #define LL_GPDMA2_REQUEST_SPI2_TX        9U      /*!< GPDMA2 HW request is SPI2_TX       */
1172 #define LL_GPDMA2_REQUEST_SPI3_RX        10U     /*!< GPDMA2 HW request is SPI3_RX       */
1173 #define LL_GPDMA2_REQUEST_SPI3_TX        11U     /*!< GPDMA2 HW request is SPI3_TX       */
1174 #define LL_GPDMA2_REQUEST_I2C1_RX        12U     /*!< GPDMA2 HW request is I2C1_RX       */
1175 #define LL_GPDMA2_REQUEST_I2C1_TX        13U     /*!< GPDMA2 HW request is I2C1_TX       */
1176 #define LL_GPDMA2_REQUEST_I2C2_RX        15U     /*!< GPDMA2 HW request is I2C2_RX       */
1177 #define LL_GPDMA2_REQUEST_I2C2_TX        16U     /*!< GPDMA2 HW request is I2C2_TX       */
1178 #if defined (I2C3)
1179 #define LL_GPDMA2_REQUEST_I2C3_RX        18U     /*!< GPDMA2 HW request is I2C3_RX       */
1180 #define LL_GPDMA2_REQUEST_I2C3_TX        19U     /*!< GPDMA2 HW request is I2C3_TX       */
1181 #endif /* I2C3 */
1182 #define LL_GPDMA2_REQUEST_USART1_RX      21U     /*!< GPDMA2 HW request is USART1_RX     */
1183 #define LL_GPDMA2_REQUEST_USART1_TX      22U     /*!< GPDMA2 HW request is USART1_TX     */
1184 #define LL_GPDMA2_REQUEST_USART2_RX      23U     /*!< GPDMA2 HW request is USART2_RX     */
1185 #define LL_GPDMA2_REQUEST_USART2_TX      24U     /*!< GPDMA2 HW request is USART2_TX     */
1186 #define LL_GPDMA2_REQUEST_USART3_RX      25U     /*!< GPDMA2 HW request is USART3_RX     */
1187 #define LL_GPDMA2_REQUEST_USART3_TX      26U     /*!< GPDMA2 HW request is USART3_TX     */
1188 #if defined (UART4)
1189 #define LL_GPDMA2_REQUEST_UART4_RX       27U     /*!< GPDMA2 HW request is UART4_RX      */
1190 #define LL_GPDMA2_REQUEST_UART4_TX       28U     /*!< GPDMA2 HW request is UART4_TX      */
1191 #endif /* UART4 */
1192 #if defined (UART4)
1193 #define LL_GPDMA2_REQUEST_UART5_RX       29U     /*!< GPDMA2 HW request is UART5_RX      */
1194 #define LL_GPDMA2_REQUEST_UART5_TX       30U     /*!< GPDMA2 HW request is UART5_TX      */
1195 #endif /* UART5 */
1196 #if defined (UART4)
1197 #define LL_GPDMA2_REQUEST_USART6_RX      31U     /*!< GPDMA2 HW request is USART6_RX     */
1198 #define LL_GPDMA2_REQUEST_USART6_TX      32U     /*!< GPDMA2 HW request is USART6_TX     */
1199 #endif /* USART6 */
1200 #if defined (UART7)
1201 #define LL_GPDMA2_REQUEST_UART7_RX       33U     /*!< GPDMA2 HW request is UART7_RX      */
1202 #define LL_GPDMA2_REQUEST_UART7_TX       34U     /*!< GPDMA2 HW request is UART7_TX      */
1203 #endif /* UART7 */
1204 #if defined (UART8)
1205 #define LL_GPDMA2_REQUEST_UART8_RX       35U     /*!< GPDMA2 HW request is UART8_RX      */
1206 #define LL_GPDMA2_REQUEST_UART8_TX       36U     /*!< GPDMA2 HW request is UART8_TX      */
1207 #endif /* UART8 */
1208 #if defined (UART9)
1209 #define LL_GPDMA2_REQUEST_UART9_RX       37U     /*!< GPDMA2 HW request is UART9_RX      */
1210 #define LL_GPDMA2_REQUEST_UART9_TX       38U     /*!< GPDMA2 HW request is UART9_TX      */
1211 #endif /* UART9 */
1212 #if defined (USART10)
1213 #define LL_GPDMA2_REQUEST_USART10_RX     39U     /*!< GPDMA2 HW request is USART10_RX    */
1214 #define LL_GPDMA2_REQUEST_USART10_TX     40U     /*!< GPDMA2 HW request is USART10_TX    */
1215 #endif /* USART10 */
1216 #if defined (USART11)
1217 #define LL_GPDMA2_REQUEST_USART11_RX     41U     /*!< GPDMA2 HW request is USART11_RX    */
1218 #define LL_GPDMA2_REQUEST_USART11_TX     42U     /*!< GPDMA2 HW request is USART11_TX    */
1219 #endif /* USART11 */
1220 #if defined (UART12)
1221 #define LL_GPDMA2_REQUEST_UART12_RX      43U     /*!< GPDMA2 HW request is UART12_RX     */
1222 #define LL_GPDMA2_REQUEST_UART12_TX      44U     /*!< GPDMA2 HW request is UART12_TX     */
1223 #endif /* UART12 */
1224 #define LL_GPDMA2_REQUEST_LPUART1_RX     45U     /*!< GPDMA2 HW request is LPUART1_RX    */
1225 #define LL_GPDMA2_REQUEST_LPUART1_TX     46U     /*!< GPDMA2 HW request is LPUART1_TX    */
1226 #if defined (SPI4)
1227 #define LL_GPDMA2_REQUEST_SPI4_RX        47U     /*!< GPDMA2 HW request is SPI4_RX       */
1228 #define LL_GPDMA2_REQUEST_SPI4_TX        48U     /*!< GPDMA2 HW request is SPI4_TX       */
1229 #endif /* SPI4 */
1230 #if defined (SPI5)
1231 #define LL_GPDMA2_REQUEST_SPI5_RX        49U     /*!< GPDMA2 HW request is SPI5_RX       */
1232 #define LL_GPDMA2_REQUEST_SPI5_TX        50U     /*!< GPDMA2 HW request is SPI5_TX       */
1233 #endif /* SPI5 */
1234 #if defined (SPI6)
1235 #define LL_GPDMA2_REQUEST_SPI6_RX        51U     /*!< GPDMA2 HW request is SPI6_RX       */
1236 #define LL_GPDMA2_REQUEST_SPI6_TX        52U     /*!< GPDMA2 HW request is SPI6_TX       */
1237 #endif /* SPI6 */
1238 #if defined (SAI1)
1239 #define LL_GPDMA2_REQUEST_SAI1_A         53U     /*!< GPDMA2 HW request is SAI1_A        */
1240 #define LL_GPDMA2_REQUEST_SAI1_B         54U     /*!< GPDMA2 HW request is SAI1_B        */
1241 #endif /* SAI1 */
1242 #if defined (SAI2)
1243 #define LL_GPDMA2_REQUEST_SAI2_A         55U     /*!< GPDMA2 HW request is SAI2_A        */
1244 #define LL_GPDMA2_REQUEST_SAI2_B         56U     /*!< GPDMA2 HW request is SAI2_B        */
1245 #endif /* SAI2 */
1246 #if defined (OCTOSPI1)
1247 #define LL_GPDMA2_REQUEST_OCTOSPI1       57U     /*!< GPDMA2 HW request is OCTOSPI1      */
1248 #endif /* OCTOSPI1 */
1249 #define LL_GPDMA2_REQUEST_TIM1_CH1       58U     /*!< GPDMA2 HW request is TIM1_CH1      */
1250 #define LL_GPDMA2_REQUEST_TIM1_CH2       59U     /*!< GPDMA2 HW request is TIM1_CH2      */
1251 #define LL_GPDMA2_REQUEST_TIM1_CH3       60U     /*!< GPDMA2 HW request is TIM1_CH3      */
1252 #define LL_GPDMA2_REQUEST_TIM1_CH4       61U     /*!< GPDMA2 HW request is TIM1_CH4      */
1253 #define LL_GPDMA2_REQUEST_TIM1_UP        62U     /*!< GPDMA2 HW request is TIM1_UP       */
1254 #define LL_GPDMA2_REQUEST_TIM1_TRIG      63U     /*!< GPDMA2 HW request is TIM1_TRIG     */
1255 #define LL_GPDMA2_REQUEST_TIM1_COM       64U     /*!< GPDMA2 HW request is TIM1_COM      */
1256 #if defined (TIM8)
1257 #define LL_GPDMA2_REQUEST_TIM8_CH1       65U     /*!< GPDMA2 HW request is TIM8_CH1      */
1258 #define LL_GPDMA2_REQUEST_TIM8_CH2       66U     /*!< GPDMA2 HW request is TIM8_CH2      */
1259 #define LL_GPDMA2_REQUEST_TIM8_CH3       67U     /*!< GPDMA2 HW request is TIM8_CH3      */
1260 #define LL_GPDMA2_REQUEST_TIM8_CH4       68U     /*!< GPDMA2 HW request is TIM8_CH4      */
1261 #define LL_GPDMA2_REQUEST_TIM8_UP        69U     /*!< GPDMA2 HW request is TIM8_UP       */
1262 #define LL_GPDMA2_REQUEST_TIM8_TRIG      70U     /*!< GPDMA2 HW request is TIM8_TRIG     */
1263 #define LL_GPDMA2_REQUEST_TIM8_COM       71U     /*!< GPDMA2 HW request is TIM8_COM      */
1264 #endif /* TIM8 */
1265 #define LL_GPDMA2_REQUEST_TIM2_CH1       72U     /*!< GPDMA2 HW request is TIM2_CH1      */
1266 #define LL_GPDMA2_REQUEST_TIM2_CH2       73U     /*!< GPDMA2 HW request is TIM2_CH2      */
1267 #define LL_GPDMA2_REQUEST_TIM2_CH3       74U     /*!< GPDMA2 HW request is TIM2_CH3      */
1268 #define LL_GPDMA2_REQUEST_TIM2_CH4       75U     /*!< GPDMA2 HW request is TIM2_CH4      */
1269 #define LL_GPDMA2_REQUEST_TIM2_UP        76U     /*!< GPDMA2 HW request is TIM2_UP       */
1270 #define LL_GPDMA2_REQUEST_TIM3_CH1       77U     /*!< GPDMA2 HW request is TIM3_CH1      */
1271 #define LL_GPDMA2_REQUEST_TIM3_CH2       78U     /*!< GPDMA2 HW request is TIM3_CH2      */
1272 #define LL_GPDMA2_REQUEST_TIM3_CH3       79U     /*!< GPDMA2 HW request is TIM3_CH3      */
1273 #define LL_GPDMA2_REQUEST_TIM3_CH4       80U     /*!< GPDMA2 HW request is TIM3_CH4      */
1274 #define LL_GPDMA2_REQUEST_TIM3_UP        81U     /*!< GPDMA2 HW request is TIM3_UP       */
1275 #define LL_GPDMA2_REQUEST_TIM3_TRIG      82U     /*!< GPDMA2 HW request is TIM3_TRIG     */
1276 #if defined (TIM4)
1277 #define LL_GPDMA2_REQUEST_TIM4_CH1       83U     /*!< GPDMA2 HW request is TIM4_CH1      */
1278 #define LL_GPDMA2_REQUEST_TIM4_CH2       84U     /*!< GPDMA2 HW request is TIM4_CH2      */
1279 #define LL_GPDMA2_REQUEST_TIM4_CH3       85U     /*!< GPDMA2 HW request is TIM4_CH3      */
1280 #define LL_GPDMA2_REQUEST_TIM4_CH4       86U     /*!< GPDMA2 HW request is TIM4_CH4      */
1281 #define LL_GPDMA2_REQUEST_TIM4_UP        87U     /*!< GPDMA2 HW request is TIM4_UP       */
1282 #endif /* TIM4 */
1283 #if defined (TIM5)
1284 #define LL_GPDMA2_REQUEST_TIM5_CH1       88U     /*!< GPDMA2 HW request is TIM5_CH1      */
1285 #define LL_GPDMA2_REQUEST_TIM5_CH2       89U     /*!< GPDMA2 HW request is TIM5_CH2      */
1286 #define LL_GPDMA2_REQUEST_TIM5_CH3       90U     /*!< GPDMA2 HW request is TIM5_CH3      */
1287 #define LL_GPDMA2_REQUEST_TIM5_CH4       91U     /*!< GPDMA2 HW request is TIM5_CH4      */
1288 #define LL_GPDMA2_REQUEST_TIM5_UP        92U     /*!< GPDMA2 HW request is TIM5_UP       */
1289 #define LL_GPDMA2_REQUEST_TIM5_TRIG      93U     /*!< GPDMA2 HW request is TIM5_TRIG     */
1290 #endif /* TIM5 */
1291 #if defined (TIM15)
1292 #define LL_GPDMA2_REQUEST_TIM15_CH1      94U     /*!< GPDMA2 HW request is TIM15_CH1     */
1293 #define LL_GPDMA2_REQUEST_TIM15_UP       95U     /*!< GPDMA2 HW request is TIM15_UP      */
1294 #define LL_GPDMA2_REQUEST_TIM15_TRIG     96U     /*!< GPDMA2 HW request is TIM15_TRIG    */
1295 #define LL_GPDMA2_REQUEST_TIM15_COM      97U     /*!< GPDMA2 HW request is TIM15_COM     */
1296 #endif /* TIM15 */
1297 #if defined (TIM16)
1298 #define LL_GPDMA2_REQUEST_TIM16_CH1      98U     /*!< GPDMA2 HW request is TIM16_CH1     */
1299 #define LL_GPDMA2_REQUEST_TIM16_UP       99U     /*!< GPDMA2 HW request is TIM16_UP      */
1300 #endif /* TIM16 */
1301 #if defined (TIM17)
1302 #define LL_GPDMA2_REQUEST_TIM17_CH1      100U    /*!< GPDMA2 HW request is TIM17_CH1     */
1303 #define LL_GPDMA2_REQUEST_TIM17_UP       101U    /*!< GPDMA2 HW request is TIM17_UP      */
1304 #endif /* TIM17 */
1305 #define LL_GPDMA2_REQUEST_LPTIM1_IC1     102U    /*!< GPDMA2 HW request is LPTIM1_IC1    */
1306 #define LL_GPDMA2_REQUEST_LPTIM1_IC2     103U    /*!< GPDMA2 HW request is LPTIM1_IC2    */
1307 #define LL_GPDMA2_REQUEST_LPTIM1_UE      104U    /*!< GPDMA2 HW request is LPTIM1_UE     */
1308 #define LL_GPDMA2_REQUEST_LPTIM2_IC1     105U    /*!< GPDMA2 HW request is LPTIM2_IC1    */
1309 #define LL_GPDMA2_REQUEST_LPTIM2_IC2     106U    /*!< GPDMA2 HW request is LPTIM2_IC2    */
1310 #define LL_GPDMA2_REQUEST_LPTIM2_UE      107U    /*!< GPDMA2 HW request is LPTIM2_UE     */
1311 #if defined (DCMI)
1312 #define LL_GPDMA2_REQUEST_DCMI           108U    /*!< GPDMA2 HW request is DCMI          */
1313 #endif /* DCMI */
1314 #if defined (AES)
1315 #define LL_GPDMA2_REQUEST_AES_OUT        109U    /*!< GPDMA2 HW request is AES_OUT       */
1316 #define LL_GPDMA2_REQUEST_AES_IN         110U    /*!< GPDMA2 HW request is AES_IN        */
1317 #endif /* AES */
1318 #define LL_GPDMA2_REQUEST_HASH_IN        111U    /*!< GPDMA2 HW request is HASH_IN       */
1319 #if defined (UCPD1)
1320 #define LL_GPDMA2_REQUEST_UCPD1_RX       112U    /*!< GPDMA2 HW request is UCPD1_RX      */
1321 #define LL_GPDMA2_REQUEST_UCPD1_TX       113U    /*!< GPDMA2 HW request is UCPD1_TX      */
1322 #endif /* UCPD1 */
1323 #if defined (CORDIC)
1324 #define LL_GPDMA2_REQUEST_CORDIC_READ    114U    /*!< GPDMA2 HW request is CORDIC_READ   */
1325 #define LL_GPDMA2_REQUEST_CORDIC_WRITE   115U    /*!< GPDMA2 HW request is CORDIC_WRITE  */
1326 #endif /* CORDIC */
1327 #if defined (FMAC)
1328 #define LL_GPDMA2_REQUEST_FMAC_READ      116U    /*!< GPDMA2 HW request is FMAC_READ     */
1329 #define LL_GPDMA2_REQUEST_FMAC_WRITE     117U    /*!< GPDMA2 HW request is FMAC_WRITE    */
1330 #endif /* FMAC */
1331 #if defined (SAES)
1332 #define LL_GPDMA2_REQUEST_SAES_OUT       118U    /*!< GPDMA2 HW request is SAES_OUT      */
1333 #define LL_GPDMA2_REQUEST_SAES_IN        119U    /*!< GPDMA2 HW request is SAES_IN       */
1334 #endif /* SAES */
1335 #define LL_GPDMA2_REQUEST_I3C1_RX        120U    /*!< GPDMA2 HW request is I3C1_RX       */
1336 #define LL_GPDMA2_REQUEST_I3C1_TX        121U    /*!< GPDMA2 HW request is I3C1_TX       */
1337 #define LL_GPDMA2_REQUEST_I3C1_TC        122U    /*!< GPDMA2 HW request is I3C1_TC       */
1338 #define LL_GPDMA2_REQUEST_I3C1_RS        123U    /*!< GPDMA2 HW request is I3C1_RS       */
1339 #if defined (I2C4)
1340 #define LL_GPDMA2_REQUEST_I2C4_RX        124U    /*!< GPDMA2 HW request is I2C4_RX       */
1341 #define LL_GPDMA2_REQUEST_I2C4_TX        125U    /*!< GPDMA2 HW request is I2C4_TX       */
1342 #endif /* I2C4 */
1343 #if defined (LPTIM3)
1344 #define LL_GPDMA2_REQUEST_LPTIM3_IC1     127U    /*!< GPDMA2 HW request is LPTIM3_IC1    */
1345 #define LL_GPDMA2_REQUEST_LPTIM3_IC2     128U    /*!< GPDMA2 HW request is LPTIM3_IC2    */
1346 #define LL_GPDMA2_REQUEST_LPTIM3_UE      129U    /*!< GPDMA2 HW request is LPTIM3_UE     */
1347 #endif /* LPTIM3 */
1348 #if defined (LPTIM5)
1349 #define LL_GPDMA2_REQUEST_LPTIM5_IC1     130U    /*!< GPDMA2 HW request is LPTIM5_IC1    */
1350 #define LL_GPDMA2_REQUEST_LPTIM5_IC2     131U    /*!< GPDMA2 HW request is LPTIM5_IC2    */
1351 #define LL_GPDMA2_REQUEST_LPTIM5_UE      132U    /*!< GPDMA2 HW request is LPTIM5_UE     */
1352 #endif /* LPTIM5 */
1353 #if defined (LPTIM6)
1354 #define LL_GPDMA2_REQUEST_LPTIM6_IC1     133U    /*!< GPDMA2 HW request is LPTIM6_IC1    */
1355 #define LL_GPDMA2_REQUEST_LPTIM6_IC2     134U    /*!< GPDMA2 HW request is LPTIM6_IC2    */
1356 #define LL_GPDMA2_REQUEST_LPTIM6_UE      135U    /*!< GPDMA2 HW request is LPTIM6_UE     */
1357 #endif /* LPTIM6 */
1358 #if defined (I3C2)
1359 #define LL_GPDMA2_REQUEST_I3C2_RX        136U    /*!< GPDMA2 HW request is I3C2_RX       */
1360 #define LL_GPDMA2_REQUEST_I3C2_TX        137U    /*!< GPDMA2 HW request is I3C2_TX       */
1361 #define LL_GPDMA2_REQUEST_I3C2_TC        138U    /*!< GPDMA2 HW request is I3C2_TC       */
1362 #define LL_GPDMA2_REQUEST_I3C2_RS        139U    /*!< GPDMA2 HW request is I3C2_RS       */
1363 #endif /* I3C2 */
1364 
1365 /**
1366   * @}
1367   */
1368 
1369 /** @defgroup DMA_LL_EC_TRIGGER_SELECTION Trigger Selection
1370   * @{
1371   */
1372 /* GPDMA1 Hardware Triggers */
1373 #define LL_GPDMA1_TRIGGER_EXTI_LINE0          0U       /*!< GPDMA1 HW Trigger signal is EXTI_LINE0         */
1374 #define LL_GPDMA1_TRIGGER_EXTI_LINE1          1U       /*!< GPDMA1 HW Trigger signal is EXTI_LINE1         */
1375 #define LL_GPDMA1_TRIGGER_EXTI_LINE2          2U       /*!< GPDMA1 HW Trigger signal is EXTI_LINE2         */
1376 #define LL_GPDMA1_TRIGGER_EXTI_LINE3          3U       /*!< GPDMA1 HW Trigger signal is EXTI_LINE3         */
1377 #define LL_GPDMA1_TRIGGER_EXTI_LINE4          4U       /*!< GPDMA1 HW Trigger signal is EXTI_LINE4         */
1378 #define LL_GPDMA1_TRIGGER_EXTI_LINE5          5U       /*!< GPDMA1 HW Trigger signal is EXTI_LINE5         */
1379 #define LL_GPDMA1_TRIGGER_EXTI_LINE6          6U       /*!< GPDMA1 HW Trigger signal is EXTI_LINE6         */
1380 #define LL_GPDMA1_TRIGGER_EXTI_LINE7          7U       /*!< GPDMA1 HW Trigger signal is EXTI_LINE7         */
1381 #define LL_GPDMA1_TRIGGER_TAMP_TRG1           8U       /*!< GPDMA1 HW Trigger signal is TAMP_TRG1          */
1382 #define LL_GPDMA1_TRIGGER_TAMP_TRG2           9U       /*!< GPDMA1 HW Trigger signal is TAMP_TRG2          */
1383 #if defined (TAMP_CR1_TAMP3E)
1384 #define LL_GPDMA1_TRIGGER_TAMP_TRG3           10U      /*!< GPDMA1 HW Trigger signal is TAMP_TRG3          */
1385 #endif /* TAMP_CR1_TAMP3E */
1386 #define LL_GPDMA1_TRIGGER_LPTIM1_CH1          11U      /*!< GPDMA1 HW Trigger signal is LPTIM1_CH1         */
1387 #define LL_GPDMA1_TRIGGER_LPTIM1_CH2          12U      /*!< GPDMA1 HW Trigger signal is LPTIM1_CH2         */
1388 #define LL_GPDMA1_TRIGGER_LPTIM2_CH1          13U      /*!< GPDMA1 HW Trigger signal is LPTIM2_CH1         */
1389 #define LL_GPDMA1_TRIGGER_LPTIM2_CH2          14U      /*!< GPDMA1 HW Trigger signal is LPTIM2_CH2         */
1390 #define LL_GPDMA1_TRIGGER_RTC_ALRA_TRG        15U      /*!< GPDMA1 HW Trigger signal is RTC_ALRA_TRG       */
1391 #define LL_GPDMA1_TRIGGER_RTC_ALRB_TRG        16U      /*!< GPDMA1 HW Trigger signal is RTC_ALRB_TRG       */
1392 #define LL_GPDMA1_TRIGGER_RTC_WUT_TRG         17U      /*!< GPDMA1 HW Trigger signal is RTC_WUT_TRG        */
1393 #define LL_GPDMA1_TRIGGER_GPDMA1_CH0_TCF      18U      /*!< GPDMA1 HW Trigger signal is GPDMA1_CH0_TCF     */
1394 #define LL_GPDMA1_TRIGGER_GPDMA1_CH1_TCF      19U      /*!< GPDMA1 HW Trigger signal is GPDMA1_CH1_TCF     */
1395 #define LL_GPDMA1_TRIGGER_GPDMA1_CH2_TCF      20U      /*!< GPDMA1 HW Trigger signal is GPDMA1_CH2_TCF     */
1396 #define LL_GPDMA1_TRIGGER_GPDMA1_CH3_TCF      21U      /*!< GPDMA1 HW Trigger signal is GPDMA1_CH3_TCF     */
1397 #define LL_GPDMA1_TRIGGER_GPDMA1_CH4_TCF      22U      /*!< GPDMA1 HW Trigger signal is GPDMA1_CH4_TCF     */
1398 #define LL_GPDMA1_TRIGGER_GPDMA1_CH5_TCF      23U      /*!< GPDMA1 HW Trigger signal is GPDMA1_CH5_TCF     */
1399 #define LL_GPDMA1_TRIGGER_GPDMA1_CH6_TCF      24U      /*!< GPDMA1 HW Trigger signal is GPDMA1_CH6_TCF     */
1400 #define LL_GPDMA1_TRIGGER_GPDMA1_CH7_TCF      25U      /*!< GPDMA1 HW Trigger signal is GPDMA1_CH7_TCF     */
1401 #define LL_GPDMA1_TRIGGER_GPDMA2_CH0_TCF      26U      /*!< GPDMA1 HW Trigger signal is GPDMA2_CH0_TCF     */
1402 #define LL_GPDMA1_TRIGGER_GPDMA2_CH1_TCF      27U      /*!< GPDMA1 HW Trigger signal is GPDMA2_CH1_TCF     */
1403 #define LL_GPDMA1_TRIGGER_GPDMA2_CH2_TCF      28U      /*!< GPDMA1 HW Trigger signal is GPDMA2_CH2_TCF     */
1404 #define LL_GPDMA1_TRIGGER_GPDMA2_CH3_TCF      29U      /*!< GPDMA1 HW Trigger signal is GPDMA2_CH3_TCF     */
1405 #define LL_GPDMA1_TRIGGER_GPDMA2_CH4_TCF      30U      /*!< GPDMA1 HW Trigger signal is GPDMA2_CH4_TCF     */
1406 #define LL_GPDMA1_TRIGGER_GPDMA2_CH5_TCF      31U      /*!< GPDMA1 HW Trigger signal is GPDMA2_CH5_TCF     */
1407 #define LL_GPDMA1_TRIGGER_GPDMA2_CH6_TCF      32U      /*!< GPDMA1 HW Trigger signal is GPDMA2_CH6_TCF     */
1408 #define LL_GPDMA1_TRIGGER_GPDMA2_CH7_TCF      33U      /*!< GPDMA1 HW Trigger signal is GPDMA2_CH7_TCF     */
1409 #define LL_GPDMA1_TRIGGER_TIM2_TRGO           34U      /*!< GPDMA1 HW Trigger signal is TIM2_TRGO          */
1410 #if defined (TIM15)
1411 #define LL_GPDMA1_TRIGGER_TIM15_TRGO          35U      /*!< GPDMA1 HW Trigger signal is TIM15_TRGO         */
1412 #endif /* TIM15 */
1413 #if defined (TIM12)
1414 #define LL_GPDMA1_TRIGGER_TIM12_TRGO          36U      /*!< GPDMA1 HW Trigger signal is TIM12_TRGO         */
1415 #endif /* TIM12 */
1416 #if defined (LPTIM3)
1417 #define LL_GPDMA1_TRIGGER_LPTIM3_CH1          37U      /*!< GPDMA1 HW Trigger signal is LPTIM3_CH1         */
1418 #define LL_GPDMA1_TRIGGER_LPTIM3_CH2          38U      /*!< GPDMA1 HW Trigger signal is LPTIM3_CH2         */
1419 #endif /* LPTIM3 */
1420 #if defined (LPTIM4)
1421 #define LL_GPDMA1_TRIGGER_LPTIM4_AIT          39U      /*!< GPDMA1 HW Trigger signal is LPTIM4_AIT         */
1422 #endif /* LPTIM4 */
1423 #if defined (LPTIM5)
1424 #define LL_GPDMA1_TRIGGER_LPTIM5_CH1          40U      /*!< GPDMA1 HW Trigger signal is LPTIM5_CH1         */
1425 #define LL_GPDMA1_TRIGGER_LPTIM5_CH2          41U      /*!< GPDMA1 HW Trigger signal is LPTIM5_CH2         */
1426 #endif /* LPTIM5 */
1427 #if defined (LPTIM6)
1428 #define LL_GPDMA1_TRIGGER_LPTIM6_CH1          42U      /*!< GPDMA1 HW Trigger signal is LPTIM6_CH1         */
1429 #define LL_GPDMA1_TRIGGER_LPTIM6_CH2          43U      /*!< GPDMA1 HW Trigger signal is LPTIM6_CH2         */
1430 #endif /* LPTIM6 */
1431 #if defined (COMP1)
1432 #define LL_GPDMA1_TRIGGER_COMP1_OUT           44U      /*!< GPDMA1 HW Trigger signal is COMP1_OUT          */
1433 #endif /* COMP1 */
1434 #if defined (STM32H503xx) || defined(STM32H523xx) || defined(STM32H533xx)
1435 #define LL_GPDMA1_TRIGGER_EVENTOUT            45U      /*!< GPDMA1 HW Trigger signal is EVENTOUT           */
1436 #endif /* STM32H503xx || STM32H523xx || STM32H533xx */
1437 
1438 /* GPDMA2 Hardware Triggers */
1439 #define LL_GPDMA2_TRIGGER_EXTI_LINE0          0U       /*!< GPDMA2 HW Trigger signal is EXTI_LINE0         */
1440 #define LL_GPDMA2_TRIGGER_EXTI_LINE1          1U       /*!< GPDMA2 HW Trigger signal is EXTI_LINE1         */
1441 #define LL_GPDMA2_TRIGGER_EXTI_LINE2          2U       /*!< GPDMA2 HW Trigger signal is EXTI_LINE2         */
1442 #define LL_GPDMA2_TRIGGER_EXTI_LINE3          3U       /*!< GPDMA2 HW Trigger signal is EXTI_LINE3         */
1443 #define LL_GPDMA2_TRIGGER_EXTI_LINE4          4U       /*!< GPDMA2 HW Trigger signal is EXTI_LINE4         */
1444 #define LL_GPDMA2_TRIGGER_EXTI_LINE5          5U       /*!< GPDMA2 HW Trigger signal is EXTI_LINE5         */
1445 #define LL_GPDMA2_TRIGGER_EXTI_LINE6          6U       /*!< GPDMA2 HW Trigger signal is EXTI_LINE6         */
1446 #define LL_GPDMA2_TRIGGER_EXTI_LINE7          7U       /*!< GPDMA2 HW Trigger signal is EXTI_LINE7         */
1447 #define LL_GPDMA2_TRIGGER_TAMP_TRG1           8U       /*!< GPDMA2 HW Trigger signal is TAMP_TRG1          */
1448 #define LL_GPDMA2_TRIGGER_TAMP_TRG2           9U       /*!< GPDMA2 HW Trigger signal is TAMP_TRG2          */
1449 #define LL_GPDMA2_TRIGGER_TAMP_TRG3           10U      /*!< GPDMA2 HW Trigger signal is TAMP_TRG3          */
1450 #define LL_GPDMA2_TRIGGER_LPTIM1_CH1          11U      /*!< GPDMA2 HW Trigger signal is LPTIM1_CH1         */
1451 #define LL_GPDMA2_TRIGGER_LPTIM1_CH2          12U      /*!< GPDMA2 HW Trigger signal is LPTIM1_CH2         */
1452 #define LL_GPDMA2_TRIGGER_LPTIM2_CH1          13U      /*!< GPDMA2 HW Trigger signal is LPTIM2_CH1         */
1453 #define LL_GPDMA2_TRIGGER_LPTIM2_CH2          14U      /*!< GPDMA2 HW Trigger signal is LPTIM2_CH2         */
1454 #define LL_GPDMA2_TRIGGER_RTC_ALRA_TRG        15U      /*!< GPDMA2 HW Trigger signal is RTC_ALRA_TRG       */
1455 #define LL_GPDMA2_TRIGGER_RTC_ALRB_TRG        16U      /*!< GPDMA2 HW Trigger signal is RTC_ALRB_TRG       */
1456 #define LL_GPDMA2_TRIGGER_RTC_WUT_TRG         17U      /*!< GPDMA2 HW Trigger signal is RTC_WUT_TRG        */
1457 #define LL_GPDMA2_TRIGGER_GPDMA1_CH0_TCF      18U      /*!< GPDMA2 HW Trigger signal is GPDMA1_CH0_TCF     */
1458 #define LL_GPDMA2_TRIGGER_GPDMA1_CH1_TCF      19U      /*!< GPDMA2 HW Trigger signal is GPDMA1_CH1_TCF     */
1459 #define LL_GPDMA2_TRIGGER_GPDMA1_CH2_TCF      20U      /*!< GPDMA2 HW Trigger signal is GPDMA1_CH2_TCF     */
1460 #define LL_GPDMA2_TRIGGER_GPDMA1_CH3_TCF      21U      /*!< GPDMA2 HW Trigger signal is GPDMA1_CH3_TCF     */
1461 #define LL_GPDMA2_TRIGGER_GPDMA1_CH4_TCF      22U      /*!< GPDMA2 HW Trigger signal is GPDMA1_CH4_TCF     */
1462 #define LL_GPDMA2_TRIGGER_GPDMA1_CH5_TCF      23U      /*!< GPDMA2 HW Trigger signal is GPDMA1_CH5_TCF     */
1463 #define LL_GPDMA2_TRIGGER_GPDMA1_CH6_TCF      24U      /*!< GPDMA2 HW Trigger signal is GPDMA1_CH6_TCF     */
1464 #define LL_GPDMA2_TRIGGER_GPDMA1_CH7_TCF      25U      /*!< GPDMA2 HW Trigger signal is GPDMA1_CH7_TCF     */
1465 #define LL_GPDMA2_TRIGGER_GPDMA2_CH0_TCF      26U      /*!< GPDMA2 HW Trigger signal is GPDMA2_CH0_TCF     */
1466 #define LL_GPDMA2_TRIGGER_GPDMA2_CH1_TCF      27U      /*!< GPDMA2 HW Trigger signal is GPDMA2_CH1_TCF     */
1467 #define LL_GPDMA2_TRIGGER_GPDMA2_CH2_TCF      28U      /*!< GPDMA2 HW Trigger signal is GPDMA2_CH2_TCF     */
1468 #define LL_GPDMA2_TRIGGER_GPDMA2_CH3_TCF      29U      /*!< GPDMA2 HW Trigger signal is GPDMA2_CH3_TCF     */
1469 #define LL_GPDMA2_TRIGGER_GPDMA2_CH4_TCF      30U      /*!< GPDMA2 HW Trigger signal is GPDMA2_CH4_TCF     */
1470 #define LL_GPDMA2_TRIGGER_GPDMA2_CH5_TCF      31U      /*!< GPDMA2 HW Trigger signal is GPDMA2_CH5_TCF     */
1471 #define LL_GPDMA2_TRIGGER_GPDMA2_CH6_TCF      32U      /*!< GPDMA2 HW Trigger signal is GPDMA2_CH6_TCF     */
1472 #define LL_GPDMA2_TRIGGER_GPDMA2_CH7_TCF      33U      /*!< GPDMA2 HW Trigger signal is GPDMA2_CH7_TCF     */
1473 #define LL_GPDMA2_TRIGGER_TIM2_TRGO           34U      /*!< GPDMA2 HW Trigger signal is TIM2_TRGO          */
1474 #if defined (TIM15)
1475 #define LL_GPDMA2_TRIGGER_TIM15_TRGO          35U      /*!< GPDMA2 HW Trigger signal is TIM15_TRGO         */
1476 #endif /* TIM15 */
1477 #if defined (TIM12)
1478 #define LL_GPDMA2_TRIGGER_TIM12_TRGO          36U      /*!< GPDMA2 HW Trigger signal is TIM12_TRGO         */
1479 #endif /* TIM12 */
1480 #if defined (LPTIM3)
1481 #define LL_GPDMA2_TRIGGER_LPTIM3_CH1          37U      /*!< GPDMA2 HW Trigger signal is LPTIM3_CH1         */
1482 #define LL_GPDMA2_TRIGGER_LPTIM3_CH2          38U      /*!< GPDMA2 HW Trigger signal is LPTIM3_CH2         */
1483 #endif /* LPTIM3 */
1484 #if defined (LPTIM4)
1485 #define LL_GPDMA2_TRIGGER_LPTIM4_AIT          39U      /*!< GPDMA2 HW Trigger signal is LPTIM4_AIT         */
1486 #endif /* LPTIM4 */
1487 #if defined (LPTIM5)
1488 #define LL_GPDMA2_TRIGGER_LPTIM5_CH1          40U      /*!< GPDMA2 HW Trigger signal is LPTIM5_CH1         */
1489 #define LL_GPDMA2_TRIGGER_LPTIM5_CH2          41U      /*!< GPDMA2 HW Trigger signal is LPTIM5_CH2         */
1490 #endif /* LPTIM5 */
1491 #if defined (LPTIM6)
1492 #define LL_GPDMA2_TRIGGER_LPTIM6_CH1          42U      /*!< GPDMA2 HW Trigger signal is LPTIM6_CH1         */
1493 #define LL_GPDMA2_TRIGGER_LPTIM6_CH2          43U      /*!< GPDMA2 HW Trigger signal is LPTIM6_CH2         */
1494 #endif /* LPTIM6 */
1495 #if defined (COMP1)
1496 #define LL_GPDMA2_TRIGGER_COMP1_OUT           44U      /*!< GPDMA2 HW Trigger signal is COMP1_OUT          */
1497 #endif /* COMP1 */
1498 #if defined (STM32H503xx) || defined(STM32H523xx) || defined(STM32H533xx)
1499 #define LL_GPDMA2_TRIGGER_EVENTOUT            45U      /*!< GPDMA2 HW Trigger signal is EVENTOUT           */
1500 #endif /* STM32H503xx || STM32H523xx || STM32H533xx */
1501 /**
1502   * @}
1503   */
1504 
1505 /**
1506   * @}
1507   */
1508 
1509 /* Exported macro ------------------------------------------------------------*/
1510 
1511 /** @defgroup DMA_LL_Exported_Macros DMA Exported Macros
1512   * @{
1513   */
1514 
1515 /** @defgroup DMA_LL_EM_COMMON_WRITE_READ_REGISTERS Common Write and Read Registers macros
1516   * @{
1517   */
1518 /**
1519   * @brief  Write a value in DMA register.
1520   * @param  __INSTANCE__ DMA Instance.
1521   * @param  __REG__      Register to be written.
1522   * @param  __VALUE__    Value to be written in the register.
1523   * @retval None.
1524   */
1525 #define LL_DMA_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG((__INSTANCE__)->__REG__, (__VALUE__))
1526 
1527 /**
1528   * @brief  Read a value in DMA register.
1529   * @param  __INSTANCE__ DMA Instance.
1530   * @param  __REG__      Register to be read.
1531   * @retval Register value.
1532   */
1533 #define LL_DMA_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
1534 /**
1535   * @}
1536   */
1537 
1538 /** @defgroup DMA_LL_EM_CONVERT_DMAxCHANNELy Convert DMAxChannely
1539   * @{
1540   */
1541 /**
1542   * @brief  Convert DMAx_Channely into DMAx.
1543   * @param  __CHANNEL_INSTANCE__ DMAx_Channely.
1544   * @retval DMAx.
1545   */
1546 #define LL_DMA_GET_INSTANCE(__CHANNEL_INSTANCE__) \
1547   (((uint32_t)(__CHANNEL_INSTANCE__) > ((uint32_t)GPDMA1_Channel7)) ?  GPDMA2 : GPDMA1)
1548 
1549 /**
1550   * @brief  Convert DMAx_Channely into LL_DMA_CHANNEL_y.
1551   * @param  __CHANNEL_INSTANCE__ DMAx_Channely.
1552   * @retval LL_DMA_CHANNEL_y.
1553   */
1554 #define LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__) \
1555   (((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA1_Channel0))  ? LL_DMA_CHANNEL_0  : \
1556    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA2_Channel0))  ? LL_DMA_CHANNEL_0  : \
1557    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA1_Channel1))  ? LL_DMA_CHANNEL_1  : \
1558    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA2_Channel1))  ? LL_DMA_CHANNEL_1  : \
1559    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA1_Channel2))  ? LL_DMA_CHANNEL_2  : \
1560    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA2_Channel2))  ? LL_DMA_CHANNEL_2  : \
1561    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA1_Channel3))  ? LL_DMA_CHANNEL_3  : \
1562    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA2_Channel3))  ? LL_DMA_CHANNEL_3  : \
1563    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA1_Channel4))  ? LL_DMA_CHANNEL_4  : \
1564    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA2_Channel4))  ? LL_DMA_CHANNEL_4  : \
1565    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA1_Channel5))  ? LL_DMA_CHANNEL_5  : \
1566    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA2_Channel5))  ? LL_DMA_CHANNEL_5  : \
1567    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA1_Channel6))  ? LL_DMA_CHANNEL_6  : \
1568    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA2_Channel6))  ? LL_DMA_CHANNEL_6  : \
1569    ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA1_Channel7))  ? LL_DMA_CHANNEL_7  : \
1570    LL_DMA_CHANNEL_7)
1571 
1572 /**
1573   * @brief  Convert DMA Instance DMAx and LL_DMA_CHANNEL_y into DMAx_Channely.
1574   * @param  __DMA_INSTANCE__ DMAx.
1575   * @param  __CHANNEL__      LL_DMA_CHANNEL_y.
1576   * @retval DMAx_Channely.
1577   */
1578 #define LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__) \
1579   ((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_0))) \
1580    ? GPDMA1_Channel0  :                                                                                                \
1581    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) \
1582    ? GPDMA1_Channel1  :                                                                                                \
1583    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) \
1584    ? GPDMA1_Channel2  :                                                                                                \
1585    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) \
1586    ? GPDMA1_Channel3  :                                                                                                \
1587    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) \
1588    ? GPDMA1_Channel4  :                                                                                                \
1589    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) \
1590    ? GPDMA1_Channel5  :                                                                                                \
1591    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6))) \
1592    ? GPDMA1_Channel6  :                                                                                                \
1593    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_7))) \
1594    ? GPDMA1_Channel7  :                                                                                                \
1595    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_0))) \
1596    ? GPDMA2_Channel0  :                                                                                                \
1597    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) \
1598    ? GPDMA2_Channel1  :                                                                                                \
1599    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2)))\
1600    ? GPDMA2_Channel2 :                                                                                                \
1601    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3)))\
1602    ? GPDMA2_Channel3 :                                                                                                \
1603    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4)))\
1604    ? GPDMA2_Channel4 :                                                                                                \
1605    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5)))\
1606    ? GPDMA2_Channel5 :                                                                                                \
1607    (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6)))\
1608    ? GPDMA2_Channel6 :  GPDMA2_Channel7)
1609 
1610 /**
1611   * @}
1612   */
1613 
1614 /**
1615   * @}
1616   */
1617 
1618 /* Exported functions --------------------------------------------------------*/
1619 
1620 /** @defgroup DMA_LL_Exported_Functions DMA Exported Functions
1621   * @{
1622   */
1623 
1624 /** @defgroup DMA_LL_EF_Configuration Configuration
1625   * @{
1626   */
1627 /**
1628   * @brief Enable channel.
1629   * @note  This API is used for all available DMA channels.
1630   * @rmtoll CCR          EN            LL_DMA_EnableChannel
1631   * @param  DMAx DMAx Instance.
1632   * @param  Channel This parameter can be one of the following values:
1633   *         @arg @ref LL_DMA_CHANNEL_0
1634   *         @arg @ref LL_DMA_CHANNEL_1
1635   *         @arg @ref LL_DMA_CHANNEL_2
1636   *         @arg @ref LL_DMA_CHANNEL_3
1637   *         @arg @ref LL_DMA_CHANNEL_4
1638   *         @arg @ref LL_DMA_CHANNEL_5
1639   *         @arg @ref LL_DMA_CHANNEL_6
1640   *         @arg @ref LL_DMA_CHANNEL_7
1641   * @retval None.
1642   */
LL_DMA_EnableChannel(const DMA_TypeDef * DMAx,uint32_t Channel)1643 __STATIC_INLINE void LL_DMA_EnableChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
1644 {
1645   uint32_t dma_base_addr = (uint32_t)DMAx;
1646   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_EN);
1647 }
1648 
1649 /**
1650   * @brief Disable channel.
1651   * @note  This API is used for all available DMA channels.
1652   * @rmtoll CCR          EN            LL_DMA_DisableChannel
1653   * @param  DMAx DMAx Instance.
1654   * @param  Channel This parameter can be one of the following values:
1655   *         @arg @ref LL_DMA_CHANNEL_0
1656   *         @arg @ref LL_DMA_CHANNEL_1
1657   *         @arg @ref LL_DMA_CHANNEL_2
1658   *         @arg @ref LL_DMA_CHANNEL_3
1659   *         @arg @ref LL_DMA_CHANNEL_4
1660   *         @arg @ref LL_DMA_CHANNEL_5
1661   *         @arg @ref LL_DMA_CHANNEL_6
1662   *         @arg @ref LL_DMA_CHANNEL_7
1663   * @retval None.
1664   */
LL_DMA_DisableChannel(const DMA_TypeDef * DMAx,uint32_t Channel)1665 __STATIC_INLINE void LL_DMA_DisableChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
1666 {
1667   uint32_t dma_base_addr = (uint32_t)DMAx;
1668   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR,
1669           (DMA_CCR_SUSP | DMA_CCR_RESET));
1670 }
1671 
1672 /**
1673   * @brief Check if channel is enabled or disabled.
1674   * @note  This API is used for all available DMA channels.
1675   * @rmtoll CCR          EN            LL_DMA_IsEnabledChannel
1676   * @param  DMAx DMAx Instance
1677   * @param  Channel This parameter can be one of the following values:
1678   *         @arg @ref LL_DMA_CHANNEL_0
1679   *         @arg @ref LL_DMA_CHANNEL_1
1680   *         @arg @ref LL_DMA_CHANNEL_2
1681   *         @arg @ref LL_DMA_CHANNEL_3
1682   *         @arg @ref LL_DMA_CHANNEL_4
1683   *         @arg @ref LL_DMA_CHANNEL_5
1684   *         @arg @ref LL_DMA_CHANNEL_6
1685   *         @arg @ref LL_DMA_CHANNEL_7
1686   * @retval State of bit (1 or 0).
1687   */
LL_DMA_IsEnabledChannel(const DMA_TypeDef * DMAx,uint32_t Channel)1688 __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
1689 {
1690   uint32_t dma_base_addr = (uint32_t)DMAx;
1691   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_EN)
1692            == (DMA_CCR_EN)) ? 1UL : 0UL);
1693 }
1694 
1695 /**
1696   * @brief Reset channel.
1697   * @note  This API is used for all available DMA channels.
1698   * @rmtoll CCR          RESET            LL_DMA_ResetChannel
1699   * @param  DMAx DMAx Instance
1700   * @param  Channel This parameter can be one of the following values:
1701   *         @arg @ref LL_DMA_CHANNEL_0
1702   *         @arg @ref LL_DMA_CHANNEL_1
1703   *         @arg @ref LL_DMA_CHANNEL_2
1704   *         @arg @ref LL_DMA_CHANNEL_3
1705   *         @arg @ref LL_DMA_CHANNEL_4
1706   *         @arg @ref LL_DMA_CHANNEL_5
1707   *         @arg @ref LL_DMA_CHANNEL_6
1708   *         @arg @ref LL_DMA_CHANNEL_7
1709   * @retval None.
1710   */
LL_DMA_ResetChannel(const DMA_TypeDef * DMAx,uint32_t Channel)1711 __STATIC_INLINE void LL_DMA_ResetChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
1712 {
1713   uint32_t dma_base_addr = (uint32_t)DMAx;
1714   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_RESET);
1715 }
1716 
1717 /**
1718   * @brief Suspend channel.
1719   * @note  This API is used for all available DMA channels.
1720   * @rmtoll CCR          SUSP            LL_DMA_SuspendChannel
1721   * @param  DMAx DMAx Instance
1722   * @param  Channel This parameter can be one of the following values:
1723   *         @arg @ref LL_DMA_CHANNEL_0
1724   *         @arg @ref LL_DMA_CHANNEL_1
1725   *         @arg @ref LL_DMA_CHANNEL_2
1726   *         @arg @ref LL_DMA_CHANNEL_3
1727   *         @arg @ref LL_DMA_CHANNEL_4
1728   *         @arg @ref LL_DMA_CHANNEL_5
1729   *         @arg @ref LL_DMA_CHANNEL_6
1730   *         @arg @ref LL_DMA_CHANNEL_7
1731   * @retval None.
1732   */
LL_DMA_SuspendChannel(const DMA_TypeDef * DMAx,uint32_t Channel)1733 __STATIC_INLINE void LL_DMA_SuspendChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
1734 {
1735   uint32_t dma_base_addr = (uint32_t)DMAx;
1736   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_SUSP);
1737 }
1738 
1739 /**
1740   * @brief Resume channel.
1741   * @note  This API is used for all available DMA channels.
1742   * @rmtoll CCR          SUSP            LL_DMA_ResumeChannel
1743   * @param  DMAx DMAx Instance
1744   * @param  Channel This parameter can be one of the following values:
1745   *         @arg @ref LL_DMA_CHANNEL_0
1746   *         @arg @ref LL_DMA_CHANNEL_1
1747   *         @arg @ref LL_DMA_CHANNEL_2
1748   *         @arg @ref LL_DMA_CHANNEL_3
1749   *         @arg @ref LL_DMA_CHANNEL_4
1750   *         @arg @ref LL_DMA_CHANNEL_5
1751   *         @arg @ref LL_DMA_CHANNEL_6
1752   *         @arg @ref LL_DMA_CHANNEL_7
1753   * @retval None.
1754   */
LL_DMA_ResumeChannel(const DMA_TypeDef * DMAx,uint32_t Channel)1755 __STATIC_INLINE void LL_DMA_ResumeChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
1756 {
1757   uint32_t dma_base_addr = (uint32_t)DMAx;
1758   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_SUSP);
1759 }
1760 
1761 /**
1762   * @brief Check if channel is suspended.
1763   * @note  This API is used for all available DMA channels.
1764   * @rmtoll CCR          SUSP            LL_DMA_IsSuspendedChannel
1765   * @param  DMAx DMAx Instance
1766   * @param  Channel This parameter can be one of the following values:
1767   *         @arg @ref LL_DMA_CHANNEL_0
1768   *         @arg @ref LL_DMA_CHANNEL_1
1769   *         @arg @ref LL_DMA_CHANNEL_2
1770   *         @arg @ref LL_DMA_CHANNEL_3
1771   *         @arg @ref LL_DMA_CHANNEL_4
1772   *         @arg @ref LL_DMA_CHANNEL_5
1773   *         @arg @ref LL_DMA_CHANNEL_6
1774   *         @arg @ref LL_DMA_CHANNEL_7
1775   * @retval State of bit (1 or 0).
1776   */
LL_DMA_IsSuspendedChannel(const DMA_TypeDef * DMAx,uint32_t Channel)1777 __STATIC_INLINE uint32_t LL_DMA_IsSuspendedChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
1778 {
1779   uint32_t dma_base_addr = (uint32_t)DMAx;
1780   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_SUSP)
1781            == (DMA_CCR_SUSP)) ? 1UL : 0UL);
1782 }
1783 
1784 /**
1785   * @brief Set linked-list base address.
1786   * @note  This API is used for all available DMA channels.
1787   * @rmtoll CLBAR          LBA           LL_DMA_SetLinkedListBaseAddr
1788   * @param  DMAx DMAx Instance
1789   * @param  Channel This parameter can be one of the following values:
1790   *         @arg @ref LL_DMA_CHANNEL_0
1791   *         @arg @ref LL_DMA_CHANNEL_1
1792   *         @arg @ref LL_DMA_CHANNEL_2
1793   *         @arg @ref LL_DMA_CHANNEL_3
1794   *         @arg @ref LL_DMA_CHANNEL_4
1795   *         @arg @ref LL_DMA_CHANNEL_5
1796   *         @arg @ref LL_DMA_CHANNEL_6
1797   *         @arg @ref LL_DMA_CHANNEL_7
1798   * @param  LinkedListBaseAddr Between 0 to 0xFFFF0000 (where the 4 LSB bytes
1799   *         are always 0)
1800   * @retval None.
1801   */
LL_DMA_SetLinkedListBaseAddr(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t LinkedListBaseAddr)1802 __STATIC_INLINE void LL_DMA_SetLinkedListBaseAddr(const DMA_TypeDef *DMAx, uint32_t Channel,
1803                                                   uint32_t LinkedListBaseAddr)
1804 {
1805   uint32_t dma_base_addr = (uint32_t)DMAx;
1806   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLBAR, DMA_CLBAR_LBA,
1807              (LinkedListBaseAddr & DMA_CLBAR_LBA));
1808 }
1809 
1810 /**
1811   * @brief Get linked-list base address.
1812   * @note  This API is used for all available DMA channels.
1813   * @rmtoll CLBAR          LBA           LL_DMA_GetLinkedListBaseAddr
1814   * @param  DMAx DMAx Instance
1815   * @param  Channel This parameter can be one of the following values:
1816   *         @arg @ref LL_DMA_CHANNEL_0
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   *         @arg @ref LL_DMA_CHANNEL_6
1823   *         @arg @ref LL_DMA_CHANNEL_7
1824   * @retval Value between 0 to 0xFFFF0000 (where the 4 LSB bytes are always 0)
1825   */
LL_DMA_GetLinkedListBaseAddr(const DMA_TypeDef * DMAx,uint32_t Channel)1826 __STATIC_INLINE uint32_t LL_DMA_GetLinkedListBaseAddr(const DMA_TypeDef *DMAx, uint32_t Channel)
1827 {
1828   uint32_t dma_base_addr = (uint32_t)DMAx;
1829   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLBAR, DMA_CLBAR_LBA));
1830 }
1831 
1832 /**
1833   * @brief Configure all parameters linked to channel control.
1834   * @note  This API is used for all available DMA channels.
1835   * @rmtoll CCR         PRIO           LL_DMA_ConfigControl\n
1836   *         CCR         LAP            LL_DMA_ConfigControl\n
1837   *         CCR         LSM            LL_DMA_ConfigControl
1838   * @param  DMAx DMAx Instance
1839   * @param  Channel This parameter can be one of the following values:
1840   *         @arg @ref LL_DMA_CHANNEL_0
1841   *         @arg @ref LL_DMA_CHANNEL_1
1842   *         @arg @ref LL_DMA_CHANNEL_2
1843   *         @arg @ref LL_DMA_CHANNEL_3
1844   *         @arg @ref LL_DMA_CHANNEL_4
1845   *         @arg @ref LL_DMA_CHANNEL_5
1846   *         @arg @ref LL_DMA_CHANNEL_6
1847   *         @arg @ref LL_DMA_CHANNEL_7
1848   * @param  Configuration This parameter must be a combination of all the following values:
1849   *         @arg @ref LL_DMA_LOW_PRIORITY_LOW_WEIGHT  or @ref LL_DMA_LOW_PRIORITY_MID_WEIGHT or
1850   *              @ref LL_DMA_LOW_PRIORITY_HIGH_WEIGHT or @ref LL_DMA_HIGH_PRIORITY
1851   *         @arg @ref LL_DMA_LINK_ALLOCATED_PORT0     or @ref LL_DMA_LINK_ALLOCATED_PORT1
1852   *         @arg @ref LL_DMA_LSM_FULL_EXECUTION       or @ref LL_DMA_LSM_1LINK_EXECUTION
1853   *@retval None.
1854   */
LL_DMA_ConfigControl(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Configuration)1855 __STATIC_INLINE void LL_DMA_ConfigControl(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
1856 {
1857   uint32_t dma_base_addr = (uint32_t)DMAx;
1858   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR,
1859              (DMA_CCR_PRIO | DMA_CCR_LAP | DMA_CCR_LSM), Configuration);
1860 }
1861 
1862 /**
1863   * @brief Set priority level.
1864   * @note  This API is used for all available DMA channels.
1865   * @rmtoll CCR          PRIO           LL_DMA_SetChannelPriorityLevel
1866   * @param  DMAx DMAx Instance
1867   * @param  Channel This parameter can be one of the following values:
1868   *         @arg @ref LL_DMA_CHANNEL_0
1869   *         @arg @ref LL_DMA_CHANNEL_1
1870   *         @arg @ref LL_DMA_CHANNEL_2
1871   *         @arg @ref LL_DMA_CHANNEL_3
1872   *         @arg @ref LL_DMA_CHANNEL_4
1873   *         @arg @ref LL_DMA_CHANNEL_5
1874   *         @arg @ref LL_DMA_CHANNEL_6
1875   *         @arg @ref LL_DMA_CHANNEL_7
1876   * @param  Priority This parameter can be one of the following values:
1877   *         @arg @ref LL_DMA_LOW_PRIORITY_LOW_WEIGHT
1878   *         @arg @ref LL_DMA_LOW_PRIORITY_MID_WEIGHT
1879   *         @arg @ref LL_DMA_LOW_PRIORITY_HIGH_WEIGHT
1880   *         @arg @ref LL_DMA_HIGH_PRIORITY
1881   * @retval None.
1882   */
LL_DMA_SetChannelPriorityLevel(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Priority)1883 __STATIC_INLINE void LL_DMA_SetChannelPriorityLevel(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t  Priority)
1884 {
1885   uint32_t dma_base_addr = (uint32_t)DMAx;
1886   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_PRIO, Priority);
1887 }
1888 
1889 /**
1890   * @brief Get Channel priority level.
1891   * @note  This API is used for all available DMA channels.
1892   * @rmtoll CCR          PRIO           LL_DMA_GetChannelPriorityLevel
1893   * @param  DMAx DMAx Instance
1894   * @param  Channel This parameter can be one of the following values:
1895   *         @arg @ref LL_DMA_CHANNEL_0
1896   *         @arg @ref LL_DMA_CHANNEL_1
1897   *         @arg @ref LL_DMA_CHANNEL_2
1898   *         @arg @ref LL_DMA_CHANNEL_3
1899   *         @arg @ref LL_DMA_CHANNEL_4
1900   *         @arg @ref LL_DMA_CHANNEL_5
1901   *         @arg @ref LL_DMA_CHANNEL_6
1902   *         @arg @ref LL_DMA_CHANNEL_7
1903   * @retval Returned value can be one of the following values:
1904   *         @arg @ref LL_DMA_LOW_PRIORITY_LOW_WEIGHT
1905   *         @arg @ref LL_DMA_LOW_PRIORITY_MID_WEIGHT
1906   *         @arg @ref LL_DMA_LOW_PRIORITY_HIGH_WEIGHT
1907   *         @arg @ref LL_DMA_HIGH_PRIORITY
1908   */
LL_DMA_GetChannelPriorityLevel(const DMA_TypeDef * DMAx,uint32_t Channel)1909 __STATIC_INLINE uint32_t LL_DMA_GetChannelPriorityLevel(const DMA_TypeDef *DMAx, uint32_t Channel)
1910 {
1911   uint32_t dma_base_addr = (uint32_t)DMAx;
1912   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_PRIO));
1913 }
1914 
1915 /**
1916   * @brief Set linked-list allocated port.
1917   * @rmtoll CCR          LAP           LL_DMA_SetLinkAllocatedPort
1918   * @param  DMAx DMAx Instance
1919   * @param  Channel This parameter can be one of the following values:
1920   *         @arg @ref LL_DMA_CHANNEL_0
1921   *         @arg @ref LL_DMA_CHANNEL_1
1922   *         @arg @ref LL_DMA_CHANNEL_2
1923   *         @arg @ref LL_DMA_CHANNEL_3
1924   *         @arg @ref LL_DMA_CHANNEL_4
1925   *         @arg @ref LL_DMA_CHANNEL_5
1926   *         @arg @ref LL_DMA_CHANNEL_6
1927   *         @arg @ref LL_DMA_CHANNEL_7
1928   * @param  LinkAllocatedPort This parameter can be one of the following values:
1929   *         @arg @ref LL_DMA_LINK_ALLOCATED_PORT0
1930   *         @arg @ref LL_DMA_LINK_ALLOCATED_PORT1
1931   * @retval None.
1932   */
LL_DMA_SetLinkAllocatedPort(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t LinkAllocatedPort)1933 __STATIC_INLINE void LL_DMA_SetLinkAllocatedPort(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t  LinkAllocatedPort)
1934 {
1935   uint32_t dma_base_addr = (uint32_t)DMAx;
1936   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR,
1937              DMA_CCR_LAP, LinkAllocatedPort);
1938 }
1939 
1940 /**
1941   * @brief Get linked-list allocated port.
1942   * @rmtoll CCR          LAP           LL_DMA_GetLinkAllocatedPort
1943   * @param  DMAx DMAx Instance
1944   * @param  Channel This parameter can be one of the following values:
1945   *         @arg @ref LL_DMA_CHANNEL_0
1946   *         @arg @ref LL_DMA_CHANNEL_1
1947   *         @arg @ref LL_DMA_CHANNEL_2
1948   *         @arg @ref LL_DMA_CHANNEL_3
1949   *         @arg @ref LL_DMA_CHANNEL_4
1950   *         @arg @ref LL_DMA_CHANNEL_5
1951   *         @arg @ref LL_DMA_CHANNEL_6
1952   *         @arg @ref LL_DMA_CHANNEL_7
1953   * @retval Returned value can be one of the following values:
1954   *         @arg @ref LL_DMA_LINK_ALLOCATED_PORT0
1955   *         @arg @ref LL_DMA_LINK_ALLOCATED_PORT1
1956   */
LL_DMA_GetLinkAllocatedPort(const DMA_TypeDef * DMAx,uint32_t Channel)1957 __STATIC_INLINE uint32_t LL_DMA_GetLinkAllocatedPort(const DMA_TypeDef *DMAx, uint32_t Channel)
1958 {
1959   uint32_t dma_base_addr = (uint32_t)DMAx;
1960   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_LAP));
1961 }
1962 
1963 /**
1964   * @brief Set link step mode.
1965   * @note  This API is used for all available DMA channels.
1966   * @rmtoll CCR          LSM           LL_DMA_SetLinkStepMode
1967   * @param  DMAx DMAx Instance
1968   * @param  Channel This parameter can be one of the following values:
1969     *         @arg @ref LL_DMA_CHANNEL_0
1970   *         @arg @ref LL_DMA_CHANNEL_1
1971   *         @arg @ref LL_DMA_CHANNEL_2
1972   *         @arg @ref LL_DMA_CHANNEL_3
1973   *         @arg @ref LL_DMA_CHANNEL_4
1974   *         @arg @ref LL_DMA_CHANNEL_5
1975   *         @arg @ref LL_DMA_CHANNEL_6
1976   *         @arg @ref LL_DMA_CHANNEL_7
1977   * @param  LinkStepMode This parameter can be one of the following values:
1978   *         @arg @ref LL_DMA_LSM_FULL_EXECUTION
1979   *         @arg @ref LL_DMA_LSM_1LINK_EXECUTION
1980   * @retval None.
1981   */
LL_DMA_SetLinkStepMode(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t LinkStepMode)1982 __STATIC_INLINE void LL_DMA_SetLinkStepMode(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t LinkStepMode)
1983 {
1984   uint32_t dma_base_addr = (uint32_t)DMAx;
1985   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_LSM, LinkStepMode);
1986 }
1987 
1988 /**
1989   * @brief Get Link step mode.
1990   * @note  This API is used for all available DMA channels.
1991   * @rmtoll CCR          LSM           LL_DMA_GetLinkStepMode
1992   * @param  DMAx DMAx Instance
1993   * @param  Channel This parameter can be one of the following values:
1994   *         @arg @ref LL_DMA_CHANNEL_0
1995   *         @arg @ref LL_DMA_CHANNEL_1
1996   *         @arg @ref LL_DMA_CHANNEL_2
1997   *         @arg @ref LL_DMA_CHANNEL_3
1998   *         @arg @ref LL_DMA_CHANNEL_4
1999   *         @arg @ref LL_DMA_CHANNEL_5
2000   *         @arg @ref LL_DMA_CHANNEL_6
2001   *         @arg @ref LL_DMA_CHANNEL_7
2002   * @retval Returned value can be one of the following values:
2003   *         @arg @ref LL_DMA_LSM_FULL_EXECUTION
2004   *         @arg @ref LL_DMA_LSM_1LINK_EXECUTION
2005   */
LL_DMA_GetLinkStepMode(const DMA_TypeDef * DMAx,uint32_t Channel)2006 __STATIC_INLINE uint32_t LL_DMA_GetLinkStepMode(const DMA_TypeDef *DMAx, uint32_t Channel)
2007 {
2008   uint32_t dma_base_addr = (uint32_t)DMAx;
2009   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_LSM));
2010 }
2011 
2012 /**
2013   * @brief Configure data transfer.
2014   * @note  This API is used for all available DMA channels.
2015   * @rmtoll CTR1          DAP           LL_DMA_ConfigTransfer\n
2016   *         CTR1          DHX           LL_DMA_ConfigTransfer\n
2017   *         CTR1          DBX           LL_DMA_ConfigTransfer\n
2018   *         CTR1          DINC          LL_DMA_ConfigTransfer\n
2019   *         CTR1          SAP           LL_DMA_ConfigTransfer\n
2020   *         CTR1          SBX           LL_DMA_ConfigTransfer\n
2021   *         CTR1          PAM           LL_DMA_ConfigTransfer\n
2022   *         CTR1          SINC          LL_DMA_ConfigTransfer
2023   * @param  DMAx DMAx Instance
2024   * @param  Channel This parameter can be one of the following values:
2025   *         @arg @ref LL_DMA_CHANNEL_0
2026   *         @arg @ref LL_DMA_CHANNEL_1
2027   *         @arg @ref LL_DMA_CHANNEL_2
2028   *         @arg @ref LL_DMA_CHANNEL_3
2029   *         @arg @ref LL_DMA_CHANNEL_4
2030   *         @arg @ref LL_DMA_CHANNEL_5
2031   *         @arg @ref LL_DMA_CHANNEL_6
2032   *         @arg @ref LL_DMA_CHANNEL_7
2033   * @param  Configuration This parameter must be a combination of all the following values:
2034   *         @arg @ref LL_DMA_DEST_ALLOCATED_PORT0     or @ref LL_DMA_DEST_ALLOCATED_PORT1
2035   *         @arg @ref LL_DMA_DEST_HALFWORD_PRESERVE   or @ref LL_DMA_DEST_HALFWORD_EXCHANGE
2036   *         @arg @ref LL_DMA_DEST_BYTE_PRESERVE       or @ref LL_DMA_DEST_BYTE_EXCHANGE
2037   *         @arg @ref LL_DMA_SRC_BYTE_PRESERVE        or @ref LL_DMA_SRC_BYTE_EXCHANGE
2038   *         @arg @ref LL_DMA_DEST_FIXED               or @ref LL_DMA_DEST_INCREMENT
2039   *         @arg @ref LL_DMA_DEST_DATAWIDTH_BYTE      or @ref LL_DMA_DEST_DATAWIDTH_HALFWORD or
2040   *              @ref LL_DMA_DEST_DATAWIDTH_WORD
2041   *         @arg @ref LL_DMA_SRC_ALLOCATED_PORT0      or @ref LL_DMA_SRC_ALLOCATED_PORT1
2042   *         @arg @ref LL_DMA_DATA_ALIGN_ZEROPADD      or @ref LL_DMA_DATA_ALIGN_SIGNEXTPADD  or
2043   *              @ref LL_DMA_DATA_PACK_UNPACK
2044   *         @arg @ref LL_DMA_SRC_FIXED                or @ref LL_DMA_SRC_INCREMENT
2045   *         @arg @ref LL_DMA_SRC_DATAWIDTH_BYTE       or @ref LL_DMA_SRC_DATAWIDTH_HALFWORD  or
2046   *              @ref LL_DMA_SRC_DATAWIDTH_WORD
2047   *@retval None.
2048   */
LL_DMA_ConfigTransfer(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Configuration)2049 __STATIC_INLINE void LL_DMA_ConfigTransfer(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
2050 {
2051   uint32_t dma_base_addr = (uint32_t)DMAx;
2052   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1,
2053              DMA_CTR1_DAP | DMA_CTR1_DHX | DMA_CTR1_DBX | DMA_CTR1_SBX | DMA_CTR1_DINC | DMA_CTR1_SINC | \
2054              DMA_CTR1_SAP | DMA_CTR1_PAM | DMA_CTR1_DDW_LOG2 | DMA_CTR1_SDW_LOG2, Configuration);
2055 }
2056 
2057 /**
2058   * @brief Configure source and destination burst length.
2059   * @rmtoll CTR1          DBL_1           LL_DMA_SetDestBurstLength\n
2060   * @rmtoll CTR1          SBL_1           LL_DMA_SetDestBurstLength
2061   * @param  DMAx DMAx Instance
2062   * @param  Channel This parameter can be one of the following values:
2063   *         @arg @ref LL_DMA_CHANNEL_0
2064   *         @arg @ref LL_DMA_CHANNEL_1
2065   *         @arg @ref LL_DMA_CHANNEL_2
2066   *         @arg @ref LL_DMA_CHANNEL_3
2067   *         @arg @ref LL_DMA_CHANNEL_4
2068   *         @arg @ref LL_DMA_CHANNEL_5
2069   *         @arg @ref LL_DMA_CHANNEL_6
2070   *         @arg @ref LL_DMA_CHANNEL_7
2071   * @param  SrcBurstLength Between 1 to 64
2072   * @param  DestBurstLength Between 1 to 64
2073   * @retval None.
2074   */
LL_DMA_ConfigBurstLength(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcBurstLength,uint32_t DestBurstLength)2075 __STATIC_INLINE void LL_DMA_ConfigBurstLength(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcBurstLength,
2076                                               uint32_t DestBurstLength)
2077 {
2078   uint32_t dma_base_addr = (uint32_t)DMAx;
2079   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1,
2080              (DMA_CTR1_SBL_1 | DMA_CTR1_DBL_1), (((SrcBurstLength - 1U) << DMA_CTR1_SBL_1_Pos) & DMA_CTR1_SBL_1) | \
2081              (((DestBurstLength - 1U) << DMA_CTR1_DBL_1_Pos) & DMA_CTR1_DBL_1));
2082 }
2083 
2084 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
2085 /**
2086   * @brief Configure all secure parameters linked to DMA channel.
2087   * @note  This API is used for all available DMA channels.
2088   * @rmtoll SECCFGR       SEC            LL_DMA_ConfigChannelSecure\n
2089   * @rmtoll CTR1          SSEC           LL_DMA_ConfigChannelSecure\n
2090   * @rmtoll CTR1          DSEC           LL_DMA_ConfigChannelSecure
2091   * @param  DMAx DMAx Instance
2092   * @param  Channel This parameter can be one of the following values:
2093   *         @arg @ref LL_DMA_CHANNEL_0
2094   *         @arg @ref LL_DMA_CHANNEL_1
2095   *         @arg @ref LL_DMA_CHANNEL_2
2096   *         @arg @ref LL_DMA_CHANNEL_3
2097   *         @arg @ref LL_DMA_CHANNEL_4
2098   *         @arg @ref LL_DMA_CHANNEL_5
2099   *         @arg @ref LL_DMA_CHANNEL_6
2100   *         @arg @ref LL_DMA_CHANNEL_7
2101   * @param  Configuration This parameter must be a combination of all the following values:
2102   *         @arg @ref LL_DMA_CHANNEL_NSEC      or @ref LL_DMA_CHANNEL_SEC
2103   *         @arg @ref LL_DMA_CHANNEL_SRC_NSEC  or @ref LL_DMA_CHANNEL_SRC_SEC
2104   *         @arg @ref LL_DMA_CHANNEL_DEST_NSEC or @ref LL_DMA_CHANNEL_DEST_SEC
2105   * @retval None.
2106   */
LL_DMA_ConfigChannelSecure(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Configuration)2107 __STATIC_INLINE void LL_DMA_ConfigChannelSecure(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
2108 {
2109   uint32_t dma_base_addr = (uint32_t)DMAx;
2110   MODIFY_REG(DMAx->SECCFGR, (DMA_SECCFGR_SEC0 << Channel), ((Configuration & LL_DMA_CHANNEL_SEC) << Channel));
2111   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1,
2112              (DMA_CTR1_SSEC | DMA_CTR1_DSEC), (Configuration & (~LL_DMA_CHANNEL_SEC)));
2113 }
2114 
2115 /**
2116   * @brief Enable security attribute of the DMA transfer to the destination.
2117   * @note  This API is used for all available DMA channels.
2118   * @rmtoll CTR1          DSEC           LL_DMA_EnableChannelDestSecure
2119   * @param  DMAx DMAx Instance
2120   * @param  Channel This parameter can be one of the following values:
2121   *         @arg @ref LL_DMA_CHANNEL_0
2122   *         @arg @ref LL_DMA_CHANNEL_1
2123   *         @arg @ref LL_DMA_CHANNEL_2
2124   *         @arg @ref LL_DMA_CHANNEL_3
2125   *         @arg @ref LL_DMA_CHANNEL_4
2126   *         @arg @ref LL_DMA_CHANNEL_5
2127   *         @arg @ref LL_DMA_CHANNEL_6
2128   *         @arg @ref LL_DMA_CHANNEL_7
2129   * @retval None.
2130   */
LL_DMA_EnableChannelDestSecure(const DMA_TypeDef * DMAx,uint32_t Channel)2131 __STATIC_INLINE void LL_DMA_EnableChannelDestSecure(const DMA_TypeDef *DMAx, uint32_t Channel)
2132 {
2133   uint32_t dma_base_addr = (uint32_t)DMAx;
2134   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DSEC);
2135 }
2136 
2137 /**
2138   * @brief Disable security attribute of the DMA transfer to the destination.
2139   * @note  This API is used for all available DMA channels.
2140   * @rmtoll CTR1          DSEC           LL_DMA_DisableChannelDestSecure
2141   * @param  DMAx DMAx Instance
2142   * @param  Channel This parameter can be one of the following values:
2143   *         @arg @ref LL_DMA_CHANNEL_0
2144   *         @arg @ref LL_DMA_CHANNEL_1
2145   *         @arg @ref LL_DMA_CHANNEL_2
2146   *         @arg @ref LL_DMA_CHANNEL_3
2147   *         @arg @ref LL_DMA_CHANNEL_4
2148   *         @arg @ref LL_DMA_CHANNEL_5
2149   *         @arg @ref LL_DMA_CHANNEL_6
2150   *         @arg @ref LL_DMA_CHANNEL_7
2151   * @retval None.
2152   */
LL_DMA_DisableChannelDestSecure(const DMA_TypeDef * DMAx,uint32_t Channel)2153 __STATIC_INLINE void LL_DMA_DisableChannelDestSecure(const DMA_TypeDef *DMAx, uint32_t Channel)
2154 {
2155   uint32_t dma_base_addr = (uint32_t)DMAx;
2156   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DSEC);
2157 }
2158 #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
2159 
2160 #if defined (DMA_SECCFGR_SEC0)
2161 /**
2162   * @brief Check security attribute of the DMA transfer to the destination.
2163   * @note  This API is used for all available DMA channels.
2164   * @rmtoll CTR1          DSEC           LL_DMA_IsEnabledChannelDestSecure
2165   * @param  DMAx DMAx Instance
2166   * @param  Channel This parameter can be one of the following values:
2167   *         @arg @ref LL_DMA_CHANNEL_0
2168   *         @arg @ref LL_DMA_CHANNEL_1
2169   *         @arg @ref LL_DMA_CHANNEL_2
2170   *         @arg @ref LL_DMA_CHANNEL_3
2171   *         @arg @ref LL_DMA_CHANNEL_4
2172   *         @arg @ref LL_DMA_CHANNEL_5
2173   *         @arg @ref LL_DMA_CHANNEL_6
2174   *         @arg @ref LL_DMA_CHANNEL_7
2175   * @retval State of bit (1 or 0).
2176   */
LL_DMA_IsEnabledChannelDestSecure(const DMA_TypeDef * DMAx,uint32_t Channel)2177 __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannelDestSecure(const DMA_TypeDef *DMAx, uint32_t Channel)
2178 {
2179   uint32_t dma_base_addr = (uint32_t)DMAx;
2180   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DSEC)
2181            == (DMA_CTR1_DSEC)) ? 1UL : 0UL);
2182 }
2183 #endif /* DMA_SECCFGR_SEC0 */
2184 
2185 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
2186 /**
2187   * @brief Enable security attribute of the DMA transfer from the source.
2188   * @note  This API is used for all available DMA channels.
2189   * @rmtoll CTR1          SSEC           LL_DMA_EnableChannelSrcSecure
2190   * @param  DMAx DMAx Instance
2191   * @param  Channel This parameter can be one of the following values:
2192   *         @arg @ref LL_DMA_CHANNEL_0
2193   *         @arg @ref LL_DMA_CHANNEL_1
2194   *         @arg @ref LL_DMA_CHANNEL_2
2195   *         @arg @ref LL_DMA_CHANNEL_3
2196   *         @arg @ref LL_DMA_CHANNEL_4
2197   *         @arg @ref LL_DMA_CHANNEL_5
2198   *         @arg @ref LL_DMA_CHANNEL_6
2199   *         @arg @ref LL_DMA_CHANNEL_7
2200   * @retval None.
2201   */
LL_DMA_EnableChannelSrcSecure(const DMA_TypeDef * DMAx,uint32_t Channel)2202 __STATIC_INLINE void LL_DMA_EnableChannelSrcSecure(const DMA_TypeDef *DMAx, uint32_t Channel)
2203 {
2204   uint32_t dma_base_addr = (uint32_t)DMAx;
2205   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SSEC);
2206 }
2207 
2208 /**
2209   * @brief Disable security attribute of the DMA transfer from the source.
2210   * @note  This API is used for all available DMA channels.
2211   * @rmtoll CTR1          SSEC           LL_DMA_DisableChannelSrcSecure
2212   * @param  DMAx DMAx Instance
2213   * @param  Channel This parameter can be one of the following values:
2214   *         @arg @ref LL_DMA_CHANNEL_0
2215   *         @arg @ref LL_DMA_CHANNEL_1
2216   *         @arg @ref LL_DMA_CHANNEL_2
2217   *         @arg @ref LL_DMA_CHANNEL_3
2218   *         @arg @ref LL_DMA_CHANNEL_4
2219   *         @arg @ref LL_DMA_CHANNEL_5
2220   *         @arg @ref LL_DMA_CHANNEL_6
2221   *         @arg @ref LL_DMA_CHANNEL_7
2222   * @retval None.
2223   */
LL_DMA_DisableChannelSrcSecure(const DMA_TypeDef * DMAx,uint32_t Channel)2224 __STATIC_INLINE void LL_DMA_DisableChannelSrcSecure(const DMA_TypeDef *DMAx, uint32_t Channel)
2225 {
2226   uint32_t dma_base_addr = (uint32_t)DMAx;
2227   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SSEC);
2228 }
2229 #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
2230 
2231 #if defined (DMA_SECCFGR_SEC0)
2232 /**
2233   * @brief Check security attribute of the DMA transfer from the source.
2234   * @note  This API is used for all available DMA channels.
2235   * @rmtoll CTR1          SSEC           LL_DMA_IsEnabledChannelSrcSecure
2236   * @param  DMAx DMAx Instance
2237   * @param  Channel This parameter can be one of the following values:
2238   *         @arg @ref LL_DMA_CHANNEL_0
2239   *         @arg @ref LL_DMA_CHANNEL_1
2240   *         @arg @ref LL_DMA_CHANNEL_2
2241   *         @arg @ref LL_DMA_CHANNEL_3
2242   *         @arg @ref LL_DMA_CHANNEL_4
2243   *         @arg @ref LL_DMA_CHANNEL_5
2244   *         @arg @ref LL_DMA_CHANNEL_6
2245   *         @arg @ref LL_DMA_CHANNEL_7
2246   * @retval State of bit (1 or 0).
2247   */
LL_DMA_IsEnabledChannelSrcSecure(const DMA_TypeDef * DMAx,uint32_t Channel)2248 __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannelSrcSecure(const DMA_TypeDef *DMAx, uint32_t Channel)
2249 {
2250   uint32_t dma_base_addr = (uint32_t)DMAx;
2251   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SSEC)
2252            == (DMA_CTR1_SSEC)) ? 1UL : 0UL);
2253 }
2254 #endif /* DMA_SECCFGR_SEC0 */
2255 
2256 /**
2257   * @brief Set destination allocated port.
2258   * @rmtoll CTR1          DAP           LL_DMA_SetDestAllocatedPort
2259   * @param  DMAx DMAx Instance
2260   * @param  Channel This parameter can be one of the following values:
2261   *         @arg @ref LL_DMA_CHANNEL_0
2262   *         @arg @ref LL_DMA_CHANNEL_1
2263   *         @arg @ref LL_DMA_CHANNEL_2
2264   *         @arg @ref LL_DMA_CHANNEL_3
2265   *         @arg @ref LL_DMA_CHANNEL_4
2266   *         @arg @ref LL_DMA_CHANNEL_5
2267   *         @arg @ref LL_DMA_CHANNEL_6
2268   *         @arg @ref LL_DMA_CHANNEL_7
2269   * @param  DestAllocatedPort This parameter can be one of the following values:
2270   *         @arg @ref LL_DMA_DEST_ALLOCATED_PORT0
2271   *         @arg @ref LL_DMA_DEST_ALLOCATED_PORT1
2272   * @retval None.
2273   */
LL_DMA_SetDestAllocatedPort(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DestAllocatedPort)2274 __STATIC_INLINE void LL_DMA_SetDestAllocatedPort(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DestAllocatedPort)
2275 {
2276   uint32_t dma_base_addr = (uint32_t)DMAx;
2277   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DAP,
2278              DestAllocatedPort);
2279 }
2280 
2281 /**
2282   * @brief Get destination allocated port.
2283   * @rmtoll CTR1          DAP           LL_DMA_GetDestAllocatedPort
2284   * @param  DMAx DMAx Instance
2285   * @param  Channel This parameter can be one of the following values:
2286   *         @arg @ref LL_DMA_CHANNEL_0
2287   *         @arg @ref LL_DMA_CHANNEL_1
2288   *         @arg @ref LL_DMA_CHANNEL_2
2289   *         @arg @ref LL_DMA_CHANNEL_3
2290   *         @arg @ref LL_DMA_CHANNEL_4
2291   *         @arg @ref LL_DMA_CHANNEL_5
2292   *         @arg @ref LL_DMA_CHANNEL_6
2293   *         @arg @ref LL_DMA_CHANNEL_7
2294   * @retval Returned value can be one of the following values:
2295   *         @arg @ref LL_DMA_DEST_ALLOCATED_PORT0
2296   *         @arg @ref LL_DMA_DEST_ALLOCATED_PORT1
2297   */
LL_DMA_GetDestAllocatedPort(const DMA_TypeDef * DMAx,uint32_t Channel)2298 __STATIC_INLINE uint32_t LL_DMA_GetDestAllocatedPort(const DMA_TypeDef *DMAx, uint32_t Channel)
2299 {
2300   uint32_t dma_base_addr = (uint32_t)DMAx;
2301   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DAP));
2302 }
2303 
2304 /**
2305   * @brief Set destination half-word exchange.
2306   * @rmtoll CTR1          DHX            LL_DMA_SetDestHWordExchange
2307   * @param  DMAx DMAx Instance
2308   * @param  Channel This parameter can be one of the following values:
2309   *         @arg @ref LL_DMA_CHANNEL_0
2310   *         @arg @ref LL_DMA_CHANNEL_1
2311   *         @arg @ref LL_DMA_CHANNEL_2
2312   *         @arg @ref LL_DMA_CHANNEL_3
2313   *         @arg @ref LL_DMA_CHANNEL_4
2314   *         @arg @ref LL_DMA_CHANNEL_5
2315   *         @arg @ref LL_DMA_CHANNEL_6
2316   *         @arg @ref LL_DMA_CHANNEL_7
2317   * @param  DestHWordExchange This parameter can be one of the following values:
2318   *         @arg @ref LL_DMA_DEST_HALFWORD_PRESERVE
2319   *         @arg @ref LL_DMA_DEST_HALFWORD_EXCHANGE
2320   * @retval None.
2321   */
LL_DMA_SetDestHWordExchange(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DestHWordExchange)2322 __STATIC_INLINE void LL_DMA_SetDestHWordExchange(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DestHWordExchange)
2323 {
2324   uint32_t dma_base_addr = (uint32_t)DMAx;
2325   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DHX,
2326              DestHWordExchange);
2327 }
2328 
2329 /**
2330   * @brief Get destination half-word exchange.
2331   * @rmtoll CTR1          DHX            LL_DMA_GetDestHWordExchange
2332   * @param  DMAx DMAx Instance
2333   * @param  Channel This parameter can be one of the following values:
2334   *         @arg @ref LL_DMA_CHANNEL_0
2335   *         @arg @ref LL_DMA_CHANNEL_1
2336   *         @arg @ref LL_DMA_CHANNEL_2
2337   *         @arg @ref LL_DMA_CHANNEL_3
2338   *         @arg @ref LL_DMA_CHANNEL_4
2339   *         @arg @ref LL_DMA_CHANNEL_5
2340   *         @arg @ref LL_DMA_CHANNEL_6
2341   *         @arg @ref LL_DMA_CHANNEL_7
2342   * @retval Returned value can be one of the following values:
2343   *         @arg @ref LL_DMA_DEST_HALFWORD_PRESERVE
2344   *         @arg @ref LL_DMA_DEST_HALFWORD_EXCHANGE
2345   */
LL_DMA_GetDestHWordExchange(const DMA_TypeDef * DMAx,uint32_t Channel)2346 __STATIC_INLINE uint32_t LL_DMA_GetDestHWordExchange(const DMA_TypeDef *DMAx, uint32_t Channel)
2347 {
2348   uint32_t dma_base_addr = (uint32_t)DMAx;
2349   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DHX));
2350 }
2351 
2352 /**
2353   * @brief Set destination byte exchange.
2354   * @rmtoll CTR1          DBX            LL_DMA_SetDestByteExchange
2355   * @param  DMAx DMAx Instance
2356   * @param  Channel This parameter can be one of the following values:
2357   *         @arg @ref LL_DMA_CHANNEL_0
2358   *         @arg @ref LL_DMA_CHANNEL_1
2359   *         @arg @ref LL_DMA_CHANNEL_2
2360   *         @arg @ref LL_DMA_CHANNEL_3
2361   *         @arg @ref LL_DMA_CHANNEL_4
2362   *         @arg @ref LL_DMA_CHANNEL_5
2363   *         @arg @ref LL_DMA_CHANNEL_6
2364   *         @arg @ref LL_DMA_CHANNEL_7
2365   * @param  DestByteExchange This parameter can be one of the following values:
2366   *         @arg @ref LL_DMA_DEST_BYTE_PRESERVE
2367   *         @arg @ref LL_DMA_DEST_BYTE_EXCHANGE
2368   * @retval None.
2369   */
LL_DMA_SetDestByteExchange(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DestByteExchange)2370 __STATIC_INLINE void LL_DMA_SetDestByteExchange(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DestByteExchange)
2371 {
2372   uint32_t dma_base_addr = (uint32_t)DMAx;
2373   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DBX,
2374              DestByteExchange);
2375 }
2376 
2377 /**
2378   * @brief Get destination byte exchange.
2379   * @rmtoll CTR1          DBX            LL_DMA_GetDestByteExchange
2380   * @param  DMAx DMAx Instance
2381   * @param  Channel This parameter can be one of the following values:
2382   *         @arg @ref LL_DMA_CHANNEL_0
2383   *         @arg @ref LL_DMA_CHANNEL_1
2384   *         @arg @ref LL_DMA_CHANNEL_2
2385   *         @arg @ref LL_DMA_CHANNEL_3
2386   *         @arg @ref LL_DMA_CHANNEL_4
2387   *         @arg @ref LL_DMA_CHANNEL_5
2388   *         @arg @ref LL_DMA_CHANNEL_6
2389   *         @arg @ref LL_DMA_CHANNEL_7
2390   * @retval Returned value can be one of the following values:
2391   *         @arg @ref LL_DMA_DEST_BYTE_PRESERVE
2392   *         @arg @ref LL_DMA_DEST_BYTE_EXCHANGE
2393   */
LL_DMA_GetDestByteExchange(const DMA_TypeDef * DMAx,uint32_t Channel)2394 __STATIC_INLINE uint32_t LL_DMA_GetDestByteExchange(const DMA_TypeDef *DMAx, uint32_t Channel)
2395 {
2396   uint32_t dma_base_addr = (uint32_t)DMAx;
2397   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DBX));
2398 }
2399 
2400 /**
2401   * @brief Set source byte exchange.
2402   * @rmtoll CTR1          SBX            LL_DMA_SetSrcByteExchange
2403   * @param  DMAx DMAx Instance
2404   * @param  Channel This parameter can be one of the following values:
2405   *         @arg @ref LL_DMA_CHANNEL_0
2406   *         @arg @ref LL_DMA_CHANNEL_1
2407   *         @arg @ref LL_DMA_CHANNEL_2
2408   *         @arg @ref LL_DMA_CHANNEL_3
2409   *         @arg @ref LL_DMA_CHANNEL_4
2410   *         @arg @ref LL_DMA_CHANNEL_5
2411   *         @arg @ref LL_DMA_CHANNEL_6
2412   *         @arg @ref LL_DMA_CHANNEL_7
2413   * @param  SrcByteExchange This parameter can be one of the following values:
2414   *         @arg @ref LL_DMA_SRC_BYTE_PRESERVE
2415   *         @arg @ref LL_DMA_SRC_BYTE_EXCHANGE
2416   * @retval None.
2417   */
LL_DMA_SetSrcByteExchange(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcByteExchange)2418 __STATIC_INLINE void LL_DMA_SetSrcByteExchange(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcByteExchange)
2419 {
2420   uint32_t dma_base_addr = (uint32_t)DMAx;
2421   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SBX,
2422              SrcByteExchange);
2423 }
2424 
2425 /**
2426   * @brief Get source byte exchange.
2427   * @rmtoll CTR1          SBX            LL_DMA_GetSrcByteExchange
2428   * @param  DMAx DMAx Instance
2429   * @param  Channel This parameter can be one of the following values:
2430   *         @arg @ref LL_DMA_CHANNEL_0
2431   *         @arg @ref LL_DMA_CHANNEL_1
2432   *         @arg @ref LL_DMA_CHANNEL_2
2433   *         @arg @ref LL_DMA_CHANNEL_3
2434   *         @arg @ref LL_DMA_CHANNEL_4
2435   *         @arg @ref LL_DMA_CHANNEL_5
2436   *         @arg @ref LL_DMA_CHANNEL_6
2437   *         @arg @ref LL_DMA_CHANNEL_7
2438   * @retval Returned value can be one of the following values:
2439   *         @arg @ref LL_DMA_SRC_BYTE_PRESERVE
2440   *         @arg @ref LL_DMA_SRC_BYTE_EXCHANGE
2441   */
LL_DMA_GetSrcByteExchange(const DMA_TypeDef * DMAx,uint32_t Channel)2442 __STATIC_INLINE uint32_t LL_DMA_GetSrcByteExchange(const DMA_TypeDef *DMAx, uint32_t Channel)
2443 {
2444   uint32_t dma_base_addr = (uint32_t)DMAx;
2445   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SBX));
2446 }
2447 
2448 /**
2449   * @brief Set destination burst length.
2450   * @rmtoll CTR1          DBL_1           LL_DMA_SetDestBurstLength
2451   * @param  DMAx DMAx Instance
2452   * @param  Channel This parameter can be one of the following values:
2453   *         @arg @ref LL_DMA_CHANNEL_0
2454   *         @arg @ref LL_DMA_CHANNEL_1
2455   *         @arg @ref LL_DMA_CHANNEL_2
2456   *         @arg @ref LL_DMA_CHANNEL_3
2457   *         @arg @ref LL_DMA_CHANNEL_4
2458   *         @arg @ref LL_DMA_CHANNEL_5
2459   *         @arg @ref LL_DMA_CHANNEL_6
2460   *         @arg @ref LL_DMA_CHANNEL_7
2461   * @param  DestBurstLength Between 1 to 64
2462   * @retval None.
2463   */
LL_DMA_SetDestBurstLength(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DestBurstLength)2464 __STATIC_INLINE void LL_DMA_SetDestBurstLength(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DestBurstLength)
2465 {
2466   uint32_t dma_base_addr = (uint32_t)DMAx;
2467   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DBL_1,
2468              ((DestBurstLength - 1U) << DMA_CTR1_DBL_1_Pos) & DMA_CTR1_DBL_1);
2469 }
2470 
2471 /**
2472   * @brief Get destination burst length.
2473   * @rmtoll CTR1          DBL_1           LL_DMA_GetDestBurstLength
2474   * @param  DMAx DMAx Instance
2475   * @param  Channel This parameter can be one of the following values:
2476   *         @arg @ref LL_DMA_CHANNEL_0
2477   *         @arg @ref LL_DMA_CHANNEL_1
2478   *         @arg @ref LL_DMA_CHANNEL_2
2479   *         @arg @ref LL_DMA_CHANNEL_3
2480   *         @arg @ref LL_DMA_CHANNEL_4
2481   *         @arg @ref LL_DMA_CHANNEL_5
2482   *         @arg @ref LL_DMA_CHANNEL_6
2483   *         @arg @ref LL_DMA_CHANNEL_7
2484   * @retval Between 1 to 64.
2485   */
LL_DMA_GetDestBurstLength(const DMA_TypeDef * DMAx,uint32_t Channel)2486 __STATIC_INLINE uint32_t LL_DMA_GetDestBurstLength(const DMA_TypeDef *DMAx, uint32_t Channel)
2487 {
2488   uint32_t dma_base_addr = (uint32_t)DMAx;
2489   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1,
2490                     DMA_CTR1_DBL_1) >> DMA_CTR1_DBL_1_Pos) + 1U);
2491 }
2492 
2493 /**
2494   * @brief Set destination increment mode.
2495   * @rmtoll CTR1          DINC           LL_DMA_SetDestIncMode
2496   * @param  DMAx DMAx Instance
2497   * @param  Channel This parameter can be one of the following values:
2498   *         @arg @ref LL_DMA_CHANNEL_0
2499   *         @arg @ref LL_DMA_CHANNEL_1
2500   *         @arg @ref LL_DMA_CHANNEL_2
2501   *         @arg @ref LL_DMA_CHANNEL_3
2502   *         @arg @ref LL_DMA_CHANNEL_4
2503   *         @arg @ref LL_DMA_CHANNEL_5
2504   *         @arg @ref LL_DMA_CHANNEL_6
2505   *         @arg @ref LL_DMA_CHANNEL_7
2506   * @param  DestInc This parameter can be one of the following values:
2507   *         @arg @ref LL_DMA_DEST_FIXED
2508   *         @arg @ref LL_DMA_DEST_INCREMENT
2509   * @retval None.
2510   */
LL_DMA_SetDestIncMode(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DestInc)2511 __STATIC_INLINE void LL_DMA_SetDestIncMode(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DestInc)
2512 {
2513   uint32_t dma_base_addr = (uint32_t)DMAx;
2514   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DINC, DestInc);
2515 }
2516 
2517 /**
2518   * @brief Get destination increment mode.
2519   * @note  This API is used for all available DMA channels.
2520   * @rmtoll CTR1          DINC           LL_DMA_GetDestIncMode
2521   * @param  DMAx DMAx Instance
2522   * @param  Channel This parameter can be one of the following values:
2523   *         @arg @ref LL_DMA_CHANNEL_0
2524   *         @arg @ref LL_DMA_CHANNEL_1
2525   *         @arg @ref LL_DMA_CHANNEL_2
2526   *         @arg @ref LL_DMA_CHANNEL_3
2527   *         @arg @ref LL_DMA_CHANNEL_4
2528   *         @arg @ref LL_DMA_CHANNEL_5
2529   *         @arg @ref LL_DMA_CHANNEL_6
2530   *         @arg @ref LL_DMA_CHANNEL_7
2531   * @retval Returned value can be one of the following values:
2532   *         @arg @ref LL_DMA_DEST_FIXED
2533   *         @arg @ref LL_DMA_DEST_INCREMENT
2534   */
LL_DMA_GetDestIncMode(const DMA_TypeDef * DMAx,uint32_t Channel)2535 __STATIC_INLINE uint32_t LL_DMA_GetDestIncMode(const DMA_TypeDef *DMAx, uint32_t Channel)
2536 {
2537   uint32_t dma_base_addr = (uint32_t)DMAx;
2538   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DINC));
2539 }
2540 
2541 /**
2542   * @brief Set destination data width.
2543   * @note  This API is used for all available DMA channels.
2544   * @rmtoll CTR1          DDW_LOG2           LL_DMA_SetDestDataWidth
2545   * @param  DMAx DMAx Instance
2546   * @param  Channel This parameter can be one of the following values:
2547   *         @arg @ref LL_DMA_CHANNEL_0
2548   *         @arg @ref LL_DMA_CHANNEL_1
2549   *         @arg @ref LL_DMA_CHANNEL_2
2550   *         @arg @ref LL_DMA_CHANNEL_3
2551   *         @arg @ref LL_DMA_CHANNEL_4
2552   *         @arg @ref LL_DMA_CHANNEL_5
2553   *         @arg @ref LL_DMA_CHANNEL_6
2554   *         @arg @ref LL_DMA_CHANNEL_7
2555   * @param  DestDataWidth This parameter can be one of the following values:
2556   *         @arg @ref LL_DMA_DEST_DATAWIDTH_BYTE
2557   *         @arg @ref LL_DMA_DEST_DATAWIDTH_HALFWORD
2558   *         @arg @ref LL_DMA_DEST_DATAWIDTH_WORD
2559   * @retval None.
2560   */
LL_DMA_SetDestDataWidth(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DestDataWidth)2561 __STATIC_INLINE void LL_DMA_SetDestDataWidth(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t  DestDataWidth)
2562 {
2563   uint32_t dma_base_addr = (uint32_t)DMAx;
2564   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DDW_LOG2,
2565              DestDataWidth);
2566 }
2567 
2568 /**
2569   * @brief Get destination data width.
2570   * @note  This API is used for all available DMA channels.
2571   * @rmtoll CTR1          DDW_LOG2           LL_DMA_GetDestDataWidth
2572   * @param  DMAx DMAx Instance
2573   * @param  Channel This parameter can be one of the following values:
2574   *         @arg @ref LL_DMA_CHANNEL_0
2575   *         @arg @ref LL_DMA_CHANNEL_1
2576   *         @arg @ref LL_DMA_CHANNEL_2
2577   *         @arg @ref LL_DMA_CHANNEL_3
2578   *         @arg @ref LL_DMA_CHANNEL_4
2579   *         @arg @ref LL_DMA_CHANNEL_5
2580   *         @arg @ref LL_DMA_CHANNEL_6
2581   *         @arg @ref LL_DMA_CHANNEL_7
2582   * @retval Returned value can be one of the following values:
2583   *         @arg @ref LL_DMA_DEST_DATAWIDTH_BYTE
2584   *         @arg @ref LL_DMA_DEST_DATAWIDTH_HALFWORD
2585   *         @arg @ref LL_DMA_DEST_DATAWIDTH_WORD
2586   */
LL_DMA_GetDestDataWidth(const DMA_TypeDef * DMAx,uint32_t Channel)2587 __STATIC_INLINE uint32_t LL_DMA_GetDestDataWidth(const DMA_TypeDef *DMAx, uint32_t Channel)
2588 {
2589   uint32_t dma_base_addr = (uint32_t)DMAx;
2590   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DDW_LOG2));
2591 }
2592 
2593 /**
2594   * @brief Set source allocated port.
2595   * @rmtoll CTR1          SAP           LL_DMA_SetSrcAllocatedPort
2596   * @param  DMAx DMAx Instance
2597   * @param  Channel This parameter can be one of the following values:
2598   *         @arg @ref LL_DMA_CHANNEL_0
2599   *         @arg @ref LL_DMA_CHANNEL_1
2600   *         @arg @ref LL_DMA_CHANNEL_2
2601   *         @arg @ref LL_DMA_CHANNEL_3
2602   *         @arg @ref LL_DMA_CHANNEL_4
2603   *         @arg @ref LL_DMA_CHANNEL_5
2604   *         @arg @ref LL_DMA_CHANNEL_6
2605   *         @arg @ref LL_DMA_CHANNEL_7
2606   * @param  SrcAllocatedPort This parameter can be one of the following values:
2607   *         @arg @ref LL_DMA_SRC_ALLOCATED_PORT0
2608   *         @arg @ref LL_DMA_SRC_ALLOCATED_PORT1
2609   * @retval None.
2610   */
LL_DMA_SetSrcAllocatedPort(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcAllocatedPort)2611 __STATIC_INLINE void LL_DMA_SetSrcAllocatedPort(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcAllocatedPort)
2612 {
2613   uint32_t dma_base_addr = (uint32_t)DMAx;
2614   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SAP,
2615              SrcAllocatedPort);
2616 }
2617 
2618 /**
2619   * @brief Get source allocated port.
2620   * @rmtoll CTR1          SAP           LL_DMA_GetSrcAllocatedPort
2621   * @param  DMAx DMAx Instance
2622   * @param  Channel This parameter can be one of the following values:
2623   *         @arg @ref LL_DMA_CHANNEL_0
2624   *         @arg @ref LL_DMA_CHANNEL_1
2625   *         @arg @ref LL_DMA_CHANNEL_2
2626   *         @arg @ref LL_DMA_CHANNEL_3
2627   *         @arg @ref LL_DMA_CHANNEL_4
2628   *         @arg @ref LL_DMA_CHANNEL_5
2629   *         @arg @ref LL_DMA_CHANNEL_6
2630   *         @arg @ref LL_DMA_CHANNEL_7
2631   * @retval Returned value can be one of the following values:
2632   *         @arg @ref LL_DMA_SRC_ALLOCATED_PORT0
2633   *         @arg @ref LL_DMA_SRC_ALLOCATED_PORT1
2634   */
LL_DMA_GetSrcAllocatedPort(const DMA_TypeDef * DMAx,uint32_t Channel)2635 __STATIC_INLINE uint32_t LL_DMA_GetSrcAllocatedPort(const DMA_TypeDef *DMAx, uint32_t Channel)
2636 {
2637   uint32_t dma_base_addr = (uint32_t)DMAx;
2638   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SAP));
2639 }
2640 
2641 /**
2642   * @brief Set data alignment mode.
2643   * @note  This API is used for all available DMA channels.
2644   * @rmtoll CTR1          PAM           LL_DMA_SetDataAlignment
2645   * @param  DMAx DMAx Instance
2646   * @param  Channel This parameter can be one of the following values:
2647   *         @arg @ref LL_DMA_CHANNEL_0
2648   *         @arg @ref LL_DMA_CHANNEL_1
2649   *         @arg @ref LL_DMA_CHANNEL_2
2650   *         @arg @ref LL_DMA_CHANNEL_3
2651   *         @arg @ref LL_DMA_CHANNEL_4
2652   *         @arg @ref LL_DMA_CHANNEL_5
2653   *         @arg @ref LL_DMA_CHANNEL_6
2654   *         @arg @ref LL_DMA_CHANNEL_7
2655   * @param  DataAlignment This parameter can be one of the following values:
2656   *         @arg @ref LL_DMA_DATA_ALIGN_ZEROPADD
2657   *         @arg @ref LL_DMA_DATA_ALIGN_SIGNEXTPADD
2658   *         @arg @ref LL_DMA_DATA_PACK_UNPACK
2659   * @retval None.
2660   */
LL_DMA_SetDataAlignment(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DataAlignment)2661 __STATIC_INLINE void LL_DMA_SetDataAlignment(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DataAlignment)
2662 {
2663   uint32_t dma_base_addr = (uint32_t)DMAx;
2664   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_PAM,
2665              DataAlignment);
2666 }
2667 
2668 /**
2669   * @brief Get data alignment mode.
2670   * @note  This API is used for all available DMA channels.
2671   * @rmtoll CTR1          PAM           LL_DMA_GetDataAlignment
2672   * @param  DMAx DMAx Instance
2673   * @param  Channel This parameter can be one of the following values:
2674   *         @arg @ref LL_DMA_CHANNEL_0
2675   *         @arg @ref LL_DMA_CHANNEL_1
2676   *         @arg @ref LL_DMA_CHANNEL_2
2677   *         @arg @ref LL_DMA_CHANNEL_3
2678   *         @arg @ref LL_DMA_CHANNEL_4
2679   *         @arg @ref LL_DMA_CHANNEL_5
2680   *         @arg @ref LL_DMA_CHANNEL_6
2681   *         @arg @ref LL_DMA_CHANNEL_7
2682   * @retval Returned value can be one of the following values:
2683   *         @arg @ref LL_DMA_DATA_ALIGN_ZEROPADD
2684   *         @arg @ref LL_DMA_DATA_ALIGN_SIGNEXTPADD
2685   *         @arg @ref LL_DMA_DATA_PACK_UNPACK
2686   */
LL_DMA_GetDataAlignment(const DMA_TypeDef * DMAx,uint32_t Channel)2687 __STATIC_INLINE uint32_t LL_DMA_GetDataAlignment(const DMA_TypeDef *DMAx, uint32_t Channel)
2688 {
2689   uint32_t dma_base_addr = (uint32_t)DMAx;
2690   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_PAM));
2691 }
2692 
2693 /**
2694   * @brief Set source burst length.
2695   * @rmtoll CTR1          SBL_1           LL_DMA_SetSrcBurstLength
2696   * @param  DMAx DMAx Instance
2697   * @param  Channel This parameter can be one of the following values:
2698   *         @arg @ref LL_DMA_CHANNEL_0
2699   *         @arg @ref LL_DMA_CHANNEL_1
2700   *         @arg @ref LL_DMA_CHANNEL_2
2701   *         @arg @ref LL_DMA_CHANNEL_3
2702   *         @arg @ref LL_DMA_CHANNEL_4
2703   *         @arg @ref LL_DMA_CHANNEL_5
2704   *         @arg @ref LL_DMA_CHANNEL_6
2705   *         @arg @ref LL_DMA_CHANNEL_7
2706   * @param  SrcBurstLength Between 1 to 64
2707   * @retval None.
2708   */
LL_DMA_SetSrcBurstLength(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcBurstLength)2709 __STATIC_INLINE void LL_DMA_SetSrcBurstLength(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcBurstLength)
2710 {
2711   uint32_t dma_base_addr = (uint32_t)DMAx;
2712   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SBL_1,
2713              ((SrcBurstLength - 1U) << DMA_CTR1_SBL_1_Pos) & DMA_CTR1_SBL_1);
2714 }
2715 
2716 /**
2717   * @brief Get source burst length.
2718   * @rmtoll CTR1          SBL_1           LL_DMA_GetSrcBurstLength
2719   * @param  DMAx DMAx Instance
2720   * @param  Channel This parameter can be one of the following values:
2721   *         @arg @ref LL_DMA_CHANNEL_0
2722   *         @arg @ref LL_DMA_CHANNEL_1
2723   *         @arg @ref LL_DMA_CHANNEL_2
2724   *         @arg @ref LL_DMA_CHANNEL_3
2725   *         @arg @ref LL_DMA_CHANNEL_4
2726   *         @arg @ref LL_DMA_CHANNEL_5
2727   *         @arg @ref LL_DMA_CHANNEL_6
2728   *         @arg @ref LL_DMA_CHANNEL_7
2729   * @retval Between 1 to 64
2730   * @retval None.
2731   */
LL_DMA_GetSrcBurstLength(const DMA_TypeDef * DMAx,uint32_t Channel)2732 __STATIC_INLINE uint32_t LL_DMA_GetSrcBurstLength(const DMA_TypeDef *DMAx, uint32_t Channel)
2733 {
2734   uint32_t dma_base_addr = (uint32_t)DMAx;
2735   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1,
2736                     DMA_CTR1_SBL_1) >> DMA_CTR1_SBL_1_Pos) + 1U);
2737 }
2738 
2739 /**
2740   * @brief Set source increment mode.
2741   * @note  This API is used for all available DMA channels.
2742   * @rmtoll CTR1          SINC           LL_DMA_SetSrcIncMode
2743   * @param  DMAx DMAx Instance
2744   * @param  Channel This parameter can be one of the following values:
2745   *         @arg @ref LL_DMA_CHANNEL_0
2746   *         @arg @ref LL_DMA_CHANNEL_1
2747   *         @arg @ref LL_DMA_CHANNEL_2
2748   *         @arg @ref LL_DMA_CHANNEL_3
2749   *         @arg @ref LL_DMA_CHANNEL_4
2750   *         @arg @ref LL_DMA_CHANNEL_5
2751   *         @arg @ref LL_DMA_CHANNEL_6
2752   *         @arg @ref LL_DMA_CHANNEL_7
2753   * @param  SrcInc This parameter can be one of the following values:
2754   *         @arg @ref LL_DMA_SRC_FIXED
2755   *         @arg @ref LL_DMA_SRC_INCREMENT
2756   * @retval None.
2757   */
LL_DMA_SetSrcIncMode(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcInc)2758 __STATIC_INLINE void LL_DMA_SetSrcIncMode(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcInc)
2759 {
2760   uint32_t dma_base_addr = (uint32_t)DMAx;
2761   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SINC, SrcInc);
2762 }
2763 
2764 /**
2765   * @brief Get source increment mode.
2766   * @note  This API is used for all available DMA channels.
2767   * @rmtoll CTR1          SINC           LL_DMA_GetSrcIncMode
2768   * @param  DMAx DMAx Instance
2769   * @param  Channel This parameter can be one of the following values:
2770   *         @arg @ref LL_DMA_CHANNEL_0
2771   *         @arg @ref LL_DMA_CHANNEL_1
2772   *         @arg @ref LL_DMA_CHANNEL_2
2773   *         @arg @ref LL_DMA_CHANNEL_3
2774   *         @arg @ref LL_DMA_CHANNEL_4
2775   *         @arg @ref LL_DMA_CHANNEL_5
2776   *         @arg @ref LL_DMA_CHANNEL_6
2777   *         @arg @ref LL_DMA_CHANNEL_7
2778   * @retval Returned value can be one of the following values:
2779   *         @arg @ref LL_DMA_SRC_FIXED
2780   *         @arg @ref LL_DMA_SRC_INCREMENT
2781   */
LL_DMA_GetSrcIncMode(const DMA_TypeDef * DMAx,uint32_t Channel)2782 __STATIC_INLINE uint32_t LL_DMA_GetSrcIncMode(const DMA_TypeDef *DMAx, uint32_t Channel)
2783 {
2784   uint32_t dma_base_addr = (uint32_t)DMAx;
2785   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SINC));
2786 }
2787 
2788 /**
2789   * @brief Set source data width.
2790   * @note  This API is used for all available DMA channels.
2791   * @rmtoll CTR1          SDW_LOG2           LL_DMA_SetSrcDataWidth
2792   * @param  DMAx DMAx Instance
2793   * @param  Channel This parameter can be one of the following values:
2794   *         @arg @ref LL_DMA_CHANNEL_0
2795   *         @arg @ref LL_DMA_CHANNEL_1
2796   *         @arg @ref LL_DMA_CHANNEL_2
2797   *         @arg @ref LL_DMA_CHANNEL_3
2798   *         @arg @ref LL_DMA_CHANNEL_4
2799   *         @arg @ref LL_DMA_CHANNEL_5
2800   *         @arg @ref LL_DMA_CHANNEL_6
2801   *         @arg @ref LL_DMA_CHANNEL_7
2802   * @param  SrcDataWidth This parameter can be one of the following values:
2803   *         @arg @ref LL_DMA_SRC_DATAWIDTH_BYTE
2804   *         @arg @ref LL_DMA_SRC_DATAWIDTH_HALFWORD
2805   *         @arg @ref LL_DMA_SRC_DATAWIDTH_WORD
2806   * @retval None.
2807   */
LL_DMA_SetSrcDataWidth(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcDataWidth)2808 __STATIC_INLINE void LL_DMA_SetSrcDataWidth(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t  SrcDataWidth)
2809 {
2810   uint32_t dma_base_addr = (uint32_t)DMAx;
2811   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SDW_LOG2,
2812              SrcDataWidth);
2813 }
2814 
2815 /**
2816   * @brief Get Source Data width.
2817   * @note  This API is used for all available DMA channels.
2818   * @rmtoll CTR1          SDW_LOG2           LL_DMA_GetSrcDataWidth
2819   * @param  DMAx DMAx Instance
2820   * @param  Channel This parameter can be one of the following values:
2821   *         @arg @ref LL_DMA_CHANNEL_0
2822   *         @arg @ref LL_DMA_CHANNEL_1
2823   *         @arg @ref LL_DMA_CHANNEL_2
2824   *         @arg @ref LL_DMA_CHANNEL_3
2825   *         @arg @ref LL_DMA_CHANNEL_4
2826   *         @arg @ref LL_DMA_CHANNEL_5
2827   *         @arg @ref LL_DMA_CHANNEL_6
2828   *         @arg @ref LL_DMA_CHANNEL_7
2829   * @retval Returned value can be one of the following values:
2830   *         @arg @ref LL_DMA_SRC_DATAWIDTH_BYTE
2831   *         @arg @ref LL_DMA_SRC_DATAWIDTH_HALFWORD
2832   *         @arg @ref LL_DMA_SRC_DATAWIDTH_WORD
2833   */
LL_DMA_GetSrcDataWidth(const DMA_TypeDef * DMAx,uint32_t Channel)2834 __STATIC_INLINE uint32_t LL_DMA_GetSrcDataWidth(const DMA_TypeDef *DMAx, uint32_t Channel)
2835 {
2836   uint32_t dma_base_addr = (uint32_t)DMAx;
2837   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SDW_LOG2));
2838 }
2839 
2840 /**
2841   * @brief Configure channel transfer.
2842   * @note  This API is used for all available DMA channels.
2843   * @rmtoll CTR2        TCEM               LL_DMA_ConfigChannelTransfer\n
2844   *         CTR2        TRIGPOL            LL_DMA_ConfigChannelTransfer\n
2845   *         CTR2        TRIGM              LL_DMA_ConfigChannelTransfer\n
2846   *         CTR2        BREQ               LL_DMA_ConfigChannelTransfer\n
2847   *         CTR2        DREQ               LL_DMA_ConfigChannelTransfer\n
2848   *         CTR2        SWREQ              LL_DMA_ConfigChannelTransfer\n
2849   *         CTR2        PFREQ              LL_DMA_ConfigChannelTransfer
2850   * @param  DMAx DMAx Instance
2851   * @param  Channel This parameter can be one of the following values:
2852   *         @arg @ref LL_DMA_CHANNEL_0
2853   *         @arg @ref LL_DMA_CHANNEL_1
2854   *         @arg @ref LL_DMA_CHANNEL_2
2855   *         @arg @ref LL_DMA_CHANNEL_3
2856   *         @arg @ref LL_DMA_CHANNEL_4
2857   *         @arg @ref LL_DMA_CHANNEL_5
2858   *         @arg @ref LL_DMA_CHANNEL_6
2859   *         @arg @ref LL_DMA_CHANNEL_7
2860   * @param  Configuration This parameter must be a combination of all the following values:
2861   *         @arg @ref LL_DMA_TCEM_BLK_TRANSFER          or @ref LL_DMA_TCEM_RPT_BLK_TRANSFER      or
2862   *              @ref LL_DMA_TCEM_EACH_LLITEM_TRANSFER  or @ref LL_DMA_TCEM_LAST_LLITEM_TRANSFER
2863   *         @arg @ref LL_DMA_HWREQUEST_SINGLEBURST      or @ref LL_DMA_HWREQUEST_BLK
2864   *         @arg @ref LL_DMA_TRIG_POLARITY_MASKED       or @ref LL_DMA_TRIG_POLARITY_RISING       or
2865   *              @ref LL_DMA_TRIG_POLARITY_FALLING
2866   *         @arg @ref LL_DMA_TRIGM_BLK_TRANSFER         or @ref LL_DMA_TRIGM_RPT_BLK_TRANSFER     or
2867   *              @ref LL_DMA_TRIGM_LLI_LINK_TRANSFER    or @ref LL_DMA_TRIGM_SINGLBURST_TRANSFER
2868   *         @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY or @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH or
2869   *              @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
2870   *         @arg @ref LL_DMA_NORMAL                     or @ref LL_DMA_PFCTRL
2871   *@retval None.
2872   */
LL_DMA_ConfigChannelTransfer(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Configuration)2873 __STATIC_INLINE void LL_DMA_ConfigChannelTransfer(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
2874 {
2875   uint32_t dma_base_addr = (uint32_t)DMAx;
2876   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2,
2877              (DMA_CTR2_TCEM | DMA_CTR2_TRIGPOL | DMA_CTR2_TRIGM | DMA_CTR2_DREQ | DMA_CTR2_SWREQ | DMA_CTR2_BREQ |
2878               DMA_CTR2_PFREQ), Configuration);
2879 }
2880 
2881 /**
2882   * @brief Set transfer event mode.
2883   * @note  This API is used for all available DMA channels.
2884   * @rmtoll CTR2          TCEM           LL_DMA_SetTransferEventMode
2885   * @param  DMAx DMAx Instance
2886   * @param  Channel This parameter can be one of the following values:
2887   *         @arg @ref LL_DMA_CHANNEL_0
2888   *         @arg @ref LL_DMA_CHANNEL_1
2889   *         @arg @ref LL_DMA_CHANNEL_2
2890   *         @arg @ref LL_DMA_CHANNEL_3
2891   *         @arg @ref LL_DMA_CHANNEL_4
2892   *         @arg @ref LL_DMA_CHANNEL_5
2893   *         @arg @ref LL_DMA_CHANNEL_6
2894   *         @arg @ref LL_DMA_CHANNEL_7
2895   * @param  TransferEventMode This parameter can be one of the following values:
2896   *         @arg @ref LL_DMA_TCEM_BLK_TRANSFER
2897   *         @arg @ref LL_DMA_TCEM_RPT_BLK_TRANSFER
2898   *         @arg @ref LL_DMA_TCEM_EACH_LLITEM_TRANSFER
2899   *         @arg @ref LL_DMA_TCEM_LAST_LLITEM_TRANSFER
2900   * @retval None.
2901   */
LL_DMA_SetTransferEventMode(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t TransferEventMode)2902 __STATIC_INLINE void LL_DMA_SetTransferEventMode(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t  TransferEventMode)
2903 {
2904   uint32_t dma_base_addr = (uint32_t)DMAx;
2905   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_TCEM,
2906              TransferEventMode);
2907 }
2908 
2909 /**
2910   * @brief Get transfer event mode.
2911   * @note  This API is used for all available DMA channels.
2912   * @rmtoll CTR2          TCEM           LL_DMA_GetTransferEventMode
2913   * @param  DMAx DMAx Instance
2914   * @param  Channel This parameter can be one of the following values:
2915   *         @arg @ref LL_DMA_CHANNEL_0
2916   *         @arg @ref LL_DMA_CHANNEL_1
2917   *         @arg @ref LL_DMA_CHANNEL_2
2918   *         @arg @ref LL_DMA_CHANNEL_3
2919   *         @arg @ref LL_DMA_CHANNEL_4
2920   *         @arg @ref LL_DMA_CHANNEL_5
2921   *         @arg @ref LL_DMA_CHANNEL_6
2922   *         @arg @ref LL_DMA_CHANNEL_7
2923   * @retval Returned value can be one of the following values:
2924   *         @arg @ref LL_DMA_TCEM_BLK_TRANSFER
2925   *         @arg @ref LL_DMA_TCEM_RPT_BLK_TRANSFER
2926   *         @arg @ref LL_DMA_TCEM_EACH_LLITEM_TRANSFER
2927   *         @arg @ref LL_DMA_TCEM_LAST_LLITEM_TRANSFER
2928   */
LL_DMA_GetTransferEventMode(const DMA_TypeDef * DMAx,uint32_t Channel)2929 __STATIC_INLINE uint32_t LL_DMA_GetTransferEventMode(const DMA_TypeDef *DMAx, uint32_t Channel)
2930 {
2931   uint32_t dma_base_addr = (uint32_t)DMAx;
2932   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_TCEM));
2933 }
2934 
2935 /**
2936   * @brief Set trigger polarity.
2937   * @note  This API is used for all available DMA channels.
2938   * @rmtoll CTR2          TRIGPOL            LL_DMA_SetTriggerPolarity
2939     * @param  DMAx DMAx Instance
2940   * @param  Channel This parameter can be one of the following values:
2941   *         @arg @ref LL_DMA_CHANNEL_0
2942   *         @arg @ref LL_DMA_CHANNEL_1
2943   *         @arg @ref LL_DMA_CHANNEL_2
2944   *         @arg @ref LL_DMA_CHANNEL_3
2945   *         @arg @ref LL_DMA_CHANNEL_4
2946   *         @arg @ref LL_DMA_CHANNEL_5
2947   *         @arg @ref LL_DMA_CHANNEL_6
2948   *         @arg @ref LL_DMA_CHANNEL_7
2949   * @param  TriggerPolarity This parameter can be one of the following values:
2950   *         @arg @ref LL_DMA_TRIG_POLARITY_MASKED
2951   *         @arg @ref LL_DMA_TRIG_POLARITY_RISING
2952   *         @arg @ref LL_DMA_TRIG_POLARITY_FALLING
2953   * @retval None.
2954   */
LL_DMA_SetTriggerPolarity(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t TriggerPolarity)2955 __STATIC_INLINE void LL_DMA_SetTriggerPolarity(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t TriggerPolarity)
2956 {
2957   uint32_t dma_base_addr = (uint32_t)DMAx;
2958   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_TRIGPOL,
2959              TriggerPolarity);
2960 }
2961 
2962 /**
2963   * @brief Get trigger polarity.
2964   * @note  This API is used for all available DMA channels.
2965   * @rmtoll CTR2          TRIGPOL            LL_DMA_GetTriggerPolarity
2966     * @param  DMAx DMAx Instance
2967   * @param  Channel This parameter can be one of the following values:
2968   *         @arg @ref LL_DMA_CHANNEL_0
2969   *         @arg @ref LL_DMA_CHANNEL_1
2970   *         @arg @ref LL_DMA_CHANNEL_2
2971   *         @arg @ref LL_DMA_CHANNEL_3
2972   *         @arg @ref LL_DMA_CHANNEL_4
2973   *         @arg @ref LL_DMA_CHANNEL_5
2974   *         @arg @ref LL_DMA_CHANNEL_6
2975   *         @arg @ref LL_DMA_CHANNEL_7
2976   * @retval Returned value can be one of the following values:
2977   *         @arg @ref LL_DMA_TRIG_POLARITY_MASKED
2978   *         @arg @ref LL_DMA_TRIG_POLARITY_RISING
2979   *         @arg @ref LL_DMA_TRIG_POLARITY_FALLING
2980   */
LL_DMA_GetTriggerPolarity(const DMA_TypeDef * DMAx,uint32_t Channel)2981 __STATIC_INLINE uint32_t LL_DMA_GetTriggerPolarity(const DMA_TypeDef *DMAx, uint32_t Channel)
2982 {
2983   uint32_t dma_base_addr = (uint32_t)DMAx;
2984   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_TRIGPOL));
2985 }
2986 
2987 /**
2988   * @brief Set trigger Mode.
2989   * @note  This API is used for all available DMA channels.
2990   * @rmtoll CTR2          TRIGM            LL_DMA_SetTriggerMode
2991     * @param  DMAx DMAx Instance
2992   * @param  Channel This parameter can be one of the following values:
2993   *         @arg @ref LL_DMA_CHANNEL_0
2994   *         @arg @ref LL_DMA_CHANNEL_1
2995   *         @arg @ref LL_DMA_CHANNEL_2
2996   *         @arg @ref LL_DMA_CHANNEL_3
2997   *         @arg @ref LL_DMA_CHANNEL_4
2998   *         @arg @ref LL_DMA_CHANNEL_5
2999   *         @arg @ref LL_DMA_CHANNEL_6
3000   *         @arg @ref LL_DMA_CHANNEL_7
3001   * @param  TriggerMode This parameter can be one of the following values:
3002   *         @arg @ref LL_DMA_TRIGM_BLK_TRANSFER
3003   *         @arg @ref LL_DMA_TRIGM_RPT_BLK_TRANSFER (This value is allowed only for 2D addressing channels)
3004   *         @arg @ref LL_DMA_TRIGM_LLI_LINK_TRANSFER
3005   *         @arg @ref LL_DMA_TRIGM_SINGLBURST_TRANSFER
3006   * @retval None.
3007   */
LL_DMA_SetTriggerMode(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t TriggerMode)3008 __STATIC_INLINE void LL_DMA_SetTriggerMode(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t TriggerMode)
3009 {
3010   uint32_t dma_base_addr = (uint32_t)DMAx;
3011   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_TRIGM,
3012              TriggerMode);
3013 }
3014 
3015 /**
3016   * @brief Get trigger Mode.
3017   * @note  This API is used for all available DMA channels.
3018   * @rmtoll CTR2          TRIGM            LL_DMA_GetTriggerMode
3019   * @param  DMAx DMAx Instance
3020   * @param  Channel This parameter can be one of the following values:
3021   *         @arg @ref LL_DMA_CHANNEL_0
3022   *         @arg @ref LL_DMA_CHANNEL_1
3023   *         @arg @ref LL_DMA_CHANNEL_2
3024   *         @arg @ref LL_DMA_CHANNEL_3
3025   *         @arg @ref LL_DMA_CHANNEL_4
3026   *         @arg @ref LL_DMA_CHANNEL_5
3027   *         @arg @ref LL_DMA_CHANNEL_6
3028   *         @arg @ref LL_DMA_CHANNEL_7
3029   * @retval Returned value can be one of the following values:
3030   *         @arg @ref LL_DMA_TRIGM_BLK_TRANSFER
3031   *         @arg @ref LL_DMA_TRIGM_RPT_BLK_TRANSFER (This value is allowed only for 2D addressing channels)
3032   *         @arg @ref LL_DMA_TRIGM_LLI_LINK_TRANSFER
3033   *         @arg @ref LL_DMA_TRIGM_SINGLBURST_TRANSFER
3034   */
LL_DMA_GetTriggerMode(const DMA_TypeDef * DMAx,uint32_t Channel)3035 __STATIC_INLINE uint32_t LL_DMA_GetTriggerMode(const DMA_TypeDef *DMAx, uint32_t Channel)
3036 {
3037   uint32_t dma_base_addr = (uint32_t)DMAx;
3038   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_TRIGM));
3039 }
3040 
3041 /**
3042   * @brief Set destination hardware and software transfer request.
3043   * @note  This API is used for all available DMA channels.
3044   * @rmtoll CTR2          DREQ           LL_DMA_SetDataTransferDirection\n
3045   * @rmtoll CTR2          SWREQ          LL_DMA_SetDataTransferDirection
3046   * @param  DMAx DMAx Instance
3047   * @param  Channel This parameter can be one of the following values:
3048   *         @arg @ref LL_DMA_CHANNEL_0
3049   *         @arg @ref LL_DMA_CHANNEL_1
3050   *         @arg @ref LL_DMA_CHANNEL_2
3051   *         @arg @ref LL_DMA_CHANNEL_3
3052   *         @arg @ref LL_DMA_CHANNEL_4
3053   *         @arg @ref LL_DMA_CHANNEL_5
3054   *         @arg @ref LL_DMA_CHANNEL_6
3055   *         @arg @ref LL_DMA_CHANNEL_7
3056   * @param  Direction This parameter can be one of the following values:
3057   *         @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
3058   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
3059   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
3060   * @retval None.
3061   */
LL_DMA_SetDataTransferDirection(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Direction)3062 __STATIC_INLINE void LL_DMA_SetDataTransferDirection(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Direction)
3063 {
3064   uint32_t dma_base_addr = (uint32_t)DMAx;
3065   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2,
3066              DMA_CTR2_DREQ | DMA_CTR2_SWREQ, Direction);
3067 }
3068 
3069 /**
3070   * @brief Get destination hardware and software transfer request.
3071   * @note  This API is used for all available DMA channels.
3072   * @rmtoll CTR2          DREQ           LL_DMA_GetDataTransferDirection\n
3073   * @rmtoll CTR2          SWREQ          LL_DMA_GetDataTransferDirection
3074   * @param  DMAx DMAx Instance
3075   * @param  Channel This parameter can be one of the following values:
3076   *         @arg @ref LL_DMA_CHANNEL_0
3077   *         @arg @ref LL_DMA_CHANNEL_1
3078   *         @arg @ref LL_DMA_CHANNEL_2
3079   *         @arg @ref LL_DMA_CHANNEL_3
3080   *         @arg @ref LL_DMA_CHANNEL_4
3081   *         @arg @ref LL_DMA_CHANNEL_5
3082   *         @arg @ref LL_DMA_CHANNEL_6
3083   *         @arg @ref LL_DMA_CHANNEL_7
3084   * @retval Returned value can be one of the following values:
3085   *         @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
3086   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
3087   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
3088   */
LL_DMA_GetDataTransferDirection(const DMA_TypeDef * DMAx,uint32_t Channel)3089 __STATIC_INLINE uint32_t LL_DMA_GetDataTransferDirection(const DMA_TypeDef *DMAx, uint32_t Channel)
3090 {
3091   uint32_t dma_base_addr = (uint32_t)DMAx;
3092   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2,
3093                    DMA_CTR2_DREQ | DMA_CTR2_SWREQ));
3094 }
3095 
3096 /**
3097   * @brief Set block hardware request.
3098   * @note  This API is used for all available DMA channels.
3099   * @rmtoll CTR2          BREQ           LL_DMA_SetBlkHWRequest\n
3100   * @param  DMAx DMAx Instance
3101   * @param  Channel This parameter can be one of the following values:
3102   *         @arg @ref LL_DMA_CHANNEL_0
3103   *         @arg @ref LL_DMA_CHANNEL_1
3104   *         @arg @ref LL_DMA_CHANNEL_2
3105   *         @arg @ref LL_DMA_CHANNEL_3
3106   *         @arg @ref LL_DMA_CHANNEL_4
3107   *         @arg @ref LL_DMA_CHANNEL_5
3108   *         @arg @ref LL_DMA_CHANNEL_6
3109   *         @arg @ref LL_DMA_CHANNEL_7
3110   * @param  BlkHWRequest This parameter can be one of the following values:
3111   *         @arg @ref LL_DMA_HWREQUEST_SINGLEBURST
3112   *         @arg @ref LL_DMA_HWREQUEST_BLK
3113   * @retval None.
3114   */
LL_DMA_SetBlkHWRequest(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t BlkHWRequest)3115 __STATIC_INLINE void LL_DMA_SetBlkHWRequest(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t BlkHWRequest)
3116 {
3117   uint32_t dma_base_addr = (uint32_t)DMAx;
3118   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_BREQ,
3119              BlkHWRequest);
3120 }
3121 
3122 /**
3123   * @brief Get block hardware request.
3124   * @note  This API is used for all available DMA channels.
3125   * @rmtoll CTR2          BREQ           LL_DMA_GetBlkHWRequest\n
3126   * @param  DMAx DMAx Instance
3127   * @param  Channel This parameter can be one of the following values:
3128   *         @arg @ref LL_DMA_CHANNEL_0
3129   *         @arg @ref LL_DMA_CHANNEL_1
3130   *         @arg @ref LL_DMA_CHANNEL_2
3131   *         @arg @ref LL_DMA_CHANNEL_3
3132   *         @arg @ref LL_DMA_CHANNEL_4
3133   *         @arg @ref LL_DMA_CHANNEL_5
3134   *         @arg @ref LL_DMA_CHANNEL_6
3135   *         @arg @ref LL_DMA_CHANNEL_7
3136   * @retval Returned value can be one of the following values:
3137   *         @arg @ref LL_DMA_HWREQUEST_SINGLEBURST
3138   *         @arg @ref LL_DMA_HWREQUEST_BLK
3139   */
LL_DMA_GetBlkHWRequest(const DMA_TypeDef * DMAx,uint32_t Channel)3140 __STATIC_INLINE uint32_t LL_DMA_GetBlkHWRequest(const DMA_TypeDef *DMAx, uint32_t Channel)
3141 {
3142   uint32_t dma_base_addr = (uint32_t)DMAx;
3143   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_BREQ));
3144 }
3145 
3146 /**
3147   * @brief Set hardware request.
3148   * @note  This API is used for all available DMA channels.
3149   * @rmtoll CTR2         REQSEL     LL_DMA_SetPeriphRequest
3150   * @param  DMAx DMAx Instance
3151   * @param  Channel This parameter can be one of the following values:
3152   *         @arg @ref LL_DMA_CHANNEL_0
3153   *         @arg @ref LL_DMA_CHANNEL_1
3154   *         @arg @ref LL_DMA_CHANNEL_2
3155   *         @arg @ref LL_DMA_CHANNEL_3
3156   *         @arg @ref LL_DMA_CHANNEL_4
3157   *         @arg @ref LL_DMA_CHANNEL_5
3158   *         @arg @ref LL_DMA_CHANNEL_6
3159   *         @arg @ref LL_DMA_CHANNEL_7
3160   * @param  Request This parameter can be one of the following values:
3161   *         @arg @ref LL_GPDMA1_REQUEST_ADC1
3162   *         @arg @ref LL_GPDMA1_REQUEST_ADC2 (*)
3163   *         @arg @ref LL_GPDMA1_REQUEST_DAC1_CH1
3164   *         @arg @ref LL_GPDMA1_REQUEST_DAC1_CH2
3165   *         @arg @ref LL_GPDMA1_REQUEST_TIM6_UP
3166   *         @arg @ref LL_GPDMA1_REQUEST_TIM7_UP
3167   *         @arg @ref LL_GPDMA1_REQUEST_SPI1_RX
3168   *         @arg @ref LL_GPDMA1_REQUEST_SPI1_TX
3169   *         @arg @ref LL_GPDMA1_REQUEST_SPI2_RX
3170   *         @arg @ref LL_GPDMA1_REQUEST_SPI2_TX
3171   *         @arg @ref LL_GPDMA1_REQUEST_SPI3_RX
3172   *         @arg @ref LL_GPDMA1_REQUEST_SPI3_TX
3173   *         @arg @ref LL_GPDMA1_REQUEST_I2C1_RX
3174   *         @arg @ref LL_GPDMA1_REQUEST_I2C1_TX
3175   *         @arg @ref LL_GPDMA1_REQUEST_I2C2_RX
3176   *         @arg @ref LL_GPDMA1_REQUEST_I2C2_TX
3177   *         @arg @ref LL_GPDMA1_REQUEST_I2C3_RX (*)
3178   *         @arg @ref LL_GPDMA1_REQUEST_I2C3_TX (*)
3179   *         @arg @ref LL_GPDMA1_REQUEST_USART1_RX
3180   *         @arg @ref LL_GPDMA1_REQUEST_USART1_TX
3181   *         @arg @ref LL_GPDMA1_REQUEST_USART2_RX
3182   *         @arg @ref LL_GPDMA1_REQUEST_USART2_TX
3183   *         @arg @ref LL_GPDMA1_REQUEST_USART3_RX
3184   *         @arg @ref LL_GPDMA1_REQUEST_USART3_TX
3185   *         @arg @ref LL_GPDMA1_REQUEST_UART4_RX (*)
3186   *         @arg @ref LL_GPDMA1_REQUEST_UART4_TX (*)
3187   *         @arg @ref LL_GPDMA1_REQUEST_UART5_RX (*)
3188   *         @arg @ref LL_GPDMA1_REQUEST_UART5_TX (*)
3189   *         @arg @ref LL_GPDMA1_REQUEST_USART6_RX (*)
3190   *         @arg @ref LL_GPDMA1_REQUEST_USART6_TX (*)
3191   *         @arg @ref LL_GPDMA1_REQUEST_UART7_RX (*)
3192   *         @arg @ref LL_GPDMA1_REQUEST_UART7_TX (*)
3193   *         @arg @ref LL_GPDMA1_REQUEST_UART8_RX (*)
3194   *         @arg @ref LL_GPDMA1_REQUEST_UART8_TX (*)
3195   *         @arg @ref LL_GPDMA1_REQUEST_UART9_RX (*)
3196   *         @arg @ref LL_GPDMA1_REQUEST_UART9_TX (*)
3197   *         @arg @ref LL_GPDMA1_REQUEST_USART10_RX (*)
3198   *         @arg @ref LL_GPDMA1_REQUEST_USART10_TX (*)
3199   *         @arg @ref LL_GPDMA1_REQUEST_USART11_RX (*)
3200   *         @arg @ref LL_GPDMA1_REQUEST_USART11_TX (*)
3201   *         @arg @ref LL_GPDMA1_REQUEST_UART12_RX (*)
3202   *         @arg @ref LL_GPDMA1_REQUEST_UART12_TX (*)
3203   *         @arg @ref LL_GPDMA1_REQUEST_LPUART1_RX
3204   *         @arg @ref LL_GPDMA1_REQUEST_LPUART1_TX
3205   *         @arg @ref LL_GPDMA1_REQUEST_SPI4_RX (*)
3206   *         @arg @ref LL_GPDMA1_REQUEST_SPI4_TX (*)
3207   *         @arg @ref LL_GPDMA1_REQUEST_SPI5_RX (*)
3208   *         @arg @ref LL_GPDMA1_REQUEST_SPI5_TX (*)
3209   *         @arg @ref LL_GPDMA1_REQUEST_SPI6_RX (*)
3210   *         @arg @ref LL_GPDMA1_REQUEST_SPI6_TX (*)
3211   *         @arg @ref LL_GPDMA1_REQUEST_SAI1_A (*)
3212   *         @arg @ref LL_GPDMA1_REQUEST_SAI1_B (*)
3213   *         @arg @ref LL_GPDMA1_REQUEST_SAI2_A (*)
3214   *         @arg @ref LL_GPDMA1_REQUEST_SAI2_B (*)
3215   *         @arg @ref LL_GPDMA1_REQUEST_OCTOSPI1 (*)
3216   *         @arg @ref LL_GPDMA1_REQUEST_TIM1_CH1
3217   *         @arg @ref LL_GPDMA1_REQUEST_TIM1_CH2
3218   *         @arg @ref LL_GPDMA1_REQUEST_TIM1_CH3
3219   *         @arg @ref LL_GPDMA1_REQUEST_TIM1_CH4
3220   *         @arg @ref LL_GPDMA1_REQUEST_TIM1_UP
3221   *         @arg @ref LL_GPDMA1_REQUEST_TIM1_TRIG
3222   *         @arg @ref LL_GPDMA1_REQUEST_TIM1_COM
3223   *         @arg @ref LL_GPDMA1_REQUEST_TIM8_CH1 (*)
3224   *         @arg @ref LL_GPDMA1_REQUEST_TIM8_CH2 (*)
3225   *         @arg @ref LL_GPDMA1_REQUEST_TIM8_CH3 (*)
3226   *         @arg @ref LL_GPDMA1_REQUEST_TIM8_CH4 (*)
3227   *         @arg @ref LL_GPDMA1_REQUEST_TIM8_UP  (*)
3228   *         @arg @ref LL_GPDMA1_REQUEST_TIM8_TRIG (*)
3229   *         @arg @ref LL_GPDMA1_REQUEST_TIM8_COM (*)
3230   *         @arg @ref LL_GPDMA1_REQUEST_TIM2_CH1
3231   *         @arg @ref LL_GPDMA1_REQUEST_TIM2_CH2
3232   *         @arg @ref LL_GPDMA1_REQUEST_TIM2_CH3
3233   *         @arg @ref LL_GPDMA1_REQUEST_TIM2_CH4
3234   *         @arg @ref LL_GPDMA1_REQUEST_TIM2_UP
3235   *         @arg @ref LL_GPDMA1_REQUEST_TIM3_CH1
3236   *         @arg @ref LL_GPDMA1_REQUEST_TIM3_CH2
3237   *         @arg @ref LL_GPDMA1_REQUEST_TIM3_CH3
3238   *         @arg @ref LL_GPDMA1_REQUEST_TIM3_CH4
3239   *         @arg @ref LL_GPDMA1_REQUEST_TIM3_UP
3240   *         @arg @ref LL_GPDMA1_REQUEST_TIM3_TRIG
3241   *         @arg @ref LL_GPDMA1_REQUEST_TIM4_CH1 (*)
3242   *         @arg @ref LL_GPDMA1_REQUEST_TIM4_CH2 (*)
3243   *         @arg @ref LL_GPDMA1_REQUEST_TIM4_CH3 (*)
3244   *         @arg @ref LL_GPDMA1_REQUEST_TIM4_CH4 (*)
3245   *         @arg @ref LL_GPDMA1_REQUEST_TIM4_UP (*)
3246   *         @arg @ref LL_GPDMA1_REQUEST_TIM5_CH1 (*)
3247   *         @arg @ref LL_GPDMA1_REQUEST_TIM5_CH2 (*)
3248   *         @arg @ref LL_GPDMA1_REQUEST_TIM5_CH3 (*)
3249   *         @arg @ref LL_GPDMA1_REQUEST_TIM5_CH4 (*)
3250   *         @arg @ref LL_GPDMA1_REQUEST_TIM5_UP  (*)
3251   *         @arg @ref LL_GPDMA1_REQUEST_TIM5_TRIG (*)
3252   *         @arg @ref LL_GPDMA1_REQUEST_TIM15_CH1 (*)
3253   *         @arg @ref LL_GPDMA1_REQUEST_TIM15_UP (*)
3254   *         @arg @ref LL_GPDMA1_REQUEST_TIM15_TRIG (*)
3255   *         @arg @ref LL_GPDMA1_REQUEST_TIM15_COM (*)
3256   *         @arg @ref LL_GPDMA1_REQUEST_TIM16_CH1 (*)
3257   *         @arg @ref LL_GPDMA1_REQUEST_TIM16_UP  (*)
3258   *         @arg @ref LL_GPDMA1_REQUEST_TIM17_CH1 (*)
3259   *         @arg @ref LL_GPDMA1_REQUEST_TIM17_UP  (*)
3260   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM1_IC1
3261   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM1_IC2
3262   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM1_UE
3263   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM2_IC1
3264   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM2_IC2
3265   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM2_UE
3266   *         @arg @ref LL_GPDMA1_REQUEST_DCMI (*)
3267   *         @arg @ref LL_GPDMA1_REQUEST_AES_OUT (*)
3268   *         @arg @ref LL_GPDMA1_REQUEST_AES_IN  (*)
3269   *         @arg @ref LL_GPDMA1_REQUEST_HASH_IN
3270   *         @arg @ref LL_GPDMA1_REQUEST_UCPD1_RX (*)
3271   *         @arg @ref LL_GPDMA1_REQUEST_UCPD1_TX (*)
3272   *         @arg @ref LL_GPDMA1_REQUEST_CORDIC_READ (*)
3273   *         @arg @ref LL_GPDMA1_REQUEST_CORDIC_WRITE (*)
3274   *         @arg @ref LL_GPDMA1_REQUEST_FMAC_READ (*)
3275   *         @arg @ref LL_GPDMA1_REQUEST_FMAC_WRITE (*)
3276   *         @arg @ref LL_GPDMA1_REQUEST_SAES_OUT (*)
3277   *         @arg @ref LL_GPDMA1_REQUEST_SAES_IN (*)
3278   *         @arg @ref LL_GPDMA1_REQUEST_I3C1_RX
3279   *         @arg @ref LL_GPDMA1_REQUEST_I3C1_TX
3280   *         @arg @ref LL_GPDMA1_REQUEST_I3C1_TC
3281   *         @arg @ref LL_GPDMA1_REQUEST_I3C1_RS
3282   *         @arg @ref LL_GPDMA1_REQUEST_I2C4_RX (*)
3283   *         @arg @ref LL_GPDMA1_REQUEST_I2C4_TX (*)
3284   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM3_IC1 (*)
3285   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM3_IC2 (*)
3286   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM3_UE (*)
3287   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM5_IC1 (*)
3288   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM5_IC2 (*)
3289   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM5_UE (*)
3290   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM6_IC1 (*)
3291   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM6_IC2 (*)
3292   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM6_UE (*)
3293   *         @arg @ref LL_GPDMA1_REQUEST_I3C2_RX (*)
3294   *         @arg @ref LL_GPDMA1_REQUEST_I3C2_TX (*)
3295   *         @arg @ref LL_GPDMA1_REQUEST_I3C2_TC (*)
3296   *         @arg @ref LL_GPDMA1_REQUEST_I3C2_RS (*)
3297   *
3298   *         @arg @ref LL_GPDMA2_REQUEST_ADC1
3299   *         @arg @ref LL_GPDMA2_REQUEST_ADC2 (*)
3300   *         @arg @ref LL_GPDMA2_REQUEST_DAC1_CH1
3301   *         @arg @ref LL_GPDMA2_REQUEST_DAC1_CH2
3302   *         @arg @ref LL_GPDMA2_REQUEST_TIM6_UP
3303   *         @arg @ref LL_GPDMA2_REQUEST_TIM7_UP
3304   *         @arg @ref LL_GPDMA2_REQUEST_SPI1_RX
3305   *         @arg @ref LL_GPDMA2_REQUEST_SPI1_TX
3306   *         @arg @ref LL_GPDMA2_REQUEST_SPI2_RX
3307   *         @arg @ref LL_GPDMA2_REQUEST_SPI2_TX
3308   *         @arg @ref LL_GPDMA2_REQUEST_SPI3_RX
3309   *         @arg @ref LL_GPDMA2_REQUEST_SPI3_TX
3310   *         @arg @ref LL_GPDMA2_REQUEST_I2C1_RX
3311   *         @arg @ref LL_GPDMA2_REQUEST_I2C1_TX
3312   *         @arg @ref LL_GPDMA2_REQUEST_I2C2_RX
3313   *         @arg @ref LL_GPDMA2_REQUEST_I2C2_TX
3314   *         @arg @ref LL_GPDMA2_REQUEST_I2C3_RX (*)
3315   *         @arg @ref LL_GPDMA2_REQUEST_I2C3_TX (*)
3316   *         @arg @ref LL_GPDMA2_REQUEST_USART1_RX
3317   *         @arg @ref LL_GPDMA2_REQUEST_USART1_TX
3318   *         @arg @ref LL_GPDMA2_REQUEST_USART2_RX
3319   *         @arg @ref LL_GPDMA2_REQUEST_USART2_TX
3320   *         @arg @ref LL_GPDMA2_REQUEST_USART3_RX
3321   *         @arg @ref LL_GPDMA2_REQUEST_USART3_TX
3322   *         @arg @ref LL_GPDMA2_REQUEST_UART4_RX (*)
3323   *         @arg @ref LL_GPDMA2_REQUEST_UART4_TX (*)
3324   *         @arg @ref LL_GPDMA2_REQUEST_UART5_RX (*)
3325   *         @arg @ref LL_GPDMA2_REQUEST_UART5_TX (*)
3326   *         @arg @ref LL_GPDMA2_REQUEST_USART6_RX (*)
3327   *         @arg @ref LL_GPDMA2_REQUEST_USART6_TX (*)
3328   *         @arg @ref LL_GPDMA2_REQUEST_UART7_RX (*)
3329   *         @arg @ref LL_GPDMA2_REQUEST_UART7_TX (*)
3330   *         @arg @ref LL_GPDMA2_REQUEST_UART8_RX (*)
3331   *         @arg @ref LL_GPDMA2_REQUEST_UART8_TX (*)
3332   *         @arg @ref LL_GPDMA2_REQUEST_UART9_RX (*)
3333   *         @arg @ref LL_GPDMA2_REQUEST_UART9_TX (*)
3334   *         @arg @ref LL_GPDMA2_REQUEST_USART10_RX (*)
3335   *         @arg @ref LL_GPDMA2_REQUEST_USART10_TX (*)
3336   *         @arg @ref LL_GPDMA2_REQUEST_USART11_RX (*)
3337   *         @arg @ref LL_GPDMA2_REQUEST_USART11_TX (*)
3338   *         @arg @ref LL_GPDMA2_REQUEST_UART12_RX (*)
3339   *         @arg @ref LL_GPDMA2_REQUEST_UART12_TX (*)
3340   *         @arg @ref LL_GPDMA2_REQUEST_LPUART1_RX
3341   *         @arg @ref LL_GPDMA2_REQUEST_LPUART1_TX
3342   *         @arg @ref LL_GPDMA2_REQUEST_SPI4_RX (*)
3343   *         @arg @ref LL_GPDMA2_REQUEST_SPI4_TX (*)
3344   *         @arg @ref LL_GPDMA2_REQUEST_SPI5_RX (*)
3345   *         @arg @ref LL_GPDMA2_REQUEST_SPI5_TX (*)
3346   *         @arg @ref LL_GPDMA2_REQUEST_SPI6_RX (*)
3347   *         @arg @ref LL_GPDMA2_REQUEST_SPI6_TX (*)
3348   *         @arg @ref LL_GPDMA2_REQUEST_SAI1_A (*)
3349   *         @arg @ref LL_GPDMA2_REQUEST_SAI1_B (*)
3350   *         @arg @ref LL_GPDMA2_REQUEST_SAI2_A (*)
3351   *         @arg @ref LL_GPDMA2_REQUEST_SAI2_B (*)
3352   *         @arg @ref LL_GPDMA2_REQUEST_OCTOSPI1 (*)
3353   *         @arg @ref LL_GPDMA2_REQUEST_TIM1_CH1
3354   *         @arg @ref LL_GPDMA2_REQUEST_TIM1_CH2
3355   *         @arg @ref LL_GPDMA2_REQUEST_TIM1_CH3
3356   *         @arg @ref LL_GPDMA2_REQUEST_TIM1_CH4
3357   *         @arg @ref LL_GPDMA2_REQUEST_TIM1_UP
3358   *         @arg @ref LL_GPDMA2_REQUEST_TIM1_TRIG
3359   *         @arg @ref LL_GPDMA2_REQUEST_TIM1_COM
3360   *         @arg @ref LL_GPDMA2_REQUEST_TIM8_CH1 (*)
3361   *         @arg @ref LL_GPDMA2_REQUEST_TIM8_CH2 (*)
3362   *         @arg @ref LL_GPDMA2_REQUEST_TIM8_CH3 (*)
3363   *         @arg @ref LL_GPDMA2_REQUEST_TIM8_CH4 (*)
3364   *         @arg @ref LL_GPDMA2_REQUEST_TIM8_UP  (*)
3365   *         @arg @ref LL_GPDMA2_REQUEST_TIM8_TRIG (*)
3366   *         @arg @ref LL_GPDMA2_REQUEST_TIM8_COM (*)
3367   *         @arg @ref LL_GPDMA2_REQUEST_TIM2_CH1
3368   *         @arg @ref LL_GPDMA2_REQUEST_TIM2_CH2
3369   *         @arg @ref LL_GPDMA2_REQUEST_TIM2_CH3
3370   *         @arg @ref LL_GPDMA2_REQUEST_TIM2_CH4
3371   *         @arg @ref LL_GPDMA2_REQUEST_TIM2_UP
3372   *         @arg @ref LL_GPDMA2_REQUEST_TIM3_CH1
3373   *         @arg @ref LL_GPDMA2_REQUEST_TIM3_CH2
3374   *         @arg @ref LL_GPDMA2_REQUEST_TIM3_CH3
3375   *         @arg @ref LL_GPDMA2_REQUEST_TIM3_CH4
3376   *         @arg @ref LL_GPDMA2_REQUEST_TIM3_UP
3377   *         @arg @ref LL_GPDMA2_REQUEST_TIM3_TRIG
3378   *         @arg @ref LL_GPDMA2_REQUEST_TIM4_CH1 (*)
3379   *         @arg @ref LL_GPDMA2_REQUEST_TIM4_CH2 (*)
3380   *         @arg @ref LL_GPDMA2_REQUEST_TIM4_CH3 (*)
3381   *         @arg @ref LL_GPDMA2_REQUEST_TIM4_CH4 (*)
3382   *         @arg @ref LL_GPDMA2_REQUEST_TIM4_UP (*)
3383   *         @arg @ref LL_GPDMA2_REQUEST_TIM5_CH1 (*)
3384   *         @arg @ref LL_GPDMA2_REQUEST_TIM5_CH2 (*)
3385   *         @arg @ref LL_GPDMA2_REQUEST_TIM5_CH3 (*)
3386   *         @arg @ref LL_GPDMA2_REQUEST_TIM5_CH4 (*)
3387   *         @arg @ref LL_GPDMA2_REQUEST_TIM5_UP  (*)
3388   *         @arg @ref LL_GPDMA2_REQUEST_TIM5_TRIG (*)
3389   *         @arg @ref LL_GPDMA2_REQUEST_TIM15_CH1 (*)
3390   *         @arg @ref LL_GPDMA2_REQUEST_TIM15_UP (*)
3391   *         @arg @ref LL_GPDMA2_REQUEST_TIM15_TRIG (*)
3392   *         @arg @ref LL_GPDMA2_REQUEST_TIM15_COM (*)
3393   *         @arg @ref LL_GPDMA2_REQUEST_TIM16_CH1 (*)
3394   *         @arg @ref LL_GPDMA2_REQUEST_TIM16_UP  (*)
3395   *         @arg @ref LL_GPDMA2_REQUEST_TIM17_CH1 (*)
3396   *         @arg @ref LL_GPDMA2_REQUEST_TIM17_UP  (*)
3397   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM1_IC1
3398   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM1_IC2
3399   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM1_UE
3400   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM2_IC1
3401   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM2_IC2
3402   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM2_UE
3403   *         @arg @ref LL_GPDMA2_REQUEST_DCMI (*)
3404   *         @arg @ref LL_GPDMA2_REQUEST_AES_OUT (*)
3405   *         @arg @ref LL_GPDMA2_REQUEST_AES_IN  (*)
3406   *         @arg @ref LL_GPDMA2_REQUEST_HASH_IN
3407   *         @arg @ref LL_GPDMA2_REQUEST_UCPD1_RX (*)
3408   *         @arg @ref LL_GPDMA2_REQUEST_UCPD1_TX (*)
3409   *         @arg @ref LL_GPDMA2_REQUEST_CORDIC_READ (*)
3410   *         @arg @ref LL_GPDMA2_REQUEST_CORDIC_WRITE (*)
3411   *         @arg @ref LL_GPDMA2_REQUEST_FMAC_READ (*)
3412   *         @arg @ref LL_GPDMA2_REQUEST_FMAC_WRITE (*)
3413   *         @arg @ref LL_GPDMA2_REQUEST_SAES_OUT (*)
3414   *         @arg @ref LL_GPDMA2_REQUEST_SAES_IN (*)
3415   *         @arg @ref LL_GPDMA2_REQUEST_I3C1_RX
3416   *         @arg @ref LL_GPDMA2_REQUEST_I3C1_TX
3417   *         @arg @ref LL_GPDMA2_REQUEST_I3C1_TC
3418   *         @arg @ref LL_GPDMA2_REQUEST_I3C1_RS
3419   *         @arg @ref LL_GPDMA2_REQUEST_I2C4_RX (*)
3420   *         @arg @ref LL_GPDMA2_REQUEST_I2C4_TX (*)
3421   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM3_IC1 (*)
3422   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM3_IC2 (*)
3423   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM3_UE (*)
3424   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM5_IC1 (*)
3425   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM5_IC2 (*)
3426   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM5_UE (*)
3427   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM6_IC1 (*)
3428   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM6_IC2 (*)
3429   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM6_UE (*)
3430   *         @arg @ref LL_GPDMA2_REQUEST_I3C2_RX (*)
3431   *         @arg @ref LL_GPDMA2_REQUEST_I3C2_TX (*)
3432   *         @arg @ref LL_GPDMA2_REQUEST_I3C2_TC (*)
3433   *         @arg @ref LL_GPDMA2_REQUEST_I3C2_RS (*)
3434   *
3435   * @note   (*) Availability depends on devices.
3436   * @retval None.
3437   */
LL_DMA_SetPeriphRequest(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Request)3438 __STATIC_INLINE void LL_DMA_SetPeriphRequest(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Request)
3439 {
3440   uint32_t dma_base_addr = (uint32_t)DMAx;
3441   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_REQSEL, Request);
3442 }
3443 
3444 /**
3445   * @brief  Get hardware request.
3446   * @note  This API is used for all available DMA channels.
3447   * @rmtoll CTR2         REQSEL     LL_DMA_GetPeriphRequest
3448   * @param  DMAx DMAx Instance
3449   * @param  Channel This parameter can be one of the following values:
3450   *         @arg @ref LL_DMA_CHANNEL_0
3451   *         @arg @ref LL_DMA_CHANNEL_1
3452   *         @arg @ref LL_DMA_CHANNEL_2
3453   *         @arg @ref LL_DMA_CHANNEL_3
3454   *         @arg @ref LL_DMA_CHANNEL_4
3455   *         @arg @ref LL_DMA_CHANNEL_5
3456   *         @arg @ref LL_DMA_CHANNEL_6
3457   *         @arg @ref LL_DMA_CHANNEL_7
3458   * @retval Returned value can be one of the following values:
3459   *         @arg @ref LL_GPDMA1_REQUEST_ADC1
3460   *         @arg @ref LL_GPDMA1_REQUEST_ADC2 (*)
3461   *         @arg @ref LL_GPDMA1_REQUEST_DAC1_CH1
3462   *         @arg @ref LL_GPDMA1_REQUEST_DAC1_CH2
3463   *         @arg @ref LL_GPDMA1_REQUEST_TIM6_UP
3464   *         @arg @ref LL_GPDMA1_REQUEST_TIM7_UP
3465   *         @arg @ref LL_GPDMA1_REQUEST_SPI1_RX
3466   *         @arg @ref LL_GPDMA1_REQUEST_SPI1_TX
3467   *         @arg @ref LL_GPDMA1_REQUEST_SPI2_RX
3468   *         @arg @ref LL_GPDMA1_REQUEST_SPI2_TX
3469   *         @arg @ref LL_GPDMA1_REQUEST_SPI3_RX
3470   *         @arg @ref LL_GPDMA1_REQUEST_SPI3_TX
3471   *         @arg @ref LL_GPDMA1_REQUEST_I2C1_RX
3472   *         @arg @ref LL_GPDMA1_REQUEST_I2C1_TX
3473   *         @arg @ref LL_GPDMA1_REQUEST_I2C2_RX
3474   *         @arg @ref LL_GPDMA1_REQUEST_I2C2_TX
3475   *         @arg @ref LL_GPDMA1_REQUEST_I2C3_RX (*)
3476   *         @arg @ref LL_GPDMA1_REQUEST_I2C3_TX (*)
3477   *         @arg @ref LL_GPDMA1_REQUEST_USART1_RX
3478   *         @arg @ref LL_GPDMA1_REQUEST_USART1_TX
3479   *         @arg @ref LL_GPDMA1_REQUEST_USART2_RX
3480   *         @arg @ref LL_GPDMA1_REQUEST_USART2_TX
3481   *         @arg @ref LL_GPDMA1_REQUEST_USART3_RX
3482   *         @arg @ref LL_GPDMA1_REQUEST_USART3_TX
3483   *         @arg @ref LL_GPDMA1_REQUEST_UART4_RX (*)
3484   *         @arg @ref LL_GPDMA1_REQUEST_UART4_TX (*)
3485   *         @arg @ref LL_GPDMA1_REQUEST_UART5_RX (*)
3486   *         @arg @ref LL_GPDMA1_REQUEST_UART5_TX (*)
3487   *         @arg @ref LL_GPDMA1_REQUEST_USART6_RX (*)
3488   *         @arg @ref LL_GPDMA1_REQUEST_USART6_TX (*)
3489   *         @arg @ref LL_GPDMA1_REQUEST_UART7_RX (*)
3490   *         @arg @ref LL_GPDMA1_REQUEST_UART7_TX (*)
3491   *         @arg @ref LL_GPDMA1_REQUEST_UART8_RX (*)
3492   *         @arg @ref LL_GPDMA1_REQUEST_UART8_TX (*)
3493   *         @arg @ref LL_GPDMA1_REQUEST_UART9_RX (*)
3494   *         @arg @ref LL_GPDMA1_REQUEST_UART9_TX (*)
3495   *         @arg @ref LL_GPDMA1_REQUEST_USART10_RX (*)
3496   *         @arg @ref LL_GPDMA1_REQUEST_USART10_TX (*)
3497   *         @arg @ref LL_GPDMA1_REQUEST_USART11_RX (*)
3498   *         @arg @ref LL_GPDMA1_REQUEST_USART11_TX (*)
3499   *         @arg @ref LL_GPDMA1_REQUEST_UART12_RX (*)
3500   *         @arg @ref LL_GPDMA1_REQUEST_UART12_TX (*)
3501   *         @arg @ref LL_GPDMA1_REQUEST_LPUART1_RX
3502   *         @arg @ref LL_GPDMA1_REQUEST_LPUART1_TX
3503   *         @arg @ref LL_GPDMA1_REQUEST_SPI4_RX (*)
3504   *         @arg @ref LL_GPDMA1_REQUEST_SPI4_TX (*)
3505   *         @arg @ref LL_GPDMA1_REQUEST_SPI5_RX (*)
3506   *         @arg @ref LL_GPDMA1_REQUEST_SPI5_TX (*)
3507   *         @arg @ref LL_GPDMA1_REQUEST_SPI6_RX (*)
3508   *         @arg @ref LL_GPDMA1_REQUEST_SPI6_TX (*)
3509   *         @arg @ref LL_GPDMA1_REQUEST_SAI1_A (*)
3510   *         @arg @ref LL_GPDMA1_REQUEST_SAI1_B (*)
3511   *         @arg @ref LL_GPDMA1_REQUEST_SAI2_A (*)
3512   *         @arg @ref LL_GPDMA1_REQUEST_SAI2_B (*)
3513   *         @arg @ref LL_GPDMA1_REQUEST_OCTOSPI1 (*)
3514   *         @arg @ref LL_GPDMA1_REQUEST_TIM1_CH1
3515   *         @arg @ref LL_GPDMA1_REQUEST_TIM1_CH2
3516   *         @arg @ref LL_GPDMA1_REQUEST_TIM1_CH3
3517   *         @arg @ref LL_GPDMA1_REQUEST_TIM1_CH4
3518   *         @arg @ref LL_GPDMA1_REQUEST_TIM1_UP
3519   *         @arg @ref LL_GPDMA1_REQUEST_TIM1_TRIG
3520   *         @arg @ref LL_GPDMA1_REQUEST_TIM1_COM
3521   *         @arg @ref LL_GPDMA1_REQUEST_TIM8_CH1 (*)
3522   *         @arg @ref LL_GPDMA1_REQUEST_TIM8_CH2 (*)
3523   *         @arg @ref LL_GPDMA1_REQUEST_TIM8_CH3 (*)
3524   *         @arg @ref LL_GPDMA1_REQUEST_TIM8_CH4 (*)
3525   *         @arg @ref LL_GPDMA1_REQUEST_TIM8_UP  (*)
3526   *         @arg @ref LL_GPDMA1_REQUEST_TIM8_TRIG (*)
3527   *         @arg @ref LL_GPDMA1_REQUEST_TIM8_COM (*)
3528   *         @arg @ref LL_GPDMA1_REQUEST_TIM2_CH1
3529   *         @arg @ref LL_GPDMA1_REQUEST_TIM2_CH2
3530   *         @arg @ref LL_GPDMA1_REQUEST_TIM2_CH3
3531   *         @arg @ref LL_GPDMA1_REQUEST_TIM2_CH4
3532   *         @arg @ref LL_GPDMA1_REQUEST_TIM2_UP
3533   *         @arg @ref LL_GPDMA1_REQUEST_TIM3_CH1
3534   *         @arg @ref LL_GPDMA1_REQUEST_TIM3_CH2
3535   *         @arg @ref LL_GPDMA1_REQUEST_TIM3_CH3
3536   *         @arg @ref LL_GPDMA1_REQUEST_TIM3_CH4
3537   *         @arg @ref LL_GPDMA1_REQUEST_TIM3_UP
3538   *         @arg @ref LL_GPDMA1_REQUEST_TIM3_TRIG
3539   *         @arg @ref LL_GPDMA1_REQUEST_TIM4_CH1 (*)
3540   *         @arg @ref LL_GPDMA1_REQUEST_TIM4_CH2 (*)
3541   *         @arg @ref LL_GPDMA1_REQUEST_TIM4_CH3 (*)
3542   *         @arg @ref LL_GPDMA1_REQUEST_TIM4_CH4 (*)
3543   *         @arg @ref LL_GPDMA1_REQUEST_TIM4_UP (*)
3544   *         @arg @ref LL_GPDMA1_REQUEST_TIM5_CH1 (*)
3545   *         @arg @ref LL_GPDMA1_REQUEST_TIM5_CH2 (*)
3546   *         @arg @ref LL_GPDMA1_REQUEST_TIM5_CH3 (*)
3547   *         @arg @ref LL_GPDMA1_REQUEST_TIM5_CH4 (*)
3548   *         @arg @ref LL_GPDMA1_REQUEST_TIM5_UP  (*)
3549   *         @arg @ref LL_GPDMA1_REQUEST_TIM5_TRIG (*)
3550   *         @arg @ref LL_GPDMA1_REQUEST_TIM15_CH1 (*)
3551   *         @arg @ref LL_GPDMA1_REQUEST_TIM15_UP (*)
3552   *         @arg @ref LL_GPDMA1_REQUEST_TIM15_TRIG (*)
3553   *         @arg @ref LL_GPDMA1_REQUEST_TIM15_COM (*)
3554   *         @arg @ref LL_GPDMA1_REQUEST_TIM16_CH1 (*)
3555   *         @arg @ref LL_GPDMA1_REQUEST_TIM16_UP  (*)
3556   *         @arg @ref LL_GPDMA1_REQUEST_TIM17_CH1 (*)
3557   *         @arg @ref LL_GPDMA1_REQUEST_TIM17_UP  (*)
3558   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM1_IC1
3559   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM1_IC2
3560   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM1_UE
3561   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM2_IC1
3562   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM2_IC2
3563   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM2_UE
3564   *         @arg @ref LL_GPDMA1_REQUEST_DCMI (*)
3565   *         @arg @ref LL_GPDMA1_REQUEST_AES_OUT (*)
3566   *         @arg @ref LL_GPDMA1_REQUEST_AES_IN  (*)
3567   *         @arg @ref LL_GPDMA1_REQUEST_HASH_IN
3568   *         @arg @ref LL_GPDMA1_REQUEST_UCPD1_RX (*)
3569   *         @arg @ref LL_GPDMA1_REQUEST_UCPD1_TX (*)
3570   *         @arg @ref LL_GPDMA1_REQUEST_CORDIC_READ (*)
3571   *         @arg @ref LL_GPDMA1_REQUEST_CORDIC_WRITE (*)
3572   *         @arg @ref LL_GPDMA1_REQUEST_FMAC_READ (*)
3573   *         @arg @ref LL_GPDMA1_REQUEST_FMAC_WRITE (*)
3574   *         @arg @ref LL_GPDMA1_REQUEST_SAES_OUT (*)
3575   *         @arg @ref LL_GPDMA1_REQUEST_SAES_IN (*)
3576   *         @arg @ref LL_GPDMA1_REQUEST_I3C1_RX
3577   *         @arg @ref LL_GPDMA1_REQUEST_I3C1_TX
3578   *         @arg @ref LL_GPDMA1_REQUEST_I3C1_TC
3579   *         @arg @ref LL_GPDMA1_REQUEST_I3C1_RS
3580   *         @arg @ref LL_GPDMA1_REQUEST_I2C4_RX (*)
3581   *         @arg @ref LL_GPDMA1_REQUEST_I2C4_TX (*)
3582   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM3_IC1 (*)
3583   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM3_IC2 (*)
3584   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM3_UE (*)
3585   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM5_IC1 (*)
3586   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM5_IC2 (*)
3587   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM5_UE (*)
3588   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM6_IC1 (*)
3589   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM6_IC2 (*)
3590   *         @arg @ref LL_GPDMA1_REQUEST_LPTIM6_UE (*)
3591   *         @arg @ref LL_GPDMA1_REQUEST_I3C2_RX (*)
3592   *         @arg @ref LL_GPDMA1_REQUEST_I3C2_TX (*)
3593   *         @arg @ref LL_GPDMA1_REQUEST_I3C2_TC (*)
3594   *         @arg @ref LL_GPDMA1_REQUEST_I3C2_RS (*)
3595   *
3596   *         @arg @ref LL_GPDMA2_REQUEST_ADC1
3597   *         @arg @ref LL_GPDMA2_REQUEST_ADC2 (*)
3598   *         @arg @ref LL_GPDMA2_REQUEST_DAC1_CH1
3599   *         @arg @ref LL_GPDMA2_REQUEST_DAC1_CH2
3600   *         @arg @ref LL_GPDMA2_REQUEST_TIM6_UP
3601   *         @arg @ref LL_GPDMA2_REQUEST_TIM7_UP
3602   *         @arg @ref LL_GPDMA2_REQUEST_SPI1_RX
3603   *         @arg @ref LL_GPDMA2_REQUEST_SPI1_TX
3604   *         @arg @ref LL_GPDMA2_REQUEST_SPI2_RX
3605   *         @arg @ref LL_GPDMA2_REQUEST_SPI2_TX
3606   *         @arg @ref LL_GPDMA2_REQUEST_SPI3_RX
3607   *         @arg @ref LL_GPDMA2_REQUEST_SPI3_TX
3608   *         @arg @ref LL_GPDMA2_REQUEST_I2C1_RX
3609   *         @arg @ref LL_GPDMA2_REQUEST_I2C1_TX
3610   *         @arg @ref LL_GPDMA2_REQUEST_I2C2_RX
3611   *         @arg @ref LL_GPDMA2_REQUEST_I2C2_TX
3612   *         @arg @ref LL_GPDMA2_REQUEST_I2C3_RX (*)
3613   *         @arg @ref LL_GPDMA2_REQUEST_I2C3_TX (*)
3614   *         @arg @ref LL_GPDMA2_REQUEST_USART1_RX
3615   *         @arg @ref LL_GPDMA2_REQUEST_USART1_TX
3616   *         @arg @ref LL_GPDMA2_REQUEST_USART2_RX
3617   *         @arg @ref LL_GPDMA2_REQUEST_USART2_TX
3618   *         @arg @ref LL_GPDMA2_REQUEST_USART3_RX
3619   *         @arg @ref LL_GPDMA2_REQUEST_USART3_TX
3620   *         @arg @ref LL_GPDMA2_REQUEST_UART4_RX (*)
3621   *         @arg @ref LL_GPDMA2_REQUEST_UART4_TX (*)
3622   *         @arg @ref LL_GPDMA2_REQUEST_UART5_RX (*)
3623   *         @arg @ref LL_GPDMA2_REQUEST_UART5_TX (*)
3624   *         @arg @ref LL_GPDMA2_REQUEST_USART6_RX (*)
3625   *         @arg @ref LL_GPDMA2_REQUEST_USART6_TX (*)
3626   *         @arg @ref LL_GPDMA2_REQUEST_UART7_RX (*)
3627   *         @arg @ref LL_GPDMA2_REQUEST_UART7_TX (*)
3628   *         @arg @ref LL_GPDMA2_REQUEST_UART8_RX (*)
3629   *         @arg @ref LL_GPDMA2_REQUEST_UART8_TX (*)
3630   *         @arg @ref LL_GPDMA2_REQUEST_UART9_RX (*)
3631   *         @arg @ref LL_GPDMA2_REQUEST_UART9_TX (*)
3632   *         @arg @ref LL_GPDMA2_REQUEST_USART10_RX (*)
3633   *         @arg @ref LL_GPDMA2_REQUEST_USART10_TX (*)
3634   *         @arg @ref LL_GPDMA2_REQUEST_USART11_RX (*)
3635   *         @arg @ref LL_GPDMA2_REQUEST_USART11_TX (*)
3636   *         @arg @ref LL_GPDMA2_REQUEST_UART12_RX (*)
3637   *         @arg @ref LL_GPDMA2_REQUEST_UART12_TX (*)
3638   *         @arg @ref LL_GPDMA2_REQUEST_LPUART1_RX
3639   *         @arg @ref LL_GPDMA2_REQUEST_LPUART1_TX
3640   *         @arg @ref LL_GPDMA2_REQUEST_SPI4_RX (*)
3641   *         @arg @ref LL_GPDMA2_REQUEST_SPI4_TX (*)
3642   *         @arg @ref LL_GPDMA2_REQUEST_SPI5_RX (*)
3643   *         @arg @ref LL_GPDMA2_REQUEST_SPI5_TX (*)
3644   *         @arg @ref LL_GPDMA2_REQUEST_SPI6_RX (*)
3645   *         @arg @ref LL_GPDMA2_REQUEST_SPI6_TX (*)
3646   *         @arg @ref LL_GPDMA2_REQUEST_SAI1_A (*)
3647   *         @arg @ref LL_GPDMA2_REQUEST_SAI1_B (*)
3648   *         @arg @ref LL_GPDMA2_REQUEST_SAI2_A (*)
3649   *         @arg @ref LL_GPDMA2_REQUEST_SAI2_B (*)
3650   *         @arg @ref LL_GPDMA2_REQUEST_OCTOSPI1 (*)
3651   *         @arg @ref LL_GPDMA2_REQUEST_TIM1_CH1
3652   *         @arg @ref LL_GPDMA2_REQUEST_TIM1_CH2
3653   *         @arg @ref LL_GPDMA2_REQUEST_TIM1_CH3
3654   *         @arg @ref LL_GPDMA2_REQUEST_TIM1_CH4
3655   *         @arg @ref LL_GPDMA2_REQUEST_TIM1_UP
3656   *         @arg @ref LL_GPDMA2_REQUEST_TIM1_TRIG
3657   *         @arg @ref LL_GPDMA2_REQUEST_TIM1_COM
3658   *         @arg @ref LL_GPDMA2_REQUEST_TIM8_CH1 (*)
3659   *         @arg @ref LL_GPDMA2_REQUEST_TIM8_CH2 (*)
3660   *         @arg @ref LL_GPDMA2_REQUEST_TIM8_CH3 (*)
3661   *         @arg @ref LL_GPDMA2_REQUEST_TIM8_CH4 (*)
3662   *         @arg @ref LL_GPDMA2_REQUEST_TIM8_UP  (*)
3663   *         @arg @ref LL_GPDMA2_REQUEST_TIM8_TRIG (*)
3664   *         @arg @ref LL_GPDMA2_REQUEST_TIM8_COM (*)
3665   *         @arg @ref LL_GPDMA2_REQUEST_TIM2_CH1
3666   *         @arg @ref LL_GPDMA2_REQUEST_TIM2_CH2
3667   *         @arg @ref LL_GPDMA2_REQUEST_TIM2_CH3
3668   *         @arg @ref LL_GPDMA2_REQUEST_TIM2_CH4
3669   *         @arg @ref LL_GPDMA2_REQUEST_TIM2_UP
3670   *         @arg @ref LL_GPDMA2_REQUEST_TIM3_CH1
3671   *         @arg @ref LL_GPDMA2_REQUEST_TIM3_CH2
3672   *         @arg @ref LL_GPDMA2_REQUEST_TIM3_CH3
3673   *         @arg @ref LL_GPDMA2_REQUEST_TIM3_CH4
3674   *         @arg @ref LL_GPDMA2_REQUEST_TIM3_UP
3675   *         @arg @ref LL_GPDMA2_REQUEST_TIM3_TRIG
3676   *         @arg @ref LL_GPDMA2_REQUEST_TIM4_CH1 (*)
3677   *         @arg @ref LL_GPDMA2_REQUEST_TIM4_CH2 (*)
3678   *         @arg @ref LL_GPDMA2_REQUEST_TIM4_CH3 (*)
3679   *         @arg @ref LL_GPDMA2_REQUEST_TIM4_CH4 (*)
3680   *         @arg @ref LL_GPDMA2_REQUEST_TIM4_UP (*)
3681   *         @arg @ref LL_GPDMA2_REQUEST_TIM5_CH1 (*)
3682   *         @arg @ref LL_GPDMA2_REQUEST_TIM5_CH2 (*)
3683   *         @arg @ref LL_GPDMA2_REQUEST_TIM5_CH3 (*)
3684   *         @arg @ref LL_GPDMA2_REQUEST_TIM5_CH4 (*)
3685   *         @arg @ref LL_GPDMA2_REQUEST_TIM5_UP  (*)
3686   *         @arg @ref LL_GPDMA2_REQUEST_TIM5_TRIG (*)
3687   *         @arg @ref LL_GPDMA2_REQUEST_TIM15_CH1 (*)
3688   *         @arg @ref LL_GPDMA2_REQUEST_TIM15_UP (*)
3689   *         @arg @ref LL_GPDMA2_REQUEST_TIM15_TRIG (*)
3690   *         @arg @ref LL_GPDMA2_REQUEST_TIM15_COM (*)
3691   *         @arg @ref LL_GPDMA2_REQUEST_TIM16_CH1 (*)
3692   *         @arg @ref LL_GPDMA2_REQUEST_TIM16_UP  (*)
3693   *         @arg @ref LL_GPDMA2_REQUEST_TIM17_CH1 (*)
3694   *         @arg @ref LL_GPDMA2_REQUEST_TIM17_UP  (*)
3695   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM1_IC1
3696   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM1_IC2
3697   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM1_UE
3698   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM2_IC1
3699   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM2_IC2
3700   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM2_UE
3701   *         @arg @ref LL_GPDMA2_REQUEST_DCMI (*)
3702   *         @arg @ref LL_GPDMA2_REQUEST_AES_OUT (*)
3703   *         @arg @ref LL_GPDMA2_REQUEST_AES_IN  (*)
3704   *         @arg @ref LL_GPDMA2_REQUEST_HASH_IN
3705   *         @arg @ref LL_GPDMA2_REQUEST_UCPD1_RX (*)
3706   *         @arg @ref LL_GPDMA2_REQUEST_UCPD1_TX (*)
3707   *         @arg @ref LL_GPDMA2_REQUEST_CORDIC_READ (*)
3708   *         @arg @ref LL_GPDMA2_REQUEST_CORDIC_WRITE (*)
3709   *         @arg @ref LL_GPDMA2_REQUEST_FMAC_READ (*)
3710   *         @arg @ref LL_GPDMA2_REQUEST_FMAC_WRITE (*)
3711   *         @arg @ref LL_GPDMA2_REQUEST_SAES_OUT (*)
3712   *         @arg @ref LL_GPDMA2_REQUEST_SAES_IN (*)
3713   *         @arg @ref LL_GPDMA2_REQUEST_I3C1_RX
3714   *         @arg @ref LL_GPDMA2_REQUEST_I3C1_TX
3715   *         @arg @ref LL_GPDMA2_REQUEST_I3C1_TC
3716   *         @arg @ref LL_GPDMA2_REQUEST_I3C1_RS
3717   *         @arg @ref LL_GPDMA2_REQUEST_I2C4_RX (*)
3718   *         @arg @ref LL_GPDMA2_REQUEST_I2C4_TX (*)
3719   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM3_IC1 (*)
3720   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM3_IC2 (*)
3721   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM3_UE (*)
3722   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM5_IC1 (*)
3723   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM5_IC2 (*)
3724   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM5_UE (*)
3725   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM6_IC1 (*)
3726   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM6_IC2 (*)
3727   *         @arg @ref LL_GPDMA2_REQUEST_LPTIM6_UE (*)
3728   *         @arg @ref LL_GPDMA2_REQUEST_I3C2_RX (*)
3729   *         @arg @ref LL_GPDMA2_REQUEST_I3C2_TX (*)
3730   *         @arg @ref LL_GPDMA2_REQUEST_I3C2_TC (*)
3731   *         @arg @ref LL_GPDMA2_REQUEST_I3C2_RS (*)
3732   *
3733   * @note   (*) Availability depends on devices.
3734   */
LL_DMA_GetPeriphRequest(const DMA_TypeDef * DMAx,uint32_t Channel)3735 __STATIC_INLINE  uint32_t LL_DMA_GetPeriphRequest(const DMA_TypeDef *DMAx, uint32_t Channel)
3736 {
3737   uint32_t dma_base_addr = (uint32_t)DMAx;
3738   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_REQSEL));
3739 }
3740 
3741 /**
3742   * @brief Set hardware trigger.
3743   * @note  This API is used for all available DMA channels.
3744   * @rmtoll CTR2         TRIGSEL     LL_DMA_SetHWTrigger
3745   * @param  DMAx DMAx Instance
3746   * @param  Channel This parameter can be one of the following values:
3747   *         @arg @ref LL_DMA_CHANNEL_0
3748   *         @arg @ref LL_DMA_CHANNEL_1
3749   *         @arg @ref LL_DMA_CHANNEL_2
3750   *         @arg @ref LL_DMA_CHANNEL_3
3751   *         @arg @ref LL_DMA_CHANNEL_4
3752   *         @arg @ref LL_DMA_CHANNEL_5
3753   *         @arg @ref LL_DMA_CHANNEL_6
3754   *         @arg @ref LL_DMA_CHANNEL_7
3755   * @param  Trigger This parameter can be one of the following values:
3756   *         @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE0
3757   *         @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE1
3758   *         @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE2
3759   *         @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE3
3760   *         @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE4
3761   *         @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE5
3762   *         @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE6
3763   *         @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE7
3764   *         @arg @ref LL_GPDMA1_TRIGGER_TAMP_TRG1
3765   *         @arg @ref LL_GPDMA1_TRIGGER_TAMP_TRG2
3766   *         @arg @ref LL_GPDMA1_TRIGGER_TAMP_TRG3 (*)
3767   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM1_CH1
3768   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM1_CH2
3769   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM2_CH1
3770   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM2_CH2
3771   *         @arg @ref LL_GPDMA1_TRIGGER_RTC_ALRA_TRG
3772   *         @arg @ref LL_GPDMA1_TRIGGER_RTC_ALRB_TRG
3773   *         @arg @ref LL_GPDMA1_TRIGGER_RTC_WUT_TRG
3774   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH0_TCF
3775   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH1_TCF
3776   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH2_TCF
3777   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH3_TCF
3778   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH4_TCF
3779   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH5_TCF
3780   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH6_TCF
3781   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH7_TCF
3782   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA2_CH0_TCF
3783   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA2_CH1_TCF
3784   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA2_CH2_TCF
3785   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA2_CH3_TCF
3786   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA2_CH4_TCF
3787   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA2_CH5_TCF
3788   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA2_CH6_TCF
3789   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA2_CH7_TCF
3790   *         @arg @ref LL_GPDMA1_TRIGGER_TIM2_TRGO
3791   *         @arg @ref LL_GPDMA1_TRIGGER_TIM15_TRGO
3792   *         @arg @ref LL_GPDMA1_TRIGGER_TIM12_TRGO
3793   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM3_CH1
3794   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM3_CH2
3795   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM4_AIT
3796   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM5_CH1
3797   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM5_CH2
3798   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM6_CH1
3799   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM6_CH2
3800   *         @arg @ref LL_GPDMA1_TRIGGER_TIM15_TRGO (*)
3801   *         @arg @ref LL_GPDMA1_TRIGGER_TIM12_TRGO (*)
3802   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM3_CH1 (*)
3803   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM3_CH2 (*)
3804   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM4_AIT (*)
3805   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM5_CH1 (*)
3806   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM5_CH2 (*)
3807   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM6_CH1 (*)
3808   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM6_CH2 (*)
3809   *         @arg @ref LL_GPDMA1_TRIGGER_COMP1_OUT (*)
3810   *         @arg @ref LL_GPDMA1_TRIGGER_EVENTOUT (*)
3811   *
3812   *         @arg @ref LL_GPDMA2_TRIGGER_EXTI_LINE0
3813   *         @arg @ref LL_GPDMA2_TRIGGER_EXTI_LINE1
3814   *         @arg @ref LL_GPDMA2_TRIGGER_EXTI_LINE2
3815   *         @arg @ref LL_GPDMA2_TRIGGER_EXTI_LINE3
3816   *         @arg @ref LL_GPDMA2_TRIGGER_EXTI_LINE4
3817   *         @arg @ref LL_GPDMA2_TRIGGER_EXTI_LINE5
3818   *         @arg @ref LL_GPDMA2_TRIGGER_EXTI_LINE6
3819   *         @arg @ref LL_GPDMA2_TRIGGER_EXTI_LINE7
3820   *         @arg @ref LL_GPDMA2_TRIGGER_TAMP_TRG1
3821   *         @arg @ref LL_GPDMA2_TRIGGER_TAMP_TRG2
3822   *         @arg @ref LL_GPDMA2_TRIGGER_TAMP_TRG3 (*)
3823   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM1_CH1
3824   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM1_CH2
3825   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM2_CH1
3826   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM2_CH2
3827   *         @arg @ref LL_GPDMA2_TRIGGER_RTC_ALRA_TRG
3828   *         @arg @ref LL_GPDMA2_TRIGGER_RTC_ALRB_TRG
3829   *         @arg @ref LL_GPDMA2_TRIGGER_RTC_WUT_TRG
3830   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA1_CH0_TCF
3831   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA1_CH1_TCF
3832   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA1_CH2_TCF
3833   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA1_CH3_TCF
3834   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA1_CH4_TCF
3835   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA1_CH5_TCF
3836   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA1_CH6_TCF
3837   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA1_CH7_TCF
3838   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA2_CH0_TCF
3839   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA2_CH1_TCF
3840   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA2_CH2_TCF
3841   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA2_CH3_TCF
3842   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA2_CH4_TCF
3843   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA2_CH5_TCF
3844   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA2_CH6_TCF
3845   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA2_CH7_TCF
3846   *         @arg @ref LL_GPDMA2_TRIGGER_TIM2_TRGO
3847   *         @arg @ref LL_GPDMA2_TRIGGER_TIM15_TRGO
3848   *         @arg @ref LL_GPDMA2_TRIGGER_TIM12_TRGO
3849   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM3_CH1
3850   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM3_CH2
3851   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM4_AIT
3852   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM5_CH1
3853   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM5_CH2
3854   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM6_CH1
3855   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM6_CH2
3856   *         @arg @ref LL_GPDMA2_TRIGGER_TIM15_TRGO (*)
3857   *         @arg @ref LL_GPDMA2_TRIGGER_TIM12_TRGO (*)
3858   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM3_CH1 (*)
3859   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM3_CH2 (*)
3860   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM4_AIT (*)
3861   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM5_CH1 (*)
3862   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM5_CH2 (*)
3863   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM6_CH1 (*)
3864   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM6_CH2 (*)
3865   *         @arg @ref LL_GPDMA2_TRIGGER_COMP1_OUT (*)
3866   *         @arg @ref LL_GPDMA2_TRIGGER_EVENTOUT (*)
3867   *
3868   * @note   (*) Availability depends on devices.
3869   * @retval None.
3870   */
LL_DMA_SetHWTrigger(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Trigger)3871 __STATIC_INLINE void LL_DMA_SetHWTrigger(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Trigger)
3872 {
3873   uint32_t dma_base_addr = (uint32_t)DMAx;
3874   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_TRIGSEL,
3875              (Trigger << DMA_CTR2_TRIGSEL_Pos) & DMA_CTR2_TRIGSEL);
3876 }
3877 
3878 /**
3879   * @brief Get hardware triggers.
3880   * @note  This API is used for all available DMA channels.
3881   * @rmtoll CTR2         TRIGSEL     LL_DMA_GetHWTrigger
3882   * @param  DMAx DMAx Instance
3883   * @param  Channel This parameter can be one of the following values:
3884   *         @arg @ref LL_DMA_CHANNEL_0
3885   *         @arg @ref LL_DMA_CHANNEL_1
3886   *         @arg @ref LL_DMA_CHANNEL_2
3887   *         @arg @ref LL_DMA_CHANNEL_3
3888   *         @arg @ref LL_DMA_CHANNEL_4
3889   *         @arg @ref LL_DMA_CHANNEL_5
3890   *         @arg @ref LL_DMA_CHANNEL_6
3891   *         @arg @ref LL_DMA_CHANNEL_7
3892   * @retval Returned value can be one of the following values:
3893   *         @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE0
3894   *         @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE1
3895   *         @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE2
3896   *         @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE3
3897   *         @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE4
3898   *         @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE5
3899   *         @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE6
3900   *         @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE7
3901   *         @arg @ref LL_GPDMA1_TRIGGER_TAMP_TRG1
3902   *         @arg @ref LL_GPDMA1_TRIGGER_TAMP_TRG2
3903   *         @arg @ref LL_GPDMA1_TRIGGER_TAMP_TRG3 (*)
3904   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM1_CH1
3905   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM1_CH2
3906   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM2_CH1
3907   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM2_CH2
3908   *         @arg @ref LL_GPDMA1_TRIGGER_RTC_ALRA_TRG
3909   *         @arg @ref LL_GPDMA1_TRIGGER_RTC_ALRB_TRG
3910   *         @arg @ref LL_GPDMA1_TRIGGER_RTC_WUT_TRG
3911   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH0_TCF
3912   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH1_TCF
3913   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH2_TCF
3914   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH3_TCF
3915   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH4_TCF
3916   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH5_TCF
3917   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH6_TCF
3918   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH7_TCF
3919   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA2_CH0_TCF
3920   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA2_CH1_TCF
3921   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA2_CH2_TCF
3922   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA2_CH3_TCF
3923   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA2_CH4_TCF
3924   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA2_CH5_TCF
3925   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA2_CH6_TCF
3926   *         @arg @ref LL_GPDMA1_TRIGGER_GPDMA2_CH7_TCF
3927   *         @arg @ref LL_GPDMA1_TRIGGER_TIM2_TRGO
3928   *         @arg @ref LL_GPDMA1_TRIGGER_TIM15_TRGO
3929   *         @arg @ref LL_GPDMA1_TRIGGER_TIM12_TRGO
3930   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM3_CH1
3931   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM3_CH2
3932   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM4_AIT
3933   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM5_CH1
3934   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM5_CH2
3935   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM6_CH1
3936   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM6_CH2
3937   *         @arg @ref LL_GPDMA1_TRIGGER_TIM15_TRGO (*)
3938   *         @arg @ref LL_GPDMA1_TRIGGER_TIM12_TRGO (*)
3939   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM3_CH1 (*)
3940   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM3_CH2 (*)
3941   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM4_AIT (*)
3942   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM5_CH1 (*)
3943   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM5_CH2 (*)
3944   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM6_CH1 (*)
3945   *         @arg @ref LL_GPDMA1_TRIGGER_LPTIM6_CH2 (*)
3946   *         @arg @ref LL_GPDMA1_TRIGGER_COMP1_OUT (*)
3947   *         @arg @ref LL_GPDMA1_TRIGGER_EVENTOUT (*)
3948   *
3949   *         @arg @ref LL_GPDMA2_TRIGGER_EXTI_LINE0
3950   *         @arg @ref LL_GPDMA2_TRIGGER_EXTI_LINE1
3951   *         @arg @ref LL_GPDMA2_TRIGGER_EXTI_LINE2
3952   *         @arg @ref LL_GPDMA2_TRIGGER_EXTI_LINE3
3953   *         @arg @ref LL_GPDMA2_TRIGGER_EXTI_LINE4
3954   *         @arg @ref LL_GPDMA2_TRIGGER_EXTI_LINE5
3955   *         @arg @ref LL_GPDMA2_TRIGGER_EXTI_LINE6
3956   *         @arg @ref LL_GPDMA2_TRIGGER_EXTI_LINE7
3957   *         @arg @ref LL_GPDMA2_TRIGGER_TAMP_TRG1
3958   *         @arg @ref LL_GPDMA2_TRIGGER_TAMP_TRG2
3959   *         @arg @ref LL_GPDMA2_TRIGGER_TAMP_TRG3 (*)
3960   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM1_CH1
3961   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM1_CH2
3962   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM2_CH1
3963   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM2_CH2
3964   *         @arg @ref LL_GPDMA2_TRIGGER_RTC_ALRA_TRG
3965   *         @arg @ref LL_GPDMA2_TRIGGER_RTC_ALRB_TRG
3966   *         @arg @ref LL_GPDMA2_TRIGGER_RTC_WUT_TRG
3967   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA1_CH0_TCF
3968   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA1_CH1_TCF
3969   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA1_CH2_TCF
3970   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA1_CH3_TCF
3971   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA1_CH4_TCF
3972   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA1_CH5_TCF
3973   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA1_CH6_TCF
3974   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA1_CH7_TCF
3975   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA2_CH0_TCF
3976   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA2_CH1_TCF
3977   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA2_CH2_TCF
3978   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA2_CH3_TCF
3979   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA2_CH4_TCF
3980   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA2_CH5_TCF
3981   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA2_CH6_TCF
3982   *         @arg @ref LL_GPDMA2_TRIGGER_GPDMA2_CH7_TCF
3983   *         @arg @ref LL_GPDMA2_TRIGGER_TIM2_TRGO
3984   *         @arg @ref LL_GPDMA2_TRIGGER_TIM15_TRGO
3985   *         @arg @ref LL_GPDMA2_TRIGGER_TIM12_TRGO
3986   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM3_CH1
3987   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM3_CH2
3988   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM4_AIT
3989   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM5_CH1
3990   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM5_CH2
3991   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM6_CH1
3992   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM6_CH2
3993   *         @arg @ref LL_GPDMA2_TRIGGER_TIM15_TRGO (*)
3994   *         @arg @ref LL_GPDMA2_TRIGGER_TIM12_TRGO (*)
3995   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM3_CH1 (*)
3996   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM3_CH2 (*)
3997   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM4_AIT (*)
3998   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM5_CH1 (*)
3999   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM5_CH2 (*)
4000   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM6_CH1 (*)
4001   *         @arg @ref LL_GPDMA2_TRIGGER_LPTIM6_CH2 (*)
4002   *         @arg @ref LL_GPDMA2_TRIGGER_COMP1_OUT (*)
4003   *         @arg @ref LL_GPDMA2_TRIGGER_EVENTOUT (*)
4004   *
4005   * @note   (*) Availability depends on devices.
4006   */
LL_DMA_GetHWTrigger(const DMA_TypeDef * DMAx,uint32_t Channel)4007 __STATIC_INLINE  uint32_t LL_DMA_GetHWTrigger(const DMA_TypeDef *DMAx, uint32_t Channel)
4008 {
4009   uint32_t dma_base_addr = (uint32_t)DMAx;
4010   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2,
4011                    DMA_CTR2_TRIGSEL) >> DMA_CTR2_TRIGSEL_Pos);
4012 }
4013 
4014 /**
4015   * @brief Set DMA transfer mode.
4016   * @note  This API is used for all available DMA channels.
4017   * @rmtoll CTR2         PFREQ     LL_DMA_SetTransferMode
4018   * @param  DMAx DMAx Instance
4019   * @param  Channel This parameter can be one of the following values:
4020   *         @arg @ref LL_DMA_CHANNEL_0
4021   *         @arg @ref LL_DMA_CHANNEL_7
4022   * @param  Mode This parameter can be one of the following values:
4023   *         @arg @ref LL_DMA_NORMAL
4024   *         @arg @ref LL_DMA_PFCTRL
4025   * @retval None.
4026   */
LL_DMA_SetTransferMode(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Mode)4027 __STATIC_INLINE void LL_DMA_SetTransferMode(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Mode)
4028 {
4029   uint32_t dma_base_addr = (uint32_t)DMAx;
4030   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_PFREQ,
4031              Mode & DMA_CTR2_PFREQ);
4032 }
4033 
4034 /**
4035   * @brief Get DMA transfer mode.
4036   * @note  This API is used for all available DMA channels.
4037   * @rmtoll CTR2         TRIGSEL     LL_DMA_GetTransferMode
4038   * @param  DMAx DMAx Instance
4039   * @param  Channel This parameter can be one of the following values:
4040   *         @arg @ref LL_DMA_CHANNEL_0
4041   *         @arg @ref LL_DMA_CHANNEL_7
4042   * @retval Returned value can be one of the following values:
4043   *         @arg @ref LL_DMA_NORMAL
4044   *         @arg @ref LL_DMA_PFCTRL
4045   */
LL_DMA_GetTransferMode(const DMA_TypeDef * DMAx,uint32_t Channel)4046 __STATIC_INLINE  uint32_t LL_DMA_GetTransferMode(const DMA_TypeDef *DMAx, uint32_t Channel)
4047 {
4048   uint32_t dma_base_addr = (uint32_t)DMAx;
4049   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2,
4050                    DMA_CTR2_PFREQ));
4051 }
4052 
4053 /**
4054   * @brief Configure addresses update.
4055   * @note  This API is used only for 2D addressing channels.
4056   * @rmtoll CBR1         BRDDEC            LL_DMA_ConfigBlkRptAddrUpdate\n
4057   *         CBR1         BRSDEC            LL_DMA_ConfigBlkRptAddrUpdate\n
4058   *         CBR1         DDEC              LL_DMA_ConfigBlkRptAddrUpdate\n
4059   *         CBR1         SDEC              LL_DMA_ConfigBlkRptAddrUpdate
4060   * @param  DMAx DMAx Instance
4061   * @param  Channel This parameter can be one of the following values:
4062   *         @arg @ref LL_DMA_CHANNEL_6
4063   *         @arg @ref LL_DMA_CHANNEL_7
4064   * @param  Configuration This parameter must be a combination of all the following values:
4065   *         @arg @ref LL_DMA_BLKRPT_DEST_ADDR_INCREMENT or @ref LL_DMA_BLKRPT_DEST_ADDR_DECREMENT
4066   *         @arg @ref LL_DMA_BLKRPT_SRC_ADDR_INCREMENT  or @ref LL_DMA_BLKRPT_SRC_ADDR_DECREMENT
4067   *         @arg @ref LL_DMA_BURST_DEST_ADDR_INCREMENT  or @ref LL_DMA_BURST_DEST_ADDR_DECREMENT
4068   *         @arg @ref LL_DMA_BURST_SRC_ADDR_INCREMENT   or @ref LL_DMA_BURST_SRC_ADDR_DECREMENT
4069   *@retval None.
4070   */
LL_DMA_ConfigBlkRptAddrUpdate(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Configuration)4071 __STATIC_INLINE void LL_DMA_ConfigBlkRptAddrUpdate(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
4072 {
4073   uint32_t dma_base_addr = (uint32_t)DMAx;
4074   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR1,
4075              DMA_CBR1_BRDDEC | DMA_CBR1_BRSDEC | DMA_CBR1_DDEC | DMA_CBR1_SDEC, Configuration);
4076 }
4077 
4078 /**
4079   * @brief Configure DMA Block number of data and repeat Count.
4080   * @note  This API is used only for 2D addressing channels.
4081   * @rmtoll CBR1         BNDT                     LL_DMA_ConfigBlkCounters\n
4082   *         CBR1         BRC                      LL_DMA_ConfigBlkCounters
4083   * @param  DMAx DMAx Instance
4084   * @param  Channel This parameter can be one of the following values:
4085   *         @arg @ref LL_DMA_CHANNEL_6
4086   *         @arg @ref LL_DMA_CHANNEL_7
4087   * @param  BlkDataLength Block transfer length
4088                           Value between 0 to 0x0000FFFF
4089   * @param  BlkRptCount Block repeat counter
4090   *                     Value between 0 to 0x000007FF
4091   *@retval None.
4092   */
LL_DMA_ConfigBlkCounters(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t BlkDataLength,uint32_t BlkRptCount)4093 __STATIC_INLINE void LL_DMA_ConfigBlkCounters(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t BlkDataLength,
4094                                               uint32_t BlkRptCount)
4095 {
4096   uint32_t dma_base_addr = (uint32_t)DMAx;
4097   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR1,
4098              (DMA_CBR1_BNDT | DMA_CBR1_BRC), (BlkDataLength | (BlkRptCount << DMA_CBR1_BRC_Pos)));
4099 }
4100 
4101 /**
4102   * @brief Set block repeat destination address update.
4103   * @note  This API is used only for 2D addressing channels.
4104   * @rmtoll CBR1          BRDDEC           LL_DMA_SetBlkRptDestAddrUpdate
4105   * @param  DMAx DMAx Instance
4106   * @param  Channel This parameter can be one of the following values:
4107   *         @arg @ref LL_DMA_CHANNEL_6
4108   *         @arg @ref LL_DMA_CHANNEL_7
4109   * @param  BlkRptDestAddrUpdate This parameter can be one of the following values:
4110   *         @arg @ref LL_DMA_BLKRPT_DEST_ADDR_INCREMENT
4111   *         @arg @ref LL_DMA_BLKRPT_DEST_ADDR_DECREMENT
4112   * @retval None.
4113   */
LL_DMA_SetBlkRptDestAddrUpdate(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t BlkRptDestAddrUpdate)4114 __STATIC_INLINE void LL_DMA_SetBlkRptDestAddrUpdate(const DMA_TypeDef *DMAx, uint32_t Channel,
4115                                                     uint32_t BlkRptDestAddrUpdate)
4116 {
4117   uint32_t dma_base_addr = (uint32_t)DMAx;
4118   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR1, DMA_CBR1_BRDDEC,
4119              BlkRptDestAddrUpdate);
4120 }
4121 
4122 /**
4123   * @brief Get block repeat destination address update.
4124   * @note  This API is used only for 2D addressing channels.
4125   * @rmtoll CBR1          BRDDEC           LL_DMA_GetBlkRptDestAddrUpdate
4126   * @param  DMAx DMAx Instance
4127   * @param  Channel This parameter can be one of the following values:
4128   *         @arg @ref LL_DMA_CHANNEL_6
4129   *         @arg @ref LL_DMA_CHANNEL_7
4130   * @retval Returned value can be one of the following values:
4131   *         @arg @ref LL_DMA_BLKRPT_DEST_ADDR_INCREMENT
4132   *         @arg @ref LL_DMA_BLKRPT_DEST_ADDR_DECREMENT
4133   */
LL_DMA_GetBlkRptDestAddrUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)4134 __STATIC_INLINE uint32_t LL_DMA_GetBlkRptDestAddrUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
4135 {
4136   uint32_t dma_base_addr = (uint32_t)DMAx;
4137   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR1, DMA_CBR1_BRDDEC));
4138 }
4139 
4140 /**
4141   * @brief Set block repeat source address update.
4142   * @note  This API is used only for 2D addressing channels.
4143   * @rmtoll CBR1          BRSDEC           LL_DMA_SetBlkRptSrcAddrUpdate
4144   * @param  DMAx DMAx Instance
4145   * @param  Channel This parameter can be one of the following values:
4146   *         @arg @ref LL_DMA_CHANNEL_6
4147   *         @arg @ref LL_DMA_CHANNEL_7
4148   * @param  BlkRptSrcAddrUpdate This parameter can be one of the following values:
4149   *         @arg @ref LL_DMA_BLKRPT_SRC_ADDR_INCREMENT
4150   *         @arg @ref LL_DMA_BLKRPT_SRC_ADDR_DECREMENT
4151   * @retval None.
4152   */
LL_DMA_SetBlkRptSrcAddrUpdate(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t BlkRptSrcAddrUpdate)4153 __STATIC_INLINE void LL_DMA_SetBlkRptSrcAddrUpdate(const DMA_TypeDef *DMAx, uint32_t Channel,
4154                                                    uint32_t BlkRptSrcAddrUpdate)
4155 {
4156   uint32_t dma_base_addr = (uint32_t)DMAx;
4157   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR1, DMA_CBR1_BRSDEC,
4158              BlkRptSrcAddrUpdate);
4159 }
4160 
4161 /**
4162   * @brief Get block repeat source address update.
4163   * @note  This API is used only for 2D addressing channels.
4164   * @rmtoll CBR1          BRSDEC           LL_DMA_GetBlkRptSrcAddrUpdate
4165   * @param  DMAx DMAx Instance
4166   * @param  Channel This parameter can be one of the following values:
4167   *         @arg @ref LL_DMA_CHANNEL_6
4168   *         @arg @ref LL_DMA_CHANNEL_7
4169   * @retval Returned value can be one of the following values:
4170   *         @arg @ref LL_DMA_BLKRPT_SRC_ADDR_INCREMENT
4171   *         @arg @ref LL_DMA_BLKRPT_SRC_ADDR_DECREMENT
4172   */
LL_DMA_GetBlkRptSrcAddrUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)4173 __STATIC_INLINE uint32_t LL_DMA_GetBlkRptSrcAddrUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
4174 {
4175   uint32_t dma_base_addr = (uint32_t)DMAx;
4176   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR1, DMA_CBR1_BRSDEC));
4177 }
4178 
4179 /**
4180   * @brief Set destination address update.
4181   * @note  This API is used only for 2D addressing channels.
4182   * @rmtoll CBR1          DDEC           LL_DMA_SetDestAddrUpdate
4183   * @param  DMAx DMAx Instance
4184   * @param  Channel This parameter can be one of the following values:
4185   *         @arg @ref LL_DMA_CHANNEL_6
4186   *         @arg @ref LL_DMA_CHANNEL_7
4187   * @param  DestAddrUpdate This parameter can be one of the following values:
4188   *         @arg @ref LL_DMA_BURST_DEST_ADDR_INCREMENT
4189   *         @arg @ref LL_DMA_BURST_DEST_ADDR_DECREMENT
4190   * @retval None.
4191   */
LL_DMA_SetDestAddrUpdate(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DestAddrUpdate)4192 __STATIC_INLINE void LL_DMA_SetDestAddrUpdate(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DestAddrUpdate)
4193 {
4194   uint32_t dma_base_addr = (uint32_t)DMAx;
4195   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR1, DMA_CBR1_DDEC,
4196              DestAddrUpdate);
4197 }
4198 
4199 /**
4200   * @brief Get destination address update.
4201   * @note  This API is used only for 2D addressing channels.
4202   * @rmtoll CBR1          DDEC           LL_DMA_GetDestAddrUpdate
4203   * @param  DMAx DMAx Instance
4204   * @param  Channel This parameter can be one of the following values:
4205   *         @arg @ref LL_DMA_CHANNEL_6
4206   *         @arg @ref LL_DMA_CHANNEL_7
4207   * @retval Returned value can be one of the following values:
4208   *         @arg @ref LL_DMA_BURST_DEST_ADDR_INCREMENT
4209   *         @arg @ref LL_DMA_BURST_DEST_ADDR_DECREMENT
4210   */
LL_DMA_GetDestAddrUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)4211 __STATIC_INLINE uint32_t LL_DMA_GetDestAddrUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
4212 {
4213   uint32_t dma_base_addr = (uint32_t)DMAx;
4214   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR1, DMA_CBR1_DDEC));
4215 }
4216 
4217 /**
4218   * @brief Set source address update.
4219   * @note  This API is used only for 2D addressing channels.
4220   * @rmtoll CBR1          SDEC           LL_DMA_SetSrcAddrUpdate
4221   * @param  DMAx DMAx Instance
4222   * @param  Channel This parameter can be one of the following values:
4223   *         @arg @ref LL_DMA_CHANNEL_6
4224   *         @arg @ref LL_DMA_CHANNEL_7
4225   * @param  SrcAddrUpdate This parameter can be one of the following values:
4226   *         @arg @ref LL_DMA_BURST_SRC_ADDR_INCREMENT
4227   *         @arg @ref LL_DMA_BURST_SRC_ADDR_DECREMENT
4228   * @retval None.
4229   */
LL_DMA_SetSrcAddrUpdate(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcAddrUpdate)4230 __STATIC_INLINE void LL_DMA_SetSrcAddrUpdate(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcAddrUpdate)
4231 {
4232   uint32_t dma_base_addr = (uint32_t)DMAx;
4233   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR1, DMA_CBR1_SDEC,
4234              SrcAddrUpdate);
4235 }
4236 
4237 /**
4238   * @brief Get source address update.
4239   * @note  This API is used only for 2D addressing channels.
4240   * @rmtoll CBR1          SDEC           LL_DMA_GetSrcAddrUpdate
4241   * @param  DMAx DMAx Instance
4242   * @param  Channel This parameter can be one of the following values:
4243   *         @arg @ref LL_DMA_CHANNEL_6
4244   *         @arg @ref LL_DMA_CHANNEL_7
4245   * @retval Returned value can be one of the following values:
4246   *         @arg @ref LL_DMA_BURST_SRC_ADDR_INCREMENT
4247   *         @arg @ref LL_DMA_BURST_SRC_ADDR_DECREMENT
4248   */
LL_DMA_GetSrcAddrUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)4249 __STATIC_INLINE uint32_t LL_DMA_GetSrcAddrUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
4250 {
4251   uint32_t dma_base_addr = (uint32_t)DMAx;
4252   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR1, DMA_CBR1_SDEC));
4253 }
4254 
4255 /**
4256   * @brief Set block repeat count.
4257   * @note  This API is used only for 2D addressing channels.
4258   * @rmtoll CBR1        BRC            LL_DMA_SetBlkRptCount
4259   * @param  DMAx DMAx Instance
4260   * @param  Channel This parameter can be one of the following values:
4261   *         @arg @ref LL_DMA_CHANNEL_6
4262   *         @arg @ref LL_DMA_CHANNEL_7
4263   * @param  BlkRptCount Block repeat counter
4264   *                     Value between 0 to 0x000007FF
4265   * @retval None.
4266   */
LL_DMA_SetBlkRptCount(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t BlkRptCount)4267 __STATIC_INLINE void LL_DMA_SetBlkRptCount(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t BlkRptCount)
4268 {
4269   uint32_t dma_base_addr = (uint32_t)DMAx;
4270   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR1, DMA_CBR1_BRC,
4271              (BlkRptCount << DMA_CBR1_BRC_Pos) & DMA_CBR1_BRC);
4272 }
4273 
4274 /**
4275   * @brief Get block repeat count.
4276   * @note  This API is used only for 2D addressing channels.
4277   * @rmtoll CBR1        BRC            LL_DMA_GetBlkRptCount
4278   * @param  DMAx DMAx Instance
4279   * @param  Channel This parameter can be one of the following values:
4280   *         @arg @ref LL_DMA_CHANNEL_6
4281   *         @arg @ref LL_DMA_CHANNEL_7
4282   * @retval Between 0 to 0x000007FF
4283   */
LL_DMA_GetBlkRptCount(const DMA_TypeDef * DMAx,uint32_t Channel)4284 __STATIC_INLINE uint32_t LL_DMA_GetBlkRptCount(const DMA_TypeDef *DMAx, uint32_t Channel)
4285 {
4286   uint32_t dma_base_addr = (uint32_t)DMAx;
4287   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR1,
4288                    DMA_CBR1_BRC) >> DMA_CBR1_BRC_Pos);
4289 }
4290 
4291 /**
4292   * @brief  Set block data length in bytes to transfer.
4293   * @note  This API is used for all available DMA channels.
4294   * @rmtoll CBR1        BNDT         LL_DMA_SetBlkDataLength
4295   * @param  DMAx DMAx Instance
4296   * @param  Channel This parameter can be one of the following values:
4297   *         @arg @ref LL_DMA_CHANNEL_0
4298   *         @arg @ref LL_DMA_CHANNEL_1
4299   *         @arg @ref LL_DMA_CHANNEL_2
4300   *         @arg @ref LL_DMA_CHANNEL_3
4301   *         @arg @ref LL_DMA_CHANNEL_4
4302   *         @arg @ref LL_DMA_CHANNEL_5
4303   *         @arg @ref LL_DMA_CHANNEL_6
4304   *         @arg @ref LL_DMA_CHANNEL_7
4305   * @param  BlkDataLength Between 0 to 0x0000FFFF
4306   * @retval None.
4307   */
LL_DMA_SetBlkDataLength(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t BlkDataLength)4308 __STATIC_INLINE void LL_DMA_SetBlkDataLength(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t BlkDataLength)
4309 {
4310   uint32_t dma_base_addr = (uint32_t)DMAx;
4311   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR1, DMA_CBR1_BNDT,
4312              BlkDataLength);
4313 }
4314 
4315 /**
4316   * @brief  Get block data length in bytes to transfer.
4317   * @note  This API is used for all available DMA channels.
4318   * @rmtoll CBR1        BNDT         LL_DMA_GetBlkDataLength
4319   * @param  DMAx DMAx Instance
4320   * @param  Channel This parameter can be one of the following values:
4321   *         @arg @ref LL_DMA_CHANNEL_0
4322   *         @arg @ref LL_DMA_CHANNEL_1
4323   *         @arg @ref LL_DMA_CHANNEL_2
4324   *         @arg @ref LL_DMA_CHANNEL_3
4325   *         @arg @ref LL_DMA_CHANNEL_4
4326   *         @arg @ref LL_DMA_CHANNEL_5
4327   *         @arg @ref LL_DMA_CHANNEL_6
4328   *         @arg @ref LL_DMA_CHANNEL_7
4329   * @retval Between 0 to 0x0000FFFF
4330   */
LL_DMA_GetBlkDataLength(const DMA_TypeDef * DMAx,uint32_t Channel)4331 __STATIC_INLINE uint32_t LL_DMA_GetBlkDataLength(const DMA_TypeDef *DMAx, uint32_t Channel)
4332 {
4333   uint32_t dma_base_addr = (uint32_t)DMAx;
4334   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR1, DMA_CBR1_BNDT));
4335 }
4336 
4337 /**
4338   * @brief Configure the source and destination addresses.
4339   * @note  This API is used for all available DMA channels.
4340   * @note   This API must not be called when the DMA Channel is enabled.
4341   * @rmtoll CSAR        SA          LL_DMA_ConfigAddresses\n
4342   *         CDAR        DA          LL_DMA_ConfigAddresses
4343   * @param  DMAx DMAx Instance
4344   * @param  Channel This parameter can be one of the following values:
4345   *         @arg @ref LL_DMA_CHANNEL_0
4346   *         @arg @ref LL_DMA_CHANNEL_1
4347   *         @arg @ref LL_DMA_CHANNEL_2
4348   *         @arg @ref LL_DMA_CHANNEL_3
4349   *         @arg @ref LL_DMA_CHANNEL_4
4350   *         @arg @ref LL_DMA_CHANNEL_5
4351   *         @arg @ref LL_DMA_CHANNEL_6
4352   *         @arg @ref LL_DMA_CHANNEL_7
4353   * @param  SrcAddress Between 0 to 0xFFFFFFFF
4354   * @param  DestAddress Between 0 to 0xFFFFFFFF
4355   * @retval None.
4356   */
LL_DMA_ConfigAddresses(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcAddress,uint32_t DestAddress)4357 __STATIC_INLINE void LL_DMA_ConfigAddresses(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcAddress, uint32_t
4358                                             DestAddress)
4359 {
4360   uint32_t dma_base_addr = (uint32_t)DMAx;
4361   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSAR, SrcAddress);
4362   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CDAR, DestAddress);
4363 }
4364 
4365 /**
4366   * @brief Set source address.
4367   * @note  This API is used for all available DMA channels.
4368   * @rmtoll CSAR        SA         LL_DMA_SetSrcAddress
4369   * @param  DMAx DMAx Instance
4370   * @param  Channel This parameter can be one of the following values:
4371   *         @arg @ref LL_DMA_CHANNEL_0
4372   *         @arg @ref LL_DMA_CHANNEL_1
4373   *         @arg @ref LL_DMA_CHANNEL_2
4374   *         @arg @ref LL_DMA_CHANNEL_3
4375   *         @arg @ref LL_DMA_CHANNEL_4
4376   *         @arg @ref LL_DMA_CHANNEL_5
4377   *         @arg @ref LL_DMA_CHANNEL_6
4378   *         @arg @ref LL_DMA_CHANNEL_7
4379   * @param  SrcAddress Between 0 to 0xFFFFFFFF
4380   * @retval None.
4381   */
LL_DMA_SetSrcAddress(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcAddress)4382 __STATIC_INLINE void LL_DMA_SetSrcAddress(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcAddress)
4383 {
4384   uint32_t dma_base_addr = (uint32_t)DMAx;
4385   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSAR, SrcAddress);
4386 }
4387 
4388 /**
4389   * @brief  Get source address.
4390   * @note  This API is used for all available DMA channels.
4391   * @rmtoll CSAR        SA         LL_DMA_GetSrcAddress
4392   * @param  DMAx DMAx Instance
4393   * @param  Channel This parameter can be one of the following values:
4394   *         @arg @ref LL_DMA_CHANNEL_0
4395   *         @arg @ref LL_DMA_CHANNEL_1
4396   *         @arg @ref LL_DMA_CHANNEL_2
4397   *         @arg @ref LL_DMA_CHANNEL_3
4398   *         @arg @ref LL_DMA_CHANNEL_4
4399   *         @arg @ref LL_DMA_CHANNEL_5
4400   *         @arg @ref LL_DMA_CHANNEL_6
4401   *         @arg @ref LL_DMA_CHANNEL_7
4402   * @retval Between 0 to 0xFFFFFFFF
4403   */
LL_DMA_GetSrcAddress(const DMA_TypeDef * DMAx,uint32_t Channel)4404 __STATIC_INLINE uint32_t LL_DMA_GetSrcAddress(const DMA_TypeDef *DMAx, uint32_t Channel)
4405 {
4406   uint32_t dma_base_addr = (uint32_t)DMAx;
4407   return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSAR));
4408 }
4409 
4410 /**
4411   * @brief  Set destination address.
4412   * @note  This API is used for all available DMA channels.
4413   * @rmtoll CDAR        DA         LL_DMA_SetDestAddress
4414   * @param  DMAx DMAx Instance
4415   * @param  Channel This parameter can be one of the following values:
4416   *         @arg @ref LL_DMA_CHANNEL_0
4417   *         @arg @ref LL_DMA_CHANNEL_1
4418   *         @arg @ref LL_DMA_CHANNEL_2
4419   *         @arg @ref LL_DMA_CHANNEL_3
4420   *         @arg @ref LL_DMA_CHANNEL_4
4421   *         @arg @ref LL_DMA_CHANNEL_5
4422   *         @arg @ref LL_DMA_CHANNEL_6
4423   *         @arg @ref LL_DMA_CHANNEL_7
4424   * @param  DestAddress Between 0 to 0xFFFFFFFF
4425   * @retval None.
4426   */
LL_DMA_SetDestAddress(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DestAddress)4427 __STATIC_INLINE void LL_DMA_SetDestAddress(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DestAddress)
4428 {
4429   uint32_t dma_base_addr = (uint32_t)DMAx;
4430   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CDAR, DestAddress);
4431 }
4432 
4433 /**
4434   * @brief  Get destination address.
4435   * @note  This API is used for all available DMA channels.
4436   * @rmtoll CDAR        DA         LL_DMA_GetDestAddress
4437   * @param  DMAx DMAx Instance
4438   * @param  Channel This parameter can be one of the following values:
4439   *         @arg @ref LL_DMA_CHANNEL_0
4440   *         @arg @ref LL_DMA_CHANNEL_1
4441   *         @arg @ref LL_DMA_CHANNEL_2
4442   *         @arg @ref LL_DMA_CHANNEL_3
4443   *         @arg @ref LL_DMA_CHANNEL_4
4444   *         @arg @ref LL_DMA_CHANNEL_5
4445   *         @arg @ref LL_DMA_CHANNEL_6
4446   *         @arg @ref LL_DMA_CHANNEL_7
4447   * @retval Between 0 to 0xFFFFFFFF
4448   */
LL_DMA_GetDestAddress(const DMA_TypeDef * DMAx,uint32_t Channel)4449 __STATIC_INLINE uint32_t LL_DMA_GetDestAddress(const DMA_TypeDef *DMAx, uint32_t Channel)
4450 {
4451   uint32_t dma_base_addr = (uint32_t)DMAx;
4452   return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CDAR));
4453 }
4454 
4455 /**
4456   * @brief Configure source and destination addresses offset.
4457   * @note  This API is used only for 2D addressing channels.
4458   * @note   This API must not be called when the DMA Channel is enabled.
4459   * @rmtoll CTR3        DAO          LL_DMA_ConfigAddrUpdateValue\n
4460   *         CTR3        SAO          LL_DMA_ConfigAddrUpdateValue
4461   * @param  DMAx DMAx Instance
4462   * @param  Channel This parameter can be one of the following values:
4463   *         @arg @ref LL_DMA_CHANNEL_6
4464   *         @arg @ref LL_DMA_CHANNEL_7
4465   * @param  DestAddrOffset Between 0 to 0x00001FFF
4466   * @param  SrcAddrOffset Between 0 to 0x00001FFF
4467   * @retval None.
4468   */
LL_DMA_ConfigAddrUpdateValue(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcAddrOffset,uint32_t DestAddrOffset)4469 __STATIC_INLINE void LL_DMA_ConfigAddrUpdateValue(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcAddrOffset,
4470                                                   uint32_t DestAddrOffset)
4471 {
4472   uint32_t dma_base_addr = (uint32_t)DMAx;
4473   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR3,
4474             (SrcAddrOffset  & DMA_CTR3_SAO) | ((DestAddrOffset << DMA_CTR3_DAO_Pos) & DMA_CTR3_DAO));
4475 }
4476 
4477 /**
4478   * @brief Set destination address offset.
4479   * @note  This API is used only for 2D addressing channels.
4480   * @rmtoll CTR3       DAO         LL_DMA_SetDestAddrUpdateValue
4481   * @param  DMAx DMAx Instance
4482   * @param  Channel This parameter can be one of the following values:
4483   *         @arg @ref LL_DMA_CHANNEL_6
4484   *         @arg @ref LL_DMA_CHANNEL_7
4485   * @param  DestAddrOffset Between 0 to 0x00001FFF
4486   * @retval None.
4487   */
LL_DMA_SetDestAddrUpdateValue(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DestAddrOffset)4488 __STATIC_INLINE void LL_DMA_SetDestAddrUpdateValue(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DestAddrOffset)
4489 {
4490   uint32_t dma_base_addr = (uint32_t)DMAx;
4491   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR3, DMA_CTR3_DAO,
4492              ((DestAddrOffset << DMA_CTR3_DAO_Pos) & DMA_CTR3_DAO));
4493 }
4494 
4495 /**
4496   * @brief Get destination address offset.
4497   * @note  This API is used only for 2D addressing channels.
4498   * @rmtoll CDAR        DAO         LL_DMA_GetDestAddrUpdateValue
4499   * @param  DMAx DMAx Instance
4500   * @param  Channel This parameter can be one of the following values:
4501   *         @arg @ref LL_DMA_CHANNEL_6
4502   *         @arg @ref LL_DMA_CHANNEL_7
4503   * @retval Between 0 to 0x00001FFF
4504   */
LL_DMA_GetDestAddrUpdateValue(const DMA_TypeDef * DMAx,uint32_t Channel)4505 __STATIC_INLINE uint32_t LL_DMA_GetDestAddrUpdateValue(const DMA_TypeDef *DMAx, uint32_t Channel)
4506 {
4507   uint32_t dma_base_addr = (uint32_t)DMAx;
4508   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR3,
4509                    DMA_CTR3_DAO) >> DMA_CTR3_DAO_Pos);
4510 }
4511 
4512 /**
4513   * @brief Set source address offset.
4514   * @note  This API is used only for 2D addressing channels.
4515   * @rmtoll CTR3        SAO         LL_DMA_SetSrcAddrUpdateValue
4516   * @param  DMAx DMAx Instance
4517   * @param  Channel This parameter can be one of the following values:
4518   *         @arg @ref LL_DMA_CHANNEL_6
4519   *         @arg @ref LL_DMA_CHANNEL_7
4520   * @param  SrcAddrOffset Between 0 to 0x00001FFF
4521   * @retval None.
4522   */
LL_DMA_SetSrcAddrUpdateValue(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcAddrOffset)4523 __STATIC_INLINE void LL_DMA_SetSrcAddrUpdateValue(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcAddrOffset)
4524 {
4525   uint32_t dma_base_addr = (uint32_t)DMAx;
4526   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR3, DMA_CTR3_SAO,
4527              SrcAddrOffset & DMA_CTR3_SAO);
4528 }
4529 
4530 /**
4531   * @brief Get source address offset.
4532   * @note  This API is used only for 2D addressing channels.
4533   * @rmtoll CTR3        SAO         LL_DMA_GetSrcAddrUpdateValue
4534   * @param  DMAx DMAx Instance
4535   * @param  Channel This parameter can be one of the following values:
4536   *         @arg @ref LL_DMA_CHANNEL_6
4537   *         @arg @ref LL_DMA_CHANNEL_7
4538   * @retval Between 0 to 0x00001FFF
4539   */
LL_DMA_GetSrcAddrUpdateValue(const DMA_TypeDef * DMAx,uint32_t Channel)4540 __STATIC_INLINE uint32_t LL_DMA_GetSrcAddrUpdateValue(const DMA_TypeDef *DMAx, uint32_t Channel)
4541 {
4542   uint32_t dma_base_addr = (uint32_t)DMAx;
4543   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR3, DMA_CTR3_SAO));
4544 }
4545 
4546 /**
4547   * @brief Configure the block repeated source and destination addresses offset.
4548   * @note  This API is used only for 2D addressing channels.
4549   * @note   This API must not be called when the DMA Channel is enabled.
4550   * @rmtoll CBR2        BRDAO          LL_DMA_ConfigBlkRptAddrUpdateValue\n
4551   *         CBR2        BRSAO          LL_DMA_ConfigBlkRptAddrUpdateValue
4552   * @param  DMAx DMAx Instance
4553   * @param  Channel This parameter can be one of the following values:
4554   *         @arg @ref LL_DMA_CHANNEL_6
4555   *         @arg @ref LL_DMA_CHANNEL_7
4556   * @param  BlkRptDestAddrOffset Between 0 to 0x0000FFFF
4557   * @param  BlkRptSrcAddrOffset Between 0 to 0x0000FFFF
4558   * @retval None.
4559   */
LL_DMA_ConfigBlkRptAddrUpdateValue(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t BlkRptSrcAddrOffset,uint32_t BlkRptDestAddrOffset)4560 __STATIC_INLINE void LL_DMA_ConfigBlkRptAddrUpdateValue(const DMA_TypeDef *DMAx, uint32_t Channel,
4561                                                         uint32_t BlkRptSrcAddrOffset, uint32_t BlkRptDestAddrOffset)
4562 {
4563   uint32_t dma_base_addr = (uint32_t)DMAx;
4564   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR2,
4565             ((BlkRptDestAddrOffset << DMA_CBR2_BRDAO_Pos) & DMA_CBR2_BRDAO) | (BlkRptSrcAddrOffset  & DMA_CBR2_BRSAO));
4566 }
4567 
4568 /**
4569   * @brief Set block repeated destination address offset.
4570   * @note  This API is used only for 2D addressing channels.
4571   * @rmtoll CBR2       BRDAO         LL_DMA_SetBlkRptDestAddrUpdateValue
4572   * @param  DMAx DMAx Instance
4573   * @param  Channel This parameter can be one of the following values:
4574   *         @arg @ref LL_DMA_CHANNEL_6
4575   *         @arg @ref LL_DMA_CHANNEL_7
4576   * @param  BlkRptDestAddrOffset Between 0 to 0x0000FFFF
4577   * @retval None.
4578   */
LL_DMA_SetBlkRptDestAddrUpdateValue(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t BlkRptDestAddrOffset)4579 __STATIC_INLINE void LL_DMA_SetBlkRptDestAddrUpdateValue(const DMA_TypeDef *DMAx, uint32_t Channel,
4580                                                          uint32_t BlkRptDestAddrOffset)
4581 {
4582   uint32_t dma_base_addr = (uint32_t)DMAx;
4583   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR2, DMA_CBR2_BRDAO,
4584              ((BlkRptDestAddrOffset << DMA_CBR2_BRDAO_Pos) & DMA_CBR2_BRDAO));
4585 }
4586 
4587 /**
4588   * @brief Get block repeated destination address offset.
4589   * @note  This API is used only for 2D addressing channels.
4590   * @rmtoll CBR2        BRDAO         LL_DMA_GetBlkRptDestAddrUpdateValue
4591   * @param  DMAx DMAx Instance
4592   * @param  Channel This parameter can be one of the following values:
4593   *         @arg @ref LL_DMA_CHANNEL_6
4594   *         @arg @ref LL_DMA_CHANNEL_7
4595   * @retval Between 0 to 0x0000FFFF.
4596   */
LL_DMA_GetBlkRptDestAddrUpdateValue(const DMA_TypeDef * DMAx,uint32_t Channel)4597 __STATIC_INLINE uint32_t LL_DMA_GetBlkRptDestAddrUpdateValue(const DMA_TypeDef *DMAx, uint32_t Channel)
4598 {
4599   uint32_t dma_base_addr = (uint32_t)DMAx;
4600   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR2,
4601                    DMA_CBR2_BRDAO) >> DMA_CBR2_BRDAO_Pos);
4602 }
4603 
4604 /**
4605   * @brief Set block repeated source address offset.
4606   * @note  This API is used only for 2D addressing channels.
4607   * @rmtoll CBR2        BRSAO         LL_DMA_SetBlkRptSrcAddrUpdateValue
4608   * @param  DMAx DMAx Instance
4609   * @param  Channel This parameter can be one of the following values:
4610   *         @arg @ref LL_DMA_CHANNEL_6
4611   *         @arg @ref LL_DMA_CHANNEL_7
4612   * @param  BlkRptSrcAddrOffset Between 0 to 0x0000FFFF
4613   * @retval None.
4614   */
LL_DMA_SetBlkRptSrcAddrUpdateValue(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t BlkRptSrcAddrOffset)4615 __STATIC_INLINE void LL_DMA_SetBlkRptSrcAddrUpdateValue(const DMA_TypeDef *DMAx, uint32_t Channel,
4616                                                         uint32_t BlkRptSrcAddrOffset)
4617 {
4618   uint32_t dma_base_addr = (uint32_t)DMAx;
4619   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR2, DMA_CBR2_BRSAO,
4620              BlkRptSrcAddrOffset);
4621 }
4622 
4623 /**
4624   * @brief Get block repeated source address offset.
4625   * @note  This API is used only for 2D addressing channels.
4626   * @rmtoll CBR2        BRSAO         LL_DMA_GetBlkRptSrcAddrUpdateValue
4627   * @param  DMAx DMAx Instance
4628   * @param  Channel This parameter can be one of the following values:
4629   *         @arg @ref LL_DMA_CHANNEL_6
4630   *         @arg @ref LL_DMA_CHANNEL_7
4631   * @retval Between 0 to 0x0000FFFF
4632   */
LL_DMA_GetBlkRptSrcAddrUpdateValue(const DMA_TypeDef * DMAx,uint32_t Channel)4633 __STATIC_INLINE uint32_t LL_DMA_GetBlkRptSrcAddrUpdateValue(const DMA_TypeDef *DMAx, uint32_t Channel)
4634 {
4635   uint32_t dma_base_addr = (uint32_t)DMAx;
4636   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR2, DMA_CBR2_BRSAO));
4637 }
4638 
4639 /**
4640   * @brief Configure registers update and node address offset during the link transfer.
4641   * @note  This API is used for all available DMA channels.
4642   *        For linear addressing channels, UT3 and UB2 fields are discarded.
4643   * @rmtoll CLLR          UT1            LL_DMA_ConfigLinkUpdate\n
4644   * @rmtoll CLLR          UT2            LL_DMA_ConfigLinkUpdate\n
4645   * @rmtoll CLLR          UB1            LL_DMA_ConfigLinkUpdate\n
4646   * @rmtoll CLLR          USA            LL_DMA_ConfigLinkUpdate\n
4647   * @rmtoll CLLR          UDA            LL_DMA_ConfigLinkUpdate\n
4648   * @rmtoll CLLR          UT3            LL_DMA_ConfigLinkUpdate\n
4649   * @rmtoll CLLR          UB2            LL_DMA_ConfigLinkUpdate\n
4650   * @rmtoll CLLR          ULL            LL_DMA_ConfigLinkUpdate
4651   * @param  DMAx DMAx Instance
4652   * @param  Channel This parameter can be one of the following values:
4653   *         @arg @ref LL_DMA_CHANNEL_0
4654   *         @arg @ref LL_DMA_CHANNEL_1
4655   *         @arg @ref LL_DMA_CHANNEL_2
4656   *         @arg @ref LL_DMA_CHANNEL_3
4657   *         @arg @ref LL_DMA_CHANNEL_4
4658   *         @arg @ref LL_DMA_CHANNEL_5
4659   *         @arg @ref LL_DMA_CHANNEL_6
4660   *         @arg @ref LL_DMA_CHANNEL_7
4661   * @param  RegistersUpdate This parameter must be a combination of all the following values:
4662   *         @arg @ref LL_DMA_UPDATE_CTR1
4663   *         @arg @ref LL_DMA_UPDATE_CTR2
4664   *         @arg @ref LL_DMA_UPDATE_CBR1
4665   *         @arg @ref LL_DMA_UPDATE_CSAR
4666   *         @arg @ref LL_DMA_UPDATE_CDAR
4667   *         @arg @ref LL_DMA_UPDATE_CTR3  (This value is allowed only for 2D addressing channels)
4668   *         @arg @ref LL_DMA_UPDATE_CBR2  (This value is allowed only for 2D addressing channels)
4669   *         @arg @ref LL_DMA_UPDATE_CLLR
4670   * @param  LinkedListAddrOffset Between 0 to 0x0000FFFC by increment of 4 Bytes.
4671   * @retval None.
4672   */
LL_DMA_ConfigLinkUpdate(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t RegistersUpdate,uint32_t LinkedListAddrOffset)4673 __STATIC_INLINE void LL_DMA_ConfigLinkUpdate(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t RegistersUpdate,
4674                                              uint32_t LinkedListAddrOffset)
4675 {
4676   uint32_t dma_base_addr = (uint32_t)DMAx;
4677   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR,
4678              (DMA_CLLR_UT1 | DMA_CLLR_UT2 | DMA_CLLR_UB1 | DMA_CLLR_USA | DMA_CLLR_UDA | DMA_CLLR_UT3 | \
4679               DMA_CLLR_UB2 | DMA_CLLR_ULL | DMA_CLLR_LA), (RegistersUpdate | (LinkedListAddrOffset & DMA_CLLR_LA)));
4680 }
4681 
4682 /**
4683   * @brief Enable CTR1 update during the link transfer.
4684   * @note  This API is used for all available DMA channels.
4685   * @rmtoll CLLR          UT1            LL_DMA_EnableCTR1Update
4686   * @param  DMAx DMAx Instance
4687   * @param  Channel This parameter can be one of the following values:
4688   *         @arg @ref LL_DMA_CHANNEL_0
4689   *         @arg @ref LL_DMA_CHANNEL_1
4690   *         @arg @ref LL_DMA_CHANNEL_2
4691   *         @arg @ref LL_DMA_CHANNEL_3
4692   *         @arg @ref LL_DMA_CHANNEL_4
4693   *         @arg @ref LL_DMA_CHANNEL_5
4694   *         @arg @ref LL_DMA_CHANNEL_6
4695   *         @arg @ref LL_DMA_CHANNEL_7
4696   * @retval None.
4697   */
LL_DMA_EnableCTR1Update(const DMA_TypeDef * DMAx,uint32_t Channel)4698 __STATIC_INLINE void LL_DMA_EnableCTR1Update(const DMA_TypeDef *DMAx, uint32_t Channel)
4699 {
4700   uint32_t dma_base_addr = (uint32_t)DMAx;
4701   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UT1);
4702 }
4703 
4704 /**
4705   * @brief Disable CTR1 update during the link transfer.
4706   * @note  This API is used for all available DMA channels.
4707   * @rmtoll CLLR          UT1            LL_DMA_DisableCTR1Update
4708   * @param  DMAx DMAx Instance
4709   * @param  Channel This parameter can be one of the following values:
4710   *         @arg @ref LL_DMA_CHANNEL_0
4711   *         @arg @ref LL_DMA_CHANNEL_1
4712   *         @arg @ref LL_DMA_CHANNEL_2
4713   *         @arg @ref LL_DMA_CHANNEL_3
4714   *         @arg @ref LL_DMA_CHANNEL_4
4715   *         @arg @ref LL_DMA_CHANNEL_5
4716   *         @arg @ref LL_DMA_CHANNEL_6
4717   *         @arg @ref LL_DMA_CHANNEL_7
4718   * @retval None.
4719   */
LL_DMA_DisableCTR1Update(const DMA_TypeDef * DMAx,uint32_t Channel)4720 __STATIC_INLINE void LL_DMA_DisableCTR1Update(const DMA_TypeDef *DMAx, uint32_t Channel)
4721 {
4722   uint32_t dma_base_addr = (uint32_t)DMAx;
4723   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UT1);
4724 }
4725 
4726 /**
4727   * @brief Check if CTR1 update during the link transfer is enabled.
4728   * @note  This API is used for all available DMA channels.
4729   * @rmtoll CLLR          UT1            LL_DMA_IsEnabledCTR1Update
4730   * @param  DMAx DMAx Instance
4731   * @param  Channel This parameter can be one of the following values:
4732   *         @arg @ref LL_DMA_CHANNEL_0
4733   *         @arg @ref LL_DMA_CHANNEL_1
4734   *         @arg @ref LL_DMA_CHANNEL_2
4735   *         @arg @ref LL_DMA_CHANNEL_3
4736   *         @arg @ref LL_DMA_CHANNEL_4
4737   *         @arg @ref LL_DMA_CHANNEL_5
4738   *         @arg @ref LL_DMA_CHANNEL_6
4739   *         @arg @ref LL_DMA_CHANNEL_7
4740   * @retval State of bit (1 or 0).
4741   */
LL_DMA_IsEnabledCTR1Update(const DMA_TypeDef * DMAx,uint32_t Channel)4742 __STATIC_INLINE uint32_t LL_DMA_IsEnabledCTR1Update(const DMA_TypeDef *DMAx, uint32_t Channel)
4743 {
4744   uint32_t dma_base_addr = (uint32_t)DMAx;
4745   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UT1)
4746            == (DMA_CLLR_UT1)) ? 1UL : 0UL);
4747 }
4748 
4749 /**
4750   * @brief Enable CTR2 update during the link transfer.
4751   * @note  This API is used for all available DMA channels.
4752   * @rmtoll CLLR          UT2            LL_DMA_EnableCTR2Update
4753   * @param  DMAx DMAx Instance
4754   * @param  Channel This parameter can be one of the following values:
4755   *         @arg @ref LL_DMA_CHANNEL_0
4756   *         @arg @ref LL_DMA_CHANNEL_1
4757   *         @arg @ref LL_DMA_CHANNEL_2
4758   *         @arg @ref LL_DMA_CHANNEL_3
4759   *         @arg @ref LL_DMA_CHANNEL_4
4760   *         @arg @ref LL_DMA_CHANNEL_5
4761   *         @arg @ref LL_DMA_CHANNEL_6
4762   *         @arg @ref LL_DMA_CHANNEL_7
4763   * @retval None.
4764   */
LL_DMA_EnableCTR2Update(const DMA_TypeDef * DMAx,uint32_t Channel)4765 __STATIC_INLINE void LL_DMA_EnableCTR2Update(const DMA_TypeDef *DMAx, uint32_t Channel)
4766 {
4767   uint32_t dma_base_addr = (uint32_t)DMAx;
4768   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UT2);
4769 }
4770 
4771 /**
4772   * @brief Disable CTR2 update during the link transfer.
4773   * @note  This API is used for all available DMA channels.
4774   * @rmtoll CLLR          UT2            LL_DMA_DisableCTR2Update
4775   * @param  DMAx DMAx Instance
4776   * @param  Channel This parameter can be one of the following values:
4777   *         @arg @ref LL_DMA_CHANNEL_0
4778   *         @arg @ref LL_DMA_CHANNEL_1
4779   *         @arg @ref LL_DMA_CHANNEL_2
4780   *         @arg @ref LL_DMA_CHANNEL_3
4781   *         @arg @ref LL_DMA_CHANNEL_4
4782   *         @arg @ref LL_DMA_CHANNEL_5
4783   *         @arg @ref LL_DMA_CHANNEL_6
4784   *         @arg @ref LL_DMA_CHANNEL_7
4785   * @retval None.
4786   */
LL_DMA_DisableCTR2Update(const DMA_TypeDef * DMAx,uint32_t Channel)4787 __STATIC_INLINE void LL_DMA_DisableCTR2Update(const DMA_TypeDef *DMAx, uint32_t Channel)
4788 {
4789   uint32_t dma_base_addr = (uint32_t)DMAx;
4790   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UT2);
4791 }
4792 
4793 /**
4794   * @brief Check if CTR2 update during the link transfer is enabled.
4795   * @note  This API is used for all available DMA channels.
4796   * @rmtoll CLLR          UT2            LL_DMA_IsEnabledCTR2Update
4797   * @param  DMAx DMAx Instance
4798   * @param  Channel This parameter can be one of the following values:
4799   *         @arg @ref LL_DMA_CHANNEL_0
4800   *         @arg @ref LL_DMA_CHANNEL_1
4801   *         @arg @ref LL_DMA_CHANNEL_2
4802   *         @arg @ref LL_DMA_CHANNEL_3
4803   *         @arg @ref LL_DMA_CHANNEL_4
4804   *         @arg @ref LL_DMA_CHANNEL_5
4805   *         @arg @ref LL_DMA_CHANNEL_6
4806   *         @arg @ref LL_DMA_CHANNEL_7
4807   * @retval State of bit (1 or 0).
4808   */
LL_DMA_IsEnabledCTR2Update(const DMA_TypeDef * DMAx,uint32_t Channel)4809 __STATIC_INLINE uint32_t LL_DMA_IsEnabledCTR2Update(const DMA_TypeDef *DMAx, uint32_t Channel)
4810 {
4811   uint32_t dma_base_addr = (uint32_t)DMAx;
4812   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UT2)
4813            == (DMA_CLLR_UT2)) ? 1UL : 0UL);
4814 }
4815 
4816 /**
4817   * @brief Enable CBR1 update during the link transfer.
4818   * @note  This API is used for all available DMA channels.
4819   * @rmtoll CLLR          UB1            LL_DMA_EnableCBR1Update
4820   * @param  DMAx DMAx Instance
4821   * @param  Channel This parameter can be one of the following values:
4822   *         @arg @ref LL_DMA_CHANNEL_0
4823   *         @arg @ref LL_DMA_CHANNEL_1
4824   *         @arg @ref LL_DMA_CHANNEL_2
4825   *         @arg @ref LL_DMA_CHANNEL_3
4826   *         @arg @ref LL_DMA_CHANNEL_4
4827   *         @arg @ref LL_DMA_CHANNEL_5
4828   *         @arg @ref LL_DMA_CHANNEL_6
4829   *         @arg @ref LL_DMA_CHANNEL_7
4830   * @retval None.
4831   */
LL_DMA_EnableCBR1Update(const DMA_TypeDef * DMAx,uint32_t Channel)4832 __STATIC_INLINE void LL_DMA_EnableCBR1Update(const DMA_TypeDef *DMAx, uint32_t Channel)
4833 {
4834   uint32_t dma_base_addr = (uint32_t)DMAx;
4835   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UB1);
4836 }
4837 
4838 /**
4839   * @brief Disable CBR1 update during the link transfer.
4840   * @note  This API is used for all available DMA channels.
4841   * @rmtoll CLLR          UB1            LL_DMA_DisableCBR1Update
4842   * @param  DMAx DMAx Instance
4843   * @param  Channel This parameter can be one of the following values:
4844   *         @arg @ref LL_DMA_CHANNEL_0
4845   *         @arg @ref LL_DMA_CHANNEL_1
4846   *         @arg @ref LL_DMA_CHANNEL_2
4847   *         @arg @ref LL_DMA_CHANNEL_3
4848   *         @arg @ref LL_DMA_CHANNEL_4
4849   *         @arg @ref LL_DMA_CHANNEL_5
4850   *         @arg @ref LL_DMA_CHANNEL_6
4851   *         @arg @ref LL_DMA_CHANNEL_7
4852   * @retval None.
4853   */
LL_DMA_DisableCBR1Update(const DMA_TypeDef * DMAx,uint32_t Channel)4854 __STATIC_INLINE void LL_DMA_DisableCBR1Update(const DMA_TypeDef *DMAx, uint32_t Channel)
4855 {
4856   uint32_t dma_base_addr = (uint32_t)DMAx;
4857   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UB1);
4858 }
4859 
4860 /**
4861   * @brief Check if CBR1 update during the link transfer is enabled.
4862   * @note  This API is used for all available DMA channels.
4863   * @rmtoll CLLR          UB1            LL_DMA_IsEnabledCBR1Update
4864   * @param  DMAx DMAx Instance
4865   * @param  Channel This parameter can be one of the following values:
4866   *         @arg @ref LL_DMA_CHANNEL_0
4867   *         @arg @ref LL_DMA_CHANNEL_1
4868   *         @arg @ref LL_DMA_CHANNEL_2
4869   *         @arg @ref LL_DMA_CHANNEL_3
4870   *         @arg @ref LL_DMA_CHANNEL_4
4871   *         @arg @ref LL_DMA_CHANNEL_5
4872   *         @arg @ref LL_DMA_CHANNEL_6
4873   *         @arg @ref LL_DMA_CHANNEL_7
4874   * @retval State of bit (1 or 0).
4875   */
LL_DMA_IsEnabledCBR1Update(const DMA_TypeDef * DMAx,uint32_t Channel)4876 __STATIC_INLINE uint32_t LL_DMA_IsEnabledCBR1Update(const DMA_TypeDef *DMAx, uint32_t Channel)
4877 {
4878   uint32_t dma_base_addr = (uint32_t)DMAx;
4879   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UB1)
4880            == (DMA_CLLR_UB1)) ? 1UL : 0UL);
4881 }
4882 
4883 /**
4884   * @brief Enable CSAR update during the link transfer.
4885   * @note  This API is used for all available DMA channels.
4886   * @rmtoll CLLR          USA            LL_DMA_EnableCSARUpdate
4887   * @param  DMAx DMAx Instance
4888   * @param  Channel This parameter can be one of the following values:
4889   *         @arg @ref LL_DMA_CHANNEL_0
4890   *         @arg @ref LL_DMA_CHANNEL_1
4891   *         @arg @ref LL_DMA_CHANNEL_2
4892   *         @arg @ref LL_DMA_CHANNEL_3
4893   *         @arg @ref LL_DMA_CHANNEL_4
4894   *         @arg @ref LL_DMA_CHANNEL_5
4895   *         @arg @ref LL_DMA_CHANNEL_6
4896   *         @arg @ref LL_DMA_CHANNEL_7
4897   * @retval None.
4898   */
LL_DMA_EnableCSARUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)4899 __STATIC_INLINE void LL_DMA_EnableCSARUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
4900 {
4901   uint32_t dma_base_addr = (uint32_t)DMAx;
4902   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_USA);
4903 }
4904 
4905 /**
4906   * @brief Disable CSAR update during the link transfer.
4907   * @note  This API is used for all available DMA channels.
4908   * @rmtoll CLLR          USA            LL_DMA_DisableCSARUpdate
4909   * @param  DMAx DMAx Instance
4910   * @param  Channel This parameter can be one of the following values:
4911   *         @arg @ref LL_DMA_CHANNEL_0
4912   *         @arg @ref LL_DMA_CHANNEL_1
4913   *         @arg @ref LL_DMA_CHANNEL_2
4914   *         @arg @ref LL_DMA_CHANNEL_3
4915   *         @arg @ref LL_DMA_CHANNEL_4
4916   *         @arg @ref LL_DMA_CHANNEL_5
4917   *         @arg @ref LL_DMA_CHANNEL_6
4918   *         @arg @ref LL_DMA_CHANNEL_7
4919   * @retval None.
4920   */
LL_DMA_DisableCSARUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)4921 __STATIC_INLINE void LL_DMA_DisableCSARUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
4922 {
4923   uint32_t dma_base_addr = (uint32_t)DMAx;
4924   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_USA);
4925 }
4926 
4927 /**
4928   * @brief Check if CSAR update during the link transfer is enabled.
4929   * @note  This API is used for all available DMA channels.
4930   * @rmtoll CLLR          USA            LL_DMA_IsEnabledCSARUpdate
4931   * @param  DMAx DMAx Instance
4932   * @param  Channel This parameter can be one of the following values:
4933   *         @arg @ref LL_DMA_CHANNEL_0
4934   *         @arg @ref LL_DMA_CHANNEL_1
4935   *         @arg @ref LL_DMA_CHANNEL_2
4936   *         @arg @ref LL_DMA_CHANNEL_3
4937   *         @arg @ref LL_DMA_CHANNEL_4
4938   *         @arg @ref LL_DMA_CHANNEL_5
4939   *         @arg @ref LL_DMA_CHANNEL_6
4940   *         @arg @ref LL_DMA_CHANNEL_7
4941   * @retval State of bit (1 or 0).
4942   */
LL_DMA_IsEnabledCSARUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)4943 __STATIC_INLINE uint32_t LL_DMA_IsEnabledCSARUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
4944 {
4945   uint32_t dma_base_addr = (uint32_t)DMAx;
4946   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_USA)
4947            == (DMA_CLLR_USA)) ? 1UL : 0UL);
4948 }
4949 
4950 /**
4951   * @brief Enable CDAR update during the link transfer.
4952   * @note  This API is used for all available DMA channels.
4953   * @rmtoll CLLR          UDA            LL_DMA_EnableCDARUpdate
4954   * @param  DMAx DMAx Instance
4955   * @param  Channel This parameter can be one of the following values:
4956   *         @arg @ref LL_DMA_CHANNEL_0
4957   *         @arg @ref LL_DMA_CHANNEL_1
4958   *         @arg @ref LL_DMA_CHANNEL_2
4959   *         @arg @ref LL_DMA_CHANNEL_3
4960   *         @arg @ref LL_DMA_CHANNEL_4
4961   *         @arg @ref LL_DMA_CHANNEL_5
4962   *         @arg @ref LL_DMA_CHANNEL_6
4963   *         @arg @ref LL_DMA_CHANNEL_7
4964   * @retval None.
4965   */
LL_DMA_EnableCDARUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)4966 __STATIC_INLINE void LL_DMA_EnableCDARUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
4967 {
4968   uint32_t dma_base_addr = (uint32_t)DMAx;
4969   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UDA);
4970 }
4971 
4972 /**
4973   * @brief Disable CDAR update during the link transfer.
4974   * @note  This API is used for all available DMA channels.
4975   * @rmtoll CLLR          UDA            LL_DMA_DisableCDARUpdate
4976   * @param  DMAx DMAx Instance
4977   * @param  Channel This parameter can be one of the following values:
4978   *         @arg @ref LL_DMA_CHANNEL_0
4979   *         @arg @ref LL_DMA_CHANNEL_1
4980   *         @arg @ref LL_DMA_CHANNEL_2
4981   *         @arg @ref LL_DMA_CHANNEL_3
4982   *         @arg @ref LL_DMA_CHANNEL_4
4983   *         @arg @ref LL_DMA_CHANNEL_5
4984   *         @arg @ref LL_DMA_CHANNEL_6
4985   *         @arg @ref LL_DMA_CHANNEL_7
4986   * @retval None.
4987   */
LL_DMA_DisableCDARUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)4988 __STATIC_INLINE void LL_DMA_DisableCDARUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
4989 {
4990   uint32_t dma_base_addr = (uint32_t)DMAx;
4991   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UDA);
4992 }
4993 
4994 /**
4995   * @brief Check if CDAR update during the link transfer is enabled.
4996   * @note  This API is used for all available DMA channels.
4997   * @rmtoll CLLR          UDA            LL_DMA_IsEnabledCDARUpdate
4998   * @param  DMAx DMAx Instance
4999   * @param  Channel This parameter can be one of the following values:
5000   *         @arg @ref LL_DMA_CHANNEL_0
5001   *         @arg @ref LL_DMA_CHANNEL_1
5002   *         @arg @ref LL_DMA_CHANNEL_2
5003   *         @arg @ref LL_DMA_CHANNEL_3
5004   *         @arg @ref LL_DMA_CHANNEL_4
5005   *         @arg @ref LL_DMA_CHANNEL_5
5006   *         @arg @ref LL_DMA_CHANNEL_6
5007   *         @arg @ref LL_DMA_CHANNEL_7
5008   * @retval State of bit (1 or 0).
5009   */
LL_DMA_IsEnabledCDARUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)5010 __STATIC_INLINE uint32_t LL_DMA_IsEnabledCDARUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
5011 {
5012   uint32_t dma_base_addr = (uint32_t)DMAx;
5013   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UDA)
5014            == (DMA_CLLR_UDA)) ? 1UL : 0UL);
5015 }
5016 
5017 /**
5018   * @brief Enable CTR3 update during the link transfer.
5019   * @note  This API is used only for 2D addressing channels.
5020   * @rmtoll CLLR          UT3            LL_DMA_EnableCTR3Update
5021   * @param  DMAx DMAx Instance
5022   * @param  Channel This parameter can be one of the following values:
5023   *         @arg @ref LL_DMA_CHANNEL_6
5024   *         @arg @ref LL_DMA_CHANNEL_7
5025   * @retval None.
5026   */
LL_DMA_EnableCTR3Update(const DMA_TypeDef * DMAx,uint32_t Channel)5027 __STATIC_INLINE void LL_DMA_EnableCTR3Update(const DMA_TypeDef *DMAx, uint32_t Channel)
5028 {
5029   uint32_t dma_base_addr = (uint32_t)DMAx;
5030   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UT3);
5031 }
5032 
5033 /**
5034   * @brief Disable CTR3 update during the link transfer.
5035   * @note  This API is used only for 2D addressing channels.
5036   * @rmtoll CLLR          UT3            LL_DMA_DisableCTR3Update
5037   * @param  DMAx DMAx Instance
5038   * @param  Channel This parameter can be one of the following values:
5039   *         @arg @ref LL_DMA_CHANNEL_6
5040   *         @arg @ref LL_DMA_CHANNEL_7
5041   * @retval None.
5042   */
LL_DMA_DisableCTR3Update(const DMA_TypeDef * DMAx,uint32_t Channel)5043 __STATIC_INLINE void LL_DMA_DisableCTR3Update(const DMA_TypeDef *DMAx, uint32_t Channel)
5044 {
5045   uint32_t dma_base_addr = (uint32_t)DMAx;
5046   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UT3);
5047 }
5048 
5049 /**
5050   * @brief Check if CTR3 update during the link transfer is enabled.
5051   * @note  This API is used only for 2D addressing channels.
5052   * @rmtoll CLLR          UT3            LL_DMA_IsEnabledCTR3Update
5053   * @param  DMAx DMAx Instance
5054   * @param  Channel This parameter can be one of the following values:
5055   *         @arg @ref LL_DMA_CHANNEL_6
5056   *         @arg @ref LL_DMA_CHANNEL_7
5057   * @retval State of bit (1 or 0).
5058   */
LL_DMA_IsEnabledCTR3Update(const DMA_TypeDef * DMAx,uint32_t Channel)5059 __STATIC_INLINE uint32_t LL_DMA_IsEnabledCTR3Update(const DMA_TypeDef *DMAx, uint32_t Channel)
5060 {
5061   uint32_t dma_base_addr = (uint32_t)DMAx;
5062   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UT3)
5063            == (DMA_CLLR_UT3)) ? 1UL : 0UL);
5064 }
5065 
5066 /**
5067   * @brief Enable CBR2 update during the link transfer.
5068   * @note  This API is used only for 2D addressing channels.
5069   * @rmtoll CLLR          UB2            LL_DMA_EnableCBR2Update
5070   * @param  DMAx DMAx Instance
5071   * @param  Channel This parameter can be one of the following values:
5072   *         @arg @ref LL_DMA_CHANNEL_6
5073   *         @arg @ref LL_DMA_CHANNEL_7
5074   * @retval None.
5075   */
LL_DMA_EnableCBR2Update(const DMA_TypeDef * DMAx,uint32_t Channel)5076 __STATIC_INLINE void LL_DMA_EnableCBR2Update(const DMA_TypeDef *DMAx, uint32_t Channel)
5077 {
5078   uint32_t dma_base_addr = (uint32_t)DMAx;
5079   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UB2);
5080 }
5081 
5082 /**
5083   * @brief Disable CBR2 update during the link transfer.
5084   * @note  This API is used only for 2D addressing channels.
5085   * @rmtoll CLLR          UB2            LL_DMA_DisableCBR2Update
5086   * @param  DMAx DMAx Instance
5087   * @param  Channel This parameter can be one of the following values:
5088   *         @arg @ref LL_DMA_CHANNEL_6
5089   *         @arg @ref LL_DMA_CHANNEL_7
5090   * @retval None.
5091   */
LL_DMA_DisableCBR2Update(const DMA_TypeDef * DMAx,uint32_t Channel)5092 __STATIC_INLINE void LL_DMA_DisableCBR2Update(const DMA_TypeDef *DMAx, uint32_t Channel)
5093 {
5094   uint32_t dma_base_addr = (uint32_t)DMAx;
5095   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UB2);
5096 }
5097 
5098 /**
5099   * @brief Check if CBR2 update during the link transfer is enabled.
5100   * @note  This API is used only for 2D addressing channels.
5101   * @rmtoll CLLR          UB2            LL_DMA_IsEnabledCBR2Update
5102   * @param  DMAx DMAx Instance
5103   * @param  Channel This parameter can be one of the following values:
5104   *         @arg @ref LL_DMA_CHANNEL_6
5105   *         @arg @ref LL_DMA_CHANNEL_7
5106   * @retval State of bit (1 or 0).
5107   */
LL_DMA_IsEnabledCBR2Update(const DMA_TypeDef * DMAx,uint32_t Channel)5108 __STATIC_INLINE uint32_t LL_DMA_IsEnabledCBR2Update(const DMA_TypeDef *DMAx, uint32_t Channel)
5109 {
5110   uint32_t dma_base_addr = (uint32_t)DMAx;
5111   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UB2)
5112            == (DMA_CLLR_UB2)) ? 1UL : 0UL);
5113 }
5114 
5115 /**
5116   * @brief Enable CLLR update during the link transfer.
5117   * @note  This API is used for all available DMA channels.
5118   * @rmtoll CLLR          ULL            LL_DMA_EnableCLLRUpdate
5119   * @param  DMAx DMAx Instance
5120   * @param  Channel This parameter can be one of the following values:
5121   *         @arg @ref LL_DMA_CHANNEL_0
5122   *         @arg @ref LL_DMA_CHANNEL_1
5123   *         @arg @ref LL_DMA_CHANNEL_2
5124   *         @arg @ref LL_DMA_CHANNEL_3
5125   *         @arg @ref LL_DMA_CHANNEL_4
5126   *         @arg @ref LL_DMA_CHANNEL_5
5127   *         @arg @ref LL_DMA_CHANNEL_6
5128   *         @arg @ref LL_DMA_CHANNEL_7
5129   * @retval None.
5130   */
LL_DMA_EnableCLLRUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)5131 __STATIC_INLINE void LL_DMA_EnableCLLRUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
5132 {
5133   uint32_t dma_base_addr = (uint32_t)DMAx;
5134   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_ULL);
5135 }
5136 
5137 /**
5138   * @brief Disable CLLR update during the link transfer.
5139   * @note  This API is used for all available DMA channels.
5140   * @rmtoll CLLR          ULL            LL_DMA_DisableCLLRUpdate
5141   * @param  DMAx DMAx Instance
5142   * @param  Channel This parameter can be one of the following values:
5143   *         @arg @ref LL_DMA_CHANNEL_0
5144   *         @arg @ref LL_DMA_CHANNEL_1
5145   *         @arg @ref LL_DMA_CHANNEL_2
5146   *         @arg @ref LL_DMA_CHANNEL_3
5147   *         @arg @ref LL_DMA_CHANNEL_4
5148   *         @arg @ref LL_DMA_CHANNEL_5
5149   *         @arg @ref LL_DMA_CHANNEL_6
5150   *         @arg @ref LL_DMA_CHANNEL_7
5151   * @retval None.
5152   */
LL_DMA_DisableCLLRUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)5153 __STATIC_INLINE void LL_DMA_DisableCLLRUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
5154 {
5155   uint32_t dma_base_addr = (uint32_t)DMAx;
5156   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_ULL);
5157 }
5158 
5159 /**
5160   * @brief Check if CLLR update during the link transfer is enabled.
5161   * @note  This API is used for all available DMA channels.
5162   * @rmtoll CLLR          ULL            LL_DMA_IsEnabledCLLRUpdate
5163   * @param  DMAx DMAx Instance
5164   * @param  Channel This parameter can be one of the following values:
5165   *         @arg @ref LL_DMA_CHANNEL_0
5166   *         @arg @ref LL_DMA_CHANNEL_1
5167   *         @arg @ref LL_DMA_CHANNEL_2
5168   *         @arg @ref LL_DMA_CHANNEL_3
5169   *         @arg @ref LL_DMA_CHANNEL_4
5170   *         @arg @ref LL_DMA_CHANNEL_5
5171   *         @arg @ref LL_DMA_CHANNEL_6
5172   *         @arg @ref LL_DMA_CHANNEL_7
5173   * @retval State of bit (1 or 0).
5174   */
LL_DMA_IsEnabledCLLRUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)5175 __STATIC_INLINE uint32_t LL_DMA_IsEnabledCLLRUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
5176 {
5177   uint32_t dma_base_addr = (uint32_t)DMAx;
5178   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_ULL)
5179            == (DMA_CLLR_ULL)) ? 1UL : 0UL);
5180 }
5181 
5182 /**
5183   * @brief Set linked list address offset.
5184   * @note  This API is used for all available DMA channels.
5185   * @rmtoll CLLR          LA           LL_DMA_SetLinkedListAddrOffset
5186   * @param  DMAx DMAx Instance
5187   * @param  Channel This parameter can be one of the following values:
5188   *         @arg @ref LL_DMA_CHANNEL_0
5189   *         @arg @ref LL_DMA_CHANNEL_1
5190   *         @arg @ref LL_DMA_CHANNEL_2
5191   *         @arg @ref LL_DMA_CHANNEL_3
5192   *         @arg @ref LL_DMA_CHANNEL_4
5193   *         @arg @ref LL_DMA_CHANNEL_5
5194   *         @arg @ref LL_DMA_CHANNEL_6
5195   *         @arg @ref LL_DMA_CHANNEL_7
5196   * @param  LinkedListAddrOffset Between 0 to 0x0000FFFC by increment of 4 Bytes.
5197   * @retval None.
5198   */
LL_DMA_SetLinkedListAddrOffset(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t LinkedListAddrOffset)5199 __STATIC_INLINE void LL_DMA_SetLinkedListAddrOffset(const DMA_TypeDef *DMAx, uint32_t Channel,
5200                                                     uint32_t  LinkedListAddrOffset)
5201 {
5202   uint32_t dma_base_addr = (uint32_t)DMAx;
5203   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_LA,
5204              (LinkedListAddrOffset & DMA_CLLR_LA));
5205 }
5206 
5207 /**
5208   * @brief Get linked list address offset.
5209   * @note  This API is used for all available DMA channels.
5210   * @rmtoll CLLR          LA           LL_DMA_GetLinkedListAddrOffset
5211   * @param  DMAx DMAx Instance
5212   * @param  Channel This parameter can be one of the following values:
5213   *         @arg @ref LL_DMA_CHANNEL_0
5214   *         @arg @ref LL_DMA_CHANNEL_1
5215   *         @arg @ref LL_DMA_CHANNEL_2
5216   *         @arg @ref LL_DMA_CHANNEL_3
5217   *         @arg @ref LL_DMA_CHANNEL_4
5218   *         @arg @ref LL_DMA_CHANNEL_5
5219   *         @arg @ref LL_DMA_CHANNEL_6
5220   *         @arg @ref LL_DMA_CHANNEL_7
5221   * @retval Between 0 to 0x0000FFFC.
5222   */
LL_DMA_GetLinkedListAddrOffset(const DMA_TypeDef * DMAx,uint32_t Channel)5223 __STATIC_INLINE uint32_t LL_DMA_GetLinkedListAddrOffset(const DMA_TypeDef *DMAx, uint32_t Channel)
5224 {
5225   uint32_t dma_base_addr = (uint32_t)DMAx;
5226   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR,
5227                    DMA_CLLR_LA) >> DMA_CLLR_LA_Pos);
5228 }
5229 
5230 /**
5231   * @brief Get FIFO level.
5232   * @rmtoll CSR          FIFOL           LL_DMA_GetFIFOLevel
5233   * @param  DMAx DMAx Instance
5234   * @param  Channel This parameter can be one of the following values:
5235   *         @arg @ref LL_DMA_CHANNEL_0
5236   *         @arg @ref LL_DMA_CHANNEL_1
5237   *         @arg @ref LL_DMA_CHANNEL_2
5238   *         @arg @ref LL_DMA_CHANNEL_3
5239   *         @arg @ref LL_DMA_CHANNEL_4
5240   *         @arg @ref LL_DMA_CHANNEL_5
5241   *         @arg @ref LL_DMA_CHANNEL_6
5242   *         @arg @ref LL_DMA_CHANNEL_7
5243   * @retval Between 0 to 0x000000FF.
5244   */
LL_DMA_GetFIFOLevel(const DMA_TypeDef * DMAx,uint32_t Channel)5245 __STATIC_INLINE uint32_t LL_DMA_GetFIFOLevel(const DMA_TypeDef *DMAx, uint32_t Channel)
5246 {
5247   uint32_t dma_base_addr = (uint32_t)DMAx;
5248   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR,
5249                    DMA_CSR_FIFOL) >> DMA_CSR_FIFOL_Pos);
5250 }
5251 
5252 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
5253 /**
5254   * @brief Enable the DMA channel secure attribute.
5255   * @note  This API is used for all available DMA channels.
5256   * @rmtoll SECCFGR  SECx    LL_DMA_EnableChannelSecure
5257   * @param  DMAx DMAx Instance
5258   * @param  Channel This parameter can be one of the following values:
5259   *         @arg @ref LL_DMA_CHANNEL_0
5260   *         @arg @ref LL_DMA_CHANNEL_1
5261   *         @arg @ref LL_DMA_CHANNEL_2
5262   *         @arg @ref LL_DMA_CHANNEL_3
5263   *         @arg @ref LL_DMA_CHANNEL_4
5264   *         @arg @ref LL_DMA_CHANNEL_5
5265   *         @arg @ref LL_DMA_CHANNEL_6
5266   *         @arg @ref LL_DMA_CHANNEL_7
5267   * @retval None.
5268   */
LL_DMA_EnableChannelSecure(DMA_TypeDef * DMAx,uint32_t Channel)5269 __STATIC_INLINE void LL_DMA_EnableChannelSecure(DMA_TypeDef *DMAx, uint32_t Channel)
5270 {
5271   SET_BIT(DMAx->SECCFGR, (DMA_SECCFGR_SEC0 << (Channel & 0x0000000FU)));
5272 }
5273 
5274 /**
5275   * @brief Disable the DMA channel secure attribute.
5276   * @note  This API is used for all available DMA channels.
5277   * @rmtoll SECCFGR  SECx    LL_DMA_DisableChannelSecure
5278   * @param  DMAx DMAx Instance
5279   * @param  Channel This parameter can be one of the following values:
5280   *         @arg @ref LL_DMA_CHANNEL_0
5281   *         @arg @ref LL_DMA_CHANNEL_1
5282   *         @arg @ref LL_DMA_CHANNEL_2
5283   *         @arg @ref LL_DMA_CHANNEL_3
5284   *         @arg @ref LL_DMA_CHANNEL_4
5285   *         @arg @ref LL_DMA_CHANNEL_5
5286   *         @arg @ref LL_DMA_CHANNEL_6
5287   *         @arg @ref LL_DMA_CHANNEL_7
5288   * @retval None.
5289   */
LL_DMA_DisableChannelSecure(DMA_TypeDef * DMAx,uint32_t Channel)5290 __STATIC_INLINE void LL_DMA_DisableChannelSecure(DMA_TypeDef *DMAx, uint32_t Channel)
5291 {
5292   CLEAR_BIT(DMAx->SECCFGR, (DMA_SECCFGR_SEC0 << (Channel & 0x0000000FU)));
5293 }
5294 #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
5295 
5296 #if defined (DMA_SECCFGR_SEC0)
5297 /**
5298   * @brief Check if DMA channel secure is enabled.
5299   * @note  This API is used for all available DMA channels.
5300   * @rmtoll SECCFGR             SECx          LL_DMA_IsEnabledChannelSecure
5301   * @param  DMAx DMAx Instance
5302   * @param  Channel This parameter can be one of the following values:
5303   *         @arg @ref LL_DMA_CHANNEL_0
5304   *         @arg @ref LL_DMA_CHANNEL_1
5305   *         @arg @ref LL_DMA_CHANNEL_2
5306   *         @arg @ref LL_DMA_CHANNEL_3
5307   *         @arg @ref LL_DMA_CHANNEL_4
5308   *         @arg @ref LL_DMA_CHANNEL_5
5309   *         @arg @ref LL_DMA_CHANNEL_6
5310   *         @arg @ref LL_DMA_CHANNEL_7
5311   * @retval State of bit (1 or 0).
5312   */
LL_DMA_IsEnabledChannelSecure(const DMA_TypeDef * DMAx,uint32_t Channel)5313 __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannelSecure(const DMA_TypeDef *DMAx, uint32_t Channel)
5314 {
5315   return ((READ_BIT(DMAx->SECCFGR, (DMA_SECCFGR_SEC0 << (Channel & 0x0000000FU)))
5316            == (DMA_SECCFGR_SEC0 << (Channel & 0x0000000FU))) ? 1UL : 0UL);
5317 }
5318 #endif /* DMA_SECCFGR_SEC0 */
5319 
5320 /**
5321   * @brief Enable the DMA channel privilege attribute.
5322   * @note  This API is used for all available DMA channels.
5323   * @rmtoll PRIVCFGR          PRIVx      LL_DMA_EnableChannelPrivilege
5324   * @param  DMAx DMAx Instance
5325   * @param  Channel This parameter can be one of the following values:
5326   *         @arg @ref LL_DMA_CHANNEL_0
5327   *         @arg @ref LL_DMA_CHANNEL_1
5328   *         @arg @ref LL_DMA_CHANNEL_2
5329   *         @arg @ref LL_DMA_CHANNEL_3
5330   *         @arg @ref LL_DMA_CHANNEL_4
5331   *         @arg @ref LL_DMA_CHANNEL_5
5332   *         @arg @ref LL_DMA_CHANNEL_6
5333   *         @arg @ref LL_DMA_CHANNEL_7
5334   * @retval None.
5335   */
LL_DMA_EnableChannelPrivilege(DMA_TypeDef * DMAx,uint32_t Channel)5336 __STATIC_INLINE void LL_DMA_EnableChannelPrivilege(DMA_TypeDef *DMAx, uint32_t Channel)
5337 {
5338   SET_BIT(DMAx->PRIVCFGR, (DMA_PRIVCFGR_PRIV0 << (Channel & 0x0000000FU)));
5339 }
5340 
5341 /**
5342   * @brief Disable the DMA channel privilege attribute.
5343   * @note  This API is used for all available DMA channels.
5344   * @rmtoll PRIVCFGR          PRIVx      LL_DMA_DisableChannelPrivilege
5345   * @param  DMAx DMAx Instance
5346   * @param  Channel This parameter can be one of the following values:
5347   *         @arg @ref LL_DMA_CHANNEL_0
5348   *         @arg @ref LL_DMA_CHANNEL_1
5349   *         @arg @ref LL_DMA_CHANNEL_2
5350   *         @arg @ref LL_DMA_CHANNEL_3
5351   *         @arg @ref LL_DMA_CHANNEL_4
5352   *         @arg @ref LL_DMA_CHANNEL_5
5353   *         @arg @ref LL_DMA_CHANNEL_6
5354   *         @arg @ref LL_DMA_CHANNEL_7
5355   * @retval None.
5356   */
LL_DMA_DisableChannelPrivilege(DMA_TypeDef * DMAx,uint32_t Channel)5357 __STATIC_INLINE void LL_DMA_DisableChannelPrivilege(DMA_TypeDef *DMAx, uint32_t Channel)
5358 {
5359   CLEAR_BIT(DMAx->PRIVCFGR, (DMA_PRIVCFGR_PRIV0 << (Channel & 0x0000000FU)));
5360 }
5361 
5362 /**
5363   * @brief Check if DMA Channel privilege is enabled.
5364   * @note  This API is used for all available DMA channels.
5365   * @rmtoll PRIVCFGR          PRIVx      LL_DMA_IsEnabledChannelPrivilege
5366   * @param  DMAx DMAx Instance
5367   * @param  Channel This parameter can be one of the following values:
5368   *         @arg @ref LL_DMA_CHANNEL_0
5369   *         @arg @ref LL_DMA_CHANNEL_1
5370   *         @arg @ref LL_DMA_CHANNEL_2
5371   *         @arg @ref LL_DMA_CHANNEL_3
5372   *         @arg @ref LL_DMA_CHANNEL_4
5373   *         @arg @ref LL_DMA_CHANNEL_5
5374   *         @arg @ref LL_DMA_CHANNEL_6
5375   *         @arg @ref LL_DMA_CHANNEL_7
5376   * @retval State of bit (1 or 0).
5377   */
LL_DMA_IsEnabledChannelPrivilege(const DMA_TypeDef * DMAx,uint32_t Channel)5378 __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannelPrivilege(const DMA_TypeDef *DMAx, uint32_t Channel)
5379 {
5380   return ((READ_BIT(DMAx->PRIVCFGR, (DMA_PRIVCFGR_PRIV0 << (Channel & 0x0000000FU)))
5381            == (DMA_PRIVCFGR_PRIV0 << (Channel & 0x0000000FU))) ? 1UL : 0UL);
5382 }
5383 
5384 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
5385 /**
5386   * @brief Enable the DMA channel lock attributes.
5387   * @note  This API is used for all available DMA channels.
5388   * @rmtoll RCFGLOCKR           LOCKx         LL_DMA_EnableChannelLockAttribute
5389   * @param  DMAx DMAx Instance
5390   * @param  Channel This parameter can be one of the following values:
5391   *         @arg @ref LL_DMA_CHANNEL_0
5392   *         @arg @ref LL_DMA_CHANNEL_1
5393   *         @arg @ref LL_DMA_CHANNEL_2
5394   *         @arg @ref LL_DMA_CHANNEL_3
5395   *         @arg @ref LL_DMA_CHANNEL_4
5396   *         @arg @ref LL_DMA_CHANNEL_5
5397   *         @arg @ref LL_DMA_CHANNEL_6
5398   *         @arg @ref LL_DMA_CHANNEL_7
5399   * @retval None.
5400   */
LL_DMA_EnableChannelLockAttribute(DMA_TypeDef * DMAx,uint32_t Channel)5401 __STATIC_INLINE void LL_DMA_EnableChannelLockAttribute(DMA_TypeDef *DMAx, uint32_t Channel)
5402 {
5403   SET_BIT(DMAx->RCFGLOCKR, (DMA_RCFGLOCKR_LOCK0 << (Channel & 0x0000000FU)));
5404 }
5405 #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
5406 
5407 #if defined (DMA_RCFGLOCKR_LOCK0)
5408 /**
5409   * @brief Check if DMA channel attributes are locked.
5410   * @note  This API is used for all available DMA channels.
5411   * @rmtoll SECCFGR            LOCKx       LL_DMA_IsEnabledChannelLockAttribute
5412   * @param  DMAx DMAx Instance
5413   * @param  Channel This parameter can be one of the following values:
5414   *         @arg @ref LL_DMA_CHANNEL_0
5415   *         @arg @ref LL_DMA_CHANNEL_1
5416   *         @arg @ref LL_DMA_CHANNEL_2
5417   *         @arg @ref LL_DMA_CHANNEL_3
5418   *         @arg @ref LL_DMA_CHANNEL_4
5419   *         @arg @ref LL_DMA_CHANNEL_5
5420   *         @arg @ref LL_DMA_CHANNEL_6
5421   *         @arg @ref LL_DMA_CHANNEL_7
5422   * @retval State of bit (1 or 0).
5423   */
LL_DMA_IsEnabledChannelLockAttribute(const DMA_TypeDef * DMAx,uint32_t Channel)5424 __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannelLockAttribute(const DMA_TypeDef *DMAx, uint32_t Channel)
5425 {
5426   return ((READ_BIT(DMAx->RCFGLOCKR, (DMA_RCFGLOCKR_LOCK0 << (Channel & 0x0000000FU)))
5427            == (DMA_RCFGLOCKR_LOCK0 << (Channel & 0x0000000FU))) ? 1UL : 0UL);
5428 }
5429 
5430 #endif /* DMA_RCFGLOCKR_LOCK0 */
5431 /**
5432   * @}
5433   */
5434 
5435 /** @defgroup DMA_LL_EF_FLAG_Management Flag Management
5436   * @{
5437   */
5438 
5439 /**
5440   * @brief Clear trigger overrun flag.
5441   * @note  This API is used for all available DMA channels.
5442   * @rmtoll CFCR          TOF        LL_DMA_ClearFlag_TO
5443   * @param  DMAx DMAx Instance
5444   * @param  Channel This parameter can be one of the following values:
5445   *         @arg @ref LL_DMA_CHANNEL_0
5446   *         @arg @ref LL_DMA_CHANNEL_1
5447   *         @arg @ref LL_DMA_CHANNEL_2
5448   *         @arg @ref LL_DMA_CHANNEL_3
5449   *         @arg @ref LL_DMA_CHANNEL_4
5450   *         @arg @ref LL_DMA_CHANNEL_5
5451   *         @arg @ref LL_DMA_CHANNEL_6
5452   *         @arg @ref LL_DMA_CHANNEL_7
5453   * @retval None.
5454   */
LL_DMA_ClearFlag_TO(const DMA_TypeDef * DMAx,uint32_t Channel)5455 __STATIC_INLINE void LL_DMA_ClearFlag_TO(const DMA_TypeDef *DMAx, uint32_t Channel)
5456 {
5457   uint32_t dma_base_addr = (uint32_t)DMAx;
5458   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CFCR, DMA_CFCR_TOF);
5459 }
5460 
5461 /**
5462   * @brief Clear suspension flag.
5463   * @note  This API is used for all available DMA channels.
5464   * @rmtoll CFCR          SUSPF        LL_DMA_ClearFlag_SUSP
5465   * @param  DMAx DMAx Instance
5466   * @param  Channel This parameter can be one of the following values:
5467   *         @arg @ref LL_DMA_CHANNEL_0
5468   *         @arg @ref LL_DMA_CHANNEL_1
5469   *         @arg @ref LL_DMA_CHANNEL_2
5470   *         @arg @ref LL_DMA_CHANNEL_3
5471   *         @arg @ref LL_DMA_CHANNEL_4
5472   *         @arg @ref LL_DMA_CHANNEL_5
5473   *         @arg @ref LL_DMA_CHANNEL_6
5474   *         @arg @ref LL_DMA_CHANNEL_7
5475   * @retval None.
5476   */
LL_DMA_ClearFlag_SUSP(const DMA_TypeDef * DMAx,uint32_t Channel)5477 __STATIC_INLINE void LL_DMA_ClearFlag_SUSP(const DMA_TypeDef *DMAx, uint32_t Channel)
5478 {
5479   uint32_t dma_base_addr = (uint32_t)DMAx;
5480   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CFCR, DMA_CFCR_SUSPF);
5481 }
5482 
5483 /**
5484   * @brief Clear user setting error flag.
5485   * @note  This API is used for all available DMA channels.
5486   * @rmtoll CFCR          USEF         LL_DMA_ClearFlag_USE
5487   * @param  DMAx DMAx Instance
5488   * @param  Channel This parameter can be one of the following values:
5489   *         @arg @ref LL_DMA_CHANNEL_0
5490   *         @arg @ref LL_DMA_CHANNEL_1
5491   *         @arg @ref LL_DMA_CHANNEL_2
5492   *         @arg @ref LL_DMA_CHANNEL_3
5493   *         @arg @ref LL_DMA_CHANNEL_4
5494   *         @arg @ref LL_DMA_CHANNEL_5
5495   *         @arg @ref LL_DMA_CHANNEL_6
5496   *         @arg @ref LL_DMA_CHANNEL_7
5497   * @retval None.
5498   */
LL_DMA_ClearFlag_USE(const DMA_TypeDef * DMAx,uint32_t Channel)5499 __STATIC_INLINE void LL_DMA_ClearFlag_USE(const DMA_TypeDef *DMAx, uint32_t Channel)
5500 {
5501   uint32_t dma_base_addr = (uint32_t)DMAx;
5502   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CFCR, DMA_CFCR_USEF);
5503 }
5504 
5505 /**
5506   * @brief Clear link transfer error flag.
5507   * @note  This API is used for all available DMA channels.
5508   * @rmtoll CFCR          ULEF         LL_DMA_ClearFlag_ULE
5509   * @param  DMAx DMAx Instance
5510   * @param  Channel This parameter can be one of the following values:
5511   *         @arg @ref LL_DMA_CHANNEL_0
5512   *         @arg @ref LL_DMA_CHANNEL_1
5513   *         @arg @ref LL_DMA_CHANNEL_2
5514   *         @arg @ref LL_DMA_CHANNEL_3
5515   *         @arg @ref LL_DMA_CHANNEL_4
5516   *         @arg @ref LL_DMA_CHANNEL_5
5517   *         @arg @ref LL_DMA_CHANNEL_6
5518   *         @arg @ref LL_DMA_CHANNEL_7
5519   * @retval None.
5520   */
LL_DMA_ClearFlag_ULE(const DMA_TypeDef * DMAx,uint32_t Channel)5521 __STATIC_INLINE void LL_DMA_ClearFlag_ULE(const DMA_TypeDef *DMAx, uint32_t Channel)
5522 {
5523   uint32_t dma_base_addr = (uint32_t)DMAx;
5524   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CFCR, DMA_CFCR_ULEF);
5525 }
5526 
5527 /**
5528   * @brief Clear data transfer error flag.
5529   * @note  This API is used for all available DMA channels.
5530   * @rmtoll CFCR          DTEF         LL_DMA_ClearFlag_DTE
5531   * @param  DMAx DMAx Instance
5532   * @param  Channel This parameter can be one of the following values:
5533   *         @arg @ref LL_DMA_CHANNEL_0
5534   *         @arg @ref LL_DMA_CHANNEL_1
5535   *         @arg @ref LL_DMA_CHANNEL_2
5536   *         @arg @ref LL_DMA_CHANNEL_3
5537   *         @arg @ref LL_DMA_CHANNEL_4
5538   *         @arg @ref LL_DMA_CHANNEL_5
5539   *         @arg @ref LL_DMA_CHANNEL_6
5540   *         @arg @ref LL_DMA_CHANNEL_7
5541   * @retval None.
5542   */
LL_DMA_ClearFlag_DTE(const DMA_TypeDef * DMAx,uint32_t Channel)5543 __STATIC_INLINE void LL_DMA_ClearFlag_DTE(const DMA_TypeDef *DMAx, uint32_t Channel)
5544 {
5545   uint32_t dma_base_addr = (uint32_t)DMAx;
5546   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CFCR, DMA_CFCR_DTEF);
5547 }
5548 
5549 /**
5550   * @brief Clear half transfer flag.
5551   * @note  This API is used for all available DMA channels.
5552   * @rmtoll CFCR          HTF          LL_DMA_ClearFlag_HT
5553   * @param  DMAx DMAx Instance
5554   * @param  Channel This parameter can be one of the following values:
5555   *         @arg @ref LL_DMA_CHANNEL_0
5556   *         @arg @ref LL_DMA_CHANNEL_1
5557   *         @arg @ref LL_DMA_CHANNEL_2
5558   *         @arg @ref LL_DMA_CHANNEL_3
5559   *         @arg @ref LL_DMA_CHANNEL_4
5560   *         @arg @ref LL_DMA_CHANNEL_5
5561   *         @arg @ref LL_DMA_CHANNEL_6
5562   *         @arg @ref LL_DMA_CHANNEL_7
5563   * @retval None.
5564   */
LL_DMA_ClearFlag_HT(const DMA_TypeDef * DMAx,uint32_t Channel)5565 __STATIC_INLINE void LL_DMA_ClearFlag_HT(const DMA_TypeDef *DMAx, uint32_t Channel)
5566 {
5567   uint32_t dma_base_addr = (uint32_t)DMAx;
5568   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CFCR, DMA_CFCR_HTF);
5569 }
5570 
5571 /**
5572   * @brief Clear transfer complete flag.
5573   * @note  This API is used for all available DMA channels.
5574   * @rmtoll CFCR          TCF          LL_DMA_ClearFlag_TC
5575   * @param  DMAx DMAx Instance
5576   * @param  Channel This parameter can be one of the following values:
5577   *         @arg @ref LL_DMA_CHANNEL_0
5578   *         @arg @ref LL_DMA_CHANNEL_1
5579   *         @arg @ref LL_DMA_CHANNEL_2
5580   *         @arg @ref LL_DMA_CHANNEL_3
5581   *         @arg @ref LL_DMA_CHANNEL_4
5582   *         @arg @ref LL_DMA_CHANNEL_5
5583   *         @arg @ref LL_DMA_CHANNEL_6
5584   *         @arg @ref LL_DMA_CHANNEL_7
5585   * @retval None.
5586   */
LL_DMA_ClearFlag_TC(const DMA_TypeDef * DMAx,uint32_t Channel)5587 __STATIC_INLINE void LL_DMA_ClearFlag_TC(const DMA_TypeDef *DMAx, uint32_t Channel)
5588 {
5589   uint32_t dma_base_addr = (uint32_t)DMAx;
5590   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CFCR, DMA_CFCR_TCF);
5591 }
5592 
5593 /**
5594   * @brief Get trigger overrun flag.
5595   * @note  This API is used for all available DMA channels.
5596   * @rmtoll CSR           TOF        LL_DMA_IsActiveFlag_TO
5597   * @param  DMAx DMAx Instance
5598   * @param  Channel This parameter can be one of the following values:
5599   *         @arg @ref LL_DMA_CHANNEL_0
5600   *         @arg @ref LL_DMA_CHANNEL_1
5601   *         @arg @ref LL_DMA_CHANNEL_2
5602   *         @arg @ref LL_DMA_CHANNEL_3
5603   *         @arg @ref LL_DMA_CHANNEL_4
5604   *         @arg @ref LL_DMA_CHANNEL_5
5605   *         @arg @ref LL_DMA_CHANNEL_6
5606   *         @arg @ref LL_DMA_CHANNEL_7
5607   * @retval State of bit (1 or 0).
5608   */
LL_DMA_IsActiveFlag_TO(const DMA_TypeDef * DMAx,uint32_t Channel)5609 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TO(const DMA_TypeDef *DMAx, uint32_t Channel)
5610 {
5611   uint32_t dma_base_addr = (uint32_t)DMAx;
5612   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR, DMA_CSR_TOF)
5613            == (DMA_CSR_TOF)) ? 1UL : 0UL);
5614 }
5615 
5616 /**
5617   * @brief Get suspension flag.
5618   * @note  This API is used for all available DMA channels.
5619   * @rmtoll CSR           SUSPF        LL_DMA_IsActiveFlag_SUSP
5620   * @param  DMAx DMAx Instance
5621   * @param  Channel This parameter can be one of the following values:
5622   *         @arg @ref LL_DMA_CHANNEL_0
5623   *         @arg @ref LL_DMA_CHANNEL_1
5624   *         @arg @ref LL_DMA_CHANNEL_2
5625   *         @arg @ref LL_DMA_CHANNEL_3
5626   *         @arg @ref LL_DMA_CHANNEL_4
5627   *         @arg @ref LL_DMA_CHANNEL_5
5628   *         @arg @ref LL_DMA_CHANNEL_6
5629   *         @arg @ref LL_DMA_CHANNEL_7
5630   * @retval State of bit (1 or 0).
5631   */
LL_DMA_IsActiveFlag_SUSP(const DMA_TypeDef * DMAx,uint32_t Channel)5632 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_SUSP(const DMA_TypeDef *DMAx, uint32_t Channel)
5633 {
5634   uint32_t dma_base_addr = (uint32_t)DMAx;
5635   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR, DMA_CSR_SUSPF)
5636            == (DMA_CSR_SUSPF)) ? 1UL : 0UL);
5637 }
5638 
5639 /**
5640   * @brief Get user setting error flag.
5641   * @note  This API is used for all available DMA channels.
5642   * @rmtoll CSR           USEF         LL_DMA_IsActiveFlag_USE
5643   * @param  DMAx DMAx Instance
5644   * @param  Channel This parameter can be one of the following values:
5645   *         @arg @ref LL_DMA_CHANNEL_0
5646   *         @arg @ref LL_DMA_CHANNEL_1
5647   *         @arg @ref LL_DMA_CHANNEL_2
5648   *         @arg @ref LL_DMA_CHANNEL_3
5649   *         @arg @ref LL_DMA_CHANNEL_4
5650   *         @arg @ref LL_DMA_CHANNEL_5
5651   *         @arg @ref LL_DMA_CHANNEL_6
5652   *         @arg @ref LL_DMA_CHANNEL_7
5653   * @retval State of bit (1 or 0).
5654   */
LL_DMA_IsActiveFlag_USE(const DMA_TypeDef * DMAx,uint32_t Channel)5655 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_USE(const DMA_TypeDef *DMAx, uint32_t Channel)
5656 {
5657   uint32_t dma_base_addr = (uint32_t)DMAx;
5658   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR, DMA_CSR_USEF)
5659            == (DMA_CSR_USEF)) ? 1UL : 0UL);
5660 }
5661 
5662 /**
5663   * @brief Get user setting error flag.
5664   * @note  This API is used for all available DMA channels.
5665   * @rmtoll CSR           ULEF         LL_DMA_IsActiveFlag_ULE
5666   * @param  DMAx DMAx Instance
5667   * @param  Channel This parameter can be one of the following values:
5668   *         @arg @ref LL_DMA_CHANNEL_0
5669   *         @arg @ref LL_DMA_CHANNEL_1
5670   *         @arg @ref LL_DMA_CHANNEL_2
5671   *         @arg @ref LL_DMA_CHANNEL_3
5672   *         @arg @ref LL_DMA_CHANNEL_4
5673   *         @arg @ref LL_DMA_CHANNEL_5
5674   *         @arg @ref LL_DMA_CHANNEL_6
5675   *         @arg @ref LL_DMA_CHANNEL_7
5676   * @retval State of bit (1 or 0).
5677   */
LL_DMA_IsActiveFlag_ULE(const DMA_TypeDef * DMAx,uint32_t Channel)5678 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_ULE(const DMA_TypeDef *DMAx, uint32_t Channel)
5679 {
5680   uint32_t dma_base_addr = (uint32_t)DMAx;
5681   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR, DMA_CSR_ULEF)
5682            == (DMA_CSR_ULEF)) ? 1UL : 0UL);
5683 }
5684 
5685 /**
5686   * @brief Get data transfer error flag.
5687   * @note  This API is used for all available DMA channels.
5688   * @rmtoll CSR           DTEF         LL_DMA_IsActiveFlag_DTE
5689   * @param  DMAx DMAx Instance
5690   * @param  Channel This parameter can be one of the following values:
5691   *         @arg @ref LL_DMA_CHANNEL_0
5692   *         @arg @ref LL_DMA_CHANNEL_1
5693   *         @arg @ref LL_DMA_CHANNEL_2
5694   *         @arg @ref LL_DMA_CHANNEL_3
5695   *         @arg @ref LL_DMA_CHANNEL_4
5696   *         @arg @ref LL_DMA_CHANNEL_5
5697   *         @arg @ref LL_DMA_CHANNEL_6
5698   *         @arg @ref LL_DMA_CHANNEL_7
5699   * @retval State of bit (1 or 0).
5700   */
LL_DMA_IsActiveFlag_DTE(const DMA_TypeDef * DMAx,uint32_t Channel)5701 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DTE(const DMA_TypeDef *DMAx, uint32_t Channel)
5702 {
5703   uint32_t dma_base_addr = (uint32_t)DMAx;
5704   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR, DMA_CSR_DTEF)
5705            == (DMA_CSR_DTEF)) ? 1UL : 0UL);
5706 }
5707 
5708 /**
5709   * @brief Get half transfer flag.
5710   * @note  This API is used for all available DMA channels.
5711   * @rmtoll CSR           HTF          LL_DMA_IsActiveFlag_HT
5712   * @param  DMAx DMAx Instance
5713   * @param  Channel This parameter can be one of the following values:
5714   *         @arg @ref LL_DMA_CHANNEL_0
5715   *         @arg @ref LL_DMA_CHANNEL_1
5716   *         @arg @ref LL_DMA_CHANNEL_2
5717   *         @arg @ref LL_DMA_CHANNEL_3
5718   *         @arg @ref LL_DMA_CHANNEL_4
5719   *         @arg @ref LL_DMA_CHANNEL_5
5720   *         @arg @ref LL_DMA_CHANNEL_6
5721   *         @arg @ref LL_DMA_CHANNEL_7
5722   * @retval State of bit (1 or 0).
5723   */
LL_DMA_IsActiveFlag_HT(const DMA_TypeDef * DMAx,uint32_t Channel)5724 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT(const DMA_TypeDef *DMAx, uint32_t Channel)
5725 {
5726   uint32_t dma_base_addr = (uint32_t)DMAx;
5727   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR, DMA_CSR_HTF)
5728            == (DMA_CSR_HTF)) ? 1UL : 0UL);
5729 }
5730 
5731 /**
5732   * @brief Get transfer complete flag.
5733   * @note  This API is used for all available DMA channels.
5734   * @rmtoll CSR           TCF          LL_DMA_IsActiveFlag_TC
5735   * @param  DMAx DMAx Instance
5736   * @param  Channel This parameter can be one of the following values:
5737   *         @arg @ref LL_DMA_CHANNEL_0
5738   *         @arg @ref LL_DMA_CHANNEL_1
5739   *         @arg @ref LL_DMA_CHANNEL_2
5740   *         @arg @ref LL_DMA_CHANNEL_3
5741   *         @arg @ref LL_DMA_CHANNEL_4
5742   *         @arg @ref LL_DMA_CHANNEL_5
5743   *         @arg @ref LL_DMA_CHANNEL_6
5744   *         @arg @ref LL_DMA_CHANNEL_7
5745   * @retval State of bit (1 or 0).
5746   */
LL_DMA_IsActiveFlag_TC(const DMA_TypeDef * DMAx,uint32_t Channel)5747 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC(const DMA_TypeDef *DMAx, uint32_t Channel)
5748 {
5749   uint32_t dma_base_addr = (uint32_t)DMAx;
5750   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR, DMA_CSR_TCF)
5751            == (DMA_CSR_TCF)) ? 1UL : 0UL);
5752 }
5753 
5754 /**
5755   * @brief Get idle flag.
5756   * @note  This API is used for all available DMA channels.
5757   * @rmtoll CSR           IDLEF        LL_DMA_IsActiveFlag_IDLE
5758   * @param  DMAx DMAx Instance
5759   * @param  Channel This parameter can be one of the following values:
5760   *         @arg @ref LL_DMA_CHANNEL_0
5761   *         @arg @ref LL_DMA_CHANNEL_1
5762   *         @arg @ref LL_DMA_CHANNEL_2
5763   *         @arg @ref LL_DMA_CHANNEL_3
5764   *         @arg @ref LL_DMA_CHANNEL_4
5765   *         @arg @ref LL_DMA_CHANNEL_5
5766   *         @arg @ref LL_DMA_CHANNEL_6
5767   *         @arg @ref LL_DMA_CHANNEL_7
5768   * @retval State of bit (1 or 0).
5769   */
LL_DMA_IsActiveFlag_IDLE(const DMA_TypeDef * DMAx,uint32_t Channel)5770 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_IDLE(const DMA_TypeDef *DMAx, uint32_t Channel)
5771 {
5772   uint32_t dma_base_addr = (uint32_t)DMAx;
5773   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR, DMA_CSR_IDLEF)
5774            == (DMA_CSR_IDLEF)) ? 1UL : 0UL);
5775 }
5776 
5777 /**
5778   * @brief Check if nsecure masked interrupt is active.
5779   * @note  This API is used for all available DMA channels.
5780   * @rmtoll MISR  MISx    LL_DMA_IsActiveFlag_MIS
5781   * @param  DMAx DMAx Instance
5782   * @param  Channel This parameter can be one of the following values:
5783   *         @arg @ref LL_DMA_CHANNEL_0
5784   *         @arg @ref LL_DMA_CHANNEL_1
5785   *         @arg @ref LL_DMA_CHANNEL_2
5786   *         @arg @ref LL_DMA_CHANNEL_3
5787   *         @arg @ref LL_DMA_CHANNEL_4
5788   *         @arg @ref LL_DMA_CHANNEL_5
5789   *         @arg @ref LL_DMA_CHANNEL_6
5790   *         @arg @ref LL_DMA_CHANNEL_7
5791   * @retval State of bit (1 or 0).
5792   */
LL_DMA_IsActiveFlag_MIS(const DMA_TypeDef * DMAx,uint32_t Channel)5793 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_MIS(const DMA_TypeDef *DMAx, uint32_t Channel)
5794 {
5795   return ((READ_BIT(DMAx->MISR, (DMA_MISR_MIS0 << (Channel & 0x0FU)))
5796            == (DMA_MISR_MIS0 << (Channel & 0x0FU))) ? 1UL : 0UL);
5797 }
5798 
5799 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
5800 /**
5801   * @brief Check if secure masked interrupt is active.
5802   * @note  This API is used for all available DMA channels.
5803   * @rmtoll SMISR  MISx    LL_DMA_IsActiveFlag_SMIS
5804   * @param  DMAx DMAx Instance
5805   * @param  Channel This parameter can be one of the following values:
5806   *         @arg @ref LL_DMA_CHANNEL_0
5807   *         @arg @ref LL_DMA_CHANNEL_1
5808   *         @arg @ref LL_DMA_CHANNEL_2
5809   *         @arg @ref LL_DMA_CHANNEL_3
5810   *         @arg @ref LL_DMA_CHANNEL_4
5811   *         @arg @ref LL_DMA_CHANNEL_5
5812   *         @arg @ref LL_DMA_CHANNEL_6
5813   *         @arg @ref LL_DMA_CHANNEL_7
5814   * @retval State of bit (1 or 0).
5815   */
LL_DMA_IsActiveFlag_SMIS(const DMA_TypeDef * DMAx,uint32_t Channel)5816 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_SMIS(const DMA_TypeDef *DMAx, uint32_t Channel)
5817 {
5818   return ((READ_BIT(DMAx->SMISR, (DMA_SMISR_MIS0 << (Channel & 0x0000000FU)))
5819            == (DMA_SMISR_MIS0 << (Channel & 0x0000000FU))) ? 1UL : 0UL);
5820 }
5821 #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
5822 /**
5823   * @}
5824   */
5825 
5826 /** @defgroup DMA_LL_EF_IT_Management Interrupt Management
5827   * @{
5828   */
5829 
5830 /**
5831   * @brief Enable trigger overrun interrupt.
5832   * @note  This API is used for all available DMA channels.
5833   * @rmtoll CCR           TOIE       LL_DMA_EnableIT_TO
5834   * @param  DMAx DMAx Instance
5835   * @param  Channel This parameter can be one of the following values:
5836   *         @arg @ref LL_DMA_CHANNEL_0
5837   *         @arg @ref LL_DMA_CHANNEL_1
5838   *         @arg @ref LL_DMA_CHANNEL_2
5839   *         @arg @ref LL_DMA_CHANNEL_3
5840   *         @arg @ref LL_DMA_CHANNEL_4
5841   *         @arg @ref LL_DMA_CHANNEL_5
5842   *         @arg @ref LL_DMA_CHANNEL_6
5843   *         @arg @ref LL_DMA_CHANNEL_7
5844   * @retval None.
5845   */
LL_DMA_EnableIT_TO(const DMA_TypeDef * DMAx,uint32_t Channel)5846 __STATIC_INLINE void LL_DMA_EnableIT_TO(const DMA_TypeDef *DMAx, uint32_t Channel)
5847 {
5848   uint32_t dma_base_addr = (uint32_t)DMAx;
5849   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TOIE);
5850 }
5851 
5852 /**
5853   * @brief Enable suspension interrupt.
5854   * @note  This API is used for all available DMA channels.
5855   * @rmtoll CCR           SUSPIE       LL_DMA_EnableIT_SUSP
5856   * @param  DMAx DMAx Instance
5857   * @param  Channel This parameter can be one of the following values:
5858   *         @arg @ref LL_DMA_CHANNEL_0
5859   *         @arg @ref LL_DMA_CHANNEL_1
5860   *         @arg @ref LL_DMA_CHANNEL_2
5861   *         @arg @ref LL_DMA_CHANNEL_3
5862   *         @arg @ref LL_DMA_CHANNEL_4
5863   *         @arg @ref LL_DMA_CHANNEL_5
5864   *         @arg @ref LL_DMA_CHANNEL_6
5865   *         @arg @ref LL_DMA_CHANNEL_7
5866   * @retval None.
5867   */
LL_DMA_EnableIT_SUSP(const DMA_TypeDef * DMAx,uint32_t Channel)5868 __STATIC_INLINE void LL_DMA_EnableIT_SUSP(const DMA_TypeDef *DMAx, uint32_t Channel)
5869 {
5870   uint32_t dma_base_addr = (uint32_t)DMAx;
5871   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_SUSPIE);
5872 }
5873 
5874 /**
5875   * @brief Enable user setting error interrupt.
5876   * @note  This API is used for all available DMA channels.
5877   * @rmtoll CCR           USEIE        LL_DMA_EnableIT_USE
5878   * @param  DMAx DMAx Instance
5879   * @param  Channel This parameter can be one of the following values:
5880   *         @arg @ref LL_DMA_CHANNEL_0
5881   *         @arg @ref LL_DMA_CHANNEL_1
5882   *         @arg @ref LL_DMA_CHANNEL_2
5883   *         @arg @ref LL_DMA_CHANNEL_3
5884   *         @arg @ref LL_DMA_CHANNEL_4
5885   *         @arg @ref LL_DMA_CHANNEL_5
5886   *         @arg @ref LL_DMA_CHANNEL_6
5887   *         @arg @ref LL_DMA_CHANNEL_7
5888   * @retval None.
5889   */
LL_DMA_EnableIT_USE(const DMA_TypeDef * DMAx,uint32_t Channel)5890 __STATIC_INLINE void LL_DMA_EnableIT_USE(const DMA_TypeDef *DMAx, uint32_t Channel)
5891 {
5892   uint32_t dma_base_addr = (uint32_t)DMAx;
5893   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_USEIE);
5894 }
5895 
5896 /**
5897   * @brief Enable update link transfer error interrupt.
5898   * @note  This API is used for all available DMA channels.
5899   * @rmtoll CCR           ULEIE        LL_DMA_EnableIT_ULE
5900   * @param  DMAx DMAx Instance
5901   * @param  Channel This parameter can be one of the following values:
5902   *         @arg @ref LL_DMA_CHANNEL_0
5903   *         @arg @ref LL_DMA_CHANNEL_1
5904   *         @arg @ref LL_DMA_CHANNEL_2
5905   *         @arg @ref LL_DMA_CHANNEL_3
5906   *         @arg @ref LL_DMA_CHANNEL_4
5907   *         @arg @ref LL_DMA_CHANNEL_5
5908   *         @arg @ref LL_DMA_CHANNEL_6
5909   *         @arg @ref LL_DMA_CHANNEL_7
5910   * @retval None.
5911   */
LL_DMA_EnableIT_ULE(const DMA_TypeDef * DMAx,uint32_t Channel)5912 __STATIC_INLINE void LL_DMA_EnableIT_ULE(const DMA_TypeDef *DMAx, uint32_t Channel)
5913 {
5914   uint32_t dma_base_addr = (uint32_t)DMAx;
5915   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_ULEIE);
5916 }
5917 
5918 /**
5919   * @brief Enable data transfer error interrupt.
5920   * @note  This API is used for all available DMA channels.
5921   * @rmtoll CCR           DTEIE        LL_DMA_EnableIT_DTE
5922   * @param  DMAx DMAx Instance
5923   * @param  Channel This parameter can be one of the following values:
5924   *         @arg @ref LL_DMA_CHANNEL_0
5925   *         @arg @ref LL_DMA_CHANNEL_1
5926   *         @arg @ref LL_DMA_CHANNEL_2
5927   *         @arg @ref LL_DMA_CHANNEL_3
5928   *         @arg @ref LL_DMA_CHANNEL_4
5929   *         @arg @ref LL_DMA_CHANNEL_5
5930   *         @arg @ref LL_DMA_CHANNEL_6
5931   *         @arg @ref LL_DMA_CHANNEL_7
5932   * @retval None.
5933   */
LL_DMA_EnableIT_DTE(const DMA_TypeDef * DMAx,uint32_t Channel)5934 __STATIC_INLINE void LL_DMA_EnableIT_DTE(const DMA_TypeDef *DMAx, uint32_t Channel)
5935 {
5936   uint32_t dma_base_addr = (uint32_t)DMAx;
5937   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_DTEIE);
5938 }
5939 
5940 /**
5941   * @brief Enable half transfer complete interrupt.
5942   * @note  This API is used for all available DMA channels.
5943   * @rmtoll CCR           HTIE         LL_DMA_EnableIT_HT
5944   * @param  DMAx DMAx Instance
5945   * @param  Channel This parameter can be one of the following values:
5946   *         @arg @ref LL_DMA_CHANNEL_0
5947   *         @arg @ref LL_DMA_CHANNEL_1
5948   *         @arg @ref LL_DMA_CHANNEL_2
5949   *         @arg @ref LL_DMA_CHANNEL_3
5950   *         @arg @ref LL_DMA_CHANNEL_4
5951   *         @arg @ref LL_DMA_CHANNEL_5
5952   *         @arg @ref LL_DMA_CHANNEL_6
5953   *         @arg @ref LL_DMA_CHANNEL_7
5954   * @retval None.
5955   */
LL_DMA_EnableIT_HT(const DMA_TypeDef * DMAx,uint32_t Channel)5956 __STATIC_INLINE void LL_DMA_EnableIT_HT(const DMA_TypeDef *DMAx, uint32_t Channel)
5957 {
5958   uint32_t dma_base_addr = (uint32_t)DMAx;
5959   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_HTIE);
5960 }
5961 
5962 /**
5963   * @brief Enable transfer complete interrupt.
5964   * @note  This API is used for all available DMA channels.
5965   * @rmtoll CCR           TCIE         LL_DMA_EnableIT_TC
5966   * @param  DMAx DMAx Instance
5967   * @param  Channel This parameter can be one of the following values:
5968   *         @arg @ref LL_DMA_CHANNEL_0
5969   *         @arg @ref LL_DMA_CHANNEL_1
5970   *         @arg @ref LL_DMA_CHANNEL_2
5971   *         @arg @ref LL_DMA_CHANNEL_3
5972   *         @arg @ref LL_DMA_CHANNEL_4
5973   *         @arg @ref LL_DMA_CHANNEL_5
5974   *         @arg @ref LL_DMA_CHANNEL_6
5975   *         @arg @ref LL_DMA_CHANNEL_7
5976   * @retval None.
5977   */
LL_DMA_EnableIT_TC(const DMA_TypeDef * DMAx,uint32_t Channel)5978 __STATIC_INLINE void LL_DMA_EnableIT_TC(const DMA_TypeDef *DMAx, uint32_t Channel)
5979 {
5980   uint32_t dma_base_addr = (uint32_t)DMAx;
5981   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TCIE);
5982 }
5983 
5984 /**
5985   * @brief Disable trigger overrun interrupt.
5986   * @note  This API is used for all available DMA channels.
5987   * @rmtoll CCR           TOIE       LL_DMA_DisableIT_TO
5988   * @param  DMAx DMAx Instance
5989   * @param  Channel This parameter can be one of the following values:
5990   *         @arg @ref LL_DMA_CHANNEL_0
5991   *         @arg @ref LL_DMA_CHANNEL_1
5992   *         @arg @ref LL_DMA_CHANNEL_2
5993   *         @arg @ref LL_DMA_CHANNEL_3
5994   *         @arg @ref LL_DMA_CHANNEL_4
5995   *         @arg @ref LL_DMA_CHANNEL_5
5996   *         @arg @ref LL_DMA_CHANNEL_6
5997   *         @arg @ref LL_DMA_CHANNEL_7
5998   * @retval None.
5999   */
LL_DMA_DisableIT_TO(const DMA_TypeDef * DMAx,uint32_t Channel)6000 __STATIC_INLINE void LL_DMA_DisableIT_TO(const DMA_TypeDef *DMAx, uint32_t Channel)
6001 {
6002   uint32_t dma_base_addr = (uint32_t)DMAx;
6003   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TOIE);
6004 }
6005 
6006 /**
6007   * @brief Disable suspension interrupt.
6008   * @note  This API is used for all available DMA channels.
6009   * @rmtoll CCR           SUSPIE       LL_DMA_DisableIT_SUSP
6010   * @param  DMAx DMAx Instance
6011   * @param  Channel This parameter can be one of the following values:
6012   *         @arg @ref LL_DMA_CHANNEL_0
6013   *         @arg @ref LL_DMA_CHANNEL_1
6014   *         @arg @ref LL_DMA_CHANNEL_2
6015   *         @arg @ref LL_DMA_CHANNEL_3
6016   *         @arg @ref LL_DMA_CHANNEL_4
6017   *         @arg @ref LL_DMA_CHANNEL_5
6018   *         @arg @ref LL_DMA_CHANNEL_6
6019   *         @arg @ref LL_DMA_CHANNEL_7
6020   * @retval None.
6021   */
LL_DMA_DisableIT_SUSP(const DMA_TypeDef * DMAx,uint32_t Channel)6022 __STATIC_INLINE void LL_DMA_DisableIT_SUSP(const DMA_TypeDef *DMAx, uint32_t Channel)
6023 {
6024   uint32_t dma_base_addr = (uint32_t)DMAx;
6025   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_SUSPIE);
6026 }
6027 
6028 /**
6029   * @brief Disable user setting error interrupt.
6030   * @note  This API is used for all available DMA channels.
6031   * @rmtoll CCR           USEIE        LL_DMA_DisableIT_USE
6032   * @param  DMAx DMAx Instance
6033   * @param  Channel This parameter can be one of the following values:
6034   *         @arg @ref LL_DMA_CHANNEL_0
6035   *         @arg @ref LL_DMA_CHANNEL_1
6036   *         @arg @ref LL_DMA_CHANNEL_2
6037   *         @arg @ref LL_DMA_CHANNEL_3
6038   *         @arg @ref LL_DMA_CHANNEL_4
6039   *         @arg @ref LL_DMA_CHANNEL_5
6040   *         @arg @ref LL_DMA_CHANNEL_6
6041   *         @arg @ref LL_DMA_CHANNEL_7
6042   * @retval None.
6043   */
LL_DMA_DisableIT_USE(const DMA_TypeDef * DMAx,uint32_t Channel)6044 __STATIC_INLINE void LL_DMA_DisableIT_USE(const DMA_TypeDef *DMAx, uint32_t Channel)
6045 {
6046   uint32_t dma_base_addr = (uint32_t)DMAx;
6047   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_USEIE);
6048 }
6049 
6050 /**
6051   * @brief Disable update link transfer error interrupt.
6052   * @note  This API is used for all available DMA channels.
6053   * @rmtoll CCR           ULEIE        LL_DMA_DisableIT_ULE
6054   * @param  DMAx DMAx Instance
6055   * @param  Channel This parameter can be one of the following values:
6056   *         @arg @ref LL_DMA_CHANNEL_0
6057   *         @arg @ref LL_DMA_CHANNEL_1
6058   *         @arg @ref LL_DMA_CHANNEL_2
6059   *         @arg @ref LL_DMA_CHANNEL_3
6060   *         @arg @ref LL_DMA_CHANNEL_4
6061   *         @arg @ref LL_DMA_CHANNEL_5
6062   *         @arg @ref LL_DMA_CHANNEL_6
6063   *         @arg @ref LL_DMA_CHANNEL_7
6064   * @retval None.
6065   */
LL_DMA_DisableIT_ULE(const DMA_TypeDef * DMAx,uint32_t Channel)6066 __STATIC_INLINE void LL_DMA_DisableIT_ULE(const DMA_TypeDef *DMAx, uint32_t Channel)
6067 {
6068   uint32_t dma_base_addr = (uint32_t)DMAx;
6069   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_ULEIE);
6070 }
6071 
6072 /**
6073   * @brief Disable data transfer error interrupt.
6074   * @note  This API is used for all available DMA channels.
6075   * @rmtoll CCR           DTEIE        LL_DMA_DisableIT_DTE
6076   * @param  DMAx DMAx Instance
6077   * @param  Channel This parameter can be one of the following values:
6078   *         @arg @ref LL_DMA_CHANNEL_0
6079   *         @arg @ref LL_DMA_CHANNEL_1
6080   *         @arg @ref LL_DMA_CHANNEL_2
6081   *         @arg @ref LL_DMA_CHANNEL_3
6082   *         @arg @ref LL_DMA_CHANNEL_4
6083   *         @arg @ref LL_DMA_CHANNEL_5
6084   *         @arg @ref LL_DMA_CHANNEL_6
6085   *         @arg @ref LL_DMA_CHANNEL_7
6086   * @retval None.
6087   */
LL_DMA_DisableIT_DTE(const DMA_TypeDef * DMAx,uint32_t Channel)6088 __STATIC_INLINE void LL_DMA_DisableIT_DTE(const DMA_TypeDef *DMAx, uint32_t Channel)
6089 {
6090   uint32_t dma_base_addr = (uint32_t)DMAx;
6091   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_DTEIE);
6092 }
6093 
6094 /**
6095   * @brief Disable half transfer complete interrupt.
6096   * @note  This API is used for all available DMA channels.
6097   * @rmtoll CCR           HTIE         LL_DMA_DisableIT_HT
6098   * @param  DMAx DMAx Instance
6099   * @param  Channel This parameter can be one of the following values:
6100   *         @arg @ref LL_DMA_CHANNEL_0
6101   *         @arg @ref LL_DMA_CHANNEL_1
6102   *         @arg @ref LL_DMA_CHANNEL_2
6103   *         @arg @ref LL_DMA_CHANNEL_3
6104   *         @arg @ref LL_DMA_CHANNEL_4
6105   *         @arg @ref LL_DMA_CHANNEL_5
6106   *         @arg @ref LL_DMA_CHANNEL_6
6107   *         @arg @ref LL_DMA_CHANNEL_7
6108   * @retval None.
6109   */
LL_DMA_DisableIT_HT(const DMA_TypeDef * DMAx,uint32_t Channel)6110 __STATIC_INLINE void LL_DMA_DisableIT_HT(const DMA_TypeDef *DMAx, uint32_t Channel)
6111 {
6112   uint32_t dma_base_addr = (uint32_t)DMAx;
6113   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_HTIE);
6114 }
6115 
6116 /**
6117   * @brief Disable transfer complete interrupt.
6118   * @note  This API is used for all available DMA channels.
6119   * @rmtoll CCR           TCIE         LL_DMA_DisableIT_TC
6120   * @param  DMAx DMAx Instance
6121   * @param  Channel This parameter can be one of the following values:
6122   *         @arg @ref LL_DMA_CHANNEL_0
6123   *         @arg @ref LL_DMA_CHANNEL_1
6124   *         @arg @ref LL_DMA_CHANNEL_2
6125   *         @arg @ref LL_DMA_CHANNEL_3
6126   *         @arg @ref LL_DMA_CHANNEL_4
6127   *         @arg @ref LL_DMA_CHANNEL_5
6128   *         @arg @ref LL_DMA_CHANNEL_6
6129   *         @arg @ref LL_DMA_CHANNEL_7
6130   * @retval None.
6131   */
LL_DMA_DisableIT_TC(const DMA_TypeDef * DMAx,uint32_t Channel)6132 __STATIC_INLINE void LL_DMA_DisableIT_TC(const DMA_TypeDef *DMAx, uint32_t Channel)
6133 {
6134   uint32_t dma_base_addr = (uint32_t)DMAx;
6135   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TCIE);
6136 }
6137 
6138 /**
6139   * @brief Check if trigger overrun interrupt is enabled.
6140   * @note  This API is used for all available DMA channels.
6141   * @rmtoll CCR           TOIE       LL_DMA_IsEnabledIT_TO
6142   * @param  DMAx DMAx Instance
6143   * @param  Channel This parameter can be one of the following values:
6144   *         @arg @ref LL_DMA_CHANNEL_0
6145   *         @arg @ref LL_DMA_CHANNEL_1
6146   *         @arg @ref LL_DMA_CHANNEL_2
6147   *         @arg @ref LL_DMA_CHANNEL_3
6148   *         @arg @ref LL_DMA_CHANNEL_4
6149   *         @arg @ref LL_DMA_CHANNEL_5
6150   *         @arg @ref LL_DMA_CHANNEL_6
6151   *         @arg @ref LL_DMA_CHANNEL_7
6152   * @retval State of bit (1 or 0).
6153   */
LL_DMA_IsEnabledIT_TO(const DMA_TypeDef * DMAx,uint32_t Channel)6154 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TO(const DMA_TypeDef *DMAx, uint32_t Channel)
6155 {
6156   uint32_t dma_base_addr = (uint32_t)DMAx;
6157   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TOIE)
6158            == DMA_CCR_TOIE) ? 1UL : 0UL);
6159 }
6160 
6161 /**
6162   * @brief Check if suspension interrupt is enabled.
6163   * @note  This API is used for all available DMA channels.
6164   * @rmtoll CCR           SUSPIE       LL_DMA_IsEnabledIT_SUSP
6165   * @param  DMAx DMAx Instance
6166   * @param  Channel This parameter can be one of the following values:
6167   *         @arg @ref LL_DMA_CHANNEL_0
6168   *         @arg @ref LL_DMA_CHANNEL_1
6169   *         @arg @ref LL_DMA_CHANNEL_2
6170   *         @arg @ref LL_DMA_CHANNEL_3
6171   *         @arg @ref LL_DMA_CHANNEL_4
6172   *         @arg @ref LL_DMA_CHANNEL_5
6173   *         @arg @ref LL_DMA_CHANNEL_6
6174   *         @arg @ref LL_DMA_CHANNEL_7
6175   * @retval State of bit (1 or 0).
6176   */
LL_DMA_IsEnabledIT_SUSP(const DMA_TypeDef * DMAx,uint32_t Channel)6177 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_SUSP(const DMA_TypeDef *DMAx, uint32_t Channel)
6178 {
6179   uint32_t dma_base_addr = (uint32_t)DMAx;
6180   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_SUSPIE)
6181            == DMA_CCR_SUSPIE) ? 1UL : 0UL);
6182 }
6183 
6184 /**
6185   * @brief Check if user setting error interrupt is enabled.
6186   * @note  This API is used for all available DMA channels.
6187   * @rmtoll CCR           USEIE        LL_DMA_IsEnabledIT_USE
6188   * @param  DMAx DMAx Instance
6189   * @param  Channel This parameter can be one of the following values:
6190   *         @arg @ref LL_DMA_CHANNEL_0
6191   *         @arg @ref LL_DMA_CHANNEL_1
6192   *         @arg @ref LL_DMA_CHANNEL_2
6193   *         @arg @ref LL_DMA_CHANNEL_3
6194   *         @arg @ref LL_DMA_CHANNEL_4
6195   *         @arg @ref LL_DMA_CHANNEL_5
6196   *         @arg @ref LL_DMA_CHANNEL_6
6197   *         @arg @ref LL_DMA_CHANNEL_7
6198   * @retval State of bit (1 or 0).
6199   */
LL_DMA_IsEnabledIT_USE(const DMA_TypeDef * DMAx,uint32_t Channel)6200 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_USE(const DMA_TypeDef *DMAx, uint32_t Channel)
6201 {
6202   uint32_t dma_base_addr = (uint32_t)DMAx;
6203   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_USEIE)
6204            == DMA_CCR_USEIE) ? 1UL : 0UL);
6205 }
6206 
6207 /**
6208   * @brief Check if update link transfer error interrupt is enabled.
6209   * @note  This API is used for all available DMA channels.
6210   * @rmtoll CCR        ULEIE         LL_DMA_IsEnabledIT_ULE
6211   * @param  DMAx DMAx Instance
6212   * @param  Channel This parameter can be one of the following values:
6213   *         @arg @ref LL_DMA_CHANNEL_0
6214   *         @arg @ref LL_DMA_CHANNEL_1
6215   *         @arg @ref LL_DMA_CHANNEL_2
6216   *         @arg @ref LL_DMA_CHANNEL_3
6217   *         @arg @ref LL_DMA_CHANNEL_4
6218   *         @arg @ref LL_DMA_CHANNEL_5
6219   *         @arg @ref LL_DMA_CHANNEL_6
6220   *         @arg @ref LL_DMA_CHANNEL_7
6221   * @retval State of bit (1 or 0).
6222   */
LL_DMA_IsEnabledIT_ULE(const DMA_TypeDef * DMAx,uint32_t Channel)6223 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_ULE(const DMA_TypeDef *DMAx, uint32_t Channel)
6224 {
6225   uint32_t dma_base_addr = (uint32_t)DMAx;
6226   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_ULEIE)
6227            == DMA_CCR_ULEIE) ? 1UL : 0UL);
6228 }
6229 
6230 /**
6231   * @brief Check if data transfer error interrupt is enabled.
6232   * @note  This API is used for all available DMA channels.
6233   * @rmtoll CCR        DTEIE         LL_DMA_IsEnabledIT_DTE
6234   * @param  DMAx DMAx Instance
6235   * @param  Channel This parameter can be one of the following values:
6236   *         @arg @ref LL_DMA_CHANNEL_0
6237   *         @arg @ref LL_DMA_CHANNEL_1
6238   *         @arg @ref LL_DMA_CHANNEL_2
6239   *         @arg @ref LL_DMA_CHANNEL_3
6240   *         @arg @ref LL_DMA_CHANNEL_4
6241   *         @arg @ref LL_DMA_CHANNEL_5
6242   *         @arg @ref LL_DMA_CHANNEL_6
6243   *         @arg @ref LL_DMA_CHANNEL_7
6244   * @retval State of bit (1 or 0).
6245   */
LL_DMA_IsEnabledIT_DTE(const DMA_TypeDef * DMAx,uint32_t Channel)6246 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_DTE(const DMA_TypeDef *DMAx, uint32_t Channel)
6247 {
6248   uint32_t dma_base_addr = (uint32_t)DMAx;
6249   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_DTEIE)
6250            == DMA_CCR_DTEIE) ? 1UL : 0UL);
6251 }
6252 
6253 /**
6254   * @brief Check if half transfer complete interrupt is enabled.
6255   * @note  This API is used for all available DMA channels.
6256   * @rmtoll CCR        HTIE         LL_DMA_IsEnabledIT_HT
6257   * @param  DMAx DMAx Instance
6258   * @param  Channel This parameter can be one of the following values:
6259   *         @arg @ref LL_DMA_CHANNEL_0
6260   *         @arg @ref LL_DMA_CHANNEL_1
6261   *         @arg @ref LL_DMA_CHANNEL_2
6262   *         @arg @ref LL_DMA_CHANNEL_3
6263   *         @arg @ref LL_DMA_CHANNEL_4
6264   *         @arg @ref LL_DMA_CHANNEL_5
6265   *         @arg @ref LL_DMA_CHANNEL_6
6266   *         @arg @ref LL_DMA_CHANNEL_7
6267   * @retval State of bit (1 or 0).
6268   */
LL_DMA_IsEnabledIT_HT(const DMA_TypeDef * DMAx,uint32_t Channel)6269 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_HT(const DMA_TypeDef *DMAx, uint32_t Channel)
6270 {
6271   uint32_t dma_base_addr = (uint32_t)DMAx;
6272   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_HTIE)
6273            == DMA_CCR_HTIE) ? 1UL : 0UL);
6274 }
6275 
6276 /**
6277   * @brief Check if transfer complete interrupt is enabled.
6278   * @note  This API is used for all available DMA channels.
6279   * @rmtoll CCR        TCIE         LL_DMA_IsEnabledIT_TC
6280   * @param  DMAx DMAx Instance
6281   * @param  Channel This parameter can be one of the following values:
6282   *         @arg @ref LL_DMA_CHANNEL_0
6283   *         @arg @ref LL_DMA_CHANNEL_1
6284   *         @arg @ref LL_DMA_CHANNEL_2
6285   *         @arg @ref LL_DMA_CHANNEL_3
6286   *         @arg @ref LL_DMA_CHANNEL_4
6287   *         @arg @ref LL_DMA_CHANNEL_5
6288   *         @arg @ref LL_DMA_CHANNEL_6
6289   *         @arg @ref LL_DMA_CHANNEL_7
6290   * @retval State of bit (1 or 0).
6291   */
LL_DMA_IsEnabledIT_TC(const DMA_TypeDef * DMAx,uint32_t Channel)6292 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TC(const DMA_TypeDef *DMAx, uint32_t Channel)
6293 {
6294   uint32_t dma_base_addr = (uint32_t)DMAx;
6295   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TCIE)
6296            == DMA_CCR_TCIE) ? 1UL : 0UL);
6297 }
6298 /**
6299   * @}
6300   */
6301 
6302 #if defined (USE_FULL_LL_DRIVER)
6303 /** @defgroup DMA_LL_EF_Init Initialization and de-initialization functions
6304   * @{
6305   */
6306 uint32_t LL_DMA_Init(DMA_TypeDef *DMAx, uint32_t Channel, LL_DMA_InitTypeDef *DMA_InitStruct);
6307 uint32_t LL_DMA_DeInit(DMA_TypeDef *DMAx, uint32_t Channel);
6308 
6309 void     LL_DMA_StructInit(LL_DMA_InitTypeDef *DMA_InitStruct);
6310 void     LL_DMA_ListStructInit(LL_DMA_InitLinkedListTypeDef *DMA_InitLinkedListStruct);
6311 void     LL_DMA_NodeStructInit(LL_DMA_InitNodeTypeDef *DMA_InitNodeStruct);
6312 
6313 uint32_t LL_DMA_List_Init(DMA_TypeDef *DMAx, uint32_t Channel,
6314                           LL_DMA_InitLinkedListTypeDef *DMA_InitLinkedListStruct);
6315 uint32_t LL_DMA_List_DeInit(DMA_TypeDef *DMAx, uint32_t Channel);
6316 
6317 uint32_t LL_DMA_CreateLinkNode(LL_DMA_InitNodeTypeDef *DMA_InitNodeStruct, LL_DMA_LinkNodeTypeDef *pNode);
6318 void     LL_DMA_ConnectLinkNode(LL_DMA_LinkNodeTypeDef *pPrevLinkNode, uint32_t PrevNodeCLLRIdx,
6319                                 LL_DMA_LinkNodeTypeDef *pNewLinkNode, uint32_t NewNodeCLLRIdx);
6320 void     LL_DMA_DisconnectNextLinkNode(LL_DMA_LinkNodeTypeDef *pLinkNode, uint32_t LinkNodeCLLRIdx);
6321 /**
6322   * @}
6323   */
6324 #endif /* USE_FULL_LL_DRIVER */
6325 
6326 /**
6327   * @}
6328   */
6329 
6330 /**
6331   * @}
6332   */
6333 
6334 #endif /* GPDMA1 */
6335 
6336 /**
6337   * @}
6338   */
6339 
6340 #ifdef __cplusplus
6341 }
6342 #endif /* __cplusplus */
6343 
6344 #endif /* STM32H5xx_LL_DMA_H */
6345