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 Sep 28 20:15:09 2015 +0100
Revision:
634:ac7d6880524d
Parent:
632:7687fb9c4f91
Synchronized with git revision 9b7d23d47153c298a6d24de9a415202705889d11

Full URL: https://github.com/mbedmicro/mbed/commit/9b7d23d47153c298a6d24de9a415202705889d11/

Revert "[NUCLEO_F303K8] add support of the STM32F303K8"

Who changed what in which revision?

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