mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
Parent:
186:707f6e361f3e
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kojto 158:b23ee177fd68 1 /**
Kojto 158:b23ee177fd68 2 ******************************************************************************
Kojto 158:b23ee177fd68 3 * @file stm32l0xx_ll_dma.c
Kojto 158:b23ee177fd68 4 * @author MCD Application Team
Kojto 158:b23ee177fd68 5 * @brief DMA LL module driver.
Kojto 158:b23ee177fd68 6 ******************************************************************************
Kojto 158:b23ee177fd68 7 * @attention
Kojto 158:b23ee177fd68 8 *
Kojto 158:b23ee177fd68 9 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
Kojto 158:b23ee177fd68 10 *
Kojto 158:b23ee177fd68 11 * Redistribution and use in source and binary forms, with or without modification,
Kojto 158:b23ee177fd68 12 * are permitted provided that the following conditions are met:
Kojto 158:b23ee177fd68 13 * 1. Redistributions of source code must retain the above copyright notice,
Kojto 158:b23ee177fd68 14 * this list of conditions and the following disclaimer.
Kojto 158:b23ee177fd68 15 * 2. Redistributions in binary form must reproduce the above copyright notice,
Kojto 158:b23ee177fd68 16 * this list of conditions and the following disclaimer in the documentation
Kojto 158:b23ee177fd68 17 * and/or other materials provided with the distribution.
Kojto 158:b23ee177fd68 18 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Kojto 158:b23ee177fd68 19 * may be used to endorse or promote products derived from this software
Kojto 158:b23ee177fd68 20 * without specific prior written permission.
Kojto 158:b23ee177fd68 21 *
Kojto 158:b23ee177fd68 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Kojto 158:b23ee177fd68 23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Kojto 158:b23ee177fd68 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Kojto 158:b23ee177fd68 25 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Kojto 158:b23ee177fd68 26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Kojto 158:b23ee177fd68 27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Kojto 158:b23ee177fd68 28 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Kojto 158:b23ee177fd68 29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Kojto 158:b23ee177fd68 30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Kojto 158:b23ee177fd68 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Kojto 158:b23ee177fd68 32 *
Kojto 158:b23ee177fd68 33 ******************************************************************************
Kojto 158:b23ee177fd68 34 */
Kojto 158:b23ee177fd68 35 #if defined(USE_FULL_LL_DRIVER)
Kojto 158:b23ee177fd68 36
Kojto 158:b23ee177fd68 37 /* Includes ------------------------------------------------------------------*/
Kojto 158:b23ee177fd68 38 #include "stm32l0xx_ll_dma.h"
Kojto 158:b23ee177fd68 39 #include "stm32l0xx_ll_bus.h"
Kojto 158:b23ee177fd68 40 #ifdef USE_FULL_ASSERT
Kojto 158:b23ee177fd68 41 #include "stm32_assert.h"
Kojto 158:b23ee177fd68 42 #else
Kojto 158:b23ee177fd68 43 #define assert_param(expr) ((void)0U)
Kojto 158:b23ee177fd68 44 #endif
Kojto 158:b23ee177fd68 45
Kojto 158:b23ee177fd68 46 /** @addtogroup STM32L0xx_LL_Driver
Kojto 158:b23ee177fd68 47 * @{
Kojto 158:b23ee177fd68 48 */
Kojto 158:b23ee177fd68 49
Kojto 158:b23ee177fd68 50 #if defined (DMA1)
Kojto 158:b23ee177fd68 51
Kojto 158:b23ee177fd68 52 /** @defgroup DMA_LL DMA
Kojto 158:b23ee177fd68 53 * @{
Kojto 158:b23ee177fd68 54 */
Kojto 158:b23ee177fd68 55
Kojto 158:b23ee177fd68 56 /* Private types -------------------------------------------------------------*/
Kojto 158:b23ee177fd68 57 /* Private variables ---------------------------------------------------------*/
Kojto 158:b23ee177fd68 58 /* Private constants ---------------------------------------------------------*/
Kojto 158:b23ee177fd68 59 /* Private macros ------------------------------------------------------------*/
Kojto 158:b23ee177fd68 60 /** @addtogroup DMA_LL_Private_Macros
Kojto 158:b23ee177fd68 61 * @{
Kojto 158:b23ee177fd68 62 */
Kojto 158:b23ee177fd68 63 #define IS_LL_DMA_DIRECTION(__VALUE__) (((__VALUE__) == LL_DMA_DIRECTION_PERIPH_TO_MEMORY) || \
Kojto 158:b23ee177fd68 64 ((__VALUE__) == LL_DMA_DIRECTION_MEMORY_TO_PERIPH) || \
Kojto 158:b23ee177fd68 65 ((__VALUE__) == LL_DMA_DIRECTION_MEMORY_TO_MEMORY))
Kojto 158:b23ee177fd68 66
Kojto 158:b23ee177fd68 67 #define IS_LL_DMA_MODE(__VALUE__) (((__VALUE__) == LL_DMA_MODE_NORMAL) || \
Kojto 158:b23ee177fd68 68 ((__VALUE__) == LL_DMA_MODE_CIRCULAR))
Kojto 158:b23ee177fd68 69
Kojto 158:b23ee177fd68 70 #define IS_LL_DMA_PERIPHINCMODE(__VALUE__) (((__VALUE__) == LL_DMA_PERIPH_INCREMENT) || \
Kojto 158:b23ee177fd68 71 ((__VALUE__) == LL_DMA_PERIPH_NOINCREMENT))
Kojto 158:b23ee177fd68 72
Kojto 158:b23ee177fd68 73 #define IS_LL_DMA_MEMORYINCMODE(__VALUE__) (((__VALUE__) == LL_DMA_MEMORY_INCREMENT) || \
Kojto 158:b23ee177fd68 74 ((__VALUE__) == LL_DMA_MEMORY_NOINCREMENT))
Kojto 158:b23ee177fd68 75
Kojto 158:b23ee177fd68 76 #define IS_LL_DMA_PERIPHDATASIZE(__VALUE__) (((__VALUE__) == LL_DMA_PDATAALIGN_BYTE) || \
Kojto 158:b23ee177fd68 77 ((__VALUE__) == LL_DMA_PDATAALIGN_HALFWORD) || \
Kojto 158:b23ee177fd68 78 ((__VALUE__) == LL_DMA_PDATAALIGN_WORD))
Kojto 158:b23ee177fd68 79
Kojto 158:b23ee177fd68 80 #define IS_LL_DMA_MEMORYDATASIZE(__VALUE__) (((__VALUE__) == LL_DMA_MDATAALIGN_BYTE) || \
Kojto 158:b23ee177fd68 81 ((__VALUE__) == LL_DMA_MDATAALIGN_HALFWORD) || \
Kojto 158:b23ee177fd68 82 ((__VALUE__) == LL_DMA_MDATAALIGN_WORD))
Kojto 158:b23ee177fd68 83
Kojto 158:b23ee177fd68 84 #define IS_LL_DMA_NBDATA(__VALUE__) ((__VALUE__) <= (uint32_t)0x0000FFFFU)
Kojto 158:b23ee177fd68 85
Kojto 158:b23ee177fd68 86 #define IS_LL_DMA_PERIPHREQUEST(__VALUE__) (((__VALUE__) == LL_DMA_REQUEST_0) || \
Kojto 158:b23ee177fd68 87 ((__VALUE__) == LL_DMA_REQUEST_1) || \
Kojto 158:b23ee177fd68 88 ((__VALUE__) == LL_DMA_REQUEST_2) || \
Kojto 158:b23ee177fd68 89 ((__VALUE__) == LL_DMA_REQUEST_3) || \
Kojto 158:b23ee177fd68 90 ((__VALUE__) == LL_DMA_REQUEST_4) || \
Kojto 158:b23ee177fd68 91 ((__VALUE__) == LL_DMA_REQUEST_5) || \
Kojto 158:b23ee177fd68 92 ((__VALUE__) == LL_DMA_REQUEST_6) || \
Kojto 158:b23ee177fd68 93 ((__VALUE__) == LL_DMA_REQUEST_7) || \
Kojto 158:b23ee177fd68 94 ((__VALUE__) == LL_DMA_REQUEST_8) || \
Kojto 158:b23ee177fd68 95 ((__VALUE__) == LL_DMA_REQUEST_9) || \
Kojto 158:b23ee177fd68 96 ((__VALUE__) == LL_DMA_REQUEST_10) || \
Kojto 158:b23ee177fd68 97 ((__VALUE__) == LL_DMA_REQUEST_11) || \
Kojto 158:b23ee177fd68 98 ((__VALUE__) == LL_DMA_REQUEST_12) || \
Kojto 158:b23ee177fd68 99 ((__VALUE__) == LL_DMA_REQUEST_13) || \
Kojto 158:b23ee177fd68 100 ((__VALUE__) == LL_DMA_REQUEST_14) || \
Kojto 158:b23ee177fd68 101 ((__VALUE__) == LL_DMA_REQUEST_15))
Kojto 158:b23ee177fd68 102
Kojto 158:b23ee177fd68 103 #define IS_LL_DMA_PRIORITY(__VALUE__) (((__VALUE__) == LL_DMA_PRIORITY_LOW) || \
Kojto 158:b23ee177fd68 104 ((__VALUE__) == LL_DMA_PRIORITY_MEDIUM) || \
Kojto 158:b23ee177fd68 105 ((__VALUE__) == LL_DMA_PRIORITY_HIGH) || \
Kojto 158:b23ee177fd68 106 ((__VALUE__) == LL_DMA_PRIORITY_VERYHIGH))
Kojto 158:b23ee177fd68 107
Kojto 158:b23ee177fd68 108 #if defined (DMA1_Channel6) && defined (DMA1_Channel7)
Kojto 158:b23ee177fd68 109 #define IS_LL_DMA_ALL_CHANNEL_INSTANCE(INSTANCE, CHANNEL) ((((INSTANCE) == DMA1) && \
Kojto 158:b23ee177fd68 110 (((CHANNEL) == LL_DMA_CHANNEL_1)|| \
Kojto 158:b23ee177fd68 111 ((CHANNEL) == LL_DMA_CHANNEL_2) || \
Kojto 158:b23ee177fd68 112 ((CHANNEL) == LL_DMA_CHANNEL_3) || \
Kojto 158:b23ee177fd68 113 ((CHANNEL) == LL_DMA_CHANNEL_4) || \
Kojto 158:b23ee177fd68 114 ((CHANNEL) == LL_DMA_CHANNEL_5) || \
Kojto 158:b23ee177fd68 115 ((CHANNEL) == LL_DMA_CHANNEL_6) || \
Kojto 158:b23ee177fd68 116 ((CHANNEL) == LL_DMA_CHANNEL_7))))
Kojto 158:b23ee177fd68 117 #elif defined (DMA1_Channel6)
Kojto 158:b23ee177fd68 118 #define IS_LL_DMA_ALL_CHANNEL_INSTANCE(INSTANCE, CHANNEL) ((((INSTANCE) == DMA1) && \
Kojto 158:b23ee177fd68 119 (((CHANNEL) == LL_DMA_CHANNEL_1)|| \
Kojto 158:b23ee177fd68 120 ((CHANNEL) == LL_DMA_CHANNEL_2) || \
Kojto 158:b23ee177fd68 121 ((CHANNEL) == LL_DMA_CHANNEL_3) || \
Kojto 158:b23ee177fd68 122 ((CHANNEL) == LL_DMA_CHANNEL_4) || \
Kojto 158:b23ee177fd68 123 ((CHANNEL) == LL_DMA_CHANNEL_5) || \
Kojto 158:b23ee177fd68 124 ((CHANNEL) == LL_DMA_CHANNEL_6))))
Kojto 158:b23ee177fd68 125 #else
Kojto 158:b23ee177fd68 126 #define IS_LL_DMA_ALL_CHANNEL_INSTANCE(INSTANCE, CHANNEL) ((((INSTANCE) == DMA1) && \
Kojto 158:b23ee177fd68 127 (((CHANNEL) == LL_DMA_CHANNEL_1)|| \
Kojto 158:b23ee177fd68 128 ((CHANNEL) == LL_DMA_CHANNEL_2) || \
Kojto 158:b23ee177fd68 129 ((CHANNEL) == LL_DMA_CHANNEL_3) || \
Kojto 158:b23ee177fd68 130 ((CHANNEL) == LL_DMA_CHANNEL_4) || \
Kojto 158:b23ee177fd68 131 ((CHANNEL) == LL_DMA_CHANNEL_5))))
Kojto 158:b23ee177fd68 132 #endif /* DMA1_Channel6 && DMA1_Channel7 */
Kojto 158:b23ee177fd68 133 /**
Kojto 158:b23ee177fd68 134 * @}
Kojto 158:b23ee177fd68 135 */
Kojto 158:b23ee177fd68 136
Kojto 158:b23ee177fd68 137 /* Private function prototypes -----------------------------------------------*/
Kojto 158:b23ee177fd68 138
Kojto 158:b23ee177fd68 139 /* Exported functions --------------------------------------------------------*/
Kojto 158:b23ee177fd68 140 /** @addtogroup DMA_LL_Exported_Functions
Kojto 158:b23ee177fd68 141 * @{
Kojto 158:b23ee177fd68 142 */
Kojto 158:b23ee177fd68 143
Kojto 158:b23ee177fd68 144 /** @addtogroup DMA_LL_EF_Init
Kojto 158:b23ee177fd68 145 * @{
Kojto 158:b23ee177fd68 146 */
Kojto 158:b23ee177fd68 147
Kojto 158:b23ee177fd68 148 /**
Kojto 158:b23ee177fd68 149 * @brief De-initialize the DMA registers to their default reset values.
Kojto 158:b23ee177fd68 150 * @param DMAx DMAx Instance
Kojto 158:b23ee177fd68 151 * @param Channel This parameter can be one of the following values:
Kojto 158:b23ee177fd68 152 * @arg @ref LL_DMA_CHANNEL_1
Kojto 158:b23ee177fd68 153 * @arg @ref LL_DMA_CHANNEL_2
Kojto 158:b23ee177fd68 154 * @arg @ref LL_DMA_CHANNEL_3
Kojto 158:b23ee177fd68 155 * @arg @ref LL_DMA_CHANNEL_4
Kojto 158:b23ee177fd68 156 * @arg @ref LL_DMA_CHANNEL_5
Kojto 158:b23ee177fd68 157 * @arg @ref LL_DMA_CHANNEL_6 (*)
Kojto 158:b23ee177fd68 158 * @arg @ref LL_DMA_CHANNEL_7 (*)
Kojto 158:b23ee177fd68 159 * @arg @ref LL_DMA_CHANNEL_ALL
Kojto 158:b23ee177fd68 160 *
Kojto 158:b23ee177fd68 161 * (*) value not defined in all devices
Kojto 158:b23ee177fd68 162 * @retval An ErrorStatus enumeration value:
Kojto 158:b23ee177fd68 163 * - SUCCESS: DMA registers are de-initialized
Kojto 158:b23ee177fd68 164 * - ERROR: DMA registers are not de-initialized
Kojto 158:b23ee177fd68 165 */
Kojto 158:b23ee177fd68 166 uint32_t LL_DMA_DeInit(DMA_TypeDef *DMAx, uint32_t Channel)
Kojto 158:b23ee177fd68 167 {
Kojto 158:b23ee177fd68 168 DMA_Channel_TypeDef *tmp = (DMA_Channel_TypeDef *)DMA1_Channel1;
Kojto 158:b23ee177fd68 169 ErrorStatus status = SUCCESS;
Kojto 158:b23ee177fd68 170
Kojto 158:b23ee177fd68 171 /* Check the DMA Instance DMAx and Channel parameters*/
Kojto 158:b23ee177fd68 172 assert_param(IS_LL_DMA_ALL_CHANNEL_INSTANCE(DMAx, Channel) || (Channel == LL_DMA_CHANNEL_ALL));
Kojto 158:b23ee177fd68 173
Kojto 158:b23ee177fd68 174 if (Channel == LL_DMA_CHANNEL_ALL)
Kojto 158:b23ee177fd68 175 {
Kojto 158:b23ee177fd68 176 if (DMAx == DMA1)
Kojto 158:b23ee177fd68 177 {
Kojto 158:b23ee177fd68 178 /* Force reset of DMA clock */
Kojto 158:b23ee177fd68 179 LL_AHB1_GRP1_ForceReset(LL_AHB1_GRP1_PERIPH_DMA1);
Kojto 158:b23ee177fd68 180
Kojto 158:b23ee177fd68 181 /* Release reset of DMA clock */
Kojto 158:b23ee177fd68 182 LL_AHB1_GRP1_ReleaseReset(LL_AHB1_GRP1_PERIPH_DMA1);
Kojto 158:b23ee177fd68 183 }
Kojto 158:b23ee177fd68 184 #if defined(DMA2)
Kojto 158:b23ee177fd68 185 else if (DMAx == DMA2)
Kojto 158:b23ee177fd68 186 {
Kojto 158:b23ee177fd68 187 /* Force reset of DMA clock */
Kojto 158:b23ee177fd68 188 LL_AHB1_GRP1_ForceReset(LL_AHB1_GRP1_PERIPH_DMA2);
Kojto 158:b23ee177fd68 189
Kojto 158:b23ee177fd68 190 /* Release reset of DMA clock */
Kojto 158:b23ee177fd68 191 LL_AHB1_GRP1_ReleaseReset(LL_AHB1_GRP1_PERIPH_DMA2);
Kojto 158:b23ee177fd68 192 }
Kojto 158:b23ee177fd68 193 #endif
Kojto 158:b23ee177fd68 194 else
Kojto 158:b23ee177fd68 195 {
Kojto 158:b23ee177fd68 196 status = ERROR;
Kojto 158:b23ee177fd68 197 }
Kojto 158:b23ee177fd68 198 }
Kojto 158:b23ee177fd68 199 else
Kojto 158:b23ee177fd68 200 {
Kojto 158:b23ee177fd68 201 tmp = (DMA_Channel_TypeDef *)(__LL_DMA_GET_CHANNEL_INSTANCE(DMAx, Channel));
Kojto 158:b23ee177fd68 202
Kojto 158:b23ee177fd68 203 /* Disable the selected DMAx_Channely */
Kojto 158:b23ee177fd68 204 CLEAR_BIT(tmp->CCR, DMA_CCR_EN);
Kojto 158:b23ee177fd68 205
Kojto 158:b23ee177fd68 206 /* Reset DMAx_Channely control register */
Kojto 158:b23ee177fd68 207 LL_DMA_WriteReg(tmp, CCR, 0U);
Kojto 158:b23ee177fd68 208
Kojto 158:b23ee177fd68 209 /* Reset DMAx_Channely remaining bytes register */
Kojto 158:b23ee177fd68 210 LL_DMA_WriteReg(tmp, CNDTR, 0U);
Kojto 158:b23ee177fd68 211
Kojto 158:b23ee177fd68 212 /* Reset DMAx_Channely peripheral address register */
Kojto 158:b23ee177fd68 213 LL_DMA_WriteReg(tmp, CPAR, 0U);
Kojto 158:b23ee177fd68 214
Kojto 158:b23ee177fd68 215 /* Reset DMAx_Channely memory address register */
Kojto 158:b23ee177fd68 216 LL_DMA_WriteReg(tmp, CMAR, 0U);
Kojto 158:b23ee177fd68 217
Kojto 158:b23ee177fd68 218 /* Reset Request register field for DMAx Channel */
Kojto 158:b23ee177fd68 219 LL_DMA_SetPeriphRequest(DMAx, Channel, LL_DMA_REQUEST_0);
Kojto 158:b23ee177fd68 220
Kojto 158:b23ee177fd68 221 if (Channel == LL_DMA_CHANNEL_1)
Kojto 158:b23ee177fd68 222 {
Kojto 158:b23ee177fd68 223 /* Reset interrupt pending bits for DMAx Channel1 */
Kojto 158:b23ee177fd68 224 LL_DMA_ClearFlag_GI1(DMAx);
Kojto 158:b23ee177fd68 225 }
Kojto 158:b23ee177fd68 226 else if (Channel == LL_DMA_CHANNEL_2)
Kojto 158:b23ee177fd68 227 {
Kojto 158:b23ee177fd68 228 /* Reset interrupt pending bits for DMAx Channel2 */
Kojto 158:b23ee177fd68 229 LL_DMA_ClearFlag_GI2(DMAx);
Kojto 158:b23ee177fd68 230 }
Kojto 158:b23ee177fd68 231 else if (Channel == LL_DMA_CHANNEL_3)
Kojto 158:b23ee177fd68 232 {
Kojto 158:b23ee177fd68 233 /* Reset interrupt pending bits for DMAx Channel3 */
Kojto 158:b23ee177fd68 234 LL_DMA_ClearFlag_GI3(DMAx);
Kojto 158:b23ee177fd68 235 }
Kojto 158:b23ee177fd68 236 else if (Channel == LL_DMA_CHANNEL_4)
Kojto 158:b23ee177fd68 237 {
Kojto 158:b23ee177fd68 238 /* Reset interrupt pending bits for DMAx Channel4 */
Kojto 158:b23ee177fd68 239 LL_DMA_ClearFlag_GI4(DMAx);
Kojto 158:b23ee177fd68 240 }
Kojto 158:b23ee177fd68 241 else if (Channel == LL_DMA_CHANNEL_5)
Kojto 158:b23ee177fd68 242 {
Kojto 158:b23ee177fd68 243 /* Reset interrupt pending bits for DMAx Channel5 */
Kojto 158:b23ee177fd68 244 LL_DMA_ClearFlag_GI5(DMAx);
Kojto 158:b23ee177fd68 245 }
Kojto 158:b23ee177fd68 246
Kojto 158:b23ee177fd68 247 #if defined(DMA1_Channel6)
Kojto 158:b23ee177fd68 248 else if (Channel == LL_DMA_CHANNEL_6)
Kojto 158:b23ee177fd68 249 {
Kojto 158:b23ee177fd68 250 /* Reset interrupt pending bits for DMAx Channel6 */
Kojto 158:b23ee177fd68 251 LL_DMA_ClearFlag_GI6(DMAx);
Kojto 158:b23ee177fd68 252 }
Kojto 158:b23ee177fd68 253 #endif
Kojto 158:b23ee177fd68 254 #if defined(DMA1_Channel7)
Kojto 158:b23ee177fd68 255 else if (Channel == LL_DMA_CHANNEL_7)
Kojto 158:b23ee177fd68 256 {
Kojto 158:b23ee177fd68 257 /* Reset interrupt pending bits for DMAx Channel7 */
Kojto 158:b23ee177fd68 258 LL_DMA_ClearFlag_GI7(DMAx);
Kojto 158:b23ee177fd68 259 }
Kojto 158:b23ee177fd68 260 #endif
Kojto 158:b23ee177fd68 261 else
Kojto 158:b23ee177fd68 262 {
Kojto 158:b23ee177fd68 263 status = ERROR;
Kojto 158:b23ee177fd68 264 }
Kojto 158:b23ee177fd68 265 }
Kojto 158:b23ee177fd68 266
Kojto 158:b23ee177fd68 267 return status;
Kojto 158:b23ee177fd68 268 }
Kojto 158:b23ee177fd68 269
Kojto 158:b23ee177fd68 270 /**
Kojto 158:b23ee177fd68 271 * @brief Initialize the DMA registers according to the specified parameters in DMA_InitStruct.
Kojto 158:b23ee177fd68 272 * @note To convert DMAx_Channely Instance to DMAx Instance and Channely, use helper macros :
Kojto 158:b23ee177fd68 273 * @arg @ref __LL_DMA_GET_INSTANCE
Kojto 158:b23ee177fd68 274 * @arg @ref __LL_DMA_GET_CHANNEL
Kojto 158:b23ee177fd68 275 * @param DMAx DMAx Instance
Kojto 158:b23ee177fd68 276 * @param Channel This parameter can be one of the following values:
Kojto 158:b23ee177fd68 277 * @arg @ref LL_DMA_CHANNEL_1
Kojto 158:b23ee177fd68 278 * @arg @ref LL_DMA_CHANNEL_2
Kojto 158:b23ee177fd68 279 * @arg @ref LL_DMA_CHANNEL_3
Kojto 158:b23ee177fd68 280 * @arg @ref LL_DMA_CHANNEL_4
Kojto 158:b23ee177fd68 281 * @arg @ref LL_DMA_CHANNEL_5
Kojto 158:b23ee177fd68 282 * @arg @ref LL_DMA_CHANNEL_6 (*)
Kojto 158:b23ee177fd68 283 * @arg @ref LL_DMA_CHANNEL_7 (*)
Kojto 158:b23ee177fd68 284 *
Kojto 158:b23ee177fd68 285 * (*) value not defined in all devices
Kojto 158:b23ee177fd68 286 * @param DMA_InitStruct pointer to a @ref LL_DMA_InitTypeDef structure.
Kojto 158:b23ee177fd68 287 * @retval An ErrorStatus enumeration value:
Kojto 158:b23ee177fd68 288 * - SUCCESS: DMA registers are initialized
Kojto 158:b23ee177fd68 289 * - ERROR: Not applicable
Kojto 158:b23ee177fd68 290 */
Kojto 158:b23ee177fd68 291 uint32_t LL_DMA_Init(DMA_TypeDef *DMAx, uint32_t Channel, LL_DMA_InitTypeDef *DMA_InitStruct)
Kojto 158:b23ee177fd68 292 {
Kojto 158:b23ee177fd68 293 /* Check the DMA Instance DMAx and Channel parameters*/
Kojto 158:b23ee177fd68 294 assert_param(IS_LL_DMA_ALL_CHANNEL_INSTANCE(DMAx, Channel));
Kojto 158:b23ee177fd68 295
Kojto 158:b23ee177fd68 296 /* Check the DMA parameters from DMA_InitStruct */
Kojto 158:b23ee177fd68 297 assert_param(IS_LL_DMA_DIRECTION(DMA_InitStruct->Direction));
Kojto 158:b23ee177fd68 298 assert_param(IS_LL_DMA_MODE(DMA_InitStruct->Mode));
Kojto 158:b23ee177fd68 299 assert_param(IS_LL_DMA_PERIPHINCMODE(DMA_InitStruct->PeriphOrM2MSrcIncMode));
Kojto 158:b23ee177fd68 300 assert_param(IS_LL_DMA_MEMORYINCMODE(DMA_InitStruct->MemoryOrM2MDstIncMode));
Kojto 158:b23ee177fd68 301 assert_param(IS_LL_DMA_PERIPHDATASIZE(DMA_InitStruct->PeriphOrM2MSrcDataSize));
Kojto 158:b23ee177fd68 302 assert_param(IS_LL_DMA_MEMORYDATASIZE(DMA_InitStruct->MemoryOrM2MDstDataSize));
Kojto 158:b23ee177fd68 303 assert_param(IS_LL_DMA_NBDATA(DMA_InitStruct->NbData));
Kojto 158:b23ee177fd68 304 assert_param(IS_LL_DMA_PERIPHREQUEST(DMA_InitStruct->PeriphRequest));
Kojto 158:b23ee177fd68 305 assert_param(IS_LL_DMA_PRIORITY(DMA_InitStruct->Priority));
Kojto 158:b23ee177fd68 306
Kojto 158:b23ee177fd68 307 /*---------------------------- DMAx CCR Configuration ------------------------
Kojto 158:b23ee177fd68 308 * Configure DMAx_Channely: data transfer direction, data transfer mode,
Kojto 158:b23ee177fd68 309 * peripheral and memory increment mode,
Kojto 158:b23ee177fd68 310 * data size alignment and priority level with parameters :
Kojto 158:b23ee177fd68 311 * - Direction: DMA_CCR_DIR and DMA_CCR_MEM2MEM bits
Kojto 158:b23ee177fd68 312 * - Mode: DMA_CCR_CIRC bit
Kojto 158:b23ee177fd68 313 * - PeriphOrM2MSrcIncMode: DMA_CCR_PINC bit
Kojto 158:b23ee177fd68 314 * - MemoryOrM2MDstIncMode: DMA_CCR_MINC bit
Kojto 158:b23ee177fd68 315 * - PeriphOrM2MSrcDataSize: DMA_CCR_PSIZE[1:0] bits
Kojto 158:b23ee177fd68 316 * - MemoryOrM2MDstDataSize: DMA_CCR_MSIZE[1:0] bits
Kojto 158:b23ee177fd68 317 * - Priority: DMA_CCR_PL[1:0] bits
Kojto 158:b23ee177fd68 318 */
Kojto 158:b23ee177fd68 319 LL_DMA_ConfigTransfer(DMAx, Channel, DMA_InitStruct->Direction | \
Kojto 158:b23ee177fd68 320 DMA_InitStruct->Mode | \
Kojto 158:b23ee177fd68 321 DMA_InitStruct->PeriphOrM2MSrcIncMode | \
Kojto 158:b23ee177fd68 322 DMA_InitStruct->MemoryOrM2MDstIncMode | \
Kojto 158:b23ee177fd68 323 DMA_InitStruct->PeriphOrM2MSrcDataSize | \
Kojto 158:b23ee177fd68 324 DMA_InitStruct->MemoryOrM2MDstDataSize | \
Kojto 158:b23ee177fd68 325 DMA_InitStruct->Priority);
Kojto 158:b23ee177fd68 326
Kojto 158:b23ee177fd68 327 /*-------------------------- DMAx CMAR Configuration -------------------------
Kojto 158:b23ee177fd68 328 * Configure the memory or destination base address with parameter :
Kojto 158:b23ee177fd68 329 * - MemoryOrM2MDstAddress: DMA_CMAR_MA[31:0] bits
Kojto 158:b23ee177fd68 330 */
Kojto 158:b23ee177fd68 331 LL_DMA_SetMemoryAddress(DMAx, Channel, DMA_InitStruct->MemoryOrM2MDstAddress);
Kojto 158:b23ee177fd68 332
Kojto 158:b23ee177fd68 333 /*-------------------------- DMAx CPAR Configuration -------------------------
Kojto 158:b23ee177fd68 334 * Configure the peripheral or source base address with parameter :
Kojto 158:b23ee177fd68 335 * - PeriphOrM2MSrcAddress: DMA_CPAR_PA[31:0] bits
Kojto 158:b23ee177fd68 336 */
Kojto 158:b23ee177fd68 337 LL_DMA_SetPeriphAddress(DMAx, Channel, DMA_InitStruct->PeriphOrM2MSrcAddress);
Kojto 158:b23ee177fd68 338
Kojto 158:b23ee177fd68 339 /*--------------------------- DMAx CNDTR Configuration -----------------------
Kojto 158:b23ee177fd68 340 * Configure the peripheral base address with parameter :
Kojto 158:b23ee177fd68 341 * - NbData: DMA_CNDTR_NDT[15:0] bits
Kojto 158:b23ee177fd68 342 */
Kojto 158:b23ee177fd68 343 LL_DMA_SetDataLength(DMAx, Channel, DMA_InitStruct->NbData);
Kojto 158:b23ee177fd68 344
Kojto 158:b23ee177fd68 345 /*--------------------------- DMAx CSELR Configuration -----------------------
Kojto 158:b23ee177fd68 346 * Configure the peripheral base address with parameter :
Kojto 158:b23ee177fd68 347 * - PeriphRequest: DMA_CSELR[31:0] bits
Kojto 158:b23ee177fd68 348 */
Kojto 158:b23ee177fd68 349 LL_DMA_SetPeriphRequest(DMAx, Channel, DMA_InitStruct->PeriphRequest);
Kojto 158:b23ee177fd68 350
Kojto 158:b23ee177fd68 351 return SUCCESS;
Kojto 158:b23ee177fd68 352 }
Kojto 158:b23ee177fd68 353
Kojto 158:b23ee177fd68 354 /**
Kojto 158:b23ee177fd68 355 * @brief Set each @ref LL_DMA_InitTypeDef field to default value.
Kojto 158:b23ee177fd68 356 * @param DMA_InitStruct Pointer to a @ref LL_DMA_InitTypeDef structure.
Kojto 158:b23ee177fd68 357 * @retval None
Kojto 158:b23ee177fd68 358 */
Kojto 158:b23ee177fd68 359 void LL_DMA_StructInit(LL_DMA_InitTypeDef *DMA_InitStruct)
Kojto 158:b23ee177fd68 360 {
Kojto 158:b23ee177fd68 361 /* Set DMA_InitStruct fields to default values */
Kojto 158:b23ee177fd68 362 DMA_InitStruct->PeriphOrM2MSrcAddress = (uint32_t)0x00000000U;
Kojto 158:b23ee177fd68 363 DMA_InitStruct->MemoryOrM2MDstAddress = (uint32_t)0x00000000U;
Kojto 158:b23ee177fd68 364 DMA_InitStruct->Direction = LL_DMA_DIRECTION_PERIPH_TO_MEMORY;
Kojto 158:b23ee177fd68 365 DMA_InitStruct->Mode = LL_DMA_MODE_NORMAL;
Kojto 158:b23ee177fd68 366 DMA_InitStruct->PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT;
Kojto 158:b23ee177fd68 367 DMA_InitStruct->MemoryOrM2MDstIncMode = LL_DMA_MEMORY_NOINCREMENT;
Kojto 158:b23ee177fd68 368 DMA_InitStruct->PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_BYTE;
Kojto 158:b23ee177fd68 369 DMA_InitStruct->MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_BYTE;
Kojto 158:b23ee177fd68 370 DMA_InitStruct->NbData = (uint32_t)0x00000000U;
Kojto 158:b23ee177fd68 371 DMA_InitStruct->PeriphRequest = LL_DMA_REQUEST_0;
Kojto 158:b23ee177fd68 372 DMA_InitStruct->Priority = LL_DMA_PRIORITY_LOW;
Kojto 158:b23ee177fd68 373 }
Kojto 158:b23ee177fd68 374
Kojto 158:b23ee177fd68 375 /**
Kojto 158:b23ee177fd68 376 * @}
Kojto 158:b23ee177fd68 377 */
Kojto 158:b23ee177fd68 378
Kojto 158:b23ee177fd68 379 /**
Kojto 158:b23ee177fd68 380 * @}
Kojto 158:b23ee177fd68 381 */
Kojto 158:b23ee177fd68 382
Kojto 158:b23ee177fd68 383 /**
Kojto 158:b23ee177fd68 384 * @}
Kojto 158:b23ee177fd68 385 */
Kojto 158:b23ee177fd68 386
Kojto 158:b23ee177fd68 387 #endif /* DMA1 */
Kojto 158:b23ee177fd68 388
Kojto 158:b23ee177fd68 389 /**
Kojto 158:b23ee177fd68 390 * @}
Kojto 158:b23ee177fd68 391 */
Kojto 158:b23ee177fd68 392
Kojto 158:b23ee177fd68 393 #endif /* USE_FULL_LL_DRIVER */
Kojto 158:b23ee177fd68 394
Kojto 158:b23ee177fd68 395 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/