STM32L443xx HAL User Manual
|
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 */