Mouse code for the MacroRat

Dependencies:   ITG3200 QEI

Committer:
sahilmgandhi
Date:
Sat Jun 03 00:22:44 2017 +0000
Revision:
46:b156ef445742
Parent:
18:6a4db94011d3
Final code for internal battlebot competition.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sahilmgandhi 18:6a4db94011d3 1 /**
sahilmgandhi 18:6a4db94011d3 2 ******************************************************************************
sahilmgandhi 18:6a4db94011d3 3 * @file stm32f4xx_hal_dcmi.c
sahilmgandhi 18:6a4db94011d3 4 * @author MCD Application Team
sahilmgandhi 18:6a4db94011d3 5 * @version V1.5.0
sahilmgandhi 18:6a4db94011d3 6 * @date 06-May-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 "stm32f4xx_hal.h"
sahilmgandhi 18:6a4db94011d3 95
sahilmgandhi 18:6a4db94011d3 96 /** @addtogroup STM32F4xx_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(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) ||\
sahilmgandhi 18:6a4db94011d3 107 defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) || defined(STM32F469xx) ||\
sahilmgandhi 18:6a4db94011d3 108 defined(STM32F479xx)
sahilmgandhi 18:6a4db94011d3 109 /* Private typedef -----------------------------------------------------------*/
sahilmgandhi 18:6a4db94011d3 110 /* Private define ------------------------------------------------------------*/
sahilmgandhi 18:6a4db94011d3 111 #define HAL_TIMEOUT_DCMI_STOP ((uint32_t)14U) /* Set timeout to 1s */
sahilmgandhi 18:6a4db94011d3 112 /* Private macro -------------------------------------------------------------*/
sahilmgandhi 18:6a4db94011d3 113 /* Private variables ---------------------------------------------------------*/
sahilmgandhi 18:6a4db94011d3 114 /* Private function prototypes -----------------------------------------------*/
sahilmgandhi 18:6a4db94011d3 115 static void DCMI_DMAXferCplt(DMA_HandleTypeDef *hdma);
sahilmgandhi 18:6a4db94011d3 116 static void DCMI_DMAError(DMA_HandleTypeDef *hdma);
sahilmgandhi 18:6a4db94011d3 117
sahilmgandhi 18:6a4db94011d3 118 /* Exported functions --------------------------------------------------------*/
sahilmgandhi 18:6a4db94011d3 119
sahilmgandhi 18:6a4db94011d3 120 /** @defgroup DCMI_Exported_Functions DCMI Exported Functions
sahilmgandhi 18:6a4db94011d3 121 * @{
sahilmgandhi 18:6a4db94011d3 122 */
sahilmgandhi 18:6a4db94011d3 123
sahilmgandhi 18:6a4db94011d3 124 /** @defgroup DCMI_Exported_Functions_Group1 Initialization and Configuration functions
sahilmgandhi 18:6a4db94011d3 125 * @brief Initialization and Configuration functions
sahilmgandhi 18:6a4db94011d3 126 *
sahilmgandhi 18:6a4db94011d3 127 @verbatim
sahilmgandhi 18:6a4db94011d3 128 ===============================================================================
sahilmgandhi 18:6a4db94011d3 129 ##### Initialization and Configuration functions #####
sahilmgandhi 18:6a4db94011d3 130 ===============================================================================
sahilmgandhi 18:6a4db94011d3 131 [..] This section provides functions allowing to:
sahilmgandhi 18:6a4db94011d3 132 (+) Initialize and configure the DCMI
sahilmgandhi 18:6a4db94011d3 133 (+) De-initialize the DCMI
sahilmgandhi 18:6a4db94011d3 134
sahilmgandhi 18:6a4db94011d3 135 @endverbatim
sahilmgandhi 18:6a4db94011d3 136 * @{
sahilmgandhi 18:6a4db94011d3 137 */
sahilmgandhi 18:6a4db94011d3 138
sahilmgandhi 18:6a4db94011d3 139 /**
sahilmgandhi 18:6a4db94011d3 140 * @brief Initializes the DCMI according to the specified
sahilmgandhi 18:6a4db94011d3 141 * parameters in the DCMI_InitTypeDef and create the associated handle.
sahilmgandhi 18:6a4db94011d3 142 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 143 * the configuration information for DCMI.
sahilmgandhi 18:6a4db94011d3 144 * @retval HAL status
sahilmgandhi 18:6a4db94011d3 145 */
sahilmgandhi 18:6a4db94011d3 146 __weak HAL_StatusTypeDef HAL_DCMI_Init(DCMI_HandleTypeDef *hdcmi)
sahilmgandhi 18:6a4db94011d3 147 {
sahilmgandhi 18:6a4db94011d3 148 /* Check the DCMI peripheral state */
sahilmgandhi 18:6a4db94011d3 149 if(hdcmi == NULL)
sahilmgandhi 18:6a4db94011d3 150 {
sahilmgandhi 18:6a4db94011d3 151 return HAL_ERROR;
sahilmgandhi 18:6a4db94011d3 152 }
sahilmgandhi 18:6a4db94011d3 153
sahilmgandhi 18:6a4db94011d3 154 /* Check function parameters */
sahilmgandhi 18:6a4db94011d3 155 assert_param(IS_DCMI_ALL_INSTANCE(hdcmi->Instance));
sahilmgandhi 18:6a4db94011d3 156 assert_param(IS_DCMI_PCKPOLARITY(hdcmi->Init.PCKPolarity));
sahilmgandhi 18:6a4db94011d3 157 assert_param(IS_DCMI_VSPOLARITY(hdcmi->Init.VSPolarity));
sahilmgandhi 18:6a4db94011d3 158 assert_param(IS_DCMI_HSPOLARITY(hdcmi->Init.HSPolarity));
sahilmgandhi 18:6a4db94011d3 159 assert_param(IS_DCMI_SYNCHRO(hdcmi->Init.SynchroMode));
sahilmgandhi 18:6a4db94011d3 160 assert_param(IS_DCMI_CAPTURE_RATE(hdcmi->Init.CaptureRate));
sahilmgandhi 18:6a4db94011d3 161 assert_param(IS_DCMI_EXTENDED_DATA(hdcmi->Init.ExtendedDataMode));
sahilmgandhi 18:6a4db94011d3 162 assert_param(IS_DCMI_MODE_JPEG(hdcmi->Init.JPEGMode));
sahilmgandhi 18:6a4db94011d3 163
sahilmgandhi 18:6a4db94011d3 164 if(hdcmi->State == HAL_DCMI_STATE_RESET)
sahilmgandhi 18:6a4db94011d3 165 {
sahilmgandhi 18:6a4db94011d3 166 /* Allocate lock resource and initialize it */
sahilmgandhi 18:6a4db94011d3 167 hdcmi->Lock = HAL_UNLOCKED;
sahilmgandhi 18:6a4db94011d3 168 /* Init the low level hardware */
sahilmgandhi 18:6a4db94011d3 169 HAL_DCMI_MspInit(hdcmi);
sahilmgandhi 18:6a4db94011d3 170 }
sahilmgandhi 18:6a4db94011d3 171
sahilmgandhi 18:6a4db94011d3 172 /* Change the DCMI state */
sahilmgandhi 18:6a4db94011d3 173 hdcmi->State = HAL_DCMI_STATE_BUSY;
sahilmgandhi 18:6a4db94011d3 174
sahilmgandhi 18:6a4db94011d3 175 /* Set DCMI parameters */
sahilmgandhi 18:6a4db94011d3 176 /* Configures the HS, VS, DE and PC polarity */
sahilmgandhi 18:6a4db94011d3 177 hdcmi->Instance->CR &= ~(DCMI_CR_PCKPOL | DCMI_CR_HSPOL | DCMI_CR_VSPOL | DCMI_CR_EDM_0 |
sahilmgandhi 18:6a4db94011d3 178 DCMI_CR_EDM_1 | DCMI_CR_FCRC_0 | DCMI_CR_FCRC_1 | DCMI_CR_JPEG |
sahilmgandhi 18:6a4db94011d3 179 DCMI_CR_ESS);
sahilmgandhi 18:6a4db94011d3 180 hdcmi->Instance->CR |= (uint32_t)(hdcmi->Init.SynchroMode | hdcmi->Init.CaptureRate | \
sahilmgandhi 18:6a4db94011d3 181 hdcmi->Init.VSPolarity | hdcmi->Init.HSPolarity | \
sahilmgandhi 18:6a4db94011d3 182 hdcmi->Init.PCKPolarity | hdcmi->Init.ExtendedDataMode | \
sahilmgandhi 18:6a4db94011d3 183 hdcmi->Init.JPEGMode);
sahilmgandhi 18:6a4db94011d3 184
sahilmgandhi 18:6a4db94011d3 185 if(hdcmi->Init.SynchroMode == DCMI_SYNCHRO_EMBEDDED)
sahilmgandhi 18:6a4db94011d3 186 {
sahilmgandhi 18:6a4db94011d3 187 hdcmi->Instance->ESCR = (((uint32_t)hdcmi->Init.SyncroCode.FrameStartCode) |
sahilmgandhi 18:6a4db94011d3 188 ((uint32_t)hdcmi->Init.SyncroCode.LineStartCode << DCMI_POSITION_ESCR_LSC)|
sahilmgandhi 18:6a4db94011d3 189 ((uint32_t)hdcmi->Init.SyncroCode.LineEndCode << DCMI_POSITION_ESCR_LEC) |
sahilmgandhi 18:6a4db94011d3 190 ((uint32_t)hdcmi->Init.SyncroCode.FrameEndCode << DCMI_POSITION_ESCR_FEC));
sahilmgandhi 18:6a4db94011d3 191 }
sahilmgandhi 18:6a4db94011d3 192
sahilmgandhi 18:6a4db94011d3 193 /* Enable the Line, Vsync, Error and Overrun interrupts */
sahilmgandhi 18:6a4db94011d3 194 __HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_LINE | DCMI_IT_VSYNC | DCMI_IT_ERR | DCMI_IT_OVR);
sahilmgandhi 18:6a4db94011d3 195
sahilmgandhi 18:6a4db94011d3 196 /* Update error code */
sahilmgandhi 18:6a4db94011d3 197 hdcmi->ErrorCode = HAL_DCMI_ERROR_NONE;
sahilmgandhi 18:6a4db94011d3 198
sahilmgandhi 18:6a4db94011d3 199 /* Initialize the DCMI state*/
sahilmgandhi 18:6a4db94011d3 200 hdcmi->State = HAL_DCMI_STATE_READY;
sahilmgandhi 18:6a4db94011d3 201
sahilmgandhi 18:6a4db94011d3 202 return HAL_OK;
sahilmgandhi 18:6a4db94011d3 203 }
sahilmgandhi 18:6a4db94011d3 204
sahilmgandhi 18:6a4db94011d3 205 /**
sahilmgandhi 18:6a4db94011d3 206 * @brief Deinitializes the DCMI peripheral registers to their default reset
sahilmgandhi 18:6a4db94011d3 207 * values.
sahilmgandhi 18:6a4db94011d3 208 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 209 * the configuration information for DCMI.
sahilmgandhi 18:6a4db94011d3 210 * @retval HAL status
sahilmgandhi 18:6a4db94011d3 211 */
sahilmgandhi 18:6a4db94011d3 212
sahilmgandhi 18:6a4db94011d3 213 HAL_StatusTypeDef HAL_DCMI_DeInit(DCMI_HandleTypeDef *hdcmi)
sahilmgandhi 18:6a4db94011d3 214 {
sahilmgandhi 18:6a4db94011d3 215 /* DeInit the low level hardware */
sahilmgandhi 18:6a4db94011d3 216 HAL_DCMI_MspDeInit(hdcmi);
sahilmgandhi 18:6a4db94011d3 217
sahilmgandhi 18:6a4db94011d3 218 /* Update error code */
sahilmgandhi 18:6a4db94011d3 219 hdcmi->ErrorCode = HAL_DCMI_ERROR_NONE;
sahilmgandhi 18:6a4db94011d3 220
sahilmgandhi 18:6a4db94011d3 221 /* Initialize the DCMI state*/
sahilmgandhi 18:6a4db94011d3 222 hdcmi->State = HAL_DCMI_STATE_RESET;
sahilmgandhi 18:6a4db94011d3 223
sahilmgandhi 18:6a4db94011d3 224 /* Release Lock */
sahilmgandhi 18:6a4db94011d3 225 __HAL_UNLOCK(hdcmi);
sahilmgandhi 18:6a4db94011d3 226
sahilmgandhi 18:6a4db94011d3 227 return HAL_OK;
sahilmgandhi 18:6a4db94011d3 228 }
sahilmgandhi 18:6a4db94011d3 229
sahilmgandhi 18:6a4db94011d3 230 /**
sahilmgandhi 18:6a4db94011d3 231 * @brief Initializes the DCMI MSP.
sahilmgandhi 18:6a4db94011d3 232 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 233 * the configuration information for DCMI.
sahilmgandhi 18:6a4db94011d3 234 * @retval None
sahilmgandhi 18:6a4db94011d3 235 */
sahilmgandhi 18:6a4db94011d3 236 __weak void HAL_DCMI_MspInit(DCMI_HandleTypeDef* hdcmi)
sahilmgandhi 18:6a4db94011d3 237 {
sahilmgandhi 18:6a4db94011d3 238 /* Prevent unused argument(s) compilation warning */
sahilmgandhi 18:6a4db94011d3 239 UNUSED(hdcmi);
sahilmgandhi 18:6a4db94011d3 240 /* NOTE : This function Should not be modified, when the callback is needed,
sahilmgandhi 18:6a4db94011d3 241 the HAL_DCMI_MspInit could be implemented in the user file
sahilmgandhi 18:6a4db94011d3 242 */
sahilmgandhi 18:6a4db94011d3 243 }
sahilmgandhi 18:6a4db94011d3 244
sahilmgandhi 18:6a4db94011d3 245 /**
sahilmgandhi 18:6a4db94011d3 246 * @brief DeInitializes the DCMI MSP.
sahilmgandhi 18:6a4db94011d3 247 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 248 * the configuration information for DCMI.
sahilmgandhi 18:6a4db94011d3 249 * @retval None
sahilmgandhi 18:6a4db94011d3 250 */
sahilmgandhi 18:6a4db94011d3 251 __weak void HAL_DCMI_MspDeInit(DCMI_HandleTypeDef* hdcmi)
sahilmgandhi 18:6a4db94011d3 252 {
sahilmgandhi 18:6a4db94011d3 253 /* Prevent unused argument(s) compilation warning */
sahilmgandhi 18:6a4db94011d3 254 UNUSED(hdcmi);
sahilmgandhi 18:6a4db94011d3 255 /* NOTE : This function Should not be modified, when the callback is needed,
sahilmgandhi 18:6a4db94011d3 256 the HAL_DCMI_MspDeInit could be implemented in the user file
sahilmgandhi 18:6a4db94011d3 257 */
sahilmgandhi 18:6a4db94011d3 258 }
sahilmgandhi 18:6a4db94011d3 259
sahilmgandhi 18:6a4db94011d3 260 /**
sahilmgandhi 18:6a4db94011d3 261 * @}
sahilmgandhi 18:6a4db94011d3 262 */
sahilmgandhi 18:6a4db94011d3 263 /** @defgroup DCMI_Exported_Functions_Group2 IO operation functions
sahilmgandhi 18:6a4db94011d3 264 * @brief IO operation functions
sahilmgandhi 18:6a4db94011d3 265 *
sahilmgandhi 18:6a4db94011d3 266 @verbatim
sahilmgandhi 18:6a4db94011d3 267 ===============================================================================
sahilmgandhi 18:6a4db94011d3 268 ##### IO operation functions #####
sahilmgandhi 18:6a4db94011d3 269 ===============================================================================
sahilmgandhi 18:6a4db94011d3 270 [..] This section provides functions allowing to:
sahilmgandhi 18:6a4db94011d3 271 (+) Configure destination address and data length and
sahilmgandhi 18:6a4db94011d3 272 Enables DCMI DMA request and enables DCMI capture
sahilmgandhi 18:6a4db94011d3 273 (+) Stop the DCMI capture.
sahilmgandhi 18:6a4db94011d3 274 (+) Handles DCMI interrupt request.
sahilmgandhi 18:6a4db94011d3 275
sahilmgandhi 18:6a4db94011d3 276 @endverbatim
sahilmgandhi 18:6a4db94011d3 277 * @{
sahilmgandhi 18:6a4db94011d3 278 */
sahilmgandhi 18:6a4db94011d3 279
sahilmgandhi 18:6a4db94011d3 280 /**
sahilmgandhi 18:6a4db94011d3 281 * @brief Enables DCMI DMA request and enables DCMI capture
sahilmgandhi 18:6a4db94011d3 282 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 283 * the configuration information for DCMI.
sahilmgandhi 18:6a4db94011d3 284 * @param DCMI_Mode: DCMI capture mode snapshot or continuous grab.
sahilmgandhi 18:6a4db94011d3 285 * @param pData: The destination memory Buffer address (LCD Frame buffer).
sahilmgandhi 18:6a4db94011d3 286 * @param Length: The length of capture to be transferred.
sahilmgandhi 18:6a4db94011d3 287 * @retval HAL status
sahilmgandhi 18:6a4db94011d3 288 */
sahilmgandhi 18:6a4db94011d3 289 HAL_StatusTypeDef HAL_DCMI_Start_DMA(DCMI_HandleTypeDef* hdcmi, uint32_t DCMI_Mode, uint32_t pData, uint32_t Length)
sahilmgandhi 18:6a4db94011d3 290 {
sahilmgandhi 18:6a4db94011d3 291 /* Initialize the second memory address */
sahilmgandhi 18:6a4db94011d3 292 uint32_t SecondMemAddress = 0U;
sahilmgandhi 18:6a4db94011d3 293
sahilmgandhi 18:6a4db94011d3 294 /* Check function parameters */
sahilmgandhi 18:6a4db94011d3 295 assert_param(IS_DCMI_CAPTURE_MODE(DCMI_Mode));
sahilmgandhi 18:6a4db94011d3 296
sahilmgandhi 18:6a4db94011d3 297 /* Process Locked */
sahilmgandhi 18:6a4db94011d3 298 __HAL_LOCK(hdcmi);
sahilmgandhi 18:6a4db94011d3 299
sahilmgandhi 18:6a4db94011d3 300 /* Lock the DCMI peripheral state */
sahilmgandhi 18:6a4db94011d3 301 hdcmi->State = HAL_DCMI_STATE_BUSY;
sahilmgandhi 18:6a4db94011d3 302
sahilmgandhi 18:6a4db94011d3 303 /* Enable DCMI by setting DCMIEN bit */
sahilmgandhi 18:6a4db94011d3 304 __HAL_DCMI_ENABLE(hdcmi);
sahilmgandhi 18:6a4db94011d3 305
sahilmgandhi 18:6a4db94011d3 306 /* Configure the DCMI Mode */
sahilmgandhi 18:6a4db94011d3 307 hdcmi->Instance->CR &= ~(DCMI_CR_CM);
sahilmgandhi 18:6a4db94011d3 308 hdcmi->Instance->CR |= (uint32_t)(DCMI_Mode);
sahilmgandhi 18:6a4db94011d3 309
sahilmgandhi 18:6a4db94011d3 310 /* Set the DMA memory0 conversion complete callback */
sahilmgandhi 18:6a4db94011d3 311 hdcmi->DMA_Handle->XferCpltCallback = DCMI_DMAXferCplt;
sahilmgandhi 18:6a4db94011d3 312
sahilmgandhi 18:6a4db94011d3 313 /* Set the DMA error callback */
sahilmgandhi 18:6a4db94011d3 314 hdcmi->DMA_Handle->XferErrorCallback = DCMI_DMAError;
sahilmgandhi 18:6a4db94011d3 315
sahilmgandhi 18:6a4db94011d3 316 /* Set the dma abort callback */
sahilmgandhi 18:6a4db94011d3 317 hdcmi->DMA_Handle->XferAbortCallback = NULL;
sahilmgandhi 18:6a4db94011d3 318
sahilmgandhi 18:6a4db94011d3 319 /* Reset transfer counters value */
sahilmgandhi 18:6a4db94011d3 320 hdcmi->XferCount = 0;
sahilmgandhi 18:6a4db94011d3 321 hdcmi->XferTransferNumber = 0;
sahilmgandhi 18:6a4db94011d3 322
sahilmgandhi 18:6a4db94011d3 323 if(Length <= 0xFFFFU)
sahilmgandhi 18:6a4db94011d3 324 {
sahilmgandhi 18:6a4db94011d3 325 /* Enable the DMA Stream */
sahilmgandhi 18:6a4db94011d3 326 HAL_DMA_Start_IT(hdcmi->DMA_Handle, (uint32_t)&hdcmi->Instance->DR, (uint32_t)pData, Length);
sahilmgandhi 18:6a4db94011d3 327 }
sahilmgandhi 18:6a4db94011d3 328 else /* DCMI_DOUBLE_BUFFER Mode */
sahilmgandhi 18:6a4db94011d3 329 {
sahilmgandhi 18:6a4db94011d3 330 /* Set the DMA memory1 conversion complete callback */
sahilmgandhi 18:6a4db94011d3 331 hdcmi->DMA_Handle->XferM1CpltCallback = DCMI_DMAXferCplt;
sahilmgandhi 18:6a4db94011d3 332
sahilmgandhi 18:6a4db94011d3 333 /* Initialize transfer parameters */
sahilmgandhi 18:6a4db94011d3 334 hdcmi->XferCount = 1U;
sahilmgandhi 18:6a4db94011d3 335 hdcmi->XferSize = Length;
sahilmgandhi 18:6a4db94011d3 336 hdcmi->pBuffPtr = pData;
sahilmgandhi 18:6a4db94011d3 337
sahilmgandhi 18:6a4db94011d3 338 /* Get the number of buffer */
sahilmgandhi 18:6a4db94011d3 339 while(hdcmi->XferSize > 0xFFFFU)
sahilmgandhi 18:6a4db94011d3 340 {
sahilmgandhi 18:6a4db94011d3 341 hdcmi->XferSize = (hdcmi->XferSize/2U);
sahilmgandhi 18:6a4db94011d3 342 hdcmi->XferCount = hdcmi->XferCount*2U;
sahilmgandhi 18:6a4db94011d3 343 }
sahilmgandhi 18:6a4db94011d3 344
sahilmgandhi 18:6a4db94011d3 345 /* Update DCMI counter and transfer number*/
sahilmgandhi 18:6a4db94011d3 346 hdcmi->XferCount = (hdcmi->XferCount - 2U);
sahilmgandhi 18:6a4db94011d3 347 hdcmi->XferTransferNumber = hdcmi->XferCount;
sahilmgandhi 18:6a4db94011d3 348
sahilmgandhi 18:6a4db94011d3 349 /* Update second memory address */
sahilmgandhi 18:6a4db94011d3 350 SecondMemAddress = (uint32_t)(pData + (4U*hdcmi->XferSize));
sahilmgandhi 18:6a4db94011d3 351
sahilmgandhi 18:6a4db94011d3 352 /* Start DMA multi buffer transfer */
sahilmgandhi 18:6a4db94011d3 353 HAL_DMAEx_MultiBufferStart_IT(hdcmi->DMA_Handle, (uint32_t)&hdcmi->Instance->DR, (uint32_t)pData, SecondMemAddress, hdcmi->XferSize);
sahilmgandhi 18:6a4db94011d3 354 }
sahilmgandhi 18:6a4db94011d3 355
sahilmgandhi 18:6a4db94011d3 356 /* Enable Capture */
sahilmgandhi 18:6a4db94011d3 357 hdcmi->Instance->CR |= DCMI_CR_CAPTURE;
sahilmgandhi 18:6a4db94011d3 358
sahilmgandhi 18:6a4db94011d3 359 /* Release Lock */
sahilmgandhi 18:6a4db94011d3 360 __HAL_UNLOCK(hdcmi);
sahilmgandhi 18:6a4db94011d3 361
sahilmgandhi 18:6a4db94011d3 362 /* Return function status */
sahilmgandhi 18:6a4db94011d3 363 return HAL_OK;
sahilmgandhi 18:6a4db94011d3 364 }
sahilmgandhi 18:6a4db94011d3 365
sahilmgandhi 18:6a4db94011d3 366 /**
sahilmgandhi 18:6a4db94011d3 367 * @brief Disable DCMI DMA request and Disable DCMI capture
sahilmgandhi 18:6a4db94011d3 368 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 369 * the configuration information for DCMI.
sahilmgandhi 18:6a4db94011d3 370 * @retval HAL status
sahilmgandhi 18:6a4db94011d3 371 */
sahilmgandhi 18:6a4db94011d3 372 HAL_StatusTypeDef HAL_DCMI_Stop(DCMI_HandleTypeDef* hdcmi)
sahilmgandhi 18:6a4db94011d3 373 {
sahilmgandhi 18:6a4db94011d3 374 __IO uint32_t count = SystemCoreClock / HAL_TIMEOUT_DCMI_STOP;
sahilmgandhi 18:6a4db94011d3 375 HAL_StatusTypeDef status = HAL_OK;
sahilmgandhi 18:6a4db94011d3 376
sahilmgandhi 18:6a4db94011d3 377 /* Process locked */
sahilmgandhi 18:6a4db94011d3 378 __HAL_LOCK(hdcmi);
sahilmgandhi 18:6a4db94011d3 379
sahilmgandhi 18:6a4db94011d3 380 /* Lock the DCMI peripheral state */
sahilmgandhi 18:6a4db94011d3 381 hdcmi->State = HAL_DCMI_STATE_BUSY;
sahilmgandhi 18:6a4db94011d3 382
sahilmgandhi 18:6a4db94011d3 383 /* Disable Capture */
sahilmgandhi 18:6a4db94011d3 384 hdcmi->Instance->CR &= ~(DCMI_CR_CAPTURE);
sahilmgandhi 18:6a4db94011d3 385
sahilmgandhi 18:6a4db94011d3 386 /* Check if the DCMI capture effectively disabled */
sahilmgandhi 18:6a4db94011d3 387 do
sahilmgandhi 18:6a4db94011d3 388 {
sahilmgandhi 18:6a4db94011d3 389 if (count-- == 0)
sahilmgandhi 18:6a4db94011d3 390 {
sahilmgandhi 18:6a4db94011d3 391 /* Update error code */
sahilmgandhi 18:6a4db94011d3 392 hdcmi->ErrorCode |= HAL_DCMI_ERROR_TIMEOUT;
sahilmgandhi 18:6a4db94011d3 393
sahilmgandhi 18:6a4db94011d3 394 status = HAL_TIMEOUT;
sahilmgandhi 18:6a4db94011d3 395 }
sahilmgandhi 18:6a4db94011d3 396 }
sahilmgandhi 18:6a4db94011d3 397 while((hdcmi->Instance->CR & DCMI_CR_CAPTURE) != 0);
sahilmgandhi 18:6a4db94011d3 398
sahilmgandhi 18:6a4db94011d3 399 /* Disable the DCMI */
sahilmgandhi 18:6a4db94011d3 400 __HAL_DCMI_DISABLE(hdcmi);
sahilmgandhi 18:6a4db94011d3 401
sahilmgandhi 18:6a4db94011d3 402 /* Disable the DMA */
sahilmgandhi 18:6a4db94011d3 403 HAL_DMA_Abort(hdcmi->DMA_Handle);
sahilmgandhi 18:6a4db94011d3 404
sahilmgandhi 18:6a4db94011d3 405 /* Update error code */
sahilmgandhi 18:6a4db94011d3 406 hdcmi->ErrorCode |= HAL_DCMI_ERROR_NONE;
sahilmgandhi 18:6a4db94011d3 407
sahilmgandhi 18:6a4db94011d3 408 /* Change DCMI state */
sahilmgandhi 18:6a4db94011d3 409 hdcmi->State = HAL_DCMI_STATE_READY;
sahilmgandhi 18:6a4db94011d3 410
sahilmgandhi 18:6a4db94011d3 411 /* Process Unlocked */
sahilmgandhi 18:6a4db94011d3 412 __HAL_UNLOCK(hdcmi);
sahilmgandhi 18:6a4db94011d3 413
sahilmgandhi 18:6a4db94011d3 414 /* Return function status */
sahilmgandhi 18:6a4db94011d3 415 return status;
sahilmgandhi 18:6a4db94011d3 416 }
sahilmgandhi 18:6a4db94011d3 417
sahilmgandhi 18:6a4db94011d3 418 HAL_StatusTypeDef HAL_DCMI_Suspend(DCMI_HandleTypeDef* hdcmi)
sahilmgandhi 18:6a4db94011d3 419 {
sahilmgandhi 18:6a4db94011d3 420 __IO uint32_t count = SystemCoreClock / HAL_TIMEOUT_DCMI_STOP;
sahilmgandhi 18:6a4db94011d3 421 HAL_StatusTypeDef status = HAL_OK;
sahilmgandhi 18:6a4db94011d3 422
sahilmgandhi 18:6a4db94011d3 423 /* Process locked */
sahilmgandhi 18:6a4db94011d3 424 __HAL_LOCK(hdcmi);
sahilmgandhi 18:6a4db94011d3 425
sahilmgandhi 18:6a4db94011d3 426 if(hdcmi->State == HAL_DCMI_STATE_BUSY)
sahilmgandhi 18:6a4db94011d3 427 {
sahilmgandhi 18:6a4db94011d3 428 /* Change DCMI state */
sahilmgandhi 18:6a4db94011d3 429 hdcmi->State = HAL_DCMI_STATE_SUSPENDED;
sahilmgandhi 18:6a4db94011d3 430
sahilmgandhi 18:6a4db94011d3 431 /* Disable Capture */
sahilmgandhi 18:6a4db94011d3 432 hdcmi->Instance->CR &= ~(DCMI_CR_CAPTURE);
sahilmgandhi 18:6a4db94011d3 433
sahilmgandhi 18:6a4db94011d3 434 /* Check if the DCMI capture effectively disabled */
sahilmgandhi 18:6a4db94011d3 435 do
sahilmgandhi 18:6a4db94011d3 436 {
sahilmgandhi 18:6a4db94011d3 437 if (count-- == 0)
sahilmgandhi 18:6a4db94011d3 438 {
sahilmgandhi 18:6a4db94011d3 439 /* Update error code */
sahilmgandhi 18:6a4db94011d3 440 hdcmi->ErrorCode |= HAL_DCMI_ERROR_TIMEOUT;
sahilmgandhi 18:6a4db94011d3 441
sahilmgandhi 18:6a4db94011d3 442 /* Change DCMI state */
sahilmgandhi 18:6a4db94011d3 443 hdcmi->State = HAL_DCMI_STATE_READY;
sahilmgandhi 18:6a4db94011d3 444
sahilmgandhi 18:6a4db94011d3 445 status = HAL_TIMEOUT;
sahilmgandhi 18:6a4db94011d3 446 break;
sahilmgandhi 18:6a4db94011d3 447 }
sahilmgandhi 18:6a4db94011d3 448 }
sahilmgandhi 18:6a4db94011d3 449 while((hdcmi->Instance->CR & DCMI_CR_CAPTURE) != 0);
sahilmgandhi 18:6a4db94011d3 450 }
sahilmgandhi 18:6a4db94011d3 451 /* Process Unlocked */
sahilmgandhi 18:6a4db94011d3 452 __HAL_UNLOCK(hdcmi);
sahilmgandhi 18:6a4db94011d3 453
sahilmgandhi 18:6a4db94011d3 454 /* Return function status */
sahilmgandhi 18:6a4db94011d3 455 return status;
sahilmgandhi 18:6a4db94011d3 456 }
sahilmgandhi 18:6a4db94011d3 457
sahilmgandhi 18:6a4db94011d3 458 /**
sahilmgandhi 18:6a4db94011d3 459 * @brief Resume DCMI capture
sahilmgandhi 18:6a4db94011d3 460 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 461 * the configuration information for DCMI.
sahilmgandhi 18:6a4db94011d3 462 * @retval HAL status
sahilmgandhi 18:6a4db94011d3 463 */
sahilmgandhi 18:6a4db94011d3 464 HAL_StatusTypeDef HAL_DCMI_Resume(DCMI_HandleTypeDef* hdcmi)
sahilmgandhi 18:6a4db94011d3 465 {
sahilmgandhi 18:6a4db94011d3 466 /* Process locked */
sahilmgandhi 18:6a4db94011d3 467 __HAL_LOCK(hdcmi);
sahilmgandhi 18:6a4db94011d3 468
sahilmgandhi 18:6a4db94011d3 469 if(hdcmi->State == HAL_DCMI_STATE_SUSPENDED)
sahilmgandhi 18:6a4db94011d3 470 {
sahilmgandhi 18:6a4db94011d3 471 /* Change DCMI state */
sahilmgandhi 18:6a4db94011d3 472 hdcmi->State = HAL_DCMI_STATE_BUSY;
sahilmgandhi 18:6a4db94011d3 473
sahilmgandhi 18:6a4db94011d3 474 /* Disable Capture */
sahilmgandhi 18:6a4db94011d3 475 hdcmi->Instance->CR |= DCMI_CR_CAPTURE;
sahilmgandhi 18:6a4db94011d3 476 }
sahilmgandhi 18:6a4db94011d3 477 /* Process Unlocked */
sahilmgandhi 18:6a4db94011d3 478 __HAL_UNLOCK(hdcmi);
sahilmgandhi 18:6a4db94011d3 479
sahilmgandhi 18:6a4db94011d3 480 /* Return function status */
sahilmgandhi 18:6a4db94011d3 481 return HAL_OK;
sahilmgandhi 18:6a4db94011d3 482 }
sahilmgandhi 18:6a4db94011d3 483
sahilmgandhi 18:6a4db94011d3 484 /**
sahilmgandhi 18:6a4db94011d3 485 * @brief Handles DCMI interrupt request.
sahilmgandhi 18:6a4db94011d3 486 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 487 * the configuration information for the DCMI.
sahilmgandhi 18:6a4db94011d3 488 * @retval None
sahilmgandhi 18:6a4db94011d3 489 */
sahilmgandhi 18:6a4db94011d3 490 void HAL_DCMI_IRQHandler(DCMI_HandleTypeDef *hdcmi)
sahilmgandhi 18:6a4db94011d3 491 {
sahilmgandhi 18:6a4db94011d3 492 uint32_t isr_value = READ_REG(hdcmi->Instance->MISR);
sahilmgandhi 18:6a4db94011d3 493
sahilmgandhi 18:6a4db94011d3 494 /* Synchronization error interrupt management *******************************/
sahilmgandhi 18:6a4db94011d3 495 if((isr_value & DCMI_FLAG_ERRRI) == DCMI_FLAG_ERRRI)
sahilmgandhi 18:6a4db94011d3 496 {
sahilmgandhi 18:6a4db94011d3 497 /* Clear the Synchronization error flag */
sahilmgandhi 18:6a4db94011d3 498 __HAL_DCMI_CLEAR_FLAG(hdcmi, DCMI_FLAG_ERRRI);
sahilmgandhi 18:6a4db94011d3 499
sahilmgandhi 18:6a4db94011d3 500 /* Update error code */
sahilmgandhi 18:6a4db94011d3 501 hdcmi->ErrorCode |= HAL_DCMI_ERROR_SYNC;
sahilmgandhi 18:6a4db94011d3 502
sahilmgandhi 18:6a4db94011d3 503 /* Change DCMI state */
sahilmgandhi 18:6a4db94011d3 504 hdcmi->State = HAL_DCMI_STATE_ERROR;
sahilmgandhi 18:6a4db94011d3 505
sahilmgandhi 18:6a4db94011d3 506 /* Set the synchronization error callback */
sahilmgandhi 18:6a4db94011d3 507 hdcmi->DMA_Handle->XferAbortCallback = DCMI_DMAError;
sahilmgandhi 18:6a4db94011d3 508
sahilmgandhi 18:6a4db94011d3 509 /* Abort the DMA Transfer */
sahilmgandhi 18:6a4db94011d3 510 HAL_DMA_Abort_IT(hdcmi->DMA_Handle);
sahilmgandhi 18:6a4db94011d3 511 }
sahilmgandhi 18:6a4db94011d3 512 /* Overflow interrupt management ********************************************/
sahilmgandhi 18:6a4db94011d3 513 if((isr_value & DCMI_FLAG_OVRRI) == DCMI_FLAG_OVRRI)
sahilmgandhi 18:6a4db94011d3 514 {
sahilmgandhi 18:6a4db94011d3 515 /* Clear the Overflow flag */
sahilmgandhi 18:6a4db94011d3 516 __HAL_DCMI_CLEAR_FLAG(hdcmi, DCMI_FLAG_OVRRI);
sahilmgandhi 18:6a4db94011d3 517
sahilmgandhi 18:6a4db94011d3 518 /* Update error code */
sahilmgandhi 18:6a4db94011d3 519 hdcmi->ErrorCode |= HAL_DCMI_ERROR_OVR;
sahilmgandhi 18:6a4db94011d3 520
sahilmgandhi 18:6a4db94011d3 521 /* Change DCMI state */
sahilmgandhi 18:6a4db94011d3 522 hdcmi->State = HAL_DCMI_STATE_ERROR;
sahilmgandhi 18:6a4db94011d3 523
sahilmgandhi 18:6a4db94011d3 524 /* Set the overflow callback */
sahilmgandhi 18:6a4db94011d3 525 hdcmi->DMA_Handle->XferAbortCallback = DCMI_DMAError;
sahilmgandhi 18:6a4db94011d3 526
sahilmgandhi 18:6a4db94011d3 527 /* Abort the DMA Transfer */
sahilmgandhi 18:6a4db94011d3 528 HAL_DMA_Abort_IT(hdcmi->DMA_Handle);
sahilmgandhi 18:6a4db94011d3 529 }
sahilmgandhi 18:6a4db94011d3 530 /* Line Interrupt management ************************************************/
sahilmgandhi 18:6a4db94011d3 531 if((isr_value & DCMI_FLAG_LINERI) == DCMI_FLAG_LINERI)
sahilmgandhi 18:6a4db94011d3 532 {
sahilmgandhi 18:6a4db94011d3 533 /* Clear the Line interrupt flag */
sahilmgandhi 18:6a4db94011d3 534 __HAL_DCMI_CLEAR_FLAG(hdcmi, DCMI_FLAG_LINERI);
sahilmgandhi 18:6a4db94011d3 535
sahilmgandhi 18:6a4db94011d3 536 /* Line interrupt Callback */
sahilmgandhi 18:6a4db94011d3 537 HAL_DCMI_LineEventCallback(hdcmi);
sahilmgandhi 18:6a4db94011d3 538 }
sahilmgandhi 18:6a4db94011d3 539 /* VSYNC interrupt management ***********************************************/
sahilmgandhi 18:6a4db94011d3 540 if((isr_value & DCMI_FLAG_VSYNCRI) == DCMI_FLAG_VSYNCRI)
sahilmgandhi 18:6a4db94011d3 541 {
sahilmgandhi 18:6a4db94011d3 542 /* Clear the VSYNC flag */
sahilmgandhi 18:6a4db94011d3 543 __HAL_DCMI_CLEAR_FLAG(hdcmi, DCMI_FLAG_VSYNCRI);
sahilmgandhi 18:6a4db94011d3 544
sahilmgandhi 18:6a4db94011d3 545 /* VSYNC Callback */
sahilmgandhi 18:6a4db94011d3 546 HAL_DCMI_VsyncEventCallback(hdcmi);
sahilmgandhi 18:6a4db94011d3 547 }
sahilmgandhi 18:6a4db94011d3 548 /* FRAME interrupt management ***********************************************/
sahilmgandhi 18:6a4db94011d3 549 if((isr_value & DCMI_FLAG_FRAMERI) == DCMI_FLAG_FRAMERI)
sahilmgandhi 18:6a4db94011d3 550 {
sahilmgandhi 18:6a4db94011d3 551 /* When snapshot mode, disable Vsync, Error and Overrun interrupts */
sahilmgandhi 18:6a4db94011d3 552 if((hdcmi->Instance->CR & DCMI_CR_CM) == DCMI_MODE_SNAPSHOT)
sahilmgandhi 18:6a4db94011d3 553 {
sahilmgandhi 18:6a4db94011d3 554 /* Disable the Line, Vsync, Error and Overrun interrupts */
sahilmgandhi 18:6a4db94011d3 555 __HAL_DCMI_DISABLE_IT(hdcmi, DCMI_IT_LINE | DCMI_IT_VSYNC | DCMI_IT_ERR | DCMI_IT_OVR);
sahilmgandhi 18:6a4db94011d3 556 }
sahilmgandhi 18:6a4db94011d3 557
sahilmgandhi 18:6a4db94011d3 558 /* Disable the Frame interrupt */
sahilmgandhi 18:6a4db94011d3 559 __HAL_DCMI_DISABLE_IT(hdcmi, DCMI_IT_FRAME);
sahilmgandhi 18:6a4db94011d3 560
sahilmgandhi 18:6a4db94011d3 561 /* Frame Callback */
sahilmgandhi 18:6a4db94011d3 562 HAL_DCMI_FrameEventCallback(hdcmi);
sahilmgandhi 18:6a4db94011d3 563 }
sahilmgandhi 18:6a4db94011d3 564 }
sahilmgandhi 18:6a4db94011d3 565
sahilmgandhi 18:6a4db94011d3 566 /**
sahilmgandhi 18:6a4db94011d3 567 * @brief Error DCMI callback.
sahilmgandhi 18:6a4db94011d3 568 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 569 * the configuration information for DCMI.
sahilmgandhi 18:6a4db94011d3 570 * @retval None
sahilmgandhi 18:6a4db94011d3 571 */
sahilmgandhi 18:6a4db94011d3 572 __weak void HAL_DCMI_ErrorCallback(DCMI_HandleTypeDef *hdcmi)
sahilmgandhi 18:6a4db94011d3 573 {
sahilmgandhi 18:6a4db94011d3 574 /* Prevent unused argument(s) compilation warning */
sahilmgandhi 18:6a4db94011d3 575 UNUSED(hdcmi);
sahilmgandhi 18:6a4db94011d3 576 /* NOTE : This function Should not be modified, when the callback is needed,
sahilmgandhi 18:6a4db94011d3 577 the HAL_DCMI_ErrorCallback could be implemented in the user file
sahilmgandhi 18:6a4db94011d3 578 */
sahilmgandhi 18:6a4db94011d3 579 }
sahilmgandhi 18:6a4db94011d3 580
sahilmgandhi 18:6a4db94011d3 581 /**
sahilmgandhi 18:6a4db94011d3 582 * @brief Line Event callback.
sahilmgandhi 18:6a4db94011d3 583 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 584 * the configuration information for DCMI.
sahilmgandhi 18:6a4db94011d3 585 * @retval None
sahilmgandhi 18:6a4db94011d3 586 */
sahilmgandhi 18:6a4db94011d3 587 __weak void HAL_DCMI_LineEventCallback(DCMI_HandleTypeDef *hdcmi)
sahilmgandhi 18:6a4db94011d3 588 {
sahilmgandhi 18:6a4db94011d3 589 /* Prevent unused argument(s) compilation warning */
sahilmgandhi 18:6a4db94011d3 590 UNUSED(hdcmi);
sahilmgandhi 18:6a4db94011d3 591 /* NOTE : This function Should not be modified, when the callback is needed,
sahilmgandhi 18:6a4db94011d3 592 the HAL_DCMI_LineEventCallback could be implemented in the user file
sahilmgandhi 18:6a4db94011d3 593 */
sahilmgandhi 18:6a4db94011d3 594 }
sahilmgandhi 18:6a4db94011d3 595
sahilmgandhi 18:6a4db94011d3 596 /**
sahilmgandhi 18:6a4db94011d3 597 * @brief VSYNC Event callback.
sahilmgandhi 18:6a4db94011d3 598 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 599 * the configuration information for DCMI.
sahilmgandhi 18:6a4db94011d3 600 * @retval None
sahilmgandhi 18:6a4db94011d3 601 */
sahilmgandhi 18:6a4db94011d3 602 __weak void HAL_DCMI_VsyncEventCallback(DCMI_HandleTypeDef *hdcmi)
sahilmgandhi 18:6a4db94011d3 603 {
sahilmgandhi 18:6a4db94011d3 604 /* Prevent unused argument(s) compilation warning */
sahilmgandhi 18:6a4db94011d3 605 UNUSED(hdcmi);
sahilmgandhi 18:6a4db94011d3 606 /* NOTE : This function Should not be modified, when the callback is needed,
sahilmgandhi 18:6a4db94011d3 607 the HAL_DCMI_VsyncEventCallback could be implemented in the user file
sahilmgandhi 18:6a4db94011d3 608 */
sahilmgandhi 18:6a4db94011d3 609 }
sahilmgandhi 18:6a4db94011d3 610
sahilmgandhi 18:6a4db94011d3 611 /**
sahilmgandhi 18:6a4db94011d3 612 * @brief Frame Event callback.
sahilmgandhi 18:6a4db94011d3 613 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 614 * the configuration information for DCMI.
sahilmgandhi 18:6a4db94011d3 615 * @retval None
sahilmgandhi 18:6a4db94011d3 616 */
sahilmgandhi 18:6a4db94011d3 617 __weak void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi)
sahilmgandhi 18:6a4db94011d3 618 {
sahilmgandhi 18:6a4db94011d3 619 /* Prevent unused argument(s) compilation warning */
sahilmgandhi 18:6a4db94011d3 620 UNUSED(hdcmi);
sahilmgandhi 18:6a4db94011d3 621 /* NOTE : This function Should not be modified, when the callback is needed,
sahilmgandhi 18:6a4db94011d3 622 the HAL_DCMI_FrameEventCallback could be implemented in the user file
sahilmgandhi 18:6a4db94011d3 623 */
sahilmgandhi 18:6a4db94011d3 624 }
sahilmgandhi 18:6a4db94011d3 625
sahilmgandhi 18:6a4db94011d3 626 /**
sahilmgandhi 18:6a4db94011d3 627 * @}
sahilmgandhi 18:6a4db94011d3 628 */
sahilmgandhi 18:6a4db94011d3 629
sahilmgandhi 18:6a4db94011d3 630 /** @defgroup DCMI_Exported_Functions_Group3 Peripheral Control functions
sahilmgandhi 18:6a4db94011d3 631 * @brief Peripheral Control functions
sahilmgandhi 18:6a4db94011d3 632 *
sahilmgandhi 18:6a4db94011d3 633 @verbatim
sahilmgandhi 18:6a4db94011d3 634 ===============================================================================
sahilmgandhi 18:6a4db94011d3 635 ##### Peripheral Control functions #####
sahilmgandhi 18:6a4db94011d3 636 ===============================================================================
sahilmgandhi 18:6a4db94011d3 637 [..] This section provides functions allowing to:
sahilmgandhi 18:6a4db94011d3 638 (+) Configure the CROP feature.
sahilmgandhi 18:6a4db94011d3 639 (+) Enable/Disable the CROP feature.
sahilmgandhi 18:6a4db94011d3 640
sahilmgandhi 18:6a4db94011d3 641 @endverbatim
sahilmgandhi 18:6a4db94011d3 642 * @{
sahilmgandhi 18:6a4db94011d3 643 */
sahilmgandhi 18:6a4db94011d3 644
sahilmgandhi 18:6a4db94011d3 645 /**
sahilmgandhi 18:6a4db94011d3 646 * @brief Configure the DCMI CROP coordinate.
sahilmgandhi 18:6a4db94011d3 647 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 648 * the configuration information for DCMI.
sahilmgandhi 18:6a4db94011d3 649 * @param X0: DCMI window X offset
sahilmgandhi 18:6a4db94011d3 650 * @param Y0: DCMI window Y offset
sahilmgandhi 18:6a4db94011d3 651 * @param XSize: DCMI Pixel per line
sahilmgandhi 18:6a4db94011d3 652 * @param YSize: DCMI Line number
sahilmgandhi 18:6a4db94011d3 653 * @retval HAL status
sahilmgandhi 18:6a4db94011d3 654 */
sahilmgandhi 18:6a4db94011d3 655 HAL_StatusTypeDef HAL_DCMI_ConfigCrop(DCMI_HandleTypeDef *hdcmi, uint32_t X0, uint32_t Y0, uint32_t XSize, uint32_t YSize)
sahilmgandhi 18:6a4db94011d3 656 {
sahilmgandhi 18:6a4db94011d3 657 /* Process Locked */
sahilmgandhi 18:6a4db94011d3 658 __HAL_LOCK(hdcmi);
sahilmgandhi 18:6a4db94011d3 659
sahilmgandhi 18:6a4db94011d3 660 /* Lock the DCMI peripheral state */
sahilmgandhi 18:6a4db94011d3 661 hdcmi->State = HAL_DCMI_STATE_BUSY;
sahilmgandhi 18:6a4db94011d3 662
sahilmgandhi 18:6a4db94011d3 663 /* Check the parameters */
sahilmgandhi 18:6a4db94011d3 664 assert_param(IS_DCMI_WINDOW_COORDINATE(X0));
sahilmgandhi 18:6a4db94011d3 665 assert_param(IS_DCMI_WINDOW_COORDINATE(YSize));
sahilmgandhi 18:6a4db94011d3 666 assert_param(IS_DCMI_WINDOW_COORDINATE(XSize));
sahilmgandhi 18:6a4db94011d3 667 assert_param(IS_DCMI_WINDOW_HEIGHT(Y0));
sahilmgandhi 18:6a4db94011d3 668
sahilmgandhi 18:6a4db94011d3 669 /* Configure CROP */
sahilmgandhi 18:6a4db94011d3 670 hdcmi->Instance->CWSIZER = (XSize | (YSize << DCMI_POSITION_CWSIZE_VLINE));
sahilmgandhi 18:6a4db94011d3 671 hdcmi->Instance->CWSTRTR = (X0 | (Y0 << DCMI_POSITION_CWSTRT_VST));
sahilmgandhi 18:6a4db94011d3 672
sahilmgandhi 18:6a4db94011d3 673 /* Initialize the DCMI state*/
sahilmgandhi 18:6a4db94011d3 674 hdcmi->State = HAL_DCMI_STATE_READY;
sahilmgandhi 18:6a4db94011d3 675
sahilmgandhi 18:6a4db94011d3 676 /* Process Unlocked */
sahilmgandhi 18:6a4db94011d3 677 __HAL_UNLOCK(hdcmi);
sahilmgandhi 18:6a4db94011d3 678
sahilmgandhi 18:6a4db94011d3 679 return HAL_OK;
sahilmgandhi 18:6a4db94011d3 680 }
sahilmgandhi 18:6a4db94011d3 681
sahilmgandhi 18:6a4db94011d3 682 /**
sahilmgandhi 18:6a4db94011d3 683 * @brief Disable the Crop feature.
sahilmgandhi 18:6a4db94011d3 684 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 685 * the configuration information for DCMI.
sahilmgandhi 18:6a4db94011d3 686 * @retval HAL status
sahilmgandhi 18:6a4db94011d3 687 */
sahilmgandhi 18:6a4db94011d3 688 HAL_StatusTypeDef HAL_DCMI_DisableCrop(DCMI_HandleTypeDef *hdcmi)
sahilmgandhi 18:6a4db94011d3 689 {
sahilmgandhi 18:6a4db94011d3 690 /* Process Locked */
sahilmgandhi 18:6a4db94011d3 691 __HAL_LOCK(hdcmi);
sahilmgandhi 18:6a4db94011d3 692
sahilmgandhi 18:6a4db94011d3 693 /* Lock the DCMI peripheral state */
sahilmgandhi 18:6a4db94011d3 694 hdcmi->State = HAL_DCMI_STATE_BUSY;
sahilmgandhi 18:6a4db94011d3 695
sahilmgandhi 18:6a4db94011d3 696 /* Disable DCMI Crop feature */
sahilmgandhi 18:6a4db94011d3 697 hdcmi->Instance->CR &= ~(uint32_t)DCMI_CR_CROP;
sahilmgandhi 18:6a4db94011d3 698
sahilmgandhi 18:6a4db94011d3 699 /* Change the DCMI state*/
sahilmgandhi 18:6a4db94011d3 700 hdcmi->State = HAL_DCMI_STATE_READY;
sahilmgandhi 18:6a4db94011d3 701
sahilmgandhi 18:6a4db94011d3 702 /* Process Unlocked */
sahilmgandhi 18:6a4db94011d3 703 __HAL_UNLOCK(hdcmi);
sahilmgandhi 18:6a4db94011d3 704
sahilmgandhi 18:6a4db94011d3 705 return HAL_OK;
sahilmgandhi 18:6a4db94011d3 706 }
sahilmgandhi 18:6a4db94011d3 707
sahilmgandhi 18:6a4db94011d3 708 /**
sahilmgandhi 18:6a4db94011d3 709 * @brief Enable the Crop feature.
sahilmgandhi 18:6a4db94011d3 710 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 711 * the configuration information for DCMI.
sahilmgandhi 18:6a4db94011d3 712 * @retval HAL status
sahilmgandhi 18:6a4db94011d3 713 */
sahilmgandhi 18:6a4db94011d3 714 HAL_StatusTypeDef HAL_DCMI_EnableCrop(DCMI_HandleTypeDef *hdcmi)
sahilmgandhi 18:6a4db94011d3 715 {
sahilmgandhi 18:6a4db94011d3 716 /* Process Locked */
sahilmgandhi 18:6a4db94011d3 717 __HAL_LOCK(hdcmi);
sahilmgandhi 18:6a4db94011d3 718
sahilmgandhi 18:6a4db94011d3 719 /* Lock the DCMI peripheral state */
sahilmgandhi 18:6a4db94011d3 720 hdcmi->State = HAL_DCMI_STATE_BUSY;
sahilmgandhi 18:6a4db94011d3 721
sahilmgandhi 18:6a4db94011d3 722 /* Enable DCMI Crop feature */
sahilmgandhi 18:6a4db94011d3 723 hdcmi->Instance->CR |= (uint32_t)DCMI_CR_CROP;
sahilmgandhi 18:6a4db94011d3 724
sahilmgandhi 18:6a4db94011d3 725 /* Change the DCMI state*/
sahilmgandhi 18:6a4db94011d3 726 hdcmi->State = HAL_DCMI_STATE_READY;
sahilmgandhi 18:6a4db94011d3 727
sahilmgandhi 18:6a4db94011d3 728 /* Process Unlocked */
sahilmgandhi 18:6a4db94011d3 729 __HAL_UNLOCK(hdcmi);
sahilmgandhi 18:6a4db94011d3 730
sahilmgandhi 18:6a4db94011d3 731 return HAL_OK;
sahilmgandhi 18:6a4db94011d3 732 }
sahilmgandhi 18:6a4db94011d3 733
sahilmgandhi 18:6a4db94011d3 734 /**
sahilmgandhi 18:6a4db94011d3 735 * @}
sahilmgandhi 18:6a4db94011d3 736 */
sahilmgandhi 18:6a4db94011d3 737
sahilmgandhi 18:6a4db94011d3 738 /** @defgroup DCMI_Exported_Functions_Group4 Peripheral State functions
sahilmgandhi 18:6a4db94011d3 739 * @brief Peripheral State functions
sahilmgandhi 18:6a4db94011d3 740 *
sahilmgandhi 18:6a4db94011d3 741 @verbatim
sahilmgandhi 18:6a4db94011d3 742 ===============================================================================
sahilmgandhi 18:6a4db94011d3 743 ##### Peripheral State and Errors functions #####
sahilmgandhi 18:6a4db94011d3 744 ===============================================================================
sahilmgandhi 18:6a4db94011d3 745 [..]
sahilmgandhi 18:6a4db94011d3 746 This subsection provides functions allowing to
sahilmgandhi 18:6a4db94011d3 747 (+) Check the DCMI state.
sahilmgandhi 18:6a4db94011d3 748 (+) Get the specific DCMI error flag.
sahilmgandhi 18:6a4db94011d3 749
sahilmgandhi 18:6a4db94011d3 750 @endverbatim
sahilmgandhi 18:6a4db94011d3 751 * @{
sahilmgandhi 18:6a4db94011d3 752 */
sahilmgandhi 18:6a4db94011d3 753
sahilmgandhi 18:6a4db94011d3 754 /**
sahilmgandhi 18:6a4db94011d3 755 * @brief Return the DCMI state
sahilmgandhi 18:6a4db94011d3 756 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 757 * the configuration information for DCMI.
sahilmgandhi 18:6a4db94011d3 758 * @retval HAL state
sahilmgandhi 18:6a4db94011d3 759 */
sahilmgandhi 18:6a4db94011d3 760 HAL_DCMI_StateTypeDef HAL_DCMI_GetState(DCMI_HandleTypeDef *hdcmi)
sahilmgandhi 18:6a4db94011d3 761 {
sahilmgandhi 18:6a4db94011d3 762 return hdcmi->State;
sahilmgandhi 18:6a4db94011d3 763 }
sahilmgandhi 18:6a4db94011d3 764
sahilmgandhi 18:6a4db94011d3 765 /**
sahilmgandhi 18:6a4db94011d3 766 * @brief Return the DCMI error code
sahilmgandhi 18:6a4db94011d3 767 * @param hdcmi : pointer to a DCMI_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 768 * the configuration information for DCMI.
sahilmgandhi 18:6a4db94011d3 769 * @retval DCMI Error Code
sahilmgandhi 18:6a4db94011d3 770 */
sahilmgandhi 18:6a4db94011d3 771 uint32_t HAL_DCMI_GetError(DCMI_HandleTypeDef *hdcmi)
sahilmgandhi 18:6a4db94011d3 772 {
sahilmgandhi 18:6a4db94011d3 773 return hdcmi->ErrorCode;
sahilmgandhi 18:6a4db94011d3 774 }
sahilmgandhi 18:6a4db94011d3 775
sahilmgandhi 18:6a4db94011d3 776 /**
sahilmgandhi 18:6a4db94011d3 777 * @}
sahilmgandhi 18:6a4db94011d3 778 */
sahilmgandhi 18:6a4db94011d3 779
sahilmgandhi 18:6a4db94011d3 780 /* Private functions ---------------------------------------------------------*/
sahilmgandhi 18:6a4db94011d3 781 /** @defgroup DCMI_Private_Functions DCMI Private Functions
sahilmgandhi 18:6a4db94011d3 782 * @{
sahilmgandhi 18:6a4db94011d3 783 */
sahilmgandhi 18:6a4db94011d3 784
sahilmgandhi 18:6a4db94011d3 785 /**
sahilmgandhi 18:6a4db94011d3 786 * @brief DMA conversion complete callback.
sahilmgandhi 18:6a4db94011d3 787 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 788 * the configuration information for the specified DMA module.
sahilmgandhi 18:6a4db94011d3 789 * @retval None
sahilmgandhi 18:6a4db94011d3 790 */
sahilmgandhi 18:6a4db94011d3 791 static void DCMI_DMAXferCplt(DMA_HandleTypeDef *hdma)
sahilmgandhi 18:6a4db94011d3 792 {
sahilmgandhi 18:6a4db94011d3 793 uint32_t tmp = 0U;
sahilmgandhi 18:6a4db94011d3 794
sahilmgandhi 18:6a4db94011d3 795 DCMI_HandleTypeDef* hdcmi = ( DCMI_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
sahilmgandhi 18:6a4db94011d3 796
sahilmgandhi 18:6a4db94011d3 797 if(hdcmi->XferCount != 0)
sahilmgandhi 18:6a4db94011d3 798 {
sahilmgandhi 18:6a4db94011d3 799 /* Update memory 0 address location */
sahilmgandhi 18:6a4db94011d3 800 tmp = ((hdcmi->DMA_Handle->Instance->CR) & DMA_SxCR_CT);
sahilmgandhi 18:6a4db94011d3 801 if(((hdcmi->XferCount % 2U) == 0U) && (tmp != 0U))
sahilmgandhi 18:6a4db94011d3 802 {
sahilmgandhi 18:6a4db94011d3 803 tmp = hdcmi->DMA_Handle->Instance->M0AR;
sahilmgandhi 18:6a4db94011d3 804 HAL_DMAEx_ChangeMemory(hdcmi->DMA_Handle, (tmp + (8U*hdcmi->XferSize)), MEMORY0);
sahilmgandhi 18:6a4db94011d3 805 hdcmi->XferCount--;
sahilmgandhi 18:6a4db94011d3 806 }
sahilmgandhi 18:6a4db94011d3 807 /* Update memory 1 address location */
sahilmgandhi 18:6a4db94011d3 808 else if((hdcmi->DMA_Handle->Instance->CR & DMA_SxCR_CT) == 0U)
sahilmgandhi 18:6a4db94011d3 809 {
sahilmgandhi 18:6a4db94011d3 810 tmp = hdcmi->DMA_Handle->Instance->M1AR;
sahilmgandhi 18:6a4db94011d3 811 HAL_DMAEx_ChangeMemory(hdcmi->DMA_Handle, (tmp + (8U*hdcmi->XferSize)), MEMORY1);
sahilmgandhi 18:6a4db94011d3 812 hdcmi->XferCount--;
sahilmgandhi 18:6a4db94011d3 813 }
sahilmgandhi 18:6a4db94011d3 814 }
sahilmgandhi 18:6a4db94011d3 815 /* Update memory 0 address location */
sahilmgandhi 18:6a4db94011d3 816 else if((hdcmi->DMA_Handle->Instance->CR & DMA_SxCR_CT) != 0U)
sahilmgandhi 18:6a4db94011d3 817 {
sahilmgandhi 18:6a4db94011d3 818 hdcmi->DMA_Handle->Instance->M0AR = hdcmi->pBuffPtr;
sahilmgandhi 18:6a4db94011d3 819 }
sahilmgandhi 18:6a4db94011d3 820 /* Update memory 1 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 tmp = hdcmi->pBuffPtr;
sahilmgandhi 18:6a4db94011d3 824 hdcmi->DMA_Handle->Instance->M1AR = (tmp + (4U*hdcmi->XferSize));
sahilmgandhi 18:6a4db94011d3 825 hdcmi->XferCount = hdcmi->XferTransferNumber;
sahilmgandhi 18:6a4db94011d3 826 }
sahilmgandhi 18:6a4db94011d3 827
sahilmgandhi 18:6a4db94011d3 828 /* Check if the frame is transferred */
sahilmgandhi 18:6a4db94011d3 829 if(hdcmi->XferCount == hdcmi->XferTransferNumber)
sahilmgandhi 18:6a4db94011d3 830 {
sahilmgandhi 18:6a4db94011d3 831 /* Enable the Frame interrupt */
sahilmgandhi 18:6a4db94011d3 832 __HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_FRAME);
sahilmgandhi 18:6a4db94011d3 833
sahilmgandhi 18:6a4db94011d3 834 /* When snapshot mode, set dcmi state to ready */
sahilmgandhi 18:6a4db94011d3 835 if((hdcmi->Instance->CR & DCMI_CR_CM) == DCMI_MODE_SNAPSHOT)
sahilmgandhi 18:6a4db94011d3 836 {
sahilmgandhi 18:6a4db94011d3 837 hdcmi->State= HAL_DCMI_STATE_READY;
sahilmgandhi 18:6a4db94011d3 838 }
sahilmgandhi 18:6a4db94011d3 839 }
sahilmgandhi 18:6a4db94011d3 840 }
sahilmgandhi 18:6a4db94011d3 841
sahilmgandhi 18:6a4db94011d3 842 /**
sahilmgandhi 18:6a4db94011d3 843 * @brief DMA error callback
sahilmgandhi 18:6a4db94011d3 844 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
sahilmgandhi 18:6a4db94011d3 845 * the configuration information for the specified DMA module.
sahilmgandhi 18:6a4db94011d3 846 * @retval None
sahilmgandhi 18:6a4db94011d3 847 */
sahilmgandhi 18:6a4db94011d3 848 static void DCMI_DMAError(DMA_HandleTypeDef *hdma)
sahilmgandhi 18:6a4db94011d3 849 {
sahilmgandhi 18:6a4db94011d3 850 DCMI_HandleTypeDef* hdcmi = ( DCMI_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
sahilmgandhi 18:6a4db94011d3 851
sahilmgandhi 18:6a4db94011d3 852 if(hdcmi->DMA_Handle->ErrorCode != HAL_DMA_ERROR_FE)
sahilmgandhi 18:6a4db94011d3 853 {
sahilmgandhi 18:6a4db94011d3 854 /* Initialize the DCMI state*/
sahilmgandhi 18:6a4db94011d3 855 hdcmi->State = HAL_DCMI_STATE_READY;
sahilmgandhi 18:6a4db94011d3 856 }
sahilmgandhi 18:6a4db94011d3 857
sahilmgandhi 18:6a4db94011d3 858 /* DCMI error Callback */
sahilmgandhi 18:6a4db94011d3 859 HAL_DCMI_ErrorCallback(hdcmi);
sahilmgandhi 18:6a4db94011d3 860 }
sahilmgandhi 18:6a4db94011d3 861
sahilmgandhi 18:6a4db94011d3 862 /**
sahilmgandhi 18:6a4db94011d3 863 * @}
sahilmgandhi 18:6a4db94011d3 864 */
sahilmgandhi 18:6a4db94011d3 865
sahilmgandhi 18:6a4db94011d3 866 /**
sahilmgandhi 18:6a4db94011d3 867 * @}
sahilmgandhi 18:6a4db94011d3 868 */
sahilmgandhi 18:6a4db94011d3 869 #endif /* STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\
sahilmgandhi 18:6a4db94011d3 870 STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx ||\
sahilmgandhi 18:6a4db94011d3 871 STM32F479xx */
sahilmgandhi 18:6a4db94011d3 872 #endif /* HAL_DCMI_MODULE_ENABLED */
sahilmgandhi 18:6a4db94011d3 873 /**
sahilmgandhi 18:6a4db94011d3 874 * @}
sahilmgandhi 18:6a4db94011d3 875 */
sahilmgandhi 18:6a4db94011d3 876
sahilmgandhi 18:6a4db94011d3 877 /**
sahilmgandhi 18:6a4db94011d3 878 * @}
sahilmgandhi 18:6a4db94011d3 879 */
sahilmgandhi 18:6a4db94011d3 880
sahilmgandhi 18:6a4db94011d3 881 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/