STM32L443xx HAL User Manual
stm32l4xx_ll_dma.h
Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32l4xx_ll_dma.h
00004   * @author  MCD Application Team
00005   * @brief   Header file of DMA LL module.
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * Copyright (c) 2017 STMicroelectronics.
00010   * All rights reserved.
00011   *
00012   * This software is licensed under terms that can be found in the LICENSE file
00013   * in the root directory of this software component.
00014   * If no LICENSE file comes with this software, it is provided AS-IS.
00015   *
00016   ******************************************************************************
00017   */
00018 
00019 /* Define to prevent recursive inclusion -------------------------------------*/
00020 #ifndef STM32L4xx_LL_DMA_H
00021 #define STM32L4xx_LL_DMA_H
00022 
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026 
00027 /* Includes ------------------------------------------------------------------*/
00028 #include "stm32l4xx.h"
00029 #if defined(DMAMUX1)
00030 #include "stm32l4xx_ll_dmamux.h"
00031 #endif /* DMAMUX1 */
00032 
00033 /** @addtogroup STM32L4xx_LL_Driver
00034   * @{
00035   */
00036 
00037 #if defined (DMA1) || defined (DMA2)
00038 
00039 /** @defgroup DMA_LL DMA
00040   * @{
00041   */
00042 
00043 /* Private types -------------------------------------------------------------*/
00044 /* Private variables ---------------------------------------------------------*/
00045 /** @defgroup DMA_LL_Private_Variables DMA Private Variables
00046   * @{
00047   */
00048 /* Array used to get the DMA channel register offset versus channel index LL_DMA_CHANNEL_x */
00049 static const uint8_t CHANNEL_OFFSET_TAB[] =
00050 {
00051   (uint8_t)(DMA1_Channel1_BASE - DMA1_BASE),
00052   (uint8_t)(DMA1_Channel2_BASE - DMA1_BASE),
00053   (uint8_t)(DMA1_Channel3_BASE - DMA1_BASE),
00054   (uint8_t)(DMA1_Channel4_BASE - DMA1_BASE),
00055   (uint8_t)(DMA1_Channel5_BASE - DMA1_BASE),
00056   (uint8_t)(DMA1_Channel6_BASE - DMA1_BASE),
00057   (uint8_t)(DMA1_Channel7_BASE - DMA1_BASE)
00058 };
00059 /**
00060   * @}
00061   */
00062 
00063 /* Private constants ---------------------------------------------------------*/
00064 #if defined(DMAMUX1)
00065 #else
00066 /** @defgroup DMA_LL_Private_Constants DMA Private Constants
00067   * @{
00068   */
00069 /* Define used to get CSELR register offset */
00070 #define DMA_CSELR_OFFSET                  (uint32_t)(DMA1_CSELR_BASE - DMA1_BASE)
00071 
00072 /* Defines used for the bit position in the register and perform offsets */
00073 #define DMA_POSITION_CSELR_CXS            POSITION_VAL(DMA_CSELR_C1S << (Channel*4U))
00074 /**
00075   * @}
00076   */
00077 #endif /* DMAMUX1 */
00078 /* Private macros ------------------------------------------------------------*/
00079 #if defined(DMAMUX1)
00080 
00081 /** @defgroup DMA_LL_Private_Macros DMA Private Macros
00082   * @{
00083   */
00084 /**
00085   * @brief  Helper macro to convert DMA Instance DMAx into DMAMUX channel
00086   * @note   DMAMUX channel 0 to 6 are mapped to DMA1 channel 1 to 7.
00087   *         DMAMUX channel 7 to 13 are mapped to DMA2 channel 1 to 7.
00088   * @param  __DMA_INSTANCE__ DMAx
00089   * @retval Channel_Offset (LL_DMA_CHANNEL_7 or 0).
00090   */
00091 #define __LL_DMA_INSTANCE_TO_DMAMUX_CHANNEL(__DMA_INSTANCE__)   \
00092 (((__DMA_INSTANCE__) == DMA1) ? 0x00000000U : LL_DMA_CHANNEL_7)
00093 
00094 /**
00095   * @}
00096   */
00097 #else
00098 #if defined(USE_FULL_LL_DRIVER)
00099 /** @defgroup DMA_LL_Private_Macros DMA Private Macros
00100   * @{
00101   */
00102 /**
00103   * @}
00104   */
00105 #endif /*USE_FULL_LL_DRIVER*/
00106 #endif /* DMAMUX1 */
00107 /* Exported types ------------------------------------------------------------*/
00108 #if defined(USE_FULL_LL_DRIVER)
00109 /** @defgroup DMA_LL_ES_INIT DMA Exported Init structure
00110   * @{
00111   */
00112 typedef struct
00113 {
00114   uint32_t PeriphOrM2MSrcAddress;  /*!< Specifies the peripheral base address for DMA transfer
00115                                         or as Source base address in case of memory to memory transfer direction.
00116 
00117                                         This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF. */
00118 
00119   uint32_t MemoryOrM2MDstAddress;  /*!< Specifies the memory base address for DMA transfer
00120                                         or as Destination base address in case of memory to memory transfer direction.
00121 
00122                                         This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF. */
00123 
00124   uint32_t Direction;              /*!< Specifies if the data will be transferred from memory to peripheral,
00125                                         from memory to memory or from peripheral to memory.
00126                                         This parameter can be a value of @ref DMA_LL_EC_DIRECTION
00127 
00128                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetDataTransferDirection(). */
00129 
00130   uint32_t Mode;                   /*!< Specifies the normal or circular operation mode.
00131                                         This parameter can be a value of @ref DMA_LL_EC_MODE
00132                                         @note: The circular buffer mode cannot be used if the memory to memory
00133                                                data transfer direction is configured on the selected Channel
00134 
00135                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetMode(). */
00136 
00137   uint32_t PeriphOrM2MSrcIncMode;  /*!< Specifies whether the Peripheral address or Source address in case of memory to memory transfer direction
00138                                         is incremented or not.
00139                                         This parameter can be a value of @ref DMA_LL_EC_PERIPH
00140 
00141                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphIncMode(). */
00142 
00143   uint32_t MemoryOrM2MDstIncMode;  /*!< Specifies whether the Memory address or Destination address in case of memory to memory transfer direction
00144                                         is incremented or not.
00145                                         This parameter can be a value of @ref DMA_LL_EC_MEMORY
00146 
00147                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetMemoryIncMode(). */
00148 
00149   uint32_t PeriphOrM2MSrcDataSize; /*!< Specifies the Peripheral data size alignment or Source data size alignment (byte, half word, word)
00150                                         in case of memory to memory transfer direction.
00151                                         This parameter can be a value of @ref DMA_LL_EC_PDATAALIGN
00152 
00153                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphSize(). */
00154 
00155   uint32_t MemoryOrM2MDstDataSize; /*!< Specifies the Memory data size alignment or Destination data size alignment (byte, half word, word)
00156                                         in case of memory to memory transfer direction.
00157                                         This parameter can be a value of @ref DMA_LL_EC_MDATAALIGN
00158 
00159                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetMemorySize(). */
00160 
00161   uint32_t NbData;                 /*!< Specifies the number of data to transfer, in data unit.
00162                                         The data unit is equal to the source buffer configuration set in PeripheralSize
00163                                         or MemorySize parameters depending in the transfer direction.
00164                                         This parameter must be a value between Min_Data = 0 and Max_Data = 0x0000FFFF
00165 
00166                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetDataLength(). */
00167 
00168 #if defined(DMAMUX1)
00169   uint32_t PeriphRequest;          /*!< Specifies the peripheral request.
00170                                         This parameter can be a value of @ref DMAMUX_LL_EC_REQUEST
00171 
00172                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphRequest(). */
00173 #else
00174   uint32_t PeriphRequest;          /*!< Specifies the peripheral request.
00175                                         This parameter can be a value of @ref DMA_LL_EC_REQUEST
00176 
00177                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphRequest(). */
00178 #endif /* DMAMUX1 */
00179 
00180   uint32_t Priority;               /*!< Specifies the channel priority level.
00181                                         This parameter can be a value of @ref DMA_LL_EC_PRIORITY
00182 
00183                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetChannelPriorityLevel(). */
00184 
00185 } LL_DMA_InitTypeDef;
00186 /**
00187   * @}
00188   */
00189 #endif /*USE_FULL_LL_DRIVER*/
00190 
00191 /* Exported constants --------------------------------------------------------*/
00192 /** @defgroup DMA_LL_Exported_Constants DMA Exported Constants
00193   * @{
00194   */
00195 /** @defgroup DMA_LL_EC_CLEAR_FLAG Clear Flags Defines
00196   * @brief    Flags defines which can be used with LL_DMA_WriteReg function
00197   * @{
00198   */
00199 #define LL_DMA_IFCR_CGIF1                 DMA_IFCR_CGIF1        /*!< Channel 1 global flag            */
00200 #define LL_DMA_IFCR_CTCIF1                DMA_IFCR_CTCIF1       /*!< Channel 1 transfer complete flag */
00201 #define LL_DMA_IFCR_CHTIF1                DMA_IFCR_CHTIF1       /*!< Channel 1 half transfer flag     */
00202 #define LL_DMA_IFCR_CTEIF1                DMA_IFCR_CTEIF1       /*!< Channel 1 transfer error flag    */
00203 #define LL_DMA_IFCR_CGIF2                 DMA_IFCR_CGIF2        /*!< Channel 2 global flag            */
00204 #define LL_DMA_IFCR_CTCIF2                DMA_IFCR_CTCIF2       /*!< Channel 2 transfer complete flag */
00205 #define LL_DMA_IFCR_CHTIF2                DMA_IFCR_CHTIF2       /*!< Channel 2 half transfer flag     */
00206 #define LL_DMA_IFCR_CTEIF2                DMA_IFCR_CTEIF2       /*!< Channel 2 transfer error flag    */
00207 #define LL_DMA_IFCR_CGIF3                 DMA_IFCR_CGIF3        /*!< Channel 3 global flag            */
00208 #define LL_DMA_IFCR_CTCIF3                DMA_IFCR_CTCIF3       /*!< Channel 3 transfer complete flag */
00209 #define LL_DMA_IFCR_CHTIF3                DMA_IFCR_CHTIF3       /*!< Channel 3 half transfer flag     */
00210 #define LL_DMA_IFCR_CTEIF3                DMA_IFCR_CTEIF3       /*!< Channel 3 transfer error flag    */
00211 #define LL_DMA_IFCR_CGIF4                 DMA_IFCR_CGIF4        /*!< Channel 4 global flag            */
00212 #define LL_DMA_IFCR_CTCIF4                DMA_IFCR_CTCIF4       /*!< Channel 4 transfer complete flag */
00213 #define LL_DMA_IFCR_CHTIF4                DMA_IFCR_CHTIF4       /*!< Channel 4 half transfer flag     */
00214 #define LL_DMA_IFCR_CTEIF4                DMA_IFCR_CTEIF4       /*!< Channel 4 transfer error flag    */
00215 #define LL_DMA_IFCR_CGIF5                 DMA_IFCR_CGIF5        /*!< Channel 5 global flag            */
00216 #define LL_DMA_IFCR_CTCIF5                DMA_IFCR_CTCIF5       /*!< Channel 5 transfer complete flag */
00217 #define LL_DMA_IFCR_CHTIF5                DMA_IFCR_CHTIF5       /*!< Channel 5 half transfer flag     */
00218 #define LL_DMA_IFCR_CTEIF5                DMA_IFCR_CTEIF5       /*!< Channel 5 transfer error flag    */
00219 #define LL_DMA_IFCR_CGIF6                 DMA_IFCR_CGIF6        /*!< Channel 6 global flag            */
00220 #define LL_DMA_IFCR_CTCIF6                DMA_IFCR_CTCIF6       /*!< Channel 6 transfer complete flag */
00221 #define LL_DMA_IFCR_CHTIF6                DMA_IFCR_CHTIF6       /*!< Channel 6 half transfer flag     */
00222 #define LL_DMA_IFCR_CTEIF6                DMA_IFCR_CTEIF6       /*!< Channel 6 transfer error flag    */
00223 #define LL_DMA_IFCR_CGIF7                 DMA_IFCR_CGIF7        /*!< Channel 7 global flag            */
00224 #define LL_DMA_IFCR_CTCIF7                DMA_IFCR_CTCIF7       /*!< Channel 7 transfer complete flag */
00225 #define LL_DMA_IFCR_CHTIF7                DMA_IFCR_CHTIF7       /*!< Channel 7 half transfer flag     */
00226 #define LL_DMA_IFCR_CTEIF7                DMA_IFCR_CTEIF7       /*!< Channel 7 transfer error flag    */
00227 /**
00228   * @}
00229   */
00230 
00231 /** @defgroup DMA_LL_EC_GET_FLAG Get Flags Defines
00232   * @brief    Flags defines which can be used with LL_DMA_ReadReg function
00233   * @{
00234   */
00235 #define LL_DMA_ISR_GIF1                   DMA_ISR_GIF1          /*!< Channel 1 global flag            */
00236 #define LL_DMA_ISR_TCIF1                  DMA_ISR_TCIF1         /*!< Channel 1 transfer complete flag */
00237 #define LL_DMA_ISR_HTIF1                  DMA_ISR_HTIF1         /*!< Channel 1 half transfer flag     */
00238 #define LL_DMA_ISR_TEIF1                  DMA_ISR_TEIF1         /*!< Channel 1 transfer error flag    */
00239 #define LL_DMA_ISR_GIF2                   DMA_ISR_GIF2          /*!< Channel 2 global flag            */
00240 #define LL_DMA_ISR_TCIF2                  DMA_ISR_TCIF2         /*!< Channel 2 transfer complete flag */
00241 #define LL_DMA_ISR_HTIF2                  DMA_ISR_HTIF2         /*!< Channel 2 half transfer flag     */
00242 #define LL_DMA_ISR_TEIF2                  DMA_ISR_TEIF2         /*!< Channel 2 transfer error flag    */
00243 #define LL_DMA_ISR_GIF3                   DMA_ISR_GIF3          /*!< Channel 3 global flag            */
00244 #define LL_DMA_ISR_TCIF3                  DMA_ISR_TCIF3         /*!< Channel 3 transfer complete flag */
00245 #define LL_DMA_ISR_HTIF3                  DMA_ISR_HTIF3         /*!< Channel 3 half transfer flag     */
00246 #define LL_DMA_ISR_TEIF3                  DMA_ISR_TEIF3         /*!< Channel 3 transfer error flag    */
00247 #define LL_DMA_ISR_GIF4                   DMA_ISR_GIF4          /*!< Channel 4 global flag            */
00248 #define LL_DMA_ISR_TCIF4                  DMA_ISR_TCIF4         /*!< Channel 4 transfer complete flag */
00249 #define LL_DMA_ISR_HTIF4                  DMA_ISR_HTIF4         /*!< Channel 4 half transfer flag     */
00250 #define LL_DMA_ISR_TEIF4                  DMA_ISR_TEIF4         /*!< Channel 4 transfer error flag    */
00251 #define LL_DMA_ISR_GIF5                   DMA_ISR_GIF5          /*!< Channel 5 global flag            */
00252 #define LL_DMA_ISR_TCIF5                  DMA_ISR_TCIF5         /*!< Channel 5 transfer complete flag */
00253 #define LL_DMA_ISR_HTIF5                  DMA_ISR_HTIF5         /*!< Channel 5 half transfer flag     */
00254 #define LL_DMA_ISR_TEIF5                  DMA_ISR_TEIF5         /*!< Channel 5 transfer error flag    */
00255 #define LL_DMA_ISR_GIF6                   DMA_ISR_GIF6          /*!< Channel 6 global flag            */
00256 #define LL_DMA_ISR_TCIF6                  DMA_ISR_TCIF6         /*!< Channel 6 transfer complete flag */
00257 #define LL_DMA_ISR_HTIF6                  DMA_ISR_HTIF6         /*!< Channel 6 half transfer flag     */
00258 #define LL_DMA_ISR_TEIF6                  DMA_ISR_TEIF6         /*!< Channel 6 transfer error flag    */
00259 #define LL_DMA_ISR_GIF7                   DMA_ISR_GIF7          /*!< Channel 7 global flag            */
00260 #define LL_DMA_ISR_TCIF7                  DMA_ISR_TCIF7         /*!< Channel 7 transfer complete flag */
00261 #define LL_DMA_ISR_HTIF7                  DMA_ISR_HTIF7         /*!< Channel 7 half transfer flag     */
00262 #define LL_DMA_ISR_TEIF7                  DMA_ISR_TEIF7         /*!< Channel 7 transfer error flag    */
00263 /**
00264   * @}
00265   */
00266 
00267 /** @defgroup DMA_LL_EC_IT IT Defines
00268   * @brief    IT defines which can be used with LL_DMA_ReadReg and  LL_DMA_WriteReg functions
00269   * @{
00270   */
00271 #define LL_DMA_CCR_TCIE                   DMA_CCR_TCIE          /*!< Transfer complete interrupt */
00272 #define LL_DMA_CCR_HTIE                   DMA_CCR_HTIE          /*!< Half Transfer interrupt     */
00273 #define LL_DMA_CCR_TEIE                   DMA_CCR_TEIE          /*!< Transfer error interrupt    */
00274 /**
00275   * @}
00276   */
00277 
00278 /** @defgroup DMA_LL_EC_CHANNEL CHANNEL
00279   * @{
00280   */
00281 #define LL_DMA_CHANNEL_1                  0x00000000U /*!< DMA Channel 1 */
00282 #define LL_DMA_CHANNEL_2                  0x00000001U /*!< DMA Channel 2 */
00283 #define LL_DMA_CHANNEL_3                  0x00000002U /*!< DMA Channel 3 */
00284 #define LL_DMA_CHANNEL_4                  0x00000003U /*!< DMA Channel 4 */
00285 #define LL_DMA_CHANNEL_5                  0x00000004U /*!< DMA Channel 5 */
00286 #define LL_DMA_CHANNEL_6                  0x00000005U /*!< DMA Channel 6 */
00287 #define LL_DMA_CHANNEL_7                  0x00000006U /*!< DMA Channel 7 */
00288 #if defined(USE_FULL_LL_DRIVER)
00289 #define LL_DMA_CHANNEL_ALL                0xFFFF0000U /*!< DMA Channel all (used only for function @ref LL_DMA_DeInit(). */
00290 #endif /*USE_FULL_LL_DRIVER*/
00291 /**
00292   * @}
00293   */
00294 
00295 /** @defgroup DMA_LL_EC_DIRECTION Transfer Direction
00296   * @{
00297   */
00298 #define LL_DMA_DIRECTION_PERIPH_TO_MEMORY 0x00000000U             /*!< Peripheral to memory direction */
00299 #define LL_DMA_DIRECTION_MEMORY_TO_PERIPH DMA_CCR_DIR             /*!< Memory to peripheral direction */
00300 #define LL_DMA_DIRECTION_MEMORY_TO_MEMORY DMA_CCR_MEM2MEM         /*!< Memory to memory direction     */
00301 /**
00302   * @}
00303   */
00304 
00305 /** @defgroup DMA_LL_EC_MODE Transfer mode
00306   * @{
00307   */
00308 #define LL_DMA_MODE_NORMAL                0x00000000U             /*!< Normal Mode                  */
00309 #define LL_DMA_MODE_CIRCULAR              DMA_CCR_CIRC            /*!< Circular Mode                */
00310 /**
00311   * @}
00312   */
00313 
00314 /** @defgroup DMA_LL_EC_PERIPH Peripheral increment mode
00315   * @{
00316   */
00317 #define LL_DMA_PERIPH_INCREMENT           DMA_CCR_PINC            /*!< Peripheral increment mode Enable */
00318 #define LL_DMA_PERIPH_NOINCREMENT         0x00000000U             /*!< Peripheral increment mode Disable */
00319 /**
00320   * @}
00321   */
00322 
00323 /** @defgroup DMA_LL_EC_MEMORY Memory increment mode
00324   * @{
00325   */
00326 #define LL_DMA_MEMORY_INCREMENT           DMA_CCR_MINC            /*!< Memory increment mode Enable  */
00327 #define LL_DMA_MEMORY_NOINCREMENT         0x00000000U             /*!< Memory increment mode Disable */
00328 /**
00329   * @}
00330   */
00331 
00332 /** @defgroup DMA_LL_EC_PDATAALIGN Peripheral data alignment
00333   * @{
00334   */
00335 #define LL_DMA_PDATAALIGN_BYTE            0x00000000U             /*!< Peripheral data alignment : Byte     */
00336 #define LL_DMA_PDATAALIGN_HALFWORD        DMA_CCR_PSIZE_0         /*!< Peripheral data alignment : HalfWord */
00337 #define LL_DMA_PDATAALIGN_WORD            DMA_CCR_PSIZE_1         /*!< Peripheral data alignment : Word     */
00338 /**
00339   * @}
00340   */
00341 
00342 /** @defgroup DMA_LL_EC_MDATAALIGN Memory data alignment
00343   * @{
00344   */
00345 #define LL_DMA_MDATAALIGN_BYTE            0x00000000U             /*!< Memory data alignment : Byte     */
00346 #define LL_DMA_MDATAALIGN_HALFWORD        DMA_CCR_MSIZE_0         /*!< Memory data alignment : HalfWord */
00347 #define LL_DMA_MDATAALIGN_WORD            DMA_CCR_MSIZE_1         /*!< Memory data alignment : Word     */
00348 /**
00349   * @}
00350   */
00351 
00352 /** @defgroup DMA_LL_EC_PRIORITY Transfer Priority level
00353   * @{
00354   */
00355 #define LL_DMA_PRIORITY_LOW               0x00000000U             /*!< Priority level : Low       */
00356 #define LL_DMA_PRIORITY_MEDIUM            DMA_CCR_PL_0            /*!< Priority level : Medium    */
00357 #define LL_DMA_PRIORITY_HIGH              DMA_CCR_PL_1            /*!< Priority level : High      */
00358 #define LL_DMA_PRIORITY_VERYHIGH          DMA_CCR_PL              /*!< Priority level : Very_High */
00359 /**
00360   * @}
00361   */
00362 
00363 #if !defined  (DMAMUX1)
00364 /** @defgroup DMA_LL_EC_REQUEST Transfer peripheral request
00365   * @{
00366   */
00367 #define LL_DMA_REQUEST_0                  0x00000000U /*!< DMA peripheral request 0  */
00368 #define LL_DMA_REQUEST_1                  0x00000001U /*!< DMA peripheral request 1  */
00369 #define LL_DMA_REQUEST_2                  0x00000002U /*!< DMA peripheral request 2  */
00370 #define LL_DMA_REQUEST_3                  0x00000003U /*!< DMA peripheral request 3  */
00371 #define LL_DMA_REQUEST_4                  0x00000004U /*!< DMA peripheral request 4  */
00372 #define LL_DMA_REQUEST_5                  0x00000005U /*!< DMA peripheral request 5  */
00373 #define LL_DMA_REQUEST_6                  0x00000006U /*!< DMA peripheral request 6  */
00374 #define LL_DMA_REQUEST_7                  0x00000007U /*!< DMA peripheral request 7  */
00375 /**
00376   * @}
00377   */
00378 #endif /* !defined DMAMUX1 */
00379 /**
00380   * @}
00381   */
00382 
00383 /* Exported macro ------------------------------------------------------------*/
00384 /** @defgroup DMA_LL_Exported_Macros DMA Exported Macros
00385   * @{
00386   */
00387 
00388 /** @defgroup DMA_LL_EM_WRITE_READ Common Write and read registers macros
00389   * @{
00390   */
00391 /**
00392   * @brief  Write a value in DMA register
00393   * @param  __INSTANCE__ DMA Instance
00394   * @param  __REG__ Register to be written
00395   * @param  __VALUE__ Value to be written in the register
00396   * @retval None
00397   */
00398 #define LL_DMA_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
00399 
00400 /**
00401   * @brief  Read a value in DMA register
00402   * @param  __INSTANCE__ DMA Instance
00403   * @param  __REG__ Register to be read
00404   * @retval Register value
00405   */
00406 #define LL_DMA_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
00407 /**
00408   * @}
00409   */
00410 
00411 /** @defgroup DMA_LL_EM_CONVERT_DMAxCHANNELy Convert DMAxChannely
00412   * @{
00413   */
00414 /**
00415   * @brief  Convert DMAx_Channely into DMAx
00416   * @param  __CHANNEL_INSTANCE__ DMAx_Channely
00417   * @retval DMAx
00418   */
00419 #if defined(DMA2)
00420 #define __LL_DMA_GET_INSTANCE(__CHANNEL_INSTANCE__)   \
00421 (((uint32_t)(__CHANNEL_INSTANCE__) > ((uint32_t)DMA1_Channel7)) ?  DMA2 : DMA1)
00422 #else
00423 #define __LL_DMA_GET_INSTANCE(__CHANNEL_INSTANCE__)  (DMA1)
00424 #endif
00425 
00426 /**
00427   * @brief  Convert DMAx_Channely into LL_DMA_CHANNEL_y
00428   * @param  __CHANNEL_INSTANCE__ DMAx_Channely
00429   * @retval LL_DMA_CHANNEL_y
00430   */
00431 #if defined (DMA2)
00432 #if defined (DMA2_Channel6) && defined (DMA2_Channel7)
00433 #define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__)   \
00434 (((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \
00435  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel1)) ? LL_DMA_CHANNEL_1 : \
00436  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \
00437  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel2)) ? LL_DMA_CHANNEL_2 : \
00438  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel3)) ? LL_DMA_CHANNEL_3 : \
00439  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel3)) ? LL_DMA_CHANNEL_3 : \
00440  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel4)) ? LL_DMA_CHANNEL_4 : \
00441  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel4)) ? LL_DMA_CHANNEL_4 : \
00442  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel5)) ? LL_DMA_CHANNEL_5 : \
00443  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel5)) ? LL_DMA_CHANNEL_5 : \
00444  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel6)) ? LL_DMA_CHANNEL_6 : \
00445  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel6)) ? LL_DMA_CHANNEL_6 : \
00446  LL_DMA_CHANNEL_7)
00447 #else
00448 #define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__)   \
00449 (((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \
00450  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel1)) ? LL_DMA_CHANNEL_1 : \
00451  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \
00452  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel2)) ? LL_DMA_CHANNEL_2 : \
00453  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel3)) ? LL_DMA_CHANNEL_3 : \
00454  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel3)) ? LL_DMA_CHANNEL_3 : \
00455  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel4)) ? LL_DMA_CHANNEL_4 : \
00456  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel4)) ? LL_DMA_CHANNEL_4 : \
00457  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel5)) ? LL_DMA_CHANNEL_5 : \
00458  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel5)) ? LL_DMA_CHANNEL_5 : \
00459  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel6)) ? LL_DMA_CHANNEL_6 : \
00460  LL_DMA_CHANNEL_7)
00461 #endif
00462 #else
00463 #define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__)   \
00464 (((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \
00465  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \
00466  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel3)) ? LL_DMA_CHANNEL_3 : \
00467  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel4)) ? LL_DMA_CHANNEL_4 : \
00468  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel5)) ? LL_DMA_CHANNEL_5 : \
00469  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel6)) ? LL_DMA_CHANNEL_6 : \
00470  LL_DMA_CHANNEL_7)
00471 #endif
00472 
00473 /**
00474   * @brief  Convert DMA Instance DMAx and LL_DMA_CHANNEL_y into DMAx_Channely
00475   * @param  __DMA_INSTANCE__ DMAx
00476   * @param  __CHANNEL__ LL_DMA_CHANNEL_y
00477   * @retval DMAx_Channely
00478   */
00479 #if defined (DMA2)
00480 #if defined (DMA2_Channel6) && defined (DMA2_Channel7)
00481 #define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__)   \
00482 ((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \
00483  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA2_Channel1 : \
00484  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \
00485  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA2_Channel2 : \
00486  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA1_Channel3 : \
00487  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA2_Channel3 : \
00488  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA1_Channel4 : \
00489  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA2_Channel4 : \
00490  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA1_Channel5 : \
00491  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA2_Channel5 : \
00492  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6))) ? DMA1_Channel6 : \
00493  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6))) ? DMA2_Channel6 : \
00494  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_7))) ? DMA1_Channel7 : \
00495  DMA2_Channel7)
00496 #else
00497 #define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__)   \
00498 ((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \
00499  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA2_Channel1 : \
00500  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \
00501  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA2_Channel2 : \
00502  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA1_Channel3 : \
00503  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA2_Channel3 : \
00504  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA1_Channel4 : \
00505  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA2_Channel4 : \
00506  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA1_Channel5 : \
00507  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA2_Channel5 : \
00508  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6))) ? DMA1_Channel6 : \
00509  DMA1_Channel7)
00510 #endif
00511 #else
00512 #define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__)   \
00513 ((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \
00514  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \
00515  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA1_Channel3 : \
00516  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA1_Channel4 : \
00517  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA1_Channel5 : \
00518  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6))) ? DMA1_Channel6 : \
00519  DMA1_Channel7)
00520 #endif
00521 
00522 /**
00523   * @}
00524   */
00525 
00526 /**
00527   * @}
00528   */
00529 
00530 /* Exported functions --------------------------------------------------------*/
00531 /** @defgroup DMA_LL_Exported_Functions DMA Exported Functions
00532  * @{
00533  */
00534 
00535 /** @defgroup DMA_LL_EF_Configuration Configuration
00536   * @{
00537   */
00538 /**
00539   * @brief  Enable DMA channel.
00540   * @rmtoll CCR          EN            LL_DMA_EnableChannel
00541   * @param  DMAx DMAx Instance
00542   * @param  Channel This parameter can be one of the following values:
00543   *         @arg @ref LL_DMA_CHANNEL_1
00544   *         @arg @ref LL_DMA_CHANNEL_2
00545   *         @arg @ref LL_DMA_CHANNEL_3
00546   *         @arg @ref LL_DMA_CHANNEL_4
00547   *         @arg @ref LL_DMA_CHANNEL_5
00548   *         @arg @ref LL_DMA_CHANNEL_6
00549   *         @arg @ref LL_DMA_CHANNEL_7
00550   * @retval None
00551   */
00552 __STATIC_INLINE void LL_DMA_EnableChannel(DMA_TypeDef *DMAx, uint32_t Channel)
00553 {
00554   uint32_t dma_base_addr = (uint32_t)DMAx;
00555   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_EN);
00556 }
00557 
00558 /**
00559   * @brief  Disable DMA channel.
00560   * @rmtoll CCR          EN            LL_DMA_DisableChannel
00561   * @param  DMAx DMAx Instance
00562   * @param  Channel This parameter can be one of the following values:
00563   *         @arg @ref LL_DMA_CHANNEL_1
00564   *         @arg @ref LL_DMA_CHANNEL_2
00565   *         @arg @ref LL_DMA_CHANNEL_3
00566   *         @arg @ref LL_DMA_CHANNEL_4
00567   *         @arg @ref LL_DMA_CHANNEL_5
00568   *         @arg @ref LL_DMA_CHANNEL_6
00569   *         @arg @ref LL_DMA_CHANNEL_7
00570   * @retval None
00571   */
00572 __STATIC_INLINE void LL_DMA_DisableChannel(DMA_TypeDef *DMAx, uint32_t Channel)
00573 {
00574   uint32_t dma_base_addr = (uint32_t)DMAx;
00575   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_EN);
00576 }
00577 
00578 /**
00579   * @brief  Check if DMA channel is enabled or disabled.
00580   * @rmtoll CCR          EN            LL_DMA_IsEnabledChannel
00581   * @param  DMAx DMAx Instance
00582   * @param  Channel This parameter can be one of the following values:
00583   *         @arg @ref LL_DMA_CHANNEL_1
00584   *         @arg @ref LL_DMA_CHANNEL_2
00585   *         @arg @ref LL_DMA_CHANNEL_3
00586   *         @arg @ref LL_DMA_CHANNEL_4
00587   *         @arg @ref LL_DMA_CHANNEL_5
00588   *         @arg @ref LL_DMA_CHANNEL_6
00589   *         @arg @ref LL_DMA_CHANNEL_7
00590   * @retval State of bit (1 or 0).
00591   */
00592 __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannel(DMA_TypeDef *DMAx, uint32_t Channel)
00593 {
00594   uint32_t dma_base_addr = (uint32_t)DMAx;
00595   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
00596                   DMA_CCR_EN) == (DMA_CCR_EN)) ? 1UL : 0UL);
00597 }
00598 
00599 /**
00600   * @brief  Configure all parameters link to DMA transfer.
00601   * @rmtoll CCR          DIR           LL_DMA_ConfigTransfer\n
00602   *         CCR          MEM2MEM       LL_DMA_ConfigTransfer\n
00603   *         CCR          CIRC          LL_DMA_ConfigTransfer\n
00604   *         CCR          PINC          LL_DMA_ConfigTransfer\n
00605   *         CCR          MINC          LL_DMA_ConfigTransfer\n
00606   *         CCR          PSIZE         LL_DMA_ConfigTransfer\n
00607   *         CCR          MSIZE         LL_DMA_ConfigTransfer\n
00608   *         CCR          PL            LL_DMA_ConfigTransfer
00609   * @param  DMAx DMAx Instance
00610   * @param  Channel This parameter can be one of the following values:
00611   *         @arg @ref LL_DMA_CHANNEL_1
00612   *         @arg @ref LL_DMA_CHANNEL_2
00613   *         @arg @ref LL_DMA_CHANNEL_3
00614   *         @arg @ref LL_DMA_CHANNEL_4
00615   *         @arg @ref LL_DMA_CHANNEL_5
00616   *         @arg @ref LL_DMA_CHANNEL_6
00617   *         @arg @ref LL_DMA_CHANNEL_7
00618   * @param  Configuration This parameter must be a combination of all the following values:
00619   *         @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY or @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH or @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
00620   *         @arg @ref LL_DMA_MODE_NORMAL or @ref LL_DMA_MODE_CIRCULAR
00621   *         @arg @ref LL_DMA_PERIPH_INCREMENT or @ref LL_DMA_PERIPH_NOINCREMENT
00622   *         @arg @ref LL_DMA_MEMORY_INCREMENT or @ref LL_DMA_MEMORY_NOINCREMENT
00623   *         @arg @ref LL_DMA_PDATAALIGN_BYTE or @ref LL_DMA_PDATAALIGN_HALFWORD or @ref LL_DMA_PDATAALIGN_WORD
00624   *         @arg @ref LL_DMA_MDATAALIGN_BYTE or @ref LL_DMA_MDATAALIGN_HALFWORD or @ref LL_DMA_MDATAALIGN_WORD
00625   *         @arg @ref LL_DMA_PRIORITY_LOW or @ref LL_DMA_PRIORITY_MEDIUM or @ref LL_DMA_PRIORITY_HIGH or @ref LL_DMA_PRIORITY_VERYHIGH
00626   * @retval None
00627   */
00628 __STATIC_INLINE void LL_DMA_ConfigTransfer(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
00629 {
00630   uint32_t dma_base_addr = (uint32_t)DMAx;
00631   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
00632              DMA_CCR_DIR | DMA_CCR_MEM2MEM | DMA_CCR_CIRC | DMA_CCR_PINC | DMA_CCR_MINC | DMA_CCR_PSIZE | DMA_CCR_MSIZE | DMA_CCR_PL,
00633              Configuration);
00634 }
00635 
00636 /**
00637   * @brief  Set Data transfer direction (read from peripheral or from memory).
00638   * @rmtoll CCR          DIR           LL_DMA_SetDataTransferDirection\n
00639   *         CCR          MEM2MEM       LL_DMA_SetDataTransferDirection
00640   * @param  DMAx DMAx Instance
00641   * @param  Channel This parameter can be one of the following values:
00642   *         @arg @ref LL_DMA_CHANNEL_1
00643   *         @arg @ref LL_DMA_CHANNEL_2
00644   *         @arg @ref LL_DMA_CHANNEL_3
00645   *         @arg @ref LL_DMA_CHANNEL_4
00646   *         @arg @ref LL_DMA_CHANNEL_5
00647   *         @arg @ref LL_DMA_CHANNEL_6
00648   *         @arg @ref LL_DMA_CHANNEL_7
00649   * @param  Direction This parameter can be one of the following values:
00650   *         @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
00651   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
00652   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
00653   * @retval None
00654   */
00655 __STATIC_INLINE void LL_DMA_SetDataTransferDirection(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Direction)
00656 {
00657   uint32_t dma_base_addr = (uint32_t)DMAx;
00658   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
00659              DMA_CCR_DIR | DMA_CCR_MEM2MEM, Direction);
00660 }
00661 
00662 /**
00663   * @brief  Get Data transfer direction (read from peripheral or from memory).
00664   * @rmtoll CCR          DIR           LL_DMA_GetDataTransferDirection\n
00665   *         CCR          MEM2MEM       LL_DMA_GetDataTransferDirection
00666   * @param  DMAx DMAx Instance
00667   * @param  Channel This parameter can be one of the following values:
00668   *         @arg @ref LL_DMA_CHANNEL_1
00669   *         @arg @ref LL_DMA_CHANNEL_2
00670   *         @arg @ref LL_DMA_CHANNEL_3
00671   *         @arg @ref LL_DMA_CHANNEL_4
00672   *         @arg @ref LL_DMA_CHANNEL_5
00673   *         @arg @ref LL_DMA_CHANNEL_6
00674   *         @arg @ref LL_DMA_CHANNEL_7
00675   * @retval Returned value can be one of the following values:
00676   *         @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
00677   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
00678   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
00679   */
00680 __STATIC_INLINE uint32_t LL_DMA_GetDataTransferDirection(DMA_TypeDef *DMAx, uint32_t Channel)
00681 {
00682   uint32_t dma_base_addr = (uint32_t)DMAx;
00683   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
00684                    DMA_CCR_DIR | DMA_CCR_MEM2MEM));
00685 }
00686 
00687 /**
00688   * @brief  Set DMA mode circular or normal.
00689   * @note The circular buffer mode cannot be used if the memory-to-memory
00690   * data transfer is configured on the selected Channel.
00691   * @rmtoll CCR          CIRC          LL_DMA_SetMode
00692   * @param  DMAx DMAx Instance
00693   * @param  Channel This parameter can be one of the following values:
00694   *         @arg @ref LL_DMA_CHANNEL_1
00695   *         @arg @ref LL_DMA_CHANNEL_2
00696   *         @arg @ref LL_DMA_CHANNEL_3
00697   *         @arg @ref LL_DMA_CHANNEL_4
00698   *         @arg @ref LL_DMA_CHANNEL_5
00699   *         @arg @ref LL_DMA_CHANNEL_6
00700   *         @arg @ref LL_DMA_CHANNEL_7
00701   * @param  Mode This parameter can be one of the following values:
00702   *         @arg @ref LL_DMA_MODE_NORMAL
00703   *         @arg @ref LL_DMA_MODE_CIRCULAR
00704   * @retval None
00705   */
00706 __STATIC_INLINE void LL_DMA_SetMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Mode)
00707 {
00708   uint32_t dma_base_addr = (uint32_t)DMAx;
00709   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_CIRC,
00710              Mode);
00711 }
00712 
00713 /**
00714   * @brief  Get DMA mode circular or normal.
00715   * @rmtoll CCR          CIRC          LL_DMA_GetMode
00716   * @param  DMAx DMAx Instance
00717   * @param  Channel This parameter can be one of the following values:
00718   *         @arg @ref LL_DMA_CHANNEL_1
00719   *         @arg @ref LL_DMA_CHANNEL_2
00720   *         @arg @ref LL_DMA_CHANNEL_3
00721   *         @arg @ref LL_DMA_CHANNEL_4
00722   *         @arg @ref LL_DMA_CHANNEL_5
00723   *         @arg @ref LL_DMA_CHANNEL_6
00724   *         @arg @ref LL_DMA_CHANNEL_7
00725   * @retval Returned value can be one of the following values:
00726   *         @arg @ref LL_DMA_MODE_NORMAL
00727   *         @arg @ref LL_DMA_MODE_CIRCULAR
00728   */
00729 __STATIC_INLINE uint32_t LL_DMA_GetMode(DMA_TypeDef *DMAx, uint32_t Channel)
00730 {
00731   uint32_t dma_base_addr = (uint32_t)DMAx;
00732   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
00733                    DMA_CCR_CIRC));
00734 }
00735 
00736 /**
00737   * @brief  Set Peripheral increment mode.
00738   * @rmtoll CCR          PINC          LL_DMA_SetPeriphIncMode
00739   * @param  DMAx DMAx Instance
00740   * @param  Channel This parameter can be one of the following values:
00741   *         @arg @ref LL_DMA_CHANNEL_1
00742   *         @arg @ref LL_DMA_CHANNEL_2
00743   *         @arg @ref LL_DMA_CHANNEL_3
00744   *         @arg @ref LL_DMA_CHANNEL_4
00745   *         @arg @ref LL_DMA_CHANNEL_5
00746   *         @arg @ref LL_DMA_CHANNEL_6
00747   *         @arg @ref LL_DMA_CHANNEL_7
00748   * @param  PeriphOrM2MSrcIncMode This parameter can be one of the following values:
00749   *         @arg @ref LL_DMA_PERIPH_INCREMENT
00750   *         @arg @ref LL_DMA_PERIPH_NOINCREMENT
00751   * @retval None
00752   */
00753 __STATIC_INLINE void LL_DMA_SetPeriphIncMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphOrM2MSrcIncMode)
00754 {
00755     uint32_t dma_base_addr = (uint32_t)DMAx;
00756     MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_PINC,
00757              PeriphOrM2MSrcIncMode);
00758 }
00759 
00760 /**
00761   * @brief  Get Peripheral increment mode.
00762   * @rmtoll CCR          PINC          LL_DMA_GetPeriphIncMode
00763   * @param  DMAx DMAx Instance
00764   * @param  Channel This parameter can be one of the following values:
00765   *         @arg @ref LL_DMA_CHANNEL_1
00766   *         @arg @ref LL_DMA_CHANNEL_2
00767   *         @arg @ref LL_DMA_CHANNEL_3
00768   *         @arg @ref LL_DMA_CHANNEL_4
00769   *         @arg @ref LL_DMA_CHANNEL_5
00770   *         @arg @ref LL_DMA_CHANNEL_6
00771   *         @arg @ref LL_DMA_CHANNEL_7
00772   * @retval Returned value can be one of the following values:
00773   *         @arg @ref LL_DMA_PERIPH_INCREMENT
00774   *         @arg @ref LL_DMA_PERIPH_NOINCREMENT
00775   */
00776 __STATIC_INLINE uint32_t LL_DMA_GetPeriphIncMode(DMA_TypeDef *DMAx, uint32_t Channel)
00777 {
00778   uint32_t dma_base_addr = (uint32_t)DMAx;
00779   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
00780                    DMA_CCR_PINC));
00781 }
00782 
00783 /**
00784   * @brief  Set Memory increment mode.
00785   * @rmtoll CCR          MINC          LL_DMA_SetMemoryIncMode
00786   * @param  DMAx DMAx Instance
00787   * @param  Channel This parameter can be one of the following values:
00788   *         @arg @ref LL_DMA_CHANNEL_1
00789   *         @arg @ref LL_DMA_CHANNEL_2
00790   *         @arg @ref LL_DMA_CHANNEL_3
00791   *         @arg @ref LL_DMA_CHANNEL_4
00792   *         @arg @ref LL_DMA_CHANNEL_5
00793   *         @arg @ref LL_DMA_CHANNEL_6
00794   *         @arg @ref LL_DMA_CHANNEL_7
00795   * @param  MemoryOrM2MDstIncMode This parameter can be one of the following values:
00796   *         @arg @ref LL_DMA_MEMORY_INCREMENT
00797   *         @arg @ref LL_DMA_MEMORY_NOINCREMENT
00798   * @retval None
00799   */
00800 __STATIC_INLINE void LL_DMA_SetMemoryIncMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryOrM2MDstIncMode)
00801 {
00802   uint32_t dma_base_addr = (uint32_t)DMAx;
00803   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_MINC,
00804              MemoryOrM2MDstIncMode);
00805 }
00806 
00807 /**
00808   * @brief  Get Memory increment mode.
00809   * @rmtoll CCR          MINC          LL_DMA_GetMemoryIncMode
00810   * @param  DMAx DMAx Instance
00811   * @param  Channel This parameter can be one of the following values:
00812   *         @arg @ref LL_DMA_CHANNEL_1
00813   *         @arg @ref LL_DMA_CHANNEL_2
00814   *         @arg @ref LL_DMA_CHANNEL_3
00815   *         @arg @ref LL_DMA_CHANNEL_4
00816   *         @arg @ref LL_DMA_CHANNEL_5
00817   *         @arg @ref LL_DMA_CHANNEL_6
00818   *         @arg @ref LL_DMA_CHANNEL_7
00819   * @retval Returned value can be one of the following values:
00820   *         @arg @ref LL_DMA_MEMORY_INCREMENT
00821   *         @arg @ref LL_DMA_MEMORY_NOINCREMENT
00822   */
00823 __STATIC_INLINE uint32_t LL_DMA_GetMemoryIncMode(DMA_TypeDef *DMAx, uint32_t Channel)
00824 {
00825   uint32_t dma_base_addr = (uint32_t)DMAx;
00826   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
00827                    DMA_CCR_MINC));
00828 }
00829 
00830 /**
00831   * @brief  Set Peripheral size.
00832   * @rmtoll CCR          PSIZE         LL_DMA_SetPeriphSize
00833   * @param  DMAx DMAx Instance
00834   * @param  Channel This parameter can be one of the following values:
00835   *         @arg @ref LL_DMA_CHANNEL_1
00836   *         @arg @ref LL_DMA_CHANNEL_2
00837   *         @arg @ref LL_DMA_CHANNEL_3
00838   *         @arg @ref LL_DMA_CHANNEL_4
00839   *         @arg @ref LL_DMA_CHANNEL_5
00840   *         @arg @ref LL_DMA_CHANNEL_6
00841   *         @arg @ref LL_DMA_CHANNEL_7
00842   * @param  PeriphOrM2MSrcDataSize This parameter can be one of the following values:
00843   *         @arg @ref LL_DMA_PDATAALIGN_BYTE
00844   *         @arg @ref LL_DMA_PDATAALIGN_HALFWORD
00845   *         @arg @ref LL_DMA_PDATAALIGN_WORD
00846   * @retval None
00847   */
00848 __STATIC_INLINE void LL_DMA_SetPeriphSize(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphOrM2MSrcDataSize)
00849 {
00850   uint32_t dma_base_addr = (uint32_t)DMAx;
00851   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_PSIZE, 
00852              PeriphOrM2MSrcDataSize);
00853 }
00854 
00855 /**
00856   * @brief  Get Peripheral size.
00857   * @rmtoll CCR          PSIZE         LL_DMA_GetPeriphSize
00858   * @param  DMAx DMAx Instance
00859   * @param  Channel This parameter can be one of the following values:
00860   *         @arg @ref LL_DMA_CHANNEL_1
00861   *         @arg @ref LL_DMA_CHANNEL_2
00862   *         @arg @ref LL_DMA_CHANNEL_3
00863   *         @arg @ref LL_DMA_CHANNEL_4
00864   *         @arg @ref LL_DMA_CHANNEL_5
00865   *         @arg @ref LL_DMA_CHANNEL_6
00866   *         @arg @ref LL_DMA_CHANNEL_7
00867   * @retval Returned value can be one of the following values:
00868   *         @arg @ref LL_DMA_PDATAALIGN_BYTE
00869   *         @arg @ref LL_DMA_PDATAALIGN_HALFWORD
00870   *         @arg @ref LL_DMA_PDATAALIGN_WORD
00871   */
00872 __STATIC_INLINE uint32_t LL_DMA_GetPeriphSize(DMA_TypeDef *DMAx, uint32_t Channel)
00873 {
00874   uint32_t dma_base_addr = (uint32_t)DMAx;
00875   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
00876                    DMA_CCR_PSIZE));
00877 }
00878 
00879 /**
00880   * @brief  Set Memory size.
00881   * @rmtoll CCR          MSIZE         LL_DMA_SetMemorySize
00882   * @param  DMAx DMAx Instance
00883   * @param  Channel This parameter can be one of the following values:
00884   *         @arg @ref LL_DMA_CHANNEL_1
00885   *         @arg @ref LL_DMA_CHANNEL_2
00886   *         @arg @ref LL_DMA_CHANNEL_3
00887   *         @arg @ref LL_DMA_CHANNEL_4
00888   *         @arg @ref LL_DMA_CHANNEL_5
00889   *         @arg @ref LL_DMA_CHANNEL_6
00890   *         @arg @ref LL_DMA_CHANNEL_7
00891   * @param  MemoryOrM2MDstDataSize This parameter can be one of the following values:
00892   *         @arg @ref LL_DMA_MDATAALIGN_BYTE
00893   *         @arg @ref LL_DMA_MDATAALIGN_HALFWORD
00894   *         @arg @ref LL_DMA_MDATAALIGN_WORD
00895   * @retval None
00896   */
00897 __STATIC_INLINE void LL_DMA_SetMemorySize(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryOrM2MDstDataSize)
00898 {
00899   uint32_t dma_base_addr = (uint32_t)DMAx;
00900   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_MSIZE,
00901              MemoryOrM2MDstDataSize);
00902 }
00903 
00904 /**
00905   * @brief  Get Memory size.
00906   * @rmtoll CCR          MSIZE         LL_DMA_GetMemorySize
00907   * @param  DMAx DMAx Instance
00908   * @param  Channel This parameter can be one of the following values:
00909   *         @arg @ref LL_DMA_CHANNEL_1
00910   *         @arg @ref LL_DMA_CHANNEL_2
00911   *         @arg @ref LL_DMA_CHANNEL_3
00912   *         @arg @ref LL_DMA_CHANNEL_4
00913   *         @arg @ref LL_DMA_CHANNEL_5
00914   *         @arg @ref LL_DMA_CHANNEL_6
00915   *         @arg @ref LL_DMA_CHANNEL_7
00916   * @retval Returned value can be one of the following values:
00917   *         @arg @ref LL_DMA_MDATAALIGN_BYTE
00918   *         @arg @ref LL_DMA_MDATAALIGN_HALFWORD
00919   *         @arg @ref LL_DMA_MDATAALIGN_WORD
00920   */
00921 __STATIC_INLINE uint32_t LL_DMA_GetMemorySize(DMA_TypeDef *DMAx, uint32_t Channel)
00922 {
00923   uint32_t dma_base_addr = (uint32_t)DMAx;
00924   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
00925                    DMA_CCR_MSIZE));
00926 }
00927 
00928 /**
00929   * @brief  Set Channel priority level.
00930   * @rmtoll CCR          PL            LL_DMA_SetChannelPriorityLevel
00931   * @param  DMAx DMAx Instance
00932   * @param  Channel This parameter can be one of the following values:
00933   *         @arg @ref LL_DMA_CHANNEL_1
00934   *         @arg @ref LL_DMA_CHANNEL_2
00935   *         @arg @ref LL_DMA_CHANNEL_3
00936   *         @arg @ref LL_DMA_CHANNEL_4
00937   *         @arg @ref LL_DMA_CHANNEL_5
00938   *         @arg @ref LL_DMA_CHANNEL_6
00939   *         @arg @ref LL_DMA_CHANNEL_7
00940   * @param  Priority This parameter can be one of the following values:
00941   *         @arg @ref LL_DMA_PRIORITY_LOW
00942   *         @arg @ref LL_DMA_PRIORITY_MEDIUM
00943   *         @arg @ref LL_DMA_PRIORITY_HIGH
00944   *         @arg @ref LL_DMA_PRIORITY_VERYHIGH
00945   * @retval None
00946   */
00947 __STATIC_INLINE void LL_DMA_SetChannelPriorityLevel(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Priority)
00948 {
00949   uint32_t dma_base_addr = (uint32_t)DMAx;
00950   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_PL,
00951              Priority);
00952 }
00953 
00954 /**
00955   * @brief  Get Channel priority level.
00956   * @rmtoll CCR          PL            LL_DMA_GetChannelPriorityLevel
00957   * @param  DMAx DMAx Instance
00958   * @param  Channel This parameter can be one of the following values:
00959   *         @arg @ref LL_DMA_CHANNEL_1
00960   *         @arg @ref LL_DMA_CHANNEL_2
00961   *         @arg @ref LL_DMA_CHANNEL_3
00962   *         @arg @ref LL_DMA_CHANNEL_4
00963   *         @arg @ref LL_DMA_CHANNEL_5
00964   *         @arg @ref LL_DMA_CHANNEL_6
00965   *         @arg @ref LL_DMA_CHANNEL_7
00966   * @retval Returned value can be one of the following values:
00967   *         @arg @ref LL_DMA_PRIORITY_LOW
00968   *         @arg @ref LL_DMA_PRIORITY_MEDIUM
00969   *         @arg @ref LL_DMA_PRIORITY_HIGH
00970   *         @arg @ref LL_DMA_PRIORITY_VERYHIGH
00971   */
00972 __STATIC_INLINE uint32_t LL_DMA_GetChannelPriorityLevel(DMA_TypeDef *DMAx, uint32_t Channel)
00973 {
00974   uint32_t dma_base_addr = (uint32_t)DMAx;
00975   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
00976                    DMA_CCR_PL));
00977 }
00978 
00979 /**
00980   * @brief  Set Number of data to transfer.
00981   * @note   This action has no effect if
00982   *         channel is enabled.
00983   * @rmtoll CNDTR        NDT           LL_DMA_SetDataLength
00984   * @param  DMAx DMAx Instance
00985   * @param  Channel This parameter can be one of the following values:
00986   *         @arg @ref LL_DMA_CHANNEL_1
00987   *         @arg @ref LL_DMA_CHANNEL_2
00988   *         @arg @ref LL_DMA_CHANNEL_3
00989   *         @arg @ref LL_DMA_CHANNEL_4
00990   *         @arg @ref LL_DMA_CHANNEL_5
00991   *         @arg @ref LL_DMA_CHANNEL_6
00992   *         @arg @ref LL_DMA_CHANNEL_7
00993   * @param  NbData Between Min_Data = 0 and Max_Data = 0x0000FFFF
00994   * @retval None
00995   */
00996 __STATIC_INLINE void LL_DMA_SetDataLength(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t NbData)
00997 {
00998   uint32_t dma_base_addr = (uint32_t)DMAx;
00999   MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CNDTR,
01000              DMA_CNDTR_NDT, NbData);
01001 }
01002 
01003 /**
01004   * @brief  Get Number of data to transfer.
01005   * @note   Once the channel is enabled, the return value indicate the
01006   *         remaining bytes to be transmitted.
01007   * @rmtoll CNDTR        NDT           LL_DMA_GetDataLength
01008   * @param  DMAx DMAx Instance
01009   * @param  Channel This parameter can be one of the following values:
01010   *         @arg @ref LL_DMA_CHANNEL_1
01011   *         @arg @ref LL_DMA_CHANNEL_2
01012   *         @arg @ref LL_DMA_CHANNEL_3
01013   *         @arg @ref LL_DMA_CHANNEL_4
01014   *         @arg @ref LL_DMA_CHANNEL_5
01015   *         @arg @ref LL_DMA_CHANNEL_6
01016   *         @arg @ref LL_DMA_CHANNEL_7
01017   * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01018   */
01019 __STATIC_INLINE uint32_t LL_DMA_GetDataLength(DMA_TypeDef *DMAx, uint32_t Channel)
01020 {
01021   uint32_t dma_base_addr = (uint32_t)DMAx;
01022   return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CNDTR,
01023                    DMA_CNDTR_NDT));
01024 }
01025 
01026 /**
01027   * @brief  Configure the Source and Destination addresses.
01028   * @note   This API must not be called when the DMA channel is enabled.
01029   * @note   Each peripheral using DMA provides an API to get directly the register address (LL_PPP_DMA_GetRegAddr).
01030   * @rmtoll CPAR         PA            LL_DMA_ConfigAddresses\n
01031   *         CMAR         MA            LL_DMA_ConfigAddresses
01032   * @param  DMAx DMAx Instance
01033   * @param  Channel This parameter can be one of the following values:
01034   *         @arg @ref LL_DMA_CHANNEL_1
01035   *         @arg @ref LL_DMA_CHANNEL_2
01036   *         @arg @ref LL_DMA_CHANNEL_3
01037   *         @arg @ref LL_DMA_CHANNEL_4
01038   *         @arg @ref LL_DMA_CHANNEL_5
01039   *         @arg @ref LL_DMA_CHANNEL_6
01040   *         @arg @ref LL_DMA_CHANNEL_7
01041   * @param  SrcAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01042   * @param  DstAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01043   * @param  Direction This parameter can be one of the following values:
01044   *         @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
01045   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
01046   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
01047   * @retval None
01048   */
01049 __STATIC_INLINE void LL_DMA_ConfigAddresses(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcAddress,
01050                                             uint32_t DstAddress, uint32_t Direction)
01051 {
01052   uint32_t dma_base_addr = (uint32_t)DMAx;
01053   /* Direction Memory to Periph */
01054   if (Direction == LL_DMA_DIRECTION_MEMORY_TO_PERIPH)
01055   {
01056     WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CMAR, SrcAddress);
01057     WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR, DstAddress);
01058   }
01059   /* Direction Periph to Memory and Memory to Memory */
01060   else
01061   {
01062     WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR, SrcAddress);
01063     WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CMAR, DstAddress);
01064   }
01065 }
01066 
01067 /**
01068   * @brief  Set the Memory address.
01069   * @note   Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
01070   * @note   This API must not be called when the DMA channel is enabled.
01071   * @rmtoll CMAR         MA            LL_DMA_SetMemoryAddress
01072   * @param  DMAx DMAx Instance
01073   * @param  Channel This parameter can be one of the following values:
01074   *         @arg @ref LL_DMA_CHANNEL_1
01075   *         @arg @ref LL_DMA_CHANNEL_2
01076   *         @arg @ref LL_DMA_CHANNEL_3
01077   *         @arg @ref LL_DMA_CHANNEL_4
01078   *         @arg @ref LL_DMA_CHANNEL_5
01079   *         @arg @ref LL_DMA_CHANNEL_6
01080   *         @arg @ref LL_DMA_CHANNEL_7
01081   * @param  MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01082   * @retval None
01083   */
01084 __STATIC_INLINE void LL_DMA_SetMemoryAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
01085 {
01086   uint32_t dma_base_addr = (uint32_t)DMAx;
01087   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CMAR, MemoryAddress);
01088 }
01089 
01090 /**
01091   * @brief  Set the Peripheral address.
01092   * @note   Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
01093   * @note   This API must not be called when the DMA channel is enabled.
01094   * @rmtoll CPAR         PA            LL_DMA_SetPeriphAddress
01095   * @param  DMAx DMAx Instance
01096   * @param  Channel This parameter can be one of the following values:
01097   *         @arg @ref LL_DMA_CHANNEL_1
01098   *         @arg @ref LL_DMA_CHANNEL_2
01099   *         @arg @ref LL_DMA_CHANNEL_3
01100   *         @arg @ref LL_DMA_CHANNEL_4
01101   *         @arg @ref LL_DMA_CHANNEL_5
01102   *         @arg @ref LL_DMA_CHANNEL_6
01103   *         @arg @ref LL_DMA_CHANNEL_7
01104   * @param  PeriphAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01105   * @retval None
01106   */
01107 __STATIC_INLINE void LL_DMA_SetPeriphAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphAddress)
01108 {
01109   uint32_t dma_base_addr = (uint32_t)DMAx;
01110   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR, PeriphAddress);
01111 }
01112 
01113 /**
01114   * @brief  Get Memory address.
01115   * @note   Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
01116   * @rmtoll CMAR         MA            LL_DMA_GetMemoryAddress
01117   * @param  DMAx DMAx Instance
01118   * @param  Channel This parameter can be one of the following values:
01119   *         @arg @ref LL_DMA_CHANNEL_1
01120   *         @arg @ref LL_DMA_CHANNEL_2
01121   *         @arg @ref LL_DMA_CHANNEL_3
01122   *         @arg @ref LL_DMA_CHANNEL_4
01123   *         @arg @ref LL_DMA_CHANNEL_5
01124   *         @arg @ref LL_DMA_CHANNEL_6
01125   *         @arg @ref LL_DMA_CHANNEL_7
01126   * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01127   */
01128 __STATIC_INLINE uint32_t LL_DMA_GetMemoryAddress(DMA_TypeDef *DMAx, uint32_t Channel)
01129 {
01130   uint32_t dma_base_addr = (uint32_t)DMAx;
01131   return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CMAR));
01132 }
01133 
01134 /**
01135   * @brief  Get Peripheral address.
01136   * @note   Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
01137   * @rmtoll CPAR         PA            LL_DMA_GetPeriphAddress
01138   * @param  DMAx DMAx Instance
01139   * @param  Channel This parameter can be one of the following values:
01140   *         @arg @ref LL_DMA_CHANNEL_1
01141   *         @arg @ref LL_DMA_CHANNEL_2
01142   *         @arg @ref LL_DMA_CHANNEL_3
01143   *         @arg @ref LL_DMA_CHANNEL_4
01144   *         @arg @ref LL_DMA_CHANNEL_5
01145   *         @arg @ref LL_DMA_CHANNEL_6
01146   *         @arg @ref LL_DMA_CHANNEL_7
01147   * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01148   */
01149 __STATIC_INLINE uint32_t LL_DMA_GetPeriphAddress(DMA_TypeDef *DMAx, uint32_t Channel)
01150 {
01151   uint32_t dma_base_addr = (uint32_t)DMAx;
01152   return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR));
01153 }
01154 
01155 /**
01156   * @brief  Set the Memory to Memory Source address.
01157   * @note   Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
01158   * @note   This API must not be called when the DMA channel is enabled.
01159   * @rmtoll CPAR         PA            LL_DMA_SetM2MSrcAddress
01160   * @param  DMAx DMAx Instance
01161   * @param  Channel This parameter can be one of the following values:
01162   *         @arg @ref LL_DMA_CHANNEL_1
01163   *         @arg @ref LL_DMA_CHANNEL_2
01164   *         @arg @ref LL_DMA_CHANNEL_3
01165   *         @arg @ref LL_DMA_CHANNEL_4
01166   *         @arg @ref LL_DMA_CHANNEL_5
01167   *         @arg @ref LL_DMA_CHANNEL_6
01168   *         @arg @ref LL_DMA_CHANNEL_7
01169   * @param  MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01170   * @retval None
01171   */
01172 __STATIC_INLINE void LL_DMA_SetM2MSrcAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
01173 {
01174   uint32_t dma_base_addr = (uint32_t)DMAx;
01175   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR, MemoryAddress);
01176 }
01177 
01178 /**
01179   * @brief  Set the Memory to Memory Destination address.
01180   * @note   Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
01181   * @note   This API must not be called when the DMA channel is enabled.
01182   * @rmtoll CMAR         MA            LL_DMA_SetM2MDstAddress
01183   * @param  DMAx DMAx Instance
01184   * @param  Channel This parameter can be one of the following values:
01185   *         @arg @ref LL_DMA_CHANNEL_1
01186   *         @arg @ref LL_DMA_CHANNEL_2
01187   *         @arg @ref LL_DMA_CHANNEL_3
01188   *         @arg @ref LL_DMA_CHANNEL_4
01189   *         @arg @ref LL_DMA_CHANNEL_5
01190   *         @arg @ref LL_DMA_CHANNEL_6
01191   *         @arg @ref LL_DMA_CHANNEL_7
01192   * @param  MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01193   * @retval None
01194   */
01195 __STATIC_INLINE void LL_DMA_SetM2MDstAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
01196 {
01197   uint32_t dma_base_addr = (uint32_t)DMAx;
01198   WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CMAR, MemoryAddress);
01199 }
01200 
01201 /**
01202   * @brief  Get the Memory to Memory Source address.
01203   * @note   Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
01204   * @rmtoll CPAR         PA            LL_DMA_GetM2MSrcAddress
01205   * @param  DMAx DMAx Instance
01206   * @param  Channel This parameter can be one of the following values:
01207   *         @arg @ref LL_DMA_CHANNEL_1
01208   *         @arg @ref LL_DMA_CHANNEL_2
01209   *         @arg @ref LL_DMA_CHANNEL_3
01210   *         @arg @ref LL_DMA_CHANNEL_4
01211   *         @arg @ref LL_DMA_CHANNEL_5
01212   *         @arg @ref LL_DMA_CHANNEL_6
01213   *         @arg @ref LL_DMA_CHANNEL_7
01214   * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01215   */
01216 __STATIC_INLINE uint32_t LL_DMA_GetM2MSrcAddress(DMA_TypeDef *DMAx, uint32_t Channel)
01217 {
01218   uint32_t dma_base_addr = (uint32_t)DMAx;
01219   return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR));
01220 }
01221 
01222 /**
01223   * @brief  Get the Memory to Memory Destination address.
01224   * @note   Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
01225   * @rmtoll CMAR         MA            LL_DMA_GetM2MDstAddress
01226   * @param  DMAx DMAx Instance
01227   * @param  Channel This parameter can be one of the following values:
01228   *         @arg @ref LL_DMA_CHANNEL_1
01229   *         @arg @ref LL_DMA_CHANNEL_2
01230   *         @arg @ref LL_DMA_CHANNEL_3
01231   *         @arg @ref LL_DMA_CHANNEL_4
01232   *         @arg @ref LL_DMA_CHANNEL_5
01233   *         @arg @ref LL_DMA_CHANNEL_6
01234   *         @arg @ref LL_DMA_CHANNEL_7
01235   * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01236   */
01237 __STATIC_INLINE uint32_t LL_DMA_GetM2MDstAddress(DMA_TypeDef *DMAx, uint32_t Channel)
01238 {
01239   uint32_t dma_base_addr = (uint32_t)DMAx;
01240   return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CMAR));
01241 }
01242 
01243 #if defined(DMAMUX1)
01244 /**
01245   * @brief  Set DMA request for DMA Channels on DMAMUX Channel x.
01246   * @note   DMAMUX channel 0 to 6 are mapped to DMA1 channel 1 to 7.
01247   *         DMAMUX channel 7 to 13 are mapped to DMA2 channel 1 to 7.
01248   * @rmtoll CxCR         DMAREQ_ID     LL_DMA_SetPeriphRequest
01249   * @param  DMAx DMAx Instance
01250   * @param  Channel This parameter can be one of the following values:
01251   *         @arg @ref LL_DMA_CHANNEL_1
01252   *         @arg @ref LL_DMA_CHANNEL_2
01253   *         @arg @ref LL_DMA_CHANNEL_3
01254   *         @arg @ref LL_DMA_CHANNEL_4
01255   *         @arg @ref LL_DMA_CHANNEL_5
01256   *         @arg @ref LL_DMA_CHANNEL_6
01257   *         @arg @ref LL_DMA_CHANNEL_7
01258   * @param  Request This parameter can be one of the following values:
01259   *         @arg @ref LL_DMAMUX_REQ_MEM2MEM
01260   *         @arg @ref LL_DMAMUX_REQ_GENERATOR0
01261   *         @arg @ref LL_DMAMUX_REQ_GENERATOR1
01262   *         @arg @ref LL_DMAMUX_REQ_GENERATOR2
01263   *         @arg @ref LL_DMAMUX_REQ_GENERATOR3
01264   *         @arg @ref LL_DMAMUX_REQ_ADC1
01265   *         @arg @ref LL_DMAMUX_REQ_ADC2
01266   *         @arg @ref LL_DMAMUX_REQ_DAC1_CH1
01267   *         @arg @ref LL_DMAMUX_REQ_DAC1_CH2
01268   *         @arg @ref LL_DMAMUX_REQ_TIM6_UP
01269   *         @arg @ref LL_DMAMUX_REQ_TIM7_UP
01270   *         @arg @ref LL_DMAMUX_REQ_SPI1_RX
01271   *         @arg @ref LL_DMAMUX_REQ_SPI1_TX
01272   *         @arg @ref LL_DMAMUX_REQ_SPI2_RX
01273   *         @arg @ref LL_DMAMUX_REQ_SPI2_TX
01274   *         @arg @ref LL_DMAMUX_REQ_SPI3_RX
01275   *         @arg @ref LL_DMAMUX_REQ_SPI3_TX
01276   *         @arg @ref LL_DMAMUX_REQ_I2C1_RX
01277   *         @arg @ref LL_DMAMUX_REQ_I2C1_TX
01278   *         @arg @ref LL_DMAMUX_REQ_I2C2_RX
01279   *         @arg @ref LL_DMAMUX_REQ_I2C2_TX
01280   *         @arg @ref LL_DMAMUX_REQ_I2C3_RX
01281   *         @arg @ref LL_DMAMUX_REQ_I2C3_TX
01282   *         @arg @ref LL_DMAMUX_REQ_I2C4_RX
01283   *         @arg @ref LL_DMAMUX_REQ_I2C4_TX
01284   *         @arg @ref LL_DMAMUX_REQ_USART1_RX
01285   *         @arg @ref LL_DMAMUX_REQ_USART1_TX
01286   *         @arg @ref LL_DMAMUX_REQ_USART2_RX
01287   *         @arg @ref LL_DMAMUX_REQ_USART2_TX
01288   *         @arg @ref LL_DMAMUX_REQ_USART3_RX
01289   *         @arg @ref LL_DMAMUX_REQ_USART3_TX
01290   *         @arg @ref LL_DMAMUX_REQ_UART4_RX
01291   *         @arg @ref LL_DMAMUX_REQ_UART4_TX
01292   *         @arg @ref LL_DMAMUX_REQ_UART5_RX
01293   *         @arg @ref LL_DMAMUX_REQ_UART5_TX
01294   *         @arg @ref LL_DMAMUX_REQ_LPUART1_RX
01295   *         @arg @ref LL_DMAMUX_REQ_LPUART1_TX
01296   *         @arg @ref LL_DMAMUX_REQ_SAI1_A
01297   *         @arg @ref LL_DMAMUX_REQ_SAI1_B
01298   *         @arg @ref LL_DMAMUX_REQ_SAI2_A
01299   *         @arg @ref LL_DMAMUX_REQ_SAI2_B
01300   *         @arg @ref LL_DMAMUX_REQ_OSPI1
01301   *         @arg @ref LL_DMAMUX_REQ_OSPI2
01302   *         @arg @ref LL_DMAMUX_REQ_TIM1_CH1
01303   *         @arg @ref LL_DMAMUX_REQ_TIM1_CH2
01304   *         @arg @ref LL_DMAMUX_REQ_TIM1_CH3
01305   *         @arg @ref LL_DMAMUX_REQ_TIM1_CH4
01306   *         @arg @ref LL_DMAMUX_REQ_TIM1_UP
01307   *         @arg @ref LL_DMAMUX_REQ_TIM1_TRIG
01308   *         @arg @ref LL_DMAMUX_REQ_TIM1_COM
01309   *         @arg @ref LL_DMAMUX_REQ_TIM8_CH1
01310   *         @arg @ref LL_DMAMUX_REQ_TIM8_CH2
01311   *         @arg @ref LL_DMAMUX_REQ_TIM8_CH3
01312   *         @arg @ref LL_DMAMUX_REQ_TIM8_CH4
01313   *         @arg @ref LL_DMAMUX_REQ_TIM8_UP
01314   *         @arg @ref LL_DMAMUX_REQ_TIM8_TRIG
01315   *         @arg @ref LL_DMAMUX_REQ_TIM8_COM
01316   *         @arg @ref LL_DMAMUX_REQ_TIM2_CH1
01317   *         @arg @ref LL_DMAMUX_REQ_TIM2_CH2
01318   *         @arg @ref LL_DMAMUX_REQ_TIM2_CH3
01319   *         @arg @ref LL_DMAMUX_REQ_TIM2_CH4
01320   *         @arg @ref LL_DMAMUX_REQ_TIM2_UP
01321   *         @arg @ref LL_DMAMUX_REQ_TIM3_CH1
01322   *         @arg @ref LL_DMAMUX_REQ_TIM3_CH2
01323   *         @arg @ref LL_DMAMUX_REQ_TIM3_CH3
01324   *         @arg @ref LL_DMAMUX_REQ_TIM3_CH4
01325   *         @arg @ref LL_DMAMUX_REQ_TIM3_UP
01326   *         @arg @ref LL_DMAMUX_REQ_TIM3_TRIG
01327   *         @arg @ref LL_DMAMUX_REQ_TIM4_CH1
01328   *         @arg @ref LL_DMAMUX_REQ_TIM4_CH2
01329   *         @arg @ref LL_DMAMUX_REQ_TIM4_CH3
01330   *         @arg @ref LL_DMAMUX_REQ_TIM4_CH4
01331   *         @arg @ref LL_DMAMUX_REQ_TIM4_UP
01332   *         @arg @ref LL_DMAMUX_REQ_TIM5_CH1
01333   *         @arg @ref LL_DMAMUX_REQ_TIM5_CH2
01334   *         @arg @ref LL_DMAMUX_REQ_TIM5_CH3
01335   *         @arg @ref LL_DMAMUX_REQ_TIM5_CH4
01336   *         @arg @ref LL_DMAMUX_REQ_TIM5_UP
01337   *         @arg @ref LL_DMAMUX_REQ_TIM5_TRIG
01338   *         @arg @ref LL_DMAMUX_REQ_TIM15_CH1
01339   *         @arg @ref LL_DMAMUX_REQ_TIM15_UP
01340   *         @arg @ref LL_DMAMUX_REQ_TIM15_TRIG
01341   *         @arg @ref LL_DMAMUX_REQ_TIM15_COM
01342   *         @arg @ref LL_DMAMUX_REQ_TIM16_CH1
01343   *         @arg @ref LL_DMAMUX_REQ_TIM16_UP
01344   *         @arg @ref LL_DMAMUX_REQ_TIM17_CH1
01345   *         @arg @ref LL_DMAMUX_REQ_TIM17_UP
01346   *         @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT0
01347   *         @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT1
01348   *         @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT2
01349   *         @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT3
01350   *         @arg @ref LL_DMAMUX_REQ_DCMI
01351   *         @arg @ref LL_DMAMUX_REQ_DCMI_PSSI
01352   *         @arg @ref LL_DMAMUX_REQ_AES_IN
01353   *         @arg @ref LL_DMAMUX_REQ_AES_OUT
01354   *         @arg @ref LL_DMAMUX_REQ_HASH_IN
01355   * @retval None
01356   */
01357 __STATIC_INLINE void LL_DMA_SetPeriphRequest(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Request)
01358 {
01359   uint32_t dmamux_ccr_offset = ((((uint32_t)DMAx ^ (uint32_t)DMA1) >> 10U) * 7U);
01360   MODIFY_REG((DMAMUX1_Channel0 + Channel + dmamux_ccr_offset)->CCR, DMAMUX_CxCR_DMAREQ_ID, Request);
01361 }
01362 
01363 /**
01364   * @brief  Get DMA request for DMA Channels on DMAMUX Channel x.
01365   * @note   DMAMUX channel 0 to 6 are mapped to DMA1 channel 1 to 7.
01366   *         DMAMUX channel 7 to 13 are mapped to DMA2 channel 1 to 7.
01367   * @rmtoll CxCR         DMAREQ_ID     LL_DMA_GetPeriphRequest
01368   * @param  DMAx DMAx Instance
01369   * @param  Channel This parameter can be one of the following values:
01370   *         @arg @ref LL_DMA_CHANNEL_1
01371   *         @arg @ref LL_DMA_CHANNEL_2
01372   *         @arg @ref LL_DMA_CHANNEL_3
01373   *         @arg @ref LL_DMA_CHANNEL_4
01374   *         @arg @ref LL_DMA_CHANNEL_5
01375   *         @arg @ref LL_DMA_CHANNEL_6
01376   *         @arg @ref LL_DMA_CHANNEL_7
01377   * @retval Returned value can be one of the following values:
01378   *         @arg @ref LL_DMAMUX_REQ_MEM2MEM
01379   *         @arg @ref LL_DMAMUX_REQ_GENERATOR0
01380   *         @arg @ref LL_DMAMUX_REQ_GENERATOR1
01381   *         @arg @ref LL_DMAMUX_REQ_GENERATOR2
01382   *         @arg @ref LL_DMAMUX_REQ_GENERATOR3
01383   *         @arg @ref LL_DMAMUX_REQ_ADC1
01384   *         @arg @ref LL_DMAMUX_REQ_ADC2
01385   *         @arg @ref LL_DMAMUX_REQ_DAC1_CH1
01386   *         @arg @ref LL_DMAMUX_REQ_DAC1_CH2
01387   *         @arg @ref LL_DMAMUX_REQ_TIM6_UP
01388   *         @arg @ref LL_DMAMUX_REQ_TIM7_UP
01389   *         @arg @ref LL_DMAMUX_REQ_SPI1_RX
01390   *         @arg @ref LL_DMAMUX_REQ_SPI1_TX
01391   *         @arg @ref LL_DMAMUX_REQ_SPI2_RX
01392   *         @arg @ref LL_DMAMUX_REQ_SPI2_TX
01393   *         @arg @ref LL_DMAMUX_REQ_SPI3_RX
01394   *         @arg @ref LL_DMAMUX_REQ_SPI3_TX
01395   *         @arg @ref LL_DMAMUX_REQ_I2C1_RX
01396   *         @arg @ref LL_DMAMUX_REQ_I2C1_TX
01397   *         @arg @ref LL_DMAMUX_REQ_I2C2_RX
01398   *         @arg @ref LL_DMAMUX_REQ_I2C2_TX
01399   *         @arg @ref LL_DMAMUX_REQ_I2C3_RX
01400   *         @arg @ref LL_DMAMUX_REQ_I2C3_TX
01401   *         @arg @ref LL_DMAMUX_REQ_I2C4_RX
01402   *         @arg @ref LL_DMAMUX_REQ_I2C4_TX
01403   *         @arg @ref LL_DMAMUX_REQ_USART1_RX
01404   *         @arg @ref LL_DMAMUX_REQ_USART1_TX
01405   *         @arg @ref LL_DMAMUX_REQ_USART2_RX
01406   *         @arg @ref LL_DMAMUX_REQ_USART2_TX
01407   *         @arg @ref LL_DMAMUX_REQ_USART3_RX
01408   *         @arg @ref LL_DMAMUX_REQ_USART3_TX
01409   *         @arg @ref LL_DMAMUX_REQ_UART4_RX
01410   *         @arg @ref LL_DMAMUX_REQ_UART4_TX
01411   *         @arg @ref LL_DMAMUX_REQ_UART5_RX
01412   *         @arg @ref LL_DMAMUX_REQ_UART5_TX
01413   *         @arg @ref LL_DMAMUX_REQ_LPUART1_RX
01414   *         @arg @ref LL_DMAMUX_REQ_LPUART1_TX
01415   *         @arg @ref LL_DMAMUX_REQ_SAI1_A
01416   *         @arg @ref LL_DMAMUX_REQ_SAI1_B
01417   *         @arg @ref LL_DMAMUX_REQ_SAI2_A
01418   *         @arg @ref LL_DMAMUX_REQ_SAI2_B
01419   *         @arg @ref LL_DMAMUX_REQ_OSPI1
01420   *         @arg @ref LL_DMAMUX_REQ_OSPI2
01421   *         @arg @ref LL_DMAMUX_REQ_TIM1_CH1
01422   *         @arg @ref LL_DMAMUX_REQ_TIM1_CH2
01423   *         @arg @ref LL_DMAMUX_REQ_TIM1_CH3
01424   *         @arg @ref LL_DMAMUX_REQ_TIM1_CH4
01425   *         @arg @ref LL_DMAMUX_REQ_TIM1_UP
01426   *         @arg @ref LL_DMAMUX_REQ_TIM1_TRIG
01427   *         @arg @ref LL_DMAMUX_REQ_TIM1_COM
01428   *         @arg @ref LL_DMAMUX_REQ_TIM8_CH1
01429   *         @arg @ref LL_DMAMUX_REQ_TIM8_CH2
01430   *         @arg @ref LL_DMAMUX_REQ_TIM8_CH3
01431   *         @arg @ref LL_DMAMUX_REQ_TIM8_CH4
01432   *         @arg @ref LL_DMAMUX_REQ_TIM8_UP
01433   *         @arg @ref LL_DMAMUX_REQ_TIM8_TRIG
01434   *         @arg @ref LL_DMAMUX_REQ_TIM8_COM
01435   *         @arg @ref LL_DMAMUX_REQ_TIM2_CH1
01436   *         @arg @ref LL_DMAMUX_REQ_TIM2_CH2
01437   *         @arg @ref LL_DMAMUX_REQ_TIM2_CH3
01438   *         @arg @ref LL_DMAMUX_REQ_TIM2_CH4
01439   *         @arg @ref LL_DMAMUX_REQ_TIM2_UP
01440   *         @arg @ref LL_DMAMUX_REQ_TIM3_CH1
01441   *         @arg @ref LL_DMAMUX_REQ_TIM3_CH2
01442   *         @arg @ref LL_DMAMUX_REQ_TIM3_CH3
01443   *         @arg @ref LL_DMAMUX_REQ_TIM3_CH4
01444   *         @arg @ref LL_DMAMUX_REQ_TIM3_UP
01445   *         @arg @ref LL_DMAMUX_REQ_TIM3_TRIG
01446   *         @arg @ref LL_DMAMUX_REQ_TIM4_CH1
01447   *         @arg @ref LL_DMAMUX_REQ_TIM4_CH2
01448   *         @arg @ref LL_DMAMUX_REQ_TIM4_CH3
01449   *         @arg @ref LL_DMAMUX_REQ_TIM4_CH4
01450   *         @arg @ref LL_DMAMUX_REQ_TIM4_UP
01451   *         @arg @ref LL_DMAMUX_REQ_TIM5_CH1
01452   *         @arg @ref LL_DMAMUX_REQ_TIM5_CH2
01453   *         @arg @ref LL_DMAMUX_REQ_TIM5_CH3
01454   *         @arg @ref LL_DMAMUX_REQ_TIM5_CH4
01455   *         @arg @ref LL_DMAMUX_REQ_TIM5_UP
01456   *         @arg @ref LL_DMAMUX_REQ_TIM5_TRIG
01457   *         @arg @ref LL_DMAMUX_REQ_TIM15_CH1
01458   *         @arg @ref LL_DMAMUX_REQ_TIM15_UP
01459   *         @arg @ref LL_DMAMUX_REQ_TIM15_TRIG
01460   *         @arg @ref LL_DMAMUX_REQ_TIM15_COM
01461   *         @arg @ref LL_DMAMUX_REQ_TIM16_CH1
01462   *         @arg @ref LL_DMAMUX_REQ_TIM16_UP
01463   *         @arg @ref LL_DMAMUX_REQ_TIM17_CH1
01464   *         @arg @ref LL_DMAMUX_REQ_TIM17_UP
01465   *         @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT0
01466   *         @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT1
01467   *         @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT2
01468   *         @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT3
01469   *         @arg @ref LL_DMAMUX_REQ_DCMI
01470   *         @arg @ref LL_DMAMUX_REQ_DCMI_PSSI
01471   *         @arg @ref LL_DMAMUX_REQ_AES_IN
01472   *         @arg @ref LL_DMAMUX_REQ_AES_OUT
01473   *         @arg @ref LL_DMAMUX_REQ_HASH_IN
01474   */
01475 __STATIC_INLINE uint32_t LL_DMA_GetPeriphRequest(DMA_TypeDef *DMAx, uint32_t Channel)
01476 {
01477   uint32_t dmamux_ccr_offset = ((((uint32_t)DMAx ^ (uint32_t)DMA1) >> 10U) * 7U);
01478   return (READ_BIT((DMAMUX1_Channel0 + Channel + dmamux_ccr_offset)->CCR, DMAMUX_CxCR_DMAREQ_ID));
01479 }
01480 
01481 #else
01482 /**
01483   * @brief  Set DMA request for DMA instance on Channel x.
01484   * @note   Please refer to Reference Manual to get the available mapping of Request value link to Channel Selection.
01485   * @rmtoll CSELR        C1S           LL_DMA_SetPeriphRequest\n
01486   *         CSELR        C2S           LL_DMA_SetPeriphRequest\n
01487   *         CSELR        C3S           LL_DMA_SetPeriphRequest\n
01488   *         CSELR        C4S           LL_DMA_SetPeriphRequest\n
01489   *         CSELR        C5S           LL_DMA_SetPeriphRequest\n
01490   *         CSELR        C6S           LL_DMA_SetPeriphRequest\n
01491   *         CSELR        C7S           LL_DMA_SetPeriphRequest
01492   * @param  DMAx DMAx Instance
01493   * @param  Channel This parameter can be one of the following values:
01494   *         @arg @ref LL_DMA_CHANNEL_1
01495   *         @arg @ref LL_DMA_CHANNEL_2
01496   *         @arg @ref LL_DMA_CHANNEL_3
01497   *         @arg @ref LL_DMA_CHANNEL_4
01498   *         @arg @ref LL_DMA_CHANNEL_5
01499   *         @arg @ref LL_DMA_CHANNEL_6
01500   *         @arg @ref LL_DMA_CHANNEL_7
01501   * @param  PeriphRequest This parameter can be one of the following values:
01502   *         @arg @ref LL_DMA_REQUEST_0
01503   *         @arg @ref LL_DMA_REQUEST_1
01504   *         @arg @ref LL_DMA_REQUEST_2
01505   *         @arg @ref LL_DMA_REQUEST_3
01506   *         @arg @ref LL_DMA_REQUEST_4
01507   *         @arg @ref LL_DMA_REQUEST_5
01508   *         @arg @ref LL_DMA_REQUEST_6
01509   *         @arg @ref LL_DMA_REQUEST_7
01510   * @retval None
01511   */
01512 __STATIC_INLINE void LL_DMA_SetPeriphRequest(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphRequest)
01513 {
01514   MODIFY_REG(((DMA_Request_TypeDef *)((uint32_t)((uint32_t)DMAx + DMA_CSELR_OFFSET)))->CSELR,
01515              DMA_CSELR_C1S << ((Channel) * 4U), PeriphRequest << DMA_POSITION_CSELR_CXS);
01516 }
01517 
01518 /**
01519   * @brief  Get DMA request for DMA instance on Channel x.
01520   * @rmtoll CSELR        C1S           LL_DMA_GetPeriphRequest\n
01521   *         CSELR        C2S           LL_DMA_GetPeriphRequest\n
01522   *         CSELR        C3S           LL_DMA_GetPeriphRequest\n
01523   *         CSELR        C4S           LL_DMA_GetPeriphRequest\n
01524   *         CSELR        C5S           LL_DMA_GetPeriphRequest\n
01525   *         CSELR        C6S           LL_DMA_GetPeriphRequest\n
01526   *         CSELR        C7S           LL_DMA_GetPeriphRequest
01527   * @param  DMAx DMAx Instance
01528   * @param  Channel This parameter can be one of the following values:
01529   *         @arg @ref LL_DMA_CHANNEL_1
01530   *         @arg @ref LL_DMA_CHANNEL_2
01531   *         @arg @ref LL_DMA_CHANNEL_3
01532   *         @arg @ref LL_DMA_CHANNEL_4
01533   *         @arg @ref LL_DMA_CHANNEL_5
01534   *         @arg @ref LL_DMA_CHANNEL_6
01535   *         @arg @ref LL_DMA_CHANNEL_7
01536   * @retval Returned value can be one of the following values:
01537   *         @arg @ref LL_DMA_REQUEST_0
01538   *         @arg @ref LL_DMA_REQUEST_1
01539   *         @arg @ref LL_DMA_REQUEST_2
01540   *         @arg @ref LL_DMA_REQUEST_3
01541   *         @arg @ref LL_DMA_REQUEST_4
01542   *         @arg @ref LL_DMA_REQUEST_5
01543   *         @arg @ref LL_DMA_REQUEST_6
01544   *         @arg @ref LL_DMA_REQUEST_7
01545   */
01546 __STATIC_INLINE uint32_t LL_DMA_GetPeriphRequest(DMA_TypeDef *DMAx, uint32_t Channel)
01547 {
01548   return (READ_BIT(((DMA_Request_TypeDef *)((uint32_t)((uint32_t)DMAx + DMA_CSELR_OFFSET)))->CSELR,
01549                    DMA_CSELR_C1S << ((Channel) * 4U)) >> DMA_POSITION_CSELR_CXS);
01550 }
01551 
01552 #endif /* DMAMUX1 */
01553 /**
01554   * @}
01555   */
01556 
01557 /** @defgroup DMA_LL_EF_FLAG_Management FLAG_Management
01558   * @{
01559   */
01560 
01561 /**
01562   * @brief  Get Channel 1 global interrupt flag.
01563   * @rmtoll ISR          GIF1          LL_DMA_IsActiveFlag_GI1
01564   * @param  DMAx DMAx Instance
01565   * @retval State of bit (1 or 0).
01566   */
01567 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI1(DMA_TypeDef *DMAx)
01568 {
01569   return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF1) == (DMA_ISR_GIF1)) ? 1UL : 0UL);
01570 }
01571 
01572 /**
01573   * @brief  Get Channel 2 global interrupt flag.
01574   * @rmtoll ISR          GIF2          LL_DMA_IsActiveFlag_GI2
01575   * @param  DMAx DMAx Instance
01576   * @retval State of bit (1 or 0).
01577   */
01578 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI2(DMA_TypeDef *DMAx)
01579 {
01580   return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF2) == (DMA_ISR_GIF2)) ? 1UL : 0UL);
01581 }
01582 
01583 /**
01584   * @brief  Get Channel 3 global interrupt flag.
01585   * @rmtoll ISR          GIF3          LL_DMA_IsActiveFlag_GI3
01586   * @param  DMAx DMAx Instance
01587   * @retval State of bit (1 or 0).
01588   */
01589 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI3(DMA_TypeDef *DMAx)
01590 {
01591   return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF3) == (DMA_ISR_GIF3)) ? 1UL : 0UL);
01592 }
01593 
01594 /**
01595   * @brief  Get Channel 4 global interrupt flag.
01596   * @rmtoll ISR          GIF4          LL_DMA_IsActiveFlag_GI4
01597   * @param  DMAx DMAx Instance
01598   * @retval State of bit (1 or 0).
01599   */
01600 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI4(DMA_TypeDef *DMAx)
01601 {
01602   return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF4) == (DMA_ISR_GIF4)) ? 1UL : 0UL);
01603 }
01604 
01605 /**
01606   * @brief  Get Channel 5 global interrupt flag.
01607   * @rmtoll ISR          GIF5          LL_DMA_IsActiveFlag_GI5
01608   * @param  DMAx DMAx Instance
01609   * @retval State of bit (1 or 0).
01610   */
01611 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI5(DMA_TypeDef *DMAx)
01612 {
01613   return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF5) == (DMA_ISR_GIF5)) ? 1UL : 0UL);
01614 }
01615 
01616 /**
01617   * @brief  Get Channel 6 global interrupt flag.
01618   * @rmtoll ISR          GIF6          LL_DMA_IsActiveFlag_GI6
01619   * @param  DMAx DMAx Instance
01620   * @retval State of bit (1 or 0).
01621   */
01622 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI6(DMA_TypeDef *DMAx)
01623 {
01624   return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF6) == (DMA_ISR_GIF6)) ? 1UL : 0UL);
01625 }
01626 
01627 /**
01628   * @brief  Get Channel 7 global interrupt flag.
01629   * @rmtoll ISR          GIF7          LL_DMA_IsActiveFlag_GI7
01630   * @param  DMAx DMAx Instance
01631   * @retval State of bit (1 or 0).
01632   */
01633 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI7(DMA_TypeDef *DMAx)
01634 {
01635   return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF7) == (DMA_ISR_GIF7)) ? 1UL : 0UL);
01636 }
01637 
01638 /**
01639   * @brief  Get Channel 1 transfer complete flag.
01640   * @rmtoll ISR          TCIF1         LL_DMA_IsActiveFlag_TC1
01641   * @param  DMAx DMAx Instance
01642   * @retval State of bit (1 or 0).
01643   */
01644 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC1(DMA_TypeDef *DMAx)
01645 {
01646   return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF1) == (DMA_ISR_TCIF1)) ? 1UL : 0UL);
01647 }
01648 
01649 /**
01650   * @brief  Get Channel 2 transfer complete flag.
01651   * @rmtoll ISR          TCIF2         LL_DMA_IsActiveFlag_TC2
01652   * @param  DMAx DMAx Instance
01653   * @retval State of bit (1 or 0).
01654   */
01655 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC2(DMA_TypeDef *DMAx)
01656 {
01657   return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF2) == (DMA_ISR_TCIF2)) ? 1UL : 0UL);
01658 }
01659 
01660 /**
01661   * @brief  Get Channel 3 transfer complete flag.
01662   * @rmtoll ISR          TCIF3         LL_DMA_IsActiveFlag_TC3
01663   * @param  DMAx DMAx Instance
01664   * @retval State of bit (1 or 0).
01665   */
01666 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC3(DMA_TypeDef *DMAx)
01667 {
01668   return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF3) == (DMA_ISR_TCIF3)) ? 1UL : 0UL);
01669 }
01670 
01671 /**
01672   * @brief  Get Channel 4 transfer complete flag.
01673   * @rmtoll ISR          TCIF4         LL_DMA_IsActiveFlag_TC4
01674   * @param  DMAx DMAx Instance
01675   * @retval State of bit (1 or 0).
01676   */
01677 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC4(DMA_TypeDef *DMAx)
01678 {
01679   return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF4) == (DMA_ISR_TCIF4)) ? 1UL : 0UL);
01680 }
01681 
01682 /**
01683   * @brief  Get Channel 5 transfer complete flag.
01684   * @rmtoll ISR          TCIF5         LL_DMA_IsActiveFlag_TC5
01685   * @param  DMAx DMAx Instance
01686   * @retval State of bit (1 or 0).
01687   */
01688 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC5(DMA_TypeDef *DMAx)
01689 {
01690   return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF5) == (DMA_ISR_TCIF5)) ? 1UL : 0UL);
01691 }
01692 
01693 /**
01694   * @brief  Get Channel 6 transfer complete flag.
01695   * @rmtoll ISR          TCIF6         LL_DMA_IsActiveFlag_TC6
01696   * @param  DMAx DMAx Instance
01697   * @retval State of bit (1 or 0).
01698   */
01699 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC6(DMA_TypeDef *DMAx)
01700 {
01701   return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF6) == (DMA_ISR_TCIF6)) ? 1UL : 0UL);
01702 }
01703 
01704 /**
01705   * @brief  Get Channel 7 transfer complete flag.
01706   * @rmtoll ISR          TCIF7         LL_DMA_IsActiveFlag_TC7
01707   * @param  DMAx DMAx Instance
01708   * @retval State of bit (1 or 0).
01709   */
01710 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC7(DMA_TypeDef *DMAx)
01711 {
01712   return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF7) == (DMA_ISR_TCIF7)) ? 1UL : 0UL);
01713 }
01714 
01715 /**
01716   * @brief  Get Channel 1 half transfer flag.
01717   * @rmtoll ISR          HTIF1         LL_DMA_IsActiveFlag_HT1
01718   * @param  DMAx DMAx Instance
01719   * @retval State of bit (1 or 0).
01720   */
01721 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT1(DMA_TypeDef *DMAx)
01722 {
01723   return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF1) == (DMA_ISR_HTIF1)) ? 1UL : 0UL);
01724 }
01725 
01726 /**
01727   * @brief  Get Channel 2 half transfer flag.
01728   * @rmtoll ISR          HTIF2         LL_DMA_IsActiveFlag_HT2
01729   * @param  DMAx DMAx Instance
01730   * @retval State of bit (1 or 0).
01731   */
01732 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT2(DMA_TypeDef *DMAx)
01733 {
01734   return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF2) == (DMA_ISR_HTIF2)) ? 1UL : 0UL);
01735 }
01736 
01737 /**
01738   * @brief  Get Channel 3 half transfer flag.
01739   * @rmtoll ISR          HTIF3         LL_DMA_IsActiveFlag_HT3
01740   * @param  DMAx DMAx Instance
01741   * @retval State of bit (1 or 0).
01742   */
01743 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT3(DMA_TypeDef *DMAx)
01744 {
01745   return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF3) == (DMA_ISR_HTIF3)) ? 1UL : 0UL);
01746 }
01747 
01748 /**
01749   * @brief  Get Channel 4 half transfer flag.
01750   * @rmtoll ISR          HTIF4         LL_DMA_IsActiveFlag_HT4
01751   * @param  DMAx DMAx Instance
01752   * @retval State of bit (1 or 0).
01753   */
01754 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT4(DMA_TypeDef *DMAx)
01755 {
01756   return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF4) == (DMA_ISR_HTIF4)) ? 1UL : 0UL);
01757 }
01758 
01759 /**
01760   * @brief  Get Channel 5 half transfer flag.
01761   * @rmtoll ISR          HTIF5         LL_DMA_IsActiveFlag_HT5
01762   * @param  DMAx DMAx Instance
01763   * @retval State of bit (1 or 0).
01764   */
01765 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT5(DMA_TypeDef *DMAx)
01766 {
01767   return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF5) == (DMA_ISR_HTIF5)) ? 1UL : 0UL);
01768 }
01769 
01770 /**
01771   * @brief  Get Channel 6 half transfer flag.
01772   * @rmtoll ISR          HTIF6         LL_DMA_IsActiveFlag_HT6
01773   * @param  DMAx DMAx Instance
01774   * @retval State of bit (1 or 0).
01775   */
01776 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT6(DMA_TypeDef *DMAx)
01777 {
01778   return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF6) == (DMA_ISR_HTIF6)) ? 1UL : 0UL);
01779 }
01780 
01781 /**
01782   * @brief  Get Channel 7 half transfer flag.
01783   * @rmtoll ISR          HTIF7         LL_DMA_IsActiveFlag_HT7
01784   * @param  DMAx DMAx Instance
01785   * @retval State of bit (1 or 0).
01786   */
01787 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT7(DMA_TypeDef *DMAx)
01788 {
01789   return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF7) == (DMA_ISR_HTIF7)) ? 1UL : 0UL);
01790 }
01791 
01792 /**
01793   * @brief  Get Channel 1 transfer error flag.
01794   * @rmtoll ISR          TEIF1         LL_DMA_IsActiveFlag_TE1
01795   * @param  DMAx DMAx Instance
01796   * @retval State of bit (1 or 0).
01797   */
01798 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE1(DMA_TypeDef *DMAx)
01799 {
01800   return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF1) == (DMA_ISR_TEIF1)) ? 1UL : 0UL);
01801 }
01802 
01803 /**
01804   * @brief  Get Channel 2 transfer error flag.
01805   * @rmtoll ISR          TEIF2         LL_DMA_IsActiveFlag_TE2
01806   * @param  DMAx DMAx Instance
01807   * @retval State of bit (1 or 0).
01808   */
01809 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE2(DMA_TypeDef *DMAx)
01810 {
01811   return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF2) == (DMA_ISR_TEIF2)) ? 1UL : 0UL);
01812 }
01813 
01814 /**
01815   * @brief  Get Channel 3 transfer error flag.
01816   * @rmtoll ISR          TEIF3         LL_DMA_IsActiveFlag_TE3
01817   * @param  DMAx DMAx Instance
01818   * @retval State of bit (1 or 0).
01819   */
01820 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE3(DMA_TypeDef *DMAx)
01821 {
01822   return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF3) == (DMA_ISR_TEIF3)) ? 1UL : 0UL);
01823 }
01824 
01825 /**
01826   * @brief  Get Channel 4 transfer error flag.
01827   * @rmtoll ISR          TEIF4         LL_DMA_IsActiveFlag_TE4
01828   * @param  DMAx DMAx Instance
01829   * @retval State of bit (1 or 0).
01830   */
01831 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE4(DMA_TypeDef *DMAx)
01832 {
01833   return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF4) == (DMA_ISR_TEIF4)) ? 1UL : 0UL);
01834 }
01835 
01836 /**
01837   * @brief  Get Channel 5 transfer error flag.
01838   * @rmtoll ISR          TEIF5         LL_DMA_IsActiveFlag_TE5
01839   * @param  DMAx DMAx Instance
01840   * @retval State of bit (1 or 0).
01841   */
01842 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE5(DMA_TypeDef *DMAx)
01843 {
01844   return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF5) == (DMA_ISR_TEIF5)) ? 1UL : 0UL);
01845 }
01846 
01847 /**
01848   * @brief  Get Channel 6 transfer error flag.
01849   * @rmtoll ISR          TEIF6         LL_DMA_IsActiveFlag_TE6
01850   * @param  DMAx DMAx Instance
01851   * @retval State of bit (1 or 0).
01852   */
01853 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE6(DMA_TypeDef *DMAx)
01854 {
01855   return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF6) == (DMA_ISR_TEIF6)) ? 1UL : 0UL);
01856 }
01857 
01858 /**
01859   * @brief  Get Channel 7 transfer error flag.
01860   * @rmtoll ISR          TEIF7         LL_DMA_IsActiveFlag_TE7
01861   * @param  DMAx DMAx Instance
01862   * @retval State of bit (1 or 0).
01863   */
01864 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE7(DMA_TypeDef *DMAx)
01865 {
01866   return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF7) == (DMA_ISR_TEIF7)) ? 1UL : 0UL);
01867 }
01868 
01869 /**
01870   * @brief  Clear Channel 1 global interrupt flag.
01871   * @note Do not Clear Channel 1 global interrupt flag when the channel in ON.
01872     Instead clear specific flags transfer complete, half transfer & transfer
01873     error flag with LL_DMA_ClearFlag_TC1, LL_DMA_ClearFlag_HT1,
01874     LL_DMA_ClearFlag_TE1. bug 2.4.1/2.5.1 in Product Errata Sheet.
01875   * @rmtoll IFCR         CGIF1         LL_DMA_ClearFlag_GI1
01876   * @param  DMAx DMAx Instance
01877   * @retval None
01878   */
01879 __STATIC_INLINE void LL_DMA_ClearFlag_GI1(DMA_TypeDef *DMAx)
01880 {
01881   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF1);
01882 }
01883 
01884 /**
01885   * @brief  Clear Channel 2 global interrupt flag.
01886   * @note Do not Clear Channel 2 global interrupt flag when the channel in ON.
01887     Instead clear specific flags transfer complete, half transfer & transfer
01888     error flag with LL_DMA_ClearFlag_TC2, LL_DMA_ClearFlag_HT2,
01889     LL_DMA_ClearFlag_TE2. bug id 2.4.1/2.5.1 in Product Errata Sheet.
01890   * @rmtoll IFCR         CGIF2         LL_DMA_ClearFlag_GI2
01891   * @param  DMAx DMAx Instance
01892   * @retval None
01893   */
01894 __STATIC_INLINE void LL_DMA_ClearFlag_GI2(DMA_TypeDef *DMAx)
01895 {
01896   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF2);
01897 }
01898 
01899 /**
01900   * @brief  Clear Channel 3 global interrupt flag.
01901   * @note Do not Clear Channel 3 global interrupt flag when the channel in ON.
01902     Instead clear specific flags transfer complete, half transfer & transfer
01903     error flag with LL_DMA_ClearFlag_TC3, LL_DMA_ClearFlag_HT3,
01904     LL_DMA_ClearFlag_TE3. bug id 2.4.1/2.5.1 in Product Errata Sheet.
01905   * @rmtoll IFCR         CGIF3         LL_DMA_ClearFlag_GI3
01906   * @param  DMAx DMAx Instance
01907   * @retval None
01908   */
01909 __STATIC_INLINE void LL_DMA_ClearFlag_GI3(DMA_TypeDef *DMAx)
01910 {
01911   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF3);
01912 }
01913 
01914 /**
01915   * @brief  Clear Channel 4 global interrupt flag.
01916   * @note Do not Clear Channel 4 global interrupt flag when the channel in ON.
01917     Instead clear specific flags transfer complete, half transfer & transfer
01918     error flag with LL_DMA_ClearFlag_TC4, LL_DMA_ClearFlag_HT4,
01919     LL_DMA_ClearFlag_TE4. bug id 2.4.1/2.5.1 in Product Errata Sheet.
01920   * @rmtoll IFCR         CGIF4         LL_DMA_ClearFlag_GI4
01921   * @param  DMAx DMAx Instance
01922   * @retval None
01923   */
01924 __STATIC_INLINE void LL_DMA_ClearFlag_GI4(DMA_TypeDef *DMAx)
01925 {
01926   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF4);
01927 }
01928 
01929 /**
01930   * @brief  Clear Channel 5 global interrupt flag.
01931   * @note Do not Clear Channel 5 global interrupt flag when the channel in ON.
01932     Instead clear specific flags transfer complete, half transfer & transfer
01933     error flag with LL_DMA_ClearFlag_TC5, LL_DMA_ClearFlag_HT5,
01934     LL_DMA_ClearFlag_TE5. bug id 2.4.1/2.5.1 in Product Errata Sheet.
01935   * @rmtoll IFCR         CGIF5         LL_DMA_ClearFlag_GI5
01936   * @param  DMAx DMAx Instance
01937   * @retval None
01938   */
01939 __STATIC_INLINE void LL_DMA_ClearFlag_GI5(DMA_TypeDef *DMAx)
01940 {
01941   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF5);
01942 }
01943 
01944 /**
01945   * @brief  Clear Channel 6 global interrupt flag.
01946   * @note Do not Clear Channel 6 global interrupt flag when the channel in ON.
01947     Instead clear specific flags transfer complete, half transfer & transfer
01948     error flag with LL_DMA_ClearFlag_TC6, LL_DMA_ClearFlag_HT6,
01949     LL_DMA_ClearFlag_TE6. bug id 2.4.1/2.5.1 in Product Errata Sheet.
01950   * @rmtoll IFCR         CGIF6         LL_DMA_ClearFlag_GI6
01951   * @param  DMAx DMAx Instance
01952   * @retval None
01953   */
01954 __STATIC_INLINE void LL_DMA_ClearFlag_GI6(DMA_TypeDef *DMAx)
01955 {
01956   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF6);
01957 }
01958 
01959 /**
01960   * @brief  Clear Channel 7 global interrupt flag.
01961   * @note Do not Clear Channel 7 global interrupt flag when the channel in ON.
01962     Instead clear specific flags transfer complete, half transfer & transfer
01963     error flag with LL_DMA_ClearFlag_TC7, LL_DMA_ClearFlag_HT7,
01964     LL_DMA_ClearFlag_TE7. bug id 2.4.1/2.5.1 in Product Errata Sheet.
01965   * @rmtoll IFCR         CGIF7         LL_DMA_ClearFlag_GI7
01966   * @param  DMAx DMAx Instance
01967   * @retval None
01968   */
01969 __STATIC_INLINE void LL_DMA_ClearFlag_GI7(DMA_TypeDef *DMAx)
01970 {
01971   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF7);
01972 }
01973 
01974 /**
01975   * @brief  Clear Channel 1  transfer complete flag.
01976   * @rmtoll IFCR         CTCIF1        LL_DMA_ClearFlag_TC1
01977   * @param  DMAx DMAx Instance
01978   * @retval None
01979   */
01980 __STATIC_INLINE void LL_DMA_ClearFlag_TC1(DMA_TypeDef *DMAx)
01981 {
01982   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF1);
01983 }
01984 
01985 /**
01986   * @brief  Clear Channel 2  transfer complete flag.
01987   * @rmtoll IFCR         CTCIF2        LL_DMA_ClearFlag_TC2
01988   * @param  DMAx DMAx Instance
01989   * @retval None
01990   */
01991 __STATIC_INLINE void LL_DMA_ClearFlag_TC2(DMA_TypeDef *DMAx)
01992 {
01993   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF2);
01994 }
01995 
01996 /**
01997   * @brief  Clear Channel 3  transfer complete flag.
01998   * @rmtoll IFCR         CTCIF3        LL_DMA_ClearFlag_TC3
01999   * @param  DMAx DMAx Instance
02000   * @retval None
02001   */
02002 __STATIC_INLINE void LL_DMA_ClearFlag_TC3(DMA_TypeDef *DMAx)
02003 {
02004   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF3);
02005 }
02006 
02007 /**
02008   * @brief  Clear Channel 4  transfer complete flag.
02009   * @rmtoll IFCR         CTCIF4        LL_DMA_ClearFlag_TC4
02010   * @param  DMAx DMAx Instance
02011   * @retval None
02012   */
02013 __STATIC_INLINE void LL_DMA_ClearFlag_TC4(DMA_TypeDef *DMAx)
02014 {
02015   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF4);
02016 }
02017 
02018 /**
02019   * @brief  Clear Channel 5  transfer complete flag.
02020   * @rmtoll IFCR         CTCIF5        LL_DMA_ClearFlag_TC5
02021   * @param  DMAx DMAx Instance
02022   * @retval None
02023   */
02024 __STATIC_INLINE void LL_DMA_ClearFlag_TC5(DMA_TypeDef *DMAx)
02025 {
02026   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF5);
02027 }
02028 
02029 /**
02030   * @brief  Clear Channel 6  transfer complete flag.
02031   * @rmtoll IFCR         CTCIF6        LL_DMA_ClearFlag_TC6
02032   * @param  DMAx DMAx Instance
02033   * @retval None
02034   */
02035 __STATIC_INLINE void LL_DMA_ClearFlag_TC6(DMA_TypeDef *DMAx)
02036 {
02037   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF6);
02038 }
02039 
02040 /**
02041   * @brief  Clear Channel 7  transfer complete flag.
02042   * @rmtoll IFCR         CTCIF7        LL_DMA_ClearFlag_TC7
02043   * @param  DMAx DMAx Instance
02044   * @retval None
02045   */
02046 __STATIC_INLINE void LL_DMA_ClearFlag_TC7(DMA_TypeDef *DMAx)
02047 {
02048   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF7);
02049 }
02050 
02051 /**
02052   * @brief  Clear Channel 1  half transfer flag.
02053   * @rmtoll IFCR         CHTIF1        LL_DMA_ClearFlag_HT1
02054   * @param  DMAx DMAx Instance
02055   * @retval None
02056   */
02057 __STATIC_INLINE void LL_DMA_ClearFlag_HT1(DMA_TypeDef *DMAx)
02058 {
02059   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF1);
02060 }
02061 
02062 /**
02063   * @brief  Clear Channel 2  half transfer flag.
02064   * @rmtoll IFCR         CHTIF2        LL_DMA_ClearFlag_HT2
02065   * @param  DMAx DMAx Instance
02066   * @retval None
02067   */
02068 __STATIC_INLINE void LL_DMA_ClearFlag_HT2(DMA_TypeDef *DMAx)
02069 {
02070   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF2);
02071 }
02072 
02073 /**
02074   * @brief  Clear Channel 3  half transfer flag.
02075   * @rmtoll IFCR         CHTIF3        LL_DMA_ClearFlag_HT3
02076   * @param  DMAx DMAx Instance
02077   * @retval None
02078   */
02079 __STATIC_INLINE void LL_DMA_ClearFlag_HT3(DMA_TypeDef *DMAx)
02080 {
02081   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF3);
02082 }
02083 
02084 /**
02085   * @brief  Clear Channel 4  half transfer flag.
02086   * @rmtoll IFCR         CHTIF4        LL_DMA_ClearFlag_HT4
02087   * @param  DMAx DMAx Instance
02088   * @retval None
02089   */
02090 __STATIC_INLINE void LL_DMA_ClearFlag_HT4(DMA_TypeDef *DMAx)
02091 {
02092   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF4);
02093 }
02094 
02095 /**
02096   * @brief  Clear Channel 5  half transfer flag.
02097   * @rmtoll IFCR         CHTIF5        LL_DMA_ClearFlag_HT5
02098   * @param  DMAx DMAx Instance
02099   * @retval None
02100   */
02101 __STATIC_INLINE void LL_DMA_ClearFlag_HT5(DMA_TypeDef *DMAx)
02102 {
02103   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF5);
02104 }
02105 
02106 /**
02107   * @brief  Clear Channel 6  half transfer flag.
02108   * @rmtoll IFCR         CHTIF6        LL_DMA_ClearFlag_HT6
02109   * @param  DMAx DMAx Instance
02110   * @retval None
02111   */
02112 __STATIC_INLINE void LL_DMA_ClearFlag_HT6(DMA_TypeDef *DMAx)
02113 {
02114   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF6);
02115 }
02116 
02117 /**
02118   * @brief  Clear Channel 7  half transfer flag.
02119   * @rmtoll IFCR         CHTIF7        LL_DMA_ClearFlag_HT7
02120   * @param  DMAx DMAx Instance
02121   * @retval None
02122   */
02123 __STATIC_INLINE void LL_DMA_ClearFlag_HT7(DMA_TypeDef *DMAx)
02124 {
02125   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF7);
02126 }
02127 
02128 /**
02129   * @brief  Clear Channel 1 transfer error flag.
02130   * @rmtoll IFCR         CTEIF1        LL_DMA_ClearFlag_TE1
02131   * @param  DMAx DMAx Instance
02132   * @retval None
02133   */
02134 __STATIC_INLINE void LL_DMA_ClearFlag_TE1(DMA_TypeDef *DMAx)
02135 {
02136   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF1);
02137 }
02138 
02139 /**
02140   * @brief  Clear Channel 2 transfer error flag.
02141   * @rmtoll IFCR         CTEIF2        LL_DMA_ClearFlag_TE2
02142   * @param  DMAx DMAx Instance
02143   * @retval None
02144   */
02145 __STATIC_INLINE void LL_DMA_ClearFlag_TE2(DMA_TypeDef *DMAx)
02146 {
02147   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF2);
02148 }
02149 
02150 /**
02151   * @brief  Clear Channel 3 transfer error flag.
02152   * @rmtoll IFCR         CTEIF3        LL_DMA_ClearFlag_TE3
02153   * @param  DMAx DMAx Instance
02154   * @retval None
02155   */
02156 __STATIC_INLINE void LL_DMA_ClearFlag_TE3(DMA_TypeDef *DMAx)
02157 {
02158   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF3);
02159 }
02160 
02161 /**
02162   * @brief  Clear Channel 4 transfer error flag.
02163   * @rmtoll IFCR         CTEIF4        LL_DMA_ClearFlag_TE4
02164   * @param  DMAx DMAx Instance
02165   * @retval None
02166   */
02167 __STATIC_INLINE void LL_DMA_ClearFlag_TE4(DMA_TypeDef *DMAx)
02168 {
02169   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF4);
02170 }
02171 
02172 /**
02173   * @brief  Clear Channel 5 transfer error flag.
02174   * @rmtoll IFCR         CTEIF5        LL_DMA_ClearFlag_TE5
02175   * @param  DMAx DMAx Instance
02176   * @retval None
02177   */
02178 __STATIC_INLINE void LL_DMA_ClearFlag_TE5(DMA_TypeDef *DMAx)
02179 {
02180   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF5);
02181 }
02182 
02183 /**
02184   * @brief  Clear Channel 6 transfer error flag.
02185   * @rmtoll IFCR         CTEIF6        LL_DMA_ClearFlag_TE6
02186   * @param  DMAx DMAx Instance
02187   * @retval None
02188   */
02189 __STATIC_INLINE void LL_DMA_ClearFlag_TE6(DMA_TypeDef *DMAx)
02190 {
02191   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF6);
02192 }
02193 
02194 /**
02195   * @brief  Clear Channel 7 transfer error flag.
02196   * @rmtoll IFCR         CTEIF7        LL_DMA_ClearFlag_TE7
02197   * @param  DMAx DMAx Instance
02198   * @retval None
02199   */
02200 __STATIC_INLINE void LL_DMA_ClearFlag_TE7(DMA_TypeDef *DMAx)
02201 {
02202   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF7);
02203 }
02204 
02205 /**
02206   * @}
02207   */
02208 
02209 /** @defgroup DMA_LL_EF_IT_Management IT_Management
02210   * @{
02211   */
02212 /**
02213   * @brief  Enable Transfer complete interrupt.
02214   * @rmtoll CCR          TCIE          LL_DMA_EnableIT_TC
02215   * @param  DMAx DMAx Instance
02216   * @param  Channel This parameter can be one of the following values:
02217   *         @arg @ref LL_DMA_CHANNEL_1
02218   *         @arg @ref LL_DMA_CHANNEL_2
02219   *         @arg @ref LL_DMA_CHANNEL_3
02220   *         @arg @ref LL_DMA_CHANNEL_4
02221   *         @arg @ref LL_DMA_CHANNEL_5
02222   *         @arg @ref LL_DMA_CHANNEL_6
02223   *         @arg @ref LL_DMA_CHANNEL_7
02224   * @retval None
02225   */
02226 __STATIC_INLINE void LL_DMA_EnableIT_TC(DMA_TypeDef *DMAx, uint32_t Channel)
02227 {
02228   uint32_t dma_base_addr = (uint32_t)DMAx;    
02229   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TCIE);
02230 }
02231 
02232 /**
02233   * @brief  Enable Half transfer interrupt.
02234   * @rmtoll CCR          HTIE          LL_DMA_EnableIT_HT
02235   * @param  DMAx DMAx Instance
02236   * @param  Channel This parameter can be one of the following values:
02237   *         @arg @ref LL_DMA_CHANNEL_1
02238   *         @arg @ref LL_DMA_CHANNEL_2
02239   *         @arg @ref LL_DMA_CHANNEL_3
02240   *         @arg @ref LL_DMA_CHANNEL_4
02241   *         @arg @ref LL_DMA_CHANNEL_5
02242   *         @arg @ref LL_DMA_CHANNEL_6
02243   *         @arg @ref LL_DMA_CHANNEL_7
02244   * @retval None
02245   */
02246 __STATIC_INLINE void LL_DMA_EnableIT_HT(DMA_TypeDef *DMAx, uint32_t Channel)
02247 {
02248   uint32_t dma_base_addr = (uint32_t)DMAx;
02249   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_HTIE);
02250 }
02251 
02252 /**
02253   * @brief  Enable Transfer error interrupt.
02254   * @rmtoll CCR          TEIE          LL_DMA_EnableIT_TE
02255   * @param  DMAx DMAx Instance
02256   * @param  Channel This parameter can be one of the following values:
02257   *         @arg @ref LL_DMA_CHANNEL_1
02258   *         @arg @ref LL_DMA_CHANNEL_2
02259   *         @arg @ref LL_DMA_CHANNEL_3
02260   *         @arg @ref LL_DMA_CHANNEL_4
02261   *         @arg @ref LL_DMA_CHANNEL_5
02262   *         @arg @ref LL_DMA_CHANNEL_6
02263   *         @arg @ref LL_DMA_CHANNEL_7
02264   * @retval None
02265   */
02266 __STATIC_INLINE void LL_DMA_EnableIT_TE(DMA_TypeDef *DMAx, uint32_t Channel)
02267 {
02268   uint32_t dma_base_addr = (uint32_t)DMAx;
02269   SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TEIE);
02270 }
02271 
02272 /**
02273   * @brief  Disable Transfer complete interrupt.
02274   * @rmtoll CCR          TCIE          LL_DMA_DisableIT_TC
02275   * @param  DMAx DMAx Instance
02276   * @param  Channel This parameter can be one of the following values:
02277   *         @arg @ref LL_DMA_CHANNEL_1
02278   *         @arg @ref LL_DMA_CHANNEL_2
02279   *         @arg @ref LL_DMA_CHANNEL_3
02280   *         @arg @ref LL_DMA_CHANNEL_4
02281   *         @arg @ref LL_DMA_CHANNEL_5
02282   *         @arg @ref LL_DMA_CHANNEL_6
02283   *         @arg @ref LL_DMA_CHANNEL_7
02284   * @retval None
02285   */
02286 __STATIC_INLINE void LL_DMA_DisableIT_TC(DMA_TypeDef *DMAx, uint32_t Channel)
02287 {
02288   uint32_t dma_base_addr = (uint32_t)DMAx;
02289   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TCIE);
02290 }
02291 
02292 /**
02293   * @brief  Disable Half transfer interrupt.
02294   * @rmtoll CCR          HTIE          LL_DMA_DisableIT_HT
02295   * @param  DMAx DMAx Instance
02296   * @param  Channel This parameter can be one of the following values:
02297   *         @arg @ref LL_DMA_CHANNEL_1
02298   *         @arg @ref LL_DMA_CHANNEL_2
02299   *         @arg @ref LL_DMA_CHANNEL_3
02300   *         @arg @ref LL_DMA_CHANNEL_4
02301   *         @arg @ref LL_DMA_CHANNEL_5
02302   *         @arg @ref LL_DMA_CHANNEL_6
02303   *         @arg @ref LL_DMA_CHANNEL_7
02304   * @retval None
02305   */
02306 __STATIC_INLINE void LL_DMA_DisableIT_HT(DMA_TypeDef *DMAx, uint32_t Channel)
02307 {
02308   uint32_t dma_base_addr = (uint32_t)DMAx;
02309   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_HTIE);
02310 }
02311 
02312 /**
02313   * @brief  Disable Transfer error interrupt.
02314   * @rmtoll CCR          TEIE          LL_DMA_DisableIT_TE
02315   * @param  DMAx DMAx Instance
02316   * @param  Channel This parameter can be one of the following values:
02317   *         @arg @ref LL_DMA_CHANNEL_1
02318   *         @arg @ref LL_DMA_CHANNEL_2
02319   *         @arg @ref LL_DMA_CHANNEL_3
02320   *         @arg @ref LL_DMA_CHANNEL_4
02321   *         @arg @ref LL_DMA_CHANNEL_5
02322   *         @arg @ref LL_DMA_CHANNEL_6
02323   *         @arg @ref LL_DMA_CHANNEL_7
02324   * @retval None
02325   */
02326 __STATIC_INLINE void LL_DMA_DisableIT_TE(DMA_TypeDef *DMAx, uint32_t Channel)
02327 {
02328   uint32_t dma_base_addr = (uint32_t)DMAx;
02329   CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TEIE);
02330 }
02331 
02332 /**
02333   * @brief  Check if Transfer complete Interrupt is enabled.
02334   * @rmtoll CCR          TCIE          LL_DMA_IsEnabledIT_TC
02335   * @param  DMAx DMAx Instance
02336   * @param  Channel This parameter can be one of the following values:
02337   *         @arg @ref LL_DMA_CHANNEL_1
02338   *         @arg @ref LL_DMA_CHANNEL_2
02339   *         @arg @ref LL_DMA_CHANNEL_3
02340   *         @arg @ref LL_DMA_CHANNEL_4
02341   *         @arg @ref LL_DMA_CHANNEL_5
02342   *         @arg @ref LL_DMA_CHANNEL_6
02343   *         @arg @ref LL_DMA_CHANNEL_7
02344   * @retval State of bit (1 or 0).
02345   */
02346 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TC(DMA_TypeDef *DMAx, uint32_t Channel)
02347 {
02348   uint32_t dma_base_addr = (uint32_t)DMAx;
02349   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
02350                    DMA_CCR_TCIE) == (DMA_CCR_TCIE)) ? 1UL : 0UL);
02351 }
02352 
02353 /**
02354   * @brief  Check if Half transfer Interrupt is enabled.
02355   * @rmtoll CCR          HTIE          LL_DMA_IsEnabledIT_HT
02356   * @param  DMAx DMAx Instance
02357   * @param  Channel This parameter can be one of the following values:
02358   *         @arg @ref LL_DMA_CHANNEL_1
02359   *         @arg @ref LL_DMA_CHANNEL_2
02360   *         @arg @ref LL_DMA_CHANNEL_3
02361   *         @arg @ref LL_DMA_CHANNEL_4
02362   *         @arg @ref LL_DMA_CHANNEL_5
02363   *         @arg @ref LL_DMA_CHANNEL_6
02364   *         @arg @ref LL_DMA_CHANNEL_7
02365   * @retval State of bit (1 or 0).
02366   */
02367 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_HT(DMA_TypeDef *DMAx, uint32_t Channel)
02368 {
02369   uint32_t dma_base_addr = (uint32_t)DMAx;
02370   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
02371                    DMA_CCR_HTIE) == (DMA_CCR_HTIE)) ? 1UL : 0UL);
02372 }
02373 
02374 /**
02375   * @brief  Check if Transfer error Interrupt is enabled.
02376   * @rmtoll CCR          TEIE          LL_DMA_IsEnabledIT_TE
02377   * @param  DMAx DMAx Instance
02378   * @param  Channel This parameter can be one of the following values:
02379   *         @arg @ref LL_DMA_CHANNEL_1
02380   *         @arg @ref LL_DMA_CHANNEL_2
02381   *         @arg @ref LL_DMA_CHANNEL_3
02382   *         @arg @ref LL_DMA_CHANNEL_4
02383   *         @arg @ref LL_DMA_CHANNEL_5
02384   *         @arg @ref LL_DMA_CHANNEL_6
02385   *         @arg @ref LL_DMA_CHANNEL_7
02386   * @retval State of bit (1 or 0).
02387   */
02388 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TE(DMA_TypeDef *DMAx, uint32_t Channel)
02389 {
02390   uint32_t dma_base_addr = (uint32_t)DMAx;
02391   return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
02392                    DMA_CCR_TEIE) == (DMA_CCR_TEIE)) ? 1UL : 0UL);
02393 }
02394 
02395 /**
02396   * @}
02397   */
02398 
02399 #if defined(USE_FULL_LL_DRIVER)
02400 /** @defgroup DMA_LL_EF_Init Initialization and de-initialization functions
02401   * @{
02402   */
02403 ErrorStatus LL_DMA_Init(DMA_TypeDef *DMAx, uint32_t Channel, LL_DMA_InitTypeDef *DMA_InitStruct);
02404 ErrorStatus LL_DMA_DeInit(DMA_TypeDef *DMAx, uint32_t Channel);
02405 void LL_DMA_StructInit(LL_DMA_InitTypeDef *DMA_InitStruct);
02406 
02407 /**
02408   * @}
02409   */
02410 #endif /* USE_FULL_LL_DRIVER */
02411 
02412 /**
02413   * @}
02414   */
02415 
02416 /**
02417   * @}
02418   */
02419 
02420 #endif /* DMA1 || DMA2 */
02421 
02422 /**
02423   * @}
02424   */
02425 
02426 #ifdef __cplusplus
02427 }
02428 #endif
02429 
02430 #endif /* STM32L4xx_LL_DMA_H */