TUKS MCU Introductory course / TUKS-COURSE-TIMER
Committer:
elmot
Date:
Fri Feb 24 21:13:56 2017 +0000
Revision:
1:d0dfbce63a89
Ready-to-copy

Who changed what in which revision?

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