Lancaster University's (short term!) clone of mbed-src for micro:bit. This is a copy of the github branch https://github.com/lancaster-university/mbed-classic

Fork of mbed-src by mbed official

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****/