mbed library sources

Fork of mbed-src by mbed official

Committer:
mbed_official
Date:
Thu Aug 20 10:45:13 2015 +0100
Revision:
613:bc40b8d2aec4
Parent:
532:fe11edbda85c
Synchronized with git revision 92ca8c7b60a283b6bb60eb65b183dac1599f0ade

Full URL: https://github.com/mbedmicro/mbed/commit/92ca8c7b60a283b6bb60eb65b183dac1599f0ade/

Nordic: update application start address in GCC linker script

Who changed what in which revision?

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