STM32F103xB HAL User Manual
stm32f1xx_ll_dma.h
Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32f1xx_ll_dma.h
00004   * @author  MCD Application Team
00005   * @brief   Header file of DMA LL module.
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
00010   * All rights reserved.</center></h2>
00011   *
00012   * This software component is licensed by ST under BSD 3-Clause license,
00013   * the "License"; You may not use this file except in compliance with the
00014   * License. You may obtain a copy of the License at:
00015   *                        opensource.org/licenses/BSD-3-Clause
00016   *
00017   ******************************************************************************
00018   */
00019 
00020 /* Define to prevent recursive inclusion -------------------------------------*/
00021 #ifndef __STM32F1xx_LL_DMA_H
00022 #define __STM32F1xx_LL_DMA_H
00023 
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #endif
00027 
00028 /* Includes ------------------------------------------------------------------*/
00029 #include "stm32f1xx.h"
00030 
00031 /** @addtogroup STM32F1xx_LL_Driver
00032   * @{
00033   */
00034 
00035 #if defined (DMA1) || defined (DMA2)
00036 
00037 /** @defgroup DMA_LL DMA
00038   * @{
00039   */
00040 
00041 /* Private types -------------------------------------------------------------*/
00042 /* Private variables ---------------------------------------------------------*/
00043 /** @defgroup DMA_LL_Private_Variables DMA Private Variables
00044   * @{
00045   */
00046 /* Array used to get the DMA channel register offset versus channel index LL_DMA_CHANNEL_x */
00047 static const uint8_t CHANNEL_OFFSET_TAB[] =
00048 {
00049   (uint8_t)(DMA1_Channel1_BASE - DMA1_BASE),
00050   (uint8_t)(DMA1_Channel2_BASE - DMA1_BASE),
00051   (uint8_t)(DMA1_Channel3_BASE - DMA1_BASE),
00052   (uint8_t)(DMA1_Channel4_BASE - DMA1_BASE),
00053   (uint8_t)(DMA1_Channel5_BASE - DMA1_BASE),
00054   (uint8_t)(DMA1_Channel6_BASE - DMA1_BASE),
00055   (uint8_t)(DMA1_Channel7_BASE - DMA1_BASE)
00056 };
00057 /**
00058   * @}
00059   */
00060 /* Private constants ---------------------------------------------------------*/
00061 /* Private macros ------------------------------------------------------------*/
00062 #if defined(USE_FULL_LL_DRIVER)
00063 /** @defgroup DMA_LL_Private_Macros DMA Private Macros
00064   * @{
00065   */
00066 /**
00067   * @}
00068   */
00069 #endif /*USE_FULL_LL_DRIVER*/
00070 
00071 /* Exported types ------------------------------------------------------------*/
00072 #if defined(USE_FULL_LL_DRIVER)
00073 /** @defgroup DMA_LL_ES_INIT DMA Exported Init structure
00074   * @{
00075   */
00076 typedef struct
00077 {
00078   uint32_t PeriphOrM2MSrcAddress;  /*!< Specifies the peripheral base address for DMA transfer
00079                                         or as Source base address in case of memory to memory transfer direction.
00080 
00081                                         This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF. */
00082 
00083   uint32_t MemoryOrM2MDstAddress;  /*!< Specifies the memory base address for DMA transfer
00084                                         or as Destination base address in case of memory to memory transfer direction.
00085 
00086                                         This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF. */
00087 
00088   uint32_t Direction;              /*!< Specifies if the data will be transferred from memory to peripheral,
00089                                         from memory to memory or from peripheral to memory.
00090                                         This parameter can be a value of @ref DMA_LL_EC_DIRECTION
00091 
00092                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetDataTransferDirection(). */
00093 
00094   uint32_t Mode;                   /*!< Specifies the normal or circular operation mode.
00095                                         This parameter can be a value of @ref DMA_LL_EC_MODE
00096                                         @note: The circular buffer mode cannot be used if the memory to memory
00097                                                data transfer direction is configured on the selected Channel
00098 
00099                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetMode(). */
00100 
00101   uint32_t PeriphOrM2MSrcIncMode;  /*!< Specifies whether the Peripheral address or Source address in case of memory to memory transfer direction
00102                                         is incremented or not.
00103                                         This parameter can be a value of @ref DMA_LL_EC_PERIPH
00104 
00105                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphIncMode(). */
00106 
00107   uint32_t MemoryOrM2MDstIncMode;  /*!< Specifies whether the Memory address or Destination address in case of memory to memory transfer direction
00108                                         is incremented or not.
00109                                         This parameter can be a value of @ref DMA_LL_EC_MEMORY
00110 
00111                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetMemoryIncMode(). */
00112 
00113   uint32_t PeriphOrM2MSrcDataSize; /*!< Specifies the Peripheral data size alignment or Source data size alignment (byte, half word, word)
00114                                         in case of memory to memory transfer direction.
00115                                         This parameter can be a value of @ref DMA_LL_EC_PDATAALIGN
00116 
00117                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphSize(). */
00118 
00119   uint32_t MemoryOrM2MDstDataSize; /*!< Specifies the Memory data size alignment or Destination data size alignment (byte, half word, word)
00120                                         in case of memory to memory transfer direction.
00121                                         This parameter can be a value of @ref DMA_LL_EC_MDATAALIGN
00122 
00123                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetMemorySize(). */
00124 
00125   uint32_t NbData;                 /*!< Specifies the number of data to transfer, in data unit.
00126                                         The data unit is equal to the source buffer configuration set in PeripheralSize
00127                                         or MemorySize parameters depending in the transfer direction.
00128                                         This parameter must be a value between Min_Data = 0 and Max_Data = 0x0000FFFF
00129 
00130                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetDataLength(). */
00131 
00132   uint32_t Priority;               /*!< Specifies the channel priority level.
00133                                         This parameter can be a value of @ref DMA_LL_EC_PRIORITY
00134 
00135                                         This feature can be modified afterwards using unitary function @ref LL_DMA_SetChannelPriorityLevel(). */
00136 
00137 } LL_DMA_InitTypeDef;
00138 /**
00139   * @}
00140   */
00141 #endif /*USE_FULL_LL_DRIVER*/
00142 
00143 /* Exported constants --------------------------------------------------------*/
00144 /** @defgroup DMA_LL_Exported_Constants DMA Exported Constants
00145   * @{
00146   */
00147 /** @defgroup DMA_LL_EC_CLEAR_FLAG Clear Flags Defines
00148   * @brief    Flags defines which can be used with LL_DMA_WriteReg function
00149   * @{
00150   */
00151 #define LL_DMA_IFCR_CGIF1                 DMA_IFCR_CGIF1        /*!< Channel 1 global flag            */
00152 #define LL_DMA_IFCR_CTCIF1                DMA_IFCR_CTCIF1       /*!< Channel 1 transfer complete flag */
00153 #define LL_DMA_IFCR_CHTIF1                DMA_IFCR_CHTIF1       /*!< Channel 1 half transfer flag     */
00154 #define LL_DMA_IFCR_CTEIF1                DMA_IFCR_CTEIF1       /*!< Channel 1 transfer error flag    */
00155 #define LL_DMA_IFCR_CGIF2                 DMA_IFCR_CGIF2        /*!< Channel 2 global flag            */
00156 #define LL_DMA_IFCR_CTCIF2                DMA_IFCR_CTCIF2       /*!< Channel 2 transfer complete flag */
00157 #define LL_DMA_IFCR_CHTIF2                DMA_IFCR_CHTIF2       /*!< Channel 2 half transfer flag     */
00158 #define LL_DMA_IFCR_CTEIF2                DMA_IFCR_CTEIF2       /*!< Channel 2 transfer error flag    */
00159 #define LL_DMA_IFCR_CGIF3                 DMA_IFCR_CGIF3        /*!< Channel 3 global flag            */
00160 #define LL_DMA_IFCR_CTCIF3                DMA_IFCR_CTCIF3       /*!< Channel 3 transfer complete flag */
00161 #define LL_DMA_IFCR_CHTIF3                DMA_IFCR_CHTIF3       /*!< Channel 3 half transfer flag     */
00162 #define LL_DMA_IFCR_CTEIF3                DMA_IFCR_CTEIF3       /*!< Channel 3 transfer error flag    */
00163 #define LL_DMA_IFCR_CGIF4                 DMA_IFCR_CGIF4        /*!< Channel 4 global flag            */
00164 #define LL_DMA_IFCR_CTCIF4                DMA_IFCR_CTCIF4       /*!< Channel 4 transfer complete flag */
00165 #define LL_DMA_IFCR_CHTIF4                DMA_IFCR_CHTIF4       /*!< Channel 4 half transfer flag     */
00166 #define LL_DMA_IFCR_CTEIF4                DMA_IFCR_CTEIF4       /*!< Channel 4 transfer error flag    */
00167 #define LL_DMA_IFCR_CGIF5                 DMA_IFCR_CGIF5        /*!< Channel 5 global flag            */
00168 #define LL_DMA_IFCR_CTCIF5                DMA_IFCR_CTCIF5       /*!< Channel 5 transfer complete flag */
00169 #define LL_DMA_IFCR_CHTIF5                DMA_IFCR_CHTIF5       /*!< Channel 5 half transfer flag     */
00170 #define LL_DMA_IFCR_CTEIF5                DMA_IFCR_CTEIF5       /*!< Channel 5 transfer error flag    */
00171 #define LL_DMA_IFCR_CGIF6                 DMA_IFCR_CGIF6        /*!< Channel 6 global flag            */
00172 #define LL_DMA_IFCR_CTCIF6                DMA_IFCR_CTCIF6       /*!< Channel 6 transfer complete flag */
00173 #define LL_DMA_IFCR_CHTIF6                DMA_IFCR_CHTIF6       /*!< Channel 6 half transfer flag     */
00174 #define LL_DMA_IFCR_CTEIF6                DMA_IFCR_CTEIF6       /*!< Channel 6 transfer error flag    */
00175 #define LL_DMA_IFCR_CGIF7                 DMA_IFCR_CGIF7        /*!< Channel 7 global flag            */
00176 #define LL_DMA_IFCR_CTCIF7                DMA_IFCR_CTCIF7       /*!< Channel 7 transfer complete flag */
00177 #define LL_DMA_IFCR_CHTIF7                DMA_IFCR_CHTIF7       /*!< Channel 7 half transfer flag     */
00178 #define LL_DMA_IFCR_CTEIF7                DMA_IFCR_CTEIF7       /*!< Channel 7 transfer error flag    */
00179 /**
00180   * @}
00181   */
00182 
00183 /** @defgroup DMA_LL_EC_GET_FLAG Get Flags Defines
00184   * @brief    Flags defines which can be used with LL_DMA_ReadReg function
00185   * @{
00186   */
00187 #define LL_DMA_ISR_GIF1                   DMA_ISR_GIF1          /*!< Channel 1 global flag            */
00188 #define LL_DMA_ISR_TCIF1                  DMA_ISR_TCIF1         /*!< Channel 1 transfer complete flag */
00189 #define LL_DMA_ISR_HTIF1                  DMA_ISR_HTIF1         /*!< Channel 1 half transfer flag     */
00190 #define LL_DMA_ISR_TEIF1                  DMA_ISR_TEIF1         /*!< Channel 1 transfer error flag    */
00191 #define LL_DMA_ISR_GIF2                   DMA_ISR_GIF2          /*!< Channel 2 global flag            */
00192 #define LL_DMA_ISR_TCIF2                  DMA_ISR_TCIF2         /*!< Channel 2 transfer complete flag */
00193 #define LL_DMA_ISR_HTIF2                  DMA_ISR_HTIF2         /*!< Channel 2 half transfer flag     */
00194 #define LL_DMA_ISR_TEIF2                  DMA_ISR_TEIF2         /*!< Channel 2 transfer error flag    */
00195 #define LL_DMA_ISR_GIF3                   DMA_ISR_GIF3          /*!< Channel 3 global flag            */
00196 #define LL_DMA_ISR_TCIF3                  DMA_ISR_TCIF3         /*!< Channel 3 transfer complete flag */
00197 #define LL_DMA_ISR_HTIF3                  DMA_ISR_HTIF3         /*!< Channel 3 half transfer flag     */
00198 #define LL_DMA_ISR_TEIF3                  DMA_ISR_TEIF3         /*!< Channel 3 transfer error flag    */
00199 #define LL_DMA_ISR_GIF4                   DMA_ISR_GIF4          /*!< Channel 4 global flag            */
00200 #define LL_DMA_ISR_TCIF4                  DMA_ISR_TCIF4         /*!< Channel 4 transfer complete flag */
00201 #define LL_DMA_ISR_HTIF4                  DMA_ISR_HTIF4         /*!< Channel 4 half transfer flag     */
00202 #define LL_DMA_ISR_TEIF4                  DMA_ISR_TEIF4         /*!< Channel 4 transfer error flag    */
00203 #define LL_DMA_ISR_GIF5                   DMA_ISR_GIF5          /*!< Channel 5 global flag            */
00204 #define LL_DMA_ISR_TCIF5                  DMA_ISR_TCIF5         /*!< Channel 5 transfer complete flag */
00205 #define LL_DMA_ISR_HTIF5                  DMA_ISR_HTIF5         /*!< Channel 5 half transfer flag     */
00206 #define LL_DMA_ISR_TEIF5                  DMA_ISR_TEIF5         /*!< Channel 5 transfer error flag    */
00207 #define LL_DMA_ISR_GIF6                   DMA_ISR_GIF6          /*!< Channel 6 global flag            */
00208 #define LL_DMA_ISR_TCIF6                  DMA_ISR_TCIF6         /*!< Channel 6 transfer complete flag */
00209 #define LL_DMA_ISR_HTIF6                  DMA_ISR_HTIF6         /*!< Channel 6 half transfer flag     */
00210 #define LL_DMA_ISR_TEIF6                  DMA_ISR_TEIF6         /*!< Channel 6 transfer error flag    */
00211 #define LL_DMA_ISR_GIF7                   DMA_ISR_GIF7          /*!< Channel 7 global flag            */
00212 #define LL_DMA_ISR_TCIF7                  DMA_ISR_TCIF7         /*!< Channel 7 transfer complete flag */
00213 #define LL_DMA_ISR_HTIF7                  DMA_ISR_HTIF7         /*!< Channel 7 half transfer flag     */
00214 #define LL_DMA_ISR_TEIF7                  DMA_ISR_TEIF7         /*!< Channel 7 transfer error flag    */
00215 /**
00216   * @}
00217   */
00218 
00219 /** @defgroup DMA_LL_EC_IT IT Defines
00220   * @brief    IT defines which can be used with LL_DMA_ReadReg and  LL_DMA_WriteReg functions
00221   * @{
00222   */
00223 #define LL_DMA_CCR_TCIE                   DMA_CCR_TCIE          /*!< Transfer complete interrupt */
00224 #define LL_DMA_CCR_HTIE                   DMA_CCR_HTIE          /*!< Half Transfer interrupt     */
00225 #define LL_DMA_CCR_TEIE                   DMA_CCR_TEIE          /*!< Transfer error interrupt    */
00226 /**
00227   * @}
00228   */
00229 
00230 /** @defgroup DMA_LL_EC_CHANNEL CHANNEL
00231   * @{
00232   */
00233 #define LL_DMA_CHANNEL_1                  0x00000001U /*!< DMA Channel 1 */
00234 #define LL_DMA_CHANNEL_2                  0x00000002U /*!< DMA Channel 2 */
00235 #define LL_DMA_CHANNEL_3                  0x00000003U /*!< DMA Channel 3 */
00236 #define LL_DMA_CHANNEL_4                  0x00000004U /*!< DMA Channel 4 */
00237 #define LL_DMA_CHANNEL_5                  0x00000005U /*!< DMA Channel 5 */
00238 #define LL_DMA_CHANNEL_6                  0x00000006U /*!< DMA Channel 6 */
00239 #define LL_DMA_CHANNEL_7                  0x00000007U /*!< DMA Channel 7 */
00240 #if defined(USE_FULL_LL_DRIVER)
00241 #define LL_DMA_CHANNEL_ALL                0xFFFF0000U /*!< DMA Channel all (used only for function @ref LL_DMA_DeInit(). */
00242 #endif /*USE_FULL_LL_DRIVER*/
00243 /**
00244   * @}
00245   */
00246 
00247 /** @defgroup DMA_LL_EC_DIRECTION Transfer Direction
00248   * @{
00249   */
00250 #define LL_DMA_DIRECTION_PERIPH_TO_MEMORY 0x00000000U             /*!< Peripheral to memory direction */
00251 #define LL_DMA_DIRECTION_MEMORY_TO_PERIPH DMA_CCR_DIR             /*!< Memory to peripheral direction */
00252 #define LL_DMA_DIRECTION_MEMORY_TO_MEMORY DMA_CCR_MEM2MEM         /*!< Memory to memory direction     */
00253 /**
00254   * @}
00255   */
00256 
00257 /** @defgroup DMA_LL_EC_MODE Transfer mode
00258   * @{
00259   */
00260 #define LL_DMA_MODE_NORMAL                0x00000000U             /*!< Normal Mode                  */
00261 #define LL_DMA_MODE_CIRCULAR              DMA_CCR_CIRC            /*!< Circular Mode                */
00262 /**
00263   * @}
00264   */
00265 
00266 /** @defgroup DMA_LL_EC_PERIPH Peripheral increment mode
00267   * @{
00268   */
00269 #define LL_DMA_PERIPH_INCREMENT           DMA_CCR_PINC            /*!< Peripheral increment mode Enable */
00270 #define LL_DMA_PERIPH_NOINCREMENT         0x00000000U             /*!< Peripheral increment mode Disable */
00271 /**
00272   * @}
00273   */
00274 
00275 /** @defgroup DMA_LL_EC_MEMORY Memory increment mode
00276   * @{
00277   */
00278 #define LL_DMA_MEMORY_INCREMENT           DMA_CCR_MINC            /*!< Memory increment mode Enable  */
00279 #define LL_DMA_MEMORY_NOINCREMENT         0x00000000U             /*!< Memory increment mode Disable */
00280 /**
00281   * @}
00282   */
00283 
00284 /** @defgroup DMA_LL_EC_PDATAALIGN Peripheral data alignment
00285   * @{
00286   */
00287 #define LL_DMA_PDATAALIGN_BYTE            0x00000000U             /*!< Peripheral data alignment : Byte     */
00288 #define LL_DMA_PDATAALIGN_HALFWORD        DMA_CCR_PSIZE_0         /*!< Peripheral data alignment : HalfWord */
00289 #define LL_DMA_PDATAALIGN_WORD            DMA_CCR_PSIZE_1         /*!< Peripheral data alignment : Word     */
00290 /**
00291   * @}
00292   */
00293 
00294 /** @defgroup DMA_LL_EC_MDATAALIGN Memory data alignment
00295   * @{
00296   */
00297 #define LL_DMA_MDATAALIGN_BYTE            0x00000000U             /*!< Memory data alignment : Byte     */
00298 #define LL_DMA_MDATAALIGN_HALFWORD        DMA_CCR_MSIZE_0         /*!< Memory data alignment : HalfWord */
00299 #define LL_DMA_MDATAALIGN_WORD            DMA_CCR_MSIZE_1         /*!< Memory data alignment : Word     */
00300 /**
00301   * @}
00302   */
00303 
00304 /** @defgroup DMA_LL_EC_PRIORITY Transfer Priority level
00305   * @{
00306   */
00307 #define LL_DMA_PRIORITY_LOW               0x00000000U             /*!< Priority level : Low       */
00308 #define LL_DMA_PRIORITY_MEDIUM            DMA_CCR_PL_0            /*!< Priority level : Medium    */
00309 #define LL_DMA_PRIORITY_HIGH              DMA_CCR_PL_1            /*!< Priority level : High      */
00310 #define LL_DMA_PRIORITY_VERYHIGH          DMA_CCR_PL              /*!< Priority level : Very_High */
00311 /**
00312   * @}
00313   */
00314 
00315 /**
00316   * @}
00317   */
00318 
00319 /* Exported macro ------------------------------------------------------------*/
00320 /** @defgroup DMA_LL_Exported_Macros DMA Exported Macros
00321   * @{
00322   */
00323 
00324 /** @defgroup DMA_LL_EM_WRITE_READ Common Write and read registers macros
00325   * @{
00326   */
00327 /**
00328   * @brief  Write a value in DMA register
00329   * @param  __INSTANCE__ DMA Instance
00330   * @param  __REG__ Register to be written
00331   * @param  __VALUE__ Value to be written in the register
00332   * @retval None
00333   */
00334 #define LL_DMA_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
00335 
00336 /**
00337   * @brief  Read a value in DMA register
00338   * @param  __INSTANCE__ DMA Instance
00339   * @param  __REG__ Register to be read
00340   * @retval Register value
00341   */
00342 #define LL_DMA_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
00343 /**
00344   * @}
00345   */
00346 
00347 /** @defgroup DMA_LL_EM_CONVERT_DMAxCHANNELy Convert DMAxChannely
00348   * @{
00349   */
00350 
00351 /**
00352   * @brief  Convert DMAx_Channely into DMAx
00353   * @param  __CHANNEL_INSTANCE__ DMAx_Channely
00354   * @retval DMAx
00355   */
00356 #if defined(DMA2)
00357 #define __LL_DMA_GET_INSTANCE(__CHANNEL_INSTANCE__)   \
00358 (((uint32_t)(__CHANNEL_INSTANCE__) > ((uint32_t)DMA1_Channel7)) ?  DMA2 : DMA1)
00359 #else
00360 #define __LL_DMA_GET_INSTANCE(__CHANNEL_INSTANCE__)  (DMA1)
00361 #endif
00362 
00363 /**
00364   * @brief  Convert DMAx_Channely into LL_DMA_CHANNEL_y
00365   * @param  __CHANNEL_INSTANCE__ DMAx_Channely
00366   * @retval LL_DMA_CHANNEL_y
00367   */
00368 #if defined (DMA2)
00369 #define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__)   \
00370 (((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \
00371  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel1)) ? LL_DMA_CHANNEL_1 : \
00372  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \
00373  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel2)) ? LL_DMA_CHANNEL_2 : \
00374  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel3)) ? LL_DMA_CHANNEL_3 : \
00375  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel3)) ? LL_DMA_CHANNEL_3 : \
00376  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel4)) ? LL_DMA_CHANNEL_4 : \
00377  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel4)) ? LL_DMA_CHANNEL_4 : \
00378  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel5)) ? LL_DMA_CHANNEL_5 : \
00379  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel5)) ? LL_DMA_CHANNEL_5 : \
00380  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel6)) ? LL_DMA_CHANNEL_6 : \
00381  LL_DMA_CHANNEL_7)
00382 #else
00383 #define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__)   \
00384 (((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \
00385  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \
00386  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel3)) ? LL_DMA_CHANNEL_3 : \
00387  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel4)) ? LL_DMA_CHANNEL_4 : \
00388  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel5)) ? LL_DMA_CHANNEL_5 : \
00389  ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel6)) ? LL_DMA_CHANNEL_6 : \
00390  LL_DMA_CHANNEL_7)
00391 #endif
00392 
00393 /**
00394   * @brief  Convert DMA Instance DMAx and LL_DMA_CHANNEL_y into DMAx_Channely
00395   * @param  __DMA_INSTANCE__ DMAx
00396   * @param  __CHANNEL__ LL_DMA_CHANNEL_y
00397   * @retval DMAx_Channely
00398   */
00399 #if defined (DMA2)
00400 #define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__)   \
00401 ((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \
00402  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA2_Channel1 : \
00403  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \
00404  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA2_Channel2 : \
00405  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA1_Channel3 : \
00406  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA2_Channel3 : \
00407  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA1_Channel4 : \
00408  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA2_Channel4 : \
00409  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA1_Channel5 : \
00410  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA2_Channel5 : \
00411  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6))) ? DMA1_Channel6 : \
00412  DMA1_Channel7)
00413 #else
00414 #define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__)   \
00415 ((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \
00416  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \
00417  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA1_Channel3 : \
00418  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA1_Channel4 : \
00419  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA1_Channel5 : \
00420  (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6))) ? DMA1_Channel6 : \
00421  DMA1_Channel7)
00422 #endif
00423 
00424 /**
00425   * @}
00426   */
00427 
00428 /**
00429   * @}
00430   */
00431 
00432 /* Exported functions --------------------------------------------------------*/
00433 /** @defgroup DMA_LL_Exported_Functions DMA Exported Functions
00434  * @{
00435  */
00436 
00437 /** @defgroup DMA_LL_EF_Configuration Configuration
00438   * @{
00439   */
00440 /**
00441   * @brief  Enable DMA channel.
00442   * @rmtoll CCR          EN            LL_DMA_EnableChannel
00443   * @param  DMAx DMAx Instance
00444   * @param  Channel This parameter can be one of the following values:
00445   *         @arg @ref LL_DMA_CHANNEL_1
00446   *         @arg @ref LL_DMA_CHANNEL_2
00447   *         @arg @ref LL_DMA_CHANNEL_3
00448   *         @arg @ref LL_DMA_CHANNEL_4
00449   *         @arg @ref LL_DMA_CHANNEL_5
00450   *         @arg @ref LL_DMA_CHANNEL_6
00451   *         @arg @ref LL_DMA_CHANNEL_7
00452   * @retval None
00453   */
00454 __STATIC_INLINE void LL_DMA_EnableChannel(DMA_TypeDef *DMAx, uint32_t Channel)
00455 {
00456   SET_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_EN);
00457 }
00458 
00459 /**
00460   * @brief  Disable DMA channel.
00461   * @rmtoll CCR          EN            LL_DMA_DisableChannel
00462   * @param  DMAx DMAx Instance
00463   * @param  Channel This parameter can be one of the following values:
00464   *         @arg @ref LL_DMA_CHANNEL_1
00465   *         @arg @ref LL_DMA_CHANNEL_2
00466   *         @arg @ref LL_DMA_CHANNEL_3
00467   *         @arg @ref LL_DMA_CHANNEL_4
00468   *         @arg @ref LL_DMA_CHANNEL_5
00469   *         @arg @ref LL_DMA_CHANNEL_6
00470   *         @arg @ref LL_DMA_CHANNEL_7
00471   * @retval None
00472   */
00473 __STATIC_INLINE void LL_DMA_DisableChannel(DMA_TypeDef *DMAx, uint32_t Channel)
00474 {
00475   CLEAR_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_EN);
00476 }
00477 
00478 /**
00479   * @brief  Check if DMA channel is enabled or disabled.
00480   * @rmtoll CCR          EN            LL_DMA_IsEnabledChannel
00481   * @param  DMAx DMAx Instance
00482   * @param  Channel This parameter can be one of the following values:
00483   *         @arg @ref LL_DMA_CHANNEL_1
00484   *         @arg @ref LL_DMA_CHANNEL_2
00485   *         @arg @ref LL_DMA_CHANNEL_3
00486   *         @arg @ref LL_DMA_CHANNEL_4
00487   *         @arg @ref LL_DMA_CHANNEL_5
00488   *         @arg @ref LL_DMA_CHANNEL_6
00489   *         @arg @ref LL_DMA_CHANNEL_7
00490   * @retval State of bit (1 or 0).
00491   */
00492 __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannel(DMA_TypeDef *DMAx, uint32_t Channel)
00493 {
00494   return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
00495                    DMA_CCR_EN) == (DMA_CCR_EN));
00496 }
00497 
00498 /**
00499   * @brief  Configure all parameters link to DMA transfer.
00500   * @rmtoll CCR          DIR           LL_DMA_ConfigTransfer\n
00501   *         CCR          MEM2MEM       LL_DMA_ConfigTransfer\n
00502   *         CCR          CIRC          LL_DMA_ConfigTransfer\n
00503   *         CCR          PINC          LL_DMA_ConfigTransfer\n
00504   *         CCR          MINC          LL_DMA_ConfigTransfer\n
00505   *         CCR          PSIZE         LL_DMA_ConfigTransfer\n
00506   *         CCR          MSIZE         LL_DMA_ConfigTransfer\n
00507   *         CCR          PL            LL_DMA_ConfigTransfer
00508   * @param  DMAx DMAx Instance
00509   * @param  Channel This parameter can be one of the following values:
00510   *         @arg @ref LL_DMA_CHANNEL_1
00511   *         @arg @ref LL_DMA_CHANNEL_2
00512   *         @arg @ref LL_DMA_CHANNEL_3
00513   *         @arg @ref LL_DMA_CHANNEL_4
00514   *         @arg @ref LL_DMA_CHANNEL_5
00515   *         @arg @ref LL_DMA_CHANNEL_6
00516   *         @arg @ref LL_DMA_CHANNEL_7
00517   * @param  Configuration This parameter must be a combination of all the following values:
00518   *         @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY or @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH or @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
00519   *         @arg @ref LL_DMA_MODE_NORMAL or @ref LL_DMA_MODE_CIRCULAR
00520   *         @arg @ref LL_DMA_PERIPH_INCREMENT or @ref LL_DMA_PERIPH_NOINCREMENT
00521   *         @arg @ref LL_DMA_MEMORY_INCREMENT or @ref LL_DMA_MEMORY_NOINCREMENT
00522   *         @arg @ref LL_DMA_PDATAALIGN_BYTE or @ref LL_DMA_PDATAALIGN_HALFWORD or @ref LL_DMA_PDATAALIGN_WORD
00523   *         @arg @ref LL_DMA_MDATAALIGN_BYTE or @ref LL_DMA_MDATAALIGN_HALFWORD or @ref LL_DMA_MDATAALIGN_WORD
00524   *         @arg @ref LL_DMA_PRIORITY_LOW or @ref LL_DMA_PRIORITY_MEDIUM or @ref LL_DMA_PRIORITY_HIGH or @ref LL_DMA_PRIORITY_VERYHIGH
00525   * @retval None
00526   */
00527 __STATIC_INLINE void LL_DMA_ConfigTransfer(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
00528 {
00529   MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
00530              DMA_CCR_DIR | DMA_CCR_MEM2MEM | DMA_CCR_CIRC | DMA_CCR_PINC | DMA_CCR_MINC | DMA_CCR_PSIZE | DMA_CCR_MSIZE | DMA_CCR_PL,
00531              Configuration);
00532 }
00533 
00534 /**
00535   * @brief  Set Data transfer direction (read from peripheral or from memory).
00536   * @rmtoll CCR          DIR           LL_DMA_SetDataTransferDirection\n
00537   *         CCR          MEM2MEM       LL_DMA_SetDataTransferDirection
00538   * @param  DMAx DMAx Instance
00539   * @param  Channel This parameter can be one of the following values:
00540   *         @arg @ref LL_DMA_CHANNEL_1
00541   *         @arg @ref LL_DMA_CHANNEL_2
00542   *         @arg @ref LL_DMA_CHANNEL_3
00543   *         @arg @ref LL_DMA_CHANNEL_4
00544   *         @arg @ref LL_DMA_CHANNEL_5
00545   *         @arg @ref LL_DMA_CHANNEL_6
00546   *         @arg @ref LL_DMA_CHANNEL_7
00547   * @param  Direction This parameter can be one of the following values:
00548   *         @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
00549   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
00550   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
00551   * @retval None
00552   */
00553 __STATIC_INLINE void LL_DMA_SetDataTransferDirection(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Direction)
00554 {
00555   MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
00556              DMA_CCR_DIR | DMA_CCR_MEM2MEM, Direction);
00557 }
00558 
00559 /**
00560   * @brief  Get Data transfer direction (read from peripheral or from memory).
00561   * @rmtoll CCR          DIR           LL_DMA_GetDataTransferDirection\n
00562   *         CCR          MEM2MEM       LL_DMA_GetDataTransferDirection
00563   * @param  DMAx DMAx Instance
00564   * @param  Channel This parameter can be one of the following values:
00565   *         @arg @ref LL_DMA_CHANNEL_1
00566   *         @arg @ref LL_DMA_CHANNEL_2
00567   *         @arg @ref LL_DMA_CHANNEL_3
00568   *         @arg @ref LL_DMA_CHANNEL_4
00569   *         @arg @ref LL_DMA_CHANNEL_5
00570   *         @arg @ref LL_DMA_CHANNEL_6
00571   *         @arg @ref LL_DMA_CHANNEL_7
00572   * @retval Returned value can be one of the following values:
00573   *         @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
00574   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
00575   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
00576   */
00577 __STATIC_INLINE uint32_t LL_DMA_GetDataTransferDirection(DMA_TypeDef *DMAx, uint32_t Channel)
00578 {
00579   return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
00580                    DMA_CCR_DIR | DMA_CCR_MEM2MEM));
00581 }
00582 
00583 /**
00584   * @brief  Set DMA mode circular or normal.
00585   * @note The circular buffer mode cannot be used if the memory-to-memory
00586   * data transfer is configured on the selected Channel.
00587   * @rmtoll CCR          CIRC          LL_DMA_SetMode
00588   * @param  DMAx DMAx Instance
00589   * @param  Channel This parameter can be one of the following values:
00590   *         @arg @ref LL_DMA_CHANNEL_1
00591   *         @arg @ref LL_DMA_CHANNEL_2
00592   *         @arg @ref LL_DMA_CHANNEL_3
00593   *         @arg @ref LL_DMA_CHANNEL_4
00594   *         @arg @ref LL_DMA_CHANNEL_5
00595   *         @arg @ref LL_DMA_CHANNEL_6
00596   *         @arg @ref LL_DMA_CHANNEL_7
00597   * @param  Mode This parameter can be one of the following values:
00598   *         @arg @ref LL_DMA_MODE_NORMAL
00599   *         @arg @ref LL_DMA_MODE_CIRCULAR
00600   * @retval None
00601   */
00602 __STATIC_INLINE void LL_DMA_SetMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Mode)
00603 {
00604   MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_CIRC,
00605              Mode);
00606 }
00607 
00608 /**
00609   * @brief  Get DMA mode circular or normal.
00610   * @rmtoll CCR          CIRC          LL_DMA_GetMode
00611   * @param  DMAx DMAx Instance
00612   * @param  Channel This parameter can be one of the following values:
00613   *         @arg @ref LL_DMA_CHANNEL_1
00614   *         @arg @ref LL_DMA_CHANNEL_2
00615   *         @arg @ref LL_DMA_CHANNEL_3
00616   *         @arg @ref LL_DMA_CHANNEL_4
00617   *         @arg @ref LL_DMA_CHANNEL_5
00618   *         @arg @ref LL_DMA_CHANNEL_6
00619   *         @arg @ref LL_DMA_CHANNEL_7
00620   * @retval Returned value can be one of the following values:
00621   *         @arg @ref LL_DMA_MODE_NORMAL
00622   *         @arg @ref LL_DMA_MODE_CIRCULAR
00623   */
00624 __STATIC_INLINE uint32_t LL_DMA_GetMode(DMA_TypeDef *DMAx, uint32_t Channel)
00625 {
00626   return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
00627                    DMA_CCR_CIRC));
00628 }
00629 
00630 /**
00631   * @brief  Set Peripheral increment mode.
00632   * @rmtoll CCR          PINC          LL_DMA_SetPeriphIncMode
00633   * @param  DMAx DMAx Instance
00634   * @param  Channel This parameter can be one of the following values:
00635   *         @arg @ref LL_DMA_CHANNEL_1
00636   *         @arg @ref LL_DMA_CHANNEL_2
00637   *         @arg @ref LL_DMA_CHANNEL_3
00638   *         @arg @ref LL_DMA_CHANNEL_4
00639   *         @arg @ref LL_DMA_CHANNEL_5
00640   *         @arg @ref LL_DMA_CHANNEL_6
00641   *         @arg @ref LL_DMA_CHANNEL_7
00642   * @param  PeriphOrM2MSrcIncMode This parameter can be one of the following values:
00643   *         @arg @ref LL_DMA_PERIPH_INCREMENT
00644   *         @arg @ref LL_DMA_PERIPH_NOINCREMENT
00645   * @retval None
00646   */
00647 __STATIC_INLINE void LL_DMA_SetPeriphIncMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphOrM2MSrcIncMode)
00648 {
00649   MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_PINC,
00650              PeriphOrM2MSrcIncMode);
00651 }
00652 
00653 /**
00654   * @brief  Get Peripheral increment mode.
00655   * @rmtoll CCR          PINC          LL_DMA_GetPeriphIncMode
00656   * @param  DMAx DMAx Instance
00657   * @param  Channel This parameter can be one of the following values:
00658   *         @arg @ref LL_DMA_CHANNEL_1
00659   *         @arg @ref LL_DMA_CHANNEL_2
00660   *         @arg @ref LL_DMA_CHANNEL_3
00661   *         @arg @ref LL_DMA_CHANNEL_4
00662   *         @arg @ref LL_DMA_CHANNEL_5
00663   *         @arg @ref LL_DMA_CHANNEL_6
00664   *         @arg @ref LL_DMA_CHANNEL_7
00665   * @retval Returned value can be one of the following values:
00666   *         @arg @ref LL_DMA_PERIPH_INCREMENT
00667   *         @arg @ref LL_DMA_PERIPH_NOINCREMENT
00668   */
00669 __STATIC_INLINE uint32_t LL_DMA_GetPeriphIncMode(DMA_TypeDef *DMAx, uint32_t Channel)
00670 {
00671   return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
00672                    DMA_CCR_PINC));
00673 }
00674 
00675 /**
00676   * @brief  Set Memory increment mode.
00677   * @rmtoll CCR          MINC          LL_DMA_SetMemoryIncMode
00678   * @param  DMAx DMAx Instance
00679   * @param  Channel This parameter can be one of the following values:
00680   *         @arg @ref LL_DMA_CHANNEL_1
00681   *         @arg @ref LL_DMA_CHANNEL_2
00682   *         @arg @ref LL_DMA_CHANNEL_3
00683   *         @arg @ref LL_DMA_CHANNEL_4
00684   *         @arg @ref LL_DMA_CHANNEL_5
00685   *         @arg @ref LL_DMA_CHANNEL_6
00686   *         @arg @ref LL_DMA_CHANNEL_7
00687   * @param  MemoryOrM2MDstIncMode This parameter can be one of the following values:
00688   *         @arg @ref LL_DMA_MEMORY_INCREMENT
00689   *         @arg @ref LL_DMA_MEMORY_NOINCREMENT
00690   * @retval None
00691   */
00692 __STATIC_INLINE void LL_DMA_SetMemoryIncMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryOrM2MDstIncMode)
00693 {
00694   MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_MINC,
00695              MemoryOrM2MDstIncMode);
00696 }
00697 
00698 /**
00699   * @brief  Get Memory increment mode.
00700   * @rmtoll CCR          MINC          LL_DMA_GetMemoryIncMode
00701   * @param  DMAx DMAx Instance
00702   * @param  Channel This parameter can be one of the following values:
00703   *         @arg @ref LL_DMA_CHANNEL_1
00704   *         @arg @ref LL_DMA_CHANNEL_2
00705   *         @arg @ref LL_DMA_CHANNEL_3
00706   *         @arg @ref LL_DMA_CHANNEL_4
00707   *         @arg @ref LL_DMA_CHANNEL_5
00708   *         @arg @ref LL_DMA_CHANNEL_6
00709   *         @arg @ref LL_DMA_CHANNEL_7
00710   * @retval Returned value can be one of the following values:
00711   *         @arg @ref LL_DMA_MEMORY_INCREMENT
00712   *         @arg @ref LL_DMA_MEMORY_NOINCREMENT
00713   */
00714 __STATIC_INLINE uint32_t LL_DMA_GetMemoryIncMode(DMA_TypeDef *DMAx, uint32_t Channel)
00715 {
00716   return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
00717                    DMA_CCR_MINC));
00718 }
00719 
00720 /**
00721   * @brief  Set Peripheral size.
00722   * @rmtoll CCR          PSIZE         LL_DMA_SetPeriphSize
00723   * @param  DMAx DMAx Instance
00724   * @param  Channel This parameter can be one of the following values:
00725   *         @arg @ref LL_DMA_CHANNEL_1
00726   *         @arg @ref LL_DMA_CHANNEL_2
00727   *         @arg @ref LL_DMA_CHANNEL_3
00728   *         @arg @ref LL_DMA_CHANNEL_4
00729   *         @arg @ref LL_DMA_CHANNEL_5
00730   *         @arg @ref LL_DMA_CHANNEL_6
00731   *         @arg @ref LL_DMA_CHANNEL_7
00732   * @param  PeriphOrM2MSrcDataSize This parameter can be one of the following values:
00733   *         @arg @ref LL_DMA_PDATAALIGN_BYTE
00734   *         @arg @ref LL_DMA_PDATAALIGN_HALFWORD
00735   *         @arg @ref LL_DMA_PDATAALIGN_WORD
00736   * @retval None
00737   */
00738 __STATIC_INLINE void LL_DMA_SetPeriphSize(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphOrM2MSrcDataSize)
00739 {
00740   MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_PSIZE,
00741              PeriphOrM2MSrcDataSize);
00742 }
00743 
00744 /**
00745   * @brief  Get Peripheral size.
00746   * @rmtoll CCR          PSIZE         LL_DMA_GetPeriphSize
00747   * @param  DMAx DMAx Instance
00748   * @param  Channel This parameter can be one of the following values:
00749   *         @arg @ref LL_DMA_CHANNEL_1
00750   *         @arg @ref LL_DMA_CHANNEL_2
00751   *         @arg @ref LL_DMA_CHANNEL_3
00752   *         @arg @ref LL_DMA_CHANNEL_4
00753   *         @arg @ref LL_DMA_CHANNEL_5
00754   *         @arg @ref LL_DMA_CHANNEL_6
00755   *         @arg @ref LL_DMA_CHANNEL_7
00756   * @retval Returned value can be one of the following values:
00757   *         @arg @ref LL_DMA_PDATAALIGN_BYTE
00758   *         @arg @ref LL_DMA_PDATAALIGN_HALFWORD
00759   *         @arg @ref LL_DMA_PDATAALIGN_WORD
00760   */
00761 __STATIC_INLINE uint32_t LL_DMA_GetPeriphSize(DMA_TypeDef *DMAx, uint32_t Channel)
00762 {
00763   return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
00764                    DMA_CCR_PSIZE));
00765 }
00766 
00767 /**
00768   * @brief  Set Memory size.
00769   * @rmtoll CCR          MSIZE         LL_DMA_SetMemorySize
00770   * @param  DMAx DMAx Instance
00771   * @param  Channel This parameter can be one of the following values:
00772   *         @arg @ref LL_DMA_CHANNEL_1
00773   *         @arg @ref LL_DMA_CHANNEL_2
00774   *         @arg @ref LL_DMA_CHANNEL_3
00775   *         @arg @ref LL_DMA_CHANNEL_4
00776   *         @arg @ref LL_DMA_CHANNEL_5
00777   *         @arg @ref LL_DMA_CHANNEL_6
00778   *         @arg @ref LL_DMA_CHANNEL_7
00779   * @param  MemoryOrM2MDstDataSize This parameter can be one of the following values:
00780   *         @arg @ref LL_DMA_MDATAALIGN_BYTE
00781   *         @arg @ref LL_DMA_MDATAALIGN_HALFWORD
00782   *         @arg @ref LL_DMA_MDATAALIGN_WORD
00783   * @retval None
00784   */
00785 __STATIC_INLINE void LL_DMA_SetMemorySize(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryOrM2MDstDataSize)
00786 {
00787   MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_MSIZE,
00788              MemoryOrM2MDstDataSize);
00789 }
00790 
00791 /**
00792   * @brief  Get Memory size.
00793   * @rmtoll CCR          MSIZE         LL_DMA_GetMemorySize
00794   * @param  DMAx DMAx Instance
00795   * @param  Channel This parameter can be one of the following values:
00796   *         @arg @ref LL_DMA_CHANNEL_1
00797   *         @arg @ref LL_DMA_CHANNEL_2
00798   *         @arg @ref LL_DMA_CHANNEL_3
00799   *         @arg @ref LL_DMA_CHANNEL_4
00800   *         @arg @ref LL_DMA_CHANNEL_5
00801   *         @arg @ref LL_DMA_CHANNEL_6
00802   *         @arg @ref LL_DMA_CHANNEL_7
00803   * @retval Returned value can be one of the following values:
00804   *         @arg @ref LL_DMA_MDATAALIGN_BYTE
00805   *         @arg @ref LL_DMA_MDATAALIGN_HALFWORD
00806   *         @arg @ref LL_DMA_MDATAALIGN_WORD
00807   */
00808 __STATIC_INLINE uint32_t LL_DMA_GetMemorySize(DMA_TypeDef *DMAx, uint32_t Channel)
00809 {
00810   return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
00811                    DMA_CCR_MSIZE));
00812 }
00813 
00814 /**
00815   * @brief  Set Channel priority level.
00816   * @rmtoll CCR          PL            LL_DMA_SetChannelPriorityLevel
00817   * @param  DMAx DMAx Instance
00818   * @param  Channel This parameter can be one of the following values:
00819   *         @arg @ref LL_DMA_CHANNEL_1
00820   *         @arg @ref LL_DMA_CHANNEL_2
00821   *         @arg @ref LL_DMA_CHANNEL_3
00822   *         @arg @ref LL_DMA_CHANNEL_4
00823   *         @arg @ref LL_DMA_CHANNEL_5
00824   *         @arg @ref LL_DMA_CHANNEL_6
00825   *         @arg @ref LL_DMA_CHANNEL_7
00826   * @param  Priority This parameter can be one of the following values:
00827   *         @arg @ref LL_DMA_PRIORITY_LOW
00828   *         @arg @ref LL_DMA_PRIORITY_MEDIUM
00829   *         @arg @ref LL_DMA_PRIORITY_HIGH
00830   *         @arg @ref LL_DMA_PRIORITY_VERYHIGH
00831   * @retval None
00832   */
00833 __STATIC_INLINE void LL_DMA_SetChannelPriorityLevel(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Priority)
00834 {
00835   MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_PL,
00836              Priority);
00837 }
00838 
00839 /**
00840   * @brief  Get Channel priority level.
00841   * @rmtoll CCR          PL            LL_DMA_GetChannelPriorityLevel
00842   * @param  DMAx DMAx Instance
00843   * @param  Channel This parameter can be one of the following values:
00844   *         @arg @ref LL_DMA_CHANNEL_1
00845   *         @arg @ref LL_DMA_CHANNEL_2
00846   *         @arg @ref LL_DMA_CHANNEL_3
00847   *         @arg @ref LL_DMA_CHANNEL_4
00848   *         @arg @ref LL_DMA_CHANNEL_5
00849   *         @arg @ref LL_DMA_CHANNEL_6
00850   *         @arg @ref LL_DMA_CHANNEL_7
00851   * @retval Returned value can be one of the following values:
00852   *         @arg @ref LL_DMA_PRIORITY_LOW
00853   *         @arg @ref LL_DMA_PRIORITY_MEDIUM
00854   *         @arg @ref LL_DMA_PRIORITY_HIGH
00855   *         @arg @ref LL_DMA_PRIORITY_VERYHIGH
00856   */
00857 __STATIC_INLINE uint32_t LL_DMA_GetChannelPriorityLevel(DMA_TypeDef *DMAx, uint32_t Channel)
00858 {
00859   return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
00860                    DMA_CCR_PL));
00861 }
00862 
00863 /**
00864   * @brief  Set Number of data to transfer.
00865   * @note   This action has no effect if
00866   *         channel is enabled.
00867   * @rmtoll CNDTR        NDT           LL_DMA_SetDataLength
00868   * @param  DMAx DMAx Instance
00869   * @param  Channel This parameter can be one of the following values:
00870   *         @arg @ref LL_DMA_CHANNEL_1
00871   *         @arg @ref LL_DMA_CHANNEL_2
00872   *         @arg @ref LL_DMA_CHANNEL_3
00873   *         @arg @ref LL_DMA_CHANNEL_4
00874   *         @arg @ref LL_DMA_CHANNEL_5
00875   *         @arg @ref LL_DMA_CHANNEL_6
00876   *         @arg @ref LL_DMA_CHANNEL_7
00877   * @param  NbData Between Min_Data = 0 and Max_Data = 0x0000FFFF
00878   * @retval None
00879   */
00880 __STATIC_INLINE void LL_DMA_SetDataLength(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t NbData)
00881 {
00882   MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CNDTR,
00883              DMA_CNDTR_NDT, NbData);
00884 }
00885 
00886 /**
00887   * @brief  Get Number of data to transfer.
00888   * @note   Once the channel is enabled, the return value indicate the
00889   *         remaining bytes to be transmitted.
00890   * @rmtoll CNDTR        NDT           LL_DMA_GetDataLength
00891   * @param  DMAx DMAx Instance
00892   * @param  Channel This parameter can be one of the following values:
00893   *         @arg @ref LL_DMA_CHANNEL_1
00894   *         @arg @ref LL_DMA_CHANNEL_2
00895   *         @arg @ref LL_DMA_CHANNEL_3
00896   *         @arg @ref LL_DMA_CHANNEL_4
00897   *         @arg @ref LL_DMA_CHANNEL_5
00898   *         @arg @ref LL_DMA_CHANNEL_6
00899   *         @arg @ref LL_DMA_CHANNEL_7
00900   * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
00901   */
00902 __STATIC_INLINE uint32_t LL_DMA_GetDataLength(DMA_TypeDef *DMAx, uint32_t Channel)
00903 {
00904   return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CNDTR,
00905                    DMA_CNDTR_NDT));
00906 }
00907 
00908 /**
00909   * @brief  Configure the Source and Destination addresses.
00910   * @note   This API must not be called when the DMA channel is enabled.
00911   * @note   Each IP using DMA provides an API to get directly the register adress (LL_PPP_DMA_GetRegAddr).
00912   * @rmtoll CPAR         PA            LL_DMA_ConfigAddresses\n
00913   *         CMAR         MA            LL_DMA_ConfigAddresses
00914   * @param  DMAx DMAx Instance
00915   * @param  Channel This parameter can be one of the following values:
00916   *         @arg @ref LL_DMA_CHANNEL_1
00917   *         @arg @ref LL_DMA_CHANNEL_2
00918   *         @arg @ref LL_DMA_CHANNEL_3
00919   *         @arg @ref LL_DMA_CHANNEL_4
00920   *         @arg @ref LL_DMA_CHANNEL_5
00921   *         @arg @ref LL_DMA_CHANNEL_6
00922   *         @arg @ref LL_DMA_CHANNEL_7
00923   * @param  SrcAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
00924   * @param  DstAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
00925   * @param  Direction This parameter can be one of the following values:
00926   *         @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
00927   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
00928   *         @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
00929   * @retval None
00930   */
00931 __STATIC_INLINE void LL_DMA_ConfigAddresses(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcAddress,
00932                                             uint32_t DstAddress, uint32_t Direction)
00933 {
00934   /* Direction Memory to Periph */
00935   if (Direction == LL_DMA_DIRECTION_MEMORY_TO_PERIPH)
00936   {
00937     WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR, SrcAddress);
00938     WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR, DstAddress);
00939   }
00940   /* Direction Periph to Memory and Memory to Memory */
00941   else
00942   {
00943     WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR, SrcAddress);
00944     WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR, DstAddress);
00945   }
00946 }
00947 
00948 /**
00949   * @brief  Set the Memory address.
00950   * @note   Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
00951   * @note   This API must not be called when the DMA channel is enabled.
00952   * @rmtoll CMAR         MA            LL_DMA_SetMemoryAddress
00953   * @param  DMAx DMAx Instance
00954   * @param  Channel This parameter can be one of the following values:
00955   *         @arg @ref LL_DMA_CHANNEL_1
00956   *         @arg @ref LL_DMA_CHANNEL_2
00957   *         @arg @ref LL_DMA_CHANNEL_3
00958   *         @arg @ref LL_DMA_CHANNEL_4
00959   *         @arg @ref LL_DMA_CHANNEL_5
00960   *         @arg @ref LL_DMA_CHANNEL_6
00961   *         @arg @ref LL_DMA_CHANNEL_7
00962   * @param  MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
00963   * @retval None
00964   */
00965 __STATIC_INLINE void LL_DMA_SetMemoryAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
00966 {
00967   WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR, MemoryAddress);
00968 }
00969 
00970 /**
00971   * @brief  Set the Peripheral address.
00972   * @note   Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
00973   * @note   This API must not be called when the DMA channel is enabled.
00974   * @rmtoll CPAR         PA            LL_DMA_SetPeriphAddress
00975   * @param  DMAx DMAx Instance
00976   * @param  Channel This parameter can be one of the following values:
00977   *         @arg @ref LL_DMA_CHANNEL_1
00978   *         @arg @ref LL_DMA_CHANNEL_2
00979   *         @arg @ref LL_DMA_CHANNEL_3
00980   *         @arg @ref LL_DMA_CHANNEL_4
00981   *         @arg @ref LL_DMA_CHANNEL_5
00982   *         @arg @ref LL_DMA_CHANNEL_6
00983   *         @arg @ref LL_DMA_CHANNEL_7
00984   * @param  PeriphAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
00985   * @retval None
00986   */
00987 __STATIC_INLINE void LL_DMA_SetPeriphAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphAddress)
00988 {
00989   WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR, PeriphAddress);
00990 }
00991 
00992 /**
00993   * @brief  Get Memory address.
00994   * @note   Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
00995   * @rmtoll CMAR         MA            LL_DMA_GetMemoryAddress
00996   * @param  DMAx DMAx Instance
00997   * @param  Channel This parameter can be one of the following values:
00998   *         @arg @ref LL_DMA_CHANNEL_1
00999   *         @arg @ref LL_DMA_CHANNEL_2
01000   *         @arg @ref LL_DMA_CHANNEL_3
01001   *         @arg @ref LL_DMA_CHANNEL_4
01002   *         @arg @ref LL_DMA_CHANNEL_5
01003   *         @arg @ref LL_DMA_CHANNEL_6
01004   *         @arg @ref LL_DMA_CHANNEL_7
01005   * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01006   */
01007 __STATIC_INLINE uint32_t LL_DMA_GetMemoryAddress(DMA_TypeDef *DMAx, uint32_t Channel)
01008 {
01009   return (READ_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR));
01010 }
01011 
01012 /**
01013   * @brief  Get Peripheral address.
01014   * @note   Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
01015   * @rmtoll CPAR         PA            LL_DMA_GetPeriphAddress
01016   * @param  DMAx DMAx Instance
01017   * @param  Channel This parameter can be one of the following values:
01018   *         @arg @ref LL_DMA_CHANNEL_1
01019   *         @arg @ref LL_DMA_CHANNEL_2
01020   *         @arg @ref LL_DMA_CHANNEL_3
01021   *         @arg @ref LL_DMA_CHANNEL_4
01022   *         @arg @ref LL_DMA_CHANNEL_5
01023   *         @arg @ref LL_DMA_CHANNEL_6
01024   *         @arg @ref LL_DMA_CHANNEL_7
01025   * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01026   */
01027 __STATIC_INLINE uint32_t LL_DMA_GetPeriphAddress(DMA_TypeDef *DMAx, uint32_t Channel)
01028 {
01029   return (READ_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR));
01030 }
01031 
01032 /**
01033   * @brief  Set the Memory to Memory Source address.
01034   * @note   Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
01035   * @note   This API must not be called when the DMA channel is enabled.
01036   * @rmtoll CPAR         PA            LL_DMA_SetM2MSrcAddress
01037   * @param  DMAx DMAx Instance
01038   * @param  Channel This parameter can be one of the following values:
01039   *         @arg @ref LL_DMA_CHANNEL_1
01040   *         @arg @ref LL_DMA_CHANNEL_2
01041   *         @arg @ref LL_DMA_CHANNEL_3
01042   *         @arg @ref LL_DMA_CHANNEL_4
01043   *         @arg @ref LL_DMA_CHANNEL_5
01044   *         @arg @ref LL_DMA_CHANNEL_6
01045   *         @arg @ref LL_DMA_CHANNEL_7
01046   * @param  MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01047   * @retval None
01048   */
01049 __STATIC_INLINE void LL_DMA_SetM2MSrcAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
01050 {
01051   WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR, MemoryAddress);
01052 }
01053 
01054 /**
01055   * @brief  Set the Memory to Memory Destination address.
01056   * @note   Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
01057   * @note   This API must not be called when the DMA channel is enabled.
01058   * @rmtoll CMAR         MA            LL_DMA_SetM2MDstAddress
01059   * @param  DMAx DMAx Instance
01060   * @param  Channel This parameter can be one of the following values:
01061   *         @arg @ref LL_DMA_CHANNEL_1
01062   *         @arg @ref LL_DMA_CHANNEL_2
01063   *         @arg @ref LL_DMA_CHANNEL_3
01064   *         @arg @ref LL_DMA_CHANNEL_4
01065   *         @arg @ref LL_DMA_CHANNEL_5
01066   *         @arg @ref LL_DMA_CHANNEL_6
01067   *         @arg @ref LL_DMA_CHANNEL_7
01068   * @param  MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01069   * @retval None
01070   */
01071 __STATIC_INLINE void LL_DMA_SetM2MDstAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
01072 {
01073   WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR, MemoryAddress);
01074 }
01075 
01076 /**
01077   * @brief  Get the Memory to Memory Source address.
01078   * @note   Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
01079   * @rmtoll CPAR         PA            LL_DMA_GetM2MSrcAddress
01080   * @param  DMAx DMAx Instance
01081   * @param  Channel This parameter can be one of the following values:
01082   *         @arg @ref LL_DMA_CHANNEL_1
01083   *         @arg @ref LL_DMA_CHANNEL_2
01084   *         @arg @ref LL_DMA_CHANNEL_3
01085   *         @arg @ref LL_DMA_CHANNEL_4
01086   *         @arg @ref LL_DMA_CHANNEL_5
01087   *         @arg @ref LL_DMA_CHANNEL_6
01088   *         @arg @ref LL_DMA_CHANNEL_7
01089   * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01090   */
01091 __STATIC_INLINE uint32_t LL_DMA_GetM2MSrcAddress(DMA_TypeDef *DMAx, uint32_t Channel)
01092 {
01093   return (READ_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR));
01094 }
01095 
01096 /**
01097   * @brief  Get the Memory to Memory Destination address.
01098   * @note   Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
01099   * @rmtoll CMAR         MA            LL_DMA_GetM2MDstAddress
01100   * @param  DMAx DMAx Instance
01101   * @param  Channel This parameter can be one of the following values:
01102   *         @arg @ref LL_DMA_CHANNEL_1
01103   *         @arg @ref LL_DMA_CHANNEL_2
01104   *         @arg @ref LL_DMA_CHANNEL_3
01105   *         @arg @ref LL_DMA_CHANNEL_4
01106   *         @arg @ref LL_DMA_CHANNEL_5
01107   *         @arg @ref LL_DMA_CHANNEL_6
01108   *         @arg @ref LL_DMA_CHANNEL_7
01109   * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
01110   */
01111 __STATIC_INLINE uint32_t LL_DMA_GetM2MDstAddress(DMA_TypeDef *DMAx, uint32_t Channel)
01112 {
01113   return (READ_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR));
01114 }
01115 
01116 /**
01117   * @}
01118   */
01119 
01120 /** @defgroup DMA_LL_EF_FLAG_Management FLAG_Management
01121   * @{
01122   */
01123 
01124 /**
01125   * @brief  Get Channel 1 global interrupt flag.
01126   * @rmtoll ISR          GIF1          LL_DMA_IsActiveFlag_GI1
01127   * @param  DMAx DMAx Instance
01128   * @retval State of bit (1 or 0).
01129   */
01130 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI1(DMA_TypeDef *DMAx)
01131 {
01132   return (READ_BIT(DMAx->ISR, DMA_ISR_GIF1) == (DMA_ISR_GIF1));
01133 }
01134 
01135 /**
01136   * @brief  Get Channel 2 global interrupt flag.
01137   * @rmtoll ISR          GIF2          LL_DMA_IsActiveFlag_GI2
01138   * @param  DMAx DMAx Instance
01139   * @retval State of bit (1 or 0).
01140   */
01141 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI2(DMA_TypeDef *DMAx)
01142 {
01143   return (READ_BIT(DMAx->ISR, DMA_ISR_GIF2) == (DMA_ISR_GIF2));
01144 }
01145 
01146 /**
01147   * @brief  Get Channel 3 global interrupt flag.
01148   * @rmtoll ISR          GIF3          LL_DMA_IsActiveFlag_GI3
01149   * @param  DMAx DMAx Instance
01150   * @retval State of bit (1 or 0).
01151   */
01152 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI3(DMA_TypeDef *DMAx)
01153 {
01154   return (READ_BIT(DMAx->ISR, DMA_ISR_GIF3) == (DMA_ISR_GIF3));
01155 }
01156 
01157 /**
01158   * @brief  Get Channel 4 global interrupt flag.
01159   * @rmtoll ISR          GIF4          LL_DMA_IsActiveFlag_GI4
01160   * @param  DMAx DMAx Instance
01161   * @retval State of bit (1 or 0).
01162   */
01163 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI4(DMA_TypeDef *DMAx)
01164 {
01165   return (READ_BIT(DMAx->ISR, DMA_ISR_GIF4) == (DMA_ISR_GIF4));
01166 }
01167 
01168 /**
01169   * @brief  Get Channel 5 global interrupt flag.
01170   * @rmtoll ISR          GIF5          LL_DMA_IsActiveFlag_GI5
01171   * @param  DMAx DMAx Instance
01172   * @retval State of bit (1 or 0).
01173   */
01174 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI5(DMA_TypeDef *DMAx)
01175 {
01176   return (READ_BIT(DMAx->ISR, DMA_ISR_GIF5) == (DMA_ISR_GIF5));
01177 }
01178 
01179 /**
01180   * @brief  Get Channel 6 global interrupt flag.
01181   * @rmtoll ISR          GIF6          LL_DMA_IsActiveFlag_GI6
01182   * @param  DMAx DMAx Instance
01183   * @retval State of bit (1 or 0).
01184   */
01185 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI6(DMA_TypeDef *DMAx)
01186 {
01187   return (READ_BIT(DMAx->ISR, DMA_ISR_GIF6) == (DMA_ISR_GIF6));
01188 }
01189 
01190 /**
01191   * @brief  Get Channel 7 global interrupt flag.
01192   * @rmtoll ISR          GIF7          LL_DMA_IsActiveFlag_GI7
01193   * @param  DMAx DMAx Instance
01194   * @retval State of bit (1 or 0).
01195   */
01196 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI7(DMA_TypeDef *DMAx)
01197 {
01198   return (READ_BIT(DMAx->ISR, DMA_ISR_GIF7) == (DMA_ISR_GIF7));
01199 }
01200 
01201 /**
01202   * @brief  Get Channel 1 transfer complete flag.
01203   * @rmtoll ISR          TCIF1         LL_DMA_IsActiveFlag_TC1
01204   * @param  DMAx DMAx Instance
01205   * @retval State of bit (1 or 0).
01206   */
01207 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC1(DMA_TypeDef *DMAx)
01208 {
01209   return (READ_BIT(DMAx->ISR, DMA_ISR_TCIF1) == (DMA_ISR_TCIF1));
01210 }
01211 
01212 /**
01213   * @brief  Get Channel 2 transfer complete flag.
01214   * @rmtoll ISR          TCIF2         LL_DMA_IsActiveFlag_TC2
01215   * @param  DMAx DMAx Instance
01216   * @retval State of bit (1 or 0).
01217   */
01218 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC2(DMA_TypeDef *DMAx)
01219 {
01220   return (READ_BIT(DMAx->ISR, DMA_ISR_TCIF2) == (DMA_ISR_TCIF2));
01221 }
01222 
01223 /**
01224   * @brief  Get Channel 3 transfer complete flag.
01225   * @rmtoll ISR          TCIF3         LL_DMA_IsActiveFlag_TC3
01226   * @param  DMAx DMAx Instance
01227   * @retval State of bit (1 or 0).
01228   */
01229 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC3(DMA_TypeDef *DMAx)
01230 {
01231   return (READ_BIT(DMAx->ISR, DMA_ISR_TCIF3) == (DMA_ISR_TCIF3));
01232 }
01233 
01234 /**
01235   * @brief  Get Channel 4 transfer complete flag.
01236   * @rmtoll ISR          TCIF4         LL_DMA_IsActiveFlag_TC4
01237   * @param  DMAx DMAx Instance
01238   * @retval State of bit (1 or 0).
01239   */
01240 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC4(DMA_TypeDef *DMAx)
01241 {
01242   return (READ_BIT(DMAx->ISR, DMA_ISR_TCIF4) == (DMA_ISR_TCIF4));
01243 }
01244 
01245 /**
01246   * @brief  Get Channel 5 transfer complete flag.
01247   * @rmtoll ISR          TCIF5         LL_DMA_IsActiveFlag_TC5
01248   * @param  DMAx DMAx Instance
01249   * @retval State of bit (1 or 0).
01250   */
01251 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC5(DMA_TypeDef *DMAx)
01252 {
01253   return (READ_BIT(DMAx->ISR, DMA_ISR_TCIF5) == (DMA_ISR_TCIF5));
01254 }
01255 
01256 /**
01257   * @brief  Get Channel 6 transfer complete flag.
01258   * @rmtoll ISR          TCIF6         LL_DMA_IsActiveFlag_TC6
01259   * @param  DMAx DMAx Instance
01260   * @retval State of bit (1 or 0).
01261   */
01262 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC6(DMA_TypeDef *DMAx)
01263 {
01264   return (READ_BIT(DMAx->ISR, DMA_ISR_TCIF6) == (DMA_ISR_TCIF6));
01265 }
01266 
01267 /**
01268   * @brief  Get Channel 7 transfer complete flag.
01269   * @rmtoll ISR          TCIF7         LL_DMA_IsActiveFlag_TC7
01270   * @param  DMAx DMAx Instance
01271   * @retval State of bit (1 or 0).
01272   */
01273 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC7(DMA_TypeDef *DMAx)
01274 {
01275   return (READ_BIT(DMAx->ISR, DMA_ISR_TCIF7) == (DMA_ISR_TCIF7));
01276 }
01277 
01278 /**
01279   * @brief  Get Channel 1 half transfer flag.
01280   * @rmtoll ISR          HTIF1         LL_DMA_IsActiveFlag_HT1
01281   * @param  DMAx DMAx Instance
01282   * @retval State of bit (1 or 0).
01283   */
01284 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT1(DMA_TypeDef *DMAx)
01285 {
01286   return (READ_BIT(DMAx->ISR, DMA_ISR_HTIF1) == (DMA_ISR_HTIF1));
01287 }
01288 
01289 /**
01290   * @brief  Get Channel 2 half transfer flag.
01291   * @rmtoll ISR          HTIF2         LL_DMA_IsActiveFlag_HT2
01292   * @param  DMAx DMAx Instance
01293   * @retval State of bit (1 or 0).
01294   */
01295 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT2(DMA_TypeDef *DMAx)
01296 {
01297   return (READ_BIT(DMAx->ISR, DMA_ISR_HTIF2) == (DMA_ISR_HTIF2));
01298 }
01299 
01300 /**
01301   * @brief  Get Channel 3 half transfer flag.
01302   * @rmtoll ISR          HTIF3         LL_DMA_IsActiveFlag_HT3
01303   * @param  DMAx DMAx Instance
01304   * @retval State of bit (1 or 0).
01305   */
01306 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT3(DMA_TypeDef *DMAx)
01307 {
01308   return (READ_BIT(DMAx->ISR, DMA_ISR_HTIF3) == (DMA_ISR_HTIF3));
01309 }
01310 
01311 /**
01312   * @brief  Get Channel 4 half transfer flag.
01313   * @rmtoll ISR          HTIF4         LL_DMA_IsActiveFlag_HT4
01314   * @param  DMAx DMAx Instance
01315   * @retval State of bit (1 or 0).
01316   */
01317 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT4(DMA_TypeDef *DMAx)
01318 {
01319   return (READ_BIT(DMAx->ISR, DMA_ISR_HTIF4) == (DMA_ISR_HTIF4));
01320 }
01321 
01322 /**
01323   * @brief  Get Channel 5 half transfer flag.
01324   * @rmtoll ISR          HTIF5         LL_DMA_IsActiveFlag_HT5
01325   * @param  DMAx DMAx Instance
01326   * @retval State of bit (1 or 0).
01327   */
01328 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT5(DMA_TypeDef *DMAx)
01329 {
01330   return (READ_BIT(DMAx->ISR, DMA_ISR_HTIF5) == (DMA_ISR_HTIF5));
01331 }
01332 
01333 /**
01334   * @brief  Get Channel 6 half transfer flag.
01335   * @rmtoll ISR          HTIF6         LL_DMA_IsActiveFlag_HT6
01336   * @param  DMAx DMAx Instance
01337   * @retval State of bit (1 or 0).
01338   */
01339 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT6(DMA_TypeDef *DMAx)
01340 {
01341   return (READ_BIT(DMAx->ISR, DMA_ISR_HTIF6) == (DMA_ISR_HTIF6));
01342 }
01343 
01344 /**
01345   * @brief  Get Channel 7 half transfer flag.
01346   * @rmtoll ISR          HTIF7         LL_DMA_IsActiveFlag_HT7
01347   * @param  DMAx DMAx Instance
01348   * @retval State of bit (1 or 0).
01349   */
01350 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT7(DMA_TypeDef *DMAx)
01351 {
01352   return (READ_BIT(DMAx->ISR, DMA_ISR_HTIF7) == (DMA_ISR_HTIF7));
01353 }
01354 
01355 /**
01356   * @brief  Get Channel 1 transfer error flag.
01357   * @rmtoll ISR          TEIF1         LL_DMA_IsActiveFlag_TE1
01358   * @param  DMAx DMAx Instance
01359   * @retval State of bit (1 or 0).
01360   */
01361 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE1(DMA_TypeDef *DMAx)
01362 {
01363   return (READ_BIT(DMAx->ISR, DMA_ISR_TEIF1) == (DMA_ISR_TEIF1));
01364 }
01365 
01366 /**
01367   * @brief  Get Channel 2 transfer error flag.
01368   * @rmtoll ISR          TEIF2         LL_DMA_IsActiveFlag_TE2
01369   * @param  DMAx DMAx Instance
01370   * @retval State of bit (1 or 0).
01371   */
01372 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE2(DMA_TypeDef *DMAx)
01373 {
01374   return (READ_BIT(DMAx->ISR, DMA_ISR_TEIF2) == (DMA_ISR_TEIF2));
01375 }
01376 
01377 /**
01378   * @brief  Get Channel 3 transfer error flag.
01379   * @rmtoll ISR          TEIF3         LL_DMA_IsActiveFlag_TE3
01380   * @param  DMAx DMAx Instance
01381   * @retval State of bit (1 or 0).
01382   */
01383 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE3(DMA_TypeDef *DMAx)
01384 {
01385   return (READ_BIT(DMAx->ISR, DMA_ISR_TEIF3) == (DMA_ISR_TEIF3));
01386 }
01387 
01388 /**
01389   * @brief  Get Channel 4 transfer error flag.
01390   * @rmtoll ISR          TEIF4         LL_DMA_IsActiveFlag_TE4
01391   * @param  DMAx DMAx Instance
01392   * @retval State of bit (1 or 0).
01393   */
01394 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE4(DMA_TypeDef *DMAx)
01395 {
01396   return (READ_BIT(DMAx->ISR, DMA_ISR_TEIF4) == (DMA_ISR_TEIF4));
01397 }
01398 
01399 /**
01400   * @brief  Get Channel 5 transfer error flag.
01401   * @rmtoll ISR          TEIF5         LL_DMA_IsActiveFlag_TE5
01402   * @param  DMAx DMAx Instance
01403   * @retval State of bit (1 or 0).
01404   */
01405 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE5(DMA_TypeDef *DMAx)
01406 {
01407   return (READ_BIT(DMAx->ISR, DMA_ISR_TEIF5) == (DMA_ISR_TEIF5));
01408 }
01409 
01410 /**
01411   * @brief  Get Channel 6 transfer error flag.
01412   * @rmtoll ISR          TEIF6         LL_DMA_IsActiveFlag_TE6
01413   * @param  DMAx DMAx Instance
01414   * @retval State of bit (1 or 0).
01415   */
01416 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE6(DMA_TypeDef *DMAx)
01417 {
01418   return (READ_BIT(DMAx->ISR, DMA_ISR_TEIF6) == (DMA_ISR_TEIF6));
01419 }
01420 
01421 /**
01422   * @brief  Get Channel 7 transfer error flag.
01423   * @rmtoll ISR          TEIF7         LL_DMA_IsActiveFlag_TE7
01424   * @param  DMAx DMAx Instance
01425   * @retval State of bit (1 or 0).
01426   */
01427 __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE7(DMA_TypeDef *DMAx)
01428 {
01429   return (READ_BIT(DMAx->ISR, DMA_ISR_TEIF7) == (DMA_ISR_TEIF7));
01430 }
01431 
01432 /**
01433   * @brief  Clear Channel 1 global interrupt flag.
01434   * @rmtoll IFCR         CGIF1         LL_DMA_ClearFlag_GI1
01435   * @param  DMAx DMAx Instance
01436   * @retval None
01437   */
01438 __STATIC_INLINE void LL_DMA_ClearFlag_GI1(DMA_TypeDef *DMAx)
01439 {
01440   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF1);
01441 }
01442 
01443 /**
01444   * @brief  Clear Channel 2 global interrupt flag.
01445   * @rmtoll IFCR         CGIF2         LL_DMA_ClearFlag_GI2
01446   * @param  DMAx DMAx Instance
01447   * @retval None
01448   */
01449 __STATIC_INLINE void LL_DMA_ClearFlag_GI2(DMA_TypeDef *DMAx)
01450 {
01451   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF2);
01452 }
01453 
01454 /**
01455   * @brief  Clear Channel 3 global interrupt flag.
01456   * @rmtoll IFCR         CGIF3         LL_DMA_ClearFlag_GI3
01457   * @param  DMAx DMAx Instance
01458   * @retval None
01459   */
01460 __STATIC_INLINE void LL_DMA_ClearFlag_GI3(DMA_TypeDef *DMAx)
01461 {
01462   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF3);
01463 }
01464 
01465 /**
01466   * @brief  Clear Channel 4 global interrupt flag.
01467   * @rmtoll IFCR         CGIF4         LL_DMA_ClearFlag_GI4
01468   * @param  DMAx DMAx Instance
01469   * @retval None
01470   */
01471 __STATIC_INLINE void LL_DMA_ClearFlag_GI4(DMA_TypeDef *DMAx)
01472 {
01473   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF4);
01474 }
01475 
01476 /**
01477   * @brief  Clear Channel 5 global interrupt flag.
01478   * @rmtoll IFCR         CGIF5         LL_DMA_ClearFlag_GI5
01479   * @param  DMAx DMAx Instance
01480   * @retval None
01481   */
01482 __STATIC_INLINE void LL_DMA_ClearFlag_GI5(DMA_TypeDef *DMAx)
01483 {
01484   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF5);
01485 }
01486 
01487 /**
01488   * @brief  Clear Channel 6 global interrupt flag.
01489   * @rmtoll IFCR         CGIF6         LL_DMA_ClearFlag_GI6
01490   * @param  DMAx DMAx Instance
01491   * @retval None
01492   */
01493 __STATIC_INLINE void LL_DMA_ClearFlag_GI6(DMA_TypeDef *DMAx)
01494 {
01495   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF6);
01496 }
01497 
01498 /**
01499   * @brief  Clear Channel 7 global interrupt flag.
01500   * @rmtoll IFCR         CGIF7         LL_DMA_ClearFlag_GI7
01501   * @param  DMAx DMAx Instance
01502   * @retval None
01503   */
01504 __STATIC_INLINE void LL_DMA_ClearFlag_GI7(DMA_TypeDef *DMAx)
01505 {
01506   WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF7);
01507 }
01508 
01509 /**
01510   * @brief  Clear Channel 1  transfer complete flag.
01511   * @rmtoll IFCR         CTCIF1        LL_DMA_ClearFlag_TC1
01512   * @param  DMAx DMAx Instance
01513   * @retval None
01514   */
01515 __STATIC_INLINE void LL_DMA_ClearFlag_TC1(DMA_TypeDef *DMAx)
01516 {
01517   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF1);
01518 }
01519 
01520 /**
01521   * @brief  Clear Channel 2  transfer complete flag.
01522   * @rmtoll IFCR         CTCIF2        LL_DMA_ClearFlag_TC2
01523   * @param  DMAx DMAx Instance
01524   * @retval None
01525   */
01526 __STATIC_INLINE void LL_DMA_ClearFlag_TC2(DMA_TypeDef *DMAx)
01527 {
01528   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF2);
01529 }
01530 
01531 /**
01532   * @brief  Clear Channel 3  transfer complete flag.
01533   * @rmtoll IFCR         CTCIF3        LL_DMA_ClearFlag_TC3
01534   * @param  DMAx DMAx Instance
01535   * @retval None
01536   */
01537 __STATIC_INLINE void LL_DMA_ClearFlag_TC3(DMA_TypeDef *DMAx)
01538 {
01539   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF3);
01540 }
01541 
01542 /**
01543   * @brief  Clear Channel 4  transfer complete flag.
01544   * @rmtoll IFCR         CTCIF4        LL_DMA_ClearFlag_TC4
01545   * @param  DMAx DMAx Instance
01546   * @retval None
01547   */
01548 __STATIC_INLINE void LL_DMA_ClearFlag_TC4(DMA_TypeDef *DMAx)
01549 {
01550   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF4);
01551 }
01552 
01553 /**
01554   * @brief  Clear Channel 5  transfer complete flag.
01555   * @rmtoll IFCR         CTCIF5        LL_DMA_ClearFlag_TC5
01556   * @param  DMAx DMAx Instance
01557   * @retval None
01558   */
01559 __STATIC_INLINE void LL_DMA_ClearFlag_TC5(DMA_TypeDef *DMAx)
01560 {
01561   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF5);
01562 }
01563 
01564 /**
01565   * @brief  Clear Channel 6  transfer complete flag.
01566   * @rmtoll IFCR         CTCIF6        LL_DMA_ClearFlag_TC6
01567   * @param  DMAx DMAx Instance
01568   * @retval None
01569   */
01570 __STATIC_INLINE void LL_DMA_ClearFlag_TC6(DMA_TypeDef *DMAx)
01571 {
01572   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF6);
01573 }
01574 
01575 /**
01576   * @brief  Clear Channel 7  transfer complete flag.
01577   * @rmtoll IFCR         CTCIF7        LL_DMA_ClearFlag_TC7
01578   * @param  DMAx DMAx Instance
01579   * @retval None
01580   */
01581 __STATIC_INLINE void LL_DMA_ClearFlag_TC7(DMA_TypeDef *DMAx)
01582 {
01583   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF7);
01584 }
01585 
01586 /**
01587   * @brief  Clear Channel 1  half transfer flag.
01588   * @rmtoll IFCR         CHTIF1        LL_DMA_ClearFlag_HT1
01589   * @param  DMAx DMAx Instance
01590   * @retval None
01591   */
01592 __STATIC_INLINE void LL_DMA_ClearFlag_HT1(DMA_TypeDef *DMAx)
01593 {
01594   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF1);
01595 }
01596 
01597 /**
01598   * @brief  Clear Channel 2  half transfer flag.
01599   * @rmtoll IFCR         CHTIF2        LL_DMA_ClearFlag_HT2
01600   * @param  DMAx DMAx Instance
01601   * @retval None
01602   */
01603 __STATIC_INLINE void LL_DMA_ClearFlag_HT2(DMA_TypeDef *DMAx)
01604 {
01605   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF2);
01606 }
01607 
01608 /**
01609   * @brief  Clear Channel 3  half transfer flag.
01610   * @rmtoll IFCR         CHTIF3        LL_DMA_ClearFlag_HT3
01611   * @param  DMAx DMAx Instance
01612   * @retval None
01613   */
01614 __STATIC_INLINE void LL_DMA_ClearFlag_HT3(DMA_TypeDef *DMAx)
01615 {
01616   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF3);
01617 }
01618 
01619 /**
01620   * @brief  Clear Channel 4  half transfer flag.
01621   * @rmtoll IFCR         CHTIF4        LL_DMA_ClearFlag_HT4
01622   * @param  DMAx DMAx Instance
01623   * @retval None
01624   */
01625 __STATIC_INLINE void LL_DMA_ClearFlag_HT4(DMA_TypeDef *DMAx)
01626 {
01627   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF4);
01628 }
01629 
01630 /**
01631   * @brief  Clear Channel 5  half transfer flag.
01632   * @rmtoll IFCR         CHTIF5        LL_DMA_ClearFlag_HT5
01633   * @param  DMAx DMAx Instance
01634   * @retval None
01635   */
01636 __STATIC_INLINE void LL_DMA_ClearFlag_HT5(DMA_TypeDef *DMAx)
01637 {
01638   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF5);
01639 }
01640 
01641 /**
01642   * @brief  Clear Channel 6  half transfer flag.
01643   * @rmtoll IFCR         CHTIF6        LL_DMA_ClearFlag_HT6
01644   * @param  DMAx DMAx Instance
01645   * @retval None
01646   */
01647 __STATIC_INLINE void LL_DMA_ClearFlag_HT6(DMA_TypeDef *DMAx)
01648 {
01649   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF6);
01650 }
01651 
01652 /**
01653   * @brief  Clear Channel 7  half transfer flag.
01654   * @rmtoll IFCR         CHTIF7        LL_DMA_ClearFlag_HT7
01655   * @param  DMAx DMAx Instance
01656   * @retval None
01657   */
01658 __STATIC_INLINE void LL_DMA_ClearFlag_HT7(DMA_TypeDef *DMAx)
01659 {
01660   WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF7);
01661 }
01662 
01663 /**
01664   * @brief  Clear Channel 1 transfer error flag.
01665   * @rmtoll IFCR         CTEIF1        LL_DMA_ClearFlag_TE1
01666   * @param  DMAx DMAx Instance
01667   * @retval None
01668   */
01669 __STATIC_INLINE void LL_DMA_ClearFlag_TE1(DMA_TypeDef *DMAx)
01670 {
01671   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF1);
01672 }
01673 
01674 /**
01675   * @brief  Clear Channel 2 transfer error flag.
01676   * @rmtoll IFCR         CTEIF2        LL_DMA_ClearFlag_TE2
01677   * @param  DMAx DMAx Instance
01678   * @retval None
01679   */
01680 __STATIC_INLINE void LL_DMA_ClearFlag_TE2(DMA_TypeDef *DMAx)
01681 {
01682   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF2);
01683 }
01684 
01685 /**
01686   * @brief  Clear Channel 3 transfer error flag.
01687   * @rmtoll IFCR         CTEIF3        LL_DMA_ClearFlag_TE3
01688   * @param  DMAx DMAx Instance
01689   * @retval None
01690   */
01691 __STATIC_INLINE void LL_DMA_ClearFlag_TE3(DMA_TypeDef *DMAx)
01692 {
01693   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF3);
01694 }
01695 
01696 /**
01697   * @brief  Clear Channel 4 transfer error flag.
01698   * @rmtoll IFCR         CTEIF4        LL_DMA_ClearFlag_TE4
01699   * @param  DMAx DMAx Instance
01700   * @retval None
01701   */
01702 __STATIC_INLINE void LL_DMA_ClearFlag_TE4(DMA_TypeDef *DMAx)
01703 {
01704   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF4);
01705 }
01706 
01707 /**
01708   * @brief  Clear Channel 5 transfer error flag.
01709   * @rmtoll IFCR         CTEIF5        LL_DMA_ClearFlag_TE5
01710   * @param  DMAx DMAx Instance
01711   * @retval None
01712   */
01713 __STATIC_INLINE void LL_DMA_ClearFlag_TE5(DMA_TypeDef *DMAx)
01714 {
01715   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF5);
01716 }
01717 
01718 /**
01719   * @brief  Clear Channel 6 transfer error flag.
01720   * @rmtoll IFCR         CTEIF6        LL_DMA_ClearFlag_TE6
01721   * @param  DMAx DMAx Instance
01722   * @retval None
01723   */
01724 __STATIC_INLINE void LL_DMA_ClearFlag_TE6(DMA_TypeDef *DMAx)
01725 {
01726   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF6);
01727 }
01728 
01729 /**
01730   * @brief  Clear Channel 7 transfer error flag.
01731   * @rmtoll IFCR         CTEIF7        LL_DMA_ClearFlag_TE7
01732   * @param  DMAx DMAx Instance
01733   * @retval None
01734   */
01735 __STATIC_INLINE void LL_DMA_ClearFlag_TE7(DMA_TypeDef *DMAx)
01736 {
01737   WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF7);
01738 }
01739 
01740 /**
01741   * @}
01742   */
01743 
01744 /** @defgroup DMA_LL_EF_IT_Management IT_Management
01745   * @{
01746   */
01747 
01748 /**
01749   * @brief  Enable Transfer complete interrupt.
01750   * @rmtoll CCR          TCIE          LL_DMA_EnableIT_TC
01751   * @param  DMAx DMAx Instance
01752   * @param  Channel This parameter can be one of the following values:
01753   *         @arg @ref LL_DMA_CHANNEL_1
01754   *         @arg @ref LL_DMA_CHANNEL_2
01755   *         @arg @ref LL_DMA_CHANNEL_3
01756   *         @arg @ref LL_DMA_CHANNEL_4
01757   *         @arg @ref LL_DMA_CHANNEL_5
01758   *         @arg @ref LL_DMA_CHANNEL_6
01759   *         @arg @ref LL_DMA_CHANNEL_7
01760   * @retval None
01761   */
01762 __STATIC_INLINE void LL_DMA_EnableIT_TC(DMA_TypeDef *DMAx, uint32_t Channel)
01763 {
01764   SET_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_TCIE);
01765 }
01766 
01767 /**
01768   * @brief  Enable Half transfer interrupt.
01769   * @rmtoll CCR          HTIE          LL_DMA_EnableIT_HT
01770   * @param  DMAx DMAx Instance
01771   * @param  Channel This parameter can be one of the following values:
01772   *         @arg @ref LL_DMA_CHANNEL_1
01773   *         @arg @ref LL_DMA_CHANNEL_2
01774   *         @arg @ref LL_DMA_CHANNEL_3
01775   *         @arg @ref LL_DMA_CHANNEL_4
01776   *         @arg @ref LL_DMA_CHANNEL_5
01777   *         @arg @ref LL_DMA_CHANNEL_6
01778   *         @arg @ref LL_DMA_CHANNEL_7
01779   * @retval None
01780   */
01781 __STATIC_INLINE void LL_DMA_EnableIT_HT(DMA_TypeDef *DMAx, uint32_t Channel)
01782 {
01783   SET_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_HTIE);
01784 }
01785 
01786 /**
01787   * @brief  Enable Transfer error interrupt.
01788   * @rmtoll CCR          TEIE          LL_DMA_EnableIT_TE
01789   * @param  DMAx DMAx Instance
01790   * @param  Channel This parameter can be one of the following values:
01791   *         @arg @ref LL_DMA_CHANNEL_1
01792   *         @arg @ref LL_DMA_CHANNEL_2
01793   *         @arg @ref LL_DMA_CHANNEL_3
01794   *         @arg @ref LL_DMA_CHANNEL_4
01795   *         @arg @ref LL_DMA_CHANNEL_5
01796   *         @arg @ref LL_DMA_CHANNEL_6
01797   *         @arg @ref LL_DMA_CHANNEL_7
01798   * @retval None
01799   */
01800 __STATIC_INLINE void LL_DMA_EnableIT_TE(DMA_TypeDef *DMAx, uint32_t Channel)
01801 {
01802   SET_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_TEIE);
01803 }
01804 
01805 /**
01806   * @brief  Disable Transfer complete interrupt.
01807   * @rmtoll CCR          TCIE          LL_DMA_DisableIT_TC
01808   * @param  DMAx DMAx Instance
01809   * @param  Channel This parameter can be one of the following values:
01810   *         @arg @ref LL_DMA_CHANNEL_1
01811   *         @arg @ref LL_DMA_CHANNEL_2
01812   *         @arg @ref LL_DMA_CHANNEL_3
01813   *         @arg @ref LL_DMA_CHANNEL_4
01814   *         @arg @ref LL_DMA_CHANNEL_5
01815   *         @arg @ref LL_DMA_CHANNEL_6
01816   *         @arg @ref LL_DMA_CHANNEL_7
01817   * @retval None
01818   */
01819 __STATIC_INLINE void LL_DMA_DisableIT_TC(DMA_TypeDef *DMAx, uint32_t Channel)
01820 {
01821   CLEAR_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_TCIE);
01822 }
01823 
01824 /**
01825   * @brief  Disable Half transfer interrupt.
01826   * @rmtoll CCR          HTIE          LL_DMA_DisableIT_HT
01827   * @param  DMAx DMAx Instance
01828   * @param  Channel This parameter can be one of the following values:
01829   *         @arg @ref LL_DMA_CHANNEL_1
01830   *         @arg @ref LL_DMA_CHANNEL_2
01831   *         @arg @ref LL_DMA_CHANNEL_3
01832   *         @arg @ref LL_DMA_CHANNEL_4
01833   *         @arg @ref LL_DMA_CHANNEL_5
01834   *         @arg @ref LL_DMA_CHANNEL_6
01835   *         @arg @ref LL_DMA_CHANNEL_7
01836   * @retval None
01837   */
01838 __STATIC_INLINE void LL_DMA_DisableIT_HT(DMA_TypeDef *DMAx, uint32_t Channel)
01839 {
01840   CLEAR_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_HTIE);
01841 }
01842 
01843 /**
01844   * @brief  Disable Transfer error interrupt.
01845   * @rmtoll CCR          TEIE          LL_DMA_DisableIT_TE
01846   * @param  DMAx DMAx Instance
01847   * @param  Channel This parameter can be one of the following values:
01848   *         @arg @ref LL_DMA_CHANNEL_1
01849   *         @arg @ref LL_DMA_CHANNEL_2
01850   *         @arg @ref LL_DMA_CHANNEL_3
01851   *         @arg @ref LL_DMA_CHANNEL_4
01852   *         @arg @ref LL_DMA_CHANNEL_5
01853   *         @arg @ref LL_DMA_CHANNEL_6
01854   *         @arg @ref LL_DMA_CHANNEL_7
01855   * @retval None
01856   */
01857 __STATIC_INLINE void LL_DMA_DisableIT_TE(DMA_TypeDef *DMAx, uint32_t Channel)
01858 {
01859   CLEAR_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_TEIE);
01860 }
01861 
01862 /**
01863   * @brief  Check if Transfer complete Interrupt is enabled.
01864   * @rmtoll CCR          TCIE          LL_DMA_IsEnabledIT_TC
01865   * @param  DMAx DMAx Instance
01866   * @param  Channel This parameter can be one of the following values:
01867   *         @arg @ref LL_DMA_CHANNEL_1
01868   *         @arg @ref LL_DMA_CHANNEL_2
01869   *         @arg @ref LL_DMA_CHANNEL_3
01870   *         @arg @ref LL_DMA_CHANNEL_4
01871   *         @arg @ref LL_DMA_CHANNEL_5
01872   *         @arg @ref LL_DMA_CHANNEL_6
01873   *         @arg @ref LL_DMA_CHANNEL_7
01874   * @retval State of bit (1 or 0).
01875   */
01876 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TC(DMA_TypeDef *DMAx, uint32_t Channel)
01877 {
01878   return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
01879                    DMA_CCR_TCIE) == (DMA_CCR_TCIE));
01880 }
01881 
01882 /**
01883   * @brief  Check if Half transfer Interrupt is enabled.
01884   * @rmtoll CCR          HTIE          LL_DMA_IsEnabledIT_HT
01885   * @param  DMAx DMAx Instance
01886   * @param  Channel This parameter can be one of the following values:
01887   *         @arg @ref LL_DMA_CHANNEL_1
01888   *         @arg @ref LL_DMA_CHANNEL_2
01889   *         @arg @ref LL_DMA_CHANNEL_3
01890   *         @arg @ref LL_DMA_CHANNEL_4
01891   *         @arg @ref LL_DMA_CHANNEL_5
01892   *         @arg @ref LL_DMA_CHANNEL_6
01893   *         @arg @ref LL_DMA_CHANNEL_7
01894   * @retval State of bit (1 or 0).
01895   */
01896 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_HT(DMA_TypeDef *DMAx, uint32_t Channel)
01897 {
01898   return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
01899                    DMA_CCR_HTIE) == (DMA_CCR_HTIE));
01900 }
01901 
01902 /**
01903   * @brief  Check if Transfer error Interrupt is enabled.
01904   * @rmtoll CCR          TEIE          LL_DMA_IsEnabledIT_TE
01905   * @param  DMAx DMAx Instance
01906   * @param  Channel This parameter can be one of the following values:
01907   *         @arg @ref LL_DMA_CHANNEL_1
01908   *         @arg @ref LL_DMA_CHANNEL_2
01909   *         @arg @ref LL_DMA_CHANNEL_3
01910   *         @arg @ref LL_DMA_CHANNEL_4
01911   *         @arg @ref LL_DMA_CHANNEL_5
01912   *         @arg @ref LL_DMA_CHANNEL_6
01913   *         @arg @ref LL_DMA_CHANNEL_7
01914   * @retval State of bit (1 or 0).
01915   */
01916 __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TE(DMA_TypeDef *DMAx, uint32_t Channel)
01917 {
01918   return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
01919                    DMA_CCR_TEIE) == (DMA_CCR_TEIE));
01920 }
01921 
01922 /**
01923   * @}
01924   */
01925 
01926 #if defined(USE_FULL_LL_DRIVER)
01927 /** @defgroup DMA_LL_EF_Init Initialization and de-initialization functions
01928   * @{
01929   */
01930 
01931 uint32_t LL_DMA_Init(DMA_TypeDef *DMAx, uint32_t Channel, LL_DMA_InitTypeDef *DMA_InitStruct);
01932 uint32_t LL_DMA_DeInit(DMA_TypeDef *DMAx, uint32_t Channel);
01933 void LL_DMA_StructInit(LL_DMA_InitTypeDef *DMA_InitStruct);
01934 
01935 /**
01936   * @}
01937   */
01938 #endif /* USE_FULL_LL_DRIVER */
01939 
01940 /**
01941   * @}
01942   */
01943 
01944 /**
01945   * @}
01946   */
01947 
01948 #endif /* DMA1 || DMA2 */
01949 
01950 /**
01951   * @}
01952   */
01953 
01954 #ifdef __cplusplus
01955 }
01956 #endif
01957 
01958 #endif /* __STM32F1xx_LL_DMA_H */
01959 
01960 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/