inport from local

Dependents:   Hobbyking_Cheetah_0511

Committer:
NYX
Date:
Mon Mar 16 06:35:48 2020 +0000
Revision:
0:85b3fd62ea1a
reinport to mbed;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
NYX 0:85b3fd62ea1a 1 /**
NYX 0:85b3fd62ea1a 2 ******************************************************************************
NYX 0:85b3fd62ea1a 3 * @file stm32f4xx_hal_dcmi_ex.c
NYX 0:85b3fd62ea1a 4 * @author MCD Application Team
NYX 0:85b3fd62ea1a 5 * @version V1.7.1
NYX 0:85b3fd62ea1a 6 * @date 14-April-2017
NYX 0:85b3fd62ea1a 7 * @brief DCMI Extension HAL module driver
NYX 0:85b3fd62ea1a 8 * This file provides firmware functions to manage the following
NYX 0:85b3fd62ea1a 9 * functionalities of DCMI extension peripheral:
NYX 0:85b3fd62ea1a 10 * + Extension features functions
NYX 0:85b3fd62ea1a 11 *
NYX 0:85b3fd62ea1a 12 @verbatim
NYX 0:85b3fd62ea1a 13 ==============================================================================
NYX 0:85b3fd62ea1a 14 ##### DCMI peripheral extension features #####
NYX 0:85b3fd62ea1a 15 ==============================================================================
NYX 0:85b3fd62ea1a 16
NYX 0:85b3fd62ea1a 17 [..] Comparing to other previous devices, the DCMI interface for STM32F446xx
NYX 0:85b3fd62ea1a 18 devices contains the following additional features :
NYX 0:85b3fd62ea1a 19
NYX 0:85b3fd62ea1a 20 (+) Support of Black and White cameras
NYX 0:85b3fd62ea1a 21
NYX 0:85b3fd62ea1a 22 ##### How to use this driver #####
NYX 0:85b3fd62ea1a 23 ==============================================================================
NYX 0:85b3fd62ea1a 24 [..] This driver provides functions to manage the Black and White feature
NYX 0:85b3fd62ea1a 25
NYX 0:85b3fd62ea1a 26 @endverbatim
NYX 0:85b3fd62ea1a 27 ******************************************************************************
NYX 0:85b3fd62ea1a 28 * @attention
NYX 0:85b3fd62ea1a 29 *
NYX 0:85b3fd62ea1a 30 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
NYX 0:85b3fd62ea1a 31 *
NYX 0:85b3fd62ea1a 32 * Redistribution and use in source and binary forms, with or without modification,
NYX 0:85b3fd62ea1a 33 * are permitted provided that the following conditions are met:
NYX 0:85b3fd62ea1a 34 * 1. Redistributions of source code must retain the above copyright notice,
NYX 0:85b3fd62ea1a 35 * this list of conditions and the following disclaimer.
NYX 0:85b3fd62ea1a 36 * 2. Redistributions in binary form must reproduce the above copyright notice,
NYX 0:85b3fd62ea1a 37 * this list of conditions and the following disclaimer in the documentation
NYX 0:85b3fd62ea1a 38 * and/or other materials provided with the distribution.
NYX 0:85b3fd62ea1a 39 * 3. Neither the name of STMicroelectronics nor the names of its contributors
NYX 0:85b3fd62ea1a 40 * may be used to endorse or promote products derived from this software
NYX 0:85b3fd62ea1a 41 * without specific prior written permission.
NYX 0:85b3fd62ea1a 42 *
NYX 0:85b3fd62ea1a 43 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
NYX 0:85b3fd62ea1a 44 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
NYX 0:85b3fd62ea1a 45 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
NYX 0:85b3fd62ea1a 46 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
NYX 0:85b3fd62ea1a 47 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
NYX 0:85b3fd62ea1a 48 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
NYX 0:85b3fd62ea1a 49 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
NYX 0:85b3fd62ea1a 50 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
NYX 0:85b3fd62ea1a 51 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
NYX 0:85b3fd62ea1a 52 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
NYX 0:85b3fd62ea1a 53 *
NYX 0:85b3fd62ea1a 54 ******************************************************************************
NYX 0:85b3fd62ea1a 55 */
NYX 0:85b3fd62ea1a 56
NYX 0:85b3fd62ea1a 57 /* Includes ------------------------------------------------------------------*/
NYX 0:85b3fd62ea1a 58 #include "stm32f4xx_hal.h"
NYX 0:85b3fd62ea1a 59
NYX 0:85b3fd62ea1a 60 /** @addtogroup STM32F4xx_HAL_Driver
NYX 0:85b3fd62ea1a 61 * @{
NYX 0:85b3fd62ea1a 62 */
NYX 0:85b3fd62ea1a 63 /** @defgroup DCMIEx DCMIEx
NYX 0:85b3fd62ea1a 64 * @brief DCMI Extended HAL module driver
NYX 0:85b3fd62ea1a 65 * @{
NYX 0:85b3fd62ea1a 66 */
NYX 0:85b3fd62ea1a 67
NYX 0:85b3fd62ea1a 68 #ifdef HAL_DCMI_MODULE_ENABLED
NYX 0:85b3fd62ea1a 69
NYX 0:85b3fd62ea1a 70 #if defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) ||\
NYX 0:85b3fd62ea1a 71 defined(STM32F439xx) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
NYX 0:85b3fd62ea1a 72 /* Private typedef -----------------------------------------------------------*/
NYX 0:85b3fd62ea1a 73 /* Private define ------------------------------------------------------------*/
NYX 0:85b3fd62ea1a 74 /* Private macro -------------------------------------------------------------*/
NYX 0:85b3fd62ea1a 75 /* Private variables ---------------------------------------------------------*/
NYX 0:85b3fd62ea1a 76 /* Private function prototypes -----------------------------------------------*/
NYX 0:85b3fd62ea1a 77 /* Exported functions --------------------------------------------------------*/
NYX 0:85b3fd62ea1a 78
NYX 0:85b3fd62ea1a 79 /** @defgroup DCMIEx_Exported_Functions DCMI Extended Exported Functions
NYX 0:85b3fd62ea1a 80 * @{
NYX 0:85b3fd62ea1a 81 */
NYX 0:85b3fd62ea1a 82
NYX 0:85b3fd62ea1a 83 /**
NYX 0:85b3fd62ea1a 84 * @}
NYX 0:85b3fd62ea1a 85 */
NYX 0:85b3fd62ea1a 86
NYX 0:85b3fd62ea1a 87 /** @addtogroup DCMI_Exported_Functions_Group1 Initialization and Configuration functions
NYX 0:85b3fd62ea1a 88 * @{
NYX 0:85b3fd62ea1a 89 */
NYX 0:85b3fd62ea1a 90
NYX 0:85b3fd62ea1a 91 /**
NYX 0:85b3fd62ea1a 92 * @brief Initializes the DCMI according to the specified
NYX 0:85b3fd62ea1a 93 * parameters in the DCMI_InitTypeDef and create the associated handle.
NYX 0:85b3fd62ea1a 94 * @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains
NYX 0:85b3fd62ea1a 95 * the configuration information for DCMI.
NYX 0:85b3fd62ea1a 96 * @retval HAL status
NYX 0:85b3fd62ea1a 97 */
NYX 0:85b3fd62ea1a 98 HAL_StatusTypeDef HAL_DCMI_Init(DCMI_HandleTypeDef *hdcmi)
NYX 0:85b3fd62ea1a 99 {
NYX 0:85b3fd62ea1a 100 /* Check the DCMI peripheral state */
NYX 0:85b3fd62ea1a 101 if(hdcmi == NULL)
NYX 0:85b3fd62ea1a 102 {
NYX 0:85b3fd62ea1a 103 return HAL_ERROR;
NYX 0:85b3fd62ea1a 104 }
NYX 0:85b3fd62ea1a 105
NYX 0:85b3fd62ea1a 106 /* Check function parameters */
NYX 0:85b3fd62ea1a 107 assert_param(IS_DCMI_ALL_INSTANCE(hdcmi->Instance));
NYX 0:85b3fd62ea1a 108 assert_param(IS_DCMI_PCKPOLARITY(hdcmi->Init.PCKPolarity));
NYX 0:85b3fd62ea1a 109 assert_param(IS_DCMI_VSPOLARITY(hdcmi->Init.VSPolarity));
NYX 0:85b3fd62ea1a 110 assert_param(IS_DCMI_HSPOLARITY(hdcmi->Init.HSPolarity));
NYX 0:85b3fd62ea1a 111 assert_param(IS_DCMI_SYNCHRO(hdcmi->Init.SynchroMode));
NYX 0:85b3fd62ea1a 112 assert_param(IS_DCMI_CAPTURE_RATE(hdcmi->Init.CaptureRate));
NYX 0:85b3fd62ea1a 113 assert_param(IS_DCMI_EXTENDED_DATA(hdcmi->Init.ExtendedDataMode));
NYX 0:85b3fd62ea1a 114 assert_param(IS_DCMI_MODE_JPEG(hdcmi->Init.JPEGMode));
NYX 0:85b3fd62ea1a 115 #if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
NYX 0:85b3fd62ea1a 116 assert_param(IS_DCMI_BYTE_SELECT_MODE(hdcmi->Init.ByteSelectMode));
NYX 0:85b3fd62ea1a 117 assert_param(IS_DCMI_BYTE_SELECT_START(hdcmi->Init.ByteSelectStart));
NYX 0:85b3fd62ea1a 118 assert_param(IS_DCMI_LINE_SELECT_MODE(hdcmi->Init.LineSelectMode));
NYX 0:85b3fd62ea1a 119 assert_param(IS_DCMI_LINE_SELECT_START(hdcmi->Init.LineSelectStart));
NYX 0:85b3fd62ea1a 120 #endif /* STM32F446xx || STM32F469xx || STM32F479xx */
NYX 0:85b3fd62ea1a 121 if(hdcmi->State == HAL_DCMI_STATE_RESET)
NYX 0:85b3fd62ea1a 122 {
NYX 0:85b3fd62ea1a 123 /* Init the low level hardware */
NYX 0:85b3fd62ea1a 124 HAL_DCMI_MspInit(hdcmi);
NYX 0:85b3fd62ea1a 125 }
NYX 0:85b3fd62ea1a 126
NYX 0:85b3fd62ea1a 127 /* Change the DCMI state */
NYX 0:85b3fd62ea1a 128 hdcmi->State = HAL_DCMI_STATE_BUSY;
NYX 0:85b3fd62ea1a 129 /* Configures the HS, VS, DE and PC polarity */
NYX 0:85b3fd62ea1a 130 hdcmi->Instance->CR &= ~(DCMI_CR_PCKPOL | DCMI_CR_HSPOL | DCMI_CR_VSPOL | DCMI_CR_EDM_0 |\
NYX 0:85b3fd62ea1a 131 DCMI_CR_EDM_1 | DCMI_CR_FCRC_0 | DCMI_CR_FCRC_1 | DCMI_CR_JPEG |\
NYX 0:85b3fd62ea1a 132 DCMI_CR_ESS
NYX 0:85b3fd62ea1a 133 #if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
NYX 0:85b3fd62ea1a 134 | DCMI_CR_BSM_0 | DCMI_CR_BSM_1 | DCMI_CR_OEBS |\
NYX 0:85b3fd62ea1a 135 DCMI_CR_LSM | DCMI_CR_OELS
NYX 0:85b3fd62ea1a 136 #endif /* STM32F446xx || STM32F469xx || STM32F479xx */
NYX 0:85b3fd62ea1a 137 );
NYX 0:85b3fd62ea1a 138 hdcmi->Instance->CR |= (uint32_t)(hdcmi->Init.SynchroMode | hdcmi->Init.CaptureRate |\
NYX 0:85b3fd62ea1a 139 hdcmi->Init.VSPolarity | hdcmi->Init.HSPolarity |\
NYX 0:85b3fd62ea1a 140 hdcmi->Init.PCKPolarity | hdcmi->Init.ExtendedDataMode |\
NYX 0:85b3fd62ea1a 141 hdcmi->Init.JPEGMode
NYX 0:85b3fd62ea1a 142 #if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
NYX 0:85b3fd62ea1a 143 | hdcmi->Init.ByteSelectMode |\
NYX 0:85b3fd62ea1a 144 hdcmi->Init.ByteSelectStart | hdcmi->Init.LineSelectMode |\
NYX 0:85b3fd62ea1a 145 hdcmi->Init.LineSelectStart
NYX 0:85b3fd62ea1a 146 #endif /* STM32F446xx || STM32F469xx || STM32F479xx */
NYX 0:85b3fd62ea1a 147 );
NYX 0:85b3fd62ea1a 148 if(hdcmi->Init.SynchroMode == DCMI_SYNCHRO_EMBEDDED)
NYX 0:85b3fd62ea1a 149 {
NYX 0:85b3fd62ea1a 150 hdcmi->Instance->ESCR = (((uint32_t)hdcmi->Init.SyncroCode.FrameStartCode) |
NYX 0:85b3fd62ea1a 151 ((uint32_t)hdcmi->Init.SyncroCode.LineStartCode << DCMI_POSITION_ESCR_LSC)|
NYX 0:85b3fd62ea1a 152 ((uint32_t)hdcmi->Init.SyncroCode.LineEndCode << DCMI_POSITION_ESCR_LEC) |
NYX 0:85b3fd62ea1a 153 ((uint32_t)hdcmi->Init.SyncroCode.FrameEndCode << DCMI_POSITION_ESCR_FEC));
NYX 0:85b3fd62ea1a 154
NYX 0:85b3fd62ea1a 155 }
NYX 0:85b3fd62ea1a 156
NYX 0:85b3fd62ea1a 157 /* Enable the Line, Vsync, Error and Overrun interrupts */
NYX 0:85b3fd62ea1a 158 __HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_LINE | DCMI_IT_VSYNC | DCMI_IT_ERR | DCMI_IT_OVR);
NYX 0:85b3fd62ea1a 159
NYX 0:85b3fd62ea1a 160 /* Update error code */
NYX 0:85b3fd62ea1a 161 hdcmi->ErrorCode = HAL_DCMI_ERROR_NONE;
NYX 0:85b3fd62ea1a 162
NYX 0:85b3fd62ea1a 163 /* Initialize the DCMI state*/
NYX 0:85b3fd62ea1a 164 hdcmi->State = HAL_DCMI_STATE_READY;
NYX 0:85b3fd62ea1a 165
NYX 0:85b3fd62ea1a 166 return HAL_OK;
NYX 0:85b3fd62ea1a 167 }
NYX 0:85b3fd62ea1a 168
NYX 0:85b3fd62ea1a 169 /**
NYX 0:85b3fd62ea1a 170 * @}
NYX 0:85b3fd62ea1a 171 */
NYX 0:85b3fd62ea1a 172 #endif /* STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx ||\
NYX 0:85b3fd62ea1a 173 STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
NYX 0:85b3fd62ea1a 174 #endif /* HAL_DCMI_MODULE_ENABLED */
NYX 0:85b3fd62ea1a 175 /**
NYX 0:85b3fd62ea1a 176 * @}
NYX 0:85b3fd62ea1a 177 */
NYX 0:85b3fd62ea1a 178
NYX 0:85b3fd62ea1a 179 /**
NYX 0:85b3fd62ea1a 180 * @}
NYX 0:85b3fd62ea1a 181 */
NYX 0:85b3fd62ea1a 182
NYX 0:85b3fd62ea1a 183 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/