1 /**
2   **********************************************************************************************************************
3   * @file    stm32h7rsxx_hal_dma_ex.h
4   * @author  MCD Application Team
5   * @brief   Header file of DMA HAL extension module.
6   **********************************************************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2022 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   **********************************************************************************************************************
17   */
18 
19 /* Define to prevent recursive inclusion -----------------------------------------------------------------------------*/
20 #ifndef STM32H7RSxx_HAL_DMA_EX_H
21 #define STM32H7RSxx_HAL_DMA_EX_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ----------------------------------------------------------------------------------------------------------*/
28 #include "stm32h7rsxx_hal_def.h"
29 
30 /** @addtogroup STM32H7RSxx_HAL_Driver
31   * @{
32   */
33 
34 /** @addtogroup DMAEx
35   * @{
36   */
37 
38 /* Exported types ----------------------------------------------------------------------------------------------------*/
39 /** @defgroup DMAEx_Exported_Types DMAEx Exported Types
40   * @brief DMAEx Exported types
41   * @{
42   */
43 
44 /**
45   * @brief DMAEx Data Handling Configuration Structure Definition.
46   */
47 typedef struct
48 {
49   uint32_t DataExchange;  /*!< Specifies the DMA channel data exchange mode.
50                                This parameter can be a value of @ref DMAEx_Data_Exchange  */
51 
52   uint32_t DataAlignment; /*!< Specifies the DMA channel data padding and alignment mode
53                                This parameter can be a value of @ref DMAEx_Data_Alignment */
54 
55 } DMA_DataHandlingConfTypeDef;
56 
57 /**
58   * @brief DMAEx Trigger Configuration Structure Definition.
59   */
60 typedef struct
61 {
62   uint32_t TriggerMode;      /*!< Specifies the DMA channel trigger mode.
63                                   This parameter can be a value of @ref DMAEx_Trigger_Mode      */
64 
65   uint32_t TriggerPolarity;  /*!< Specifies the DMA channel trigger event polarity.
66                                   This parameter can be a value of @ref DMAEx_Trigger_Polarity  */
67 
68   uint32_t TriggerSelection; /*!< Specifies the DMA channel trigger event selection.
69                                   This parameter can be a value of @ref DMAEx_Trigger_Selection */
70 
71 } DMA_TriggerConfTypeDef;
72 
73 /**
74   * @brief DMAEx Repeated Block Configuration Structure Definition.
75   */
76 typedef struct
77 {
78   uint32_t RepeatCount;      /*!< Specifies the DMA channel repeat count (the number of repetitions of block).
79                                   This parameter can be a value between 1 and 2048                                    */
80 
81   int32_t SrcAddrOffset;     /*!< Specifies the DMA channel single/burst source address offset :
82                                   This parameter can be a value between -8191 and 8191.
83                                   * If source address offset > 0 => Increment the source address by offset from where
84                                     the last single/burst transfer ends.
85                                   * If source address offset < 0 => Decrement the source address by offset from where
86                                     the last single/burst transfer ends.
87                                   * If source address offset == 0 => The next single/burst source address starts from
88                                     where the last transfer ends                                                      */
89 
90   int32_t DestAddrOffset;    /*!< Specifies the DMA channel single/burst destination address offset signed value :
91                                   This parameter can be a value between -8191 and 8191.
92                                   * If destination address offset > 0 => Increment the destination address by offset
93                                     from where the last single/burst transfer ends.
94                                   * If destination address offset < 0 => Decrement the destination address by offset
95                                     from where the last single/burst transfer ends.
96                                   * If destination address offset == 0 => The next single/burst destination address
97                                     starts from where the last transfer ends.                                         */
98 
99   int32_t BlkSrcAddrOffset;  /*!< Specifies the DMA channel block source address offset signed value :
100                                   This parameter can be a value between -65535 and 65535.
101                                   * If block source address offset > 0 => Increment the block source address by offset
102                                     from where the last block ends.
103                                   * If block source address offset < 0 => Decrement the next block source address by
104                                     offset from where the last block ends.
105                                   * If block source address offset == 0 =>  the next block source address starts from
106                                     where the last block ends                                                         */
107 
108   int32_t BlkDestAddrOffset; /*!< Specifies the DMA channel block destination address offset signed value :
109                                   This parameter can be a value between -65535 and 65535.
110                                   * If block destination address offset > 0 => Increment the block destination address
111                                     by offset from where the last block ends.
112                                   * If block destination address offset < 0 => Decrement the next block destination
113                                     address by offset from where the last block ends.
114                                   * If block destination address offset == 0 =>  the next block destination address
115                                     starts from where the last block ends                                             */
116 
117 } DMA_RepeatBlockConfTypeDef;
118 
119 /**
120   * @brief DMAEx Queue State Enumeration Definition.
121   */
122 typedef enum
123 {
124   HAL_DMA_QUEUE_STATE_RESET = 0x00U, /*!< DMA queue empty              */
125   HAL_DMA_QUEUE_STATE_READY = 0x01U, /*!< DMA queue ready for use      */
126   HAL_DMA_QUEUE_STATE_BUSY  = 0x02U  /*!< DMA queue execution on going */
127 
128 } HAL_DMA_QStateTypeDef;
129 
130 /**
131   * @brief  DMAEx Linked-List Node Configuration Structure Definition.
132   */
133 typedef struct
134 {
135   uint32_t                    NodeType;           /*!< Specifies the DMA channel node type.
136                                                        This parameter can be a value of @ref DMAEx_Node_Type          */
137 
138   DMA_InitTypeDef             Init;               /*!< Specifies the DMA channel basic configuration                  */
139 
140   DMA_DataHandlingConfTypeDef DataHandlingConfig; /*!< Specifies the DMA channel data handling channel configuration  */
141 
142   DMA_TriggerConfTypeDef      TriggerConfig;      /*!< Specifies the DMA channel trigger configuration                */
143 
144   DMA_RepeatBlockConfTypeDef  RepeatBlockConfig;  /*!< Specifies the DMA channel repeated block configuration         */
145 
146   uint32_t                    SrcAddress;         /*!< Specifies the source memory address                            */
147   uint32_t                    DstAddress;         /*!< Specifies the destination memory address                       */
148   uint32_t                    DataSize;           /*!< Specifies the source data size in bytes                        */
149 
150 } DMA_NodeConfTypeDef;
151 
152 /**
153   * @brief  DMAEx Linked-List Node Structure Definition.
154   */
155 typedef struct
156 {
157   uint32_t LinkRegisters[8U]; /*!< Physical Node register description */
158   uint32_t NodeInfo;          /*!< Node information                   */
159 
160 } DMA_NodeTypeDef;
161 
162 /**
163   * @brief DMAEx Linked-List Queue Structure Definition.
164   */
165 typedef struct __DMA_QListTypeDef
166 {
167   DMA_NodeTypeDef                *Head;              /*!< Specifies the queue head node                    */
168 
169   DMA_NodeTypeDef                *FirstCircularNode; /*!< Specifies the queue first circular node          */
170 
171   uint32_t                       NodeNumber;         /*!< Specifies the queue node number                  */
172 
173   __IO HAL_DMA_QStateTypeDef     State;              /*!< Specifies the queue state                        */
174 
175   __IO uint32_t                  ErrorCode;          /*!< Specifies the queue error code                   */
176 
177   __IO uint32_t                  Type;               /*!< Specifies whether the queue is static or dynamic */
178 
179 } DMA_QListTypeDef;
180 /**
181   * @}
182   */
183 
184 /* Exported constants ------------------------------------------------------------------------------------------------*/
185 /** @defgroup DMAEx_Exported_Constants DMAEx Exported Constants
186   * @brief    DMAEx Exported Constants
187   * @{
188   */
189 
190 /** @defgroup Queue_Error_Codes Queue Error Codes
191   * @brief    Queue Error Codes
192   * @{
193   */
194 #define HAL_DMA_QUEUE_ERROR_NONE        (0x00U) /*!< No error                                                */
195 #define HAL_DMA_QUEUE_ERROR_BUSY        (0x01U) /*!< Error busy                                              */
196 #define HAL_DMA_QUEUE_ERROR_EMPTY       (0x02U) /*!< Error unallowed operation for empty queue               */
197 #define HAL_DMA_QUEUE_ERROR_UNSUPPORTED (0x03U) /*!< Error unsupported feature                               */
198 #define HAL_DMA_QUEUE_ERROR_INVALIDTYPE (0x04U) /*!< Error incompatible node type or circular initialization
199                                                      and queue circular types are incompatible               */
200 #define HAL_DMA_QUEUE_ERROR_OUTOFRANGE  (0x05U) /*!< Error out of range node memory                          */
201 #define HAL_DMA_QUEUE_ERROR_NOTFOUND    (0x06U) /*!< Error node not found in queue                           */
202 /**
203   * @}
204   */
205 
206 /** @defgroup DMAEx_LinkedList_Mode DMAEx LinkedList Mode
207   * @brief    DMAEx LinkedList Mode
208   * @{
209   */
210 #define DMA_LINKEDLIST_NORMAL   DMA_LINKEDLIST             /*!< Linear linked-list DMA channel transfer   */
211 #define DMA_LINKEDLIST_CIRCULAR (DMA_LINKEDLIST | (0x01U)) /*!< Circular linked-list DMA channel transfer */
212 /**
213   * @}
214   */
215 
216 /** @defgroup DMAEx_Data_Alignment DMAEx Data Alignment
217   * @brief    DMAEx Data Alignment
218   * @{
219   */
220 #define DMA_DATA_RIGHTALIGN_ZEROPADDED 0x00000000U    /*!< If source data width < destination data width
221                                                            => Right aligned padded with 0 up to destination data
222                                                               width                                              */
223 #define DMA_DATA_RIGHTALIGN_LEFTTRUNC  0x00000000U    /*!< If source data width > destination data width
224                                                            => Right aligned left Truncated down to destination
225                                                               data width                                         */
226 #define DMA_DATA_RIGHTALIGN_SIGNEXT    DMA_CTR1_PAM_0 /*!< If source data width < destination data width
227                                                            => Right Aligned padded with sign extended up to
228                                                               destination data width                             */
229 #define DMA_DATA_LEFTALIGN_RIGHTTRUNC  DMA_CTR1_PAM_0 /*!< If source data width > destination data width
230                                                            => Left Aligned Right Truncated down to the
231                                                               destination data width                             */
232 #define DMA_DATA_PACK                  DMA_CTR1_PAM_1 /*!< If source data width < destination data width
233                                                            => Packed at the destination data width               */
234 #define DMA_DATA_UNPACK                DMA_CTR1_PAM_1 /*!< If source data width > destination data width
235                                                            => Unpacked at the destination data width             */
236 /**
237   * @}
238   */
239 
240 /** @defgroup DMAEx_Data_Exchange DMAEx Data Exchange
241   * @brief    DMAEx Data Exchange
242   * @{
243   */
244 #define DMA_EXCHANGE_NONE          0x00000000U  /*!< No data exchange                                                          */
245 #define DMA_EXCHANGE_DEST_BYTE     DMA_CTR1_DBX /*!< Destination Byte exchange when destination data width is > Byte           */
246 #define DMA_EXCHANGE_DEST_HALFWORD DMA_CTR1_DHX /*!< Destination Half-Word exchange when destination data width is > Half-Word */
247 #define DMA_EXCHANGE_SRC_BYTE      DMA_CTR1_SBX /*!< Source Byte endianness exchange when source data width is word            */
248 #define DMA_EXCHANGE_DEST_WORD     DMA_CTR1_DWX /*!< Destination Word exchange when destination data width is > Word */
249 /**
250   * @}
251   */
252 
253 /** @defgroup DMAEx_Trigger_Polarity DMAEx Trigger Polarity
254   * @brief    DMAEx Trigger Polarity
255   * @{
256   */
257 #define DMA_TRIG_POLARITY_MASKED  0x00000000U        /*!< No trigger of the selected DMA request. Masked trigger event                                */
258 #define DMA_TRIG_POLARITY_RISING  DMA_CTR2_TRIGPOL_0 /*!< Trigger of the selected DMA request on the rising edge of the selected trigger event input  */
259 #define DMA_TRIG_POLARITY_FALLING DMA_CTR2_TRIGPOL_1 /*!< Trigger of the selected DMA request on the falling edge of the selected trigger event input */
260 /**
261   * @}
262   */
263 
264 /** @defgroup DMAEx_Trigger_Mode DMAEx Trigger Mode
265   * @brief    DMAEx Trigger Mode
266   * @{
267   */
268 #define DMA_TRIGM_BLOCK_TRANSFER          0x00000000U      /*!< A block transfer is conditioned by (at least) one hit trigger          */
269 #define DMA_TRIGM_REPEATED_BLOCK_TRANSFER DMA_CTR2_TRIGM_0 /*!< A repeated block transfer is conditioned by (at least) one hit trigger */
270 #define DMA_TRIGM_LLI_LINK_TRANSFER       DMA_CTR2_TRIGM_1 /*!< A LLI link transfer is conditioned by (at least) one hit trigger       */
271 #define DMA_TRIGM_SINGLE_BURST_TRANSFER   DMA_CTR2_TRIGM   /*!< A single/burst transfer is conditioned by (at least) one hit trigger   */
272 /**
273   * @}
274   */
275 
276 /** @defgroup DMAEx_Trigger_Selection DMAEx Trigger Selection
277   * @brief    DMAEx Trigger Selection
278   * @{
279   */
280 /* HPDMA1 triggers */
281 #define HPDMA1_TRIGGER_DCMIPP_EVT_FRAMEEND              0U    /*!< HPDMA1 HW Trigger signal is DCMIPP_EVT_FRAMEEND   */
282 #define HPDMA1_TRIGGER_DCMIPP_EVT_HSYNC                 1U    /*!< HPDMA1 HW Trigger signal is DCMIPP_EVT_HSYNC      */
283 #define HPDMA1_TRIGGER_DCMIPP_EVT_LINEEND               2U    /*!< HPDMA1 HW Trigger signal is DCMIPP_EVT_LINEEND    */
284 #define HPDMA1_TRIGGER_DCMIPP_EVT_VSYNC                 3U    /*!< HPDMA1 HW Trigger signal is DCMIPP_EVT_VSYNC      */
285 #define HPDMA1_TRIGGER_DMA2D_CTC_FLAG                   4U    /*!< HPDMA1 HW Trigger signal is DMA2D_CTC_FLAG        */
286 #define HPDMA1_TRIGGER_DMA2D_TC_FLAG                    5U    /*!< HPDMA1 HW Trigger signal is DMA2D_TC_FLAG         */
287 #define HPDMA1_TRIGGER_DMA2D_TW_FLAG                    6U    /*!< HPDMA1 HW Trigger signal is DMA2D_TW_FLAG         */
288 #define HPDMA1_TRIGGER_JPEG_EOC_FLAG                    7U    /*!< HPDMA1 HW Trigger signal is JPEG_EOC_FLAG         */
289 #define HPDMA1_TRIGGER_JPEG_IFNF_FLAG                   8U    /*!< HPDMA1 HW Trigger signal is JPEG_IFNF_FLAG        */
290 #define HPDMA1_TRIGGER_JPEG_IFT_FLAG                    9U    /*!< HPDMA1 HW Trigger signal is JPEG_IFT_FLAG         */
291 #define HPDMA1_TRIGGER_JPEG_OFNE_FLAG                   10U   /*!< HPDMA1 HW Trigger signal is JPEG_OFNE_FLAG        */
292 #define HPDMA1_TRIGGER_JPEG_OFT_FLAG                    11U   /*!< HPDMA1 HW Trigger signal is JPEG_OFT_FLAG         */
293 #define HPDMA1_TRIGGER_LCD                              12U   /*!< HPDMA1 HW Trigger signal is LCD                   */
294 #define HPDMA1_TRIGGER_GPU2D1_GP_FLAG0                  13U   /*!< HPDMA1 HW Trigger signal is GPU2D1_GP_FLAG0       */
295 #define HPDMA1_TRIGGER_GPU2D1_GP_FLAG1                  14U   /*!< HPDMA1 HW Trigger signal is GPU2D1_GP_FLAG1       */
296 #define HPDMA1_TRIGGER_GPU2D1_GP_FLAG2                  15U   /*!< HPDMA1 HW Trigger signal is GPU2D1_GP_FLAG2       */
297 #define HPDMA1_TRIGGER_GPU2D1_GP_FLAG3                  16U   /*!< HPDMA1 HW Trigger signal is GPU2D1_GP_FLAG3       */
298 #define HPDMA1_TRIGGER_GFXTIM_0_EVT_4                   17U   /*!< HPDMA1 HW Trigger signal is GFXTIM_0_EVT_4        */
299 #define HPDMA1_TRIGGER_GFXTIM_0_EVT_3                   18U   /*!< HPDMA1 HW Trigger signal is GFXTIM_0_EVT_3        */
300 #define HPDMA1_TRIGGER_GFXTIM_0_EVT_2                   19U   /*!< HPDMA1 HW Trigger signal is GFXTIM_0_EVT_2        */
301 #define HPDMA1_TRIGGER_GFXTIM_0_EVT_1                   20U   /*!< HPDMA1 HW Trigger signal is GFXTIM_0_EVT_1        */
302 #define HPDMA1_TRIGGER_GPDMA1_CH0_TCF                   21U   /*!< HPDMA1 HW Trigger signal is GPDMA1_CH0_TCF        */
303 #define HPDMA1_TRIGGER_GPDMA1_CH1_TCF                   22U   /*!< HPDMA1 HW Trigger signal is GPDMA1_CH1_TCF        */
304 #define HPDMA1_TRIGGER_GPDMA1_CH2_TCF                   23U   /*!< HPDMA1 HW Trigger signal is GPDMA1_CH2_TCF        */
305 #define HPDMA1_TRIGGER_GPDMA1_CH3_TCF                   24U   /*!< HPDMA1 HW Trigger signal is GPDMA1_CH3_TCF        */
306 #define HPDMA1_TRIGGER_GPDMA1_CH4_TCF                   25U   /*!< HPDMA1 HW Trigger signal is GPDMA1_CH4_TCF        */
307 #define HPDMA1_TRIGGER_GPDMA1_CH5_TCF                   26U   /*!< HPDMA1 HW Trigger signal is GPDMA1_CH5_TCF        */
308 #define HPDMA1_TRIGGER_GPDMA1_CH6_TCF                   27U   /*!< HPDMA1 HW Trigger signal is GPDMA1_CH6_TCF        */
309 #define HPDMA1_TRIGGER_GPDMA1_CH7_TCF                   28U   /*!< HPDMA1 HW Trigger signal is GPDMA1_CH7_TCF        */
310 #define HPDMA1_TRIGGER_GPDMA1_CH8_TCF                   29U   /*!< HPDMA1 HW Trigger signal is GPDMA1_CH8_TCF        */
311 #define HPDMA1_TRIGGER_GPDMA1_CH9_TCF                   30U   /*!< HPDMA1 HW Trigger signal is GPDMA1_CH9_TCF        */
312 #define HPDMA1_TRIGGER_GPDMA1_CH10_TCF                  31U   /*!< HPDMA1 HW Trigger signal is GPDMA1_CH10_TCF       */
313 #define HPDMA1_TRIGGER_GPDMA1_CH11_TCF                  32U   /*!< HPDMA1 HW Trigger signal is GPDMA1_CH11_TCF       */
314 #define HPDMA1_TRIGGER_GPDMA1_CH12_TCF                  33U   /*!< HPDMA1 HW Trigger signal is GPDMA1_CH12_TCF       */
315 #define HPDMA1_TRIGGER_GPDMA1_CH13_TCF                  34U   /*!< HPDMA1 HW Trigger signal is GPDMA1_CH13_TCF       */
316 #define HPDMA1_TRIGGER_GPDMA1_CH14_TCF                  35U   /*!< HPDMA1 HW Trigger signal is GPDMA1_CH14_TCF       */
317 #define HPDMA1_TRIGGER_GPDMA1_CH15_TCF                  36U   /*!< HPDMA1 HW Trigger signal is GPDMA1_CH15_TCF       */
318 #define HPDMA1_TRIGGER_HPDMA1_CH0_TCF                   37U   /*!< HPDMA1 HW Trigger signal is HPDMA1_CH0_TCF        */
319 #define HPDMA1_TRIGGER_HPDMA1_CH1_TCF                   38U   /*!< HPDMA1 HW Trigger signal is HPDMA1_CH1_TCF        */
320 #define HPDMA1_TRIGGER_HPDMA1_CH2_TCF                   39U   /*!< HPDMA1 HW Trigger signal is HPDMA1_CH2_TCF        */
321 #define HPDMA1_TRIGGER_HPDMA1_CH3_TCF                   40U   /*!< HPDMA1 HW Trigger signal is HPDMA1_CH3_TCF        */
322 #define HPDMA1_TRIGGER_HPDMA1_CH4_TCF                   41U   /*!< HPDMA1 HW Trigger signal is HPDMA1_CH4_TCF        */
323 #define HPDMA1_TRIGGER_HPDMA1_CH5_TCF                   42U   /*!< HPDMA1 HW Trigger signal is HPDMA1_CH5_TCF        */
324 #define HPDMA1_TRIGGER_HPDMA1_CH6_TCF                   43U   /*!< HPDMA1 HW Trigger signal is HPDMA1_CH6_TCF        */
325 #define HPDMA1_TRIGGER_HPDMA1_CH7_TCF                   44U   /*!< HPDMA1 HW Trigger signal is HPDMA1_CH7_TCF        */
326 #define HPDMA1_TRIGGER_HPDMA1_CH8_TCF                   45U   /*!< HPDMA1 HW Trigger signal is HPDMA1_CH8_TCF        */
327 #define HPDMA1_TRIGGER_HPDMA1_CH9_TCF                   46U   /*!< HPDMA1 HW Trigger signal is HPDMA1_CH9_TCF        */
328 #define HPDMA1_TRIGGER_HPDMA1_CH10_TCF                  47U   /*!< HPDMA1 HW Trigger signal is HPDMA1_CH10_TCF       */
329 #define HPDMA1_TRIGGER_HPDMA1_CH11_TCF                  48U   /*!< HPDMA1 HW Trigger signal is HPDMA1_CH11_TCF       */
330 #define HPDMA1_TRIGGER_HPDMA1_CH12_TCF                  49U   /*!< HPDMA1 HW Trigger signal is HPDMA1_CH12_TCF       */
331 #define HPDMA1_TRIGGER_HPDMA1_CH13_TCF                  50U   /*!< HPDMA1 HW Trigger signal is HPDMA1_CH13_TCF       */
332 #define HPDMA1_TRIGGER_HPDMA1_CH14_TCF                  51U   /*!< HPDMA1 HW Trigger signal is HPDMA1_CH14_TCF       */
333 #define HPDMA1_TRIGGER_HPDMA1_CH15_TCF                  52U   /*!< HPDMA1 HW Trigger signal is HPDMA1_CH15_TCF       */
334 
335 /* GPDMA1 triggers */
336 #define GPDMA1_TRIGGER_HPDMA1_CH0_TCF                   0U    /*!< GPDMA1 HW Trigger signal is HPDMA1_CH0_TCF        */
337 #define GPDMA1_TRIGGER_HPDMA1_CH1_TCF                   1U    /*!< GPDMA1 HW Trigger signal is HPDMA1_CH1_TCF        */
338 #define GPDMA1_TRIGGER_HPDMA1_CH2_TCF                   2U    /*!< GPDMA1 HW Trigger signal is HPDMA1_CH2_TCF        */
339 #define GPDMA1_TRIGGER_HPDMA1_CH3_TCF                   3U    /*!< GPDMA1 HW Trigger signal is HPDMA1_CH3_TCF        */
340 #define GPDMA1_TRIGGER_HPDMA1_CH4_TCF                   4U    /*!< GPDMA1 HW Trigger signal is HPDMA1_CH4_TCF        */
341 #define GPDMA1_TRIGGER_HPDMA1_CH5_TCF                   5U    /*!< GPDMA1 HW Trigger signal is HPDMA1_CH5_TCF        */
342 #define GPDMA1_TRIGGER_HPDMA1_CH6_TCF                   6U    /*!< GPDMA1 HW Trigger signal is HPDMA1_CH6_TCF        */
343 #define GPDMA1_TRIGGER_HPDMA1_CH7_TCF                   7U    /*!< GPDMA1 HW Trigger signal is HPDMA1_CH7_TCF        */
344 #define GPDMA1_TRIGGER_HPDMA1_CH8_TCF                   8U    /*!< GPDMA1 HW Trigger signal is HPDMA1_CH8_TCF        */
345 #define GPDMA1_TRIGGER_HPDMA1_CH9_TCF                   9U    /*!< GPDMA1 HW Trigger signal is HPDMA1_CH9_TCF        */
346 #define GPDMA1_TRIGGER_HPDMA1_CH10_TCF                  10U   /*!< GPDMA1 HW Trigger signal is HPDMA1_CH10_TCF       */
347 #define GPDMA1_TRIGGER_HPDMA1_CH11_TCF                  11U   /*!< GPDMA1 HW Trigger signal is HPDMA1_CH11_TCF       */
348 #define GPDMA1_TRIGGER_HPDMA1_CH12_TCF                  12U   /*!< GPDMA1 HW Trigger signal is HPDMA1_CH12_TCF       */
349 #define GPDMA1_TRIGGER_HPDMA1_CH13_TCF                  13U   /*!< GPDMA1 HW Trigger signal is HPDMA1_CH13_TCF       */
350 #define GPDMA1_TRIGGER_HPDMA1_CH14_TCF                  14U   /*!< GPDMA1 HW Trigger signal is HPDMA1_CH14_TCF       */
351 #define GPDMA1_TRIGGER_HPDMA1_CH15_TCF                  15U   /*!< GPDMA1 HW Trigger signal is HPDMA1_CH15_TCF       */
352 #define GPDMA1_TRIGGER_LPTIM1_CH1                       16U   /*!< GPDMA1 HW Trigger signal is LPTIM1_CH1            */
353 #define GPDMA1_TRIGGER_LPTIM1_CH2                       17U   /*!< GPDMA1 HW Trigger signal is LPTIM1_CH2            */
354 #define GPDMA1_TRIGGER_LPTIM2_CH1                       18U   /*!< GPDMA1 HW Trigger signal is LPTIM2_CH1            */
355 #define GPDMA1_TRIGGER_LPTIM2_CH2                       19U   /*!< GPDMA1 HW Trigger signal is LPTIM2_CH2            */
356 #define GPDMA1_TRIGGER_LPTIM3_CH1                       20U   /*!< GPDMA1 HW Trigger signal is LPTIM3_CH1            */
357 #define GPDMA1_TRIGGER_LPTIM3_CH2                       21U   /*!< GPDMA1 HW Trigger signal is LPTIM3_CH2            */
358 #define GPDMA1_TRIGGER_LPTIM4_OUT                       22U   /*!< GPDMA1 HW Trigger signal is LPTIM4_OUT            */
359 #define GPDMA1_TRIGGER_LPTIM5_OUT                       23U   /*!< GPDMA1 HW Trigger signal is LPTIM5_OUT            */
360 #define GPDMA1_TRIGGER_EXTIT0_SYNC                      24U   /*!< GPDMA1 HW Trigger signal is EXTIT0_SYNC           */
361 #define GPDMA1_TRIGGER_RTC_WKUP                         25U   /*!< GPDMA1 HW Trigger signal is RTC_WKUP              */
362 #define GPDMA1_TRIGGER_LPUART1_IT_R_WUP_ASYNC           26U   /*!< GPDMA1 HW Trigger signal is R_WUP_ASYNC           */
363 #define GPDMA1_TRIGGER_LPUART1_IT_T_WUP_ASYNC           27U   /*!< GPDMA1 HW Trigger signal is T_WUP_ASYNC           */
364 #define GPDMA1_TRIGGER_SPI6_IT_OR_SPI6_AIT_SYNC         28U   /*!< GPDMA1 HW Trigger signal is SPI6_OR_SPI6_AIT_SYNC */
365 #define GPDMA1_TRIGGER_GPDMA1_CH0_TCF                   29U   /*!< GPDMA1 HW Trigger signal is GPDMA1_CH1_TCF        */
366 #define GPDMA1_TRIGGER_GPDMA1_CH1_TCF                   30U   /*!< GPDMA1 HW Trigger signal is GPDMA1_CH1_TCF        */
367 #define GPDMA1_TRIGGER_GPDMA1_CH2_TCF                   31U   /*!< GPDMA1 HW Trigger signal is GPDMA1_CH2_TCF        */
368 #define GPDMA1_TRIGGER_GPDMA1_CH3_TCF                   32U   /*!< GPDMA1 HW Trigger signal is GPDMA1_CH3_TCF        */
369 #define GPDMA1_TRIGGER_GPDMA1_CH4_TCF                   33U   /*!< GPDMA1 HW Trigger signal is GPDMA1_CH4_TCF        */
370 #define GPDMA1_TRIGGER_GPDMA1_CH5_TCF                   34U   /*!< GPDMA1 HW Trigger signal is GPDMA1_CH5_TCF        */
371 #define GPDMA1_TRIGGER_GPDMA1_CH6_TCF                   35U   /*!< GPDMA1 HW Trigger signal is GPDMA1_CH6_TCF        */
372 #define GPDMA1_TRIGGER_GPDMA1_CH7_TCF                   36U   /*!< GPDMA1 HW Trigger signal is GPDMA1_CH7_TCF        */
373 #define GPDMA1_TRIGGER_GPDMA1_CH8_TCF                   37U   /*!< GPDMA1 HW Trigger signal is GPDMA1_CH8_TCF        */
374 #define GPDMA1_TRIGGER_GPDMA1_CH9_TCF                   38U   /*!< GPDMA1 HW Trigger signal is GPDMA1_CH9_TCF        */
375 #define GPDMA1_TRIGGER_GPDMA1_CH10_TCF                  39U   /*!< GPDMA1 HW Trigger signal is GPDMA1_CH10_TCF       */
376 #define GPDMA1_TRIGGER_GPDMA1_CH11_TCF                  40U   /*!< GPDMA1 HW Trigger signal is GPDMA1_CH11_TCF       */
377 #define GPDMA1_TRIGGER_GPDMA1_CH12_TCF                  41U   /*!< GPDMA1 HW Trigger signal is GPDMA1_CH12_TCF       */
378 #define GPDMA1_TRIGGER_GPDMA1_CH13_TCF                  42U   /*!< GPDMA1 HW Trigger signal is GPDMA1_CH13_TCF       */
379 #define GPDMA1_TRIGGER_GPDMA1_CH14_TCF                  43U   /*!< GPDMA1 HW Trigger signal is GPDMA1_CH14_TCF       */
380 #define GPDMA1_TRIGGER_GPDMA1_CH15_TCF                  44U   /*!< GPDMA1 HW Trigger signal is GPDMA1_CH15_TCF       */
381 #define GPDMA1_TRIGGER_TIM1_TRGO                        45U   /*!< GPDMA1 HW Trigger signal is TIM1_TRGO             */
382 #define GPDMA1_TRIGGER_TIM1_TRGO2                       46U   /*!< GPDMA1 HW Trigger signal is TIM1_TRGO2            */
383 #define GPDMA1_TRIGGER_TIM2_TRGO                        47U   /*!< GPDMA1 HW Trigger signal is TIM2_TRGO             */
384 #define GPDMA1_TRIGGER_TIM3_TRGO                        48U   /*!< GPDMA1 HW Trigger signal is TIM3_TRGO             */
385 #define GPDMA1_TRIGGER_TIM4_TRGO                        49U   /*!< GPDMA1 HW Trigger signal is TIM4_TRGO             */
386 #define GPDMA1_TRIGGER_TIM5_TRGO                        50U   /*!< GPDMA1 HW Trigger signal is TIM5_TRGO             */
387 #define GPDMA1_TRIGGER_TIM6_TRGO                        51U   /*!< GPDMA1 HW Trigger signal is TIM6_TRGO             */
388 #define GPDMA1_TRIGGER_TIM7_TRGO                        52U   /*!< GPDMA1 HW Trigger signal is TIM7_TRGO             */
389 #define GPDMA1_TRIGGER_TIM9_TRGO                        53U   /*!< GPDMA1 HW Trigger signal is TIM9_TRGO             */
390 #define GPDMA1_TRIGGER_TIM12_TRGO                       54U   /*!< GPDMA1 HW Trigger signal is TIM12_TRGO            */
391 #define GPDMA1_TRIGGER_TIM15_TRGO                       55U   /*!< GPDMA1 HW Trigger signal is TIM15_TRGO            */
392 
393 #define GPDMA1_MAX_TRIGGER                              55U
394 /**
395   * @}
396   */
397 
398 /** @defgroup DMAEx_Node_Type DMAEx Node Type
399   * @brief    DMAEx Node Type
400   * @{
401   */
402 #define DMA_GPDMA_LINEAR_NODE (DMA_CHANNEL_TYPE_GPDMA | DMA_CHANNEL_TYPE_LINEAR_ADDR) /*!< Defines the GPDMA linear addressing node type      */
403 #define DMA_GPDMA_2D_NODE     (DMA_CHANNEL_TYPE_GPDMA | DMA_CHANNEL_TYPE_2D_ADDR)     /*!< Defines the GPDMA 2 dimension addressing node type */
404 #define DMA_HPDMA_LINEAR_NODE (DMA_CHANNEL_TYPE_HPDMA | DMA_CHANNEL_TYPE_LINEAR_ADDR) /*!< Defines the HPDMA linear addressing node type      */
405 #define DMA_HPDMA_2D_NODE     (DMA_CHANNEL_TYPE_HPDMA | DMA_CHANNEL_TYPE_2D_ADDR)     /*!< Defines the HPDMA 2 dimension addressing node type */
406 /**
407   * @}
408   */
409 
410 /** @defgroup DMAEx_Link_Allocated_Port DMAEx Linked-List Allocated Port
411   * @brief    DMAEx Linked-List Allocated Port
412   * @{
413   */
414 #define DMA_LINK_ALLOCATED_PORT0 0x00000000U /*!< Link allocated port 0 */
415 #define DMA_LINK_ALLOCATED_PORT1 DMA_CCR_LAP /*!< Link allocated port 1 */
416 /**
417   * @}
418   */
419 
420 /** @defgroup DMAEx_Link_Step_Mode DMAEx Link Step Mode
421   * @brief    DMAEx Link Step Mode
422   * @{
423   */
424 #define DMA_LSM_FULL_EXECUTION  0x00000000U /*!< Channel is executed for the full linked-list */
425 #define DMA_LSM_1LINK_EXECUTION DMA_CCR_LSM /*!< Channel is executed once for the current LLI */
426 /**
427   * @}
428   */
429 
430 /**
431   * @}
432   */
433 
434 /* Exported functions ------------------------------------------------------------------------------------------------*/
435 /** @defgroup DMAEx_Exported_Functions DMAEx Exported Functions
436   * @brief    DMAEx Exported functions
437   * @{
438   */
439 
440 /** @defgroup DMAEx_Exported_Functions_Group1 Linked-List Initialization and De-Initialization Functions
441   * @brief    Linked-List Initialization and De-Initialization Functions
442   * @{
443   */
444 HAL_StatusTypeDef HAL_DMAEx_List_Init(DMA_HandleTypeDef *const hdma);
445 HAL_StatusTypeDef HAL_DMAEx_List_DeInit(DMA_HandleTypeDef *const hdma);
446 /**
447   * @}
448   */
449 
450 /** @defgroup DMAEx_Exported_Functions_Group2 Linked-List IO Operation Functions
451   * @brief    Linked-List IO Operation Functions
452   * @{
453   */
454 HAL_StatusTypeDef HAL_DMAEx_List_Start(DMA_HandleTypeDef *const hdma);
455 HAL_StatusTypeDef HAL_DMAEx_List_Start_IT(DMA_HandleTypeDef *const hdma);
456 /**
457   * @}
458   */
459 
460 /** @defgroup DMAEx_Exported_Functions_Group3 Linked-List Management Functions
461   * @brief    Linked-List Management Functions
462   * @{
463   */
464 HAL_StatusTypeDef HAL_DMAEx_List_BuildNode(DMA_NodeConfTypeDef const *const pNodeConfig,
465                                            DMA_NodeTypeDef *const pNode);
466 HAL_StatusTypeDef HAL_DMAEx_List_GetNodeConfig(DMA_NodeConfTypeDef *const pNodeConfig,
467                                                DMA_NodeTypeDef const *const pNode);
468 
469 HAL_StatusTypeDef HAL_DMAEx_List_InsertNode(DMA_QListTypeDef *const pQList,
470                                             DMA_NodeTypeDef *const pPrevNode,
471                                             DMA_NodeTypeDef *const pNewNode);
472 HAL_StatusTypeDef HAL_DMAEx_List_InsertNode_Head(DMA_QListTypeDef *const pQList,
473                                                  DMA_NodeTypeDef *const pNewNode);
474 HAL_StatusTypeDef HAL_DMAEx_List_InsertNode_Tail(DMA_QListTypeDef *const pQList,
475                                                  DMA_NodeTypeDef *const pNewNode);
476 
477 HAL_StatusTypeDef HAL_DMAEx_List_RemoveNode(DMA_QListTypeDef *const pQList,
478                                             DMA_NodeTypeDef *const pNode);
479 HAL_StatusTypeDef HAL_DMAEx_List_RemoveNode_Head(DMA_QListTypeDef *const pQList);
480 HAL_StatusTypeDef HAL_DMAEx_List_RemoveNode_Tail(DMA_QListTypeDef *const pQList);
481 
482 HAL_StatusTypeDef HAL_DMAEx_List_ReplaceNode(DMA_QListTypeDef *const pQList,
483                                              DMA_NodeTypeDef *const pOldNode,
484                                              DMA_NodeTypeDef *const pNewNode);
485 HAL_StatusTypeDef HAL_DMAEx_List_ReplaceNode_Head(DMA_QListTypeDef *const pQList,
486                                                   DMA_NodeTypeDef *const pNewNode);
487 HAL_StatusTypeDef HAL_DMAEx_List_ReplaceNode_Tail(DMA_QListTypeDef *const pQList,
488                                                   DMA_NodeTypeDef *const pNewNode);
489 
490 HAL_StatusTypeDef HAL_DMAEx_List_ResetQ(DMA_QListTypeDef *const pQList);
491 
492 HAL_StatusTypeDef HAL_DMAEx_List_InsertQ(DMA_QListTypeDef *const pSrcQList,
493                                          DMA_NodeTypeDef const *const pPrevNode,
494                                          DMA_QListTypeDef *const pDestQList);
495 HAL_StatusTypeDef HAL_DMAEx_List_InsertQ_Head(DMA_QListTypeDef *const pSrcQList,
496                                               DMA_QListTypeDef *const pDestQList);
497 HAL_StatusTypeDef HAL_DMAEx_List_InsertQ_Tail(DMA_QListTypeDef *const pSrcQList,
498                                               DMA_QListTypeDef *const pDestQList);
499 
500 HAL_StatusTypeDef HAL_DMAEx_List_SetCircularModeConfig(DMA_QListTypeDef *const pQList,
501                                                        DMA_NodeTypeDef *const pFirstCircularNode);
502 HAL_StatusTypeDef HAL_DMAEx_List_SetCircularMode(DMA_QListTypeDef *const pQList);
503 HAL_StatusTypeDef HAL_DMAEx_List_ClearCircularMode(DMA_QListTypeDef *const pQList);
504 
505 HAL_StatusTypeDef HAL_DMAEx_List_ConvertQToDynamic(DMA_QListTypeDef *const pQList);
506 HAL_StatusTypeDef HAL_DMAEx_List_ConvertQToStatic(DMA_QListTypeDef *const pQList);
507 
508 HAL_StatusTypeDef HAL_DMAEx_List_LinkQ(DMA_HandleTypeDef *const hdma,
509                                        DMA_QListTypeDef *const pQList);
510 HAL_StatusTypeDef HAL_DMAEx_List_UnLinkQ(DMA_HandleTypeDef *const hdma);
511 /**
512   * @}
513   */
514 
515 /** @defgroup DMAEx_Exported_Functions_Group4 Data Handling, Repeated Block and Trigger Configuration Functions
516   * @brief    Data Handling, Repeated Block and Trigger Configuration Functions
517   * @{
518   */
519 HAL_StatusTypeDef HAL_DMAEx_ConfigDataHandling(DMA_HandleTypeDef *const hdma,
520                                                DMA_DataHandlingConfTypeDef const *const pConfigDataHandling);
521 HAL_StatusTypeDef HAL_DMAEx_ConfigTrigger(DMA_HandleTypeDef *const hdma,
522                                           DMA_TriggerConfTypeDef const *const pConfigTrigger);
523 HAL_StatusTypeDef HAL_DMAEx_ConfigRepeatBlock(DMA_HandleTypeDef *const hdma,
524                                               DMA_RepeatBlockConfTypeDef const *const pConfigRepeatBlock);
525 /**
526   * @}
527   */
528 
529 /** @defgroup DMAEx_Exported_Functions_Group5 Suspend and Resume Operation Functions
530   * @brief    Suspend and Resume Operation Functions
531   * @{
532   */
533 HAL_StatusTypeDef HAL_DMAEx_Suspend(DMA_HandleTypeDef *const hdma);
534 HAL_StatusTypeDef HAL_DMAEx_Suspend_IT(DMA_HandleTypeDef *const hdma);
535 HAL_StatusTypeDef HAL_DMAEx_Resume(DMA_HandleTypeDef *const hdma);
536 /**
537   * @}
538   */
539 
540 /** @defgroup DMAEx_Exported_Functions_Group6 FIFO Status Function
541   * @brief    FIFO Status Function
542   * @{
543   */
544 uint32_t HAL_DMAEx_GetFifoLevel(DMA_HandleTypeDef const *const hdma);
545 /**
546   * @}
547   */
548 
549 /**
550   * @}
551   */
552 
553 /* Private types -----------------------------------------------------------------------------------------------------*/
554 /** @defgroup DMAEx_Private_Types DMAEx Private Types
555   * @brief    DMAEx Private Types
556   * @{
557   */
558 
559 /**
560   * @brief DMA Node in Queue Information Structure Definition.
561   */
562 typedef struct
563 {
564   uint32_t cllr_offset;       /* CLLR register offset  */
565 
566   uint32_t previousnode_addr; /* Previous node address */
567 
568   uint32_t currentnode_pos;   /* Current node position */
569 
570   uint32_t currentnode_addr;  /* Current node address  */
571 
572   uint32_t nextnode_addr;     /* Next node address     */
573 
574 } DMA_NodeInQInfoTypeDef;
575 /**
576   * @}
577   */
578 
579 /* Private constants -------------------------------------------------------------------------------------------------*/
580 /** @defgroup DMAEx_Private_Constants DMAEx Private Constants
581   * @brief    DMAEx Private Constants
582   * @{
583   */
584 #define DMA_LINKEDLIST                  (0x0080U) /* DMA channel linked-list mode          */
585 
586 #define DMA_CHANNEL_TYPE_LINEAR_ADDR    (0x0001U) /* DMA channel linear addressing mode    */
587 #define DMA_CHANNEL_TYPE_2D_ADDR        (0x0002U) /* DMA channel 2D addressing mode        */
588 #define DMA_CHANNEL_TYPE_GPDMA          (0x0020U) /* GPDMA channel node                    */
589 #define DMA_CHANNEL_TYPE_HPDMA          (0x0040U) /* HPDMA channel node                    */
590 
591 #define NODE_TYPE_MASK                  (0x00FFU) /* DMA channel node type                 */
592 #define NODE_CLLR_IDX                   (0x0700U) /* DMA channel node CLLR index mask      */
593 #define NODE_CLLR_IDX_POS               (0x0008U) /* DMA channel node CLLR index position  */
594 
595 #define NODE_MAXIMUM_SIZE               (0x0008U) /* Amount of registers of the node       */
596 
597 #define NODE_STATIC_FORMAT              (0x0000U) /* DMA channel node static format        */
598 #define NODE_DYNAMIC_FORMAT             (0x0001U) /* DMA channel node dynamic format       */
599 
600 #define UPDATE_CLLR_POSITION            (0x0000U) /* DMA channel update CLLR position      */
601 #define UPDATE_CLLR_VALUE               (0x0001U) /* DMA channel update CLLR value         */
602 
603 #define LASTNODE_ISNOT_CIRCULAR         (0x0000U) /* Last node is not first circular node  */
604 #define LASTNODE_IS_CIRCULAR            (0x0001U) /* Last node is first circular node      */
605 
606 #define QUEUE_TYPE_STATIC               (0x0000U) /* DMA channel static queue              */
607 #define QUEUE_TYPE_DYNAMIC              (0x0001U) /* DMA channel dynamic queue             */
608 
609 #define NODE_CTR1_DEFAULT_OFFSET        (0x0000U) /* CTR1 default offset                   */
610 #define NODE_CTR2_DEFAULT_OFFSET        (0x0001U) /* CTR2 default offset                   */
611 #define NODE_CBR1_DEFAULT_OFFSET        (0x0002U) /* CBR1 default offset                   */
612 #define NODE_CSAR_DEFAULT_OFFSET        (0x0003U) /* CSAR default offset                   */
613 #define NODE_CDAR_DEFAULT_OFFSET        (0x0004U) /* CDAR default offset                   */
614 #define NODE_CTR3_DEFAULT_OFFSET        (0x0005U) /* CTR3 2D addressing default offset     */
615 #define NODE_CBR2_DEFAULT_OFFSET        (0x0006U) /* CBR2 2D addressing default offset     */
616 #define NODE_CLLR_2D_DEFAULT_OFFSET     (0x0007U) /* CLLR 2D addressing default offset     */
617 #define NODE_CLLR_LINEAR_DEFAULT_OFFSET (0x0005U) /* CLLR linear addressing default offset */
618 
619 #define DMA_BURST_ADDR_OFFSET_MIN       (-8192L)  /* DMA burst minimum address offset      */
620 #define DMA_BURST_ADDR_OFFSET_MAX       (8192L)   /* DMA burst maximum address offset      */
621 #define DMA_BLOCK_ADDR_OFFSET_MIN       (-65536L) /* DMA block minimum address offset      */
622 #define DMA_BLOCK_ADDR_OFFSET_MAX       (65536L)  /* DMA block maximum address offset      */
623 /**
624   * @}
625   */
626 
627 /* Private macros ----------------------------------------------------------------------------------------------------*/
628 /** @defgroup DMAEx_Private_Macros DMAEx Private Macros
629   * @brief    DMAEx Private Macros
630   * @{
631   */
632 #define IS_DMA_DATA_ALIGNMENT(ALIGNMENT)              \
633   (((ALIGNMENT) == DMA_DATA_RIGHTALIGN_ZEROPADDED) || \
634    ((ALIGNMENT) == DMA_DATA_RIGHTALIGN_SIGNEXT)    || \
635    ((ALIGNMENT) == DMA_DATA_PACK))
636 
637 #define IS_DMA_DATA_EXCHANGE(EXCHANGE) \
638   (((EXCHANGE) & (~(DMA_EXCHANGE_SRC_BYTE | DMA_EXCHANGE_DEST_BYTE | DMA_EXCHANGE_DEST_HALFWORD | \
639                     DMA_EXCHANGE_DEST_WORD))) == 0U)
640 
641 #define IS_DMA_REPEAT_COUNT(COUNT) \
642   (((COUNT) > 0U) && ((COUNT) <= (DMA_CBR1_BRC >> DMA_CBR1_BRC_Pos)))
643 
644 #define IS_DMA_BURST_ADDR_OFFSET(BURST_ADDR_OFFSET)     \
645   (((BURST_ADDR_OFFSET) > DMA_BURST_ADDR_OFFSET_MIN) && \
646    ((BURST_ADDR_OFFSET) < DMA_BURST_ADDR_OFFSET_MAX))
647 
648 #define IS_DMA_BLOCK_ADDR_OFFSET(BLOCK_ADDR_OFFSET)     \
649   (((BLOCK_ADDR_OFFSET) > DMA_BLOCK_ADDR_OFFSET_MIN) && \
650    ((BLOCK_ADDR_OFFSET) < DMA_BLOCK_ADDR_OFFSET_MAX))
651 
652 #define IS_DMA_LINK_ALLOCATED_PORT(LINK_ALLOCATED_PORT) \
653   (((LINK_ALLOCATED_PORT) & (~(DMA_CCR_LAP))) == 0U)
654 
655 #define IS_DMA_LINK_STEP_MODE(MODE)      \
656   (((MODE) == DMA_LSM_FULL_EXECUTION) || \
657    ((MODE) == DMA_LSM_1LINK_EXECUTION))
658 
659 #define IS_DMA_TRIGGER_MODE(MODE)                   \
660   (((MODE) == DMA_TRIGM_BLOCK_TRANSFER)          || \
661    ((MODE) == DMA_TRIGM_REPEATED_BLOCK_TRANSFER) || \
662    ((MODE) == DMA_TRIGM_LLI_LINK_TRANSFER)       || \
663    ((MODE) == DMA_TRIGM_SINGLE_BURST_TRANSFER))
664 
665 #define IS_DMA_TCEM_LINKEDLIST_EVENT_MODE(MODE)    \
666   (((MODE) == DMA_TCEM_BLOCK_TRANSFER)          || \
667    ((MODE) == DMA_TCEM_REPEATED_BLOCK_TRANSFER) || \
668    ((MODE) == DMA_TCEM_EACH_LL_ITEM_TRANSFER)   || \
669    ((MODE) == DMA_TCEM_LAST_LL_ITEM_TRANSFER))
670 
671 #define IS_DMA_LINKEDLIST_MODE(MODE)    \
672   (((MODE) == DMA_LINKEDLIST_NORMAL) || \
673    ((MODE) == DMA_LINKEDLIST_CIRCULAR))
674 
675 #define IS_DMA_TRIGGER_POLARITY(POLARITY)      \
676   (((POLARITY) == DMA_TRIG_POLARITY_MASKED) || \
677    ((POLARITY) == DMA_TRIG_POLARITY_RISING) || \
678    ((POLARITY) == DMA_TRIG_POLARITY_FALLING))
679 
680 #define IS_DMA_TRIGGER_SELECTION(TRIGGER) \
681   ((TRIGGER) <= GPDMA1_TRIGGER_TIM15_TRGO)
682 
683 #define IS_DMA_NODE_TYPE(TYPE)          \
684   (((TYPE) == DMA_GPDMA_LINEAR_NODE) || \
685    ((TYPE) == DMA_GPDMA_2D_NODE) || \
686    ((TYPE) == DMA_HPDMA_LINEAR_NODE) || \
687    ((TYPE) == DMA_HPDMA_2D_NODE))
688 /**
689   * @}
690   */
691 
692 
693 /* Private functions -------------------------------------------------------------------------------------------------*/
694 /** @defgroup DMAEx_Private_Functions DMAEx Private Functions
695   * @brief    DMAEx Private Functions
696   * @{
697   */
698 
699 /**
700   * @}
701   */
702 
703 /**
704   * @}
705   */
706 
707 /**
708   * @}
709   */
710 
711 /**
712   * @}
713   */
714 
715 #ifdef __cplusplus
716 }
717 #endif /* __cplusplus */
718 
719 #endif /* STM32H7RSxx_HAL_DMA_EX_H */
720