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:
167:e84263d55307
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 167:e84263d55307 1 /**
AnnaBridge 167:e84263d55307 2 ******************************************************************************
AnnaBridge 167:e84263d55307 3 * @file stm32f2xx_ll_dma.c
AnnaBridge 167:e84263d55307 4 * @author MCD Application Team
AnnaBridge 167:e84263d55307 5 * @version V1.2.1
AnnaBridge 167:e84263d55307 6 * @date 14-April-2017
AnnaBridge 167:e84263d55307 7 * @brief DMA LL module driver.
AnnaBridge 167:e84263d55307 8 ******************************************************************************
AnnaBridge 167:e84263d55307 9 * @attention
AnnaBridge 167:e84263d55307 10 *
AnnaBridge 167:e84263d55307 11 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
AnnaBridge 167:e84263d55307 12 *
AnnaBridge 167:e84263d55307 13 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 167:e84263d55307 14 * are permitted provided that the following conditions are met:
AnnaBridge 167:e84263d55307 15 * 1. Redistributions of source code must retain the above copyright notice,
AnnaBridge 167:e84263d55307 16 * this list of conditions and the following disclaimer.
AnnaBridge 167:e84263d55307 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
AnnaBridge 167:e84263d55307 18 * this list of conditions and the following disclaimer in the documentation
AnnaBridge 167:e84263d55307 19 * and/or other materials provided with the distribution.
AnnaBridge 167:e84263d55307 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
AnnaBridge 167:e84263d55307 21 * may be used to endorse or promote products derived from this software
AnnaBridge 167:e84263d55307 22 * without specific prior written permission.
AnnaBridge 167:e84263d55307 23 *
AnnaBridge 167:e84263d55307 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AnnaBridge 167:e84263d55307 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
AnnaBridge 167:e84263d55307 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 167:e84263d55307 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
AnnaBridge 167:e84263d55307 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
AnnaBridge 167:e84263d55307 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
AnnaBridge 167:e84263d55307 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
AnnaBridge 167:e84263d55307 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
AnnaBridge 167:e84263d55307 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
AnnaBridge 167:e84263d55307 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 167:e84263d55307 34 *
AnnaBridge 167:e84263d55307 35 ******************************************************************************
AnnaBridge 167:e84263d55307 36 */
AnnaBridge 167:e84263d55307 37 #if defined(USE_FULL_LL_DRIVER)
AnnaBridge 167:e84263d55307 38
AnnaBridge 167:e84263d55307 39 /* Includes ------------------------------------------------------------------*/
AnnaBridge 167:e84263d55307 40 #include "stm32f2xx_ll_dma.h"
AnnaBridge 167:e84263d55307 41 #include "stm32f2xx_ll_bus.h"
AnnaBridge 167:e84263d55307 42 #ifdef USE_FULL_ASSERT
AnnaBridge 167:e84263d55307 43 #include "stm32_assert.h"
AnnaBridge 167:e84263d55307 44 #else
AnnaBridge 167:e84263d55307 45 #define assert_param(expr) ((void)0U)
AnnaBridge 167:e84263d55307 46 #endif
AnnaBridge 167:e84263d55307 47
AnnaBridge 167:e84263d55307 48 /** @addtogroup STM32F2xx_LL_Driver
AnnaBridge 167:e84263d55307 49 * @{
AnnaBridge 167:e84263d55307 50 */
AnnaBridge 167:e84263d55307 51
AnnaBridge 167:e84263d55307 52 #if defined (DMA1) || defined (DMA2)
AnnaBridge 167:e84263d55307 53
AnnaBridge 167:e84263d55307 54 /** @defgroup DMA_LL DMA
AnnaBridge 167:e84263d55307 55 * @{
AnnaBridge 167:e84263d55307 56 */
AnnaBridge 167:e84263d55307 57
AnnaBridge 167:e84263d55307 58 /* Private types -------------------------------------------------------------*/
AnnaBridge 167:e84263d55307 59 /* Private variables ---------------------------------------------------------*/
AnnaBridge 167:e84263d55307 60 /* Private constants ---------------------------------------------------------*/
AnnaBridge 167:e84263d55307 61 /* Private macros ------------------------------------------------------------*/
AnnaBridge 167:e84263d55307 62 /** @addtogroup DMA_LL_Private_Macros
AnnaBridge 167:e84263d55307 63 * @{
AnnaBridge 167:e84263d55307 64 */
AnnaBridge 167:e84263d55307 65 #define IS_LL_DMA_DIRECTION(__VALUE__) (((__VALUE__) == LL_DMA_DIRECTION_PERIPH_TO_MEMORY) || \
AnnaBridge 167:e84263d55307 66 ((__VALUE__) == LL_DMA_DIRECTION_MEMORY_TO_PERIPH) || \
AnnaBridge 167:e84263d55307 67 ((__VALUE__) == LL_DMA_DIRECTION_MEMORY_TO_MEMORY))
AnnaBridge 167:e84263d55307 68
AnnaBridge 167:e84263d55307 69 #define IS_LL_DMA_MODE(__VALUE__) (((__VALUE__) == LL_DMA_MODE_NORMAL) || \
AnnaBridge 167:e84263d55307 70 ((__VALUE__) == LL_DMA_MODE_CIRCULAR) || \
AnnaBridge 167:e84263d55307 71 ((__VALUE__) == LL_DMA_MODE_PFCTRL))
AnnaBridge 167:e84263d55307 72
AnnaBridge 167:e84263d55307 73 #define IS_LL_DMA_PERIPHINCMODE(__VALUE__) (((__VALUE__) == LL_DMA_PERIPH_INCREMENT) || \
AnnaBridge 167:e84263d55307 74 ((__VALUE__) == LL_DMA_PERIPH_NOINCREMENT))
AnnaBridge 167:e84263d55307 75
AnnaBridge 167:e84263d55307 76 #define IS_LL_DMA_MEMORYINCMODE(__VALUE__) (((__VALUE__) == LL_DMA_MEMORY_INCREMENT) || \
AnnaBridge 167:e84263d55307 77 ((__VALUE__) == LL_DMA_MEMORY_NOINCREMENT))
AnnaBridge 167:e84263d55307 78
AnnaBridge 167:e84263d55307 79 #define IS_LL_DMA_PERIPHDATASIZE(__VALUE__) (((__VALUE__) == LL_DMA_PDATAALIGN_BYTE) || \
AnnaBridge 167:e84263d55307 80 ((__VALUE__) == LL_DMA_PDATAALIGN_HALFWORD) || \
AnnaBridge 167:e84263d55307 81 ((__VALUE__) == LL_DMA_PDATAALIGN_WORD))
AnnaBridge 167:e84263d55307 82
AnnaBridge 167:e84263d55307 83 #define IS_LL_DMA_MEMORYDATASIZE(__VALUE__) (((__VALUE__) == LL_DMA_MDATAALIGN_BYTE) || \
AnnaBridge 167:e84263d55307 84 ((__VALUE__) == LL_DMA_MDATAALIGN_HALFWORD) || \
AnnaBridge 167:e84263d55307 85 ((__VALUE__) == LL_DMA_MDATAALIGN_WORD))
AnnaBridge 167:e84263d55307 86
AnnaBridge 167:e84263d55307 87 #define IS_LL_DMA_NBDATA(__VALUE__) ((__VALUE__) <= (uint32_t)0x0000FFFFU)
AnnaBridge 167:e84263d55307 88
AnnaBridge 167:e84263d55307 89 #define IS_LL_DMA_CHANNEL(__VALUE__) (((__VALUE__) == LL_DMA_CHANNEL_0) || \
AnnaBridge 167:e84263d55307 90 ((__VALUE__) == LL_DMA_CHANNEL_1) || \
AnnaBridge 167:e84263d55307 91 ((__VALUE__) == LL_DMA_CHANNEL_2) || \
AnnaBridge 167:e84263d55307 92 ((__VALUE__) == LL_DMA_CHANNEL_3) || \
AnnaBridge 167:e84263d55307 93 ((__VALUE__) == LL_DMA_CHANNEL_4) || \
AnnaBridge 167:e84263d55307 94 ((__VALUE__) == LL_DMA_CHANNEL_5) || \
AnnaBridge 167:e84263d55307 95 ((__VALUE__) == LL_DMA_CHANNEL_6) || \
AnnaBridge 167:e84263d55307 96 ((__VALUE__) == LL_DMA_CHANNEL_7))
AnnaBridge 167:e84263d55307 97
AnnaBridge 167:e84263d55307 98 #define IS_LL_DMA_PRIORITY(__VALUE__) (((__VALUE__) == LL_DMA_PRIORITY_LOW) || \
AnnaBridge 167:e84263d55307 99 ((__VALUE__) == LL_DMA_PRIORITY_MEDIUM) || \
AnnaBridge 167:e84263d55307 100 ((__VALUE__) == LL_DMA_PRIORITY_HIGH) || \
AnnaBridge 167:e84263d55307 101 ((__VALUE__) == LL_DMA_PRIORITY_VERYHIGH))
AnnaBridge 167:e84263d55307 102
AnnaBridge 167:e84263d55307 103
AnnaBridge 167:e84263d55307 104 #define IS_LL_DMA_ALL_STREAM_INSTANCE(INSTANCE, STREAM) ((((INSTANCE) == DMA1) && \
AnnaBridge 167:e84263d55307 105 (((STREAM) == LL_DMA_STREAM_0) || \
AnnaBridge 167:e84263d55307 106 ((STREAM) == LL_DMA_STREAM_1) || \
AnnaBridge 167:e84263d55307 107 ((STREAM) == LL_DMA_STREAM_2) || \
AnnaBridge 167:e84263d55307 108 ((STREAM) == LL_DMA_STREAM_3) || \
AnnaBridge 167:e84263d55307 109 ((STREAM) == LL_DMA_STREAM_4) || \
AnnaBridge 167:e84263d55307 110 ((STREAM) == LL_DMA_STREAM_5) || \
AnnaBridge 167:e84263d55307 111 ((STREAM) == LL_DMA_STREAM_6) || \
AnnaBridge 167:e84263d55307 112 ((STREAM) == LL_DMA_STREAM_7) || \
AnnaBridge 167:e84263d55307 113 ((STREAM) == LL_DMA_STREAM_ALL))) ||\
AnnaBridge 167:e84263d55307 114 (((INSTANCE) == DMA2) && \
AnnaBridge 167:e84263d55307 115 (((STREAM) == LL_DMA_STREAM_0) || \
AnnaBridge 167:e84263d55307 116 ((STREAM) == LL_DMA_STREAM_1) || \
AnnaBridge 167:e84263d55307 117 ((STREAM) == LL_DMA_STREAM_2) || \
AnnaBridge 167:e84263d55307 118 ((STREAM) == LL_DMA_STREAM_3) || \
AnnaBridge 167:e84263d55307 119 ((STREAM) == LL_DMA_STREAM_4) || \
AnnaBridge 167:e84263d55307 120 ((STREAM) == LL_DMA_STREAM_5) || \
AnnaBridge 167:e84263d55307 121 ((STREAM) == LL_DMA_STREAM_6) || \
AnnaBridge 167:e84263d55307 122 ((STREAM) == LL_DMA_STREAM_7) || \
AnnaBridge 167:e84263d55307 123 ((STREAM) == LL_DMA_STREAM_ALL))))
AnnaBridge 167:e84263d55307 124
AnnaBridge 167:e84263d55307 125 #define IS_LL_DMA_FIFO_MODE_STATE(STATE) (((STATE) == LL_DMA_FIFOMODE_DISABLE ) || \
AnnaBridge 167:e84263d55307 126 ((STATE) == LL_DMA_FIFOMODE_ENABLE))
AnnaBridge 167:e84263d55307 127
AnnaBridge 167:e84263d55307 128 #define IS_LL_DMA_FIFO_THRESHOLD(THRESHOLD) (((THRESHOLD) == LL_DMA_FIFOTHRESHOLD_1_4) || \
AnnaBridge 167:e84263d55307 129 ((THRESHOLD) == LL_DMA_FIFOTHRESHOLD_1_2) || \
AnnaBridge 167:e84263d55307 130 ((THRESHOLD) == LL_DMA_FIFOTHRESHOLD_3_4) || \
AnnaBridge 167:e84263d55307 131 ((THRESHOLD) == LL_DMA_FIFOTHRESHOLD_FULL))
AnnaBridge 167:e84263d55307 132
AnnaBridge 167:e84263d55307 133 #define IS_LL_DMA_MEMORY_BURST(BURST) (((BURST) == LL_DMA_MBURST_SINGLE) || \
AnnaBridge 167:e84263d55307 134 ((BURST) == LL_DMA_MBURST_INC4) || \
AnnaBridge 167:e84263d55307 135 ((BURST) == LL_DMA_MBURST_INC8) || \
AnnaBridge 167:e84263d55307 136 ((BURST) == LL_DMA_MBURST_INC16))
AnnaBridge 167:e84263d55307 137
AnnaBridge 167:e84263d55307 138 #define IS_LL_DMA_PERIPHERAL_BURST(BURST) (((BURST) == LL_DMA_PBURST_SINGLE) || \
AnnaBridge 167:e84263d55307 139 ((BURST) == LL_DMA_PBURST_INC4) || \
AnnaBridge 167:e84263d55307 140 ((BURST) == LL_DMA_PBURST_INC8) || \
AnnaBridge 167:e84263d55307 141 ((BURST) == LL_DMA_PBURST_INC16))
AnnaBridge 167:e84263d55307 142
AnnaBridge 167:e84263d55307 143 /**
AnnaBridge 167:e84263d55307 144 * @}
AnnaBridge 167:e84263d55307 145 */
AnnaBridge 167:e84263d55307 146
AnnaBridge 167:e84263d55307 147 /* Private function prototypes -----------------------------------------------*/
AnnaBridge 167:e84263d55307 148
AnnaBridge 167:e84263d55307 149 /* Exported functions --------------------------------------------------------*/
AnnaBridge 167:e84263d55307 150 /** @addtogroup DMA_LL_Exported_Functions
AnnaBridge 167:e84263d55307 151 * @{
AnnaBridge 167:e84263d55307 152 */
AnnaBridge 167:e84263d55307 153
AnnaBridge 167:e84263d55307 154 /** @addtogroup DMA_LL_EF_Init
AnnaBridge 167:e84263d55307 155 * @{
AnnaBridge 167:e84263d55307 156 */
AnnaBridge 167:e84263d55307 157
AnnaBridge 167:e84263d55307 158 /**
AnnaBridge 167:e84263d55307 159 * @brief De-initialize the DMA registers to their default reset values.
AnnaBridge 167:e84263d55307 160 * @param DMAx DMAx Instance
AnnaBridge 167:e84263d55307 161 * @param Stream This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 162 * @arg @ref LL_DMA_STREAM_0
AnnaBridge 167:e84263d55307 163 * @arg @ref LL_DMA_STREAM_1
AnnaBridge 167:e84263d55307 164 * @arg @ref LL_DMA_STREAM_2
AnnaBridge 167:e84263d55307 165 * @arg @ref LL_DMA_STREAM_3
AnnaBridge 167:e84263d55307 166 * @arg @ref LL_DMA_STREAM_4
AnnaBridge 167:e84263d55307 167 * @arg @ref LL_DMA_STREAM_5
AnnaBridge 167:e84263d55307 168 * @arg @ref LL_DMA_STREAM_6
AnnaBridge 167:e84263d55307 169 * @arg @ref LL_DMA_STREAM_7
AnnaBridge 167:e84263d55307 170 * @arg @ref LL_DMA_STREAM_ALL
AnnaBridge 167:e84263d55307 171 * @retval An ErrorStatus enumeration value:
AnnaBridge 167:e84263d55307 172 * - SUCCESS: DMA registers are de-initialized
AnnaBridge 167:e84263d55307 173 * - ERROR: DMA registers are not de-initialized
AnnaBridge 167:e84263d55307 174 */
AnnaBridge 167:e84263d55307 175 uint32_t LL_DMA_DeInit(DMA_TypeDef *DMAx, uint32_t Stream)
AnnaBridge 167:e84263d55307 176 {
AnnaBridge 167:e84263d55307 177 DMA_Stream_TypeDef *tmp = (DMA_Stream_TypeDef *)DMA1_Stream0;
AnnaBridge 167:e84263d55307 178 ErrorStatus status = SUCCESS;
AnnaBridge 167:e84263d55307 179
AnnaBridge 167:e84263d55307 180 /* Check the DMA Instance DMAx and Stream parameters*/
AnnaBridge 167:e84263d55307 181 assert_param(IS_LL_DMA_ALL_STREAM_INSTANCE(DMAx, Stream));
AnnaBridge 167:e84263d55307 182
AnnaBridge 167:e84263d55307 183 if (Stream == LL_DMA_STREAM_ALL)
AnnaBridge 167:e84263d55307 184 {
AnnaBridge 167:e84263d55307 185 if (DMAx == DMA1)
AnnaBridge 167:e84263d55307 186 {
AnnaBridge 167:e84263d55307 187 /* Force reset of DMA clock */
AnnaBridge 167:e84263d55307 188 LL_AHB1_GRP1_ForceReset(LL_AHB1_GRP1_PERIPH_DMA1);
AnnaBridge 167:e84263d55307 189
AnnaBridge 167:e84263d55307 190 /* Release reset of DMA clock */
AnnaBridge 167:e84263d55307 191 LL_AHB1_GRP1_ReleaseReset(LL_AHB1_GRP1_PERIPH_DMA1);
AnnaBridge 167:e84263d55307 192 }
AnnaBridge 167:e84263d55307 193 else if (DMAx == DMA2)
AnnaBridge 167:e84263d55307 194 {
AnnaBridge 167:e84263d55307 195 /* Force reset of DMA clock */
AnnaBridge 167:e84263d55307 196 LL_AHB1_GRP1_ForceReset(LL_AHB1_GRP1_PERIPH_DMA2);
AnnaBridge 167:e84263d55307 197
AnnaBridge 167:e84263d55307 198 /* Release reset of DMA clock */
AnnaBridge 167:e84263d55307 199 LL_AHB1_GRP1_ReleaseReset(LL_AHB1_GRP1_PERIPH_DMA2);
AnnaBridge 167:e84263d55307 200 }
AnnaBridge 167:e84263d55307 201 else
AnnaBridge 167:e84263d55307 202 {
AnnaBridge 167:e84263d55307 203 status = ERROR;
AnnaBridge 167:e84263d55307 204 }
AnnaBridge 167:e84263d55307 205 }
AnnaBridge 167:e84263d55307 206 else
AnnaBridge 167:e84263d55307 207 {
AnnaBridge 167:e84263d55307 208 /* Disable the selected Stream */
AnnaBridge 167:e84263d55307 209 LL_DMA_DisableStream(DMAx,Stream);
AnnaBridge 167:e84263d55307 210
AnnaBridge 167:e84263d55307 211 /* Get the DMA Stream Instance */
AnnaBridge 167:e84263d55307 212 tmp = (DMA_Stream_TypeDef *)(__LL_DMA_GET_STREAM_INSTANCE(DMAx, Stream));
AnnaBridge 167:e84263d55307 213
AnnaBridge 167:e84263d55307 214 /* Reset DMAx_Streamy configuration register */
AnnaBridge 167:e84263d55307 215 LL_DMA_WriteReg(tmp, CR, 0U);
AnnaBridge 167:e84263d55307 216
AnnaBridge 167:e84263d55307 217 /* Reset DMAx_Streamy remaining bytes register */
AnnaBridge 167:e84263d55307 218 LL_DMA_WriteReg(tmp, NDTR, 0U);
AnnaBridge 167:e84263d55307 219
AnnaBridge 167:e84263d55307 220 /* Reset DMAx_Streamy peripheral address register */
AnnaBridge 167:e84263d55307 221 LL_DMA_WriteReg(tmp, PAR, 0U);
AnnaBridge 167:e84263d55307 222
AnnaBridge 167:e84263d55307 223 /* Reset DMAx_Streamy memory address register */
AnnaBridge 167:e84263d55307 224 LL_DMA_WriteReg(tmp, M0AR, 0U);
AnnaBridge 167:e84263d55307 225
AnnaBridge 167:e84263d55307 226 /* Reset DMAx_Streamy memory address register */
AnnaBridge 167:e84263d55307 227 LL_DMA_WriteReg(tmp, M1AR, 0U);
AnnaBridge 167:e84263d55307 228
AnnaBridge 167:e84263d55307 229 /* Reset DMAx_Streamy FIFO control register */
AnnaBridge 167:e84263d55307 230 LL_DMA_WriteReg(tmp, FCR, 0x00000021U);
AnnaBridge 167:e84263d55307 231
AnnaBridge 167:e84263d55307 232 /* Reset Channel register field for DMAx Stream*/
AnnaBridge 167:e84263d55307 233 LL_DMA_SetChannelSelection(DMAx, Stream, LL_DMA_CHANNEL_0);
AnnaBridge 167:e84263d55307 234
AnnaBridge 167:e84263d55307 235 if(Stream == LL_DMA_STREAM_0)
AnnaBridge 167:e84263d55307 236 {
AnnaBridge 167:e84263d55307 237 /* Reset the Stream0 pending flags */
AnnaBridge 167:e84263d55307 238 DMAx->LIFCR = 0x0000003F ;
AnnaBridge 167:e84263d55307 239 }
AnnaBridge 167:e84263d55307 240 else if(Stream == LL_DMA_STREAM_1)
AnnaBridge 167:e84263d55307 241 {
AnnaBridge 167:e84263d55307 242 /* Reset the Stream1 pending flags */
AnnaBridge 167:e84263d55307 243 DMAx->LIFCR = 0x00000F40 ;
AnnaBridge 167:e84263d55307 244 }
AnnaBridge 167:e84263d55307 245 else if(Stream == LL_DMA_STREAM_2)
AnnaBridge 167:e84263d55307 246 {
AnnaBridge 167:e84263d55307 247 /* Reset the Stream2 pending flags */
AnnaBridge 167:e84263d55307 248 DMAx->LIFCR = 0x003F0000 ;
AnnaBridge 167:e84263d55307 249 }
AnnaBridge 167:e84263d55307 250 else if(Stream == LL_DMA_STREAM_3)
AnnaBridge 167:e84263d55307 251 {
AnnaBridge 167:e84263d55307 252 /* Reset the Stream3 pending flags */
AnnaBridge 167:e84263d55307 253 DMAx->LIFCR = 0x0F400000 ;
AnnaBridge 167:e84263d55307 254 }
AnnaBridge 167:e84263d55307 255 else if(Stream == LL_DMA_STREAM_4)
AnnaBridge 167:e84263d55307 256 {
AnnaBridge 167:e84263d55307 257 /* Reset the Stream4 pending flags */
AnnaBridge 167:e84263d55307 258 DMAx->HIFCR = 0x0000003F ;
AnnaBridge 167:e84263d55307 259 }
AnnaBridge 167:e84263d55307 260 else if(Stream == LL_DMA_STREAM_5)
AnnaBridge 167:e84263d55307 261 {
AnnaBridge 167:e84263d55307 262 /* Reset the Stream5 pending flags */
AnnaBridge 167:e84263d55307 263 DMAx->HIFCR = 0x00000F40 ;
AnnaBridge 167:e84263d55307 264 }
AnnaBridge 167:e84263d55307 265 else if(Stream == LL_DMA_STREAM_6)
AnnaBridge 167:e84263d55307 266 {
AnnaBridge 167:e84263d55307 267 /* Reset the Stream6 pending flags */
AnnaBridge 167:e84263d55307 268 DMAx->HIFCR = 0x003F0000 ;
AnnaBridge 167:e84263d55307 269 }
AnnaBridge 167:e84263d55307 270 else if(Stream == LL_DMA_STREAM_7)
AnnaBridge 167:e84263d55307 271 {
AnnaBridge 167:e84263d55307 272 /* Reset the Stream7 pending flags */
AnnaBridge 167:e84263d55307 273 DMAx->HIFCR = 0x0F400000 ;
AnnaBridge 167:e84263d55307 274 }
AnnaBridge 167:e84263d55307 275 else
AnnaBridge 167:e84263d55307 276 {
AnnaBridge 167:e84263d55307 277 status = ERROR;
AnnaBridge 167:e84263d55307 278 }
AnnaBridge 167:e84263d55307 279 }
AnnaBridge 167:e84263d55307 280
AnnaBridge 167:e84263d55307 281 return status;
AnnaBridge 167:e84263d55307 282 }
AnnaBridge 167:e84263d55307 283
AnnaBridge 167:e84263d55307 284 /**
AnnaBridge 167:e84263d55307 285 * @brief Initialize the DMA registers according to the specified parameters in DMA_InitStruct.
AnnaBridge 167:e84263d55307 286 * @note To convert DMAx_Streamy Instance to DMAx Instance and Streamy, use helper macros :
AnnaBridge 167:e84263d55307 287 * @arg @ref __LL_DMA_GET_INSTANCE
AnnaBridge 167:e84263d55307 288 * @arg @ref __LL_DMA_GET_STREAM
AnnaBridge 167:e84263d55307 289 * @param DMAx DMAx Instance
AnnaBridge 167:e84263d55307 290 * @param Stream This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 291 * @arg @ref LL_DMA_STREAM_0
AnnaBridge 167:e84263d55307 292 * @arg @ref LL_DMA_STREAM_1
AnnaBridge 167:e84263d55307 293 * @arg @ref LL_DMA_STREAM_2
AnnaBridge 167:e84263d55307 294 * @arg @ref LL_DMA_STREAM_3
AnnaBridge 167:e84263d55307 295 * @arg @ref LL_DMA_STREAM_4
AnnaBridge 167:e84263d55307 296 * @arg @ref LL_DMA_STREAM_5
AnnaBridge 167:e84263d55307 297 * @arg @ref LL_DMA_STREAM_6
AnnaBridge 167:e84263d55307 298 * @arg @ref LL_DMA_STREAM_7
AnnaBridge 167:e84263d55307 299 * @param DMA_InitStruct pointer to a @ref LL_DMA_InitTypeDef structure.
AnnaBridge 167:e84263d55307 300 * @retval An ErrorStatus enumeration value:
AnnaBridge 167:e84263d55307 301 * - SUCCESS: DMA registers are initialized
AnnaBridge 167:e84263d55307 302 * - ERROR: Not applicable
AnnaBridge 167:e84263d55307 303 */
AnnaBridge 167:e84263d55307 304 uint32_t LL_DMA_Init(DMA_TypeDef *DMAx, uint32_t Stream, LL_DMA_InitTypeDef *DMA_InitStruct)
AnnaBridge 167:e84263d55307 305 {
AnnaBridge 167:e84263d55307 306 /* Check the DMA Instance DMAx and Stream parameters*/
AnnaBridge 167:e84263d55307 307 assert_param(IS_LL_DMA_ALL_STREAM_INSTANCE(DMAx, Stream));
AnnaBridge 167:e84263d55307 308
AnnaBridge 167:e84263d55307 309 /* Check the DMA parameters from DMA_InitStruct */
AnnaBridge 167:e84263d55307 310 assert_param(IS_LL_DMA_DIRECTION(DMA_InitStruct->Direction));
AnnaBridge 167:e84263d55307 311 assert_param(IS_LL_DMA_MODE(DMA_InitStruct->Mode));
AnnaBridge 167:e84263d55307 312 assert_param(IS_LL_DMA_PERIPHINCMODE(DMA_InitStruct->PeriphOrM2MSrcIncMode));
AnnaBridge 167:e84263d55307 313 assert_param(IS_LL_DMA_MEMORYINCMODE(DMA_InitStruct->MemoryOrM2MDstIncMode));
AnnaBridge 167:e84263d55307 314 assert_param(IS_LL_DMA_PERIPHDATASIZE(DMA_InitStruct->PeriphOrM2MSrcDataSize));
AnnaBridge 167:e84263d55307 315 assert_param(IS_LL_DMA_MEMORYDATASIZE(DMA_InitStruct->MemoryOrM2MDstDataSize));
AnnaBridge 167:e84263d55307 316 assert_param(IS_LL_DMA_NBDATA(DMA_InitStruct->NbData));
AnnaBridge 167:e84263d55307 317 assert_param(IS_LL_DMA_CHANNEL(DMA_InitStruct->Channel));
AnnaBridge 167:e84263d55307 318 assert_param(IS_LL_DMA_PRIORITY(DMA_InitStruct->Priority));
AnnaBridge 167:e84263d55307 319 assert_param(IS_LL_DMA_FIFO_MODE_STATE(DMA_InitStruct->FIFOMode));
AnnaBridge 167:e84263d55307 320 /* Check the memory burst, peripheral burst and FIFO threshold parameters only
AnnaBridge 167:e84263d55307 321 when FIFO mode is enabled */
AnnaBridge 167:e84263d55307 322 if(DMA_InitStruct->FIFOMode != LL_DMA_FIFOMODE_DISABLE)
AnnaBridge 167:e84263d55307 323 {
AnnaBridge 167:e84263d55307 324 assert_param(IS_LL_DMA_FIFO_THRESHOLD(DMA_InitStruct->FIFOThreshold));
AnnaBridge 167:e84263d55307 325 assert_param(IS_LL_DMA_MEMORY_BURST(DMA_InitStruct->MemBurst));
AnnaBridge 167:e84263d55307 326 assert_param(IS_LL_DMA_PERIPHERAL_BURST(DMA_InitStruct->PeriphBurst));
AnnaBridge 167:e84263d55307 327 }
AnnaBridge 167:e84263d55307 328
AnnaBridge 167:e84263d55307 329 /*---------------------------- DMAx SxCR Configuration ------------------------
AnnaBridge 167:e84263d55307 330 * Configure DMAx_Streamy: data transfer direction, data transfer mode,
AnnaBridge 167:e84263d55307 331 * peripheral and memory increment mode,
AnnaBridge 167:e84263d55307 332 * data size alignment and priority level with parameters :
AnnaBridge 167:e84263d55307 333 * - Direction: DMA_SxCR_DIR[1:0] bits
AnnaBridge 167:e84263d55307 334 * - Mode: DMA_SxCR_CIRC bit
AnnaBridge 167:e84263d55307 335 * - PeriphOrM2MSrcIncMode: DMA_SxCR_PINC bit
AnnaBridge 167:e84263d55307 336 * - MemoryOrM2MDstIncMode: DMA_SxCR_MINC bit
AnnaBridge 167:e84263d55307 337 * - PeriphOrM2MSrcDataSize: DMA_SxCR_PSIZE[1:0] bits
AnnaBridge 167:e84263d55307 338 * - MemoryOrM2MDstDataSize: DMA_SxCR_MSIZE[1:0] bits
AnnaBridge 167:e84263d55307 339 * - Priority: DMA_SxCR_PL[1:0] bits
AnnaBridge 167:e84263d55307 340 */
AnnaBridge 167:e84263d55307 341 LL_DMA_ConfigTransfer(DMAx, Stream, DMA_InitStruct->Direction | \
AnnaBridge 167:e84263d55307 342 DMA_InitStruct->Mode | \
AnnaBridge 167:e84263d55307 343 DMA_InitStruct->PeriphOrM2MSrcIncMode | \
AnnaBridge 167:e84263d55307 344 DMA_InitStruct->MemoryOrM2MDstIncMode | \
AnnaBridge 167:e84263d55307 345 DMA_InitStruct->PeriphOrM2MSrcDataSize | \
AnnaBridge 167:e84263d55307 346 DMA_InitStruct->MemoryOrM2MDstDataSize | \
AnnaBridge 167:e84263d55307 347 DMA_InitStruct->Priority
AnnaBridge 167:e84263d55307 348 );
AnnaBridge 167:e84263d55307 349
AnnaBridge 167:e84263d55307 350 if(DMA_InitStruct->FIFOMode != LL_DMA_FIFOMODE_DISABLE)
AnnaBridge 167:e84263d55307 351 {
AnnaBridge 167:e84263d55307 352 /*---------------------------- DMAx SxFCR Configuration ------------------------
AnnaBridge 167:e84263d55307 353 * Configure DMAx_Streamy: fifo mode and fifo threshold with parameters :
AnnaBridge 167:e84263d55307 354 * - FIFOMode: DMA_SxFCR_DMDIS bit
AnnaBridge 167:e84263d55307 355 * - FIFOThreshold: DMA_SxFCR_FTH[1:0] bits
AnnaBridge 167:e84263d55307 356 */
AnnaBridge 167:e84263d55307 357 LL_DMA_ConfigFifo(DMAx, Stream, DMA_InitStruct->FIFOMode, DMA_InitStruct->FIFOThreshold);
AnnaBridge 167:e84263d55307 358
AnnaBridge 167:e84263d55307 359 /*---------------------------- DMAx SxCR Configuration --------------------------
AnnaBridge 167:e84263d55307 360 * Configure DMAx_Streamy: memory burst transfer with parameters :
AnnaBridge 167:e84263d55307 361 * - MemBurst: DMA_SxCR_MBURST[1:0] bits
AnnaBridge 167:e84263d55307 362 */
AnnaBridge 167:e84263d55307 363 LL_DMA_SetMemoryBurstxfer(DMAx,Stream,DMA_InitStruct->MemBurst);
AnnaBridge 167:e84263d55307 364
AnnaBridge 167:e84263d55307 365 /*---------------------------- DMAx SxCR Configuration --------------------------
AnnaBridge 167:e84263d55307 366 * Configure DMAx_Streamy: peripheral burst transfer with parameters :
AnnaBridge 167:e84263d55307 367 * - PeriphBurst: DMA_SxCR_PBURST[1:0] bits
AnnaBridge 167:e84263d55307 368 */
AnnaBridge 167:e84263d55307 369 LL_DMA_SetPeriphBurstxfer(DMAx,Stream,DMA_InitStruct->PeriphBurst);
AnnaBridge 167:e84263d55307 370 }
AnnaBridge 167:e84263d55307 371
AnnaBridge 167:e84263d55307 372 /*-------------------------- DMAx SxM0AR Configuration --------------------------
AnnaBridge 167:e84263d55307 373 * Configure the memory or destination base address with parameter :
AnnaBridge 167:e84263d55307 374 * - MemoryOrM2MDstAddress: DMA_SxM0AR_M0A[31:0] bits
AnnaBridge 167:e84263d55307 375 */
AnnaBridge 167:e84263d55307 376 LL_DMA_SetMemoryAddress(DMAx, Stream, DMA_InitStruct->MemoryOrM2MDstAddress);
AnnaBridge 167:e84263d55307 377
AnnaBridge 167:e84263d55307 378 /*-------------------------- DMAx SxPAR Configuration ---------------------------
AnnaBridge 167:e84263d55307 379 * Configure the peripheral or source base address with parameter :
AnnaBridge 167:e84263d55307 380 * - PeriphOrM2MSrcAddress: DMA_SxPAR_PA[31:0] bits
AnnaBridge 167:e84263d55307 381 */
AnnaBridge 167:e84263d55307 382 LL_DMA_SetPeriphAddress(DMAx, Stream, DMA_InitStruct->PeriphOrM2MSrcAddress);
AnnaBridge 167:e84263d55307 383
AnnaBridge 167:e84263d55307 384 /*--------------------------- DMAx SxNDTR Configuration -------------------------
AnnaBridge 167:e84263d55307 385 * Configure the peripheral base address with parameter :
AnnaBridge 167:e84263d55307 386 * - NbData: DMA_SxNDT[15:0] bits
AnnaBridge 167:e84263d55307 387 */
AnnaBridge 167:e84263d55307 388 LL_DMA_SetDataLength(DMAx, Stream, DMA_InitStruct->NbData);
AnnaBridge 167:e84263d55307 389
AnnaBridge 167:e84263d55307 390 /*--------------------------- DMA SxCR_CHSEL Configuration ----------------------
AnnaBridge 167:e84263d55307 391 * Configure the peripheral base address with parameter :
AnnaBridge 167:e84263d55307 392 * - PeriphRequest: DMA_SxCR_CHSEL[2:0] bits
AnnaBridge 167:e84263d55307 393 */
AnnaBridge 167:e84263d55307 394 LL_DMA_SetChannelSelection(DMAx, Stream, DMA_InitStruct->Channel);
AnnaBridge 167:e84263d55307 395
AnnaBridge 167:e84263d55307 396 return SUCCESS;
AnnaBridge 167:e84263d55307 397 }
AnnaBridge 167:e84263d55307 398
AnnaBridge 167:e84263d55307 399 /**
AnnaBridge 167:e84263d55307 400 * @brief Set each @ref LL_DMA_InitTypeDef field to default value.
AnnaBridge 167:e84263d55307 401 * @param DMA_InitStruct Pointer to a @ref LL_DMA_InitTypeDef structure.
AnnaBridge 167:e84263d55307 402 * @retval None
AnnaBridge 167:e84263d55307 403 */
AnnaBridge 167:e84263d55307 404 void LL_DMA_StructInit(LL_DMA_InitTypeDef *DMA_InitStruct)
AnnaBridge 167:e84263d55307 405 {
AnnaBridge 167:e84263d55307 406 /* Set DMA_InitStruct fields to default values */
AnnaBridge 167:e84263d55307 407 DMA_InitStruct->PeriphOrM2MSrcAddress = 0x00000000U;
AnnaBridge 167:e84263d55307 408 DMA_InitStruct->MemoryOrM2MDstAddress = 0x00000000U;
AnnaBridge 167:e84263d55307 409 DMA_InitStruct->Direction = LL_DMA_DIRECTION_PERIPH_TO_MEMORY;
AnnaBridge 167:e84263d55307 410 DMA_InitStruct->Mode = LL_DMA_MODE_NORMAL;
AnnaBridge 167:e84263d55307 411 DMA_InitStruct->PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT;
AnnaBridge 167:e84263d55307 412 DMA_InitStruct->MemoryOrM2MDstIncMode = LL_DMA_MEMORY_NOINCREMENT;
AnnaBridge 167:e84263d55307 413 DMA_InitStruct->PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_BYTE;
AnnaBridge 167:e84263d55307 414 DMA_InitStruct->MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_BYTE;
AnnaBridge 167:e84263d55307 415 DMA_InitStruct->NbData = 0x00000000U;
AnnaBridge 167:e84263d55307 416 DMA_InitStruct->Channel = LL_DMA_CHANNEL_0;
AnnaBridge 167:e84263d55307 417 DMA_InitStruct->Priority = LL_DMA_PRIORITY_LOW;
AnnaBridge 167:e84263d55307 418 DMA_InitStruct->FIFOMode = LL_DMA_FIFOMODE_DISABLE;
AnnaBridge 167:e84263d55307 419 DMA_InitStruct->FIFOThreshold = LL_DMA_FIFOTHRESHOLD_1_4;
AnnaBridge 167:e84263d55307 420 DMA_InitStruct->MemBurst = LL_DMA_MBURST_SINGLE;
AnnaBridge 167:e84263d55307 421 DMA_InitStruct->PeriphBurst = LL_DMA_PBURST_SINGLE;
AnnaBridge 167:e84263d55307 422 }
AnnaBridge 167:e84263d55307 423
AnnaBridge 167:e84263d55307 424 /**
AnnaBridge 167:e84263d55307 425 * @}
AnnaBridge 167:e84263d55307 426 */
AnnaBridge 167:e84263d55307 427
AnnaBridge 167:e84263d55307 428 /**
AnnaBridge 167:e84263d55307 429 * @}
AnnaBridge 167:e84263d55307 430 */
AnnaBridge 167:e84263d55307 431
AnnaBridge 167:e84263d55307 432 /**
AnnaBridge 167:e84263d55307 433 * @}
AnnaBridge 167:e84263d55307 434 */
AnnaBridge 167:e84263d55307 435
AnnaBridge 167:e84263d55307 436 #endif /* DMA1 || DMA2 */
AnnaBridge 167:e84263d55307 437
AnnaBridge 167:e84263d55307 438 /**
AnnaBridge 167:e84263d55307 439 * @}
AnnaBridge 167:e84263d55307 440 */
AnnaBridge 167:e84263d55307 441
AnnaBridge 167:e84263d55307 442 #endif /* USE_FULL_LL_DRIVER */
AnnaBridge 167:e84263d55307 443
AnnaBridge 167:e84263d55307 444 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/