mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Mon Nov 03 10:45:07 2014 +0000
Revision:
382:ee426a420dbb
Parent:
targets/cmsis/TARGET_STM/TARGET_DISCO_L053C8/stm32l0xx_hal_dma.c@376:cb4d9db17537
Child:
387:643a59b3dbac
Synchronized with git revision d54467eb07f62efd9ccdf44f1ede7fe1c1b0cf83

Full URL: https://github.com/mbedmicro/mbed/commit/d54467eb07f62efd9ccdf44f1ede7fe1c1b0cf83/

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 376:cb4d9db17537 1 /**
mbed_official 376:cb4d9db17537 2 ******************************************************************************
mbed_official 376:cb4d9db17537 3 * @file stm32l0xx_hal_dma.c
mbed_official 376:cb4d9db17537 4 * @author MCD Application Team
mbed_official 376:cb4d9db17537 5 * @version V1.1.0
mbed_official 376:cb4d9db17537 6 * @date 18-June-2014
mbed_official 376:cb4d9db17537 7 * @brief DMA HAL module driver.
mbed_official 376:cb4d9db17537 8 *
mbed_official 376:cb4d9db17537 9 * This file provides firmware functions to manage the following
mbed_official 376:cb4d9db17537 10 * functionalities of the Direct Memory Access (DMA) peripheral:
mbed_official 376:cb4d9db17537 11 * + Initialization/de-initialization functions
mbed_official 376:cb4d9db17537 12 * + I/O operation functions
mbed_official 376:cb4d9db17537 13 * + Peripheral State functions
mbed_official 376:cb4d9db17537 14 *
mbed_official 376:cb4d9db17537 15 *
mbed_official 376:cb4d9db17537 16 @verbatim
mbed_official 376:cb4d9db17537 17 ==============================================================================
mbed_official 376:cb4d9db17537 18 ##### How to use this driver #####
mbed_official 376:cb4d9db17537 19 ==============================================================================
mbed_official 376:cb4d9db17537 20 [..]
mbed_official 376:cb4d9db17537 21 (#) Enable and configure the peripheral to be connected to the DMA Channel
mbed_official 376:cb4d9db17537 22 (except for internal SRAM / FLASH memories: no initialization is
mbed_official 376:cb4d9db17537 23 necessary).
mbed_official 376:cb4d9db17537 24
mbed_official 376:cb4d9db17537 25 (#) For a given Channel, program the required configuration through the following parameters:
mbed_official 376:cb4d9db17537 26 Channel request, Transfer Direction, Source and Destination data formats,
mbed_official 376:cb4d9db17537 27 Circular, Normal or peripheral flow control mode, Channel Priority level,
mbed_official 376:cb4d9db17537 28 Source and Destination Increment mode using HAL_DMA_Init() function.
mbed_official 376:cb4d9db17537 29
mbed_official 376:cb4d9db17537 30 *** Polling mode IO operation ***
mbed_official 376:cb4d9db17537 31 =================================
mbed_official 376:cb4d9db17537 32 [..]
mbed_official 376:cb4d9db17537 33 (+) Use HAL_DMA_Start() to start DMA transfer after the configuration of Source
mbed_official 376:cb4d9db17537 34 address and destination address and the Length of data to be transferred
mbed_official 376:cb4d9db17537 35 (+) Use HAL_DMA_PollForTransfer() to poll for the end of current transfer, in this
mbed_official 376:cb4d9db17537 36 case a fixed Timeout can be configured by User depending from his application.
mbed_official 376:cb4d9db17537 37
mbed_official 376:cb4d9db17537 38 *** Interrupt mode IO operation ***
mbed_official 376:cb4d9db17537 39 ===================================
mbed_official 376:cb4d9db17537 40 [..]
mbed_official 376:cb4d9db17537 41 (+) Configure the DMA interrupt priority using HAL_NVIC_SetPriority()
mbed_official 376:cb4d9db17537 42 (+) Enable the DMA IRQ handler using HAL_NVIC_EnableIRQ()
mbed_official 376:cb4d9db17537 43 (+) Use HAL_DMA_Start_IT() to start DMA transfer after the configuration of
mbed_official 376:cb4d9db17537 44 Source address and destination address and the Length of data to be transferred. In this
mbed_official 376:cb4d9db17537 45 case the DMA interrupt is configured
mbed_official 376:cb4d9db17537 46 (+) Use HAL_DMA_IRQHandler() called under DMA_IRQHandler() Interrupt subroutine
mbed_official 376:cb4d9db17537 47 (+) At the end of data transfer HAL_DMA_IRQHandler() function is executed and user can
mbed_official 376:cb4d9db17537 48 add his own function by customization of function pointer XferCpltCallback and
mbed_official 376:cb4d9db17537 49 XferErrorCallback (i.e a member of DMA handle structure).
mbed_official 376:cb4d9db17537 50
mbed_official 376:cb4d9db17537 51 (#) Use HAL_DMA_GetState() function to return the DMA state and HAL_DMA_GetError() in case of error
mbed_official 376:cb4d9db17537 52 detection.
mbed_official 376:cb4d9db17537 53
mbed_official 376:cb4d9db17537 54 (#) Use HAL_DMA_Abort() function to abort the current transfer
mbed_official 376:cb4d9db17537 55
mbed_official 376:cb4d9db17537 56 -@- In Memory-to-Memory transfer mode, Circular mode is not allowed.
mbed_official 376:cb4d9db17537 57
mbed_official 376:cb4d9db17537 58 @endverbatim
mbed_official 376:cb4d9db17537 59 ******************************************************************************
mbed_official 376:cb4d9db17537 60 * @attention
mbed_official 376:cb4d9db17537 61 *
mbed_official 376:cb4d9db17537 62 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
mbed_official 376:cb4d9db17537 63 *
mbed_official 376:cb4d9db17537 64 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 376:cb4d9db17537 65 * are permitted provided that the following conditions are met:
mbed_official 376:cb4d9db17537 66 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 376:cb4d9db17537 67 * this list of conditions and the following disclaimer.
mbed_official 376:cb4d9db17537 68 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 376:cb4d9db17537 69 * this list of conditions and the following disclaimer in the documentation
mbed_official 376:cb4d9db17537 70 * and/or other materials provided with the distribution.
mbed_official 376:cb4d9db17537 71 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 376:cb4d9db17537 72 * may be used to endorse or promote products derived from this software
mbed_official 376:cb4d9db17537 73 * without specific prior written permission.
mbed_official 376:cb4d9db17537 74 *
mbed_official 376:cb4d9db17537 75 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 376:cb4d9db17537 76 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 376:cb4d9db17537 77 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 376:cb4d9db17537 78 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 376:cb4d9db17537 79 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 376:cb4d9db17537 80 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 376:cb4d9db17537 81 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 376:cb4d9db17537 82 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 376:cb4d9db17537 83 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 376:cb4d9db17537 84 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 376:cb4d9db17537 85 *
mbed_official 376:cb4d9db17537 86 ******************************************************************************
mbed_official 376:cb4d9db17537 87 */
mbed_official 376:cb4d9db17537 88
mbed_official 376:cb4d9db17537 89 /* Includes ------------------------------------------------------------------*/
mbed_official 376:cb4d9db17537 90 #include "stm32l0xx_hal.h"
mbed_official 376:cb4d9db17537 91
mbed_official 376:cb4d9db17537 92 /** @addtogroup STM32L0xx_HAL_Driver
mbed_official 376:cb4d9db17537 93 * @{
mbed_official 376:cb4d9db17537 94 */
mbed_official 376:cb4d9db17537 95
mbed_official 376:cb4d9db17537 96 /** @defgroup DMA
mbed_official 376:cb4d9db17537 97 * @brief DMA HAL module driver
mbed_official 376:cb4d9db17537 98 * @{
mbed_official 376:cb4d9db17537 99 */
mbed_official 376:cb4d9db17537 100
mbed_official 376:cb4d9db17537 101 #ifdef HAL_DMA_MODULE_ENABLED
mbed_official 376:cb4d9db17537 102
mbed_official 376:cb4d9db17537 103 /* Private typedef -----------------------------------------------------------*/
mbed_official 376:cb4d9db17537 104 /* Private define ------------------------------------------------------------*/
mbed_official 376:cb4d9db17537 105 #define HAL_TIMEOUT_DMA_ABORT ((uint32_t)1000) /* 1s */
mbed_official 376:cb4d9db17537 106 /* Private macro -------------------------------------------------------------*/
mbed_official 376:cb4d9db17537 107 /* Private variables ---------------------------------------------------------*/
mbed_official 376:cb4d9db17537 108 /* Private function prototypes -----------------------------------------------*/
mbed_official 376:cb4d9db17537 109 static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);
mbed_official 376:cb4d9db17537 110
mbed_official 376:cb4d9db17537 111 /* Private functions ---------------------------------------------------------*/
mbed_official 376:cb4d9db17537 112
mbed_official 376:cb4d9db17537 113 /** @defgroup DMA_Private_Functions
mbed_official 376:cb4d9db17537 114 * @{
mbed_official 376:cb4d9db17537 115 */
mbed_official 376:cb4d9db17537 116
mbed_official 376:cb4d9db17537 117 /** @defgroup DMA_Group1 Initialization/de-initialization functions
mbed_official 376:cb4d9db17537 118 * @brief Initialization/de-initialization functions
mbed_official 376:cb4d9db17537 119 *
mbed_official 376:cb4d9db17537 120 @verbatim
mbed_official 376:cb4d9db17537 121 ===============================================================================
mbed_official 376:cb4d9db17537 122 ##### Initialization and de-initialization functions #####
mbed_official 376:cb4d9db17537 123 ===============================================================================
mbed_official 376:cb4d9db17537 124 [..] This section provides functions allowing to:
mbed_official 376:cb4d9db17537 125 (+) Initialize and configure the DMA
mbed_official 376:cb4d9db17537 126 (+) De-Initialize the DMA
mbed_official 376:cb4d9db17537 127
mbed_official 376:cb4d9db17537 128 @endverbatim
mbed_official 376:cb4d9db17537 129 * @{
mbed_official 376:cb4d9db17537 130 */
mbed_official 376:cb4d9db17537 131
mbed_official 376:cb4d9db17537 132 /**
mbed_official 376:cb4d9db17537 133 * @brief Initializes the DMA according to the specified
mbed_official 376:cb4d9db17537 134 * parameters in the DMA_InitTypeDef and create the associated handle.
mbed_official 376:cb4d9db17537 135 * @param hdma: Pointer to a DMA_HandleTypeDef structure that contains
mbed_official 376:cb4d9db17537 136 * the configuration information for the specified DMA Channel.
mbed_official 376:cb4d9db17537 137 * @retval HAL status
mbed_official 376:cb4d9db17537 138 */
mbed_official 376:cb4d9db17537 139 HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma)
mbed_official 376:cb4d9db17537 140 {
mbed_official 376:cb4d9db17537 141 uint32_t tmp = 0;
mbed_official 376:cb4d9db17537 142
mbed_official 376:cb4d9db17537 143 /* Check the DMA peripheral state */
mbed_official 376:cb4d9db17537 144 if(hdma == NULL)
mbed_official 376:cb4d9db17537 145 {
mbed_official 376:cb4d9db17537 146 return HAL_ERROR;
mbed_official 376:cb4d9db17537 147 }
mbed_official 376:cb4d9db17537 148
mbed_official 376:cb4d9db17537 149 /* Check the parameters */
mbed_official 376:cb4d9db17537 150 assert_param(IS_DMA_ALL_PERIPH(hdma->Instance));
mbed_official 376:cb4d9db17537 151 assert_param(IS_DMA_ALL_REQUEST(hdma->Init.Request));
mbed_official 376:cb4d9db17537 152 assert_param(IS_DMA_DIRECTION(hdma->Init.Direction));
mbed_official 376:cb4d9db17537 153 assert_param(IS_DMA_PERIPHERAL_INC_STATE(hdma->Init.PeriphInc));
mbed_official 376:cb4d9db17537 154 assert_param(IS_DMA_MEMORY_INC_STATE(hdma->Init.MemInc));
mbed_official 376:cb4d9db17537 155 assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(hdma->Init.PeriphDataAlignment));
mbed_official 376:cb4d9db17537 156 assert_param(IS_DMA_MEMORY_DATA_SIZE(hdma->Init.MemDataAlignment));
mbed_official 376:cb4d9db17537 157 assert_param(IS_DMA_MODE(hdma->Init.Mode));
mbed_official 376:cb4d9db17537 158 assert_param(IS_DMA_PRIORITY(hdma->Init.Priority));
mbed_official 376:cb4d9db17537 159
mbed_official 376:cb4d9db17537 160 /* Change DMA peripheral state */
mbed_official 376:cb4d9db17537 161 hdma->State = HAL_DMA_STATE_BUSY;
mbed_official 376:cb4d9db17537 162
mbed_official 376:cb4d9db17537 163 /* Get the CR register value */
mbed_official 376:cb4d9db17537 164 tmp = hdma->Instance->CCR;
mbed_official 376:cb4d9db17537 165
mbed_official 376:cb4d9db17537 166 /* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR bits */
mbed_official 376:cb4d9db17537 167 tmp &= ((uint32_t)~(DMA_CCR_PL | DMA_CCR_MSIZE | DMA_CCR_PSIZE | \
mbed_official 376:cb4d9db17537 168 DMA_CCR_MINC | DMA_CCR_PINC | DMA_CCR_CIRC | \
mbed_official 376:cb4d9db17537 169 DMA_CCR_DIR));
mbed_official 376:cb4d9db17537 170
mbed_official 376:cb4d9db17537 171 /* Prepare the DMA Channel configuration */
mbed_official 376:cb4d9db17537 172 tmp |= hdma->Init.Direction |
mbed_official 376:cb4d9db17537 173 hdma->Init.PeriphInc | hdma->Init.MemInc |
mbed_official 376:cb4d9db17537 174 hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |
mbed_official 376:cb4d9db17537 175 hdma->Init.Mode | hdma->Init.Priority;
mbed_official 376:cb4d9db17537 176
mbed_official 376:cb4d9db17537 177 /* Write to DMA Channel CR register */
mbed_official 376:cb4d9db17537 178 hdma->Instance->CCR = tmp;
mbed_official 376:cb4d9db17537 179
mbed_official 376:cb4d9db17537 180 /* Write to DMA channel selection register */
mbed_official 376:cb4d9db17537 181 if (hdma->Instance == DMA1_Channel1)
mbed_official 376:cb4d9db17537 182 {
mbed_official 376:cb4d9db17537 183 /*Reset request selection for DMA1 Channel1*/
mbed_official 376:cb4d9db17537 184 DMA1_CSELR->CSELR &= ~DMA_CSELR_C1S;
mbed_official 376:cb4d9db17537 185
mbed_official 376:cb4d9db17537 186 /* Configure request selection for DMA1 Channel1 */
mbed_official 376:cb4d9db17537 187 DMA1_CSELR->CSELR |= hdma->Init.Request;
mbed_official 376:cb4d9db17537 188 }
mbed_official 376:cb4d9db17537 189 else if (hdma->Instance == DMA1_Channel2)
mbed_official 376:cb4d9db17537 190 {
mbed_official 376:cb4d9db17537 191 /*Reset request selection for DMA1 Channel2*/
mbed_official 376:cb4d9db17537 192 DMA1_CSELR->CSELR &= ~DMA_CSELR_C2S;
mbed_official 376:cb4d9db17537 193
mbed_official 376:cb4d9db17537 194 /* Configure request selection for DMA1 Channel2 */
mbed_official 376:cb4d9db17537 195 DMA1_CSELR->CSELR |= (uint32_t)(hdma->Init.Request << 4);
mbed_official 376:cb4d9db17537 196 }
mbed_official 376:cb4d9db17537 197 else if (hdma->Instance == DMA1_Channel3)
mbed_official 376:cb4d9db17537 198 {
mbed_official 376:cb4d9db17537 199 /*Reset request selection for DMA1 Channel3*/
mbed_official 376:cb4d9db17537 200 DMA1_CSELR->CSELR &= ~DMA_CSELR_C3S;
mbed_official 376:cb4d9db17537 201
mbed_official 376:cb4d9db17537 202 /* Configure request selection for DMA1 Channel3 */
mbed_official 376:cb4d9db17537 203 DMA1_CSELR->CSELR |= (uint32_t) (hdma->Init.Request << 8);
mbed_official 376:cb4d9db17537 204 }
mbed_official 376:cb4d9db17537 205 else if (hdma->Instance == DMA1_Channel4)
mbed_official 376:cb4d9db17537 206 {
mbed_official 376:cb4d9db17537 207 /*Reset request selection for DMA1 Channel4*/
mbed_official 376:cb4d9db17537 208 DMA1_CSELR->CSELR &= ~DMA_CSELR_C4S;
mbed_official 376:cb4d9db17537 209
mbed_official 376:cb4d9db17537 210 /* Configure request selection for DMA1 Channel4 */
mbed_official 376:cb4d9db17537 211 DMA1_CSELR->CSELR |= (uint32_t) (hdma->Init.Request << 12);
mbed_official 376:cb4d9db17537 212 }
mbed_official 376:cb4d9db17537 213 else if (hdma->Instance == DMA1_Channel5)
mbed_official 376:cb4d9db17537 214 {
mbed_official 376:cb4d9db17537 215 /*Reset request selection for DMA1 Channel5*/
mbed_official 376:cb4d9db17537 216 DMA1_CSELR->CSELR &= ~DMA_CSELR_C5S;
mbed_official 376:cb4d9db17537 217
mbed_official 376:cb4d9db17537 218 /* Configure request selection for DMA1 Channel5 */
mbed_official 376:cb4d9db17537 219 DMA1_CSELR->CSELR |= (uint32_t) (hdma->Init.Request << 16);
mbed_official 376:cb4d9db17537 220 }
mbed_official 376:cb4d9db17537 221 else if (hdma->Instance == DMA1_Channel6)
mbed_official 376:cb4d9db17537 222 {
mbed_official 376:cb4d9db17537 223 /*Reset request selection for DMA1 Channel6*/
mbed_official 376:cb4d9db17537 224 DMA1_CSELR->CSELR &= ~DMA_CSELR_C6S;
mbed_official 376:cb4d9db17537 225
mbed_official 376:cb4d9db17537 226 /* Configure request selection for DMA1 Channel6 */
mbed_official 376:cb4d9db17537 227 DMA1_CSELR->CSELR |= (uint32_t) (hdma->Init.Request << 20);
mbed_official 376:cb4d9db17537 228 }
mbed_official 376:cb4d9db17537 229 else if (hdma->Instance == DMA1_Channel7)
mbed_official 376:cb4d9db17537 230 {
mbed_official 376:cb4d9db17537 231 /*Reset request selection for DMA1 Channel7*/
mbed_official 376:cb4d9db17537 232 DMA1_CSELR->CSELR &= ~DMA_CSELR_C7S;
mbed_official 376:cb4d9db17537 233
mbed_official 376:cb4d9db17537 234 /* Configure request selection for DMA1 Channel7 */
mbed_official 376:cb4d9db17537 235 DMA1_CSELR->CSELR |= (uint32_t) (hdma->Init.Request << 24);
mbed_official 376:cb4d9db17537 236 }
mbed_official 376:cb4d9db17537 237
mbed_official 376:cb4d9db17537 238 /* Initialize the DMA state*/
mbed_official 376:cb4d9db17537 239 hdma->State = HAL_DMA_STATE_READY;
mbed_official 376:cb4d9db17537 240
mbed_official 376:cb4d9db17537 241 return HAL_OK;
mbed_official 376:cb4d9db17537 242 }
mbed_official 376:cb4d9db17537 243
mbed_official 376:cb4d9db17537 244 /**
mbed_official 376:cb4d9db17537 245 * @brief DeInitializes the DMA peripheral
mbed_official 376:cb4d9db17537 246 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 376:cb4d9db17537 247 * the configuration information for the specified DMA Channel.
mbed_official 376:cb4d9db17537 248 * @retval HAL status
mbed_official 376:cb4d9db17537 249 */
mbed_official 376:cb4d9db17537 250 HAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma)
mbed_official 376:cb4d9db17537 251 {
mbed_official 376:cb4d9db17537 252 /* Check the DMA peripheral state */
mbed_official 376:cb4d9db17537 253 if(hdma == NULL)
mbed_official 376:cb4d9db17537 254 {
mbed_official 376:cb4d9db17537 255 return HAL_ERROR;
mbed_official 376:cb4d9db17537 256 }
mbed_official 376:cb4d9db17537 257
mbed_official 376:cb4d9db17537 258 /* Check the DMA peripheral state */
mbed_official 376:cb4d9db17537 259 if(hdma->State == HAL_DMA_STATE_BUSY)
mbed_official 376:cb4d9db17537 260 {
mbed_official 376:cb4d9db17537 261 return HAL_ERROR;
mbed_official 376:cb4d9db17537 262 }
mbed_official 376:cb4d9db17537 263
mbed_official 376:cb4d9db17537 264 /* Disable the selected DMA Channelx */
mbed_official 376:cb4d9db17537 265 __HAL_DMA_DISABLE(hdma);
mbed_official 376:cb4d9db17537 266
mbed_official 376:cb4d9db17537 267 /* Reset DMA Channel control register */
mbed_official 376:cb4d9db17537 268 hdma->Instance->CCR = 0;
mbed_official 376:cb4d9db17537 269
mbed_official 376:cb4d9db17537 270 /* Reset DMA Channel Number of Data to Transfer register */
mbed_official 376:cb4d9db17537 271 hdma->Instance->CNDTR = 0;
mbed_official 376:cb4d9db17537 272
mbed_official 376:cb4d9db17537 273 /* Reset DMA Channel peripheral address register */
mbed_official 376:cb4d9db17537 274 hdma->Instance->CPAR = 0;
mbed_official 376:cb4d9db17537 275
mbed_official 376:cb4d9db17537 276 /* Reset DMA Channel memory address register */
mbed_official 376:cb4d9db17537 277 hdma->Instance->CMAR = 0;
mbed_official 376:cb4d9db17537 278
mbed_official 376:cb4d9db17537 279 /* Clear all flags */
mbed_official 376:cb4d9db17537 280 __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_GI_FLAG_INDEX(hdma));
mbed_official 376:cb4d9db17537 281 __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma));
mbed_official 376:cb4d9db17537 282 __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma));
mbed_official 376:cb4d9db17537 283 __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma));
mbed_official 376:cb4d9db17537 284
mbed_official 376:cb4d9db17537 285 /* Reset DMA channel selection register */
mbed_official 376:cb4d9db17537 286 if (hdma->Instance == DMA1_Channel1)
mbed_official 376:cb4d9db17537 287 {
mbed_official 376:cb4d9db17537 288 /*Reset DMA request*/
mbed_official 376:cb4d9db17537 289 DMA1_CSELR->CSELR &= ~DMA_CSELR_C1S;
mbed_official 376:cb4d9db17537 290 }
mbed_official 376:cb4d9db17537 291 else if (hdma->Instance == DMA1_Channel2)
mbed_official 376:cb4d9db17537 292 {
mbed_official 376:cb4d9db17537 293 /*Reset DMA request*/
mbed_official 376:cb4d9db17537 294 DMA1_CSELR->CSELR &= ~DMA_CSELR_C2S;
mbed_official 376:cb4d9db17537 295 }
mbed_official 376:cb4d9db17537 296 else if (hdma->Instance == DMA1_Channel3)
mbed_official 376:cb4d9db17537 297 {
mbed_official 376:cb4d9db17537 298 /*Reset DMA request*/
mbed_official 376:cb4d9db17537 299 DMA1_CSELR->CSELR &= ~DMA_CSELR_C3S;
mbed_official 376:cb4d9db17537 300 }
mbed_official 376:cb4d9db17537 301 else if (hdma->Instance == DMA1_Channel4)
mbed_official 376:cb4d9db17537 302 {
mbed_official 376:cb4d9db17537 303 /*Reset DMA request*/
mbed_official 376:cb4d9db17537 304 DMA1_CSELR->CSELR &= ~DMA_CSELR_C4S;
mbed_official 376:cb4d9db17537 305 }
mbed_official 376:cb4d9db17537 306 else if (hdma->Instance == DMA1_Channel5)
mbed_official 376:cb4d9db17537 307 {
mbed_official 376:cb4d9db17537 308 /*Reset DMA request*/
mbed_official 376:cb4d9db17537 309 DMA1_CSELR->CSELR &= ~DMA_CSELR_C5S;
mbed_official 376:cb4d9db17537 310 }
mbed_official 376:cb4d9db17537 311 else if (hdma->Instance == DMA1_Channel6)
mbed_official 376:cb4d9db17537 312 {
mbed_official 376:cb4d9db17537 313 /*Reset DMA request*/
mbed_official 376:cb4d9db17537 314 DMA1_CSELR->CSELR &= ~DMA_CSELR_C6S;
mbed_official 376:cb4d9db17537 315 }
mbed_official 376:cb4d9db17537 316 else if (hdma->Instance == DMA1_Channel7)
mbed_official 376:cb4d9db17537 317 {
mbed_official 376:cb4d9db17537 318 /*Reset DMA request*/
mbed_official 376:cb4d9db17537 319 DMA1_CSELR->CSELR &= ~DMA_CSELR_C7S;
mbed_official 376:cb4d9db17537 320 }
mbed_official 376:cb4d9db17537 321
mbed_official 376:cb4d9db17537 322 /* Initialise the error code */
mbed_official 376:cb4d9db17537 323 hdma->ErrorCode = HAL_DMA_ERROR_NONE;
mbed_official 376:cb4d9db17537 324
mbed_official 376:cb4d9db17537 325 /* Initialize the DMA state */
mbed_official 376:cb4d9db17537 326 hdma->State = HAL_DMA_STATE_RESET;
mbed_official 376:cb4d9db17537 327
mbed_official 376:cb4d9db17537 328 /* Release Lock */
mbed_official 376:cb4d9db17537 329 __HAL_UNLOCK(hdma);
mbed_official 376:cb4d9db17537 330
mbed_official 376:cb4d9db17537 331 return HAL_OK;
mbed_official 376:cb4d9db17537 332 }
mbed_official 376:cb4d9db17537 333
mbed_official 376:cb4d9db17537 334 /**
mbed_official 376:cb4d9db17537 335 * @}
mbed_official 376:cb4d9db17537 336 */
mbed_official 376:cb4d9db17537 337
mbed_official 376:cb4d9db17537 338 /** @defgroup DMA_Group2 I/O operation functions
mbed_official 376:cb4d9db17537 339 * @brief I/O operation functions
mbed_official 376:cb4d9db17537 340 *
mbed_official 376:cb4d9db17537 341 @verbatim
mbed_official 376:cb4d9db17537 342 ===============================================================================
mbed_official 376:cb4d9db17537 343 ##### IO operation functions #####
mbed_official 376:cb4d9db17537 344 ===============================================================================
mbed_official 376:cb4d9db17537 345 [..] This section provides functions allowing to:
mbed_official 376:cb4d9db17537 346 (+) Configure the source, destination address and data length and Start DMA transfer
mbed_official 376:cb4d9db17537 347 (+) Configure the source, destination address and data length and
mbed_official 376:cb4d9db17537 348 Start DMA transfer with interrupt
mbed_official 376:cb4d9db17537 349 (+) Abort DMA transfer
mbed_official 376:cb4d9db17537 350 (+) Poll for transfer complete
mbed_official 376:cb4d9db17537 351 (+) Handle DMA interrupt request
mbed_official 376:cb4d9db17537 352
mbed_official 376:cb4d9db17537 353 @endverbatim
mbed_official 376:cb4d9db17537 354 * @{
mbed_official 376:cb4d9db17537 355 */
mbed_official 376:cb4d9db17537 356
mbed_official 376:cb4d9db17537 357 /**
mbed_official 376:cb4d9db17537 358 * @brief Starts the DMA Transfer.
mbed_official 376:cb4d9db17537 359 * @param hdma : pointer to a DMA_HandleTypeDef structure that contains
mbed_official 376:cb4d9db17537 360 * the configuration information for the specified DMA Channel.
mbed_official 376:cb4d9db17537 361 * @param SrcAddress: The source memory Buffer address
mbed_official 376:cb4d9db17537 362 * @param DstAddress: The destination memory Buffer address
mbed_official 376:cb4d9db17537 363 * @param DataLength: The length of data to be transferred from source to destination
mbed_official 376:cb4d9db17537 364 * @retval HAL status
mbed_official 376:cb4d9db17537 365 */
mbed_official 376:cb4d9db17537 366 HAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
mbed_official 376:cb4d9db17537 367 {
mbed_official 376:cb4d9db17537 368 /* Process locked */
mbed_official 376:cb4d9db17537 369 __HAL_LOCK(hdma);
mbed_official 376:cb4d9db17537 370
mbed_official 376:cb4d9db17537 371 /* Change DMA peripheral state */
mbed_official 376:cb4d9db17537 372 hdma->State = HAL_DMA_STATE_BUSY;
mbed_official 376:cb4d9db17537 373
mbed_official 376:cb4d9db17537 374 /* Check the parameters */
mbed_official 376:cb4d9db17537 375 assert_param(IS_DMA_BUFFER_SIZE(DataLength));
mbed_official 376:cb4d9db17537 376
mbed_official 376:cb4d9db17537 377 /* Disable the peripheral */
mbed_official 376:cb4d9db17537 378 __HAL_DMA_DISABLE(hdma);
mbed_official 376:cb4d9db17537 379
mbed_official 376:cb4d9db17537 380 /* Configure the source, destination address and the data length */
mbed_official 376:cb4d9db17537 381 DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength);
mbed_official 376:cb4d9db17537 382
mbed_official 376:cb4d9db17537 383 /* Enable the Peripheral */
mbed_official 376:cb4d9db17537 384 __HAL_DMA_ENABLE(hdma);
mbed_official 376:cb4d9db17537 385
mbed_official 376:cb4d9db17537 386 return HAL_OK;
mbed_official 376:cb4d9db17537 387 }
mbed_official 376:cb4d9db17537 388
mbed_official 376:cb4d9db17537 389 /**
mbed_official 376:cb4d9db17537 390 * @brief Start the DMA Transfer with interrupt enabled.
mbed_official 376:cb4d9db17537 391 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 376:cb4d9db17537 392 * the configuration information for the specified DMA Channel.
mbed_official 376:cb4d9db17537 393 * @param SrcAddress: The source memory Buffer address
mbed_official 376:cb4d9db17537 394 * @param DstAddress: The destination memory Buffer address
mbed_official 376:cb4d9db17537 395 * @param DataLength: The length of data to be transferred from source to destination
mbed_official 376:cb4d9db17537 396 * @retval HAL status
mbed_official 376:cb4d9db17537 397 */
mbed_official 376:cb4d9db17537 398 HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
mbed_official 376:cb4d9db17537 399 {
mbed_official 376:cb4d9db17537 400 /* Process locked */
mbed_official 376:cb4d9db17537 401 __HAL_LOCK(hdma);
mbed_official 376:cb4d9db17537 402
mbed_official 376:cb4d9db17537 403 /* Change DMA peripheral state */
mbed_official 376:cb4d9db17537 404 hdma->State = HAL_DMA_STATE_BUSY;
mbed_official 376:cb4d9db17537 405
mbed_official 376:cb4d9db17537 406 /* Check the parameters */
mbed_official 376:cb4d9db17537 407 assert_param(IS_DMA_BUFFER_SIZE(DataLength));
mbed_official 376:cb4d9db17537 408
mbed_official 376:cb4d9db17537 409 /* Disable the peripheral */
mbed_official 376:cb4d9db17537 410 __HAL_DMA_DISABLE(hdma);
mbed_official 376:cb4d9db17537 411
mbed_official 376:cb4d9db17537 412 /* Configure the source, destination address and the data length */
mbed_official 376:cb4d9db17537 413 DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength);
mbed_official 376:cb4d9db17537 414
mbed_official 376:cb4d9db17537 415 /* Enable the transfer complete interrupt */
mbed_official 376:cb4d9db17537 416 __HAL_DMA_ENABLE_IT(hdma, DMA_IT_TC);
mbed_official 376:cb4d9db17537 417
mbed_official 376:cb4d9db17537 418 /* Enable the Half transfer complete interrupt */
mbed_official 376:cb4d9db17537 419 __HAL_DMA_ENABLE_IT(hdma, DMA_IT_HT);
mbed_official 376:cb4d9db17537 420
mbed_official 376:cb4d9db17537 421 /* Enable the transfer Error interrupt */
mbed_official 376:cb4d9db17537 422 __HAL_DMA_ENABLE_IT(hdma, DMA_IT_TE);
mbed_official 376:cb4d9db17537 423
mbed_official 376:cb4d9db17537 424 /* Enable the Peripheral */
mbed_official 376:cb4d9db17537 425 __HAL_DMA_ENABLE(hdma);
mbed_official 376:cb4d9db17537 426
mbed_official 376:cb4d9db17537 427 return HAL_OK;
mbed_official 376:cb4d9db17537 428 }
mbed_official 376:cb4d9db17537 429
mbed_official 376:cb4d9db17537 430 /**
mbed_official 376:cb4d9db17537 431 * @brief Aborts the DMA Transfer.
mbed_official 376:cb4d9db17537 432 * @param hdma : pointer to a DMA_HandleTypeDef structure that contains
mbed_official 376:cb4d9db17537 433 * the configuration information for the specified DMA Channel.
mbed_official 376:cb4d9db17537 434 * @param Timeout: Timeout duration
mbed_official 376:cb4d9db17537 435 * @retval HAL status
mbed_official 376:cb4d9db17537 436 */
mbed_official 376:cb4d9db17537 437 HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
mbed_official 376:cb4d9db17537 438 {
mbed_official 376:cb4d9db17537 439 uint32_t tickstart = 0;
mbed_official 376:cb4d9db17537 440
mbed_official 376:cb4d9db17537 441 /* Disable the channel */
mbed_official 376:cb4d9db17537 442 __HAL_DMA_DISABLE(hdma);
mbed_official 376:cb4d9db17537 443
mbed_official 376:cb4d9db17537 444 /* Get timeout */
mbed_official 376:cb4d9db17537 445 tickstart = HAL_GetTick();
mbed_official 376:cb4d9db17537 446
mbed_official 376:cb4d9db17537 447 /* Check if the DMA Channel is effectively disabled */
mbed_official 376:cb4d9db17537 448 while((hdma->Instance->CCR & DMA_CCR_EN) != 0)
mbed_official 376:cb4d9db17537 449 {
mbed_official 376:cb4d9db17537 450 /* Check for the Timeout */
mbed_official 376:cb4d9db17537 451 if( (HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT)
mbed_official 376:cb4d9db17537 452 {
mbed_official 376:cb4d9db17537 453 /* Update error code */
mbed_official 376:cb4d9db17537 454 hdma->ErrorCode |= HAL_DMA_ERROR_TIMEOUT;
mbed_official 376:cb4d9db17537 455
mbed_official 376:cb4d9db17537 456 /* Process Unlocked */
mbed_official 376:cb4d9db17537 457 __HAL_UNLOCK(hdma);
mbed_official 376:cb4d9db17537 458
mbed_official 376:cb4d9db17537 459 /* Change the DMA state */
mbed_official 376:cb4d9db17537 460 hdma->State = HAL_DMA_STATE_TIMEOUT;
mbed_official 376:cb4d9db17537 461
mbed_official 376:cb4d9db17537 462 return HAL_TIMEOUT;
mbed_official 376:cb4d9db17537 463 }
mbed_official 376:cb4d9db17537 464 }
mbed_official 376:cb4d9db17537 465 /* Process Unlocked */
mbed_official 376:cb4d9db17537 466 __HAL_UNLOCK(hdma);
mbed_official 376:cb4d9db17537 467
mbed_official 376:cb4d9db17537 468 /* Change the DMA state*/
mbed_official 376:cb4d9db17537 469 hdma->State = HAL_DMA_STATE_READY;
mbed_official 376:cb4d9db17537 470
mbed_official 376:cb4d9db17537 471 return HAL_OK;
mbed_official 376:cb4d9db17537 472 }
mbed_official 376:cb4d9db17537 473
mbed_official 376:cb4d9db17537 474 /**
mbed_official 376:cb4d9db17537 475 * @brief Polling for transfer complete.
mbed_official 376:cb4d9db17537 476 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 376:cb4d9db17537 477 * the configuration information for the specified DMA Channel.
mbed_official 376:cb4d9db17537 478 * @param CompleteLevel: Specifies the DMA level complete.
mbed_official 376:cb4d9db17537 479 * @param Timeout: Timeout duration.
mbed_official 376:cb4d9db17537 480 * @retval HAL status
mbed_official 376:cb4d9db17537 481 */
mbed_official 376:cb4d9db17537 482 HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout)
mbed_official 376:cb4d9db17537 483 {
mbed_official 376:cb4d9db17537 484 uint32_t temp;
mbed_official 376:cb4d9db17537 485 uint32_t tickstart = 0;
mbed_official 376:cb4d9db17537 486
mbed_official 376:cb4d9db17537 487 /* Get the level transfer complete flag */
mbed_official 376:cb4d9db17537 488 if(CompleteLevel == HAL_DMA_FULL_TRANSFER)
mbed_official 376:cb4d9db17537 489 {
mbed_official 376:cb4d9db17537 490 /* Transfer Complete flag */
mbed_official 376:cb4d9db17537 491 temp = __HAL_DMA_GET_TC_FLAG_INDEX(hdma);
mbed_official 376:cb4d9db17537 492 }
mbed_official 376:cb4d9db17537 493 else
mbed_official 376:cb4d9db17537 494 {
mbed_official 376:cb4d9db17537 495 /* Half Transfer Complete flag */
mbed_official 376:cb4d9db17537 496 temp = __HAL_DMA_GET_HT_FLAG_INDEX(hdma);
mbed_official 376:cb4d9db17537 497 }
mbed_official 376:cb4d9db17537 498
mbed_official 376:cb4d9db17537 499 /* Get timeout */
mbed_official 376:cb4d9db17537 500 tickstart = HAL_GetTick();
mbed_official 376:cb4d9db17537 501
mbed_official 376:cb4d9db17537 502 while(__HAL_DMA_GET_FLAG(hdma, temp) == RESET)
mbed_official 376:cb4d9db17537 503 {
mbed_official 376:cb4d9db17537 504 if((__HAL_DMA_GET_FLAG(hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma)) != RESET))
mbed_official 376:cb4d9db17537 505 {
mbed_official 376:cb4d9db17537 506 /* Clear the transfer error flags */
mbed_official 376:cb4d9db17537 507 __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma));
mbed_official 376:cb4d9db17537 508
mbed_official 376:cb4d9db17537 509 /* Update error code */
mbed_official 376:cb4d9db17537 510 SET_BIT(hdma->ErrorCode, HAL_DMA_ERROR_TE);
mbed_official 376:cb4d9db17537 511
mbed_official 376:cb4d9db17537 512 /* Change the DMA state */
mbed_official 376:cb4d9db17537 513 hdma->State= HAL_DMA_STATE_ERROR;
mbed_official 376:cb4d9db17537 514
mbed_official 376:cb4d9db17537 515 /* Process Unlocked */
mbed_official 376:cb4d9db17537 516 __HAL_UNLOCK(hdma);
mbed_official 376:cb4d9db17537 517
mbed_official 376:cb4d9db17537 518 return HAL_ERROR;
mbed_official 376:cb4d9db17537 519 }
mbed_official 376:cb4d9db17537 520 /* Check for the Timeout */
mbed_official 376:cb4d9db17537 521 if(Timeout != HAL_MAX_DELAY)
mbed_official 376:cb4d9db17537 522 {
mbed_official 376:cb4d9db17537 523 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 376:cb4d9db17537 524 {
mbed_official 376:cb4d9db17537 525 /* Update error code */
mbed_official 376:cb4d9db17537 526 SET_BIT(hdma->ErrorCode, HAL_DMA_ERROR_TIMEOUT);
mbed_official 376:cb4d9db17537 527
mbed_official 376:cb4d9db17537 528 /* Change the DMA state */
mbed_official 376:cb4d9db17537 529 hdma->State= HAL_DMA_STATE_TIMEOUT;
mbed_official 376:cb4d9db17537 530
mbed_official 376:cb4d9db17537 531 /* Process Unlocked */
mbed_official 376:cb4d9db17537 532 __HAL_UNLOCK(hdma);
mbed_official 376:cb4d9db17537 533
mbed_official 376:cb4d9db17537 534 return HAL_TIMEOUT;
mbed_official 376:cb4d9db17537 535 }
mbed_official 376:cb4d9db17537 536 }
mbed_official 376:cb4d9db17537 537 }
mbed_official 376:cb4d9db17537 538
mbed_official 376:cb4d9db17537 539 if(CompleteLevel == HAL_DMA_FULL_TRANSFER)
mbed_official 376:cb4d9db17537 540 {
mbed_official 376:cb4d9db17537 541 /* Clear the transfer complete flag */
mbed_official 376:cb4d9db17537 542 __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma));
mbed_official 376:cb4d9db17537 543
mbed_official 376:cb4d9db17537 544 /* The selected Channelx EN bit is cleared (DMA is disabled and
mbed_official 376:cb4d9db17537 545 all transfers are complete) */
mbed_official 376:cb4d9db17537 546 hdma->State = HAL_DMA_STATE_READY;
mbed_official 376:cb4d9db17537 547
mbed_official 376:cb4d9db17537 548 /* Process unlocked */
mbed_official 376:cb4d9db17537 549 __HAL_UNLOCK(hdma);
mbed_official 376:cb4d9db17537 550 }
mbed_official 376:cb4d9db17537 551 else
mbed_official 376:cb4d9db17537 552 {
mbed_official 376:cb4d9db17537 553 /* Clear the half transfer complete flag */
mbed_official 376:cb4d9db17537 554 __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma));
mbed_official 376:cb4d9db17537 555
mbed_official 376:cb4d9db17537 556 /* The selected Channelx EN bit is cleared (DMA is disabled and
mbed_official 376:cb4d9db17537 557 all transfers are complete) */
mbed_official 376:cb4d9db17537 558 hdma->State = HAL_DMA_STATE_READY_HALF;
mbed_official 376:cb4d9db17537 559
mbed_official 376:cb4d9db17537 560 /* Process unlocked */
mbed_official 376:cb4d9db17537 561 __HAL_UNLOCK(hdma);
mbed_official 376:cb4d9db17537 562 }
mbed_official 376:cb4d9db17537 563
mbed_official 376:cb4d9db17537 564 return HAL_OK;
mbed_official 376:cb4d9db17537 565 }
mbed_official 376:cb4d9db17537 566 /**
mbed_official 376:cb4d9db17537 567 * @brief Handles DMA interrupt request.
mbed_official 376:cb4d9db17537 568 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 376:cb4d9db17537 569 * the configuration information for the specified DMA Channel.
mbed_official 376:cb4d9db17537 570 * @retval None
mbed_official 376:cb4d9db17537 571 */
mbed_official 376:cb4d9db17537 572 void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
mbed_official 376:cb4d9db17537 573 {
mbed_official 376:cb4d9db17537 574 /* Transfer Error Interrupt management ***************************************/
mbed_official 376:cb4d9db17537 575 if(__HAL_DMA_GET_FLAG(hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma)) != RESET)
mbed_official 376:cb4d9db17537 576 {
mbed_official 376:cb4d9db17537 577 if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TE) != RESET)
mbed_official 376:cb4d9db17537 578 {
mbed_official 376:cb4d9db17537 579 /* Disable the transfer error interrupt */
mbed_official 376:cb4d9db17537 580 __HAL_DMA_DISABLE_IT(hdma, DMA_IT_TE);
mbed_official 376:cb4d9db17537 581
mbed_official 376:cb4d9db17537 582 /* Clear the transfer error flag */
mbed_official 376:cb4d9db17537 583 __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma));
mbed_official 376:cb4d9db17537 584
mbed_official 376:cb4d9db17537 585 /* Update error code */
mbed_official 376:cb4d9db17537 586 hdma->ErrorCode |= HAL_DMA_ERROR_TE;
mbed_official 376:cb4d9db17537 587
mbed_official 376:cb4d9db17537 588 /* Change the DMA state */
mbed_official 376:cb4d9db17537 589 hdma->State = HAL_DMA_STATE_ERROR;
mbed_official 376:cb4d9db17537 590
mbed_official 376:cb4d9db17537 591 /* Process Unlocked */
mbed_official 376:cb4d9db17537 592 __HAL_UNLOCK(hdma);
mbed_official 376:cb4d9db17537 593
mbed_official 376:cb4d9db17537 594 if (hdma->XferErrorCallback != NULL)
mbed_official 376:cb4d9db17537 595 {
mbed_official 376:cb4d9db17537 596 /* Transfer error callback */
mbed_official 376:cb4d9db17537 597 hdma->XferErrorCallback(hdma);
mbed_official 376:cb4d9db17537 598 }
mbed_official 376:cb4d9db17537 599 }
mbed_official 376:cb4d9db17537 600 }
mbed_official 376:cb4d9db17537 601
mbed_official 376:cb4d9db17537 602 /* Half Transfer Complete Interrupt management ******************************/
mbed_official 376:cb4d9db17537 603 if(__HAL_DMA_GET_FLAG(hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma)) != RESET)
mbed_official 376:cb4d9db17537 604 {
mbed_official 376:cb4d9db17537 605 if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_HT) != RESET)
mbed_official 376:cb4d9db17537 606 {
mbed_official 376:cb4d9db17537 607 /* Disable the half transfer interrupt if the DMA mode is not CIRCULAR */
mbed_official 376:cb4d9db17537 608 if((hdma->Instance->CCR & DMA_CCR_CIRC) == 0)
mbed_official 376:cb4d9db17537 609 {
mbed_official 376:cb4d9db17537 610 /* Disable the half transfer interrupt */
mbed_official 376:cb4d9db17537 611 __HAL_DMA_DISABLE_IT(hdma, DMA_IT_HT);
mbed_official 376:cb4d9db17537 612 }
mbed_official 376:cb4d9db17537 613 /* Clear the half transfer complete flag */
mbed_official 376:cb4d9db17537 614 __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma));
mbed_official 376:cb4d9db17537 615
mbed_official 376:cb4d9db17537 616 /* Change DMA peripheral state */
mbed_official 376:cb4d9db17537 617 hdma->State = HAL_DMA_STATE_READY_HALF;
mbed_official 376:cb4d9db17537 618
mbed_official 376:cb4d9db17537 619 if(hdma->XferHalfCpltCallback != NULL)
mbed_official 376:cb4d9db17537 620 {
mbed_official 376:cb4d9db17537 621 /* Half transfer callback */
mbed_official 376:cb4d9db17537 622 hdma->XferHalfCpltCallback(hdma);
mbed_official 376:cb4d9db17537 623 }
mbed_official 376:cb4d9db17537 624 }
mbed_official 376:cb4d9db17537 625 }
mbed_official 376:cb4d9db17537 626
mbed_official 376:cb4d9db17537 627 /* Transfer Complete Interrupt management ***********************************/
mbed_official 376:cb4d9db17537 628 if(__HAL_DMA_GET_FLAG(hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma)) != RESET)
mbed_official 376:cb4d9db17537 629 {
mbed_official 376:cb4d9db17537 630 if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TC) != RESET)
mbed_official 376:cb4d9db17537 631 {
mbed_official 376:cb4d9db17537 632 if((hdma->Instance->CCR & DMA_CCR_CIRC) == 0)
mbed_official 376:cb4d9db17537 633 {
mbed_official 376:cb4d9db17537 634 /* Disable the transfer complete interrupt */
mbed_official 376:cb4d9db17537 635 __HAL_DMA_DISABLE_IT(hdma, DMA_IT_TC);
mbed_official 376:cb4d9db17537 636 }
mbed_official 376:cb4d9db17537 637 /* Clear the transfer complete flag */
mbed_official 376:cb4d9db17537 638 __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma));
mbed_official 376:cb4d9db17537 639
mbed_official 376:cb4d9db17537 640 /* Update error code */
mbed_official 376:cb4d9db17537 641 hdma->ErrorCode |= HAL_DMA_ERROR_NONE;
mbed_official 376:cb4d9db17537 642
mbed_official 376:cb4d9db17537 643 /* Change the DMA state */
mbed_official 376:cb4d9db17537 644 hdma->State = HAL_DMA_STATE_READY;
mbed_official 376:cb4d9db17537 645
mbed_official 376:cb4d9db17537 646 /* Process Unlocked */
mbed_official 376:cb4d9db17537 647 __HAL_UNLOCK(hdma);
mbed_official 376:cb4d9db17537 648
mbed_official 376:cb4d9db17537 649 if(hdma->XferCpltCallback != NULL)
mbed_official 376:cb4d9db17537 650 {
mbed_official 376:cb4d9db17537 651 /* Transfer complete callback */
mbed_official 376:cb4d9db17537 652 hdma->XferCpltCallback(hdma);
mbed_official 376:cb4d9db17537 653 }
mbed_official 376:cb4d9db17537 654 }
mbed_official 376:cb4d9db17537 655 }
mbed_official 376:cb4d9db17537 656 }
mbed_official 376:cb4d9db17537 657
mbed_official 376:cb4d9db17537 658 /**
mbed_official 376:cb4d9db17537 659 * @}
mbed_official 376:cb4d9db17537 660 */
mbed_official 376:cb4d9db17537 661
mbed_official 376:cb4d9db17537 662 /** @defgroup DMA_Group3 Peripheral State functions
mbed_official 376:cb4d9db17537 663 * @brief Peripheral State functions
mbed_official 376:cb4d9db17537 664 *
mbed_official 376:cb4d9db17537 665 @verbatim
mbed_official 376:cb4d9db17537 666 ===============================================================================
mbed_official 376:cb4d9db17537 667 ##### Peripheral State functions #####
mbed_official 376:cb4d9db17537 668 ===============================================================================
mbed_official 376:cb4d9db17537 669 [..]
mbed_official 376:cb4d9db17537 670 This subsection provides functions allowing to
mbed_official 376:cb4d9db17537 671 (+) Check the DMA state
mbed_official 376:cb4d9db17537 672 (+) Get error code
mbed_official 376:cb4d9db17537 673
mbed_official 376:cb4d9db17537 674 @endverbatim
mbed_official 376:cb4d9db17537 675 * @{
mbed_official 376:cb4d9db17537 676 */
mbed_official 376:cb4d9db17537 677
mbed_official 376:cb4d9db17537 678 /**
mbed_official 376:cb4d9db17537 679 * @brief Returns the DMA state.
mbed_official 376:cb4d9db17537 680 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 376:cb4d9db17537 681 * the configuration information for the specified DMA Channel.
mbed_official 376:cb4d9db17537 682 * @retval HAL state
mbed_official 376:cb4d9db17537 683 */
mbed_official 376:cb4d9db17537 684 HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma)
mbed_official 376:cb4d9db17537 685 {
mbed_official 376:cb4d9db17537 686 return hdma->State;
mbed_official 376:cb4d9db17537 687 }
mbed_official 376:cb4d9db17537 688
mbed_official 376:cb4d9db17537 689 /**
mbed_official 376:cb4d9db17537 690 * @brief Return the DMA error code
mbed_official 376:cb4d9db17537 691 * @param hdma : pointer to a DMA_HandleTypeDef structure that contains
mbed_official 376:cb4d9db17537 692 * the configuration information for the specified DMA Channel.
mbed_official 376:cb4d9db17537 693 * @retval DMA Error Code
mbed_official 376:cb4d9db17537 694 */
mbed_official 376:cb4d9db17537 695 uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma)
mbed_official 376:cb4d9db17537 696 {
mbed_official 376:cb4d9db17537 697 return hdma->ErrorCode;
mbed_official 376:cb4d9db17537 698 }
mbed_official 376:cb4d9db17537 699
mbed_official 376:cb4d9db17537 700 /**
mbed_official 376:cb4d9db17537 701 * @}
mbed_official 376:cb4d9db17537 702 */
mbed_official 376:cb4d9db17537 703
mbed_official 376:cb4d9db17537 704 /**
mbed_official 376:cb4d9db17537 705 * @brief Sets the DMA Transfer parameter.
mbed_official 376:cb4d9db17537 706 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 376:cb4d9db17537 707 * the configuration information for the specified DMA Channel.
mbed_official 376:cb4d9db17537 708 * @param SrcAddress: The source memory Buffer address
mbed_official 376:cb4d9db17537 709 * @param DstAddress: The destination memory Buffer address
mbed_official 376:cb4d9db17537 710 * @param DataLength: The length of data to be transferred from source to destination
mbed_official 376:cb4d9db17537 711 * @retval HAL status
mbed_official 376:cb4d9db17537 712 */
mbed_official 376:cb4d9db17537 713 static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
mbed_official 376:cb4d9db17537 714 {
mbed_official 376:cb4d9db17537 715 /* Configure DMA Channel data length */
mbed_official 376:cb4d9db17537 716 hdma->Instance->CNDTR = DataLength;
mbed_official 376:cb4d9db17537 717
mbed_official 376:cb4d9db17537 718 /* Peripheral to Memory */
mbed_official 376:cb4d9db17537 719 if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH)
mbed_official 376:cb4d9db17537 720 {
mbed_official 376:cb4d9db17537 721 /* Configure DMA Channel destination address */
mbed_official 376:cb4d9db17537 722 hdma->Instance->CPAR = DstAddress;
mbed_official 376:cb4d9db17537 723
mbed_official 376:cb4d9db17537 724 /* Configure DMA Channel source address */
mbed_official 376:cb4d9db17537 725 hdma->Instance->CMAR = SrcAddress;
mbed_official 376:cb4d9db17537 726 }
mbed_official 376:cb4d9db17537 727 /* Memory to Peripheral */
mbed_official 376:cb4d9db17537 728 else
mbed_official 376:cb4d9db17537 729 {
mbed_official 376:cb4d9db17537 730 /* Configure DMA Channel source address */
mbed_official 376:cb4d9db17537 731 hdma->Instance->CPAR = SrcAddress;
mbed_official 376:cb4d9db17537 732
mbed_official 376:cb4d9db17537 733 /* Configure DMA Channel destination address */
mbed_official 376:cb4d9db17537 734 hdma->Instance->CMAR = DstAddress;
mbed_official 376:cb4d9db17537 735 }
mbed_official 376:cb4d9db17537 736 }
mbed_official 376:cb4d9db17537 737
mbed_official 376:cb4d9db17537 738 /**
mbed_official 376:cb4d9db17537 739 * @}
mbed_official 376:cb4d9db17537 740 */
mbed_official 376:cb4d9db17537 741
mbed_official 376:cb4d9db17537 742 #endif /* HAL_DMA_MODULE_ENABLED */
mbed_official 376:cb4d9db17537 743 /**
mbed_official 376:cb4d9db17537 744 * @}
mbed_official 376:cb4d9db17537 745 */
mbed_official 376:cb4d9db17537 746
mbed_official 376:cb4d9db17537 747 /**
mbed_official 376:cb4d9db17537 748 * @}
mbed_official 376:cb4d9db17537 749 */
mbed_official 376:cb4d9db17537 750
mbed_official 376:cb4d9db17537 751 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/