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:
Fri Aug 14 13:15:17 2015 +0100
Revision:
610:813dcc80987e
Parent:
573:ad23fe03a082
Synchronized with git revision 6d84db41c6833e0b9b024741eb0616a5f62d5599

Full URL: https://github.com/mbedmicro/mbed/commit/6d84db41c6833e0b9b024741eb0616a5f62d5599/

DISCO_F746NG - Improvements

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 573:ad23fe03a082 1 /**
mbed_official 573:ad23fe03a082 2 ******************************************************************************
mbed_official 573:ad23fe03a082 3 * @file stm32f7xx_hal_dcmi.c
mbed_official 573:ad23fe03a082 4 * @author MCD Application Team
mbed_official 610:813dcc80987e 5 * @version V1.0.1
mbed_official 610:813dcc80987e 6 * @date 25-June-2015
mbed_official 573:ad23fe03a082 7 * @brief DCMI HAL module driver
mbed_official 573:ad23fe03a082 8 * This file provides firmware functions to manage the following
mbed_official 573:ad23fe03a082 9 * functionalities of the Digital Camera Interface (DCMI) peripheral:
mbed_official 573:ad23fe03a082 10 * + Initialization and de-initialization functions
mbed_official 573:ad23fe03a082 11 * + IO operation functions
mbed_official 573:ad23fe03a082 12 * + Peripheral Control functions
mbed_official 573:ad23fe03a082 13 * + Peripheral State and Error functions
mbed_official 573:ad23fe03a082 14 *
mbed_official 573:ad23fe03a082 15 @verbatim
mbed_official 573:ad23fe03a082 16 ==============================================================================
mbed_official 573:ad23fe03a082 17 ##### How to use this driver #####
mbed_official 573:ad23fe03a082 18 ==============================================================================
mbed_official 573:ad23fe03a082 19 [..]
mbed_official 573:ad23fe03a082 20 The sequence below describes how to use this driver to capture image
mbed_official 573:ad23fe03a082 21 from a camera module connected to the DCMI Interface.
mbed_official 573:ad23fe03a082 22 This sequence does not take into account the configuration of the
mbed_official 573:ad23fe03a082 23 camera module, which should be made before to configure and enable
mbed_official 573:ad23fe03a082 24 the DCMI to capture images.
mbed_official 573:ad23fe03a082 25
mbed_official 573:ad23fe03a082 26 (#) Program the required configuration through following parameters:
mbed_official 573:ad23fe03a082 27 horizontal and vertical polarity, pixel clock polarity, Capture Rate,
mbed_official 573:ad23fe03a082 28 Synchronization Mode, code of the frame delimiter and data width
mbed_official 573:ad23fe03a082 29 using HAL_DCMI_Init() function.
mbed_official 573:ad23fe03a082 30
mbed_official 573:ad23fe03a082 31 (#) Configure the DMA2_Stream1 channel1 to transfer Data from DCMI DR
mbed_official 573:ad23fe03a082 32 register to the destination memory buffer.
mbed_official 573:ad23fe03a082 33
mbed_official 573:ad23fe03a082 34 (#) Program the required configuration through following parameters:
mbed_official 573:ad23fe03a082 35 DCMI mode, destination memory Buffer address and the data length
mbed_official 573:ad23fe03a082 36 and enable capture using HAL_DCMI_Start_DMA() function.
mbed_official 573:ad23fe03a082 37
mbed_official 573:ad23fe03a082 38 (#) Optionally, configure and Enable the CROP feature to select a rectangular
mbed_official 573:ad23fe03a082 39 window from the received image using HAL_DCMI_ConfigCrop()
mbed_official 573:ad23fe03a082 40 and HAL_DCMI_EnableCROP() functions
mbed_official 573:ad23fe03a082 41
mbed_official 573:ad23fe03a082 42 (#) The capture can be stopped using HAL_DCMI_Stop() function.
mbed_official 573:ad23fe03a082 43
mbed_official 573:ad23fe03a082 44 (#) To control DCMI state you can use the function HAL_DCMI_GetState().
mbed_official 573:ad23fe03a082 45
mbed_official 573:ad23fe03a082 46 *** DCMI HAL driver macros list ***
mbed_official 573:ad23fe03a082 47 =============================================
mbed_official 573:ad23fe03a082 48 [..]
mbed_official 573:ad23fe03a082 49 Below the list of most used macros in DCMI HAL driver.
mbed_official 573:ad23fe03a082 50
mbed_official 573:ad23fe03a082 51 (+) __HAL_DCMI_ENABLE: Enable the DCMI peripheral.
mbed_official 573:ad23fe03a082 52 (+) __HAL_DCMI_DISABLE: Disable the DCMI peripheral.
mbed_official 573:ad23fe03a082 53 (+) __HAL_DCMI_GET_FLAG: Get the DCMI pending flags.
mbed_official 573:ad23fe03a082 54 (+) __HAL_DCMI_CLEAR_FLAG: Clear the DCMI pending flags.
mbed_official 573:ad23fe03a082 55 (+) __HAL_DCMI_ENABLE_IT: Enable the specified DCMI interrupts.
mbed_official 573:ad23fe03a082 56 (+) __HAL_DCMI_DISABLE_IT: Disable the specified DCMI interrupts.
mbed_official 573:ad23fe03a082 57 (+) __HAL_DCMI_GET_IT_SOURCE: Check whether the specified DCMI interrupt has occurred or not.
mbed_official 573:ad23fe03a082 58
mbed_official 573:ad23fe03a082 59 [..]
mbed_official 573:ad23fe03a082 60 (@) You can refer to the DCMI HAL driver header file for more useful macros
mbed_official 573:ad23fe03a082 61
mbed_official 573:ad23fe03a082 62 @endverbatim
mbed_official 573:ad23fe03a082 63 ******************************************************************************
mbed_official 573:ad23fe03a082 64 * @attention
mbed_official 573:ad23fe03a082 65 *
mbed_official 573:ad23fe03a082 66 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
mbed_official 573:ad23fe03a082 67 *
mbed_official 573:ad23fe03a082 68 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 573:ad23fe03a082 69 * are permitted provided that the following conditions are met:
mbed_official 573:ad23fe03a082 70 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 573:ad23fe03a082 71 * this list of conditions and the following disclaimer.
mbed_official 573:ad23fe03a082 72 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 573:ad23fe03a082 73 * this list of conditions and the following disclaimer in the documentation
mbed_official 573:ad23fe03a082 74 * and/or other materials provided with the distribution.
mbed_official 573:ad23fe03a082 75 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 573:ad23fe03a082 76 * may be used to endorse or promote products derived from this software
mbed_official 573:ad23fe03a082 77 * without specific prior written permission.
mbed_official 573:ad23fe03a082 78 *
mbed_official 573:ad23fe03a082 79 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 573:ad23fe03a082 80 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 573:ad23fe03a082 81 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 573:ad23fe03a082 82 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 573:ad23fe03a082 83 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 573:ad23fe03a082 84 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 573:ad23fe03a082 85 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 573:ad23fe03a082 86 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 573:ad23fe03a082 87 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 573:ad23fe03a082 88 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 573:ad23fe03a082 89 *
mbed_official 573:ad23fe03a082 90 ******************************************************************************
mbed_official 573:ad23fe03a082 91 */
mbed_official 573:ad23fe03a082 92
mbed_official 573:ad23fe03a082 93 /* Includes ------------------------------------------------------------------*/
mbed_official 573:ad23fe03a082 94 #include "stm32f7xx_hal.h"
mbed_official 573:ad23fe03a082 95
mbed_official 573:ad23fe03a082 96 /** @addtogroup STM32F7xx_HAL_Driver
mbed_official 573:ad23fe03a082 97 * @{
mbed_official 573:ad23fe03a082 98 */
mbed_official 573:ad23fe03a082 99 /** @defgroup DCMI DCMI
mbed_official 573:ad23fe03a082 100 * @brief DCMI HAL module driver
mbed_official 573:ad23fe03a082 101 * @{
mbed_official 573:ad23fe03a082 102 */
mbed_official 573:ad23fe03a082 103
mbed_official 573:ad23fe03a082 104 #ifdef HAL_DCMI_MODULE_ENABLED
mbed_official 573:ad23fe03a082 105
mbed_official 573:ad23fe03a082 106 /* Private typedef -----------------------------------------------------------*/
mbed_official 573:ad23fe03a082 107 /* Private define ------------------------------------------------------------*/
mbed_official 573:ad23fe03a082 108 #define HAL_TIMEOUT_DCMI_STOP ((uint32_t)1000) /* 1s */
mbed_official 573:ad23fe03a082 109 /* Private macro -------------------------------------------------------------*/
mbed_official 573:ad23fe03a082 110 /* Private variables ---------------------------------------------------------*/
mbed_official 573:ad23fe03a082 111 /* Private function prototypes -----------------------------------------------*/
mbed_official 573:ad23fe03a082 112 static void DCMI_DMAConvCplt(DMA_HandleTypeDef *hdma);
mbed_official 573:ad23fe03a082 113 static void DCMI_DMAError(DMA_HandleTypeDef *hdma);
mbed_official 573:ad23fe03a082 114
mbed_official 573:ad23fe03a082 115 /* Exported functions --------------------------------------------------------*/
mbed_official 573:ad23fe03a082 116
mbed_official 573:ad23fe03a082 117 /** @defgroup DCMI_Exported_Functions DCMI Exported Functions
mbed_official 573:ad23fe03a082 118 * @{
mbed_official 573:ad23fe03a082 119 */
mbed_official 573:ad23fe03a082 120
mbed_official 573:ad23fe03a082 121 /** @defgroup DCMI_Exported_Functions_Group1 Initialization and Configuration functions
mbed_official 573:ad23fe03a082 122 * @brief Initialization and Configuration functions
mbed_official 573:ad23fe03a082 123 *
mbed_official 573:ad23fe03a082 124 @verbatim
mbed_official 573:ad23fe03a082 125 ===============================================================================
mbed_official 573:ad23fe03a082 126 ##### Initialization and Configuration functions #####
mbed_official 573:ad23fe03a082 127 ===============================================================================
mbed_official 573:ad23fe03a082 128 [..] This section provides functions allowing to:
mbed_official 573:ad23fe03a082 129 (+) Initialize and configure the DCMI
mbed_official 573:ad23fe03a082 130 (+) De-initialize the DCMI
mbed_official 573:ad23fe03a082 131
mbed_official 573:ad23fe03a082 132 @endverbatim
mbed_official 573:ad23fe03a082 133 * @{
mbed_official 573:ad23fe03a082 134 */
mbed_official 573:ad23fe03a082 135
mbed_official 573:ad23fe03a082 136 /**
mbed_official 573:ad23fe03a082 137 * @brief Initializes the DCMI according to the specified
mbed_official 573:ad23fe03a082 138 * parameters in the DCMI_InitTypeDef and create the associated handle.
mbed_official 573:ad23fe03a082 139 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 140 * the configuration information for DCMI.
mbed_official 573:ad23fe03a082 141 * @retval HAL status
mbed_official 573:ad23fe03a082 142 */
mbed_official 573:ad23fe03a082 143 __weak HAL_StatusTypeDef HAL_DCMI_Init(DCMI_HandleTypeDef *hdcmi)
mbed_official 573:ad23fe03a082 144 {
mbed_official 573:ad23fe03a082 145 /* Check the DCMI peripheral state */
mbed_official 573:ad23fe03a082 146 if(hdcmi == NULL)
mbed_official 573:ad23fe03a082 147 {
mbed_official 573:ad23fe03a082 148 return HAL_ERROR;
mbed_official 573:ad23fe03a082 149 }
mbed_official 573:ad23fe03a082 150
mbed_official 573:ad23fe03a082 151 /* Check function parameters */
mbed_official 573:ad23fe03a082 152 assert_param(IS_DCMI_ALL_INSTANCE(hdcmi->Instance));
mbed_official 573:ad23fe03a082 153 assert_param(IS_DCMI_SYNCHRO(hdcmi->Init.SynchroMode));
mbed_official 573:ad23fe03a082 154 assert_param(IS_DCMI_PCKPOLARITY(hdcmi->Init.PCKPolarity));
mbed_official 573:ad23fe03a082 155 assert_param(IS_DCMI_VSPOLARITY(hdcmi->Init.VSPolarity));
mbed_official 573:ad23fe03a082 156 assert_param(IS_DCMI_HSPOLARITY(hdcmi->Init.HSPolarity));
mbed_official 573:ad23fe03a082 157 assert_param(IS_DCMI_CAPTURE_RATE(hdcmi->Init.CaptureRate));
mbed_official 573:ad23fe03a082 158 assert_param(IS_DCMI_EXTENDED_DATA(hdcmi->Init.ExtendedDataMode));
mbed_official 573:ad23fe03a082 159 assert_param(IS_DCMI_MODE_JPEG(hdcmi->Init.JPEGMode));
mbed_official 573:ad23fe03a082 160
mbed_official 573:ad23fe03a082 161 if(hdcmi->State == HAL_DCMI_STATE_RESET)
mbed_official 573:ad23fe03a082 162 {
mbed_official 573:ad23fe03a082 163 /* Allocate lock resource and initialize it */
mbed_official 573:ad23fe03a082 164 hdcmi->Lock = HAL_UNLOCKED;
mbed_official 573:ad23fe03a082 165 /* Init the low level hardware */
mbed_official 573:ad23fe03a082 166 HAL_DCMI_MspInit(hdcmi);
mbed_official 573:ad23fe03a082 167 }
mbed_official 573:ad23fe03a082 168
mbed_official 573:ad23fe03a082 169 /* Change the DCMI state */
mbed_official 573:ad23fe03a082 170 hdcmi->State = HAL_DCMI_STATE_BUSY;
mbed_official 573:ad23fe03a082 171
mbed_official 573:ad23fe03a082 172 /* Set DCMI parameters */
mbed_official 573:ad23fe03a082 173 /* Configures the HS, VS, DE and PC polarity */
mbed_official 573:ad23fe03a082 174 hdcmi->Instance->CR &= ~(DCMI_CR_PCKPOL | DCMI_CR_HSPOL | DCMI_CR_VSPOL | DCMI_CR_EDM_0 |
mbed_official 573:ad23fe03a082 175 DCMI_CR_EDM_1 | DCMI_CR_FCRC_0 | DCMI_CR_FCRC_1 | DCMI_CR_JPEG |
mbed_official 573:ad23fe03a082 176 DCMI_CR_ESS);
mbed_official 573:ad23fe03a082 177 hdcmi->Instance->CR |= (uint32_t)(hdcmi->Init.SynchroMode | hdcmi->Init.CaptureRate | \
mbed_official 573:ad23fe03a082 178 hdcmi->Init.VSPolarity | hdcmi->Init.HSPolarity | \
mbed_official 573:ad23fe03a082 179 hdcmi->Init.PCKPolarity | hdcmi->Init.ExtendedDataMode | \
mbed_official 573:ad23fe03a082 180 hdcmi->Init.JPEGMode);
mbed_official 573:ad23fe03a082 181
mbed_official 573:ad23fe03a082 182 if(hdcmi->Init.SynchroMode == DCMI_SYNCHRO_EMBEDDED)
mbed_official 573:ad23fe03a082 183 {
mbed_official 573:ad23fe03a082 184 DCMI->ESCR = (((uint32_t)hdcmi->Init.SyncroCode.FrameStartCode) |
mbed_official 573:ad23fe03a082 185 ((uint32_t)hdcmi->Init.SyncroCode.LineStartCode << 8)|
mbed_official 573:ad23fe03a082 186 ((uint32_t)hdcmi->Init.SyncroCode.LineEndCode << 16) |
mbed_official 573:ad23fe03a082 187 ((uint32_t)hdcmi->Init.SyncroCode.FrameEndCode << 24));
mbed_official 573:ad23fe03a082 188 }
mbed_official 573:ad23fe03a082 189
mbed_official 573:ad23fe03a082 190 /* Enable the Line interrupt */
mbed_official 573:ad23fe03a082 191 __HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_LINE);
mbed_official 573:ad23fe03a082 192
mbed_official 573:ad23fe03a082 193 /* Enable the VSYNC interrupt */
mbed_official 573:ad23fe03a082 194 __HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_VSYNC);
mbed_official 573:ad23fe03a082 195
mbed_official 573:ad23fe03a082 196 /* Enable the Frame capture complete interrupt */
mbed_official 573:ad23fe03a082 197 __HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_FRAME);
mbed_official 573:ad23fe03a082 198
mbed_official 573:ad23fe03a082 199 /* Enable the Synchronization error interrupt */
mbed_official 573:ad23fe03a082 200 __HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_ERR);
mbed_official 573:ad23fe03a082 201
mbed_official 573:ad23fe03a082 202 /* Enable the Overflow interrupt */
mbed_official 573:ad23fe03a082 203 __HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_OVF);
mbed_official 573:ad23fe03a082 204
mbed_official 573:ad23fe03a082 205 /* Enable DCMI by setting DCMIEN bit */
mbed_official 573:ad23fe03a082 206 __HAL_DCMI_ENABLE(hdcmi);
mbed_official 573:ad23fe03a082 207
mbed_official 573:ad23fe03a082 208 /* Update error code */
mbed_official 573:ad23fe03a082 209 hdcmi->ErrorCode = HAL_DCMI_ERROR_NONE;
mbed_official 573:ad23fe03a082 210
mbed_official 573:ad23fe03a082 211 /* Initialize the DCMI state*/
mbed_official 573:ad23fe03a082 212 hdcmi->State = HAL_DCMI_STATE_READY;
mbed_official 573:ad23fe03a082 213
mbed_official 573:ad23fe03a082 214 return HAL_OK;
mbed_official 573:ad23fe03a082 215 }
mbed_official 573:ad23fe03a082 216
mbed_official 573:ad23fe03a082 217 /**
mbed_official 573:ad23fe03a082 218 * @brief Deinitializes the DCMI peripheral registers to their default reset
mbed_official 573:ad23fe03a082 219 * values.
mbed_official 573:ad23fe03a082 220 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 221 * the configuration information for DCMI.
mbed_official 573:ad23fe03a082 222 * @retval HAL status
mbed_official 573:ad23fe03a082 223 */
mbed_official 573:ad23fe03a082 224
mbed_official 573:ad23fe03a082 225 HAL_StatusTypeDef HAL_DCMI_DeInit(DCMI_HandleTypeDef *hdcmi)
mbed_official 573:ad23fe03a082 226 {
mbed_official 573:ad23fe03a082 227 /* DeInit the low level hardware */
mbed_official 573:ad23fe03a082 228 HAL_DCMI_MspDeInit(hdcmi);
mbed_official 573:ad23fe03a082 229
mbed_official 573:ad23fe03a082 230 /* Update error code */
mbed_official 573:ad23fe03a082 231 hdcmi->ErrorCode = HAL_DCMI_ERROR_NONE;
mbed_official 573:ad23fe03a082 232
mbed_official 573:ad23fe03a082 233 /* Initialize the DCMI state*/
mbed_official 573:ad23fe03a082 234 hdcmi->State = HAL_DCMI_STATE_RESET;
mbed_official 573:ad23fe03a082 235
mbed_official 573:ad23fe03a082 236 /* Release Lock */
mbed_official 573:ad23fe03a082 237 __HAL_UNLOCK(hdcmi);
mbed_official 573:ad23fe03a082 238
mbed_official 573:ad23fe03a082 239 return HAL_OK;
mbed_official 573:ad23fe03a082 240 }
mbed_official 573:ad23fe03a082 241
mbed_official 573:ad23fe03a082 242 /**
mbed_official 573:ad23fe03a082 243 * @brief Initializes the DCMI MSP.
mbed_official 573:ad23fe03a082 244 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 245 * the configuration information for DCMI.
mbed_official 573:ad23fe03a082 246 * @retval None
mbed_official 573:ad23fe03a082 247 */
mbed_official 573:ad23fe03a082 248 __weak void HAL_DCMI_MspInit(DCMI_HandleTypeDef* hdcmi)
mbed_official 573:ad23fe03a082 249 {
mbed_official 573:ad23fe03a082 250 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 573:ad23fe03a082 251 the HAL_DCMI_MspInit could be implemented in the user file
mbed_official 573:ad23fe03a082 252 */
mbed_official 573:ad23fe03a082 253 }
mbed_official 573:ad23fe03a082 254
mbed_official 573:ad23fe03a082 255 /**
mbed_official 573:ad23fe03a082 256 * @brief DeInitializes the DCMI MSP.
mbed_official 573:ad23fe03a082 257 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 258 * the configuration information for DCMI.
mbed_official 573:ad23fe03a082 259 * @retval None
mbed_official 573:ad23fe03a082 260 */
mbed_official 573:ad23fe03a082 261 __weak void HAL_DCMI_MspDeInit(DCMI_HandleTypeDef* hdcmi)
mbed_official 573:ad23fe03a082 262 {
mbed_official 573:ad23fe03a082 263 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 573:ad23fe03a082 264 the HAL_DCMI_MspDeInit could be implemented in the user file
mbed_official 573:ad23fe03a082 265 */
mbed_official 573:ad23fe03a082 266 }
mbed_official 573:ad23fe03a082 267
mbed_official 573:ad23fe03a082 268 /**
mbed_official 573:ad23fe03a082 269 * @}
mbed_official 573:ad23fe03a082 270 */
mbed_official 573:ad23fe03a082 271 /** @defgroup DCMI_Exported_Functions_Group2 IO operation functions
mbed_official 573:ad23fe03a082 272 * @brief IO operation functions
mbed_official 573:ad23fe03a082 273 *
mbed_official 573:ad23fe03a082 274 @verbatim
mbed_official 573:ad23fe03a082 275 ===============================================================================
mbed_official 573:ad23fe03a082 276 ##### IO operation functions #####
mbed_official 573:ad23fe03a082 277 ===============================================================================
mbed_official 573:ad23fe03a082 278 [..] This section provides functions allowing to:
mbed_official 573:ad23fe03a082 279 (+) Configure destination address and data length and
mbed_official 573:ad23fe03a082 280 Enables DCMI DMA request and enables DCMI capture
mbed_official 573:ad23fe03a082 281 (+) Stop the DCMI capture.
mbed_official 573:ad23fe03a082 282 (+) Handles DCMI interrupt request.
mbed_official 573:ad23fe03a082 283
mbed_official 573:ad23fe03a082 284 @endverbatim
mbed_official 573:ad23fe03a082 285 * @{
mbed_official 573:ad23fe03a082 286 */
mbed_official 573:ad23fe03a082 287
mbed_official 573:ad23fe03a082 288 /**
mbed_official 573:ad23fe03a082 289 * @brief Enables DCMI DMA request and enables DCMI capture
mbed_official 573:ad23fe03a082 290 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 291 * the configuration information for DCMI.
mbed_official 573:ad23fe03a082 292 * @param DCMI_Mode: DCMI capture mode snapshot or continuous grab.
mbed_official 573:ad23fe03a082 293 * @param pData: The destination memory Buffer address (LCD Frame buffer).
mbed_official 573:ad23fe03a082 294 * @param Length: The length of capture to be transferred.
mbed_official 573:ad23fe03a082 295 * @retval HAL status
mbed_official 573:ad23fe03a082 296 */
mbed_official 573:ad23fe03a082 297 HAL_StatusTypeDef HAL_DCMI_Start_DMA(DCMI_HandleTypeDef* hdcmi, uint32_t DCMI_Mode, uint32_t pData, uint32_t Length)
mbed_official 573:ad23fe03a082 298 {
mbed_official 573:ad23fe03a082 299 /* Initialize the second memory address */
mbed_official 573:ad23fe03a082 300 uint32_t SecondMemAddress = 0;
mbed_official 573:ad23fe03a082 301
mbed_official 573:ad23fe03a082 302 /* Check function parameters */
mbed_official 573:ad23fe03a082 303 assert_param(IS_DCMI_CAPTURE_MODE(DCMI_Mode));
mbed_official 573:ad23fe03a082 304
mbed_official 573:ad23fe03a082 305 /* Process Locked */
mbed_official 573:ad23fe03a082 306 __HAL_LOCK(hdcmi);
mbed_official 573:ad23fe03a082 307
mbed_official 573:ad23fe03a082 308 /* Lock the DCMI peripheral state */
mbed_official 573:ad23fe03a082 309 hdcmi->State = HAL_DCMI_STATE_BUSY;
mbed_official 573:ad23fe03a082 310
mbed_official 573:ad23fe03a082 311 /* Check the parameters */
mbed_official 573:ad23fe03a082 312 assert_param(IS_DCMI_CAPTURE_MODE(DCMI_Mode));
mbed_official 573:ad23fe03a082 313
mbed_official 573:ad23fe03a082 314 /* Configure the DCMI Mode */
mbed_official 573:ad23fe03a082 315 hdcmi->Instance->CR &= ~(DCMI_CR_CM);
mbed_official 573:ad23fe03a082 316 hdcmi->Instance->CR |= (uint32_t)(DCMI_Mode);
mbed_official 573:ad23fe03a082 317
mbed_official 573:ad23fe03a082 318 /* Set the DMA memory0 conversion complete callback */
mbed_official 573:ad23fe03a082 319 hdcmi->DMA_Handle->XferCpltCallback = DCMI_DMAConvCplt;
mbed_official 573:ad23fe03a082 320
mbed_official 573:ad23fe03a082 321 /* Set the DMA error callback */
mbed_official 573:ad23fe03a082 322 hdcmi->DMA_Handle->XferErrorCallback = DCMI_DMAError;
mbed_official 573:ad23fe03a082 323
mbed_official 573:ad23fe03a082 324 if(Length <= 0xFFFF)
mbed_official 573:ad23fe03a082 325 {
mbed_official 573:ad23fe03a082 326 /* Enable the DMA Stream */
mbed_official 573:ad23fe03a082 327 HAL_DMA_Start_IT(hdcmi->DMA_Handle, (uint32_t)&hdcmi->Instance->DR, (uint32_t)pData, Length);
mbed_official 573:ad23fe03a082 328 }
mbed_official 573:ad23fe03a082 329 else /* DCMI_DOUBLE_BUFFER Mode */
mbed_official 573:ad23fe03a082 330 {
mbed_official 573:ad23fe03a082 331 /* Set the DMA memory1 conversion complete callback */
mbed_official 573:ad23fe03a082 332 hdcmi->DMA_Handle->XferM1CpltCallback = DCMI_DMAConvCplt;
mbed_official 573:ad23fe03a082 333
mbed_official 573:ad23fe03a082 334 /* Initialize transfer parameters */
mbed_official 573:ad23fe03a082 335 hdcmi->XferCount = 1;
mbed_official 573:ad23fe03a082 336 hdcmi->XferSize = Length;
mbed_official 573:ad23fe03a082 337 hdcmi->pBuffPtr = pData;
mbed_official 573:ad23fe03a082 338
mbed_official 573:ad23fe03a082 339 /* Get the number of buffer */
mbed_official 573:ad23fe03a082 340 while(hdcmi->XferSize > 0xFFFF)
mbed_official 573:ad23fe03a082 341 {
mbed_official 573:ad23fe03a082 342 hdcmi->XferSize = (hdcmi->XferSize/2);
mbed_official 573:ad23fe03a082 343 hdcmi->XferCount = hdcmi->XferCount*2;
mbed_official 573:ad23fe03a082 344 }
mbed_official 573:ad23fe03a082 345
mbed_official 573:ad23fe03a082 346 /* Update DCMI counter and transfer number*/
mbed_official 573:ad23fe03a082 347 hdcmi->XferCount = (hdcmi->XferCount - 2);
mbed_official 573:ad23fe03a082 348 hdcmi->XferTransferNumber = hdcmi->XferCount;
mbed_official 573:ad23fe03a082 349
mbed_official 573:ad23fe03a082 350 /* Update second memory address */
mbed_official 573:ad23fe03a082 351 SecondMemAddress = (uint32_t)(pData + (4*hdcmi->XferSize));
mbed_official 573:ad23fe03a082 352
mbed_official 573:ad23fe03a082 353 /* Start DMA multi buffer transfer */
mbed_official 573:ad23fe03a082 354 HAL_DMAEx_MultiBufferStart_IT(hdcmi->DMA_Handle, (uint32_t)&hdcmi->Instance->DR, (uint32_t)pData, SecondMemAddress, hdcmi->XferSize);
mbed_official 573:ad23fe03a082 355 }
mbed_official 573:ad23fe03a082 356
mbed_official 573:ad23fe03a082 357 /* Enable Capture */
mbed_official 573:ad23fe03a082 358 DCMI->CR |= DCMI_CR_CAPTURE;
mbed_official 573:ad23fe03a082 359
mbed_official 573:ad23fe03a082 360 /* Return function status */
mbed_official 573:ad23fe03a082 361 return HAL_OK;
mbed_official 573:ad23fe03a082 362 }
mbed_official 573:ad23fe03a082 363
mbed_official 573:ad23fe03a082 364 /**
mbed_official 573:ad23fe03a082 365 * @brief Disable DCMI DMA request and Disable DCMI capture
mbed_official 573:ad23fe03a082 366 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 367 * the configuration information for DCMI.
mbed_official 573:ad23fe03a082 368 * @retval HAL status
mbed_official 573:ad23fe03a082 369 */
mbed_official 573:ad23fe03a082 370 HAL_StatusTypeDef HAL_DCMI_Stop(DCMI_HandleTypeDef* hdcmi)
mbed_official 573:ad23fe03a082 371 {
mbed_official 573:ad23fe03a082 372 uint32_t tickstart = 0;
mbed_official 573:ad23fe03a082 373
mbed_official 573:ad23fe03a082 374 /* Lock the DCMI peripheral state */
mbed_official 573:ad23fe03a082 375 hdcmi->State = HAL_DCMI_STATE_BUSY;
mbed_official 573:ad23fe03a082 376
mbed_official 573:ad23fe03a082 377 __HAL_DCMI_DISABLE(hdcmi);
mbed_official 573:ad23fe03a082 378
mbed_official 573:ad23fe03a082 379 /* Disable Capture */
mbed_official 573:ad23fe03a082 380 DCMI->CR &= ~(DCMI_CR_CAPTURE);
mbed_official 573:ad23fe03a082 381
mbed_official 573:ad23fe03a082 382 /* Get tick */
mbed_official 573:ad23fe03a082 383 tickstart = HAL_GetTick();
mbed_official 573:ad23fe03a082 384
mbed_official 573:ad23fe03a082 385 /* Check if the DCMI capture effectively disabled */
mbed_official 573:ad23fe03a082 386 while((hdcmi->Instance->CR & DCMI_CR_CAPTURE) != 0)
mbed_official 573:ad23fe03a082 387 {
mbed_official 573:ad23fe03a082 388 if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DCMI_STOP)
mbed_official 573:ad23fe03a082 389 {
mbed_official 573:ad23fe03a082 390 /* Process Unlocked */
mbed_official 573:ad23fe03a082 391 __HAL_UNLOCK(hdcmi);
mbed_official 573:ad23fe03a082 392
mbed_official 573:ad23fe03a082 393 /* Update error code */
mbed_official 573:ad23fe03a082 394 hdcmi->ErrorCode |= HAL_DCMI_ERROR_TIMEOUT;
mbed_official 573:ad23fe03a082 395
mbed_official 573:ad23fe03a082 396 /* Change DCMI state */
mbed_official 573:ad23fe03a082 397 hdcmi->State = HAL_DCMI_STATE_TIMEOUT;
mbed_official 573:ad23fe03a082 398
mbed_official 573:ad23fe03a082 399 return HAL_TIMEOUT;
mbed_official 573:ad23fe03a082 400 }
mbed_official 573:ad23fe03a082 401 }
mbed_official 573:ad23fe03a082 402
mbed_official 573:ad23fe03a082 403 /* Disable the DMA */
mbed_official 573:ad23fe03a082 404 HAL_DMA_Abort(hdcmi->DMA_Handle);
mbed_official 573:ad23fe03a082 405
mbed_official 573:ad23fe03a082 406 /* Update error code */
mbed_official 573:ad23fe03a082 407 hdcmi->ErrorCode |= HAL_DCMI_ERROR_NONE;
mbed_official 573:ad23fe03a082 408
mbed_official 573:ad23fe03a082 409 /* Change DCMI state */
mbed_official 573:ad23fe03a082 410 hdcmi->State = HAL_DCMI_STATE_READY;
mbed_official 573:ad23fe03a082 411
mbed_official 573:ad23fe03a082 412 /* Process Unlocked */
mbed_official 573:ad23fe03a082 413 __HAL_UNLOCK(hdcmi);
mbed_official 573:ad23fe03a082 414
mbed_official 573:ad23fe03a082 415 /* Return function status */
mbed_official 573:ad23fe03a082 416 return HAL_OK;
mbed_official 573:ad23fe03a082 417 }
mbed_official 573:ad23fe03a082 418
mbed_official 573:ad23fe03a082 419 /**
mbed_official 573:ad23fe03a082 420 * @brief Handles DCMI interrupt request.
mbed_official 573:ad23fe03a082 421 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 422 * the configuration information for the DCMI.
mbed_official 573:ad23fe03a082 423 * @retval None
mbed_official 573:ad23fe03a082 424 */
mbed_official 573:ad23fe03a082 425 void HAL_DCMI_IRQHandler(DCMI_HandleTypeDef *hdcmi)
mbed_official 573:ad23fe03a082 426 {
mbed_official 573:ad23fe03a082 427 /* Synchronization error interrupt management *******************************/
mbed_official 573:ad23fe03a082 428 if(__HAL_DCMI_GET_FLAG(hdcmi, DCMI_FLAG_ERRRI) != RESET)
mbed_official 573:ad23fe03a082 429 {
mbed_official 573:ad23fe03a082 430 if(__HAL_DCMI_GET_IT_SOURCE(hdcmi, DCMI_IT_ERR) != RESET)
mbed_official 573:ad23fe03a082 431 {
mbed_official 573:ad23fe03a082 432 /* Disable the Synchronization error interrupt */
mbed_official 573:ad23fe03a082 433 __HAL_DCMI_DISABLE_IT(hdcmi, DCMI_IT_ERR);
mbed_official 573:ad23fe03a082 434
mbed_official 573:ad23fe03a082 435 /* Clear the Synchronization error flag */
mbed_official 573:ad23fe03a082 436 __HAL_DCMI_CLEAR_FLAG(hdcmi, DCMI_FLAG_ERRRI);
mbed_official 573:ad23fe03a082 437
mbed_official 573:ad23fe03a082 438 /* Update error code */
mbed_official 573:ad23fe03a082 439 hdcmi->ErrorCode |= HAL_DCMI_ERROR_SYNC;
mbed_official 573:ad23fe03a082 440
mbed_official 573:ad23fe03a082 441 /* Change DCMI state */
mbed_official 573:ad23fe03a082 442 hdcmi->State = HAL_DCMI_STATE_ERROR;
mbed_official 573:ad23fe03a082 443
mbed_official 573:ad23fe03a082 444 /* Process Unlocked */
mbed_official 573:ad23fe03a082 445 __HAL_UNLOCK(hdcmi);
mbed_official 573:ad23fe03a082 446
mbed_official 573:ad23fe03a082 447 /* Abort the DMA Transfer */
mbed_official 573:ad23fe03a082 448 HAL_DMA_Abort(hdcmi->DMA_Handle);
mbed_official 573:ad23fe03a082 449
mbed_official 573:ad23fe03a082 450 /* Synchronization error Callback */
mbed_official 573:ad23fe03a082 451 HAL_DCMI_ErrorCallback(hdcmi);
mbed_official 573:ad23fe03a082 452 }
mbed_official 573:ad23fe03a082 453 }
mbed_official 573:ad23fe03a082 454 /* Overflow interrupt management ********************************************/
mbed_official 573:ad23fe03a082 455 if(__HAL_DCMI_GET_FLAG(hdcmi, DCMI_FLAG_OVFRI) != RESET)
mbed_official 573:ad23fe03a082 456 {
mbed_official 573:ad23fe03a082 457 if(__HAL_DCMI_GET_IT_SOURCE(hdcmi, DCMI_IT_OVF) != RESET)
mbed_official 573:ad23fe03a082 458 {
mbed_official 573:ad23fe03a082 459 /* Disable the Overflow interrupt */
mbed_official 573:ad23fe03a082 460 __HAL_DCMI_DISABLE_IT(hdcmi, DCMI_IT_OVF);
mbed_official 573:ad23fe03a082 461
mbed_official 573:ad23fe03a082 462 /* Clear the Overflow flag */
mbed_official 573:ad23fe03a082 463 __HAL_DCMI_CLEAR_FLAG(hdcmi, DCMI_FLAG_OVFRI);
mbed_official 573:ad23fe03a082 464
mbed_official 573:ad23fe03a082 465 /* Update error code */
mbed_official 573:ad23fe03a082 466 hdcmi->ErrorCode |= HAL_DCMI_ERROR_OVF;
mbed_official 573:ad23fe03a082 467
mbed_official 573:ad23fe03a082 468 /* Change DCMI state */
mbed_official 573:ad23fe03a082 469 hdcmi->State = HAL_DCMI_STATE_ERROR;
mbed_official 573:ad23fe03a082 470
mbed_official 573:ad23fe03a082 471 /* Process Unlocked */
mbed_official 573:ad23fe03a082 472 __HAL_UNLOCK(hdcmi);
mbed_official 573:ad23fe03a082 473
mbed_official 573:ad23fe03a082 474 /* Abort the DMA Transfer */
mbed_official 573:ad23fe03a082 475 HAL_DMA_Abort(hdcmi->DMA_Handle);
mbed_official 573:ad23fe03a082 476
mbed_official 573:ad23fe03a082 477 /* Overflow Callback */
mbed_official 573:ad23fe03a082 478 HAL_DCMI_ErrorCallback(hdcmi);
mbed_official 573:ad23fe03a082 479 }
mbed_official 573:ad23fe03a082 480 }
mbed_official 573:ad23fe03a082 481 /* Line Interrupt management ************************************************/
mbed_official 573:ad23fe03a082 482 if(__HAL_DCMI_GET_FLAG(hdcmi, DCMI_FLAG_LINERI) != RESET)
mbed_official 573:ad23fe03a082 483 {
mbed_official 573:ad23fe03a082 484 if(__HAL_DCMI_GET_IT_SOURCE(hdcmi, DCMI_IT_LINE) != RESET)
mbed_official 573:ad23fe03a082 485 {
mbed_official 573:ad23fe03a082 486 /* Clear the Line interrupt flag */
mbed_official 573:ad23fe03a082 487 __HAL_DCMI_CLEAR_FLAG(hdcmi, DCMI_FLAG_LINERI);
mbed_official 573:ad23fe03a082 488
mbed_official 573:ad23fe03a082 489 /* Process Unlocked */
mbed_official 573:ad23fe03a082 490 __HAL_UNLOCK(hdcmi);
mbed_official 573:ad23fe03a082 491
mbed_official 573:ad23fe03a082 492 /* Line interrupt Callback */
mbed_official 573:ad23fe03a082 493 HAL_DCMI_LineEventCallback(hdcmi);
mbed_official 573:ad23fe03a082 494 }
mbed_official 573:ad23fe03a082 495 }
mbed_official 573:ad23fe03a082 496 /* VSYNC interrupt management ***********************************************/
mbed_official 573:ad23fe03a082 497 if(__HAL_DCMI_GET_FLAG(hdcmi, DCMI_FLAG_VSYNCRI) != RESET)
mbed_official 573:ad23fe03a082 498 {
mbed_official 573:ad23fe03a082 499 if(__HAL_DCMI_GET_IT_SOURCE(hdcmi, DCMI_IT_VSYNC) != RESET)
mbed_official 573:ad23fe03a082 500 {
mbed_official 573:ad23fe03a082 501 /* Disable the VSYNC interrupt */
mbed_official 573:ad23fe03a082 502 __HAL_DCMI_DISABLE_IT(hdcmi, DCMI_IT_VSYNC);
mbed_official 573:ad23fe03a082 503
mbed_official 573:ad23fe03a082 504 /* Clear the VSYNC flag */
mbed_official 573:ad23fe03a082 505 __HAL_DCMI_CLEAR_FLAG(hdcmi, DCMI_FLAG_VSYNCRI);
mbed_official 573:ad23fe03a082 506
mbed_official 573:ad23fe03a082 507 /* Process Unlocked */
mbed_official 573:ad23fe03a082 508 __HAL_UNLOCK(hdcmi);
mbed_official 573:ad23fe03a082 509
mbed_official 573:ad23fe03a082 510 /* VSYNC Callback */
mbed_official 573:ad23fe03a082 511 HAL_DCMI_VsyncEventCallback(hdcmi);
mbed_official 573:ad23fe03a082 512 }
mbed_official 573:ad23fe03a082 513 }
mbed_official 573:ad23fe03a082 514 /* End of Frame interrupt management ****************************************/
mbed_official 573:ad23fe03a082 515 if(__HAL_DCMI_GET_FLAG(hdcmi, DCMI_FLAG_FRAMERI) != RESET)
mbed_official 573:ad23fe03a082 516 {
mbed_official 573:ad23fe03a082 517 if(__HAL_DCMI_GET_IT_SOURCE(hdcmi, DCMI_IT_FRAME) != RESET)
mbed_official 573:ad23fe03a082 518 {
mbed_official 573:ad23fe03a082 519 /* Disable the End of Frame interrupt */
mbed_official 573:ad23fe03a082 520 __HAL_DCMI_DISABLE_IT(hdcmi, DCMI_IT_FRAME);
mbed_official 573:ad23fe03a082 521
mbed_official 573:ad23fe03a082 522 /* Clear the End of Frame flag */
mbed_official 573:ad23fe03a082 523 __HAL_DCMI_CLEAR_FLAG(hdcmi, DCMI_FLAG_FRAMERI);
mbed_official 573:ad23fe03a082 524
mbed_official 573:ad23fe03a082 525 /* Process Unlocked */
mbed_official 573:ad23fe03a082 526 __HAL_UNLOCK(hdcmi);
mbed_official 573:ad23fe03a082 527
mbed_official 573:ad23fe03a082 528 /* End of Frame Callback */
mbed_official 573:ad23fe03a082 529 HAL_DCMI_FrameEventCallback(hdcmi);
mbed_official 573:ad23fe03a082 530 }
mbed_official 573:ad23fe03a082 531 }
mbed_official 573:ad23fe03a082 532 }
mbed_official 573:ad23fe03a082 533
mbed_official 573:ad23fe03a082 534 /**
mbed_official 573:ad23fe03a082 535 * @brief Error DCMI callback.
mbed_official 573:ad23fe03a082 536 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 537 * the configuration information for DCMI.
mbed_official 573:ad23fe03a082 538 * @retval None
mbed_official 573:ad23fe03a082 539 */
mbed_official 573:ad23fe03a082 540 __weak void HAL_DCMI_ErrorCallback(DCMI_HandleTypeDef *hdcmi)
mbed_official 573:ad23fe03a082 541 {
mbed_official 573:ad23fe03a082 542 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 573:ad23fe03a082 543 the HAL_DCMI_ErrorCallback could be implemented in the user file
mbed_official 573:ad23fe03a082 544 */
mbed_official 573:ad23fe03a082 545 }
mbed_official 573:ad23fe03a082 546
mbed_official 573:ad23fe03a082 547 /**
mbed_official 573:ad23fe03a082 548 * @brief Line Event callback.
mbed_official 573:ad23fe03a082 549 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 550 * the configuration information for DCMI.
mbed_official 573:ad23fe03a082 551 * @retval None
mbed_official 573:ad23fe03a082 552 */
mbed_official 573:ad23fe03a082 553 __weak void HAL_DCMI_LineEventCallback(DCMI_HandleTypeDef *hdcmi)
mbed_official 573:ad23fe03a082 554 {
mbed_official 573:ad23fe03a082 555 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 573:ad23fe03a082 556 the HAL_DCMI_LineEventCallback could be implemented in the user file
mbed_official 573:ad23fe03a082 557 */
mbed_official 573:ad23fe03a082 558 }
mbed_official 573:ad23fe03a082 559
mbed_official 573:ad23fe03a082 560 /**
mbed_official 573:ad23fe03a082 561 * @brief VSYNC Event callback.
mbed_official 573:ad23fe03a082 562 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 563 * the configuration information for DCMI.
mbed_official 573:ad23fe03a082 564 * @retval None
mbed_official 573:ad23fe03a082 565 */
mbed_official 573:ad23fe03a082 566 __weak void HAL_DCMI_VsyncEventCallback(DCMI_HandleTypeDef *hdcmi)
mbed_official 573:ad23fe03a082 567 {
mbed_official 573:ad23fe03a082 568 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 573:ad23fe03a082 569 the HAL_DCMI_VsyncEventCallback could be implemented in the user file
mbed_official 573:ad23fe03a082 570 */
mbed_official 573:ad23fe03a082 571 }
mbed_official 573:ad23fe03a082 572
mbed_official 573:ad23fe03a082 573 /**
mbed_official 573:ad23fe03a082 574 * @brief Frame Event callback.
mbed_official 573:ad23fe03a082 575 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 576 * the configuration information for DCMI.
mbed_official 573:ad23fe03a082 577 * @retval None
mbed_official 573:ad23fe03a082 578 */
mbed_official 573:ad23fe03a082 579 __weak void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi)
mbed_official 573:ad23fe03a082 580 {
mbed_official 573:ad23fe03a082 581 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 573:ad23fe03a082 582 the HAL_DCMI_FrameEventCallback could be implemented in the user file
mbed_official 573:ad23fe03a082 583 */
mbed_official 573:ad23fe03a082 584 }
mbed_official 573:ad23fe03a082 585
mbed_official 573:ad23fe03a082 586 /**
mbed_official 573:ad23fe03a082 587 * @}
mbed_official 573:ad23fe03a082 588 */
mbed_official 573:ad23fe03a082 589
mbed_official 573:ad23fe03a082 590 /** @defgroup DCMI_Exported_Functions_Group3 Peripheral Control functions
mbed_official 573:ad23fe03a082 591 * @brief Peripheral Control functions
mbed_official 573:ad23fe03a082 592 *
mbed_official 573:ad23fe03a082 593 @verbatim
mbed_official 573:ad23fe03a082 594 ===============================================================================
mbed_official 573:ad23fe03a082 595 ##### Peripheral Control functions #####
mbed_official 573:ad23fe03a082 596 ===============================================================================
mbed_official 573:ad23fe03a082 597 [..] This section provides functions allowing to:
mbed_official 573:ad23fe03a082 598 (+) Configure the CROP feature.
mbed_official 573:ad23fe03a082 599 (+) Enable/Disable the CROP feature.
mbed_official 573:ad23fe03a082 600 (+) Enable/Disable the JPEG feature.
mbed_official 573:ad23fe03a082 601
mbed_official 573:ad23fe03a082 602 @endverbatim
mbed_official 573:ad23fe03a082 603 * @{
mbed_official 573:ad23fe03a082 604 */
mbed_official 573:ad23fe03a082 605
mbed_official 573:ad23fe03a082 606 /**
mbed_official 573:ad23fe03a082 607 * @brief Configure the DCMI CROP coordinate.
mbed_official 573:ad23fe03a082 608 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 609 * the configuration information for DCMI.
mbed_official 573:ad23fe03a082 610 * @param YSize: DCMI Line number
mbed_official 573:ad23fe03a082 611 * @param XSize: DCMI Pixel per line
mbed_official 573:ad23fe03a082 612 * @param X0: DCMI window X offset
mbed_official 573:ad23fe03a082 613 * @param Y0: DCMI window Y offset
mbed_official 573:ad23fe03a082 614 * @retval HAL status
mbed_official 573:ad23fe03a082 615 */
mbed_official 573:ad23fe03a082 616 HAL_StatusTypeDef HAL_DCMI_ConfigCROP(DCMI_HandleTypeDef *hdcmi, uint32_t X0, uint32_t Y0, uint32_t XSize, uint32_t YSize)
mbed_official 573:ad23fe03a082 617 {
mbed_official 573:ad23fe03a082 618 /* Process Locked */
mbed_official 573:ad23fe03a082 619 __HAL_LOCK(hdcmi);
mbed_official 573:ad23fe03a082 620
mbed_official 573:ad23fe03a082 621 /* Lock the DCMI peripheral state */
mbed_official 573:ad23fe03a082 622 hdcmi->State = HAL_DCMI_STATE_BUSY;
mbed_official 573:ad23fe03a082 623
mbed_official 573:ad23fe03a082 624 /* Check the parameters */
mbed_official 573:ad23fe03a082 625 assert_param(IS_DCMI_WINDOW_COORDINATE(X0));
mbed_official 573:ad23fe03a082 626 assert_param(IS_DCMI_WINDOW_HEIGHT(Y0));
mbed_official 573:ad23fe03a082 627 assert_param(IS_DCMI_WINDOW_COORDINATE(XSize));
mbed_official 573:ad23fe03a082 628 assert_param(IS_DCMI_WINDOW_COORDINATE(YSize));
mbed_official 573:ad23fe03a082 629
mbed_official 573:ad23fe03a082 630 /* Configure CROP */
mbed_official 573:ad23fe03a082 631 DCMI->CWSIZER = (XSize | (YSize << 16));
mbed_official 573:ad23fe03a082 632 DCMI->CWSTRTR = (X0 | (Y0 << 16));
mbed_official 573:ad23fe03a082 633
mbed_official 573:ad23fe03a082 634 /* Initialize the DCMI state*/
mbed_official 573:ad23fe03a082 635 hdcmi->State = HAL_DCMI_STATE_READY;
mbed_official 573:ad23fe03a082 636
mbed_official 573:ad23fe03a082 637 /* Process Unlocked */
mbed_official 573:ad23fe03a082 638 __HAL_UNLOCK(hdcmi);
mbed_official 573:ad23fe03a082 639
mbed_official 573:ad23fe03a082 640 return HAL_OK;
mbed_official 573:ad23fe03a082 641 }
mbed_official 573:ad23fe03a082 642
mbed_official 573:ad23fe03a082 643 /**
mbed_official 573:ad23fe03a082 644 * @brief Disable the Crop feature.
mbed_official 573:ad23fe03a082 645 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 646 * the configuration information for DCMI.
mbed_official 573:ad23fe03a082 647 * @retval HAL status
mbed_official 573:ad23fe03a082 648 */
mbed_official 573:ad23fe03a082 649 HAL_StatusTypeDef HAL_DCMI_DisableCROP(DCMI_HandleTypeDef *hdcmi)
mbed_official 573:ad23fe03a082 650 {
mbed_official 573:ad23fe03a082 651 /* Process Locked */
mbed_official 573:ad23fe03a082 652 __HAL_LOCK(hdcmi);
mbed_official 573:ad23fe03a082 653
mbed_official 573:ad23fe03a082 654 /* Lock the DCMI peripheral state */
mbed_official 573:ad23fe03a082 655 hdcmi->State = HAL_DCMI_STATE_BUSY;
mbed_official 573:ad23fe03a082 656
mbed_official 573:ad23fe03a082 657 /* Disable DCMI Crop feature */
mbed_official 573:ad23fe03a082 658 DCMI->CR &= ~(uint32_t)DCMI_CR_CROP;
mbed_official 573:ad23fe03a082 659
mbed_official 573:ad23fe03a082 660 /* Change the DCMI state*/
mbed_official 573:ad23fe03a082 661 hdcmi->State = HAL_DCMI_STATE_READY;
mbed_official 573:ad23fe03a082 662
mbed_official 573:ad23fe03a082 663 /* Process Unlocked */
mbed_official 573:ad23fe03a082 664 __HAL_UNLOCK(hdcmi);
mbed_official 573:ad23fe03a082 665
mbed_official 573:ad23fe03a082 666 return HAL_OK;
mbed_official 573:ad23fe03a082 667 }
mbed_official 573:ad23fe03a082 668
mbed_official 573:ad23fe03a082 669 /**
mbed_official 573:ad23fe03a082 670 * @brief Enable the Crop feature.
mbed_official 573:ad23fe03a082 671 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 672 * the configuration information for DCMI.
mbed_official 573:ad23fe03a082 673 * @retval HAL status
mbed_official 573:ad23fe03a082 674 */
mbed_official 573:ad23fe03a082 675 HAL_StatusTypeDef HAL_DCMI_EnableCROP(DCMI_HandleTypeDef *hdcmi)
mbed_official 573:ad23fe03a082 676 {
mbed_official 573:ad23fe03a082 677 /* Process Locked */
mbed_official 573:ad23fe03a082 678 __HAL_LOCK(hdcmi);
mbed_official 573:ad23fe03a082 679
mbed_official 573:ad23fe03a082 680 /* Lock the DCMI peripheral state */
mbed_official 573:ad23fe03a082 681 hdcmi->State = HAL_DCMI_STATE_BUSY;
mbed_official 573:ad23fe03a082 682
mbed_official 573:ad23fe03a082 683 /* Enable DCMI Crop feature */
mbed_official 573:ad23fe03a082 684 DCMI->CR |= (uint32_t)DCMI_CR_CROP;
mbed_official 573:ad23fe03a082 685
mbed_official 573:ad23fe03a082 686 /* Change the DCMI state*/
mbed_official 573:ad23fe03a082 687 hdcmi->State = HAL_DCMI_STATE_READY;
mbed_official 573:ad23fe03a082 688
mbed_official 573:ad23fe03a082 689 /* Process Unlocked */
mbed_official 573:ad23fe03a082 690 __HAL_UNLOCK(hdcmi);
mbed_official 573:ad23fe03a082 691
mbed_official 573:ad23fe03a082 692 return HAL_OK;
mbed_official 573:ad23fe03a082 693 }
mbed_official 573:ad23fe03a082 694
mbed_official 573:ad23fe03a082 695 /**
mbed_official 573:ad23fe03a082 696 * @}
mbed_official 573:ad23fe03a082 697 */
mbed_official 573:ad23fe03a082 698
mbed_official 573:ad23fe03a082 699 /** @defgroup DCMI_Exported_Functions_Group4 Peripheral State functions
mbed_official 573:ad23fe03a082 700 * @brief Peripheral State functions
mbed_official 573:ad23fe03a082 701 *
mbed_official 573:ad23fe03a082 702 @verbatim
mbed_official 573:ad23fe03a082 703 ===============================================================================
mbed_official 573:ad23fe03a082 704 ##### Peripheral State and Errors functions #####
mbed_official 573:ad23fe03a082 705 ===============================================================================
mbed_official 573:ad23fe03a082 706 [..]
mbed_official 573:ad23fe03a082 707 This subsection provides functions allowing to
mbed_official 573:ad23fe03a082 708 (+) Check the DCMI state.
mbed_official 573:ad23fe03a082 709 (+) Get the specific DCMI error flag.
mbed_official 573:ad23fe03a082 710
mbed_official 573:ad23fe03a082 711 @endverbatim
mbed_official 573:ad23fe03a082 712 * @{
mbed_official 573:ad23fe03a082 713 */
mbed_official 573:ad23fe03a082 714
mbed_official 573:ad23fe03a082 715 /**
mbed_official 573:ad23fe03a082 716 * @brief Return the DCMI state
mbed_official 573:ad23fe03a082 717 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 718 * the configuration information for DCMI.
mbed_official 573:ad23fe03a082 719 * @retval HAL state
mbed_official 573:ad23fe03a082 720 */
mbed_official 573:ad23fe03a082 721 HAL_DCMI_StateTypeDef HAL_DCMI_GetState(DCMI_HandleTypeDef *hdcmi)
mbed_official 573:ad23fe03a082 722 {
mbed_official 573:ad23fe03a082 723 return hdcmi->State;
mbed_official 573:ad23fe03a082 724 }
mbed_official 573:ad23fe03a082 725
mbed_official 573:ad23fe03a082 726 /**
mbed_official 573:ad23fe03a082 727 * @brief Return the DCMI error code
mbed_official 573:ad23fe03a082 728 * @param hdcmi : pointer to a DCMI_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 729 * the configuration information for DCMI.
mbed_official 573:ad23fe03a082 730 * @retval DCMI Error Code
mbed_official 573:ad23fe03a082 731 */
mbed_official 573:ad23fe03a082 732 uint32_t HAL_DCMI_GetError(DCMI_HandleTypeDef *hdcmi)
mbed_official 573:ad23fe03a082 733 {
mbed_official 573:ad23fe03a082 734 return hdcmi->ErrorCode;
mbed_official 573:ad23fe03a082 735 }
mbed_official 573:ad23fe03a082 736
mbed_official 573:ad23fe03a082 737 /**
mbed_official 573:ad23fe03a082 738 * @}
mbed_official 573:ad23fe03a082 739 */
mbed_official 573:ad23fe03a082 740 /* Private functions ---------------------------------------------------------*/
mbed_official 573:ad23fe03a082 741 /** @defgroup DCMI_Private_Functions DCMI Private Functions
mbed_official 573:ad23fe03a082 742 * @{
mbed_official 573:ad23fe03a082 743 */
mbed_official 573:ad23fe03a082 744 /**
mbed_official 573:ad23fe03a082 745 * @brief DMA conversion complete callback.
mbed_official 573:ad23fe03a082 746 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 747 * the configuration information for the specified DMA module.
mbed_official 573:ad23fe03a082 748 * @retval None
mbed_official 573:ad23fe03a082 749 */
mbed_official 573:ad23fe03a082 750 static void DCMI_DMAConvCplt(DMA_HandleTypeDef *hdma)
mbed_official 573:ad23fe03a082 751 {
mbed_official 573:ad23fe03a082 752 uint32_t tmp = 0;
mbed_official 573:ad23fe03a082 753
mbed_official 573:ad23fe03a082 754 DCMI_HandleTypeDef* hdcmi = ( DCMI_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 573:ad23fe03a082 755 hdcmi->State= HAL_DCMI_STATE_READY;
mbed_official 573:ad23fe03a082 756
mbed_official 573:ad23fe03a082 757 if(hdcmi->XferCount != 0)
mbed_official 573:ad23fe03a082 758 {
mbed_official 573:ad23fe03a082 759 /* Update memory 0 address location */
mbed_official 573:ad23fe03a082 760 tmp = ((hdcmi->DMA_Handle->Instance->CR) & DMA_SxCR_CT);
mbed_official 573:ad23fe03a082 761 if(((hdcmi->XferCount % 2) == 0) && (tmp != 0))
mbed_official 573:ad23fe03a082 762 {
mbed_official 573:ad23fe03a082 763 tmp = hdcmi->DMA_Handle->Instance->M0AR;
mbed_official 573:ad23fe03a082 764 HAL_DMAEx_ChangeMemory(hdcmi->DMA_Handle, (tmp + (8*hdcmi->XferSize)), MEMORY0);
mbed_official 573:ad23fe03a082 765 hdcmi->XferCount--;
mbed_official 573:ad23fe03a082 766 }
mbed_official 573:ad23fe03a082 767 /* Update memory 1 address location */
mbed_official 573:ad23fe03a082 768 else if((hdcmi->DMA_Handle->Instance->CR & DMA_SxCR_CT) == 0)
mbed_official 573:ad23fe03a082 769 {
mbed_official 573:ad23fe03a082 770 tmp = hdcmi->DMA_Handle->Instance->M1AR;
mbed_official 573:ad23fe03a082 771 HAL_DMAEx_ChangeMemory(hdcmi->DMA_Handle, (tmp + (8*hdcmi->XferSize)), MEMORY1);
mbed_official 573:ad23fe03a082 772 hdcmi->XferCount--;
mbed_official 573:ad23fe03a082 773 }
mbed_official 573:ad23fe03a082 774 }
mbed_official 573:ad23fe03a082 775 /* Update memory 0 address location */
mbed_official 573:ad23fe03a082 776 else if((hdcmi->DMA_Handle->Instance->CR & DMA_SxCR_CT) != 0)
mbed_official 573:ad23fe03a082 777 {
mbed_official 573:ad23fe03a082 778 hdcmi->DMA_Handle->Instance->M0AR = hdcmi->pBuffPtr;
mbed_official 573:ad23fe03a082 779 }
mbed_official 573:ad23fe03a082 780 /* Update memory 1 address location */
mbed_official 573:ad23fe03a082 781 else if((hdcmi->DMA_Handle->Instance->CR & DMA_SxCR_CT) == 0)
mbed_official 573:ad23fe03a082 782 {
mbed_official 573:ad23fe03a082 783 tmp = hdcmi->pBuffPtr;
mbed_official 573:ad23fe03a082 784 hdcmi->DMA_Handle->Instance->M1AR = (tmp + (4*hdcmi->XferSize));
mbed_official 573:ad23fe03a082 785 hdcmi->XferCount = hdcmi->XferTransferNumber;
mbed_official 573:ad23fe03a082 786 }
mbed_official 573:ad23fe03a082 787
mbed_official 573:ad23fe03a082 788 if(__HAL_DCMI_GET_FLAG(hdcmi, DCMI_FLAG_FRAMERI) != RESET)
mbed_official 573:ad23fe03a082 789 {
mbed_official 573:ad23fe03a082 790 /* Process Unlocked */
mbed_official 573:ad23fe03a082 791 __HAL_UNLOCK(hdcmi);
mbed_official 573:ad23fe03a082 792
mbed_official 573:ad23fe03a082 793 /* FRAME Callback */
mbed_official 573:ad23fe03a082 794 HAL_DCMI_FrameEventCallback(hdcmi);
mbed_official 573:ad23fe03a082 795 }
mbed_official 573:ad23fe03a082 796 }
mbed_official 573:ad23fe03a082 797
mbed_official 573:ad23fe03a082 798 /**
mbed_official 573:ad23fe03a082 799 * @brief DMA error callback
mbed_official 573:ad23fe03a082 800 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 801 * the configuration information for the specified DMA module.
mbed_official 573:ad23fe03a082 802 * @retval None
mbed_official 573:ad23fe03a082 803 */
mbed_official 573:ad23fe03a082 804 static void DCMI_DMAError(DMA_HandleTypeDef *hdma)
mbed_official 573:ad23fe03a082 805 {
mbed_official 573:ad23fe03a082 806 DCMI_HandleTypeDef* hdcmi = ( DCMI_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 573:ad23fe03a082 807 hdcmi->State= HAL_DCMI_STATE_READY;
mbed_official 573:ad23fe03a082 808 HAL_DCMI_ErrorCallback(hdcmi);
mbed_official 573:ad23fe03a082 809 }
mbed_official 573:ad23fe03a082 810
mbed_official 573:ad23fe03a082 811 /**
mbed_official 573:ad23fe03a082 812 * @}
mbed_official 573:ad23fe03a082 813 */
mbed_official 573:ad23fe03a082 814
mbed_official 573:ad23fe03a082 815 /**
mbed_official 573:ad23fe03a082 816 * @}
mbed_official 573:ad23fe03a082 817 */
mbed_official 573:ad23fe03a082 818 #endif /* HAL_DCMI_MODULE_ENABLED */
mbed_official 573:ad23fe03a082 819 /**
mbed_official 573:ad23fe03a082 820 * @}
mbed_official 573:ad23fe03a082 821 */
mbed_official 573:ad23fe03a082 822
mbed_official 573:ad23fe03a082 823 /**
mbed_official 573:ad23fe03a082 824 * @}
mbed_official 573:ad23fe03a082 825 */
mbed_official 573:ad23fe03a082 826
mbed_official 573:ad23fe03a082 827 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/