Mouse code for the MacroRat

Dependencies:   ITG3200 QEI

Committer:
sahilmgandhi
Date:
Sun May 14 23:18:57 2017 +0000
Revision:
18:6a4db94011d3
Publishing again

Who changed what in which revision?

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