1 /**
2 ******************************************************************************
3 * @file stm32wbaxx_ll_dma.h
4 * @author MCD Application Team
5 * @brief Header file of DMA LL module.
6 ******************************************************************************
7 * @attention
8 *
9 * Copyright (c) 2022 STMicroelectronics.
10 * All rights reserved.
11 *
12 * This software is licensed under terms that can be found in the LICENSE file
13 * in the root directory of this software component.
14 * If no LICENSE file comes with this software, it is provided AS-IS.
15 *
16 ******************************************************************************
17 @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 STM32WBAxx_LL_DMA_H
41 #define STM32WBAxx_LL_DMA_H
42
43 #ifdef __cplusplus
44 extern "C" {
45 #endif /* __cplusplus */
46
47 /* Includes ------------------------------------------------------------------*/
48 #include "stm32wbaxx.h"
49
50 /** @addtogroup STM32WBAxx_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 /* Array used to get the DMA Channel register offset versus Channel index LL_DMA_CHANNEL_x */
76 static const uint32_t LL_DMA_CH_OFFSET_TAB[] =
77 {
78 DMA_CHANNEL0_OFFSET, DMA_CHANNEL1_OFFSET, DMA_CHANNEL2_OFFSET, DMA_CHANNEL3_OFFSET,
79 DMA_CHANNEL4_OFFSET, DMA_CHANNEL5_OFFSET, DMA_CHANNEL6_OFFSET, DMA_CHANNEL7_OFFSET,
80 };
81
82 /**
83 * @}
84 */
85
86 /* Private constants ---------------------------------------------------------*/
87 /* Private macros ------------------------------------------------------------*/
88 /* Exported types ------------------------------------------------------------*/
89
90 #if defined (USE_FULL_LL_DRIVER)
91 /** @defgroup DMA_LL_ES_INIT DMA Exported Init structure
92 * @{
93 */
94
95 /**
96 * @brief LL DMA init structure definition.
97 */
98 typedef struct
99 {
100 uint32_t SrcAddress; /*!< This field specify the data transfer source address.
101 Programming this field is mandatory for all available DMA channels.
102 This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF.
103 This feature can be modified afterwards using unitary function
104 @ref LL_DMA_SetSrcAddress(). */
105
106 uint32_t DestAddress; /*!< This field specify the data transfer destination address.
107 Programming this field is mandatory for all available DMA channels.
108 This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF.
109 This feature can be modified afterwards using unitary function
110 @ref LL_DMA_SetDestAddress(). */
111
112 uint32_t Direction; /*!< This field specify the data transfer direction.
113 Programming this field is mandatory for all available DMA channels.
114 This parameter can be a value of @ref DMA_LL_EC_TRANSFER_DIRECTION.
115 This feature can be modified afterwards using unitary function
116 @ref LL_DMA_SetDataTransferDirection(). */
117
118 uint32_t BlkHWRequest; /*!< This field specify the hardware request unity.
119 Programming this field is mandatory for all available DMA channels.
120 This parameter can be a value of @ref DMA_LL_EC_BLKHW_REQUEST.
121 This feature can be modified afterwards using unitary function
122 @ref LL_DMA_SetBlkHWRequest(). */
123
124 uint32_t DataAlignment; /*!< This field specify the transfer data alignment.
125 Programming this field is mandatory for all available DMA channels.
126 This parameter can be a value of @ref DMA_LL_EC_DATA_ALIGNMENT.
127 This feature can be modified afterwards using unitary function
128 @ref LL_DMA_SetDataAlignment(). */
129
130 uint32_t SrcBurstLength; /*!< This field specify the source burst length of transfer in bytes.
131 Programming this field is mandatory for all available DMA channels.
132 This parameter must be a value between Min_Data = 1 and Max_Data = 64.
133 This feature can be modified afterwards using unitary function
134 @ref LL_DMA_SetSrcBurstLength(). */
135
136 uint32_t DestBurstLength; /*!< This field specify the destination burst length of transfer in bytes.
137 Programming this field is mandatory for all available DMA channels.
138 This parameter must be a value between Min_Data = 1 and Max_Data = 64.
139 This feature can be modified afterwards using unitary function
140 @ref LL_DMA_SetDestBurstLength(). */
141
142 uint32_t SrcDataWidth; /*!< This field specify the source data width.
143 Programming this field is mandatory for all available DMA channels.
144 This parameter can be a value of @ref DMA_LL_EC_SOURCE_DATA_WIDTH.
145 This feature can be modified afterwards using unitary function
146 @ref LL_DMA_SetSrcDataWidth(). */
147
148 uint32_t DestDataWidth; /*!< This field specify the destination data width.
149 Programming this field is mandatory for all available DMA channels.
150 This parameter can be a value of @ref DMA_LL_EC_DESTINATION_DATA_WIDTH.
151 This feature can be modified afterwards using unitary function
152 @ref LL_DMA_SetDestDataWidth(). */
153
154 uint32_t SrcIncMode; /*!< This field specify the source burst increment mode.
155 Programming this field is mandatory for all available DMA channels.
156 This parameter can be a value of @ref DMA_LL_EC_SOURCE_INCREMENT_MODE.
157 This feature can be modified afterwards using unitary function
158 @ref LL_DMA_SetSrcIncMode(). */
159
160 uint32_t DestIncMode; /*!< This field specify the destination burst increment mode.
161 Programming this field is mandatory for all available DMA channels.
162 This parameter can be a value of @ref DMA_LL_EC_DESTINATION_INCREMENT_MODE.
163 This feature can be modified afterwards using unitary function
164 @ref LL_DMA_SetDestIncMode(). */
165
166 uint32_t Priority; /*!< This field specify the channel priority level.
167 Programming this field is mandatory for all available DMA channels.
168 This parameter can be a value of @ref DMA_LL_EC_PRIORITY_LEVEL.
169 This feature can be modified afterwards using unitary function
170 @ref LL_DMA_SetChannelPriorityLevel(). */
171
172 uint32_t BlkDataLength; /*!< This field specify the length of a block transfer in bytes.
173 Programming this field is mandatory for all available DMA channels.
174 This parameter must be a value between Min_Data = 0 and Max_Data = 0x0000FFFF.
175 This feature can be modified afterwards using unitary function
176 @ref LL_DMA_SetBlkDataLength(). */
177
178 uint32_t TriggerMode; /*!< This field specify the trigger mode.
179 Programming this field is mandatory for all available DMA channels.
180 This parameter can be a value of @ref DMA_LL_EC_TRIGGER_MODE.
181 This feature can be modified afterwards using unitary function
182 @ref LL_DMA_SetTriggerMode(). */
183
184 uint32_t TriggerPolarity; /*!< This field specify the trigger event polarity.
185 Programming this field is mandatory for all available DMA channels.
186 This parameter can be a value of @ref DMA_LL_EC_TRIGGER_POLARITY.
187 This feature can be modified afterwards using unitary function
188 @ref LL_DMA_SetTriggerPolarity(). */
189
190 uint32_t TriggerSelection; /*!< This field specify the trigger event selection.
191 Programming this field is mandatory for all available DMA channels.
192 This parameter can be a value of @ref DMA_LL_EC_TRIGGER_SELECTION.
193 This feature can be modified afterwards using unitary function
194 @ref LL_DMA_SetHWTrigger(). */
195
196 uint32_t Request; /*!< This field specify the peripheral request selection.
197 Programming this field is mandatory for all available DMA channels.
198 This parameter can be a value of @ref DMA_LL_EC_REQUEST_SELECTION.
199 This feature can be modified afterwards using unitary function
200 @ref LL_DMA_SetPeriphRequest(). */
201
202 uint32_t TransferEventMode; /*!< This field specify the transfer event mode.
203 Programming this field is mandatory for all available DMA channels.
204 This parameter can be a value of @ref DMA_LL_EC_TRANSFER_EVENT_MODE.
205 This feature can be modified afterwards using unitary function
206 @ref LL_DMA_SetTransferEventMode(). */
207
208 uint32_t DestHWordExchange; /*!< This field specify the destination half word exchange.
209 Programming this field is mandatory for all available DMA channels.
210 This parameter can be a value of @ref DMA_LL_EC_DEST_HALFWORD_EXCHANGE.
211 This feature can be modified afterwards using unitary function
212 @ref LL_DMA_SetDestHWordExchange(). */
213
214 uint32_t DestByteExchange; /*!< This field specify the destination byte exchange.
215 Programming this field is mandatory for all available DMA channels.
216 This parameter can be a value of @ref DMA_LL_EC_DEST_BYTE_EXCHANGE.
217 This feature can be modified afterwards using unitary function
218 @ref LL_DMA_SetDestByteExchange(). */
219
220 uint32_t SrcByteExchange; /*!< This field specify the source byte exchange.
221 Programming this field is mandatory for all available DMA channels.
222 This parameter can be a value of @ref DMA_LL_EC_SRC_BYTE_EXCHANGE.
223 This feature can be modified afterwards using unitary function
224 @ref LL_DMA_SetSrcByteExchange(). */
225
226 uint32_t SrcAllocatedPort; /*!< This field specify the source allocated port.
227 Programming this field is mandatory for all available DMA channels.
228 This parameter can be a value of @ref DMA_LL_EC_SOURCE_ALLOCATED_PORT.
229 This feature can be modified afterwards using unitary function
230 @ref LL_DMA_SetSrcAllocatedPort(). */
231
232 uint32_t DestAllocatedPort; /*!< This field specify the destination allocated port.
233 Programming this field is mandatory for all available DMA channels.
234 This parameter can be a value of @ref DMA_LL_EC_DESTINATION_ALLOCATED_PORT.
235 This feature can be modified afterwards using unitary function
236 @ref LL_DMA_SetDestAllocatedPort(). */
237
238 uint32_t LinkAllocatedPort; /*!< This field specify the linked-list allocated port.
239 Programming this field is mandatory for all available DMA channels.
240 This parameter can be a value of @ref DMA_LL_EC_LINKED_LIST_ALLOCATED_PORT.
241 This feature can be modified afterwards using unitary function
242 @ref LL_DMA_SetLinkAllocatedPort(). */
243
244 uint32_t LinkStepMode; /*!< This field specify the link step mode.
245 Programming this field is mandatory for all available DMA channels.
246 This parameter can be a value of @ref DMA_LL_EC_LINK_STEP_MODE.
247 This feature can be modified afterwards using unitary function
248 @ref LL_DMA_SetLinkStepMode(). */
249
250 uint32_t LinkedListBaseAddr; /*!< This field specify the linked list base address.
251 Programming this field is mandatory for all available DMA channels.
252 This parameter can be a value Between 0 to 0xFFFF0000 (where the 4 first
253 bytes are always forced to 0).
254 This feature can be modified afterwards using unitary function
255 @ref LL_DMA_SetLinkedListBaseAddr(). */
256
257 uint32_t LinkedListAddrOffset; /*!< Specifies the linked list address offset.
258 Programming this field is mandatory for all available DMA channels.
259 This parameter can be a value Between 0 to 0x0000FFFC.
260 This feature can be modified afterwards using unitary function
261 @ref LL_DMA_SetLinkedListAddrOffset(). */
262
263 } LL_DMA_InitTypeDef;
264
265
266 /**
267 * @brief LL DMA init linked list structure definition.
268 */
269 typedef struct
270 {
271 uint32_t Priority; /*!< This field specify the channel priority level.
272 Programming this field is mandatory for all available DMA channels.
273 This parameter can be a value of @ref DMA_LL_EC_PRIORITY_LEVEL.
274 This feature can be modified afterwards using unitary function
275 @ref LL_DMA_SetChannelPriorityLevel(). */
276
277 uint32_t LinkStepMode; /*!< This field specify the link step mode.
278 Programming this field is mandatory for all available DMA channels.
279 This parameter can be a value of @ref DMA_LL_EC_LINK_STEP_MODE.
280 This feature can be modified afterwards using unitary function
281 @ref LL_DMA_SetLinkStepMode(). */
282
283 uint32_t LinkAllocatedPort; /*!< This field specify the linked-list allocated port.
284 Programming this field is mandatory for all available DMA channels.
285 This parameter can be a value of @ref DMA_LL_EC_LINKED_LIST_ALLOCATED_PORT.
286 This feature can be modified afterwards using unitary function
287 @ref LL_DMA_SetLinkAllocatedPort(). */
288
289 uint32_t TransferEventMode; /*!< This field specify the transfer event mode.
290 Programming this field is mandatory for all available DMA channels.
291 This parameter can be a value of @ref DMA_LL_EC_TRANSFER_EVENT_MODE.
292 This feature can be modified afterwards using unitary function
293 @ref LL_DMA_SetTransferEventMode(). */
294 } LL_DMA_InitLinkedListTypeDef;
295
296
297 /**
298 * @brief LL DMA node init structure definition.
299 */
300 typedef struct
301 {
302 /* CTR1 register fields ******************************************************
303 If any CTR1 fields need to be updated comparing to previous node, it is
304 mandatory to update the new value in CTR1 register fields and enable update
305 CTR1 register in UpdateRegisters fields if it is not enabled in the
306 previous node.
307
308 */
309 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
310 uint32_t DestSecure; /*!< This field specify the destination secure.
311 This parameter can be a value of @ref DMA_LL_EC_DESTINATION_SECURITY_ATTRIBUTE. */
312 #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
313
314 uint32_t DestAllocatedPort; /*!< This field specify the destination allocated port.
315 This parameter can be a value of @ref DMA_LL_EC_DESTINATION_ALLOCATED_PORT. */
316
317 uint32_t DestHWordExchange; /*!< This field specify the destination half word exchange.
318 This parameter can be a value of @ref DMA_LL_EC_DEST_HALFWORD_EXCHANGE. */
319
320 uint32_t DestByteExchange; /*!< This field specify the destination byte exchange.
321 This parameter can be a value of @ref DMA_LL_EC_DEST_BYTE_EXCHANGE. */
322
323 uint32_t DestBurstLength; /*!< This field specify the destination burst length of transfer in bytes.
324 This parameter must be a value between Min_Data = 1 and Max_Data = 64. */
325
326 uint32_t DestIncMode; /*!< This field specify the destination increment mode.
327 This parameter can be a value of @ref DMA_LL_EC_DESTINATION_INCREMENT_MODE. */
328
329 uint32_t DestDataWidth; /*!< This field specify the destination data width.
330 This parameter can be a value of @ref DMA_LL_EC_DESTINATION_DATA_WIDTH. */
331
332 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
333 uint32_t SrcSecure; /*!< This field specify the source secure.
334 This parameter can be a value of @ref DMA_LL_EC_SOURCE_SECURITY_ATTRIBUTE. */
335 #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
336
337 uint32_t SrcAllocatedPort; /*!< This field specify the source allocated port.
338 This parameter can be a value of @ref DMA_LL_EC_SOURCE_ALLOCATED_PORT. */
339
340 uint32_t SrcByteExchange; /*!< This field specify the source byte exchange.
341 This parameter can be a value of @ref DMA_LL_EC_SRC_BYTE_EXCHANGE. */
342
343 uint32_t DataAlignment; /*!< This field specify the transfer data alignment.
344 This parameter can be a value of @ref DMA_LL_EC_DATA_ALIGNMENT. */
345
346 uint32_t SrcBurstLength; /*!< This field specify the source burst length of transfer in bytes.
347 This parameter must be a value between Min_Data = 1 and Max_Data = 64. */
348
349 uint32_t SrcIncMode; /*!< This field specify the source increment mode.
350 This parameter can be a value of @ref DMA_LL_EC_SOURCE_INCREMENT_MODE. */
351
352 uint32_t SrcDataWidth; /*!< This field specify the source data width.
353 This parameter can be a value of @ref DMA_LL_EC_SOURCE_DATA_WIDTH. */
354
355
356 /* CTR2 register fields ******************************************************
357 If any CTR2 fields need to be updated comparing to previous node, it is
358 mandatory to update the new value in CTR2 register fields and enable update
359 CTR2 register in UpdateRegisters fields if it is not enabled in the
360 previous node.
361
362 For all node created, filling all fields is mandatory.
363 */
364 uint32_t TransferEventMode; /*!< This field specify the transfer event mode.
365 This parameter can be a value of @ref DMA_LL_EC_TRANSFER_EVENT_MODE. */
366
367 uint32_t TriggerPolarity; /*!< This field specify the trigger event polarity.
368 This parameter can be a value of @ref DMA_LL_EC_TRIGGER_POLARITY. */
369
370 uint32_t TriggerSelection; /*!< This field specify the trigger event selection.
371 This parameter can be a value of @ref DMA_LL_EC_TRIGGER_SELECTION. */
372
373 uint32_t TriggerMode; /*!< This field specify the trigger mode.
374 This parameter can be a value of @ref DMA_LL_EC_TRIGGER_MODE. */
375
376 uint32_t BlkHWRequest; /*!< This field specify the hardware request unity.
377 This parameter can be a value of @ref DMA_LL_EC_BLKHW_REQUEST. */
378
379 uint32_t Direction; /*!< This field specify the transfer direction.
380 This parameter can be a value of @ref DMA_LL_EC_TRANSFER_DIRECTION. */
381
382 uint32_t Request; /*!< This field specify the peripheral request selection.
383 This parameter can be a value of @ref DMA_LL_EC_REQUEST_SELECTION. */
384
385
386 /* CBR1 register fields ******************************************************
387 If any CBR1 fields need to be updated comparing to previous node, it is
388 mandatory to update the new value in CBR1 register fields and enable update
389 CBR1 register in UpdateRegisters fields if it is not enabled in the
390 previous node.
391 */
392
393 uint32_t BlkDataLength; /*!< This field specify the length of a block transfer in bytes.
394 This parameter must be a value between Min_Data = 0
395 and Max_Data = 0x0000FFFF. */
396
397 /* CSAR register fields ******************************************************
398 If any CSAR fields need to be updated comparing to previous node, it is
399 mandatory to update the new value in CSAR register fields and enable update
400 CSAR register in UpdateRegisters fields if it is not enabled in the
401 previous node.
402
403 For all node created, filling all fields is mandatory.
404 */
405 uint32_t SrcAddress; /*!< This field specify the transfer source address.
406 This parameter must be a value between Min_Data = 0
407 and Max_Data = 0xFFFFFFFF. */
408
409
410 /* CDAR register fields ******************************************************
411 If any CDAR fields need to be updated comparing to previous node, it is
412 mandatory to update the new value in CDAR register fields and enable update
413 CDAR register in UpdateRegisters fields if it is not enabled in the
414 previous node.
415
416 For all node created, filling all fields is mandatory.
417 */
418 uint32_t DestAddress; /*!< This field specify the transfer destination address.
419 This parameter must be a value between Min_Data = 0
420 and Max_Data = 0xFFFFFFFF. */
421
422 /* CLLR register fields ******************************************************
423 If any CLLR fields need to be updated comparing to previous node, it is
424 mandatory to update the new value in CLLR register fields and enable update
425 CLLR register in UpdateRegisters fields if it is not enabled in the
426 previous node.
427 */
428 uint32_t UpdateRegisters; /*!< Specifies the linked list register update.
429 This parameter can be a value of @ref DMA_LL_EC_LINKEDLIST_REGISTER_UPDATE. */
430
431 /* DMA Node type field *******************************************************
432 This parameter defines node types as node size and node content varies
433 between channels.
434 Thanks to this fields, linked list queue could be created independently
435 from channel selection. So, one queue could be executed by all DMA channels.
436 */
437 uint32_t NodeType; /*!< Specifies the node type to be created.
438 This parameter can be a value of @ref DMA_LL_EC_LINKEDLIST_NODE_TYPE. */
439 } LL_DMA_InitNodeTypeDef;
440
441 /**
442 * @brief LL DMA linked list node structure definition.
443 * @note For GPDMA linear addressing channels, the maximum node size is :
444 * (4 Bytes * 6 registers = 24 Bytes).
445 */
446 typedef struct
447 {
448 __IO uint32_t LinkRegisters[6U];
449
450 } LL_DMA_LinkNodeTypeDef;
451 /**
452 * @}
453 */
454
455 #endif /* USE_FULL_LL_DRIVER */
456
457 /* Exported constants --------------------------------------------------------*/
458
459 /** @defgroup DMA_LL_Exported_Constants DMA Exported Constants
460 * @{
461 */
462
463 /** @defgroup DMA_LL_EC_CHANNEL Channel
464 * @{
465 */
466 #define LL_DMA_CHANNEL_0 (0x00U)
467 #define LL_DMA_CHANNEL_1 (0x01U)
468 #define LL_DMA_CHANNEL_2 (0x02U)
469 #define LL_DMA_CHANNEL_3 (0x03U)
470 #define LL_DMA_CHANNEL_4 (0x04U)
471 #define LL_DMA_CHANNEL_5 (0x05U)
472 #define LL_DMA_CHANNEL_6 (0x06U)
473 #define LL_DMA_CHANNEL_7 (0x07U)
474 #define LL_DMA_CHANNEL_8 (0x08U)
475 #define LL_DMA_CHANNEL_9 (0x09U)
476 #define LL_DMA_CHANNEL_10 (0x0AU)
477 #define LL_DMA_CHANNEL_11 (0x0BU)
478 #define LL_DMA_CHANNEL_12 (0x0CU)
479 #define LL_DMA_CHANNEL_13 (0x0DU)
480 #define LL_DMA_CHANNEL_14 (0x0EU)
481 #define LL_DMA_CHANNEL_15 (0x0FU)
482 #if defined (USE_FULL_LL_DRIVER)
483 #define LL_DMA_CHANNEL_ALL (0x10U)
484 #endif /* USE_FULL_LL_DRIVER */
485 /**
486 * @}
487 */
488
489 #if defined (USE_FULL_LL_DRIVER)
490 /** @defgroup DMA_LL_EC_CLLR_OFFSET CLLR offset
491 * @{
492 */
493 #define LL_DMA_CLLR_OFFSET0 (0x00U)
494 #define LL_DMA_CLLR_OFFSET1 (0x01U)
495 #define LL_DMA_CLLR_OFFSET2 (0x02U)
496 #define LL_DMA_CLLR_OFFSET3 (0x03U)
497 #define LL_DMA_CLLR_OFFSET4 (0x04U)
498 #define LL_DMA_CLLR_OFFSET5 (0x05U)
499 #define LL_DMA_CLLR_OFFSET6 (0x06U)
500 #define LL_DMA_CLLR_OFFSET7 (0x07U)
501 /**
502 * @}
503 */
504 #endif /* USE_FULL_LL_DRIVER */
505
506 /** @defgroup DMA_LL_EC_PRIORITY_LEVEL Priority Level
507 * @{
508 */
509 #define LL_DMA_LOW_PRIORITY_LOW_WEIGHT 0x00000000U /*!< Priority level : Low Priority, Low Weight */
510 #define LL_DMA_LOW_PRIORITY_MID_WEIGHT DMA_CCR_PRIO_0 /*!< Priority level : Low Priority, Mid Weight */
511 #define LL_DMA_LOW_PRIORITY_HIGH_WEIGHT DMA_CCR_PRIO_1 /*!< Priority level : Low Priority, High Weight */
512 #define LL_DMA_HIGH_PRIORITY DMA_CCR_PRIO /*!< Priority level : High Priority */
513 /**
514 * @}
515 */
516
517 /** @defgroup DMA_LL_EC_LINKED_LIST_ALLOCATED_PORT Linked List Allocated Port
518 * @{
519 */
520 #define LL_DMA_LINK_ALLOCATED_PORT0 0x00000000U /*!< Linked List Allocated Port 0 */
521 #define LL_DMA_LINK_ALLOCATED_PORT1 DMA_CCR_LAP /*!< Linked List Allocated Port 1 */
522 /**
523 * @}
524 */
525
526 /** @defgroup DMA_LL_EC_LINK_STEP_MODE Link Step Mode
527 * @{
528 */
529 #define LL_DMA_LSM_FULL_EXECUTION 0x00000000U /*!< Channel execute the full linked list */
530 #define LL_DMA_LSM_1LINK_EXECUTION DMA_CCR_LSM /*!< Channel execute one node of the linked list */
531 /**
532 * @}
533 */
534
535 /** @defgroup DMA_LL_EC_DEST_HALFWORD_EXCHANGE Destination Half-Word Exchange
536 * @{
537 */
538 #define LL_DMA_DEST_HALFWORD_PRESERVE 0x00000000U /*!< No destination Half-Word exchange when destination data width
539 is word */
540 #define LL_DMA_DEST_HALFWORD_EXCHANGE DMA_CTR1_DHX /*!< Destination Half-Word exchange when destination data width
541 is word */
542 /**
543 * @}
544 */
545
546 /** @defgroup DMA_LL_EC_DEST_BYTE_EXCHANGE Destination Byte Exchange
547 * @{
548 */
549 #define LL_DMA_DEST_BYTE_PRESERVE 0x00000000U /*!< No destination Byte exchange when destination data width > Byte */
550 #define LL_DMA_DEST_BYTE_EXCHANGE DMA_CTR1_DBX /*!< Destination Byte exchange when destination data width > Byte */
551 /**
552 * @}
553 */
554
555 /** @defgroup DMA_LL_EC_SRC_BYTE_EXCHANGE Source Byte Exchange
556 * @{
557 */
558 #define LL_DMA_SRC_BYTE_PRESERVE 0x00000000U /*!< No source Byte exchange when source data width is word */
559 #define LL_DMA_SRC_BYTE_EXCHANGE DMA_CTR1_SBX /*!< Source Byte exchange when source data width is word */
560 /**
561 * @}
562 */
563
564 /** @defgroup DMA_LL_EC_SOURCE_ALLOCATED_PORT Source Allocated Port
565 * @{
566 */
567 #define LL_DMA_SRC_ALLOCATED_PORT0 0x00000000U /*!< Source Allocated Port 0 */
568 #define LL_DMA_SRC_ALLOCATED_PORT1 DMA_CTR1_SAP /*!< Source Allocated Port 1 */
569 /**
570 * @}
571 */
572
573 /** @defgroup DMA_LL_EC_DESTINATION_ALLOCATED_PORT Destination Allocated Port
574 * @{
575 */
576 #define LL_DMA_DEST_ALLOCATED_PORT0 0x00000000U /*!< Destination Allocated Port 0 */
577 #define LL_DMA_DEST_ALLOCATED_PORT1 DMA_CTR1_DAP /*!< Destination Allocated Port 1 */
578 /**
579 * @}
580 */
581
582 /** @defgroup DMA_LL_EC_DESTINATION_INCREMENT_MODE Destination Increment Mode
583 * @{
584 */
585 #define LL_DMA_DEST_FIXED 0x00000000U /*!< Destination fixed single/burst */
586 #define LL_DMA_DEST_INCREMENT DMA_CTR1_DINC /*!< Destination incremented single/burst */
587 /**
588 * @}
589 */
590
591 /** @defgroup DMA_LL_EC_DESTINATION_DATA_WIDTH Destination Data Width
592 * @{
593 */
594 #define LL_DMA_DEST_DATAWIDTH_BYTE 0x00000000U /*!< Destination Data Width : Byte */
595 #define LL_DMA_DEST_DATAWIDTH_HALFWORD DMA_CTR1_DDW_LOG2_0 /*!< Destination Data Width : HalfWord */
596 #define LL_DMA_DEST_DATAWIDTH_WORD DMA_CTR1_DDW_LOG2_1 /*!< Destination Data Width : Word */
597 /**
598 * @}
599 */
600
601 /** @defgroup DMA_LL_EC_DATA_ALIGNMENT Data Alignment
602 * @{
603 */
604 #define LL_DMA_DATA_ALIGN_ZEROPADD 0x00000000U /*!< If src data width < dest data width :
605 => Right Aligned padded with 0 up to destination
606 data width.
607 If src data width > dest data width :
608 => Right Aligned Left Truncated down to destination
609 data width. */
610 #define LL_DMA_DATA_ALIGN_SIGNEXTPADD DMA_CTR1_PAM_0 /*!< If src data width < dest data width :
611 => Right Aligned padded with sign extended up to destination
612 data width.
613 If src data width > dest data width :
614 => Left Aligned Right Truncated down to the destination
615 data width */
616 #define LL_DMA_DATA_PACK_UNPACK DMA_CTR1_PAM_1 /*!< If src data width < dest data width :
617 => Packed at the destination data width
618 If src data width > dest data width :
619 => Unpacked at the destination data width */
620 /**
621 * @}
622 */
623
624 /** @defgroup DMA_LL_EC_SOURCE_INCREMENT_MODE Source Increment Mode
625 * @{
626 */
627 #define LL_DMA_SRC_FIXED 0x00000000U /*!< Source fixed single/burst */
628 #define LL_DMA_SRC_INCREMENT DMA_CTR1_SINC /*!< Source incremented single/burst */
629 /**
630 * @}
631 */
632
633 /** @defgroup DMA_LL_EC_SOURCE_DATA_WIDTH Source Data Width
634 * @{
635 */
636 #define LL_DMA_SRC_DATAWIDTH_BYTE 0x00000000U /*!< Source Data Width : Byte */
637 #define LL_DMA_SRC_DATAWIDTH_HALFWORD DMA_CTR1_SDW_LOG2_0 /*!< Source Data Width : HalfWord */
638 #define LL_DMA_SRC_DATAWIDTH_WORD DMA_CTR1_SDW_LOG2_1 /*!< Source Data Width : Word */
639 /**
640 * @}
641 */
642
643 /** @defgroup DMA_LL_EC_BLKHW_REQUEST Block Hardware Request
644 * @{
645 */
646 #define LL_DMA_HWREQUEST_SINGLEBURST 0x00000000U /*!< Hardware request is driven by a peripheral with a hardware
647 request/acknowledge protocol at a burst level */
648 #define LL_DMA_HWREQUEST_BLK DMA_CTR2_BREQ /*!< Hardware request is driven by a peripheral with a hardware
649 request/acknowledge protocol at a block level */
650 /**
651 * @}
652 */
653
654 /** @defgroup DMA_LL_EC_TRANSFER_EVENT_MODE Transfer Event Mode
655 * @{
656 */
657 #define LL_DMA_TCEM_BLK_TRANSFER 0x00000000U /*!< The TC (and the HT) event is generated at the
658 (respectively half) end of each block */
659 #define LL_DMA_TCEM_RPT_BLK_TRANSFER DMA_CTR2_TCEM_0 /*!< The TC (and the HT) event is generated at the
660 (respectively half) end of the repeated block */
661 #define LL_DMA_TCEM_EACH_LLITEM_TRANSFER DMA_CTR2_TCEM_1 /*!< The TC (and the HT) event is generated at the
662 (respectively half) end of each linked-list item */
663 #define LL_DMA_TCEM_LAST_LLITEM_TRANSFER DMA_CTR2_TCEM /*!< The TC (and the HT) event is generated at the
664 (respectively half) end of the last linked-list item */
665 /**
666 * @}
667 */
668
669 /** @defgroup DMA_LL_EC_TRIGGER_POLARITY Trigger Polarity
670 * @{
671 */
672 #define LL_DMA_TRIG_POLARITY_MASKED 0x00000000U /*!< No trigger of the selected DMA request.
673 Masked trigger event */
674 #define LL_DMA_TRIG_POLARITY_RISING DMA_CTR2_TRIGPOL_0 /*!< Trigger of the selected DMA request on the rising
675 edge of the selected trigger event input */
676 #define LL_DMA_TRIG_POLARITY_FALLING DMA_CTR2_TRIGPOL_1 /*!< Trigger of the selected DMA request on the falling
677 edge of the selected trigger event input */
678 /**
679 * @}
680 */
681
682 /** @defgroup DMA_LL_EC_TRIGGER_MODE Transfer Trigger Mode
683 * @{
684 */
685 #define LL_DMA_TRIGM_BLK_TRANSFER 0x00000000U /*!< A block transfer is conditioned by (at least)
686 one hit trigger */
687 #define LL_DMA_TRIGM_RPT_BLK_TRANSFER DMA_CTR2_TRIGM_0 /*!< A repeated block transfer is conditioned by (at least)
688 one hit trigger */
689 #define LL_DMA_TRIGM_LLI_LINK_TRANSFER DMA_CTR2_TRIGM_1 /*!< A LLI link transfer is conditioned by (at least)
690 one hit trigger */
691 #define LL_DMA_TRIGM_SINGLBURST_TRANSFER DMA_CTR2_TRIGM /*!< A Single/Burst transfer is conditioned by (at least)
692 one hit trigger */
693 /**
694 * @}
695 */
696
697 /** @defgroup DMA_LL_EC_TRANSFER_DIRECTION Transfer Direction
698 * @{
699 */
700 #define LL_DMA_DIRECTION_MEMORY_TO_MEMORY DMA_CTR2_SWREQ /*!< Memory to memory direction */
701 #define LL_DMA_DIRECTION_PERIPH_TO_MEMORY 0x00000000U /*!< Peripheral to memory direction */
702 #define LL_DMA_DIRECTION_MEMORY_TO_PERIPH DMA_CTR2_DREQ /*!< Memory to peripheral direction */
703 /**
704 * @}
705 */
706
707
708 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
709 /** @defgroup DMA_LL_EC_SOURCE_SECURITY_ATTRIBUTE Source Security Attribute
710 * @{
711 */
712 #define LL_DMA_CHANNEL_NSEC 0x00000000U /*!< NSecure channel */
713 #define LL_DMA_CHANNEL_SEC 0x00000001U /*!< Secure channel */
714 /**
715 * @}
716 */
717
718 /** @defgroup DMA_LL_EC_SOURCE_SECURITY_ATTRIBUTE Source Security Attribute
719 * @{
720 */
721 #define LL_DMA_CHANNEL_SRC_NSEC 0x00000000U /*!< NSecure transfer from the source */
722 #define LL_DMA_CHANNEL_SRC_SEC DMA_CTR1_SSEC /*!< Secure transfer from the source */
723 /**
724 * @}
725 */
726
727 /** @defgroup DMA_LL_EC_DESTINATION_SECURITY_ATTRIBUTE Destination Security Attribute
728 * @{
729 */
730 #define LL_DMA_CHANNEL_DEST_NSEC 0x00000000U /*!< NSecure transfer from the destination */
731 #define LL_DMA_CHANNEL_DEST_SEC DMA_CTR1_DSEC /*!< Secure transfer from the destination */
732 /**
733 * @}
734 */
735 #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
736
737 /** @defgroup DMA_LL_EC_LINKEDLIST_NODE_TYPE Linked list node type
738 * @{
739 */
740 #define LL_DMA_GPDMA_LINEAR_NODE 0x01U /*!< GPDMA node : linear addressing node */
741
742 /**
743 * @}
744 */
745
746 /** @defgroup DMA_LL_EC_LINKEDLIST_REGISTER_UPDATE Linked list register update
747 * @{
748 */
749 #define LL_DMA_UPDATE_CTR1 DMA_CLLR_UT1 /*!< Update CTR1 register from memory :
750 available for all DMA channels */
751 #define LL_DMA_UPDATE_CTR2 DMA_CLLR_UT2 /*!< Update CTR2 register from memory :
752 available for all DMA channels */
753 #define LL_DMA_UPDATE_CBR1 DMA_CLLR_UB1 /*!< Update CBR1 register from memory :
754 available for all DMA channels */
755 #define LL_DMA_UPDATE_CSAR DMA_CLLR_USA /*!< Update CSAR register from memory :
756 available for all DMA channels */
757 #define LL_DMA_UPDATE_CDAR DMA_CLLR_UDA /*!< Update CDAR register from memory :
758 available for all DMA channels */
759 #define LL_DMA_UPDATE_CLLR DMA_CLLR_ULL /*!< Update CLLR register from memory :
760 available for all DMA channels */
761 /**
762 * @}
763 */
764
765 /** @defgroup DMA_LL_EC_REQUEST_SELECTION Request Selection
766 * @{
767 */
768 /* GPDMA1 Hardware Requests */
769 #define LL_GPDMA1_REQUEST_ADC4 0U /*!< GPDMA1 HW request is ADC4 */
770 #if defined (SPI1)
771 #define LL_GPDMA1_REQUEST_SPI1_RX 1U /*!< GPDMA1 HW request is SPI1_RX */
772 #define LL_GPDMA1_REQUEST_SPI1_TX 2U /*!< GPDMA1 HW request is SPI1_TX */
773 #endif /* SPI1 */
774 #define LL_GPDMA1_REQUEST_SPI3_RX 3U /*!< GPDMA1 HW request is SPI3_RX */
775 #define LL_GPDMA1_REQUEST_SPI3_TX 4U /*!< GPDMA1 HW request is SPI3_TX */
776 #if defined (I2C1)
777 #define LL_GPDMA1_REQUEST_I2C1_RX 5U /*!< GPDMA1 HW request is I2C1_RX */
778 #define LL_GPDMA1_REQUEST_I2C1_TX 6U /*!< GPDMA1 HW request is I2C1_TX */
779 #define LL_GPDMA1_REQUEST_I2C1_EVC 7U /*!< GPDMA1 HW request is I2C1_EVC */
780 #endif /* I2C1 */
781 #define LL_GPDMA1_REQUEST_I2C3_RX 8U /*!< GPDMA1 HW request is I2C3_RX */
782 #define LL_GPDMA1_REQUEST_I2C3_TX 9U /*!< GPDMA1 HW request is I2C3_TX */
783 #define LL_GPDMA1_REQUEST_I2C3_EVC 10U /*!< GPDMA1 HW request is I2C3_EVC */
784 #define LL_GPDMA1_REQUEST_USART1_RX 11U /*!< GPDMA1 HW request is USART1_RX */
785 #define LL_GPDMA1_REQUEST_USART1_TX 12U /*!< GPDMA1 HW request is USART1_TX */
786 #if defined (USART2)
787 #define LL_GPDMA1_REQUEST_USART2_RX 13U /*!< GPDMA1 HW request is USART2_RX */
788 #define LL_GPDMA1_REQUEST_USART2_TX 14U /*!< GPDMA1 HW request is USART2_TX */
789 #endif /* USART2 */
790 #define LL_GPDMA1_REQUEST_LPUART1_RX 15U /*!< GPDMA1 HW request is LPUART1_RX */
791 #define LL_GPDMA1_REQUEST_LPUART1_TX 16U /*!< GPDMA1 HW request is LPUART1_TX */
792 #if defined (SAI1)
793 #define LL_GPDMA1_REQUEST_SAI1_A 17U /*!< GPDMA1 HW request is SAI1_A */
794 #define LL_GPDMA1_REQUEST_SAI1_B 18U /*!< GPDMA1 HW request is SAI1_B */
795 #endif /* SAI1 */
796 #define LL_GPDMA1_REQUEST_TIM1_CH1 19U /*!< GPDMA1 HW request is TIM1_CH1 */
797 #define LL_GPDMA1_REQUEST_TIM1_CH2 20U /*!< GPDMA1 HW request is TIM1_CH2 */
798 #define LL_GPDMA1_REQUEST_TIM1_CH3 21U /*!< GPDMA1 HW request is TIM1_CH3 */
799 #define LL_GPDMA1_REQUEST_TIM1_CH4 22U /*!< GPDMA1 HW request is TIM1_CH4 */
800 #define LL_GPDMA1_REQUEST_TIM1_UP 23U /*!< GPDMA1 HW request is TIM1_UP */
801 #define LL_GPDMA1_REQUEST_TIM1_TRIG 24U /*!< GPDMA1 HW request is TIM1_TRIG */
802 #define LL_GPDMA1_REQUEST_TIM1_COM 25U /*!< GPDMA1 HW request is TIM1_COM */
803 #define LL_GPDMA1_REQUEST_TIM2_CH1 26U /*!< GPDMA1 HW request is TIM2_CH1 */
804 #define LL_GPDMA1_REQUEST_TIM2_CH2 27U /*!< GPDMA1 HW request is TIM2_CH2 */
805 #define LL_GPDMA1_REQUEST_TIM2_CH3 28U /*!< GPDMA1 HW request is TIM2_CH3 */
806 #define LL_GPDMA1_REQUEST_TIM2_CH4 29U /*!< GPDMA1 HW request is TIM2_CH4 */
807 #define LL_GPDMA1_REQUEST_TIM2_UP 30U /*!< GPDMA1 HW request is TIM2_UP */
808 #if defined (TIM3)
809 #define LL_GPDMA1_REQUEST_TIM3_CH1 31U /*!< GPDMA1 HW request is TIM3_CH1 */
810 #define LL_GPDMA1_REQUEST_TIM3_CH2 32U /*!< GPDMA1 HW request is TIM3_CH2 */
811 #define LL_GPDMA1_REQUEST_TIM3_CH3 33U /*!< GPDMA1 HW request is TIM3_CH3 */
812 #define LL_GPDMA1_REQUEST_TIM3_CH4 34U /*!< GPDMA1 HW request is TIM3_CH4 */
813 #define LL_GPDMA1_REQUEST_TIM3_UP 35U /*!< GPDMA1 HW request is TIM3_UP */
814 #define LL_GPDMA1_REQUEST_TIM3_TRIG 36U /*!< GPDMA1 HW request is TIM3_TRIG */
815 #endif /* TIM3 */
816 #define LL_GPDMA1_REQUEST_TIM16_CH1 37U /*!< GPDMA1 HW request is TIM16_CH1 */
817 #define LL_GPDMA1_REQUEST_TIM16_UP 38U /*!< GPDMA1 HW request is TIM16_UP */
818 #if defined (TIM17)
819 #define LL_GPDMA1_REQUEST_TIM17_CH1 39U /*!< GPDMA1 HW request is TIM17_CH1 */
820 #define LL_GPDMA1_REQUEST_TIM17_UP 40U /*!< GPDMA1 HW request is TIM17_UP */
821 #endif /* TIM17 */
822 #if defined (AES)
823 #define LL_GPDMA1_REQUEST_AES_IN 41U /*!< GPDMA1 HW request is AES_IN */
824 #define LL_GPDMA1_REQUEST_AES_OUT 42U /*!< GPDMA1 HW request is AES_OUT */
825 #endif /* AES */
826 #define LL_GPDMA1_REQUEST_HASH_IN 43U /*!< GPDMA1 HW request is HASH_IN */
827 #if defined (SAES)
828 #define LL_GPDMA1_REQUEST_SAES_IN 44U /*!< GPDMA1 HW request is SAES_IN */
829 #define LL_GPDMA1_REQUEST_SAES_OUT 45U /*!< GPDMA1 HW request is SAES_OUT */
830 #endif /* SAES */
831 #define LL_GPDMA1_REQUEST_LPTIM1_IC1 46U /*!< GPDMA1 HW request is LPTIM1_IC1 */
832 #define LL_GPDMA1_REQUEST_LPTIM1_IC2 47U /*!< GPDMA1 HW request is LPTIM1_IC2 */
833 #define LL_GPDMA1_REQUEST_LPTIM1_UE 48U /*!< GPDMA1 HW request is LPTIM1_UE */
834 #if defined (LPTIM2)
835 #define LL_GPDMA1_REQUEST_LPTIM2_IC1 49U /*!< GPDMA1 HW request is LPTIM2_IC1 */
836 #define LL_GPDMA1_REQUEST_LPTIM2_IC2 50U /*!< GPDMA1 HW request is LPTIM2_IC2 */
837 #define LL_GPDMA1_REQUEST_LPTIM2_UE 51U /*!< GPDMA1 HW request is LPTIM2_UE */
838 #endif /* LPTIM2 */
839 /**
840 * @}
841 */
842
843 /** @defgroup DMA_LL_EC_TRIGGER_SELECTION Trigger Selection
844 * @{
845 */
846 /* GPDMA1 Hardware Triggers */
847 #define LL_GPDMA1_TRIGGER_EXTI_LINE0 0U /*!< GPDMA1 HW Trigger signal is EXTI_LINE0 */
848 #define LL_GPDMA1_TRIGGER_EXTI_LINE1 1U /*!< GPDMA1 HW Trigger signal is EXTI_LINE1 */
849 #define LL_GPDMA1_TRIGGER_EXTI_LINE2 2U /*!< GPDMA1 HW Trigger signal is EXTI_LINE2 */
850 #define LL_GPDMA1_TRIGGER_EXTI_LINE3 3U /*!< GPDMA1 HW Trigger signal is EXTI_LINE3 */
851 #define LL_GPDMA1_TRIGGER_EXTI_LINE4 4U /*!< GPDMA1 HW Trigger signal is EXTI_LINE4 */
852 #define LL_GPDMA1_TRIGGER_EXTI_LINE5 5U /*!< GPDMA1 HW Trigger signal is EXTI_LINE5 */
853 #define LL_GPDMA1_TRIGGER_EXTI_LINE6 6U /*!< GPDMA1 HW Trigger signal is EXTI_LINE6 */
854 #define LL_GPDMA1_TRIGGER_EXTI_LINE7 7U /*!< GPDMA1 HW Trigger signal is EXTI_LINE7 */
855 #define LL_GPDMA1_TRIGGER_TAMP_TRG1 8U /*!< GPDMA1 HW Trigger signal is TAMP_TRG1 */
856 #define LL_GPDMA1_TRIGGER_TAMP_TRG2 9U /*!< GPDMA1 HW Trigger signal is TAMP_TRG2 */
857 #define LL_GPDMA1_TRIGGER_TAMP_TRG3 10U /*!< GPDMA1 HW Trigger signal is TAMP_TRG3 */
858 #define LL_GPDMA1_TRIGGER_LPTIM1_CH1 11U /*!< GPDMA1 HW Trigger signal is LPTIM1_CH1 */
859 #define LL_GPDMA1_TRIGGER_LPTIM1_CH2 12U /*!< GPDMA1 HW Trigger signal is LPTIM1_CH2 */
860 #if defined (LPTIM2)
861 #define LL_GPDMA1_TRIGGER_LPTIM2_CH1 13U /*!< GPDMA1 HW Trigger signal is LPTIM2_CH1 */
862 #define LL_GPDMA1_TRIGGER_LPTIM2_CH2 14U /*!< GPDMA1 HW Trigger signal is LPTIM2_CH2 */
863 #endif /* LPTIM2 */
864 #if defined (COMP1)
865 #define LL_GPDMA1_TRIGGER_COMP1_OUT 15U /*!< GPDMA1 HW Trigger signal is COMP1_OUT */
866 #endif /* COMP1 */
867 #if defined (COMP2)
868 #define LL_GPDMA1_TRIGGER_COMP2_OUT 16U /*!< GPDMA1 HW Trigger signal is COMP2_OUT */
869 #endif /* COMP2 */
870 #define LL_GPDMA1_TRIGGER_RTC_ALRA_TRG 17U /*!< GPDMA1 HW Trigger signal is RTC_ALRA_TRG */
871 #define LL_GPDMA1_TRIGGER_RTC_ALRB_TRG 18U /*!< GPDMA1 HW Trigger signal is RTC_ALRB_TRG */
872 #define LL_GPDMA1_TRIGGER_RTC_WUT_TRG 19U /*!< GPDMA1 HW Trigger signal is RTC_WUT_TRG */
873 #define LL_GPDMA1_TRIGGER_GPDMA1_CH0_TCF 20U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH0_TCF */
874 #define LL_GPDMA1_TRIGGER_GPDMA1_CH1_TCF 21U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH1_TCF */
875 #define LL_GPDMA1_TRIGGER_GPDMA1_CH2_TCF 22U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH2_TCF */
876 #define LL_GPDMA1_TRIGGER_GPDMA1_CH3_TCF 23U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH3_TCF */
877 #define LL_GPDMA1_TRIGGER_GPDMA1_CH4_TCF 24U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH4_TCF */
878 #define LL_GPDMA1_TRIGGER_GPDMA1_CH5_TCF 25U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH5_TCF */
879 #define LL_GPDMA1_TRIGGER_GPDMA1_CH6_TCF 26U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH6_TCF */
880 #define LL_GPDMA1_TRIGGER_GPDMA1_CH7_TCF 27U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH7_TCF */
881 #define LL_GPDMA1_TRIGGER_TIM2_TRGO 28U /*!< GPDMA1 HW Trigger signal is TIM2_TRGO */
882 #define LL_GPDMA1_TRIGGER_ADC4_AWD1 29U /*!< GPDMA1 HW Trigger signal is ADC4_ADW1 */
883 #if defined (TIM3)
884 #define LL_GPDMA1_TRIGGER_TIM3_TRGO 30U /*!< GPDMA1 HW Trigger signal is TIM3_TRGO */
885 #endif /* TIM3 */
886 /**
887 * @}
888 */
889
890 /**
891 * @}
892 */
893
894 /* Exported macro ------------------------------------------------------------*/
895
896 /** @defgroup DMA_LL_Exported_Macros DMA Exported Macros
897 * @{
898 */
899
900 /** @defgroup DMA_LL_EM_COMMON_WRITE_READ_REGISTERS Common Write and Read Registers macros
901 * @{
902 */
903 /**
904 * @brief Write a value in DMA register.
905 * @param __INSTANCE__ DMA Instance.
906 * @param __REG__ Register to be written.
907 * @param __VALUE__ Value to be written in the register.
908 * @retval None.
909 */
910 #define LL_DMA_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG((__INSTANCE__)->__REG__, (__VALUE__))
911
912 /**
913 * @brief Read a value in DMA register.
914 * @param __INSTANCE__ DMA Instance.
915 * @param __REG__ Register to be read.
916 * @retval Register value.
917 */
918 #define LL_DMA_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
919 /**
920 * @}
921 */
922
923 /** @defgroup DMA_LL_EM_CONVERT_DMAxCHANNELy Convert DMAxChannely
924 * @{
925 */
926 /**
927 * @brief Convert DMAx_Channely into DMAx.
928 * @param __CHANNEL_INSTANCE__ DMAx_Channely.
929 * @retval DMAx.
930 */
931 #define LL_DMA_GET_INSTANCE(__CHANNEL_INSTANCE__) \
932 (GPDMA1)
933
934 /**
935 * @brief Convert DMAx_Channely into LL_DMA_CHANNEL_y.
936 * @param __CHANNEL_INSTANCE__ DMAx_Channely.
937 * @retval LL_DMA_CHANNEL_y.
938 */
939 #define LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__) \
940 (((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA1_Channel0)) ? LL_DMA_CHANNEL_0 : \
941 ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \
942 ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \
943 ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA1_Channel3)) ? LL_DMA_CHANNEL_3 : \
944 ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA1_Channel4)) ? LL_DMA_CHANNEL_4 : \
945 ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA1_Channel5)) ? LL_DMA_CHANNEL_5 : \
946 ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)GPDMA1_Channel6)) ? LL_DMA_CHANNEL_6 : \
947 LL_DMA_CHANNEL_7)
948
949 /**
950 * @brief Convert DMA Instance DMAx and LL_DMA_CHANNEL_y into DMAx_Channely.
951 * @param __DMA_INSTANCE__ DMAx.
952 * @param __CHANNEL__ LL_DMA_CHANNEL_y.
953 * @retval DMAx_Channely.
954 */
955 #define LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__) \
956 ((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_0))) \
957 ? GPDMA1_Channel0 : \
958 (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) \
959 ? GPDMA1_Channel1 : \
960 (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) \
961 ? GPDMA1_Channel2 : \
962 (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) \
963 ? GPDMA1_Channel3 : \
964 (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) \
965 ? GPDMA1_Channel4 : \
966 (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) \
967 ? GPDMA1_Channel5 : \
968 (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)GPDMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6))) \
969 ? GPDMA1_Channel6 : GPDMA1_Channel7)
970
971 /**
972 * @}
973 */
974
975 /**
976 * @}
977 */
978
979 /* Exported functions --------------------------------------------------------*/
980
981 /** @defgroup DMA_LL_Exported_Functions DMA Exported Functions
982 * @{
983 */
984
985 /** @defgroup DMA_LL_EF_Configuration Configuration
986 * @{
987 */
988 /**
989 * @brief Enable channel.
990 * @note This API is used for all available DMA channels.
991 * @rmtoll CCR EN LL_DMA_EnableChannel
992 * @param DMAx DMAx Instance.
993 * @param Channel This parameter can be one of the following values:
994 * @arg @ref LL_DMA_CHANNEL_0
995 * @arg @ref LL_DMA_CHANNEL_1
996 * @arg @ref LL_DMA_CHANNEL_2
997 * @arg @ref LL_DMA_CHANNEL_3
998 * @arg @ref LL_DMA_CHANNEL_4
999 * @arg @ref LL_DMA_CHANNEL_5
1000 * @arg @ref LL_DMA_CHANNEL_6
1001 * @arg @ref LL_DMA_CHANNEL_7
1002 * @retval None.
1003 */
LL_DMA_EnableChannel(const DMA_TypeDef * DMAx,uint32_t Channel)1004 __STATIC_INLINE void LL_DMA_EnableChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
1005 {
1006 uint32_t dma_base_addr = (uint32_t)DMAx;
1007 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_EN);
1008 }
1009
1010 /**
1011 * @brief Disable channel.
1012 * @note This API is used for all available DMA channels.
1013 * @rmtoll CCR EN LL_DMA_DisableChannel
1014 * @param DMAx DMAx Instance.
1015 * @param Channel This parameter can be one of the following values:
1016 * @arg @ref LL_DMA_CHANNEL_0
1017 * @arg @ref LL_DMA_CHANNEL_1
1018 * @arg @ref LL_DMA_CHANNEL_2
1019 * @arg @ref LL_DMA_CHANNEL_3
1020 * @arg @ref LL_DMA_CHANNEL_4
1021 * @arg @ref LL_DMA_CHANNEL_5
1022 * @arg @ref LL_DMA_CHANNEL_6
1023 * @arg @ref LL_DMA_CHANNEL_7
1024 * @retval None.
1025 */
LL_DMA_DisableChannel(const DMA_TypeDef * DMAx,uint32_t Channel)1026 __STATIC_INLINE void LL_DMA_DisableChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
1027 {
1028 uint32_t dma_base_addr = (uint32_t)DMAx;
1029 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR,
1030 (DMA_CCR_SUSP | DMA_CCR_RESET));
1031 }
1032
1033 /**
1034 * @brief Check if channel is enabled or disabled.
1035 * @note This API is used for all available DMA channels.
1036 * @rmtoll CCR EN LL_DMA_IsEnabledChannel
1037 * @param DMAx DMAx Instance
1038 * @param Channel This parameter can be one of the following values:
1039 * @arg @ref LL_DMA_CHANNEL_0
1040 * @arg @ref LL_DMA_CHANNEL_1
1041 * @arg @ref LL_DMA_CHANNEL_2
1042 * @arg @ref LL_DMA_CHANNEL_3
1043 * @arg @ref LL_DMA_CHANNEL_4
1044 * @arg @ref LL_DMA_CHANNEL_5
1045 * @arg @ref LL_DMA_CHANNEL_6
1046 * @arg @ref LL_DMA_CHANNEL_7
1047 * @retval State of bit (1 or 0).
1048 */
LL_DMA_IsEnabledChannel(const DMA_TypeDef * DMAx,uint32_t Channel)1049 __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
1050 {
1051 uint32_t dma_base_addr = (uint32_t)DMAx;
1052 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_EN)
1053 == (DMA_CCR_EN)) ? 1UL : 0UL);
1054 }
1055
1056 /**
1057 * @brief Reset channel.
1058 * @note This API is used for all available DMA channels.
1059 * @rmtoll CCR RESET LL_DMA_ResetChannel
1060 * @param DMAx DMAx Instance
1061 * @param Channel This parameter can be one of the following values:
1062 * @arg @ref LL_DMA_CHANNEL_0
1063 * @arg @ref LL_DMA_CHANNEL_1
1064 * @arg @ref LL_DMA_CHANNEL_2
1065 * @arg @ref LL_DMA_CHANNEL_3
1066 * @arg @ref LL_DMA_CHANNEL_4
1067 * @arg @ref LL_DMA_CHANNEL_5
1068 * @arg @ref LL_DMA_CHANNEL_6
1069 * @arg @ref LL_DMA_CHANNEL_7
1070 * @retval None.
1071 */
LL_DMA_ResetChannel(const DMA_TypeDef * DMAx,uint32_t Channel)1072 __STATIC_INLINE void LL_DMA_ResetChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
1073 {
1074 uint32_t dma_base_addr = (uint32_t)DMAx;
1075 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_RESET);
1076 }
1077
1078 /**
1079 * @brief Suspend channel.
1080 * @note This API is used for all available DMA channels.
1081 * @rmtoll CCR SUSP LL_DMA_SuspendChannel
1082 * @param DMAx DMAx Instance
1083 * @param Channel This parameter can be one of the following values:
1084 * @arg @ref LL_DMA_CHANNEL_0
1085 * @arg @ref LL_DMA_CHANNEL_1
1086 * @arg @ref LL_DMA_CHANNEL_2
1087 * @arg @ref LL_DMA_CHANNEL_3
1088 * @arg @ref LL_DMA_CHANNEL_4
1089 * @arg @ref LL_DMA_CHANNEL_5
1090 * @arg @ref LL_DMA_CHANNEL_6
1091 * @arg @ref LL_DMA_CHANNEL_7
1092 * @retval None.
1093 */
LL_DMA_SuspendChannel(const DMA_TypeDef * DMAx,uint32_t Channel)1094 __STATIC_INLINE void LL_DMA_SuspendChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
1095 {
1096 uint32_t dma_base_addr = (uint32_t)DMAx;
1097 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_SUSP);
1098 }
1099
1100 /**
1101 * @brief Resume channel.
1102 * @note This API is used for all available DMA channels.
1103 * @rmtoll CCR SUSP LL_DMA_ResumeChannel
1104 * @param DMAx DMAx Instance
1105 * @param Channel This parameter can be one of the following values:
1106 * @arg @ref LL_DMA_CHANNEL_0
1107 * @arg @ref LL_DMA_CHANNEL_1
1108 * @arg @ref LL_DMA_CHANNEL_2
1109 * @arg @ref LL_DMA_CHANNEL_3
1110 * @arg @ref LL_DMA_CHANNEL_4
1111 * @arg @ref LL_DMA_CHANNEL_5
1112 * @arg @ref LL_DMA_CHANNEL_6
1113 * @arg @ref LL_DMA_CHANNEL_7
1114 * @retval None.
1115 */
LL_DMA_ResumeChannel(const DMA_TypeDef * DMAx,uint32_t Channel)1116 __STATIC_INLINE void LL_DMA_ResumeChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
1117 {
1118 uint32_t dma_base_addr = (uint32_t)DMAx;
1119 CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_SUSP);
1120 }
1121
1122 /**
1123 * @brief Check if channel is suspended.
1124 * @note This API is used for all available DMA channels.
1125 * @rmtoll CCR SUSP LL_DMA_IsSuspendedChannel
1126 * @param DMAx DMAx Instance
1127 * @param Channel This parameter can be one of the following values:
1128 * @arg @ref LL_DMA_CHANNEL_0
1129 * @arg @ref LL_DMA_CHANNEL_1
1130 * @arg @ref LL_DMA_CHANNEL_2
1131 * @arg @ref LL_DMA_CHANNEL_3
1132 * @arg @ref LL_DMA_CHANNEL_4
1133 * @arg @ref LL_DMA_CHANNEL_5
1134 * @arg @ref LL_DMA_CHANNEL_6
1135 * @arg @ref LL_DMA_CHANNEL_7
1136 * @retval State of bit (1 or 0).
1137 */
LL_DMA_IsSuspendedChannel(const DMA_TypeDef * DMAx,uint32_t Channel)1138 __STATIC_INLINE uint32_t LL_DMA_IsSuspendedChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
1139 {
1140 uint32_t dma_base_addr = (uint32_t)DMAx;
1141 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_SUSP)
1142 == (DMA_CCR_SUSP)) ? 1UL : 0UL);
1143 }
1144
1145 /**
1146 * @brief Set linked-list base address.
1147 * @note This API is used for all available DMA channels.
1148 * @rmtoll CLBAR LBA LL_DMA_SetLinkedListBaseAddr
1149 * @param DMAx DMAx Instance
1150 * @param Channel This parameter can be one of the following values:
1151 * @arg @ref LL_DMA_CHANNEL_0
1152 * @arg @ref LL_DMA_CHANNEL_1
1153 * @arg @ref LL_DMA_CHANNEL_2
1154 * @arg @ref LL_DMA_CHANNEL_3
1155 * @arg @ref LL_DMA_CHANNEL_4
1156 * @arg @ref LL_DMA_CHANNEL_5
1157 * @arg @ref LL_DMA_CHANNEL_6
1158 * @arg @ref LL_DMA_CHANNEL_7
1159 * @param LinkedListBaseAddr Between 0 to 0xFFFF0000 (where the 4 LSB bytes
1160 * are always 0)
1161 * @retval None.
1162 */
LL_DMA_SetLinkedListBaseAddr(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t LinkedListBaseAddr)1163 __STATIC_INLINE void LL_DMA_SetLinkedListBaseAddr(const DMA_TypeDef *DMAx, uint32_t Channel,
1164 uint32_t LinkedListBaseAddr)
1165 {
1166 uint32_t dma_base_addr = (uint32_t)DMAx;
1167 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLBAR, DMA_CLBAR_LBA,
1168 (LinkedListBaseAddr & DMA_CLBAR_LBA));
1169 }
1170
1171 /**
1172 * @brief Get linked-list base address.
1173 * @note This API is used for all available DMA channels.
1174 * @rmtoll CLBAR LBA LL_DMA_GetLinkedListBaseAddr
1175 * @param DMAx DMAx Instance
1176 * @param Channel This parameter can be one of the following values:
1177 * @arg @ref LL_DMA_CHANNEL_0
1178 * @arg @ref LL_DMA_CHANNEL_1
1179 * @arg @ref LL_DMA_CHANNEL_2
1180 * @arg @ref LL_DMA_CHANNEL_3
1181 * @arg @ref LL_DMA_CHANNEL_4
1182 * @arg @ref LL_DMA_CHANNEL_5
1183 * @arg @ref LL_DMA_CHANNEL_6
1184 * @arg @ref LL_DMA_CHANNEL_7
1185 * @retval Value between 0 to 0xFFFF0000 (where the 4 LSB bytes are always 0)
1186 */
LL_DMA_GetLinkedListBaseAddr(const DMA_TypeDef * DMAx,uint32_t Channel)1187 __STATIC_INLINE uint32_t LL_DMA_GetLinkedListBaseAddr(const DMA_TypeDef *DMAx, uint32_t Channel)
1188 {
1189 uint32_t dma_base_addr = (uint32_t)DMAx;
1190 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLBAR, DMA_CLBAR_LBA));
1191 }
1192
1193 /**
1194 * @brief Configure all parameters linked to channel control.
1195 * @note This API is used for all available DMA channels.
1196 * @rmtoll CCR PRIO LL_DMA_ConfigControl\n
1197 * CCR LAP LL_DMA_ConfigControl\n
1198 * CCR LSM LL_DMA_ConfigControl
1199 * @param DMAx DMAx Instance
1200 * @param Channel This parameter can be one of the following values:
1201 * @arg @ref LL_DMA_CHANNEL_0
1202 * @arg @ref LL_DMA_CHANNEL_1
1203 * @arg @ref LL_DMA_CHANNEL_2
1204 * @arg @ref LL_DMA_CHANNEL_3
1205 * @arg @ref LL_DMA_CHANNEL_4
1206 * @arg @ref LL_DMA_CHANNEL_5
1207 * @arg @ref LL_DMA_CHANNEL_6
1208 * @arg @ref LL_DMA_CHANNEL_7
1209 * @param Configuration This parameter must be a combination of all the following values:
1210 * @arg @ref LL_DMA_LOW_PRIORITY_LOW_WEIGHT or @ref LL_DMA_LOW_PRIORITY_MID_WEIGHT or
1211 * @ref LL_DMA_LOW_PRIORITY_HIGH_WEIGHT or @ref LL_DMA_HIGH_PRIORITY
1212 * @arg @ref LL_DMA_LINK_ALLOCATED_PORT0 or @ref LL_DMA_LINK_ALLOCATED_PORT1
1213 * @arg @ref LL_DMA_LSM_FULL_EXECUTION or @ref LL_DMA_LSM_1LINK_EXECUTION
1214 *@retval None.
1215 */
LL_DMA_ConfigControl(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Configuration)1216 __STATIC_INLINE void LL_DMA_ConfigControl(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
1217 {
1218 uint32_t dma_base_addr = (uint32_t)DMAx;
1219 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR,
1220 (DMA_CCR_PRIO | DMA_CCR_LAP | DMA_CCR_LSM), Configuration);
1221 }
1222
1223 /**
1224 * @brief Set priority level.
1225 * @note This API is used for all available DMA channels.
1226 * @rmtoll CCR PRIO LL_DMA_SetChannelPriorityLevel
1227 * @param DMAx DMAx Instance
1228 * @param Channel This parameter can be one of the following values:
1229 * @arg @ref LL_DMA_CHANNEL_0
1230 * @arg @ref LL_DMA_CHANNEL_1
1231 * @arg @ref LL_DMA_CHANNEL_2
1232 * @arg @ref LL_DMA_CHANNEL_3
1233 * @arg @ref LL_DMA_CHANNEL_4
1234 * @arg @ref LL_DMA_CHANNEL_5
1235 * @arg @ref LL_DMA_CHANNEL_6
1236 * @arg @ref LL_DMA_CHANNEL_7
1237 * @param Priority This parameter can be one of the following values:
1238 * @arg @ref LL_DMA_LOW_PRIORITY_LOW_WEIGHT
1239 * @arg @ref LL_DMA_LOW_PRIORITY_MID_WEIGHT
1240 * @arg @ref LL_DMA_LOW_PRIORITY_HIGH_WEIGHT
1241 * @arg @ref LL_DMA_HIGH_PRIORITY
1242 * @retval None.
1243 */
LL_DMA_SetChannelPriorityLevel(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Priority)1244 __STATIC_INLINE void LL_DMA_SetChannelPriorityLevel(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Priority)
1245 {
1246 uint32_t dma_base_addr = (uint32_t)DMAx;
1247 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_PRIO, Priority);
1248 }
1249
1250 /**
1251 * @brief Get Channel priority level.
1252 * @note This API is used for all available DMA channels.
1253 * @rmtoll CCR PRIO LL_DMA_GetChannelPriorityLevel
1254 * @param DMAx DMAx Instance
1255 * @param Channel This parameter can be one of the following values:
1256 * @arg @ref LL_DMA_CHANNEL_0
1257 * @arg @ref LL_DMA_CHANNEL_1
1258 * @arg @ref LL_DMA_CHANNEL_2
1259 * @arg @ref LL_DMA_CHANNEL_3
1260 * @arg @ref LL_DMA_CHANNEL_4
1261 * @arg @ref LL_DMA_CHANNEL_5
1262 * @arg @ref LL_DMA_CHANNEL_6
1263 * @arg @ref LL_DMA_CHANNEL_7
1264 * @retval Returned value can be one of the following values:
1265 * @arg @ref LL_DMA_LOW_PRIORITY_LOW_WEIGHT
1266 * @arg @ref LL_DMA_LOW_PRIORITY_MID_WEIGHT
1267 * @arg @ref LL_DMA_LOW_PRIORITY_HIGH_WEIGHT
1268 * @arg @ref LL_DMA_HIGH_PRIORITY
1269 */
LL_DMA_GetChannelPriorityLevel(const DMA_TypeDef * DMAx,uint32_t Channel)1270 __STATIC_INLINE uint32_t LL_DMA_GetChannelPriorityLevel(const DMA_TypeDef *DMAx, uint32_t Channel)
1271 {
1272 uint32_t dma_base_addr = (uint32_t)DMAx;
1273 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_PRIO));
1274 }
1275
1276 /**
1277 * @brief Set linked-list allocated port.
1278 * @rmtoll CCR LAP LL_DMA_SetLinkAllocatedPort
1279 * @param DMAx DMAx Instance
1280 * @param Channel This parameter can be one of the following values:
1281 * @arg @ref LL_DMA_CHANNEL_0
1282 * @arg @ref LL_DMA_CHANNEL_1
1283 * @arg @ref LL_DMA_CHANNEL_2
1284 * @arg @ref LL_DMA_CHANNEL_3
1285 * @arg @ref LL_DMA_CHANNEL_4
1286 * @arg @ref LL_DMA_CHANNEL_5
1287 * @arg @ref LL_DMA_CHANNEL_6
1288 * @arg @ref LL_DMA_CHANNEL_7
1289 * @param LinkAllocatedPort This parameter can be one of the following values:
1290 * @arg @ref LL_DMA_LINK_ALLOCATED_PORT0
1291 * @arg @ref LL_DMA_LINK_ALLOCATED_PORT1
1292 * @retval None.
1293 */
LL_DMA_SetLinkAllocatedPort(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t LinkAllocatedPort)1294 __STATIC_INLINE void LL_DMA_SetLinkAllocatedPort(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t LinkAllocatedPort)
1295 {
1296 uint32_t dma_base_addr = (uint32_t)DMAx;
1297 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR,
1298 DMA_CCR_LAP, LinkAllocatedPort);
1299 }
1300
1301 /**
1302 * @brief Get linked-list allocated port.
1303 * @rmtoll CCR LAP LL_DMA_GetLinkAllocatedPort
1304 * @param DMAx DMAx Instance
1305 * @param Channel This parameter can be one of the following values:
1306 * @arg @ref LL_DMA_CHANNEL_0
1307 * @arg @ref LL_DMA_CHANNEL_1
1308 * @arg @ref LL_DMA_CHANNEL_2
1309 * @arg @ref LL_DMA_CHANNEL_3
1310 * @arg @ref LL_DMA_CHANNEL_4
1311 * @arg @ref LL_DMA_CHANNEL_5
1312 * @arg @ref LL_DMA_CHANNEL_6
1313 * @arg @ref LL_DMA_CHANNEL_7
1314 * @retval Returned value can be one of the following values:
1315 * @arg @ref LL_DMA_LINK_ALLOCATED_PORT0
1316 * @arg @ref LL_DMA_LINK_ALLOCATED_PORT1
1317 */
LL_DMA_GetLinkAllocatedPort(const DMA_TypeDef * DMAx,uint32_t Channel)1318 __STATIC_INLINE uint32_t LL_DMA_GetLinkAllocatedPort(const DMA_TypeDef *DMAx, uint32_t Channel)
1319 {
1320 uint32_t dma_base_addr = (uint32_t)DMAx;
1321 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_LAP));
1322 }
1323
1324 /**
1325 * @brief Set link step mode.
1326 * @note This API is used for all available DMA channels.
1327 * @rmtoll CCR LSM LL_DMA_SetLinkStepMode
1328 * @param DMAx DMAx Instance
1329 * @param Channel This parameter can be one of the following values:
1330 * @arg @ref LL_DMA_CHANNEL_0
1331 * @arg @ref LL_DMA_CHANNEL_1
1332 * @arg @ref LL_DMA_CHANNEL_2
1333 * @arg @ref LL_DMA_CHANNEL_3
1334 * @arg @ref LL_DMA_CHANNEL_4
1335 * @arg @ref LL_DMA_CHANNEL_5
1336 * @arg @ref LL_DMA_CHANNEL_6
1337 * @arg @ref LL_DMA_CHANNEL_7
1338 * @param LinkStepMode This parameter can be one of the following values:
1339 * @arg @ref LL_DMA_LSM_FULL_EXECUTION
1340 * @arg @ref LL_DMA_LSM_1LINK_EXECUTION
1341 * @retval None.
1342 */
LL_DMA_SetLinkStepMode(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t LinkStepMode)1343 __STATIC_INLINE void LL_DMA_SetLinkStepMode(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t LinkStepMode)
1344 {
1345 uint32_t dma_base_addr = (uint32_t)DMAx;
1346 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_LSM, LinkStepMode);
1347 }
1348
1349 /**
1350 * @brief Get Link step mode.
1351 * @note This API is used for all available DMA channels.
1352 * @rmtoll CCR LSM LL_DMA_GetLinkStepMode
1353 * @param DMAx DMAx Instance
1354 * @param Channel This parameter can be one of the following values:
1355 * @arg @ref LL_DMA_CHANNEL_0
1356 * @arg @ref LL_DMA_CHANNEL_1
1357 * @arg @ref LL_DMA_CHANNEL_2
1358 * @arg @ref LL_DMA_CHANNEL_3
1359 * @arg @ref LL_DMA_CHANNEL_4
1360 * @arg @ref LL_DMA_CHANNEL_5
1361 * @arg @ref LL_DMA_CHANNEL_6
1362 * @arg @ref LL_DMA_CHANNEL_7
1363 * @retval Returned value can be one of the following values:
1364 * @arg @ref LL_DMA_LSM_FULL_EXECUTION
1365 * @arg @ref LL_DMA_LSM_1LINK_EXECUTION
1366 */
LL_DMA_GetLinkStepMode(const DMA_TypeDef * DMAx,uint32_t Channel)1367 __STATIC_INLINE uint32_t LL_DMA_GetLinkStepMode(const DMA_TypeDef *DMAx, uint32_t Channel)
1368 {
1369 uint32_t dma_base_addr = (uint32_t)DMAx;
1370 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_LSM));
1371 }
1372
1373 /**
1374 * @brief Configure data transfer.
1375 * @note This API is used for all available DMA channels.
1376 * @rmtoll CTR1 DAP LL_DMA_ConfigTransfer\n
1377 * CTR1 DHX LL_DMA_ConfigTransfer\n
1378 * CTR1 DBX LL_DMA_ConfigTransfer\n
1379 * CTR1 DINC LL_DMA_ConfigTransfer\n
1380 * CTR1 SAP LL_DMA_ConfigTransfer\n
1381 * CTR1 SBX LL_DMA_ConfigTransfer\n
1382 * CTR1 PAM LL_DMA_ConfigTransfer\n
1383 * CTR1 SINC LL_DMA_ConfigTransfer
1384 * @param DMAx DMAx Instance
1385 * @param Channel This parameter can be one of the following values:
1386 * @arg @ref LL_DMA_CHANNEL_0
1387 * @arg @ref LL_DMA_CHANNEL_1
1388 * @arg @ref LL_DMA_CHANNEL_2
1389 * @arg @ref LL_DMA_CHANNEL_3
1390 * @arg @ref LL_DMA_CHANNEL_4
1391 * @arg @ref LL_DMA_CHANNEL_5
1392 * @arg @ref LL_DMA_CHANNEL_6
1393 * @arg @ref LL_DMA_CHANNEL_7
1394 * @param Configuration This parameter must be a combination of all the following values:
1395 * @arg @ref LL_DMA_DEST_ALLOCATED_PORT0 or @ref LL_DMA_DEST_ALLOCATED_PORT1
1396 * @arg @ref LL_DMA_DEST_HALFWORD_PRESERVE or @ref LL_DMA_DEST_HALFWORD_EXCHANGE
1397 * @arg @ref LL_DMA_DEST_BYTE_PRESERVE or @ref LL_DMA_DEST_BYTE_EXCHANGE
1398 * @arg @ref LL_DMA_SRC_BYTE_PRESERVE or @ref LL_DMA_SRC_BYTE_EXCHANGE
1399 * @arg @ref LL_DMA_DEST_FIXED or @ref LL_DMA_DEST_INCREMENT
1400 * @arg @ref LL_DMA_DEST_DATAWIDTH_BYTE or @ref LL_DMA_DEST_DATAWIDTH_HALFWORD or
1401 * @ref LL_DMA_DEST_DATAWIDTH_WORD
1402 * @arg @ref LL_DMA_SRC_ALLOCATED_PORT0 or @ref LL_DMA_SRC_ALLOCATED_PORT1
1403 * @arg @ref LL_DMA_DATA_ALIGN_ZEROPADD or @ref LL_DMA_DATA_ALIGN_SIGNEXTPADD or
1404 * @ref LL_DMA_DATA_PACK_UNPACK
1405 * @arg @ref LL_DMA_SRC_FIXED or @ref LL_DMA_SRC_INCREMENT
1406 * @arg @ref LL_DMA_SRC_DATAWIDTH_BYTE or @ref LL_DMA_SRC_DATAWIDTH_HALFWORD or
1407 * @ref LL_DMA_SRC_DATAWIDTH_WORD
1408 *@retval None.
1409 */
LL_DMA_ConfigTransfer(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Configuration)1410 __STATIC_INLINE void LL_DMA_ConfigTransfer(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
1411 {
1412 uint32_t dma_base_addr = (uint32_t)DMAx;
1413 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1,
1414 DMA_CTR1_DAP | DMA_CTR1_DHX | DMA_CTR1_DBX | DMA_CTR1_SBX | DMA_CTR1_DINC | DMA_CTR1_SINC | \
1415 DMA_CTR1_SAP | DMA_CTR1_PAM | DMA_CTR1_DDW_LOG2 | DMA_CTR1_SDW_LOG2, Configuration);
1416 }
1417
1418 /**
1419 * @brief Configure source and destination burst length.
1420 * @rmtoll CTR1 DBL_1 LL_DMA_SetDestBurstLength\n
1421 * @rmtoll CTR1 SBL_1 LL_DMA_SetDestBurstLength
1422 * @param DMAx DMAx Instance
1423 * @param Channel This parameter can be one of the following values:
1424 * @arg @ref LL_DMA_CHANNEL_0
1425 * @arg @ref LL_DMA_CHANNEL_1
1426 * @arg @ref LL_DMA_CHANNEL_2
1427 * @arg @ref LL_DMA_CHANNEL_3
1428 * @arg @ref LL_DMA_CHANNEL_4
1429 * @arg @ref LL_DMA_CHANNEL_5
1430 * @arg @ref LL_DMA_CHANNEL_6
1431 * @arg @ref LL_DMA_CHANNEL_7
1432 * @param SrcBurstLength Between 1 to 64
1433 * @param DestBurstLength Between 1 to 64
1434 * @retval None.
1435 */
LL_DMA_ConfigBurstLength(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcBurstLength,uint32_t DestBurstLength)1436 __STATIC_INLINE void LL_DMA_ConfigBurstLength(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcBurstLength,
1437 uint32_t DestBurstLength)
1438 {
1439 uint32_t dma_base_addr = (uint32_t)DMAx;
1440 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1,
1441 (DMA_CTR1_SBL_1 | DMA_CTR1_DBL_1), (((SrcBurstLength - 1U) << DMA_CTR1_SBL_1_Pos) & DMA_CTR1_SBL_1) | \
1442 (((DestBurstLength - 1U) << DMA_CTR1_DBL_1_Pos) & DMA_CTR1_DBL_1));
1443 }
1444
1445 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
1446 /**
1447 * @brief Configure all secure parameters linked to DMA channel.
1448 * @note This API is used for all available DMA channels.
1449 * @rmtoll SECCFGR SEC LL_DMA_ConfigChannelSecure\n
1450 * @rmtoll CTR1 SSEC LL_DMA_ConfigChannelSecure\n
1451 * @rmtoll CTR1 DSEC LL_DMA_ConfigChannelSecure
1452 * @param DMAx DMAx Instance
1453 * @param Channel This parameter can be one of the following values:
1454 * @arg @ref LL_DMA_CHANNEL_0
1455 * @arg @ref LL_DMA_CHANNEL_1
1456 * @arg @ref LL_DMA_CHANNEL_2
1457 * @arg @ref LL_DMA_CHANNEL_3
1458 * @arg @ref LL_DMA_CHANNEL_4
1459 * @arg @ref LL_DMA_CHANNEL_5
1460 * @arg @ref LL_DMA_CHANNEL_6
1461 * @arg @ref LL_DMA_CHANNEL_7
1462 * @param Configuration This parameter must be a combination of all the following values:
1463 * @arg @ref LL_DMA_CHANNEL_NSEC or @ref LL_DMA_CHANNEL_SEC
1464 * @arg @ref LL_DMA_CHANNEL_SRC_NSEC or @ref LL_DMA_CHANNEL_SRC_SEC
1465 * @arg @ref LL_DMA_CHANNEL_DEST_NSEC or @ref LL_DMA_CHANNEL_DEST_SEC
1466 * @retval None.
1467 */
LL_DMA_ConfigChannelSecure(DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Configuration)1468 __STATIC_INLINE void LL_DMA_ConfigChannelSecure(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
1469 {
1470 uint32_t dma_base_addr = (uint32_t)DMAx;
1471 MODIFY_REG(DMAx->SECCFGR, (DMA_SECCFGR_SEC0 << Channel), ((Configuration & LL_DMA_CHANNEL_SEC) << Channel));
1472 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1,
1473 (DMA_CTR1_SSEC | DMA_CTR1_DSEC), (Configuration & (~LL_DMA_CHANNEL_SEC)));
1474 }
1475
1476 /**
1477 * @brief Enable security attribute of the DMA transfer to the destination.
1478 * @note This API is used for all available DMA channels.
1479 * @rmtoll CTR1 DSEC LL_DMA_EnableChannelDestSecure
1480 * @param DMAx DMAx Instance
1481 * @param Channel This parameter can be one of the following values:
1482 * @arg @ref LL_DMA_CHANNEL_0
1483 * @arg @ref LL_DMA_CHANNEL_1
1484 * @arg @ref LL_DMA_CHANNEL_2
1485 * @arg @ref LL_DMA_CHANNEL_3
1486 * @arg @ref LL_DMA_CHANNEL_4
1487 * @arg @ref LL_DMA_CHANNEL_5
1488 * @arg @ref LL_DMA_CHANNEL_6
1489 * @arg @ref LL_DMA_CHANNEL_7
1490 * @retval None.
1491 */
LL_DMA_EnableChannelDestSecure(const DMA_TypeDef * DMAx,uint32_t Channel)1492 __STATIC_INLINE void LL_DMA_EnableChannelDestSecure(const DMA_TypeDef *DMAx, uint32_t Channel)
1493 {
1494 uint32_t dma_base_addr = (uint32_t)DMAx;
1495 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DSEC);
1496 }
1497
1498 /**
1499 * @brief Disable security attribute of the DMA transfer to the destination.
1500 * @note This API is used for all available DMA channels.
1501 * @rmtoll CTR1 DSEC LL_DMA_DisableChannelDestSecure
1502 * @param DMAx DMAx Instance
1503 * @param Channel This parameter can be one of the following values:
1504 * @arg @ref LL_DMA_CHANNEL_0
1505 * @arg @ref LL_DMA_CHANNEL_1
1506 * @arg @ref LL_DMA_CHANNEL_2
1507 * @arg @ref LL_DMA_CHANNEL_3
1508 * @arg @ref LL_DMA_CHANNEL_4
1509 * @arg @ref LL_DMA_CHANNEL_5
1510 * @arg @ref LL_DMA_CHANNEL_6
1511 * @arg @ref LL_DMA_CHANNEL_7
1512 * @retval None.
1513 */
LL_DMA_DisableChannelDestSecure(const DMA_TypeDef * DMAx,uint32_t Channel)1514 __STATIC_INLINE void LL_DMA_DisableChannelDestSecure(const DMA_TypeDef *DMAx, uint32_t Channel)
1515 {
1516 uint32_t dma_base_addr = (uint32_t)DMAx;
1517 CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DSEC);
1518 }
1519 #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
1520
1521 #if defined (DMA_SECCFGR_SEC0)
1522 /**
1523 * @brief Check security attribute of the DMA transfer to the destination.
1524 * @note This API is used for all available DMA channels.
1525 * @rmtoll CTR1 DSEC LL_DMA_IsEnabledChannelDestSecure
1526 * @param DMAx DMAx Instance
1527 * @param Channel This parameter can be one of the following values:
1528 * @arg @ref LL_DMA_CHANNEL_0
1529 * @arg @ref LL_DMA_CHANNEL_1
1530 * @arg @ref LL_DMA_CHANNEL_2
1531 * @arg @ref LL_DMA_CHANNEL_3
1532 * @arg @ref LL_DMA_CHANNEL_4
1533 * @arg @ref LL_DMA_CHANNEL_5
1534 * @arg @ref LL_DMA_CHANNEL_6
1535 * @arg @ref LL_DMA_CHANNEL_7
1536 * @retval State of bit (1 or 0).
1537 */
LL_DMA_IsEnabledChannelDestSecure(const DMA_TypeDef * DMAx,uint32_t Channel)1538 __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannelDestSecure(const DMA_TypeDef *DMAx, uint32_t Channel)
1539 {
1540 uint32_t dma_base_addr = (uint32_t)DMAx;
1541 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DSEC)
1542 == (DMA_CTR1_DSEC)) ? 1UL : 0UL);
1543 }
1544 #endif /* DMA_SECCFGR_SEC0 */
1545
1546 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
1547 /**
1548 * @brief Enable security attribute of the DMA transfer from the source.
1549 * @note This API is used for all available DMA channels.
1550 * @rmtoll CTR1 SSEC LL_DMA_EnableChannelSrcSecure
1551 * @param DMAx DMAx Instance
1552 * @param Channel This parameter can be one of the following values:
1553 * @arg @ref LL_DMA_CHANNEL_0
1554 * @arg @ref LL_DMA_CHANNEL_1
1555 * @arg @ref LL_DMA_CHANNEL_2
1556 * @arg @ref LL_DMA_CHANNEL_3
1557 * @arg @ref LL_DMA_CHANNEL_4
1558 * @arg @ref LL_DMA_CHANNEL_5
1559 * @arg @ref LL_DMA_CHANNEL_6
1560 * @arg @ref LL_DMA_CHANNEL_7
1561 * @retval None.
1562 */
LL_DMA_EnableChannelSrcSecure(const DMA_TypeDef * DMAx,uint32_t Channel)1563 __STATIC_INLINE void LL_DMA_EnableChannelSrcSecure(const DMA_TypeDef *DMAx, uint32_t Channel)
1564 {
1565 uint32_t dma_base_addr = (uint32_t)DMAx;
1566 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SSEC);
1567 }
1568
1569 /**
1570 * @brief Disable security attribute of the DMA transfer from the source.
1571 * @note This API is used for all available DMA channels.
1572 * @rmtoll CTR1 SSEC LL_DMA_DisableChannelSrcSecure
1573 * @param DMAx DMAx Instance
1574 * @param Channel This parameter can be one of the following values:
1575 * @arg @ref LL_DMA_CHANNEL_0
1576 * @arg @ref LL_DMA_CHANNEL_1
1577 * @arg @ref LL_DMA_CHANNEL_2
1578 * @arg @ref LL_DMA_CHANNEL_3
1579 * @arg @ref LL_DMA_CHANNEL_4
1580 * @arg @ref LL_DMA_CHANNEL_5
1581 * @arg @ref LL_DMA_CHANNEL_6
1582 * @arg @ref LL_DMA_CHANNEL_7
1583 * @retval None.
1584 */
LL_DMA_DisableChannelSrcSecure(const DMA_TypeDef * DMAx,uint32_t Channel)1585 __STATIC_INLINE void LL_DMA_DisableChannelSrcSecure(const DMA_TypeDef *DMAx, uint32_t Channel)
1586 {
1587 uint32_t dma_base_addr = (uint32_t)DMAx;
1588 CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SSEC);
1589 }
1590 #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
1591
1592 #if defined (DMA_SECCFGR_SEC0)
1593 /**
1594 * @brief Check security attribute of the DMA transfer from the source.
1595 * @note This API is used for all available DMA channels.
1596 * @rmtoll CTR1 SSEC LL_DMA_IsEnabledChannelSrcSecure
1597 * @param DMAx DMAx Instance
1598 * @param Channel This parameter can be one of the following values:
1599 * @arg @ref LL_DMA_CHANNEL_0
1600 * @arg @ref LL_DMA_CHANNEL_1
1601 * @arg @ref LL_DMA_CHANNEL_2
1602 * @arg @ref LL_DMA_CHANNEL_3
1603 * @arg @ref LL_DMA_CHANNEL_4
1604 * @arg @ref LL_DMA_CHANNEL_5
1605 * @arg @ref LL_DMA_CHANNEL_6
1606 * @arg @ref LL_DMA_CHANNEL_7
1607 * @retval State of bit (1 or 0).
1608 */
LL_DMA_IsEnabledChannelSrcSecure(const DMA_TypeDef * DMAx,uint32_t Channel)1609 __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannelSrcSecure(const DMA_TypeDef *DMAx, uint32_t Channel)
1610 {
1611 uint32_t dma_base_addr = (uint32_t)DMAx;
1612 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SSEC)
1613 == (DMA_CTR1_SSEC)) ? 1UL : 0UL);
1614 }
1615 #endif /* DMA_SECCFGR_SEC0 */
1616
1617 /**
1618 * @brief Set destination allocated port.
1619 * @rmtoll CTR1 DAP LL_DMA_SetDestAllocatedPort
1620 * @param DMAx DMAx Instance
1621 * @param Channel This parameter can be one of the following values:
1622 * @arg @ref LL_DMA_CHANNEL_0
1623 * @arg @ref LL_DMA_CHANNEL_1
1624 * @arg @ref LL_DMA_CHANNEL_2
1625 * @arg @ref LL_DMA_CHANNEL_3
1626 * @arg @ref LL_DMA_CHANNEL_4
1627 * @arg @ref LL_DMA_CHANNEL_5
1628 * @arg @ref LL_DMA_CHANNEL_6
1629 * @arg @ref LL_DMA_CHANNEL_7
1630 * @param DestAllocatedPort This parameter can be one of the following values:
1631 * @arg @ref LL_DMA_DEST_ALLOCATED_PORT0
1632 * @arg @ref LL_DMA_DEST_ALLOCATED_PORT1
1633 * @retval None.
1634 */
LL_DMA_SetDestAllocatedPort(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DestAllocatedPort)1635 __STATIC_INLINE void LL_DMA_SetDestAllocatedPort(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DestAllocatedPort)
1636 {
1637 uint32_t dma_base_addr = (uint32_t)DMAx;
1638 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DAP,
1639 DestAllocatedPort);
1640 }
1641
1642 /**
1643 * @brief Get destination allocated port.
1644 * @rmtoll CTR1 DAP LL_DMA_GetDestAllocatedPort
1645 * @param DMAx DMAx Instance
1646 * @param Channel This parameter can be one of the following values:
1647 * @arg @ref LL_DMA_CHANNEL_0
1648 * @arg @ref LL_DMA_CHANNEL_1
1649 * @arg @ref LL_DMA_CHANNEL_2
1650 * @arg @ref LL_DMA_CHANNEL_3
1651 * @arg @ref LL_DMA_CHANNEL_4
1652 * @arg @ref LL_DMA_CHANNEL_5
1653 * @arg @ref LL_DMA_CHANNEL_6
1654 * @arg @ref LL_DMA_CHANNEL_7
1655 * @retval Returned value can be one of the following values:
1656 * @arg @ref LL_DMA_DEST_ALLOCATED_PORT0
1657 * @arg @ref LL_DMA_DEST_ALLOCATED_PORT1
1658 */
LL_DMA_GetDestAllocatedPort(const DMA_TypeDef * DMAx,uint32_t Channel)1659 __STATIC_INLINE uint32_t LL_DMA_GetDestAllocatedPort(const DMA_TypeDef *DMAx, uint32_t Channel)
1660 {
1661 uint32_t dma_base_addr = (uint32_t)DMAx;
1662 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DAP));
1663 }
1664
1665 /**
1666 * @brief Set destination half-word exchange.
1667 * @rmtoll CTR1 DHX LL_DMA_SetDestHWordExchange
1668 * @param DMAx DMAx Instance
1669 * @param Channel This parameter can be one of the following values:
1670 * @arg @ref LL_DMA_CHANNEL_0
1671 * @arg @ref LL_DMA_CHANNEL_1
1672 * @arg @ref LL_DMA_CHANNEL_2
1673 * @arg @ref LL_DMA_CHANNEL_3
1674 * @arg @ref LL_DMA_CHANNEL_4
1675 * @arg @ref LL_DMA_CHANNEL_5
1676 * @arg @ref LL_DMA_CHANNEL_6
1677 * @arg @ref LL_DMA_CHANNEL_7
1678 * @param DestHWordExchange This parameter can be one of the following values:
1679 * @arg @ref LL_DMA_DEST_HALFWORD_PRESERVE
1680 * @arg @ref LL_DMA_DEST_HALFWORD_EXCHANGE
1681 * @retval None.
1682 */
LL_DMA_SetDestHWordExchange(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DestHWordExchange)1683 __STATIC_INLINE void LL_DMA_SetDestHWordExchange(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DestHWordExchange)
1684 {
1685 uint32_t dma_base_addr = (uint32_t)DMAx;
1686 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DHX,
1687 DestHWordExchange);
1688 }
1689
1690 /**
1691 * @brief Get destination half-word exchange.
1692 * @rmtoll CTR1 DHX LL_DMA_GetDestHWordExchange
1693 * @param DMAx DMAx Instance
1694 * @param Channel This parameter can be one of the following values:
1695 * @arg @ref LL_DMA_CHANNEL_0
1696 * @arg @ref LL_DMA_CHANNEL_1
1697 * @arg @ref LL_DMA_CHANNEL_2
1698 * @arg @ref LL_DMA_CHANNEL_3
1699 * @arg @ref LL_DMA_CHANNEL_4
1700 * @arg @ref LL_DMA_CHANNEL_5
1701 * @arg @ref LL_DMA_CHANNEL_6
1702 * @arg @ref LL_DMA_CHANNEL_7
1703 * @retval Returned value can be one of the following values:
1704 * @arg @ref LL_DMA_DEST_HALFWORD_PRESERVE
1705 * @arg @ref LL_DMA_DEST_HALFWORD_EXCHANGE
1706 */
LL_DMA_GetDestHWordExchange(const DMA_TypeDef * DMAx,uint32_t Channel)1707 __STATIC_INLINE uint32_t LL_DMA_GetDestHWordExchange(const DMA_TypeDef *DMAx, uint32_t Channel)
1708 {
1709 uint32_t dma_base_addr = (uint32_t)DMAx;
1710 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DHX));
1711 }
1712
1713 /**
1714 * @brief Set destination byte exchange.
1715 * @rmtoll CTR1 DBX LL_DMA_SetDestByteExchange
1716 * @param DMAx DMAx Instance
1717 * @param Channel This parameter can be one of the following values:
1718 * @arg @ref LL_DMA_CHANNEL_0
1719 * @arg @ref LL_DMA_CHANNEL_1
1720 * @arg @ref LL_DMA_CHANNEL_2
1721 * @arg @ref LL_DMA_CHANNEL_3
1722 * @arg @ref LL_DMA_CHANNEL_4
1723 * @arg @ref LL_DMA_CHANNEL_5
1724 * @arg @ref LL_DMA_CHANNEL_6
1725 * @arg @ref LL_DMA_CHANNEL_7
1726 * @param DestByteExchange This parameter can be one of the following values:
1727 * @arg @ref LL_DMA_DEST_BYTE_PRESERVE
1728 * @arg @ref LL_DMA_DEST_BYTE_EXCHANGE
1729 * @retval None.
1730 */
LL_DMA_SetDestByteExchange(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DestByteExchange)1731 __STATIC_INLINE void LL_DMA_SetDestByteExchange(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DestByteExchange)
1732 {
1733 uint32_t dma_base_addr = (uint32_t)DMAx;
1734 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DBX,
1735 DestByteExchange);
1736 }
1737
1738 /**
1739 * @brief Get destination byte exchange.
1740 * @rmtoll CTR1 DBX LL_DMA_GetDestByteExchange
1741 * @param DMAx DMAx Instance
1742 * @param Channel This parameter can be one of the following values:
1743 * @arg @ref LL_DMA_CHANNEL_0
1744 * @arg @ref LL_DMA_CHANNEL_1
1745 * @arg @ref LL_DMA_CHANNEL_2
1746 * @arg @ref LL_DMA_CHANNEL_3
1747 * @arg @ref LL_DMA_CHANNEL_4
1748 * @arg @ref LL_DMA_CHANNEL_5
1749 * @arg @ref LL_DMA_CHANNEL_6
1750 * @arg @ref LL_DMA_CHANNEL_7
1751 * @retval Returned value can be one of the following values:
1752 * @arg @ref LL_DMA_DEST_BYTE_PRESERVE
1753 * @arg @ref LL_DMA_DEST_BYTE_EXCHANGE
1754 */
LL_DMA_GetDestByteExchange(const DMA_TypeDef * DMAx,uint32_t Channel)1755 __STATIC_INLINE uint32_t LL_DMA_GetDestByteExchange(const DMA_TypeDef *DMAx, uint32_t Channel)
1756 {
1757 uint32_t dma_base_addr = (uint32_t)DMAx;
1758 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DBX));
1759 }
1760
1761 /**
1762 * @brief Set source byte exchange.
1763 * @rmtoll CTR1 SBX LL_DMA_SetSrcByteExchange
1764 * @param DMAx DMAx Instance
1765 * @param Channel This parameter can be one of the following values:
1766 * @arg @ref LL_DMA_CHANNEL_0
1767 * @arg @ref LL_DMA_CHANNEL_1
1768 * @arg @ref LL_DMA_CHANNEL_2
1769 * @arg @ref LL_DMA_CHANNEL_3
1770 * @arg @ref LL_DMA_CHANNEL_4
1771 * @arg @ref LL_DMA_CHANNEL_5
1772 * @arg @ref LL_DMA_CHANNEL_6
1773 * @arg @ref LL_DMA_CHANNEL_7
1774 * @param SrcByteExchange This parameter can be one of the following values:
1775 * @arg @ref LL_DMA_SRC_BYTE_PRESERVE
1776 * @arg @ref LL_DMA_SRC_BYTE_EXCHANGE
1777 * @retval None.
1778 */
LL_DMA_SetSrcByteExchange(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcByteExchange)1779 __STATIC_INLINE void LL_DMA_SetSrcByteExchange(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcByteExchange)
1780 {
1781 uint32_t dma_base_addr = (uint32_t)DMAx;
1782 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SBX,
1783 SrcByteExchange);
1784 }
1785
1786 /**
1787 * @brief Get source byte exchange.
1788 * @rmtoll CTR1 SBX LL_DMA_GetSrcByteExchange
1789 * @param DMAx DMAx Instance
1790 * @param Channel This parameter can be one of the following values:
1791 * @arg @ref LL_DMA_CHANNEL_0
1792 * @arg @ref LL_DMA_CHANNEL_1
1793 * @arg @ref LL_DMA_CHANNEL_2
1794 * @arg @ref LL_DMA_CHANNEL_3
1795 * @arg @ref LL_DMA_CHANNEL_4
1796 * @arg @ref LL_DMA_CHANNEL_5
1797 * @arg @ref LL_DMA_CHANNEL_6
1798 * @arg @ref LL_DMA_CHANNEL_7
1799 * @retval Returned value can be one of the following values:
1800 * @arg @ref LL_DMA_SRC_BYTE_PRESERVE
1801 * @arg @ref LL_DMA_SRC_BYTE_EXCHANGE
1802 */
LL_DMA_GetSrcByteExchange(const DMA_TypeDef * DMAx,uint32_t Channel)1803 __STATIC_INLINE uint32_t LL_DMA_GetSrcByteExchange(const DMA_TypeDef *DMAx, uint32_t Channel)
1804 {
1805 uint32_t dma_base_addr = (uint32_t)DMAx;
1806 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SBX));
1807 }
1808
1809 /**
1810 * @brief Set destination burst length.
1811 * @rmtoll CTR1 DBL_1 LL_DMA_SetDestBurstLength
1812 * @param DMAx DMAx Instance
1813 * @param Channel This parameter can be one of the following values:
1814 * @arg @ref LL_DMA_CHANNEL_0
1815 * @arg @ref LL_DMA_CHANNEL_1
1816 * @arg @ref LL_DMA_CHANNEL_2
1817 * @arg @ref LL_DMA_CHANNEL_3
1818 * @arg @ref LL_DMA_CHANNEL_4
1819 * @arg @ref LL_DMA_CHANNEL_5
1820 * @arg @ref LL_DMA_CHANNEL_6
1821 * @arg @ref LL_DMA_CHANNEL_7
1822 * @param DestBurstLength Between 1 to 64
1823 * @retval None.
1824 */
LL_DMA_SetDestBurstLength(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DestBurstLength)1825 __STATIC_INLINE void LL_DMA_SetDestBurstLength(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DestBurstLength)
1826 {
1827 uint32_t dma_base_addr = (uint32_t)DMAx;
1828 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DBL_1,
1829 ((DestBurstLength - 1U) << DMA_CTR1_DBL_1_Pos) & DMA_CTR1_DBL_1);
1830 }
1831
1832 /**
1833 * @brief Get destination burst length.
1834 * @rmtoll CTR1 DBL_1 LL_DMA_GetDestBurstLength
1835 * @param DMAx DMAx Instance
1836 * @param Channel This parameter can be one of the following values:
1837 * @arg @ref LL_DMA_CHANNEL_0
1838 * @arg @ref LL_DMA_CHANNEL_1
1839 * @arg @ref LL_DMA_CHANNEL_2
1840 * @arg @ref LL_DMA_CHANNEL_3
1841 * @arg @ref LL_DMA_CHANNEL_4
1842 * @arg @ref LL_DMA_CHANNEL_5
1843 * @arg @ref LL_DMA_CHANNEL_6
1844 * @arg @ref LL_DMA_CHANNEL_7
1845 * @retval Between 1 to 64.
1846 */
LL_DMA_GetDestBurstLength(const DMA_TypeDef * DMAx,uint32_t Channel)1847 __STATIC_INLINE uint32_t LL_DMA_GetDestBurstLength(const DMA_TypeDef *DMAx, uint32_t Channel)
1848 {
1849 uint32_t dma_base_addr = (uint32_t)DMAx;
1850 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1,
1851 DMA_CTR1_DBL_1) >> DMA_CTR1_DBL_1_Pos) + 1U);
1852 }
1853
1854 /**
1855 * @brief Set destination increment mode.
1856 * @rmtoll CTR1 DINC LL_DMA_SetDestIncMode
1857 * @param DMAx DMAx Instance
1858 * @param Channel This parameter can be one of the following values:
1859 * @arg @ref LL_DMA_CHANNEL_0
1860 * @arg @ref LL_DMA_CHANNEL_1
1861 * @arg @ref LL_DMA_CHANNEL_2
1862 * @arg @ref LL_DMA_CHANNEL_3
1863 * @arg @ref LL_DMA_CHANNEL_4
1864 * @arg @ref LL_DMA_CHANNEL_5
1865 * @arg @ref LL_DMA_CHANNEL_6
1866 * @arg @ref LL_DMA_CHANNEL_7
1867 * @param DestInc This parameter can be one of the following values:
1868 * @arg @ref LL_DMA_DEST_FIXED
1869 * @arg @ref LL_DMA_DEST_INCREMENT
1870 * @retval None.
1871 */
LL_DMA_SetDestIncMode(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DestInc)1872 __STATIC_INLINE void LL_DMA_SetDestIncMode(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DestInc)
1873 {
1874 uint32_t dma_base_addr = (uint32_t)DMAx;
1875 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DINC, DestInc);
1876 }
1877 /**
1878 * @brief Get destination increment mode.
1879 * @note This API is used for all available DMA channels.
1880 * @rmtoll CTR1 DINC LL_DMA_GetDestIncMode
1881 * @param DMAx DMAx Instance
1882 * @param Channel This parameter can be one of the following values:
1883 * @arg @ref LL_DMA_CHANNEL_0
1884 * @arg @ref LL_DMA_CHANNEL_1
1885 * @arg @ref LL_DMA_CHANNEL_2
1886 * @arg @ref LL_DMA_CHANNEL_3
1887 * @arg @ref LL_DMA_CHANNEL_4
1888 * @arg @ref LL_DMA_CHANNEL_5
1889 * @arg @ref LL_DMA_CHANNEL_6
1890 * @arg @ref LL_DMA_CHANNEL_7
1891 * @retval Returned value can be one of the following values:
1892 * @arg @ref LL_DMA_DEST_FIXED
1893 * @arg @ref LL_DMA_DEST_INCREMENT
1894 */
LL_DMA_GetDestIncMode(const DMA_TypeDef * DMAx,uint32_t Channel)1895 __STATIC_INLINE uint32_t LL_DMA_GetDestIncMode(const DMA_TypeDef *DMAx, uint32_t Channel)
1896 {
1897 uint32_t dma_base_addr = (uint32_t)DMAx;
1898 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DINC));
1899 }
1900
1901 /**
1902 * @brief Set destination data width.
1903 * @note This API is used for all available DMA channels.
1904 * @rmtoll CTR1 DDW_LOG2 LL_DMA_SetDestDataWidth
1905 * @param DMAx DMAx Instance
1906 * @param Channel This parameter can be one of the following values:
1907 * @arg @ref LL_DMA_CHANNEL_0
1908 * @arg @ref LL_DMA_CHANNEL_1
1909 * @arg @ref LL_DMA_CHANNEL_2
1910 * @arg @ref LL_DMA_CHANNEL_3
1911 * @arg @ref LL_DMA_CHANNEL_4
1912 * @arg @ref LL_DMA_CHANNEL_5
1913 * @arg @ref LL_DMA_CHANNEL_6
1914 * @arg @ref LL_DMA_CHANNEL_7
1915 * @param DestDataWidth This parameter can be one of the following values:
1916 * @arg @ref LL_DMA_DEST_DATAWIDTH_BYTE
1917 * @arg @ref LL_DMA_DEST_DATAWIDTH_HALFWORD
1918 * @arg @ref LL_DMA_DEST_DATAWIDTH_WORD
1919 * @retval None.
1920 */
LL_DMA_SetDestDataWidth(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DestDataWidth)1921 __STATIC_INLINE void LL_DMA_SetDestDataWidth(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DestDataWidth)
1922 {
1923 uint32_t dma_base_addr = (uint32_t)DMAx;
1924 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DDW_LOG2,
1925 DestDataWidth);
1926 }
1927
1928 /**
1929 * @brief Get destination data width.
1930 * @note This API is used for all available DMA channels.
1931 * @rmtoll CTR1 DDW_LOG2 LL_DMA_GetDestDataWidth
1932 * @param DMAx DMAx Instance
1933 * @param Channel This parameter can be one of the following values:
1934 * @arg @ref LL_DMA_CHANNEL_0
1935 * @arg @ref LL_DMA_CHANNEL_1
1936 * @arg @ref LL_DMA_CHANNEL_2
1937 * @arg @ref LL_DMA_CHANNEL_3
1938 * @arg @ref LL_DMA_CHANNEL_4
1939 * @arg @ref LL_DMA_CHANNEL_5
1940 * @arg @ref LL_DMA_CHANNEL_6
1941 * @arg @ref LL_DMA_CHANNEL_7
1942 * @retval Returned value can be one of the following values:
1943 * @arg @ref LL_DMA_DEST_DATAWIDTH_BYTE
1944 * @arg @ref LL_DMA_DEST_DATAWIDTH_HALFWORD
1945 * @arg @ref LL_DMA_DEST_DATAWIDTH_WORD
1946 */
LL_DMA_GetDestDataWidth(const DMA_TypeDef * DMAx,uint32_t Channel)1947 __STATIC_INLINE uint32_t LL_DMA_GetDestDataWidth(const DMA_TypeDef *DMAx, uint32_t Channel)
1948 {
1949 uint32_t dma_base_addr = (uint32_t)DMAx;
1950 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_DDW_LOG2));
1951 }
1952
1953 /**
1954 * @brief Set source allocated port.
1955 * @rmtoll CTR1 SAP LL_DMA_SetSrcAllocatedPort
1956 * @param DMAx DMAx Instance
1957 * @param Channel This parameter can be one of the following values:
1958 * @arg @ref LL_DMA_CHANNEL_0
1959 * @arg @ref LL_DMA_CHANNEL_1
1960 * @arg @ref LL_DMA_CHANNEL_2
1961 * @arg @ref LL_DMA_CHANNEL_3
1962 * @arg @ref LL_DMA_CHANNEL_4
1963 * @arg @ref LL_DMA_CHANNEL_5
1964 * @arg @ref LL_DMA_CHANNEL_6
1965 * @arg @ref LL_DMA_CHANNEL_7
1966 * @param SrcAllocatedPort This parameter can be one of the following values:
1967 * @arg @ref LL_DMA_SRC_ALLOCATED_PORT0
1968 * @arg @ref LL_DMA_SRC_ALLOCATED_PORT1
1969 * @retval None.
1970 */
LL_DMA_SetSrcAllocatedPort(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcAllocatedPort)1971 __STATIC_INLINE void LL_DMA_SetSrcAllocatedPort(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcAllocatedPort)
1972 {
1973 uint32_t dma_base_addr = (uint32_t)DMAx;
1974 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SAP,
1975 SrcAllocatedPort);
1976 }
1977
1978 /**
1979 * @brief Get source allocated port.
1980 * @rmtoll CTR1 SAP LL_DMA_GetSrcAllocatedPort
1981 * @param DMAx DMAx Instance
1982 * @param Channel This parameter can be one of the following values:
1983 * @arg @ref LL_DMA_CHANNEL_0
1984 * @arg @ref LL_DMA_CHANNEL_1
1985 * @arg @ref LL_DMA_CHANNEL_2
1986 * @arg @ref LL_DMA_CHANNEL_3
1987 * @arg @ref LL_DMA_CHANNEL_4
1988 * @arg @ref LL_DMA_CHANNEL_5
1989 * @arg @ref LL_DMA_CHANNEL_6
1990 * @arg @ref LL_DMA_CHANNEL_7
1991 * @retval Returned value can be one of the following values:
1992 * @arg @ref LL_DMA_SRC_ALLOCATED_PORT0
1993 * @arg @ref LL_DMA_SRC_ALLOCATED_PORT1
1994 */
LL_DMA_GetSrcAllocatedPort(const DMA_TypeDef * DMAx,uint32_t Channel)1995 __STATIC_INLINE uint32_t LL_DMA_GetSrcAllocatedPort(const DMA_TypeDef *DMAx, uint32_t Channel)
1996 {
1997 uint32_t dma_base_addr = (uint32_t)DMAx;
1998 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SAP));
1999 }
2000
2001 /**
2002 * @brief Set data alignment mode.
2003 * @note This API is used for all available DMA channels.
2004 * @rmtoll CTR1 PAM LL_DMA_SetDataAlignment
2005 * @param DMAx DMAx Instance
2006 * @param Channel This parameter can be one of the following values:
2007 * @arg @ref LL_DMA_CHANNEL_0
2008 * @arg @ref LL_DMA_CHANNEL_1
2009 * @arg @ref LL_DMA_CHANNEL_2
2010 * @arg @ref LL_DMA_CHANNEL_3
2011 * @arg @ref LL_DMA_CHANNEL_4
2012 * @arg @ref LL_DMA_CHANNEL_5
2013 * @arg @ref LL_DMA_CHANNEL_6
2014 * @arg @ref LL_DMA_CHANNEL_7
2015 * @param DataAlignment This parameter can be one of the following values:
2016 * @arg @ref LL_DMA_DATA_ALIGN_ZEROPADD
2017 * @arg @ref LL_DMA_DATA_ALIGN_SIGNEXTPADD
2018 * @arg @ref LL_DMA_DATA_PACK_UNPACK
2019 * @retval None.
2020 */
LL_DMA_SetDataAlignment(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DataAlignment)2021 __STATIC_INLINE void LL_DMA_SetDataAlignment(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DataAlignment)
2022 {
2023 uint32_t dma_base_addr = (uint32_t)DMAx;
2024 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_PAM,
2025 DataAlignment);
2026 }
2027
2028 /**
2029 * @brief Get data alignment mode.
2030 * @note This API is used for all available DMA channels.
2031 * @rmtoll CTR1 PAM LL_DMA_GetDataAlignment
2032 * @param DMAx DMAx Instance
2033 * @param Channel This parameter can be one of the following values:
2034 * @arg @ref LL_DMA_CHANNEL_0
2035 * @arg @ref LL_DMA_CHANNEL_1
2036 * @arg @ref LL_DMA_CHANNEL_2
2037 * @arg @ref LL_DMA_CHANNEL_3
2038 * @arg @ref LL_DMA_CHANNEL_4
2039 * @arg @ref LL_DMA_CHANNEL_5
2040 * @arg @ref LL_DMA_CHANNEL_6
2041 * @arg @ref LL_DMA_CHANNEL_7
2042 * @retval Returned value can be one of the following values:
2043 * @arg @ref LL_DMA_DATA_ALIGN_ZEROPADD
2044 * @arg @ref LL_DMA_DATA_ALIGN_SIGNEXTPADD
2045 * @arg @ref LL_DMA_DATA_PACK_UNPACK
2046 */
LL_DMA_GetDataAlignment(const DMA_TypeDef * DMAx,uint32_t Channel)2047 __STATIC_INLINE uint32_t LL_DMA_GetDataAlignment(const DMA_TypeDef *DMAx, uint32_t Channel)
2048 {
2049 uint32_t dma_base_addr = (uint32_t)DMAx;
2050 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_PAM));
2051 }
2052
2053 /**
2054 * @brief Set source burst length.
2055 * @rmtoll CTR1 SBL_1 LL_DMA_SetSrcBurstLength
2056 * @param DMAx DMAx Instance
2057 * @param Channel This parameter can be one of the following values:
2058 * @arg @ref LL_DMA_CHANNEL_0
2059 * @arg @ref LL_DMA_CHANNEL_1
2060 * @arg @ref LL_DMA_CHANNEL_2
2061 * @arg @ref LL_DMA_CHANNEL_3
2062 * @arg @ref LL_DMA_CHANNEL_4
2063 * @arg @ref LL_DMA_CHANNEL_5
2064 * @arg @ref LL_DMA_CHANNEL_6
2065 * @arg @ref LL_DMA_CHANNEL_7
2066 * @param SrcBurstLength Between 1 to 64
2067 * @retval None.
2068 */
LL_DMA_SetSrcBurstLength(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcBurstLength)2069 __STATIC_INLINE void LL_DMA_SetSrcBurstLength(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcBurstLength)
2070 {
2071 uint32_t dma_base_addr = (uint32_t)DMAx;
2072 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SBL_1,
2073 ((SrcBurstLength - 1U) << DMA_CTR1_SBL_1_Pos) & DMA_CTR1_SBL_1);
2074 }
2075
2076 /**
2077 * @brief Get source burst length.
2078 * @rmtoll CTR1 SBL_1 LL_DMA_GetSrcBurstLength
2079 * @param DMAx DMAx Instance
2080 * @param Channel This parameter can be one of the following values:
2081 * @arg @ref LL_DMA_CHANNEL_0
2082 * @arg @ref LL_DMA_CHANNEL_1
2083 * @arg @ref LL_DMA_CHANNEL_2
2084 * @arg @ref LL_DMA_CHANNEL_3
2085 * @arg @ref LL_DMA_CHANNEL_4
2086 * @arg @ref LL_DMA_CHANNEL_5
2087 * @arg @ref LL_DMA_CHANNEL_6
2088 * @arg @ref LL_DMA_CHANNEL_7
2089 * @retval Between 1 to 64
2090 * @retval None.
2091 */
LL_DMA_GetSrcBurstLength(const DMA_TypeDef * DMAx,uint32_t Channel)2092 __STATIC_INLINE uint32_t LL_DMA_GetSrcBurstLength(const DMA_TypeDef *DMAx, uint32_t Channel)
2093 {
2094 uint32_t dma_base_addr = (uint32_t)DMAx;
2095 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1,
2096 DMA_CTR1_SBL_1) >> DMA_CTR1_SBL_1_Pos) + 1U);
2097 }
2098
2099 /**
2100 * @brief Set source increment mode.
2101 * @note This API is used for all available DMA channels.
2102 * @rmtoll CTR1 SINC LL_DMA_SetSrcIncMode
2103 * @param DMAx DMAx Instance
2104 * @param Channel This parameter can be one of the following values:
2105 * @arg @ref LL_DMA_CHANNEL_0
2106 * @arg @ref LL_DMA_CHANNEL_1
2107 * @arg @ref LL_DMA_CHANNEL_2
2108 * @arg @ref LL_DMA_CHANNEL_3
2109 * @arg @ref LL_DMA_CHANNEL_4
2110 * @arg @ref LL_DMA_CHANNEL_5
2111 * @arg @ref LL_DMA_CHANNEL_6
2112 * @arg @ref LL_DMA_CHANNEL_7
2113 * @param SrcInc This parameter can be one of the following values:
2114 * @arg @ref LL_DMA_SRC_FIXED
2115 * @arg @ref LL_DMA_SRC_INCREMENT
2116 * @retval None.
2117 */
LL_DMA_SetSrcIncMode(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcInc)2118 __STATIC_INLINE void LL_DMA_SetSrcIncMode(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcInc)
2119 {
2120 uint32_t dma_base_addr = (uint32_t)DMAx;
2121 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SINC, SrcInc);
2122 }
2123
2124 /**
2125 * @brief Get source increment mode.
2126 * @note This API is used for all available DMA channels.
2127 * @rmtoll CTR1 SINC LL_DMA_GetSrcIncMode
2128 * @param DMAx DMAx Instance
2129 * @param Channel This parameter can be one of the following values:
2130 * @arg @ref LL_DMA_CHANNEL_0
2131 * @arg @ref LL_DMA_CHANNEL_1
2132 * @arg @ref LL_DMA_CHANNEL_2
2133 * @arg @ref LL_DMA_CHANNEL_3
2134 * @arg @ref LL_DMA_CHANNEL_4
2135 * @arg @ref LL_DMA_CHANNEL_5
2136 * @arg @ref LL_DMA_CHANNEL_6
2137 * @arg @ref LL_DMA_CHANNEL_7
2138 * @retval Returned value can be one of the following values:
2139 * @arg @ref LL_DMA_SRC_FIXED
2140 * @arg @ref LL_DMA_SRC_INCREMENT
2141 */
LL_DMA_GetSrcIncMode(const DMA_TypeDef * DMAx,uint32_t Channel)2142 __STATIC_INLINE uint32_t LL_DMA_GetSrcIncMode(const DMA_TypeDef *DMAx, uint32_t Channel)
2143 {
2144 uint32_t dma_base_addr = (uint32_t)DMAx;
2145 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SINC));
2146 }
2147
2148 /**
2149 * @brief Set source data width.
2150 * @note This API is used for all available DMA channels.
2151 * @rmtoll CTR1 SDW_LOG2 LL_DMA_SetSrcDataWidth
2152 * @param DMAx DMAx Instance
2153 * @param Channel This parameter can be one of the following values:
2154 * @arg @ref LL_DMA_CHANNEL_0
2155 * @arg @ref LL_DMA_CHANNEL_1
2156 * @arg @ref LL_DMA_CHANNEL_2
2157 * @arg @ref LL_DMA_CHANNEL_3
2158 * @arg @ref LL_DMA_CHANNEL_4
2159 * @arg @ref LL_DMA_CHANNEL_5
2160 * @arg @ref LL_DMA_CHANNEL_6
2161 * @arg @ref LL_DMA_CHANNEL_7
2162 * @param SrcDataWidth This parameter can be one of the following values:
2163 * @arg @ref LL_DMA_SRC_DATAWIDTH_BYTE
2164 * @arg @ref LL_DMA_SRC_DATAWIDTH_HALFWORD
2165 * @arg @ref LL_DMA_SRC_DATAWIDTH_WORD
2166 * @retval None.
2167 */
LL_DMA_SetSrcDataWidth(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcDataWidth)2168 __STATIC_INLINE void LL_DMA_SetSrcDataWidth(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcDataWidth)
2169 {
2170 uint32_t dma_base_addr = (uint32_t)DMAx;
2171 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SDW_LOG2,
2172 SrcDataWidth);
2173 }
2174
2175 /**
2176 * @brief Get Source Data width.
2177 * @note This API is used for all available DMA channels.
2178 * @rmtoll CTR1 SDW_LOG2 LL_DMA_GetSrcDataWidth
2179 * @param DMAx DMAx Instance
2180 * @param Channel This parameter can be one of the following values:
2181 * @arg @ref LL_DMA_CHANNEL_0
2182 * @arg @ref LL_DMA_CHANNEL_1
2183 * @arg @ref LL_DMA_CHANNEL_2
2184 * @arg @ref LL_DMA_CHANNEL_3
2185 * @arg @ref LL_DMA_CHANNEL_4
2186 * @arg @ref LL_DMA_CHANNEL_5
2187 * @arg @ref LL_DMA_CHANNEL_6
2188 * @arg @ref LL_DMA_CHANNEL_7
2189 * @retval Returned value can be one of the following values:
2190 * @arg @ref LL_DMA_SRC_DATAWIDTH_BYTE
2191 * @arg @ref LL_DMA_SRC_DATAWIDTH_HALFWORD
2192 * @arg @ref LL_DMA_SRC_DATAWIDTH_WORD
2193 */
LL_DMA_GetSrcDataWidth(const DMA_TypeDef * DMAx,uint32_t Channel)2194 __STATIC_INLINE uint32_t LL_DMA_GetSrcDataWidth(const DMA_TypeDef *DMAx, uint32_t Channel)
2195 {
2196 uint32_t dma_base_addr = (uint32_t)DMAx;
2197 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR1, DMA_CTR1_SDW_LOG2));
2198 }
2199
2200 /**
2201 * @brief Configure channel transfer.
2202 * @note This API is used for all available DMA channels.
2203 * @rmtoll CTR2 TCEM LL_DMA_ConfigChannelTransfer\n
2204 * CTR2 TRIGPOL LL_DMA_ConfigChannelTransfer\n
2205 * CTR2 TRIGM LL_DMA_ConfigChannelTransfer\n
2206 * CTR2 BREQ LL_DMA_ConfigChannelTransfer\n
2207 * CTR2 DREQ LL_DMA_ConfigChannelTransfer\n
2208 * CTR2 SWREQ LL_DMA_ConfigChannelTransfer
2209 * @param DMAx DMAx Instance
2210 * @param Channel This parameter can be one of the following values:
2211 * @arg @ref LL_DMA_CHANNEL_0
2212 * @arg @ref LL_DMA_CHANNEL_1
2213 * @arg @ref LL_DMA_CHANNEL_2
2214 * @arg @ref LL_DMA_CHANNEL_3
2215 * @arg @ref LL_DMA_CHANNEL_4
2216 * @arg @ref LL_DMA_CHANNEL_5
2217 * @arg @ref LL_DMA_CHANNEL_6
2218 * @arg @ref LL_DMA_CHANNEL_7
2219 * @param Configuration This parameter must be a combination of all the following values:
2220 * @arg @ref LL_DMA_TCEM_BLK_TRANSFER or @ref LL_DMA_TCEM_RPT_BLK_TRANSFER or
2221 * @ref LL_DMA_TCEM_EACH_LLITEM_TRANSFER or @ref LL_DMA_TCEM_LAST_LLITEM_TRANSFER
2222 * @arg @ref LL_DMA_HWREQUEST_SINGLEBURST or @ref LL_DMA_HWREQUEST_BLK
2223 * @arg @ref LL_DMA_TRIG_POLARITY_MASKED or @ref LL_DMA_TRIG_POLARITY_RISING or
2224 * @ref LL_DMA_TRIG_POLARITY_FALLING
2225 * @arg @ref LL_DMA_TRIGM_BLK_TRANSFER or @ref LL_DMA_TRIGM_RPT_BLK_TRANSFER or
2226 * @ref LL_DMA_TRIGM_LLI_LINK_TRANSFER or @ref LL_DMA_TRIGM_SINGLBURST_TRANSFER
2227 * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY or @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH or
2228 * @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
2229 *@retval None.
2230 */
LL_DMA_ConfigChannelTransfer(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Configuration)2231 __STATIC_INLINE void LL_DMA_ConfigChannelTransfer(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
2232 {
2233 uint32_t dma_base_addr = (uint32_t)DMAx;
2234 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2,
2235 (DMA_CTR2_TCEM | DMA_CTR2_TRIGPOL | DMA_CTR2_TRIGM | DMA_CTR2_DREQ | DMA_CTR2_SWREQ | DMA_CTR2_BREQ),
2236 Configuration);
2237 }
2238
2239 /**
2240 * @brief Set transfer event mode.
2241 * @note This API is used for all available DMA channels.
2242 * @rmtoll CTR2 TCEM LL_DMA_SetTransferEventMode
2243 * @param DMAx DMAx Instance
2244 * @param Channel This parameter can be one of the following values:
2245 * @arg @ref LL_DMA_CHANNEL_0
2246 * @arg @ref LL_DMA_CHANNEL_1
2247 * @arg @ref LL_DMA_CHANNEL_2
2248 * @arg @ref LL_DMA_CHANNEL_3
2249 * @arg @ref LL_DMA_CHANNEL_4
2250 * @arg @ref LL_DMA_CHANNEL_5
2251 * @arg @ref LL_DMA_CHANNEL_6
2252 * @arg @ref LL_DMA_CHANNEL_7
2253 * @param TransferEventMode This parameter can be one of the following values:
2254 * @arg @ref LL_DMA_TCEM_BLK_TRANSFER
2255 * @arg @ref LL_DMA_TCEM_RPT_BLK_TRANSFER
2256 * @arg @ref LL_DMA_TCEM_EACH_LLITEM_TRANSFER
2257 * @arg @ref LL_DMA_TCEM_LAST_LLITEM_TRANSFER
2258 * @retval None.
2259 */
LL_DMA_SetTransferEventMode(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t TransferEventMode)2260 __STATIC_INLINE void LL_DMA_SetTransferEventMode(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t TransferEventMode)
2261 {
2262 uint32_t dma_base_addr = (uint32_t)DMAx;
2263 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_TCEM,
2264 TransferEventMode);
2265 }
2266
2267 /**
2268 * @brief Get transfer event mode.
2269 * @note This API is used for all available DMA channels.
2270 * @rmtoll CTR2 TCEM LL_DMA_GetTransferEventMode
2271 * @param DMAx DMAx Instance
2272 * @param Channel This parameter can be one of the following values:
2273 * @arg @ref LL_DMA_CHANNEL_0
2274 * @arg @ref LL_DMA_CHANNEL_1
2275 * @arg @ref LL_DMA_CHANNEL_2
2276 * @arg @ref LL_DMA_CHANNEL_3
2277 * @arg @ref LL_DMA_CHANNEL_4
2278 * @arg @ref LL_DMA_CHANNEL_5
2279 * @arg @ref LL_DMA_CHANNEL_6
2280 * @arg @ref LL_DMA_CHANNEL_7
2281 * @retval Returned value can be one of the following values:
2282 * @arg @ref LL_DMA_TCEM_BLK_TRANSFER
2283 * @arg @ref LL_DMA_TCEM_RPT_BLK_TRANSFER
2284 * @arg @ref LL_DMA_TCEM_EACH_LLITEM_TRANSFER
2285 * @arg @ref LL_DMA_TCEM_LAST_LLITEM_TRANSFER
2286 */
LL_DMA_GetTransferEventMode(const DMA_TypeDef * DMAx,uint32_t Channel)2287 __STATIC_INLINE uint32_t LL_DMA_GetTransferEventMode(const DMA_TypeDef *DMAx, uint32_t Channel)
2288 {
2289 uint32_t dma_base_addr = (uint32_t)DMAx;
2290 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_TCEM));
2291 }
2292
2293 /**
2294 * @brief Set trigger polarity.
2295 * @note This API is used for all available DMA channels.
2296 * @rmtoll CTR2 TRIGPOL LL_DMA_SetTriggerPolarity
2297 * @param DMAx DMAx Instance
2298 * @param Channel This parameter can be one of the following values:
2299 * @arg @ref LL_DMA_CHANNEL_0
2300 * @arg @ref LL_DMA_CHANNEL_1
2301 * @arg @ref LL_DMA_CHANNEL_2
2302 * @arg @ref LL_DMA_CHANNEL_3
2303 * @arg @ref LL_DMA_CHANNEL_4
2304 * @arg @ref LL_DMA_CHANNEL_5
2305 * @arg @ref LL_DMA_CHANNEL_6
2306 * @arg @ref LL_DMA_CHANNEL_7
2307 * @param TriggerPolarity This parameter can be one of the following values:
2308 * @arg @ref LL_DMA_TRIG_POLARITY_MASKED
2309 * @arg @ref LL_DMA_TRIG_POLARITY_RISING
2310 * @arg @ref LL_DMA_TRIG_POLARITY_FALLING
2311 * @retval None.
2312 */
LL_DMA_SetTriggerPolarity(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t TriggerPolarity)2313 __STATIC_INLINE void LL_DMA_SetTriggerPolarity(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t TriggerPolarity)
2314 {
2315 uint32_t dma_base_addr = (uint32_t)DMAx;
2316 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_TRIGPOL,
2317 TriggerPolarity);
2318 }
2319
2320 /**
2321 * @brief Get trigger polarity.
2322 * @note This API is used for all available DMA channels.
2323 * @rmtoll CTR2 TRIGPOL LL_DMA_GetTriggerPolarity
2324 * @param DMAx DMAx Instance
2325 * @param Channel This parameter can be one of the following values:
2326 * @arg @ref LL_DMA_CHANNEL_0
2327 * @arg @ref LL_DMA_CHANNEL_1
2328 * @arg @ref LL_DMA_CHANNEL_2
2329 * @arg @ref LL_DMA_CHANNEL_3
2330 * @arg @ref LL_DMA_CHANNEL_4
2331 * @arg @ref LL_DMA_CHANNEL_5
2332 * @arg @ref LL_DMA_CHANNEL_6
2333 * @arg @ref LL_DMA_CHANNEL_7
2334 * @retval Returned value can be one of the following values:
2335 * @arg @ref LL_DMA_TRIG_POLARITY_MASKED
2336 * @arg @ref LL_DMA_TRIG_POLARITY_RISING
2337 * @arg @ref LL_DMA_TRIG_POLARITY_FALLING
2338 */
LL_DMA_GetTriggerPolarity(const DMA_TypeDef * DMAx,uint32_t Channel)2339 __STATIC_INLINE uint32_t LL_DMA_GetTriggerPolarity(const DMA_TypeDef *DMAx, uint32_t Channel)
2340 {
2341 uint32_t dma_base_addr = (uint32_t)DMAx;
2342 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_TRIGPOL));
2343 }
2344
2345 /**
2346 * @brief Set trigger Mode.
2347 * @note This API is used for all available DMA channels.
2348 * @rmtoll CTR2 TRIGM LL_DMA_SetTriggerMode
2349 * @param DMAx DMAx Instance
2350 * @param Channel This parameter can be one of the following values:
2351 * @arg @ref LL_DMA_CHANNEL_0
2352 * @arg @ref LL_DMA_CHANNEL_1
2353 * @arg @ref LL_DMA_CHANNEL_2
2354 * @arg @ref LL_DMA_CHANNEL_3
2355 * @arg @ref LL_DMA_CHANNEL_4
2356 * @arg @ref LL_DMA_CHANNEL_5
2357 * @arg @ref LL_DMA_CHANNEL_6
2358 * @arg @ref LL_DMA_CHANNEL_7
2359 * @param TriggerMode This parameter can be one of the following values:
2360 * @arg @ref LL_DMA_TRIGM_BLK_TRANSFER
2361 * @arg @ref LL_DMA_TRIGM_LLI_LINK_TRANSFER
2362 * @arg @ref LL_DMA_TRIGM_SINGLBURST_TRANSFER
2363 * @retval None.
2364 */
LL_DMA_SetTriggerMode(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t TriggerMode)2365 __STATIC_INLINE void LL_DMA_SetTriggerMode(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t TriggerMode)
2366 {
2367 uint32_t dma_base_addr = (uint32_t)DMAx;
2368 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_TRIGM,
2369 TriggerMode);
2370 }
2371
2372 /**
2373 * @brief Get trigger Mode.
2374 * @note This API is used for all available DMA channels.
2375 * @rmtoll CTR2 TRIGM LL_DMA_GetTriggerMode
2376 * @param DMAx DMAx Instance
2377 * @param Channel This parameter can be one of the following values:
2378 * @arg @ref LL_DMA_CHANNEL_0
2379 * @arg @ref LL_DMA_CHANNEL_1
2380 * @arg @ref LL_DMA_CHANNEL_2
2381 * @arg @ref LL_DMA_CHANNEL_3
2382 * @arg @ref LL_DMA_CHANNEL_4
2383 * @arg @ref LL_DMA_CHANNEL_5
2384 * @arg @ref LL_DMA_CHANNEL_6
2385 * @arg @ref LL_DMA_CHANNEL_7
2386 * @retval Returned value can be one of the following values:
2387 * @arg @ref LL_DMA_TRIGM_BLK_TRANSFER
2388 * @arg @ref LL_DMA_TRIGM_LLI_LINK_TRANSFER
2389 * @arg @ref LL_DMA_TRIGM_SINGLBURST_TRANSFER
2390 */
LL_DMA_GetTriggerMode(const DMA_TypeDef * DMAx,uint32_t Channel)2391 __STATIC_INLINE uint32_t LL_DMA_GetTriggerMode(const DMA_TypeDef *DMAx, uint32_t Channel)
2392 {
2393 uint32_t dma_base_addr = (uint32_t)DMAx;
2394 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_TRIGM));
2395 }
2396
2397 /**
2398 * @brief Set destination hardware and software transfer request.
2399 * @note This API is used for all available DMA channels.
2400 * @rmtoll CTR2 DREQ LL_DMA_SetDataTransferDirection\n
2401 * @rmtoll CTR2 SWREQ LL_DMA_SetDataTransferDirection
2402 * @param DMAx DMAx Instance
2403 * @param Channel This parameter can be one of the following values:
2404 * @arg @ref LL_DMA_CHANNEL_0
2405 * @arg @ref LL_DMA_CHANNEL_1
2406 * @arg @ref LL_DMA_CHANNEL_2
2407 * @arg @ref LL_DMA_CHANNEL_3
2408 * @arg @ref LL_DMA_CHANNEL_4
2409 * @arg @ref LL_DMA_CHANNEL_5
2410 * @arg @ref LL_DMA_CHANNEL_6
2411 * @arg @ref LL_DMA_CHANNEL_7
2412 * @param Direction This parameter can be one of the following values:
2413 * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
2414 * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
2415 * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
2416 * @retval None.
2417 */
LL_DMA_SetDataTransferDirection(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Direction)2418 __STATIC_INLINE void LL_DMA_SetDataTransferDirection(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Direction)
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]))->CTR2,
2422 DMA_CTR2_DREQ | DMA_CTR2_SWREQ, Direction);
2423 }
2424
2425 /**
2426 * @brief Get destination hardware and software transfer request.
2427 * @note This API is used for all available DMA channels.
2428 * @rmtoll CTR2 DREQ LL_DMA_GetDataTransferDirection\n
2429 * @rmtoll CTR2 SWREQ LL_DMA_GetDataTransferDirection
2430 * @param DMAx DMAx Instance
2431 * @param Channel This parameter can be one of the following values:
2432 * @arg @ref LL_DMA_CHANNEL_0
2433 * @arg @ref LL_DMA_CHANNEL_1
2434 * @arg @ref LL_DMA_CHANNEL_2
2435 * @arg @ref LL_DMA_CHANNEL_3
2436 * @arg @ref LL_DMA_CHANNEL_4
2437 * @arg @ref LL_DMA_CHANNEL_5
2438 * @arg @ref LL_DMA_CHANNEL_6
2439 * @arg @ref LL_DMA_CHANNEL_7
2440 * @retval Returned value can be one of the following values:
2441 * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
2442 * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
2443 * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
2444 */
LL_DMA_GetDataTransferDirection(const DMA_TypeDef * DMAx,uint32_t Channel)2445 __STATIC_INLINE uint32_t LL_DMA_GetDataTransferDirection(const DMA_TypeDef *DMAx, uint32_t Channel)
2446 {
2447 uint32_t dma_base_addr = (uint32_t)DMAx;
2448 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2,
2449 DMA_CTR2_DREQ | DMA_CTR2_SWREQ));
2450 }
2451
2452 /**
2453 * @brief Set block hardware request.
2454 * @note This API is used for all available DMA channels.
2455 * @rmtoll CTR2 BREQ LL_DMA_SetBlkHWRequest\n
2456 * @param DMAx DMAx Instance
2457 * @param Channel This parameter can be one of the following values:
2458 * @arg @ref LL_DMA_CHANNEL_0
2459 * @arg @ref LL_DMA_CHANNEL_1
2460 * @arg @ref LL_DMA_CHANNEL_2
2461 * @arg @ref LL_DMA_CHANNEL_3
2462 * @arg @ref LL_DMA_CHANNEL_4
2463 * @arg @ref LL_DMA_CHANNEL_5
2464 * @arg @ref LL_DMA_CHANNEL_6
2465 * @arg @ref LL_DMA_CHANNEL_7
2466 * @param BlkHWRequest This parameter can be one of the following values:
2467 * @arg @ref LL_DMA_HWREQUEST_SINGLEBURST
2468 * @arg @ref LL_DMA_HWREQUEST_BLK
2469 * @retval None.
2470 */
LL_DMA_SetBlkHWRequest(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t BlkHWRequest)2471 __STATIC_INLINE void LL_DMA_SetBlkHWRequest(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t BlkHWRequest)
2472 {
2473 uint32_t dma_base_addr = (uint32_t)DMAx;
2474 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_BREQ,
2475 BlkHWRequest);
2476 }
2477
2478 /**
2479 * @brief Get block hardware request.
2480 * @note This API is used for all available DMA channels.
2481 * @rmtoll CTR2 BREQ LL_DMA_GetBlkHWRequest\n
2482 * @param DMAx DMAx Instance
2483 * @param Channel This parameter can be one of the following values:
2484 * @arg @ref LL_DMA_CHANNEL_0
2485 * @arg @ref LL_DMA_CHANNEL_1
2486 * @arg @ref LL_DMA_CHANNEL_2
2487 * @arg @ref LL_DMA_CHANNEL_3
2488 * @arg @ref LL_DMA_CHANNEL_4
2489 * @arg @ref LL_DMA_CHANNEL_5
2490 * @arg @ref LL_DMA_CHANNEL_6
2491 * @arg @ref LL_DMA_CHANNEL_7
2492 * @retval Returned value can be one of the following values:
2493 * @arg @ref LL_DMA_HWREQUEST_SINGLEBURST
2494 * @arg @ref LL_DMA_HWREQUEST_BLK
2495 */
LL_DMA_GetBlkHWRequest(const DMA_TypeDef * DMAx,uint32_t Channel)2496 __STATIC_INLINE uint32_t LL_DMA_GetBlkHWRequest(const DMA_TypeDef *DMAx, uint32_t Channel)
2497 {
2498 uint32_t dma_base_addr = (uint32_t)DMAx;
2499 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_BREQ));
2500 }
2501
2502 /**
2503 * @brief Set hardware request.
2504 * @note This API is used for all available DMA channels.
2505 * @rmtoll CTR2 REQSEL LL_DMA_SetPeriphRequest
2506 * @param DMAx DMAx Instance
2507 * @param Channel This parameter can be one of the following values:
2508 * @arg @ref LL_DMA_CHANNEL_0
2509 * @arg @ref LL_DMA_CHANNEL_1
2510 * @arg @ref LL_DMA_CHANNEL_2
2511 * @arg @ref LL_DMA_CHANNEL_3
2512 * @arg @ref LL_DMA_CHANNEL_4
2513 * @arg @ref LL_DMA_CHANNEL_5
2514 * @arg @ref LL_DMA_CHANNEL_6
2515 * @arg @ref LL_DMA_CHANNEL_7
2516 * @param Request This parameter can be one of the following values:
2517 * @arg @ref LL_GPDMA1_REQUEST_ADC4
2518 * @arg @ref LL_GPDMA1_REQUEST_SPI1_RX (*)
2519 * @arg @ref LL_GPDMA1_REQUEST_SPI1_TX (*)
2520 * @arg @ref LL_GPDMA1_REQUEST_SPI3_RX
2521 * @arg @ref LL_GPDMA1_REQUEST_SPI3_TX
2522 * @arg @ref LL_GPDMA1_REQUEST_I2C1_RX (*)
2523 * @arg @ref LL_GPDMA1_REQUEST_I2C1_TX (*)
2524 * @arg @ref LL_GPDMA1_REQUEST_I2C1_EVC (*)
2525 * @arg @ref LL_GPDMA1_REQUEST_I2C3_RX
2526 * @arg @ref LL_GPDMA1_REQUEST_I2C3_TX
2527 * @arg @ref LL_GPDMA1_REQUEST_I2C3_EVC
2528 * @arg @ref LL_GPDMA1_REQUEST_USART1_RX
2529 * @arg @ref LL_GPDMA1_REQUEST_USART1_TX
2530 * @arg @ref LL_GPDMA1_REQUEST_USART2_RX (*)
2531 * @arg @ref LL_GPDMA1_REQUEST_USART2_TX (*)
2532 * @arg @ref LL_GPDMA1_REQUEST_LPUART1_RX
2533 * @arg @ref LL_GPDMA1_REQUEST_LPUART1_TX
2534 * @arg @ref LL_GPDMA1_REQUEST_SAI1_A (*)
2535 * @arg @ref LL_GPDMA1_REQUEST_SAI1_B (*)
2536 * @arg @ref LL_GPDMA1_REQUEST_TIM1_CH1
2537 * @arg @ref LL_GPDMA1_REQUEST_TIM1_CH2
2538 * @arg @ref LL_GPDMA1_REQUEST_TIM1_CH3
2539 * @arg @ref LL_GPDMA1_REQUEST_TIM1_CH4
2540 * @arg @ref LL_GPDMA1_REQUEST_TIM1_UP
2541 * @arg @ref LL_GPDMA1_REQUEST_TIM1_TRIG
2542 * @arg @ref LL_GPDMA1_REQUEST_TIM1_COM
2543 * @arg @ref LL_GPDMA1_REQUEST_TIM2_CH1
2544 * @arg @ref LL_GPDMA1_REQUEST_TIM2_CH2
2545 * @arg @ref LL_GPDMA1_REQUEST_TIM2_CH3
2546 * @arg @ref LL_GPDMA1_REQUEST_TIM2_CH4
2547 * @arg @ref LL_GPDMA1_REQUEST_TIM2_UP
2548 * @arg @ref LL_GPDMA1_REQUEST_TIM3_CH1 (*)
2549 * @arg @ref LL_GPDMA1_REQUEST_TIM3_CH2 (*)
2550 * @arg @ref LL_GPDMA1_REQUEST_TIM3_CH3 (*)
2551 * @arg @ref LL_GPDMA1_REQUEST_TIM3_CH4 (*)
2552 * @arg @ref LL_GPDMA1_REQUEST_TIM3_UP (*)
2553 * @arg @ref LL_GPDMA1_REQUEST_TIM3_TRIG (*)
2554 * @arg @ref LL_GPDMA1_REQUEST_TIM16_CH1
2555 * @arg @ref LL_GPDMA1_REQUEST_TIM16_UP
2556 * @arg @ref LL_GPDMA1_REQUEST_TIM17_CH1 (*)
2557 * @arg @ref LL_GPDMA1_REQUEST_TIM17_UP (*)
2558 * @arg @ref LL_GPDMA1_REQUEST_AES_IN (*)
2559 * @arg @ref LL_GPDMA1_REQUEST_AES_OUT (*)
2560 * @arg @ref LL_GPDMA1_REQUEST_HASH_IN
2561 * @arg @ref LL_GPDMA1_REQUEST_SAES_IN (*)
2562 * @arg @ref LL_GPDMA1_REQUEST_SAES_OUT (*)
2563 * @arg @ref LL_GPDMA1_REQUEST_LPTIM1_IC1
2564 * @arg @ref LL_GPDMA1_REQUEST_LPTIM1_IC2
2565 * @arg @ref LL_GPDMA1_REQUEST_LPTIM1_UE
2566 * @arg @ref LL_GPDMA1_REQUEST_LPTIM2_IC1 (*)
2567 * @arg @ref LL_GPDMA1_REQUEST_LPTIM2_IC2 (*)
2568 * @arg @ref LL_GPDMA1_REQUEST_LPTIM2_UE (*)
2569 * @arg @ref LL_GPDMA1_REQUEST_SPI2_RX (*)
2570 * @arg @ref LL_GPDMA1_REQUEST_SPI2_TX (*)
2571 * @arg @ref LL_GPDMA1_REQUEST_I2C2_RX (*)
2572 * @arg @ref LL_GPDMA1_REQUEST_I2C2_TX (*)
2573 * @arg @ref LL_GPDMA1_REQUEST_I2C2_EVC (*)
2574 * @arg @ref LL_GPDMA1_REQUEST_I2C4_RX (*)
2575 * @arg @ref LL_GPDMA1_REQUEST_I2C4_TX (*)
2576 * @arg @ref LL_GPDMA1_REQUEST_I2C4_EVC (*)
2577 * @arg @ref LL_GPDMA1_REQUEST_TIM4_CH1 (*)
2578 * @arg @ref LL_GPDMA1_REQUEST_TIM4_CH2 (*)
2579 * @arg @ref LL_GPDMA1_REQUEST_TIM4_CH3 (*)
2580 * @arg @ref LL_GPDMA1_REQUEST_TIM4_CH4 (*)
2581 * @arg @ref LL_GPDMA1_REQUEST_TIM4_UP (*)
2582 * @arg @ref LL_GPDMA1_REQUEST_USART3_RX (*)
2583 * @arg @ref LL_GPDMA1_REQUEST_USART3_TX (*)
2584 * @note (*) Availability depends on devices.
2585 * @retval None.
2586 */
LL_DMA_SetPeriphRequest(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Request)2587 __STATIC_INLINE void LL_DMA_SetPeriphRequest(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Request)
2588 {
2589 uint32_t dma_base_addr = (uint32_t)DMAx;
2590 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_REQSEL, Request);
2591 }
2592
2593 /**
2594 * @brief Get hardware request.
2595 * @note This API is used for all available DMA channels.
2596 * @rmtoll CTR2 REQSEL LL_DMA_GetPeriphRequest
2597 * @param DMAx DMAx Instance
2598 * @param Channel This parameter can be one of the following values:
2599 * @arg @ref LL_DMA_CHANNEL_0
2600 * @arg @ref LL_DMA_CHANNEL_1
2601 * @arg @ref LL_DMA_CHANNEL_2
2602 * @arg @ref LL_DMA_CHANNEL_3
2603 * @arg @ref LL_DMA_CHANNEL_4
2604 * @arg @ref LL_DMA_CHANNEL_5
2605 * @arg @ref LL_DMA_CHANNEL_6
2606 * @arg @ref LL_DMA_CHANNEL_7
2607 * @retval Returned value can be one of the following values:
2608 * @arg @ref LL_GPDMA1_REQUEST_ADC4
2609 * @arg @ref LL_GPDMA1_REQUEST_SPI1_RX (*)
2610 * @arg @ref LL_GPDMA1_REQUEST_SPI1_TX (*)
2611 * @arg @ref LL_GPDMA1_REQUEST_SPI3_RX
2612 * @arg @ref LL_GPDMA1_REQUEST_SPI3_TX
2613 * @arg @ref LL_GPDMA1_REQUEST_I2C1_RX (*)
2614 * @arg @ref LL_GPDMA1_REQUEST_I2C1_TX (*)
2615 * @arg @ref LL_GPDMA1_REQUEST_I2C1_EVC (*)
2616 * @arg @ref LL_GPDMA1_REQUEST_I2C3_RX
2617 * @arg @ref LL_GPDMA1_REQUEST_I2C3_TX
2618 * @arg @ref LL_GPDMA1_REQUEST_I2C3_EVC
2619 * @arg @ref LL_GPDMA1_REQUEST_USART1_RX
2620 * @arg @ref LL_GPDMA1_REQUEST_USART1_TX
2621 * @arg @ref LL_GPDMA1_REQUEST_USART2_RX (*)
2622 * @arg @ref LL_GPDMA1_REQUEST_USART2_TX (*)
2623 * @arg @ref LL_GPDMA1_REQUEST_LPUART1_RX
2624 * @arg @ref LL_GPDMA1_REQUEST_LPUART1_TX
2625 * @arg @ref LL_GPDMA1_REQUEST_SAI1_A (*)
2626 * @arg @ref LL_GPDMA1_REQUEST_SAI1_B (*)
2627 * @arg @ref LL_GPDMA1_REQUEST_TIM1_CH1
2628 * @arg @ref LL_GPDMA1_REQUEST_TIM1_CH2
2629 * @arg @ref LL_GPDMA1_REQUEST_TIM1_CH3
2630 * @arg @ref LL_GPDMA1_REQUEST_TIM1_CH4
2631 * @arg @ref LL_GPDMA1_REQUEST_TIM1_UP
2632 * @arg @ref LL_GPDMA1_REQUEST_TIM1_TRIG
2633 * @arg @ref LL_GPDMA1_REQUEST_TIM1_COM
2634 * @arg @ref LL_GPDMA1_REQUEST_TIM2_CH1
2635 * @arg @ref LL_GPDMA1_REQUEST_TIM2_CH2
2636 * @arg @ref LL_GPDMA1_REQUEST_TIM2_CH3
2637 * @arg @ref LL_GPDMA1_REQUEST_TIM2_CH4
2638 * @arg @ref LL_GPDMA1_REQUEST_TIM2_UP
2639 * @arg @ref LL_GPDMA1_REQUEST_TIM3_CH1 (*)
2640 * @arg @ref LL_GPDMA1_REQUEST_TIM3_CH2 (*)
2641 * @arg @ref LL_GPDMA1_REQUEST_TIM3_CH3 (*)
2642 * @arg @ref LL_GPDMA1_REQUEST_TIM3_CH4 (*)
2643 * @arg @ref LL_GPDMA1_REQUEST_TIM3_UP (*)
2644 * @arg @ref LL_GPDMA1_REQUEST_TIM3_TRIG (*)
2645 * @arg @ref LL_GPDMA1_REQUEST_TIM16_CH1
2646 * @arg @ref LL_GPDMA1_REQUEST_TIM16_UP
2647 * @arg @ref LL_GPDMA1_REQUEST_TIM17_CH1 (*)
2648 * @arg @ref LL_GPDMA1_REQUEST_TIM17_UP (*)
2649 * @arg @ref LL_GPDMA1_REQUEST_AES_IN (*)
2650 * @arg @ref LL_GPDMA1_REQUEST_AES_OUT (*)
2651 * @arg @ref LL_GPDMA1_REQUEST_HASH_IN
2652 * @arg @ref LL_GPDMA1_REQUEST_SAES_IN (*)
2653 * @arg @ref LL_GPDMA1_REQUEST_SAES_OUT (*)
2654 * @arg @ref LL_GPDMA1_REQUEST_LPTIM1_IC1
2655 * @arg @ref LL_GPDMA1_REQUEST_LPTIM1_IC2
2656 * @arg @ref LL_GPDMA1_REQUEST_LPTIM1_UE
2657 * @arg @ref LL_GPDMA1_REQUEST_LPTIM2_IC1 (*)
2658 * @arg @ref LL_GPDMA1_REQUEST_LPTIM2_IC2 (*)
2659 * @arg @ref LL_GPDMA1_REQUEST_LPTIM2_UE (*)
2660 * @arg @ref LL_GPDMA1_REQUEST_SPI2_RX (*)
2661 * @arg @ref LL_GPDMA1_REQUEST_SPI2_TX (*)
2662 * @arg @ref LL_GPDMA1_REQUEST_I2C2_RX (*)
2663 * @arg @ref LL_GPDMA1_REQUEST_I2C2_TX (*)
2664 * @arg @ref LL_GPDMA1_REQUEST_I2C2_EVC (*)
2665 * @arg @ref LL_GPDMA1_REQUEST_I2C4_RX (*)
2666 * @arg @ref LL_GPDMA1_REQUEST_I2C4_TX (*)
2667 * @arg @ref LL_GPDMA1_REQUEST_I2C4_EVC (*)
2668 * @arg @ref LL_GPDMA1_REQUEST_TIM4_CH1 (*)
2669 * @arg @ref LL_GPDMA1_REQUEST_TIM4_CH2 (*)
2670 * @arg @ref LL_GPDMA1_REQUEST_TIM4_CH3 (*)
2671 * @arg @ref LL_GPDMA1_REQUEST_TIM4_CH4 (*)
2672 * @arg @ref LL_GPDMA1_REQUEST_TIM4_UP (*)
2673 * @arg @ref LL_GPDMA1_REQUEST_USART3_RX (*)
2674 * @arg @ref LL_GPDMA1_REQUEST_USART3_TX (*)
2675 * @note (*) Availability depends on devices.
2676 */
LL_DMA_GetPeriphRequest(const DMA_TypeDef * DMAx,uint32_t Channel)2677 __STATIC_INLINE uint32_t LL_DMA_GetPeriphRequest(const DMA_TypeDef *DMAx, uint32_t Channel)
2678 {
2679 uint32_t dma_base_addr = (uint32_t)DMAx;
2680 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_REQSEL));
2681 }
2682
2683 /**
2684 * @brief Set hardware trigger.
2685 * @note This API is used for all available DMA channels.
2686 * @rmtoll CTR2 TRIGSEL LL_DMA_SetHWTrigger
2687 * @param DMAx DMAx Instance
2688 * @param Channel This parameter can be one of the following values:
2689 * @arg @ref LL_DMA_CHANNEL_0
2690 * @arg @ref LL_DMA_CHANNEL_1
2691 * @arg @ref LL_DMA_CHANNEL_2
2692 * @arg @ref LL_DMA_CHANNEL_3
2693 * @arg @ref LL_DMA_CHANNEL_4
2694 * @arg @ref LL_DMA_CHANNEL_5
2695 * @arg @ref LL_DMA_CHANNEL_6
2696 * @arg @ref LL_DMA_CHANNEL_7
2697 * @param Trigger This parameter can be one of the following values:
2698 * @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE0
2699 * @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE1
2700 * @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE2
2701 * @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE3
2702 * @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE4
2703 * @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE5
2704 * @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE6
2705 * @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE7
2706 * @arg @ref LL_GPDMA1_TRIGGER_TAMP_TRG1
2707 * @arg @ref LL_GPDMA1_TRIGGER_TAMP_TRG2
2708 * @arg @ref LL_GPDMA1_TRIGGER_TAMP_TRG3
2709 * @arg @ref LL_GPDMA1_TRIGGER_LPTIM1_CH1
2710 * @arg @ref LL_GPDMA1_TRIGGER_LPTIM1_CH2
2711 * @arg @ref LL_GPDMA1_TRIGGER_LPTIM2_CH1 (*)
2712 * @arg @ref LL_GPDMA1_TRIGGER_LPTIM2_CH2 (*)
2713 * @arg @ref LL_GPDMA1_TRIGGER_COMP1_OUT (*)
2714 * @arg @ref LL_GPDMA1_TRIGGER_COMP2_OUT (*)
2715 * @arg @ref LL_GPDMA1_TRIGGER_RTC_ALRA_TRG
2716 * @arg @ref LL_GPDMA1_TRIGGER_RTC_ALRB_TRG
2717 * @arg @ref LL_GPDMA1_TRIGGER_RTC_WUT_TRG
2718 * @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH0_TCF
2719 * @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH1_TCF
2720 * @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH2_TCF
2721 * @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH3_TCF
2722 * @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH4_TCF
2723 * @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH5_TCF
2724 * @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH6_TCF
2725 * @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH7_TCF
2726 * @arg @ref LL_GPDMA1_TRIGGER_TIM2_TRGO
2727 * @arg @ref LL_GPDMA1_TRIGGER_ADC4_AWD1
2728 * @arg @ref LL_GPDMA1_TRIGGER_TIM3_TRGO (*)
2729 * @retval None.
2730 */
LL_DMA_SetHWTrigger(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t Trigger)2731 __STATIC_INLINE void LL_DMA_SetHWTrigger(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Trigger)
2732 {
2733 uint32_t dma_base_addr = (uint32_t)DMAx;
2734 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2, DMA_CTR2_TRIGSEL,
2735 (Trigger << DMA_CTR2_TRIGSEL_Pos) & DMA_CTR2_TRIGSEL);
2736 }
2737
2738 /**
2739 * @brief Get hardware triggers.
2740 * @note This API is used for all available DMA channels.
2741 * @rmtoll CTR2 TRIGSEL LL_DMA_GetHWTrigger
2742 * @param DMAx DMAx Instance
2743 * @param Channel This parameter can be one of the following values:
2744 * @arg @ref LL_DMA_CHANNEL_0
2745 * @arg @ref LL_DMA_CHANNEL_1
2746 * @arg @ref LL_DMA_CHANNEL_2
2747 * @arg @ref LL_DMA_CHANNEL_3
2748 * @arg @ref LL_DMA_CHANNEL_4
2749 * @arg @ref LL_DMA_CHANNEL_5
2750 * @arg @ref LL_DMA_CHANNEL_6
2751 * @arg @ref LL_DMA_CHANNEL_7
2752 * @retval Returned value can be one of the following values:
2753 * @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE0
2754 * @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE1
2755 * @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE2
2756 * @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE3
2757 * @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE4
2758 * @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE5
2759 * @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE6
2760 * @arg @ref LL_GPDMA1_TRIGGER_EXTI_LINE7
2761 * @arg @ref LL_GPDMA1_TRIGGER_TAMP_TRG1
2762 * @arg @ref LL_GPDMA1_TRIGGER_TAMP_TRG2
2763 * @arg @ref LL_GPDMA1_TRIGGER_TAMP_TRG3
2764 * @arg @ref LL_GPDMA1_TRIGGER_LPTIM1_CH1
2765 * @arg @ref LL_GPDMA1_TRIGGER_LPTIM1_CH2
2766 * @arg @ref LL_GPDMA1_TRIGGER_LPTIM2_CH1 (*)
2767 * @arg @ref LL_GPDMA1_TRIGGER_LPTIM2_CH2 (*)
2768 * @arg @ref LL_GPDMA1_TRIGGER_COMP1_OUT (*)
2769 * @arg @ref LL_GPDMA1_TRIGGER_COMP2_OUT (*)
2770 * @arg @ref LL_GPDMA1_TRIGGER_RTC_ALRA_TRG
2771 * @arg @ref LL_GPDMA1_TRIGGER_RTC_ALRB_TRG
2772 * @arg @ref LL_GPDMA1_TRIGGER_RTC_WUT_TRG
2773 * @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH0_TCF
2774 * @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH1_TCF
2775 * @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH2_TCF
2776 * @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH3_TCF
2777 * @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH4_TCF
2778 * @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH5_TCF
2779 * @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH6_TCF
2780 * @arg @ref LL_GPDMA1_TRIGGER_GPDMA1_CH7_TCF
2781 * @arg @ref LL_GPDMA1_TRIGGER_TIM2_TRGO
2782 * @arg @ref LL_GPDMA1_TRIGGER_ADC4_AWD1
2783 * @arg @ref LL_GPDMA1_TRIGGER_TIM3_TRGO (*)
2784 */
LL_DMA_GetHWTrigger(const DMA_TypeDef * DMAx,uint32_t Channel)2785 __STATIC_INLINE uint32_t LL_DMA_GetHWTrigger(const DMA_TypeDef *DMAx, uint32_t Channel)
2786 {
2787 uint32_t dma_base_addr = (uint32_t)DMAx;
2788 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CTR2,
2789 DMA_CTR2_TRIGSEL) >> DMA_CTR2_TRIGSEL_Pos);
2790 }
2791
2792 /**
2793 * @brief Set block data length in bytes to transfer.
2794 * @note This API is used for all available DMA channels.
2795 * @rmtoll CBR1 BNDT LL_DMA_SetBlkDataLength
2796 * @param DMAx DMAx Instance
2797 * @param Channel This parameter can be one of the following values:
2798 * @arg @ref LL_DMA_CHANNEL_0
2799 * @arg @ref LL_DMA_CHANNEL_1
2800 * @arg @ref LL_DMA_CHANNEL_2
2801 * @arg @ref LL_DMA_CHANNEL_3
2802 * @arg @ref LL_DMA_CHANNEL_4
2803 * @arg @ref LL_DMA_CHANNEL_5
2804 * @arg @ref LL_DMA_CHANNEL_6
2805 * @arg @ref LL_DMA_CHANNEL_7
2806 * @param BlkDataLength Between 0 to 0x0000FFFF
2807 * @retval None.
2808 */
LL_DMA_SetBlkDataLength(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t BlkDataLength)2809 __STATIC_INLINE void LL_DMA_SetBlkDataLength(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t BlkDataLength)
2810 {
2811 uint32_t dma_base_addr = (uint32_t)DMAx;
2812 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR1, DMA_CBR1_BNDT,
2813 BlkDataLength);
2814 }
2815
2816 /**
2817 * @brief Get block data length in bytes to transfer.
2818 * @note This API is used for all available DMA channels.
2819 * @rmtoll CBR1 BNDT LL_DMA_GetBlkDataLength
2820 * @param DMAx DMAx Instance
2821 * @param Channel This parameter can be one of the following values:
2822 * @arg @ref LL_DMA_CHANNEL_0
2823 * @arg @ref LL_DMA_CHANNEL_1
2824 * @arg @ref LL_DMA_CHANNEL_2
2825 * @arg @ref LL_DMA_CHANNEL_3
2826 * @arg @ref LL_DMA_CHANNEL_4
2827 * @arg @ref LL_DMA_CHANNEL_5
2828 * @arg @ref LL_DMA_CHANNEL_6
2829 * @arg @ref LL_DMA_CHANNEL_7
2830 * @retval Between 0 to 0x0000FFFF
2831 */
LL_DMA_GetBlkDataLength(const DMA_TypeDef * DMAx,uint32_t Channel)2832 __STATIC_INLINE uint32_t LL_DMA_GetBlkDataLength(const DMA_TypeDef *DMAx, uint32_t Channel)
2833 {
2834 uint32_t dma_base_addr = (uint32_t)DMAx;
2835 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CBR1, DMA_CBR1_BNDT));
2836 }
2837
2838 /**
2839 * @brief Configure the source and destination addresses.
2840 * @note This API is used for all available DMA channels.
2841 * @note This API must not be called when the DMA Channel is enabled.
2842 * @rmtoll CSAR SA LL_DMA_ConfigAddresses\n
2843 * CDAR DA LL_DMA_ConfigAddresses
2844 * @param DMAx DMAx Instance
2845 * @param Channel This parameter can be one of the following values:
2846 * @arg @ref LL_DMA_CHANNEL_0
2847 * @arg @ref LL_DMA_CHANNEL_1
2848 * @arg @ref LL_DMA_CHANNEL_2
2849 * @arg @ref LL_DMA_CHANNEL_3
2850 * @arg @ref LL_DMA_CHANNEL_4
2851 * @arg @ref LL_DMA_CHANNEL_5
2852 * @arg @ref LL_DMA_CHANNEL_6
2853 * @arg @ref LL_DMA_CHANNEL_7
2854 * @param SrcAddress Between 0 to 0xFFFFFFFF
2855 * @param DestAddress Between 0 to 0xFFFFFFFF
2856 * @retval None.
2857 */
LL_DMA_ConfigAddresses(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcAddress,uint32_t DestAddress)2858 __STATIC_INLINE void LL_DMA_ConfigAddresses(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcAddress, uint32_t
2859 DestAddress)
2860 {
2861 uint32_t dma_base_addr = (uint32_t)DMAx;
2862 WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSAR, SrcAddress);
2863 WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CDAR, DestAddress);
2864 }
2865
2866 /**
2867 * @brief Set source address.
2868 * @note This API is used for all available DMA channels.
2869 * @rmtoll CSAR SA LL_DMA_SetSrcAddress
2870 * @param DMAx DMAx Instance
2871 * @param Channel This parameter can be one of the following values:
2872 * @arg @ref LL_DMA_CHANNEL_0
2873 * @arg @ref LL_DMA_CHANNEL_1
2874 * @arg @ref LL_DMA_CHANNEL_2
2875 * @arg @ref LL_DMA_CHANNEL_3
2876 * @arg @ref LL_DMA_CHANNEL_4
2877 * @arg @ref LL_DMA_CHANNEL_5
2878 * @arg @ref LL_DMA_CHANNEL_6
2879 * @arg @ref LL_DMA_CHANNEL_7
2880 * @param SrcAddress Between 0 to 0xFFFFFFFF
2881 * @retval None.
2882 */
LL_DMA_SetSrcAddress(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t SrcAddress)2883 __STATIC_INLINE void LL_DMA_SetSrcAddress(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcAddress)
2884 {
2885 uint32_t dma_base_addr = (uint32_t)DMAx;
2886 WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSAR, SrcAddress);
2887 }
2888
2889 /**
2890 * @brief Get source address.
2891 * @note This API is used for all available DMA channels.
2892 * @rmtoll CSAR SA LL_DMA_GetSrcAddress
2893 * @param DMAx DMAx Instance
2894 * @param Channel This parameter can be one of the following values:
2895 * @arg @ref LL_DMA_CHANNEL_0
2896 * @arg @ref LL_DMA_CHANNEL_1
2897 * @arg @ref LL_DMA_CHANNEL_2
2898 * @arg @ref LL_DMA_CHANNEL_3
2899 * @arg @ref LL_DMA_CHANNEL_4
2900 * @arg @ref LL_DMA_CHANNEL_5
2901 * @arg @ref LL_DMA_CHANNEL_6
2902 * @arg @ref LL_DMA_CHANNEL_7
2903 * @retval Between 0 to 0xFFFFFFFF
2904 */
LL_DMA_GetSrcAddress(const DMA_TypeDef * DMAx,uint32_t Channel)2905 __STATIC_INLINE uint32_t LL_DMA_GetSrcAddress(const DMA_TypeDef *DMAx, uint32_t Channel)
2906 {
2907 uint32_t dma_base_addr = (uint32_t)DMAx;
2908 return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSAR));
2909 }
2910
2911 /**
2912 * @brief Set destination address.
2913 * @note This API is used for all available DMA channels.
2914 * @rmtoll CDAR DA LL_DMA_SetDestAddress
2915 * @param DMAx DMAx Instance
2916 * @param Channel This parameter can be one of the following values:
2917 * @arg @ref LL_DMA_CHANNEL_0
2918 * @arg @ref LL_DMA_CHANNEL_1
2919 * @arg @ref LL_DMA_CHANNEL_2
2920 * @arg @ref LL_DMA_CHANNEL_3
2921 * @arg @ref LL_DMA_CHANNEL_4
2922 * @arg @ref LL_DMA_CHANNEL_5
2923 * @arg @ref LL_DMA_CHANNEL_6
2924 * @arg @ref LL_DMA_CHANNEL_7
2925 * @param DestAddress Between 0 to 0xFFFFFFFF
2926 * @retval None.
2927 */
LL_DMA_SetDestAddress(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t DestAddress)2928 __STATIC_INLINE void LL_DMA_SetDestAddress(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t DestAddress)
2929 {
2930 uint32_t dma_base_addr = (uint32_t)DMAx;
2931 WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CDAR, DestAddress);
2932 }
2933
2934 /**
2935 * @brief Get destination address.
2936 * @note This API is used for all available DMA channels.
2937 * @rmtoll CDAR DA LL_DMA_GetDestAddress
2938 * @param DMAx DMAx Instance
2939 * @param Channel This parameter can be one of the following values:
2940 * @arg @ref LL_DMA_CHANNEL_0
2941 * @arg @ref LL_DMA_CHANNEL_1
2942 * @arg @ref LL_DMA_CHANNEL_2
2943 * @arg @ref LL_DMA_CHANNEL_3
2944 * @arg @ref LL_DMA_CHANNEL_4
2945 * @arg @ref LL_DMA_CHANNEL_5
2946 * @arg @ref LL_DMA_CHANNEL_6
2947 * @arg @ref LL_DMA_CHANNEL_7
2948 * @retval Between 0 to 0xFFFFFFFF
2949 */
LL_DMA_GetDestAddress(const DMA_TypeDef * DMAx,uint32_t Channel)2950 __STATIC_INLINE uint32_t LL_DMA_GetDestAddress(const DMA_TypeDef *DMAx, uint32_t Channel)
2951 {
2952 uint32_t dma_base_addr = (uint32_t)DMAx;
2953 return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CDAR));
2954 }
2955
2956
2957 /**
2958 * @brief Configure registers update and node address offset during the link transfer.
2959 * @note This API is used for all available DMA channels.
2960 * @rmtoll CLLR UT1 LL_DMA_ConfigLinkUpdate\n
2961 * @rmtoll CLLR UT2 LL_DMA_ConfigLinkUpdate\n
2962 * @rmtoll CLLR UB1 LL_DMA_ConfigLinkUpdate\n
2963 * @rmtoll CLLR USA LL_DMA_ConfigLinkUpdate\n
2964 * @rmtoll CLLR UDA LL_DMA_ConfigLinkUpdate\n
2965 * @rmtoll CLLR ULL LL_DMA_ConfigLinkUpdate
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 * @param RegistersUpdate This parameter must be a combination of all the following values:
2977 * @arg @ref LL_DMA_UPDATE_CTR1
2978 * @arg @ref LL_DMA_UPDATE_CTR2
2979 * @arg @ref LL_DMA_UPDATE_CBR1
2980 * @arg @ref LL_DMA_UPDATE_CSAR
2981 * @arg @ref LL_DMA_UPDATE_CDAR
2982 * @arg @ref LL_DMA_UPDATE_CLLR
2983 * @param LinkedListAddrOffset Between 0 to 0x0000FFFC by increment of 4 Bytes.
2984 * @retval None.
2985 */
LL_DMA_ConfigLinkUpdate(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t RegistersUpdate,uint32_t LinkedListAddrOffset)2986 __STATIC_INLINE void LL_DMA_ConfigLinkUpdate(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t RegistersUpdate,
2987 uint32_t LinkedListAddrOffset)
2988 {
2989 uint32_t dma_base_addr = (uint32_t)DMAx;
2990 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR,
2991 (DMA_CLLR_UT1 | DMA_CLLR_UT2 | DMA_CLLR_UB1 | DMA_CLLR_USA | DMA_CLLR_UDA | \
2992 DMA_CLLR_ULL | DMA_CLLR_LA), (RegistersUpdate | (LinkedListAddrOffset & DMA_CLLR_LA)));
2993 }
2994
2995 /**
2996 * @brief Enable CTR1 update during the link transfer.
2997 * @note This API is used for all available DMA channels.
2998 * @rmtoll CLLR UT1 LL_DMA_EnableCTR1Update
2999 * @param DMAx DMAx Instance
3000 * @param Channel This parameter can be one of the following values:
3001 * @arg @ref LL_DMA_CHANNEL_0
3002 * @arg @ref LL_DMA_CHANNEL_1
3003 * @arg @ref LL_DMA_CHANNEL_2
3004 * @arg @ref LL_DMA_CHANNEL_3
3005 * @arg @ref LL_DMA_CHANNEL_4
3006 * @arg @ref LL_DMA_CHANNEL_5
3007 * @arg @ref LL_DMA_CHANNEL_6
3008 * @arg @ref LL_DMA_CHANNEL_7
3009 * @retval None.
3010 */
LL_DMA_EnableCTR1Update(const DMA_TypeDef * DMAx,uint32_t Channel)3011 __STATIC_INLINE void LL_DMA_EnableCTR1Update(const DMA_TypeDef *DMAx, uint32_t Channel)
3012 {
3013 uint32_t dma_base_addr = (uint32_t)DMAx;
3014 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UT1);
3015 }
3016
3017 /**
3018 * @brief Disable CTR1 update during the link transfer.
3019 * @note This API is used for all available DMA channels.
3020 * @rmtoll CLLR UT1 LL_DMA_DisableCTR1Update
3021 * @param DMAx DMAx Instance
3022 * @param Channel This parameter can be one of the following values:
3023 * @arg @ref LL_DMA_CHANNEL_0
3024 * @arg @ref LL_DMA_CHANNEL_1
3025 * @arg @ref LL_DMA_CHANNEL_2
3026 * @arg @ref LL_DMA_CHANNEL_3
3027 * @arg @ref LL_DMA_CHANNEL_4
3028 * @arg @ref LL_DMA_CHANNEL_5
3029 * @arg @ref LL_DMA_CHANNEL_6
3030 * @arg @ref LL_DMA_CHANNEL_7
3031 * @retval None.
3032 */
LL_DMA_DisableCTR1Update(const DMA_TypeDef * DMAx,uint32_t Channel)3033 __STATIC_INLINE void LL_DMA_DisableCTR1Update(const DMA_TypeDef *DMAx, uint32_t Channel)
3034 {
3035 uint32_t dma_base_addr = (uint32_t)DMAx;
3036 CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UT1);
3037 }
3038
3039 /**
3040 * @brief Check if CTR1 update during the link transfer is enabled.
3041 * @note This API is used for all available DMA channels.
3042 * @rmtoll CLLR UT1 LL_DMA_IsEnabledCTR1Update
3043 * @param DMAx DMAx Instance
3044 * @param Channel This parameter can be one of the following values:
3045 * @arg @ref LL_DMA_CHANNEL_0
3046 * @arg @ref LL_DMA_CHANNEL_1
3047 * @arg @ref LL_DMA_CHANNEL_2
3048 * @arg @ref LL_DMA_CHANNEL_3
3049 * @arg @ref LL_DMA_CHANNEL_4
3050 * @arg @ref LL_DMA_CHANNEL_5
3051 * @arg @ref LL_DMA_CHANNEL_6
3052 * @arg @ref LL_DMA_CHANNEL_7
3053 * @retval State of bit (1 or 0).
3054 */
LL_DMA_IsEnabledCTR1Update(const DMA_TypeDef * DMAx,uint32_t Channel)3055 __STATIC_INLINE uint32_t LL_DMA_IsEnabledCTR1Update(const DMA_TypeDef *DMAx, uint32_t Channel)
3056 {
3057 uint32_t dma_base_addr = (uint32_t)DMAx;
3058 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UT1)
3059 == (DMA_CLLR_UT1)) ? 1UL : 0UL);
3060 }
3061
3062 /**
3063 * @brief Enable CTR2 update during the link transfer.
3064 * @note This API is used for all available DMA channels.
3065 * @rmtoll CLLR UT2 LL_DMA_EnableCTR2Update
3066 * @param DMAx DMAx Instance
3067 * @param Channel This parameter can be one of the following values:
3068 * @arg @ref LL_DMA_CHANNEL_0
3069 * @arg @ref LL_DMA_CHANNEL_1
3070 * @arg @ref LL_DMA_CHANNEL_2
3071 * @arg @ref LL_DMA_CHANNEL_3
3072 * @arg @ref LL_DMA_CHANNEL_4
3073 * @arg @ref LL_DMA_CHANNEL_5
3074 * @arg @ref LL_DMA_CHANNEL_6
3075 * @arg @ref LL_DMA_CHANNEL_7
3076 * @retval None.
3077 */
LL_DMA_EnableCTR2Update(const DMA_TypeDef * DMAx,uint32_t Channel)3078 __STATIC_INLINE void LL_DMA_EnableCTR2Update(const DMA_TypeDef *DMAx, uint32_t Channel)
3079 {
3080 uint32_t dma_base_addr = (uint32_t)DMAx;
3081 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UT2);
3082 }
3083
3084 /**
3085 * @brief Disable CTR2 update during the link transfer.
3086 * @note This API is used for all available DMA channels.
3087 * @rmtoll CLLR UT2 LL_DMA_DisableCTR2Update
3088 * @param DMAx DMAx Instance
3089 * @param Channel This parameter can be one of the following values:
3090 * @arg @ref LL_DMA_CHANNEL_0
3091 * @arg @ref LL_DMA_CHANNEL_1
3092 * @arg @ref LL_DMA_CHANNEL_2
3093 * @arg @ref LL_DMA_CHANNEL_3
3094 * @arg @ref LL_DMA_CHANNEL_4
3095 * @arg @ref LL_DMA_CHANNEL_5
3096 * @arg @ref LL_DMA_CHANNEL_6
3097 * @arg @ref LL_DMA_CHANNEL_7
3098 * @retval None.
3099 */
LL_DMA_DisableCTR2Update(const DMA_TypeDef * DMAx,uint32_t Channel)3100 __STATIC_INLINE void LL_DMA_DisableCTR2Update(const DMA_TypeDef *DMAx, uint32_t Channel)
3101 {
3102 uint32_t dma_base_addr = (uint32_t)DMAx;
3103 CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UT2);
3104 }
3105
3106 /**
3107 * @brief Check if CTR2 update during the link transfer is enabled.
3108 * @note This API is used for all available DMA channels.
3109 * @rmtoll CLLR UT2 LL_DMA_IsEnabledCTR2Update
3110 * @param DMAx DMAx Instance
3111 * @param Channel This parameter can be one of the following values:
3112 * @arg @ref LL_DMA_CHANNEL_0
3113 * @arg @ref LL_DMA_CHANNEL_1
3114 * @arg @ref LL_DMA_CHANNEL_2
3115 * @arg @ref LL_DMA_CHANNEL_3
3116 * @arg @ref LL_DMA_CHANNEL_4
3117 * @arg @ref LL_DMA_CHANNEL_5
3118 * @arg @ref LL_DMA_CHANNEL_6
3119 * @arg @ref LL_DMA_CHANNEL_7
3120 * @retval State of bit (1 or 0).
3121 */
LL_DMA_IsEnabledCTR2Update(const DMA_TypeDef * DMAx,uint32_t Channel)3122 __STATIC_INLINE uint32_t LL_DMA_IsEnabledCTR2Update(const DMA_TypeDef *DMAx, uint32_t Channel)
3123 {
3124 uint32_t dma_base_addr = (uint32_t)DMAx;
3125 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UT2)
3126 == (DMA_CLLR_UT2)) ? 1UL : 0UL);
3127 }
3128
3129 /**
3130 * @brief Enable CBR1 update during the link transfer.
3131 * @note This API is used for all available DMA channels.
3132 * @rmtoll CLLR UB1 LL_DMA_EnableCBR1Update
3133 * @param DMAx DMAx Instance
3134 * @param Channel This parameter can be one of the following values:
3135 * @arg @ref LL_DMA_CHANNEL_0
3136 * @arg @ref LL_DMA_CHANNEL_1
3137 * @arg @ref LL_DMA_CHANNEL_2
3138 * @arg @ref LL_DMA_CHANNEL_3
3139 * @arg @ref LL_DMA_CHANNEL_4
3140 * @arg @ref LL_DMA_CHANNEL_5
3141 * @arg @ref LL_DMA_CHANNEL_6
3142 * @arg @ref LL_DMA_CHANNEL_7
3143 * @retval None.
3144 */
LL_DMA_EnableCBR1Update(const DMA_TypeDef * DMAx,uint32_t Channel)3145 __STATIC_INLINE void LL_DMA_EnableCBR1Update(const DMA_TypeDef *DMAx, uint32_t Channel)
3146 {
3147 uint32_t dma_base_addr = (uint32_t)DMAx;
3148 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UB1);
3149 }
3150
3151 /**
3152 * @brief Disable CBR1 update during the link transfer.
3153 * @note This API is used for all available DMA channels.
3154 * @rmtoll CLLR UB1 LL_DMA_DisableCBR1Update
3155 * @param DMAx DMAx Instance
3156 * @param Channel This parameter can be one of the following values:
3157 * @arg @ref LL_DMA_CHANNEL_0
3158 * @arg @ref LL_DMA_CHANNEL_1
3159 * @arg @ref LL_DMA_CHANNEL_2
3160 * @arg @ref LL_DMA_CHANNEL_3
3161 * @arg @ref LL_DMA_CHANNEL_4
3162 * @arg @ref LL_DMA_CHANNEL_5
3163 * @arg @ref LL_DMA_CHANNEL_6
3164 * @arg @ref LL_DMA_CHANNEL_7
3165 * @retval None.
3166 */
LL_DMA_DisableCBR1Update(const DMA_TypeDef * DMAx,uint32_t Channel)3167 __STATIC_INLINE void LL_DMA_DisableCBR1Update(const DMA_TypeDef *DMAx, uint32_t Channel)
3168 {
3169 uint32_t dma_base_addr = (uint32_t)DMAx;
3170 CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UB1);
3171 }
3172
3173 /**
3174 * @brief Check if CBR1 update during the link transfer is enabled.
3175 * @note This API is used for all available DMA channels.
3176 * @rmtoll CLLR UB1 LL_DMA_IsEnabledCBR1Update
3177 * @param DMAx DMAx Instance
3178 * @param Channel This parameter can be one of the following values:
3179 * @arg @ref LL_DMA_CHANNEL_0
3180 * @arg @ref LL_DMA_CHANNEL_1
3181 * @arg @ref LL_DMA_CHANNEL_2
3182 * @arg @ref LL_DMA_CHANNEL_3
3183 * @arg @ref LL_DMA_CHANNEL_4
3184 * @arg @ref LL_DMA_CHANNEL_5
3185 * @arg @ref LL_DMA_CHANNEL_6
3186 * @arg @ref LL_DMA_CHANNEL_7
3187 * @retval State of bit (1 or 0).
3188 */
LL_DMA_IsEnabledCBR1Update(const DMA_TypeDef * DMAx,uint32_t Channel)3189 __STATIC_INLINE uint32_t LL_DMA_IsEnabledCBR1Update(const DMA_TypeDef *DMAx, uint32_t Channel)
3190 {
3191 uint32_t dma_base_addr = (uint32_t)DMAx;
3192 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UB1)
3193 == (DMA_CLLR_UB1)) ? 1UL : 0UL);
3194 }
3195
3196 /**
3197 * @brief Enable CSAR update during the link transfer.
3198 * @note This API is used for all available DMA channels.
3199 * @rmtoll CLLR USA LL_DMA_EnableCSARUpdate
3200 * @param DMAx DMAx Instance
3201 * @param Channel This parameter can be one of the following values:
3202 * @arg @ref LL_DMA_CHANNEL_0
3203 * @arg @ref LL_DMA_CHANNEL_1
3204 * @arg @ref LL_DMA_CHANNEL_2
3205 * @arg @ref LL_DMA_CHANNEL_3
3206 * @arg @ref LL_DMA_CHANNEL_4
3207 * @arg @ref LL_DMA_CHANNEL_5
3208 * @arg @ref LL_DMA_CHANNEL_6
3209 * @arg @ref LL_DMA_CHANNEL_7
3210 * @retval None.
3211 */
LL_DMA_EnableCSARUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)3212 __STATIC_INLINE void LL_DMA_EnableCSARUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
3213 {
3214 uint32_t dma_base_addr = (uint32_t)DMAx;
3215 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_USA);
3216 }
3217
3218 /**
3219 * @brief Disable CSAR update during the link transfer.
3220 * @note This API is used for all available DMA channels.
3221 * @rmtoll CLLR USA LL_DMA_DisableCSARUpdate
3222 * @param DMAx DMAx Instance
3223 * @param Channel This parameter can be one of the following values:
3224 * @arg @ref LL_DMA_CHANNEL_0
3225 * @arg @ref LL_DMA_CHANNEL_1
3226 * @arg @ref LL_DMA_CHANNEL_2
3227 * @arg @ref LL_DMA_CHANNEL_3
3228 * @arg @ref LL_DMA_CHANNEL_4
3229 * @arg @ref LL_DMA_CHANNEL_5
3230 * @arg @ref LL_DMA_CHANNEL_6
3231 * @arg @ref LL_DMA_CHANNEL_7
3232 * @retval None.
3233 */
LL_DMA_DisableCSARUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)3234 __STATIC_INLINE void LL_DMA_DisableCSARUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
3235 {
3236 uint32_t dma_base_addr = (uint32_t)DMAx;
3237 CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_USA);
3238 }
3239
3240 /**
3241 * @brief Check if CSAR update during the link transfer is enabled.
3242 * @note This API is used for all available DMA channels.
3243 * @rmtoll CLLR USA LL_DMA_IsEnabledCSARUpdate
3244 * @param DMAx DMAx Instance
3245 * @param Channel This parameter can be one of the following values:
3246 * @arg @ref LL_DMA_CHANNEL_0
3247 * @arg @ref LL_DMA_CHANNEL_1
3248 * @arg @ref LL_DMA_CHANNEL_2
3249 * @arg @ref LL_DMA_CHANNEL_3
3250 * @arg @ref LL_DMA_CHANNEL_4
3251 * @arg @ref LL_DMA_CHANNEL_5
3252 * @arg @ref LL_DMA_CHANNEL_6
3253 * @arg @ref LL_DMA_CHANNEL_7
3254 * @retval State of bit (1 or 0).
3255 */
LL_DMA_IsEnabledCSARUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)3256 __STATIC_INLINE uint32_t LL_DMA_IsEnabledCSARUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
3257 {
3258 uint32_t dma_base_addr = (uint32_t)DMAx;
3259 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_USA)
3260 == (DMA_CLLR_USA)) ? 1UL : 0UL);
3261 }
3262
3263 /**
3264 * @brief Enable CDAR update during the link transfer.
3265 * @note This API is used for all available DMA channels.
3266 * @rmtoll CLLR UDA LL_DMA_EnableCDARUpdate
3267 * @param DMAx DMAx Instance
3268 * @param Channel This parameter can be one of the following values:
3269 * @arg @ref LL_DMA_CHANNEL_0
3270 * @arg @ref LL_DMA_CHANNEL_1
3271 * @arg @ref LL_DMA_CHANNEL_2
3272 * @arg @ref LL_DMA_CHANNEL_3
3273 * @arg @ref LL_DMA_CHANNEL_4
3274 * @arg @ref LL_DMA_CHANNEL_5
3275 * @arg @ref LL_DMA_CHANNEL_6
3276 * @arg @ref LL_DMA_CHANNEL_7
3277 * @retval None.
3278 */
LL_DMA_EnableCDARUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)3279 __STATIC_INLINE void LL_DMA_EnableCDARUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
3280 {
3281 uint32_t dma_base_addr = (uint32_t)DMAx;
3282 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UDA);
3283 }
3284
3285 /**
3286 * @brief Disable CDAR update during the link transfer.
3287 * @note This API is used for all available DMA channels.
3288 * @rmtoll CLLR UDA LL_DMA_DisableCDARUpdate
3289 * @param DMAx DMAx Instance
3290 * @param Channel This parameter can be one of the following values:
3291 * @arg @ref LL_DMA_CHANNEL_0
3292 * @arg @ref LL_DMA_CHANNEL_1
3293 * @arg @ref LL_DMA_CHANNEL_2
3294 * @arg @ref LL_DMA_CHANNEL_3
3295 * @arg @ref LL_DMA_CHANNEL_4
3296 * @arg @ref LL_DMA_CHANNEL_5
3297 * @arg @ref LL_DMA_CHANNEL_6
3298 * @arg @ref LL_DMA_CHANNEL_7
3299 * @retval None.
3300 */
LL_DMA_DisableCDARUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)3301 __STATIC_INLINE void LL_DMA_DisableCDARUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
3302 {
3303 uint32_t dma_base_addr = (uint32_t)DMAx;
3304 CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UDA);
3305 }
3306
3307 /**
3308 * @brief Check if CDAR update during the link transfer is enabled.
3309 * @note This API is used for all available DMA channels.
3310 * @rmtoll CLLR UDA LL_DMA_IsEnabledCDARUpdate
3311 * @param DMAx DMAx Instance
3312 * @param Channel This parameter can be one of the following values:
3313 * @arg @ref LL_DMA_CHANNEL_0
3314 * @arg @ref LL_DMA_CHANNEL_1
3315 * @arg @ref LL_DMA_CHANNEL_2
3316 * @arg @ref LL_DMA_CHANNEL_3
3317 * @arg @ref LL_DMA_CHANNEL_4
3318 * @arg @ref LL_DMA_CHANNEL_5
3319 * @arg @ref LL_DMA_CHANNEL_6
3320 * @arg @ref LL_DMA_CHANNEL_7
3321 * @retval State of bit (1 or 0).
3322 */
LL_DMA_IsEnabledCDARUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)3323 __STATIC_INLINE uint32_t LL_DMA_IsEnabledCDARUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
3324 {
3325 uint32_t dma_base_addr = (uint32_t)DMAx;
3326 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_UDA)
3327 == (DMA_CLLR_UDA)) ? 1UL : 0UL);
3328 }
3329
3330
3331 /**
3332 * @brief Enable CLLR update during the link transfer.
3333 * @note This API is used for all available DMA channels.
3334 * @rmtoll CLLR ULL LL_DMA_EnableCLLRUpdate
3335 * @param DMAx DMAx Instance
3336 * @param Channel This parameter can be one of the following values:
3337 * @arg @ref LL_DMA_CHANNEL_0
3338 * @arg @ref LL_DMA_CHANNEL_1
3339 * @arg @ref LL_DMA_CHANNEL_2
3340 * @arg @ref LL_DMA_CHANNEL_3
3341 * @arg @ref LL_DMA_CHANNEL_4
3342 * @arg @ref LL_DMA_CHANNEL_5
3343 * @arg @ref LL_DMA_CHANNEL_6
3344 * @arg @ref LL_DMA_CHANNEL_7
3345 * @retval None.
3346 */
LL_DMA_EnableCLLRUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)3347 __STATIC_INLINE void LL_DMA_EnableCLLRUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
3348 {
3349 uint32_t dma_base_addr = (uint32_t)DMAx;
3350 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_ULL);
3351 }
3352
3353 /**
3354 * @brief Disable CLLR update during the link transfer.
3355 * @note This API is used for all available DMA channels.
3356 * @rmtoll CLLR ULL LL_DMA_DisableCLLRUpdate
3357 * @param DMAx DMAx Instance
3358 * @param Channel This parameter can be one of the following values:
3359 * @arg @ref LL_DMA_CHANNEL_0
3360 * @arg @ref LL_DMA_CHANNEL_1
3361 * @arg @ref LL_DMA_CHANNEL_2
3362 * @arg @ref LL_DMA_CHANNEL_3
3363 * @arg @ref LL_DMA_CHANNEL_4
3364 * @arg @ref LL_DMA_CHANNEL_5
3365 * @arg @ref LL_DMA_CHANNEL_6
3366 * @arg @ref LL_DMA_CHANNEL_7
3367 * @retval None.
3368 */
LL_DMA_DisableCLLRUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)3369 __STATIC_INLINE void LL_DMA_DisableCLLRUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
3370 {
3371 uint32_t dma_base_addr = (uint32_t)DMAx;
3372 CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_ULL);
3373 }
3374
3375 /**
3376 * @brief Check if CLLR update during the link transfer is enabled.
3377 * @note This API is used for all available DMA channels.
3378 * @rmtoll CLLR ULL LL_DMA_IsEnabledCLLRUpdate
3379 * @param DMAx DMAx Instance
3380 * @param Channel This parameter can be one of the following values:
3381 * @arg @ref LL_DMA_CHANNEL_0
3382 * @arg @ref LL_DMA_CHANNEL_1
3383 * @arg @ref LL_DMA_CHANNEL_2
3384 * @arg @ref LL_DMA_CHANNEL_3
3385 * @arg @ref LL_DMA_CHANNEL_4
3386 * @arg @ref LL_DMA_CHANNEL_5
3387 * @arg @ref LL_DMA_CHANNEL_6
3388 * @arg @ref LL_DMA_CHANNEL_7
3389 * @retval State of bit (1 or 0).
3390 */
LL_DMA_IsEnabledCLLRUpdate(const DMA_TypeDef * DMAx,uint32_t Channel)3391 __STATIC_INLINE uint32_t LL_DMA_IsEnabledCLLRUpdate(const DMA_TypeDef *DMAx, uint32_t Channel)
3392 {
3393 uint32_t dma_base_addr = (uint32_t)DMAx;
3394 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_ULL)
3395 == (DMA_CLLR_ULL)) ? 1UL : 0UL);
3396 }
3397
3398 /**
3399 * @brief Set linked list address offset.
3400 * @note This API is used for all available DMA channels.
3401 * @rmtoll CLLR LA LL_DMA_SetLinkedListAddrOffset
3402 * @param DMAx DMAx Instance
3403 * @param Channel This parameter can be one of the following values:
3404 * @arg @ref LL_DMA_CHANNEL_0
3405 * @arg @ref LL_DMA_CHANNEL_1
3406 * @arg @ref LL_DMA_CHANNEL_2
3407 * @arg @ref LL_DMA_CHANNEL_3
3408 * @arg @ref LL_DMA_CHANNEL_4
3409 * @arg @ref LL_DMA_CHANNEL_5
3410 * @arg @ref LL_DMA_CHANNEL_6
3411 * @arg @ref LL_DMA_CHANNEL_7
3412 * @param LinkedListAddrOffset Between 0 to 0x0000FFFC by increment of 4 Bytes.
3413 * @retval None.
3414 */
LL_DMA_SetLinkedListAddrOffset(const DMA_TypeDef * DMAx,uint32_t Channel,uint32_t LinkedListAddrOffset)3415 __STATIC_INLINE void LL_DMA_SetLinkedListAddrOffset(const DMA_TypeDef *DMAx, uint32_t Channel,
3416 uint32_t LinkedListAddrOffset)
3417 {
3418 uint32_t dma_base_addr = (uint32_t)DMAx;
3419 MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR, DMA_CLLR_LA,
3420 (LinkedListAddrOffset & DMA_CLLR_LA));
3421 }
3422
3423 /**
3424 * @brief Get linked list address offset.
3425 * @note This API is used for all available DMA channels.
3426 * @rmtoll CLLR LA LL_DMA_GetLinkedListAddrOffset
3427 * @param DMAx DMAx Instance
3428 * @param Channel This parameter can be one of the following values:
3429 * @arg @ref LL_DMA_CHANNEL_0
3430 * @arg @ref LL_DMA_CHANNEL_1
3431 * @arg @ref LL_DMA_CHANNEL_2
3432 * @arg @ref LL_DMA_CHANNEL_3
3433 * @arg @ref LL_DMA_CHANNEL_4
3434 * @arg @ref LL_DMA_CHANNEL_5
3435 * @arg @ref LL_DMA_CHANNEL_6
3436 * @arg @ref LL_DMA_CHANNEL_7
3437 * @retval Between 0 to 0x0000FFFC.
3438 */
LL_DMA_GetLinkedListAddrOffset(const DMA_TypeDef * DMAx,uint32_t Channel)3439 __STATIC_INLINE uint32_t LL_DMA_GetLinkedListAddrOffset(const DMA_TypeDef *DMAx, uint32_t Channel)
3440 {
3441 uint32_t dma_base_addr = (uint32_t)DMAx;
3442 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CLLR,
3443 DMA_CLLR_LA) >> DMA_CLLR_LA_Pos);
3444 }
3445
3446 /**
3447 * @brief Get FIFO level.
3448 * @rmtoll CSR FIFOL LL_DMA_GetFIFOLevel
3449 * @param DMAx DMAx Instance
3450 * @param Channel This parameter can be one of the following values:
3451 * @arg @ref LL_DMA_CHANNEL_0
3452 * @arg @ref LL_DMA_CHANNEL_1
3453 * @arg @ref LL_DMA_CHANNEL_2
3454 * @arg @ref LL_DMA_CHANNEL_3
3455 * @arg @ref LL_DMA_CHANNEL_4
3456 * @arg @ref LL_DMA_CHANNEL_5
3457 * @arg @ref LL_DMA_CHANNEL_6
3458 * @arg @ref LL_DMA_CHANNEL_7
3459 * @retval Between 0 to 0x000000FF.
3460 */
LL_DMA_GetFIFOLevel(const DMA_TypeDef * DMAx,uint32_t Channel)3461 __STATIC_INLINE uint32_t LL_DMA_GetFIFOLevel(const DMA_TypeDef *DMAx, uint32_t Channel)
3462 {
3463 uint32_t dma_base_addr = (uint32_t)DMAx;
3464 return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR,
3465 DMA_CSR_FIFOL) >> DMA_CSR_FIFOL_Pos);
3466 }
3467
3468 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
3469 /**
3470 * @brief Enable the DMA channel secure attribute.
3471 * @note This API is used for all available DMA channels.
3472 * @rmtoll SECCFGR SECx LL_DMA_EnableChannelSecure
3473 * @param DMAx DMAx Instance
3474 * @param Channel This parameter can be one of the following values:
3475 * @arg @ref LL_DMA_CHANNEL_0
3476 * @arg @ref LL_DMA_CHANNEL_1
3477 * @arg @ref LL_DMA_CHANNEL_2
3478 * @arg @ref LL_DMA_CHANNEL_3
3479 * @arg @ref LL_DMA_CHANNEL_4
3480 * @arg @ref LL_DMA_CHANNEL_5
3481 * @arg @ref LL_DMA_CHANNEL_6
3482 * @arg @ref LL_DMA_CHANNEL_7
3483 * @retval None.
3484 */
LL_DMA_EnableChannelSecure(DMA_TypeDef * DMAx,uint32_t Channel)3485 __STATIC_INLINE void LL_DMA_EnableChannelSecure(DMA_TypeDef *DMAx, uint32_t Channel)
3486 {
3487 SET_BIT(DMAx->SECCFGR, (DMA_SECCFGR_SEC0 << (Channel & 0x0000000FU)));
3488 }
3489
3490 /**
3491 * @brief Disable the DMA channel secure attribute.
3492 * @note This API is used for all available DMA channels.
3493 * @rmtoll SECCFGR SECx LL_DMA_DisableChannelSecure
3494 * @param DMAx DMAx Instance
3495 * @param Channel This parameter can be one of the following values:
3496 * @arg @ref LL_DMA_CHANNEL_0
3497 * @arg @ref LL_DMA_CHANNEL_1
3498 * @arg @ref LL_DMA_CHANNEL_2
3499 * @arg @ref LL_DMA_CHANNEL_3
3500 * @arg @ref LL_DMA_CHANNEL_4
3501 * @arg @ref LL_DMA_CHANNEL_5
3502 * @arg @ref LL_DMA_CHANNEL_6
3503 * @arg @ref LL_DMA_CHANNEL_7
3504 * @retval None.
3505 */
LL_DMA_DisableChannelSecure(DMA_TypeDef * DMAx,uint32_t Channel)3506 __STATIC_INLINE void LL_DMA_DisableChannelSecure(DMA_TypeDef *DMAx, uint32_t Channel)
3507 {
3508 CLEAR_BIT(DMAx->SECCFGR, (DMA_SECCFGR_SEC0 << (Channel & 0x0000000FU)));
3509 }
3510 #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
3511
3512 #if defined (DMA_SECCFGR_SEC0)
3513 /**
3514 * @brief Check if DMA channel secure is enabled.
3515 * @note This API is used for all available DMA channels.
3516 * @rmtoll SECCFGR SECx LL_DMA_IsEnabledChannelSecure
3517 * @param DMAx DMAx Instance
3518 * @param Channel This parameter can be one of the following values:
3519 * @arg @ref LL_DMA_CHANNEL_0
3520 * @arg @ref LL_DMA_CHANNEL_1
3521 * @arg @ref LL_DMA_CHANNEL_2
3522 * @arg @ref LL_DMA_CHANNEL_3
3523 * @arg @ref LL_DMA_CHANNEL_4
3524 * @arg @ref LL_DMA_CHANNEL_5
3525 * @arg @ref LL_DMA_CHANNEL_6
3526 * @arg @ref LL_DMA_CHANNEL_7
3527 * @retval State of bit (1 or 0).
3528 */
LL_DMA_IsEnabledChannelSecure(const DMA_TypeDef * DMAx,uint32_t Channel)3529 __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannelSecure(const DMA_TypeDef *DMAx, uint32_t Channel)
3530 {
3531 return ((READ_BIT(DMAx->SECCFGR, (DMA_SECCFGR_SEC0 << (Channel & 0x0000000FU)))
3532 == (DMA_SECCFGR_SEC0 << (Channel & 0x0000000FU))) ? 1UL : 0UL);
3533 }
3534 #endif /* DMA_SECCFGR_SEC0 */
3535 #if defined (DMA_PRIVCFGR_PRIV0)
3536 /**
3537 * @brief Enable the DMA channel privilege attribute.
3538 * @note This API is used for all available DMA channels.
3539 * @rmtoll PRIVCFGR PRIVx LL_DMA_EnableChannelPrivilege
3540 * @param DMAx DMAx Instance
3541 * @param Channel This parameter can be one of the following values:
3542 * @arg @ref LL_DMA_CHANNEL_0
3543 * @arg @ref LL_DMA_CHANNEL_1
3544 * @arg @ref LL_DMA_CHANNEL_2
3545 * @arg @ref LL_DMA_CHANNEL_3
3546 * @arg @ref LL_DMA_CHANNEL_4
3547 * @arg @ref LL_DMA_CHANNEL_5
3548 * @arg @ref LL_DMA_CHANNEL_6
3549 * @arg @ref LL_DMA_CHANNEL_7
3550 * @retval None.
3551 */
LL_DMA_EnableChannelPrivilege(DMA_TypeDef * DMAx,uint32_t Channel)3552 __STATIC_INLINE void LL_DMA_EnableChannelPrivilege(DMA_TypeDef *DMAx, uint32_t Channel)
3553 {
3554 SET_BIT(DMAx->PRIVCFGR, (DMA_PRIVCFGR_PRIV0 << (Channel & 0x0000000FU)));
3555 }
3556
3557 /**
3558 * @brief Disable the DMA channel privilege attribute.
3559 * @note This API is used for all available DMA channels.
3560 * @rmtoll PRIVCFGR PRIVx LL_DMA_DisableChannelPrivilege
3561 * @param DMAx DMAx Instance
3562 * @param Channel This parameter can be one of the following values:
3563 * @arg @ref LL_DMA_CHANNEL_0
3564 * @arg @ref LL_DMA_CHANNEL_1
3565 * @arg @ref LL_DMA_CHANNEL_2
3566 * @arg @ref LL_DMA_CHANNEL_3
3567 * @arg @ref LL_DMA_CHANNEL_4
3568 * @arg @ref LL_DMA_CHANNEL_5
3569 * @arg @ref LL_DMA_CHANNEL_6
3570 * @arg @ref LL_DMA_CHANNEL_7
3571 * @retval None.
3572 */
LL_DMA_DisableChannelPrivilege(DMA_TypeDef * DMAx,uint32_t Channel)3573 __STATIC_INLINE void LL_DMA_DisableChannelPrivilege(DMA_TypeDef *DMAx, uint32_t Channel)
3574 {
3575 CLEAR_BIT(DMAx->PRIVCFGR, (DMA_PRIVCFGR_PRIV0 << (Channel & 0x0000000FU)));
3576 }
3577
3578 /**
3579 * @brief Check if DMA Channel privilege is enabled.
3580 * @note This API is used for all available DMA channels.
3581 * @rmtoll PRIVCFGR PRIVx LL_DMA_IsEnabledChannelPrivilege
3582 * @param DMAx DMAx Instance
3583 * @param Channel This parameter can be one of the following values:
3584 * @arg @ref LL_DMA_CHANNEL_0
3585 * @arg @ref LL_DMA_CHANNEL_1
3586 * @arg @ref LL_DMA_CHANNEL_2
3587 * @arg @ref LL_DMA_CHANNEL_3
3588 * @arg @ref LL_DMA_CHANNEL_4
3589 * @arg @ref LL_DMA_CHANNEL_5
3590 * @arg @ref LL_DMA_CHANNEL_6
3591 * @arg @ref LL_DMA_CHANNEL_7
3592 * @retval State of bit (1 or 0).
3593 */
LL_DMA_IsEnabledChannelPrivilege(const DMA_TypeDef * DMAx,uint32_t Channel)3594 __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannelPrivilege(const DMA_TypeDef *DMAx, uint32_t Channel)
3595 {
3596 return ((READ_BIT(DMAx->PRIVCFGR, (DMA_PRIVCFGR_PRIV0 << (Channel & 0x0000000FU)))
3597 == (DMA_PRIVCFGR_PRIV0 << (Channel & 0x0000000FU))) ? 1UL : 0UL);
3598 }
3599 #endif /* DMA_PRIVCFGR_PRIV0 */
3600 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
3601 /**
3602 * @brief Enable the DMA channel lock attributes.
3603 * @note This API is used for all available DMA channels.
3604 * @rmtoll RCFGLOCKR LOCKx LL_DMA_EnableChannelLockAttribute
3605 * @param DMAx DMAx Instance
3606 * @param Channel This parameter can be one of the following values:
3607 * @arg @ref LL_DMA_CHANNEL_0
3608 * @arg @ref LL_DMA_CHANNEL_1
3609 * @arg @ref LL_DMA_CHANNEL_2
3610 * @arg @ref LL_DMA_CHANNEL_3
3611 * @arg @ref LL_DMA_CHANNEL_4
3612 * @arg @ref LL_DMA_CHANNEL_5
3613 * @arg @ref LL_DMA_CHANNEL_6
3614 * @arg @ref LL_DMA_CHANNEL_7
3615 * @retval None.
3616 */
LL_DMA_EnableChannelLockAttribute(DMA_TypeDef * DMAx,uint32_t Channel)3617 __STATIC_INLINE void LL_DMA_EnableChannelLockAttribute(DMA_TypeDef *DMAx, uint32_t Channel)
3618 {
3619 SET_BIT(DMAx->RCFGLOCKR, (DMA_RCFGLOCKR_LOCK0 << (Channel & 0x0000000FU)));
3620 }
3621 #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
3622 #if defined (DMA_RCFGLOCKR_LOCK0)
3623 /**
3624 * @brief Check if DMA channel attributes are locked.
3625 * @note This API is used for all available DMA channels.
3626 * @rmtoll SECCFGR LOCKx LL_DMA_IsEnabledChannelLockAttribute
3627 * @param DMAx DMAx Instance
3628 * @param Channel This parameter can be one of the following values:
3629 * @arg @ref LL_DMA_CHANNEL_0
3630 * @arg @ref LL_DMA_CHANNEL_1
3631 * @arg @ref LL_DMA_CHANNEL_2
3632 * @arg @ref LL_DMA_CHANNEL_3
3633 * @arg @ref LL_DMA_CHANNEL_4
3634 * @arg @ref LL_DMA_CHANNEL_5
3635 * @arg @ref LL_DMA_CHANNEL_6
3636 * @arg @ref LL_DMA_CHANNEL_7
3637 * @retval State of bit (1 or 0).
3638 */
LL_DMA_IsEnabledChannelLockAttribute(const DMA_TypeDef * DMAx,uint32_t Channel)3639 __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannelLockAttribute(const DMA_TypeDef *DMAx, uint32_t Channel)
3640 {
3641 return ((READ_BIT(DMAx->RCFGLOCKR, (DMA_RCFGLOCKR_LOCK0 << (Channel & 0x0000000FU)))
3642 == (DMA_RCFGLOCKR_LOCK0 << (Channel & 0x0000000FU))) ? 1UL : 0UL);
3643 }
3644
3645 #endif /* DMA_RCFGLOCKR_LOCK0 */
3646 /**
3647 * @}
3648 */
3649
3650 /** @defgroup DMA_LL_EF_FLAG_Management Flag Management
3651 * @{
3652 */
3653
3654 /**
3655 * @brief Clear trigger overrun flag.
3656 * @note This API is used for all available DMA channels.
3657 * @rmtoll CFCR TOF LL_DMA_ClearFlag_TO
3658 * @param DMAx DMAx Instance
3659 * @param Channel This parameter can be one of the following values:
3660 * @arg @ref LL_DMA_CHANNEL_0
3661 * @arg @ref LL_DMA_CHANNEL_1
3662 * @arg @ref LL_DMA_CHANNEL_2
3663 * @arg @ref LL_DMA_CHANNEL_3
3664 * @arg @ref LL_DMA_CHANNEL_4
3665 * @arg @ref LL_DMA_CHANNEL_5
3666 * @arg @ref LL_DMA_CHANNEL_6
3667 * @arg @ref LL_DMA_CHANNEL_7
3668 * @retval None.
3669 */
LL_DMA_ClearFlag_TO(const DMA_TypeDef * DMAx,uint32_t Channel)3670 __STATIC_INLINE void LL_DMA_ClearFlag_TO(const DMA_TypeDef *DMAx, uint32_t Channel)
3671 {
3672 uint32_t dma_base_addr = (uint32_t)DMAx;
3673 WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CFCR, DMA_CFCR_TOF);
3674 }
3675
3676 /**
3677 * @brief Clear suspension flag.
3678 * @note This API is used for all available DMA channels.
3679 * @rmtoll CFCR SUSPF LL_DMA_ClearFlag_SUSP
3680 * @param DMAx DMAx Instance
3681 * @param Channel This parameter can be one of the following values:
3682 * @arg @ref LL_DMA_CHANNEL_0
3683 * @arg @ref LL_DMA_CHANNEL_1
3684 * @arg @ref LL_DMA_CHANNEL_2
3685 * @arg @ref LL_DMA_CHANNEL_3
3686 * @arg @ref LL_DMA_CHANNEL_4
3687 * @arg @ref LL_DMA_CHANNEL_5
3688 * @arg @ref LL_DMA_CHANNEL_6
3689 * @arg @ref LL_DMA_CHANNEL_7
3690 * @retval None.
3691 */
LL_DMA_ClearFlag_SUSP(const DMA_TypeDef * DMAx,uint32_t Channel)3692 __STATIC_INLINE void LL_DMA_ClearFlag_SUSP(const DMA_TypeDef *DMAx, uint32_t Channel)
3693 {
3694 uint32_t dma_base_addr = (uint32_t)DMAx;
3695 WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CFCR, DMA_CFCR_SUSPF);
3696 }
3697
3698 /**
3699 * @brief Clear user setting error flag.
3700 * @note This API is used for all available DMA channels.
3701 * @rmtoll CFCR USEF LL_DMA_ClearFlag_USE
3702 * @param DMAx DMAx Instance
3703 * @param Channel This parameter can be one of the following values:
3704 * @arg @ref LL_DMA_CHANNEL_0
3705 * @arg @ref LL_DMA_CHANNEL_1
3706 * @arg @ref LL_DMA_CHANNEL_2
3707 * @arg @ref LL_DMA_CHANNEL_3
3708 * @arg @ref LL_DMA_CHANNEL_4
3709 * @arg @ref LL_DMA_CHANNEL_5
3710 * @arg @ref LL_DMA_CHANNEL_6
3711 * @arg @ref LL_DMA_CHANNEL_7
3712 * @retval None.
3713 */
LL_DMA_ClearFlag_USE(const DMA_TypeDef * DMAx,uint32_t Channel)3714 __STATIC_INLINE void LL_DMA_ClearFlag_USE(const DMA_TypeDef *DMAx, uint32_t Channel)
3715 {
3716 uint32_t dma_base_addr = (uint32_t)DMAx;
3717 WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CFCR, DMA_CFCR_USEF);
3718 }
3719
3720 /**
3721 * @brief Clear link transfer error flag.
3722 * @note This API is used for all available DMA channels.
3723 * @rmtoll CFCR ULEF LL_DMA_ClearFlag_ULE
3724 * @param DMAx DMAx Instance
3725 * @param Channel This parameter can be one of the following values:
3726 * @arg @ref LL_DMA_CHANNEL_0
3727 * @arg @ref LL_DMA_CHANNEL_1
3728 * @arg @ref LL_DMA_CHANNEL_2
3729 * @arg @ref LL_DMA_CHANNEL_3
3730 * @arg @ref LL_DMA_CHANNEL_4
3731 * @arg @ref LL_DMA_CHANNEL_5
3732 * @arg @ref LL_DMA_CHANNEL_6
3733 * @arg @ref LL_DMA_CHANNEL_7
3734 * @retval None.
3735 */
LL_DMA_ClearFlag_ULE(const DMA_TypeDef * DMAx,uint32_t Channel)3736 __STATIC_INLINE void LL_DMA_ClearFlag_ULE(const DMA_TypeDef *DMAx, uint32_t Channel)
3737 {
3738 uint32_t dma_base_addr = (uint32_t)DMAx;
3739 WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CFCR, DMA_CFCR_ULEF);
3740 }
3741
3742 /**
3743 * @brief Clear data transfer error flag.
3744 * @note This API is used for all available DMA channels.
3745 * @rmtoll CFCR DTEF LL_DMA_ClearFlag_DTE
3746 * @param DMAx DMAx Instance
3747 * @param Channel This parameter can be one of the following values:
3748 * @arg @ref LL_DMA_CHANNEL_0
3749 * @arg @ref LL_DMA_CHANNEL_1
3750 * @arg @ref LL_DMA_CHANNEL_2
3751 * @arg @ref LL_DMA_CHANNEL_3
3752 * @arg @ref LL_DMA_CHANNEL_4
3753 * @arg @ref LL_DMA_CHANNEL_5
3754 * @arg @ref LL_DMA_CHANNEL_6
3755 * @arg @ref LL_DMA_CHANNEL_7
3756 * @retval None.
3757 */
LL_DMA_ClearFlag_DTE(const DMA_TypeDef * DMAx,uint32_t Channel)3758 __STATIC_INLINE void LL_DMA_ClearFlag_DTE(const DMA_TypeDef *DMAx, uint32_t Channel)
3759 {
3760 uint32_t dma_base_addr = (uint32_t)DMAx;
3761 WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CFCR, DMA_CFCR_DTEF);
3762 }
3763
3764 /**
3765 * @brief Clear half transfer flag.
3766 * @note This API is used for all available DMA channels.
3767 * @rmtoll CFCR HTF LL_DMA_ClearFlag_HT
3768 * @param DMAx DMAx Instance
3769 * @param Channel This parameter can be one of the following values:
3770 * @arg @ref LL_DMA_CHANNEL_0
3771 * @arg @ref LL_DMA_CHANNEL_1
3772 * @arg @ref LL_DMA_CHANNEL_2
3773 * @arg @ref LL_DMA_CHANNEL_3
3774 * @arg @ref LL_DMA_CHANNEL_4
3775 * @arg @ref LL_DMA_CHANNEL_5
3776 * @arg @ref LL_DMA_CHANNEL_6
3777 * @arg @ref LL_DMA_CHANNEL_7
3778 * @retval None.
3779 */
LL_DMA_ClearFlag_HT(const DMA_TypeDef * DMAx,uint32_t Channel)3780 __STATIC_INLINE void LL_DMA_ClearFlag_HT(const DMA_TypeDef *DMAx, uint32_t Channel)
3781 {
3782 uint32_t dma_base_addr = (uint32_t)DMAx;
3783 WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CFCR, DMA_CFCR_HTF);
3784 }
3785
3786 /**
3787 * @brief Clear transfer complete flag.
3788 * @note This API is used for all available DMA channels.
3789 * @rmtoll CFCR TCF LL_DMA_ClearFlag_TC
3790 * @param DMAx DMAx Instance
3791 * @param Channel This parameter can be one of the following values:
3792 * @arg @ref LL_DMA_CHANNEL_0
3793 * @arg @ref LL_DMA_CHANNEL_1
3794 * @arg @ref LL_DMA_CHANNEL_2
3795 * @arg @ref LL_DMA_CHANNEL_3
3796 * @arg @ref LL_DMA_CHANNEL_4
3797 * @arg @ref LL_DMA_CHANNEL_5
3798 * @arg @ref LL_DMA_CHANNEL_6
3799 * @arg @ref LL_DMA_CHANNEL_7
3800 * @retval None.
3801 */
LL_DMA_ClearFlag_TC(const DMA_TypeDef * DMAx,uint32_t Channel)3802 __STATIC_INLINE void LL_DMA_ClearFlag_TC(const DMA_TypeDef *DMAx, uint32_t Channel)
3803 {
3804 uint32_t dma_base_addr = (uint32_t)DMAx;
3805 WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CFCR, DMA_CFCR_TCF);
3806 }
3807
3808 /**
3809 * @brief Get trigger overrun flag.
3810 * @note This API is used for all available DMA channels.
3811 * @rmtoll CSR TOF LL_DMA_IsActiveFlag_TO
3812 * @param DMAx DMAx Instance
3813 * @param Channel This parameter can be one of the following values:
3814 * @arg @ref LL_DMA_CHANNEL_0
3815 * @arg @ref LL_DMA_CHANNEL_1
3816 * @arg @ref LL_DMA_CHANNEL_2
3817 * @arg @ref LL_DMA_CHANNEL_3
3818 * @arg @ref LL_DMA_CHANNEL_4
3819 * @arg @ref LL_DMA_CHANNEL_5
3820 * @arg @ref LL_DMA_CHANNEL_6
3821 * @arg @ref LL_DMA_CHANNEL_7
3822 * @retval State of bit (1 or 0).
3823 */
LL_DMA_IsActiveFlag_TO(const DMA_TypeDef * DMAx,uint32_t Channel)3824 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TO(const DMA_TypeDef *DMAx, uint32_t Channel)
3825 {
3826 uint32_t dma_base_addr = (uint32_t)DMAx;
3827 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR, DMA_CSR_TOF)
3828 == (DMA_CSR_TOF)) ? 1UL : 0UL);
3829 }
3830
3831 /**
3832 * @brief Get suspension flag.
3833 * @note This API is used for all available DMA channels.
3834 * @rmtoll CSR SUSPF LL_DMA_IsActiveFlag_SUSP
3835 * @param DMAx DMAx Instance
3836 * @param Channel This parameter can be one of the following values:
3837 * @arg @ref LL_DMA_CHANNEL_0
3838 * @arg @ref LL_DMA_CHANNEL_1
3839 * @arg @ref LL_DMA_CHANNEL_2
3840 * @arg @ref LL_DMA_CHANNEL_3
3841 * @arg @ref LL_DMA_CHANNEL_4
3842 * @arg @ref LL_DMA_CHANNEL_5
3843 * @arg @ref LL_DMA_CHANNEL_6
3844 * @arg @ref LL_DMA_CHANNEL_7
3845 * @retval State of bit (1 or 0).
3846 */
LL_DMA_IsActiveFlag_SUSP(const DMA_TypeDef * DMAx,uint32_t Channel)3847 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_SUSP(const DMA_TypeDef *DMAx, uint32_t Channel)
3848 {
3849 uint32_t dma_base_addr = (uint32_t)DMAx;
3850 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR, DMA_CSR_SUSPF)
3851 == (DMA_CSR_SUSPF)) ? 1UL : 0UL);
3852 }
3853
3854 /**
3855 * @brief Get user setting error flag.
3856 * @note This API is used for all available DMA channels.
3857 * @rmtoll CSR USEF LL_DMA_IsActiveFlag_USE
3858 * @param DMAx DMAx Instance
3859 * @param Channel This parameter can be one of the following values:
3860 * @arg @ref LL_DMA_CHANNEL_0
3861 * @arg @ref LL_DMA_CHANNEL_1
3862 * @arg @ref LL_DMA_CHANNEL_2
3863 * @arg @ref LL_DMA_CHANNEL_3
3864 * @arg @ref LL_DMA_CHANNEL_4
3865 * @arg @ref LL_DMA_CHANNEL_5
3866 * @arg @ref LL_DMA_CHANNEL_6
3867 * @arg @ref LL_DMA_CHANNEL_7
3868 * @retval State of bit (1 or 0).
3869 */
LL_DMA_IsActiveFlag_USE(const DMA_TypeDef * DMAx,uint32_t Channel)3870 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_USE(const DMA_TypeDef *DMAx, uint32_t Channel)
3871 {
3872 uint32_t dma_base_addr = (uint32_t)DMAx;
3873 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR, DMA_CSR_USEF)
3874 == (DMA_CSR_USEF)) ? 1UL : 0UL);
3875 }
3876
3877 /**
3878 * @brief Get user setting error flag.
3879 * @note This API is used for all available DMA channels.
3880 * @rmtoll CSR ULEF LL_DMA_IsActiveFlag_ULE
3881 * @param DMAx DMAx Instance
3882 * @param Channel This parameter can be one of the following values:
3883 * @arg @ref LL_DMA_CHANNEL_0
3884 * @arg @ref LL_DMA_CHANNEL_1
3885 * @arg @ref LL_DMA_CHANNEL_2
3886 * @arg @ref LL_DMA_CHANNEL_3
3887 * @arg @ref LL_DMA_CHANNEL_4
3888 * @arg @ref LL_DMA_CHANNEL_5
3889 * @arg @ref LL_DMA_CHANNEL_6
3890 * @arg @ref LL_DMA_CHANNEL_7
3891 * @retval State of bit (1 or 0).
3892 */
LL_DMA_IsActiveFlag_ULE(const DMA_TypeDef * DMAx,uint32_t Channel)3893 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_ULE(const DMA_TypeDef *DMAx, uint32_t Channel)
3894 {
3895 uint32_t dma_base_addr = (uint32_t)DMAx;
3896 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR, DMA_CSR_ULEF)
3897 == (DMA_CSR_ULEF)) ? 1UL : 0UL);
3898 }
3899
3900 /**
3901 * @brief Get data transfer error flag.
3902 * @note This API is used for all available DMA channels.
3903 * @rmtoll CSR DTEF LL_DMA_IsActiveFlag_DTE
3904 * @param DMAx DMAx Instance
3905 * @param Channel This parameter can be one of the following values:
3906 * @arg @ref LL_DMA_CHANNEL_0
3907 * @arg @ref LL_DMA_CHANNEL_1
3908 * @arg @ref LL_DMA_CHANNEL_2
3909 * @arg @ref LL_DMA_CHANNEL_3
3910 * @arg @ref LL_DMA_CHANNEL_4
3911 * @arg @ref LL_DMA_CHANNEL_5
3912 * @arg @ref LL_DMA_CHANNEL_6
3913 * @arg @ref LL_DMA_CHANNEL_7
3914 * @retval State of bit (1 or 0).
3915 */
LL_DMA_IsActiveFlag_DTE(const DMA_TypeDef * DMAx,uint32_t Channel)3916 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DTE(const DMA_TypeDef *DMAx, uint32_t Channel)
3917 {
3918 uint32_t dma_base_addr = (uint32_t)DMAx;
3919 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR, DMA_CSR_DTEF)
3920 == (DMA_CSR_DTEF)) ? 1UL : 0UL);
3921 }
3922
3923 /**
3924 * @brief Get half transfer flag.
3925 * @note This API is used for all available DMA channels.
3926 * @rmtoll CSR HTF LL_DMA_IsActiveFlag_HT
3927 * @param DMAx DMAx Instance
3928 * @param Channel This parameter can be one of the following values:
3929 * @arg @ref LL_DMA_CHANNEL_0
3930 * @arg @ref LL_DMA_CHANNEL_1
3931 * @arg @ref LL_DMA_CHANNEL_2
3932 * @arg @ref LL_DMA_CHANNEL_3
3933 * @arg @ref LL_DMA_CHANNEL_4
3934 * @arg @ref LL_DMA_CHANNEL_5
3935 * @arg @ref LL_DMA_CHANNEL_6
3936 * @arg @ref LL_DMA_CHANNEL_7
3937 * @retval State of bit (1 or 0).
3938 */
LL_DMA_IsActiveFlag_HT(const DMA_TypeDef * DMAx,uint32_t Channel)3939 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT(const DMA_TypeDef *DMAx, uint32_t Channel)
3940 {
3941 uint32_t dma_base_addr = (uint32_t)DMAx;
3942 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR, DMA_CSR_HTF)
3943 == (DMA_CSR_HTF)) ? 1UL : 0UL);
3944 }
3945
3946 /**
3947 * @brief Get transfer complete flag.
3948 * @note This API is used for all available DMA channels.
3949 * @rmtoll CSR TCF LL_DMA_IsActiveFlag_TC
3950 * @param DMAx DMAx Instance
3951 * @param Channel This parameter can be one of the following values:
3952 * @arg @ref LL_DMA_CHANNEL_0
3953 * @arg @ref LL_DMA_CHANNEL_1
3954 * @arg @ref LL_DMA_CHANNEL_2
3955 * @arg @ref LL_DMA_CHANNEL_3
3956 * @arg @ref LL_DMA_CHANNEL_4
3957 * @arg @ref LL_DMA_CHANNEL_5
3958 * @arg @ref LL_DMA_CHANNEL_6
3959 * @arg @ref LL_DMA_CHANNEL_7
3960 * @retval State of bit (1 or 0).
3961 */
LL_DMA_IsActiveFlag_TC(const DMA_TypeDef * DMAx,uint32_t Channel)3962 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC(const DMA_TypeDef *DMAx, uint32_t Channel)
3963 {
3964 uint32_t dma_base_addr = (uint32_t)DMAx;
3965 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR, DMA_CSR_TCF)
3966 == (DMA_CSR_TCF)) ? 1UL : 0UL);
3967 }
3968
3969 /**
3970 * @brief Get idle flag.
3971 * @note This API is used for all available DMA channels.
3972 * @rmtoll CSR IDLEF LL_DMA_IsActiveFlag_IDLE
3973 * @param DMAx DMAx Instance
3974 * @param Channel This parameter can be one of the following values:
3975 * @arg @ref LL_DMA_CHANNEL_0
3976 * @arg @ref LL_DMA_CHANNEL_1
3977 * @arg @ref LL_DMA_CHANNEL_2
3978 * @arg @ref LL_DMA_CHANNEL_3
3979 * @arg @ref LL_DMA_CHANNEL_4
3980 * @arg @ref LL_DMA_CHANNEL_5
3981 * @arg @ref LL_DMA_CHANNEL_6
3982 * @arg @ref LL_DMA_CHANNEL_7
3983 * @retval State of bit (1 or 0).
3984 */
LL_DMA_IsActiveFlag_IDLE(const DMA_TypeDef * DMAx,uint32_t Channel)3985 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_IDLE(const DMA_TypeDef *DMAx, uint32_t Channel)
3986 {
3987 uint32_t dma_base_addr = (uint32_t)DMAx;
3988 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CSR, DMA_CSR_IDLEF)
3989 == (DMA_CSR_IDLEF)) ? 1UL : 0UL);
3990 }
3991
3992 /**
3993 * @brief Check if nsecure masked interrupt is active.
3994 * @note This API is used for all available DMA channels.
3995 * @rmtoll MISR MISx LL_DMA_IsActiveFlag_MIS
3996 * @param DMAx DMAx Instance
3997 * @param Channel This parameter can be one of the following values:
3998 * @arg @ref LL_DMA_CHANNEL_0
3999 * @arg @ref LL_DMA_CHANNEL_1
4000 * @arg @ref LL_DMA_CHANNEL_2
4001 * @arg @ref LL_DMA_CHANNEL_3
4002 * @arg @ref LL_DMA_CHANNEL_4
4003 * @arg @ref LL_DMA_CHANNEL_5
4004 * @arg @ref LL_DMA_CHANNEL_6
4005 * @arg @ref LL_DMA_CHANNEL_7
4006 * @retval State of bit (1 or 0).
4007 */
LL_DMA_IsActiveFlag_MIS(const DMA_TypeDef * DMAx,uint32_t Channel)4008 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_MIS(const DMA_TypeDef *DMAx, uint32_t Channel)
4009 {
4010 return ((READ_BIT(DMAx->MISR, (DMA_MISR_MIS0 << (Channel & 0x0FU)))
4011 == (DMA_MISR_MIS0 << (Channel & 0x0FU))) ? 1UL : 0UL);
4012 }
4013
4014 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
4015 /**
4016 * @brief Check if secure masked interrupt is active.
4017 * @note This API is used for all available DMA channels.
4018 * @rmtoll SMISR MISx LL_DMA_IsActiveFlag_SMIS
4019 * @param DMAx DMAx Instance
4020 * @param Channel This parameter can be one of the following values:
4021 * @arg @ref LL_DMA_CHANNEL_0
4022 * @arg @ref LL_DMA_CHANNEL_1
4023 * @arg @ref LL_DMA_CHANNEL_2
4024 * @arg @ref LL_DMA_CHANNEL_3
4025 * @arg @ref LL_DMA_CHANNEL_4
4026 * @arg @ref LL_DMA_CHANNEL_5
4027 * @arg @ref LL_DMA_CHANNEL_6
4028 * @arg @ref LL_DMA_CHANNEL_7
4029 * @retval State of bit (1 or 0).
4030 */
LL_DMA_IsActiveFlag_SMIS(const DMA_TypeDef * DMAx,uint32_t Channel)4031 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_SMIS(const DMA_TypeDef *DMAx, uint32_t Channel)
4032 {
4033 return ((READ_BIT(DMAx->SMISR, (DMA_SMISR_MIS0 << (Channel & 0x0000000FU)))
4034 == (DMA_SMISR_MIS0 << (Channel & 0x0000000FU))) ? 1UL : 0UL);
4035 }
4036 #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
4037 /**
4038 * @}
4039 */
4040
4041 /** @defgroup DMA_LL_EF_IT_Management Interrupt Management
4042 * @{
4043 */
4044
4045 /**
4046 * @brief Enable trigger overrun interrupt.
4047 * @note This API is used for all available DMA channels.
4048 * @rmtoll CCR TOIE LL_DMA_EnableIT_TO
4049 * @param DMAx DMAx Instance
4050 * @param Channel This parameter can be one of the following values:
4051 * @arg @ref LL_DMA_CHANNEL_0
4052 * @arg @ref LL_DMA_CHANNEL_1
4053 * @arg @ref LL_DMA_CHANNEL_2
4054 * @arg @ref LL_DMA_CHANNEL_3
4055 * @arg @ref LL_DMA_CHANNEL_4
4056 * @arg @ref LL_DMA_CHANNEL_5
4057 * @arg @ref LL_DMA_CHANNEL_6
4058 * @arg @ref LL_DMA_CHANNEL_7
4059 * @retval None.
4060 */
LL_DMA_EnableIT_TO(const DMA_TypeDef * DMAx,uint32_t Channel)4061 __STATIC_INLINE void LL_DMA_EnableIT_TO(const DMA_TypeDef *DMAx, uint32_t Channel)
4062 {
4063 uint32_t dma_base_addr = (uint32_t)DMAx;
4064 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TOIE);
4065 }
4066
4067 /**
4068 * @brief Enable suspension interrupt.
4069 * @note This API is used for all available DMA channels.
4070 * @rmtoll CCR SUSPIE LL_DMA_EnableIT_SUSP
4071 * @param DMAx DMAx Instance
4072 * @param Channel This parameter can be one of the following values:
4073 * @arg @ref LL_DMA_CHANNEL_0
4074 * @arg @ref LL_DMA_CHANNEL_1
4075 * @arg @ref LL_DMA_CHANNEL_2
4076 * @arg @ref LL_DMA_CHANNEL_3
4077 * @arg @ref LL_DMA_CHANNEL_4
4078 * @arg @ref LL_DMA_CHANNEL_5
4079 * @arg @ref LL_DMA_CHANNEL_6
4080 * @arg @ref LL_DMA_CHANNEL_7
4081 * @retval None.
4082 */
LL_DMA_EnableIT_SUSP(const DMA_TypeDef * DMAx,uint32_t Channel)4083 __STATIC_INLINE void LL_DMA_EnableIT_SUSP(const DMA_TypeDef *DMAx, uint32_t Channel)
4084 {
4085 uint32_t dma_base_addr = (uint32_t)DMAx;
4086 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_SUSPIE);
4087 }
4088
4089 /**
4090 * @brief Enable user setting error interrupt.
4091 * @note This API is used for all available DMA channels.
4092 * @rmtoll CCR USEIE LL_DMA_EnableIT_USE
4093 * @param DMAx DMAx Instance
4094 * @param Channel This parameter can be one of the following values:
4095 * @arg @ref LL_DMA_CHANNEL_0
4096 * @arg @ref LL_DMA_CHANNEL_1
4097 * @arg @ref LL_DMA_CHANNEL_2
4098 * @arg @ref LL_DMA_CHANNEL_3
4099 * @arg @ref LL_DMA_CHANNEL_4
4100 * @arg @ref LL_DMA_CHANNEL_5
4101 * @arg @ref LL_DMA_CHANNEL_6
4102 * @arg @ref LL_DMA_CHANNEL_7
4103 * @retval None.
4104 */
LL_DMA_EnableIT_USE(const DMA_TypeDef * DMAx,uint32_t Channel)4105 __STATIC_INLINE void LL_DMA_EnableIT_USE(const DMA_TypeDef *DMAx, uint32_t Channel)
4106 {
4107 uint32_t dma_base_addr = (uint32_t)DMAx;
4108 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_USEIE);
4109 }
4110
4111 /**
4112 * @brief Enable update link transfer error interrupt.
4113 * @note This API is used for all available DMA channels.
4114 * @rmtoll CCR ULEIE LL_DMA_EnableIT_ULE
4115 * @param DMAx DMAx Instance
4116 * @param Channel This parameter can be one of the following values:
4117 * @arg @ref LL_DMA_CHANNEL_0
4118 * @arg @ref LL_DMA_CHANNEL_1
4119 * @arg @ref LL_DMA_CHANNEL_2
4120 * @arg @ref LL_DMA_CHANNEL_3
4121 * @arg @ref LL_DMA_CHANNEL_4
4122 * @arg @ref LL_DMA_CHANNEL_5
4123 * @arg @ref LL_DMA_CHANNEL_6
4124 * @arg @ref LL_DMA_CHANNEL_7
4125 * @retval None.
4126 */
LL_DMA_EnableIT_ULE(const DMA_TypeDef * DMAx,uint32_t Channel)4127 __STATIC_INLINE void LL_DMA_EnableIT_ULE(const DMA_TypeDef *DMAx, uint32_t Channel)
4128 {
4129 uint32_t dma_base_addr = (uint32_t)DMAx;
4130 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_ULEIE);
4131 }
4132
4133 /**
4134 * @brief Enable data transfer error interrupt.
4135 * @note This API is used for all available DMA channels.
4136 * @rmtoll CCR DTEIE LL_DMA_EnableIT_DTE
4137 * @param DMAx DMAx Instance
4138 * @param Channel This parameter can be one of the following values:
4139 * @arg @ref LL_DMA_CHANNEL_0
4140 * @arg @ref LL_DMA_CHANNEL_1
4141 * @arg @ref LL_DMA_CHANNEL_2
4142 * @arg @ref LL_DMA_CHANNEL_3
4143 * @arg @ref LL_DMA_CHANNEL_4
4144 * @arg @ref LL_DMA_CHANNEL_5
4145 * @arg @ref LL_DMA_CHANNEL_6
4146 * @arg @ref LL_DMA_CHANNEL_7
4147 * @retval None.
4148 */
LL_DMA_EnableIT_DTE(const DMA_TypeDef * DMAx,uint32_t Channel)4149 __STATIC_INLINE void LL_DMA_EnableIT_DTE(const DMA_TypeDef *DMAx, uint32_t Channel)
4150 {
4151 uint32_t dma_base_addr = (uint32_t)DMAx;
4152 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_DTEIE);
4153 }
4154
4155 /**
4156 * @brief Enable half transfer complete interrupt.
4157 * @note This API is used for all available DMA channels.
4158 * @rmtoll CCR HTIE LL_DMA_EnableIT_HT
4159 * @param DMAx DMAx Instance
4160 * @param Channel This parameter can be one of the following values:
4161 * @arg @ref LL_DMA_CHANNEL_0
4162 * @arg @ref LL_DMA_CHANNEL_1
4163 * @arg @ref LL_DMA_CHANNEL_2
4164 * @arg @ref LL_DMA_CHANNEL_3
4165 * @arg @ref LL_DMA_CHANNEL_4
4166 * @arg @ref LL_DMA_CHANNEL_5
4167 * @arg @ref LL_DMA_CHANNEL_6
4168 * @arg @ref LL_DMA_CHANNEL_7
4169 * @retval None.
4170 */
LL_DMA_EnableIT_HT(const DMA_TypeDef * DMAx,uint32_t Channel)4171 __STATIC_INLINE void LL_DMA_EnableIT_HT(const DMA_TypeDef *DMAx, uint32_t Channel)
4172 {
4173 uint32_t dma_base_addr = (uint32_t)DMAx;
4174 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_HTIE);
4175 }
4176
4177 /**
4178 * @brief Enable transfer complete interrupt.
4179 * @note This API is used for all available DMA channels.
4180 * @rmtoll CCR TCIE LL_DMA_EnableIT_TC
4181 * @param DMAx DMAx Instance
4182 * @param Channel This parameter can be one of the following values:
4183 * @arg @ref LL_DMA_CHANNEL_0
4184 * @arg @ref LL_DMA_CHANNEL_1
4185 * @arg @ref LL_DMA_CHANNEL_2
4186 * @arg @ref LL_DMA_CHANNEL_3
4187 * @arg @ref LL_DMA_CHANNEL_4
4188 * @arg @ref LL_DMA_CHANNEL_5
4189 * @arg @ref LL_DMA_CHANNEL_6
4190 * @arg @ref LL_DMA_CHANNEL_7
4191 * @retval None.
4192 */
LL_DMA_EnableIT_TC(const DMA_TypeDef * DMAx,uint32_t Channel)4193 __STATIC_INLINE void LL_DMA_EnableIT_TC(const DMA_TypeDef *DMAx, uint32_t Channel)
4194 {
4195 uint32_t dma_base_addr = (uint32_t)DMAx;
4196 SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TCIE);
4197 }
4198
4199 /**
4200 * @brief Disable trigger overrun interrupt.
4201 * @note This API is used for all available DMA channels.
4202 * @rmtoll CCR TOIE LL_DMA_DisableIT_TO
4203 * @param DMAx DMAx Instance
4204 * @param Channel This parameter can be one of the following values:
4205 * @arg @ref LL_DMA_CHANNEL_0
4206 * @arg @ref LL_DMA_CHANNEL_1
4207 * @arg @ref LL_DMA_CHANNEL_2
4208 * @arg @ref LL_DMA_CHANNEL_3
4209 * @arg @ref LL_DMA_CHANNEL_4
4210 * @arg @ref LL_DMA_CHANNEL_5
4211 * @arg @ref LL_DMA_CHANNEL_6
4212 * @arg @ref LL_DMA_CHANNEL_7
4213 * @retval None.
4214 */
LL_DMA_DisableIT_TO(const DMA_TypeDef * DMAx,uint32_t Channel)4215 __STATIC_INLINE void LL_DMA_DisableIT_TO(const DMA_TypeDef *DMAx, uint32_t Channel)
4216 {
4217 uint32_t dma_base_addr = (uint32_t)DMAx;
4218 CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TOIE);
4219 }
4220
4221 /**
4222 * @brief Disable suspension interrupt.
4223 * @note This API is used for all available DMA channels.
4224 * @rmtoll CCR SUSPIE LL_DMA_DisableIT_SUSP
4225 * @param DMAx DMAx Instance
4226 * @param Channel This parameter can be one of the following values:
4227 * @arg @ref LL_DMA_CHANNEL_0
4228 * @arg @ref LL_DMA_CHANNEL_1
4229 * @arg @ref LL_DMA_CHANNEL_2
4230 * @arg @ref LL_DMA_CHANNEL_3
4231 * @arg @ref LL_DMA_CHANNEL_4
4232 * @arg @ref LL_DMA_CHANNEL_5
4233 * @arg @ref LL_DMA_CHANNEL_6
4234 * @arg @ref LL_DMA_CHANNEL_7
4235 * @retval None.
4236 */
LL_DMA_DisableIT_SUSP(const DMA_TypeDef * DMAx,uint32_t Channel)4237 __STATIC_INLINE void LL_DMA_DisableIT_SUSP(const DMA_TypeDef *DMAx, uint32_t Channel)
4238 {
4239 uint32_t dma_base_addr = (uint32_t)DMAx;
4240 CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_SUSPIE);
4241 }
4242
4243 /**
4244 * @brief Disable user setting error interrupt.
4245 * @note This API is used for all available DMA channels.
4246 * @rmtoll CCR USEIE LL_DMA_DisableIT_USE
4247 * @param DMAx DMAx Instance
4248 * @param Channel This parameter can be one of the following values:
4249 * @arg @ref LL_DMA_CHANNEL_0
4250 * @arg @ref LL_DMA_CHANNEL_1
4251 * @arg @ref LL_DMA_CHANNEL_2
4252 * @arg @ref LL_DMA_CHANNEL_3
4253 * @arg @ref LL_DMA_CHANNEL_4
4254 * @arg @ref LL_DMA_CHANNEL_5
4255 * @arg @ref LL_DMA_CHANNEL_6
4256 * @arg @ref LL_DMA_CHANNEL_7
4257 * @retval None.
4258 */
LL_DMA_DisableIT_USE(const DMA_TypeDef * DMAx,uint32_t Channel)4259 __STATIC_INLINE void LL_DMA_DisableIT_USE(const DMA_TypeDef *DMAx, uint32_t Channel)
4260 {
4261 uint32_t dma_base_addr = (uint32_t)DMAx;
4262 CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_USEIE);
4263 }
4264
4265 /**
4266 * @brief Disable update link transfer error interrupt.
4267 * @note This API is used for all available DMA channels.
4268 * @rmtoll CCR ULEIE LL_DMA_DisableIT_ULE
4269 * @param DMAx DMAx Instance
4270 * @param Channel This parameter can be one of the following values:
4271 * @arg @ref LL_DMA_CHANNEL_0
4272 * @arg @ref LL_DMA_CHANNEL_1
4273 * @arg @ref LL_DMA_CHANNEL_2
4274 * @arg @ref LL_DMA_CHANNEL_3
4275 * @arg @ref LL_DMA_CHANNEL_4
4276 * @arg @ref LL_DMA_CHANNEL_5
4277 * @arg @ref LL_DMA_CHANNEL_6
4278 * @arg @ref LL_DMA_CHANNEL_7
4279 * @retval None.
4280 */
LL_DMA_DisableIT_ULE(const DMA_TypeDef * DMAx,uint32_t Channel)4281 __STATIC_INLINE void LL_DMA_DisableIT_ULE(const DMA_TypeDef *DMAx, uint32_t Channel)
4282 {
4283 uint32_t dma_base_addr = (uint32_t)DMAx;
4284 CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_ULEIE);
4285 }
4286
4287 /**
4288 * @brief Disable data transfer error interrupt.
4289 * @note This API is used for all available DMA channels.
4290 * @rmtoll CCR DTEIE LL_DMA_DisableIT_DTE
4291 * @param DMAx DMAx Instance
4292 * @param Channel This parameter can be one of the following values:
4293 * @arg @ref LL_DMA_CHANNEL_0
4294 * @arg @ref LL_DMA_CHANNEL_1
4295 * @arg @ref LL_DMA_CHANNEL_2
4296 * @arg @ref LL_DMA_CHANNEL_3
4297 * @arg @ref LL_DMA_CHANNEL_4
4298 * @arg @ref LL_DMA_CHANNEL_5
4299 * @arg @ref LL_DMA_CHANNEL_6
4300 * @arg @ref LL_DMA_CHANNEL_7
4301 * @retval None.
4302 */
LL_DMA_DisableIT_DTE(const DMA_TypeDef * DMAx,uint32_t Channel)4303 __STATIC_INLINE void LL_DMA_DisableIT_DTE(const DMA_TypeDef *DMAx, uint32_t Channel)
4304 {
4305 uint32_t dma_base_addr = (uint32_t)DMAx;
4306 CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_DTEIE);
4307 }
4308
4309 /**
4310 * @brief Disable half transfer complete interrupt.
4311 * @note This API is used for all available DMA channels.
4312 * @rmtoll CCR HTIE LL_DMA_DisableIT_HT
4313 * @param DMAx DMAx Instance
4314 * @param Channel This parameter can be one of the following values:
4315 * @arg @ref LL_DMA_CHANNEL_0
4316 * @arg @ref LL_DMA_CHANNEL_1
4317 * @arg @ref LL_DMA_CHANNEL_2
4318 * @arg @ref LL_DMA_CHANNEL_3
4319 * @arg @ref LL_DMA_CHANNEL_4
4320 * @arg @ref LL_DMA_CHANNEL_5
4321 * @arg @ref LL_DMA_CHANNEL_6
4322 * @arg @ref LL_DMA_CHANNEL_7
4323 * @retval None.
4324 */
LL_DMA_DisableIT_HT(const DMA_TypeDef * DMAx,uint32_t Channel)4325 __STATIC_INLINE void LL_DMA_DisableIT_HT(const DMA_TypeDef *DMAx, uint32_t Channel)
4326 {
4327 uint32_t dma_base_addr = (uint32_t)DMAx;
4328 CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_HTIE);
4329 }
4330
4331 /**
4332 * @brief Disable transfer complete interrupt.
4333 * @note This API is used for all available DMA channels.
4334 * @rmtoll CCR TCIE LL_DMA_DisableIT_TC
4335 * @param DMAx DMAx Instance
4336 * @param Channel This parameter can be one of the following values:
4337 * @arg @ref LL_DMA_CHANNEL_0
4338 * @arg @ref LL_DMA_CHANNEL_1
4339 * @arg @ref LL_DMA_CHANNEL_2
4340 * @arg @ref LL_DMA_CHANNEL_3
4341 * @arg @ref LL_DMA_CHANNEL_4
4342 * @arg @ref LL_DMA_CHANNEL_5
4343 * @arg @ref LL_DMA_CHANNEL_6
4344 * @arg @ref LL_DMA_CHANNEL_7
4345 * @retval None.
4346 */
LL_DMA_DisableIT_TC(const DMA_TypeDef * DMAx,uint32_t Channel)4347 __STATIC_INLINE void LL_DMA_DisableIT_TC(const DMA_TypeDef *DMAx, uint32_t Channel)
4348 {
4349 uint32_t dma_base_addr = (uint32_t)DMAx;
4350 CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TCIE);
4351 }
4352
4353 /**
4354 * @brief Check if trigger overrun interrupt is enabled.
4355 * @note This API is used for all available DMA channels.
4356 * @rmtoll CCR TOIE LL_DMA_IsEnabledIT_TO
4357 * @param DMAx DMAx Instance
4358 * @param Channel This parameter can be one of the following values:
4359 * @arg @ref LL_DMA_CHANNEL_0
4360 * @arg @ref LL_DMA_CHANNEL_1
4361 * @arg @ref LL_DMA_CHANNEL_2
4362 * @arg @ref LL_DMA_CHANNEL_3
4363 * @arg @ref LL_DMA_CHANNEL_4
4364 * @arg @ref LL_DMA_CHANNEL_5
4365 * @arg @ref LL_DMA_CHANNEL_6
4366 * @arg @ref LL_DMA_CHANNEL_7
4367 * @retval State of bit (1 or 0).
4368 */
LL_DMA_IsEnabledIT_TO(const DMA_TypeDef * DMAx,uint32_t Channel)4369 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TO(const DMA_TypeDef *DMAx, uint32_t Channel)
4370 {
4371 uint32_t dma_base_addr = (uint32_t)DMAx;
4372 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TOIE)
4373 == DMA_CCR_TOIE) ? 1UL : 0UL);
4374 }
4375
4376 /**
4377 * @brief Check if suspension interrupt is enabled.
4378 * @note This API is used for all available DMA channels.
4379 * @rmtoll CCR SUSPIE LL_DMA_IsEnabledIT_SUSP
4380 * @param DMAx DMAx Instance
4381 * @param Channel This parameter can be one of the following values:
4382 * @arg @ref LL_DMA_CHANNEL_0
4383 * @arg @ref LL_DMA_CHANNEL_1
4384 * @arg @ref LL_DMA_CHANNEL_2
4385 * @arg @ref LL_DMA_CHANNEL_3
4386 * @arg @ref LL_DMA_CHANNEL_4
4387 * @arg @ref LL_DMA_CHANNEL_5
4388 * @arg @ref LL_DMA_CHANNEL_6
4389 * @arg @ref LL_DMA_CHANNEL_7
4390 * @retval State of bit (1 or 0).
4391 */
LL_DMA_IsEnabledIT_SUSP(const DMA_TypeDef * DMAx,uint32_t Channel)4392 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_SUSP(const DMA_TypeDef *DMAx, uint32_t Channel)
4393 {
4394 uint32_t dma_base_addr = (uint32_t)DMAx;
4395 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_SUSPIE)
4396 == DMA_CCR_SUSPIE) ? 1UL : 0UL);
4397 }
4398
4399 /**
4400 * @brief Check if user setting error interrupt is enabled.
4401 * @note This API is used for all available DMA channels.
4402 * @rmtoll CCR USEIE LL_DMA_IsEnabledIT_USE
4403 * @param DMAx DMAx Instance
4404 * @param Channel This parameter can be one of the following values:
4405 * @arg @ref LL_DMA_CHANNEL_0
4406 * @arg @ref LL_DMA_CHANNEL_1
4407 * @arg @ref LL_DMA_CHANNEL_2
4408 * @arg @ref LL_DMA_CHANNEL_3
4409 * @arg @ref LL_DMA_CHANNEL_4
4410 * @arg @ref LL_DMA_CHANNEL_5
4411 * @arg @ref LL_DMA_CHANNEL_6
4412 * @arg @ref LL_DMA_CHANNEL_7
4413 * @retval State of bit (1 or 0).
4414 */
LL_DMA_IsEnabledIT_USE(const DMA_TypeDef * DMAx,uint32_t Channel)4415 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_USE(const DMA_TypeDef *DMAx, uint32_t Channel)
4416 {
4417 uint32_t dma_base_addr = (uint32_t)DMAx;
4418 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_USEIE)
4419 == DMA_CCR_USEIE) ? 1UL : 0UL);
4420 }
4421
4422 /**
4423 * @brief Check if update link transfer error interrupt is enabled.
4424 * @note This API is used for all available DMA channels.
4425 * @rmtoll CCR ULEIE LL_DMA_IsEnabledIT_ULE
4426 * @param DMAx DMAx Instance
4427 * @param Channel This parameter can be one of the following values:
4428 * @arg @ref LL_DMA_CHANNEL_0
4429 * @arg @ref LL_DMA_CHANNEL_1
4430 * @arg @ref LL_DMA_CHANNEL_2
4431 * @arg @ref LL_DMA_CHANNEL_3
4432 * @arg @ref LL_DMA_CHANNEL_4
4433 * @arg @ref LL_DMA_CHANNEL_5
4434 * @arg @ref LL_DMA_CHANNEL_6
4435 * @arg @ref LL_DMA_CHANNEL_7
4436 * @retval State of bit (1 or 0).
4437 */
LL_DMA_IsEnabledIT_ULE(const DMA_TypeDef * DMAx,uint32_t Channel)4438 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_ULE(const DMA_TypeDef *DMAx, uint32_t Channel)
4439 {
4440 uint32_t dma_base_addr = (uint32_t)DMAx;
4441 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_ULEIE)
4442 == DMA_CCR_ULEIE) ? 1UL : 0UL);
4443 }
4444
4445 /**
4446 * @brief Check if data transfer error interrupt is enabled.
4447 * @note This API is used for all available DMA channels.
4448 * @rmtoll CCR DTEIE LL_DMA_IsEnabledIT_DTE
4449 * @param DMAx DMAx Instance
4450 * @param Channel This parameter can be one of the following values:
4451 * @arg @ref LL_DMA_CHANNEL_0
4452 * @arg @ref LL_DMA_CHANNEL_1
4453 * @arg @ref LL_DMA_CHANNEL_2
4454 * @arg @ref LL_DMA_CHANNEL_3
4455 * @arg @ref LL_DMA_CHANNEL_4
4456 * @arg @ref LL_DMA_CHANNEL_5
4457 * @arg @ref LL_DMA_CHANNEL_6
4458 * @arg @ref LL_DMA_CHANNEL_7
4459 * @retval State of bit (1 or 0).
4460 */
LL_DMA_IsEnabledIT_DTE(const DMA_TypeDef * DMAx,uint32_t Channel)4461 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_DTE(const DMA_TypeDef *DMAx, uint32_t Channel)
4462 {
4463 uint32_t dma_base_addr = (uint32_t)DMAx;
4464 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_DTEIE)
4465 == DMA_CCR_DTEIE) ? 1UL : 0UL);
4466 }
4467
4468 /**
4469 * @brief Check if half transfer complete interrupt is enabled.
4470 * @note This API is used for all available DMA channels.
4471 * @rmtoll CCR HTIE LL_DMA_IsEnabledIT_HT
4472 * @param DMAx DMAx Instance
4473 * @param Channel This parameter can be one of the following values:
4474 * @arg @ref LL_DMA_CHANNEL_0
4475 * @arg @ref LL_DMA_CHANNEL_1
4476 * @arg @ref LL_DMA_CHANNEL_2
4477 * @arg @ref LL_DMA_CHANNEL_3
4478 * @arg @ref LL_DMA_CHANNEL_4
4479 * @arg @ref LL_DMA_CHANNEL_5
4480 * @arg @ref LL_DMA_CHANNEL_6
4481 * @arg @ref LL_DMA_CHANNEL_7
4482 * @retval State of bit (1 or 0).
4483 */
LL_DMA_IsEnabledIT_HT(const DMA_TypeDef * DMAx,uint32_t Channel)4484 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_HT(const DMA_TypeDef *DMAx, uint32_t Channel)
4485 {
4486 uint32_t dma_base_addr = (uint32_t)DMAx;
4487 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_HTIE)
4488 == DMA_CCR_HTIE) ? 1UL : 0UL);
4489 }
4490
4491 /**
4492 * @brief Check if transfer complete interrupt is enabled.
4493 * @note This API is used for all available DMA channels.
4494 * @rmtoll CCR TCIE LL_DMA_IsEnabledIT_TC
4495 * @param DMAx DMAx Instance
4496 * @param Channel This parameter can be one of the following values:
4497 * @arg @ref LL_DMA_CHANNEL_0
4498 * @arg @ref LL_DMA_CHANNEL_1
4499 * @arg @ref LL_DMA_CHANNEL_2
4500 * @arg @ref LL_DMA_CHANNEL_3
4501 * @arg @ref LL_DMA_CHANNEL_4
4502 * @arg @ref LL_DMA_CHANNEL_5
4503 * @arg @ref LL_DMA_CHANNEL_6
4504 * @arg @ref LL_DMA_CHANNEL_7
4505 * @retval State of bit (1 or 0).
4506 */
LL_DMA_IsEnabledIT_TC(const DMA_TypeDef * DMAx,uint32_t Channel)4507 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TC(const DMA_TypeDef *DMAx, uint32_t Channel)
4508 {
4509 uint32_t dma_base_addr = (uint32_t)DMAx;
4510 return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + LL_DMA_CH_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TCIE)
4511 == DMA_CCR_TCIE) ? 1UL : 0UL);
4512 }
4513 /**
4514 * @}
4515 */
4516
4517 #if defined (USE_FULL_LL_DRIVER)
4518 /** @defgroup DMA_LL_EF_Init Initialization and de-initialization functions
4519 * @{
4520 */
4521 uint32_t LL_DMA_Init(DMA_TypeDef *DMAx, uint32_t Channel, LL_DMA_InitTypeDef *DMA_InitStruct);
4522 uint32_t LL_DMA_DeInit(DMA_TypeDef *DMAx, uint32_t Channel);
4523
4524 void LL_DMA_StructInit(LL_DMA_InitTypeDef *DMA_InitStruct);
4525 void LL_DMA_ListStructInit(LL_DMA_InitLinkedListTypeDef *DMA_InitLinkedListStruct);
4526 void LL_DMA_NodeStructInit(LL_DMA_InitNodeTypeDef *DMA_InitNodeStruct);
4527
4528 uint32_t LL_DMA_List_Init(DMA_TypeDef *DMAx, uint32_t Channel,
4529 LL_DMA_InitLinkedListTypeDef *DMA_InitLinkedListStruct);
4530 uint32_t LL_DMA_List_DeInit(DMA_TypeDef *DMAx, uint32_t Channel);
4531
4532 uint32_t LL_DMA_CreateLinkNode(const LL_DMA_InitNodeTypeDef *DMA_InitNodeStruct, LL_DMA_LinkNodeTypeDef *pNode);
4533 void LL_DMA_ConnectLinkNode(LL_DMA_LinkNodeTypeDef *pPrevLinkNode, uint32_t PrevNodeCLLRIdx,
4534 LL_DMA_LinkNodeTypeDef *pNewLinkNode, uint32_t NewNodeCLLRIdx);
4535 void LL_DMA_DisconnectNextLinkNode(LL_DMA_LinkNodeTypeDef *pLinkNode, uint32_t LinkNodeCLLRIdx);
4536 /**
4537 * @}
4538 */
4539 #endif /* USE_FULL_LL_DRIVER */
4540
4541 /**
4542 * @}
4543 */
4544
4545 /**
4546 * @}
4547 */
4548
4549 #endif /* GPDMA1 */
4550
4551 /**
4552 * @}
4553 */
4554
4555 #ifdef __cplusplus
4556 }
4557 #endif /* __cplusplus */
4558
4559 #endif /* STM32WBAxx_LL_DMA_H */
4560
4561