fix LPC812 PWM

Dependents:   IR_LED_Send

Fork of mbed-dev by mbed official

Committer:
mbed_official
Date:
Tue Apr 19 11:15:15 2016 +0100
Revision:
113:b3775bf36a83
Parent:
0:9b334a45a8ff
Synchronized with git revision 896981126b34b6d9441e3eea77881c67a1ae3dbd

Full URL: https://github.com/mbedmicro/mbed/commit/896981126b34b6d9441e3eea77881c67a1ae3dbd/

Exporter tool addition for e2 studio

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bogdanm 0:9b334a45a8ff 1 /**
bogdanm 0:9b334a45a8ff 2 ******************************************************************************
bogdanm 0:9b334a45a8ff 3 * @file stm32l0xx_hal_comp.c
bogdanm 0:9b334a45a8ff 4 * @author MCD Application Team
mbed_official 113:b3775bf36a83 5 * @version V1.5.0
mbed_official 113:b3775bf36a83 6 * @date 8-January-2016
bogdanm 0:9b334a45a8ff 7 * @brief COMP HAL module driver.
bogdanm 0:9b334a45a8ff 8 *
bogdanm 0:9b334a45a8ff 9 * This file provides firmware functions to manage the following
bogdanm 0:9b334a45a8ff 10 * functionalities of the COMP peripheral:
bogdanm 0:9b334a45a8ff 11 * + Initialization/de-initialization functions
bogdanm 0:9b334a45a8ff 12 * + I/O operation functions
bogdanm 0:9b334a45a8ff 13 * + Peripheral Control functions
bogdanm 0:9b334a45a8ff 14 * + Peripheral State functions
bogdanm 0:9b334a45a8ff 15 *
bogdanm 0:9b334a45a8ff 16 @verbatim
bogdanm 0:9b334a45a8ff 17 ================================================================================
bogdanm 0:9b334a45a8ff 18 ##### COMP Peripheral features #####
bogdanm 0:9b334a45a8ff 19 ================================================================================
bogdanm 0:9b334a45a8ff 20
bogdanm 0:9b334a45a8ff 21 [..]
bogdanm 0:9b334a45a8ff 22 The STM32L0xx device family integrates 2 analog comparators COMP1 and COMP2:
bogdanm 0:9b334a45a8ff 23 (#) The non inverting input and inverting input can be set to GPIO pins
bogdanm 0:9b334a45a8ff 24 as shown in table1. COMP Inputs below.
bogdanm 0:9b334a45a8ff 25
bogdanm 0:9b334a45a8ff 26 (#) The COMP output is available using HAL_COMP_GetOutputLevel()
bogdanm 0:9b334a45a8ff 27 and can be set on GPIO pins. Refer to table 2. COMP Outputs below.
bogdanm 0:9b334a45a8ff 28
bogdanm 0:9b334a45a8ff 29 (#) The COMP output can be redirected to embedded timers (TIM2, TIM21, TIM22...) and LPTIM
bogdanm 0:9b334a45a8ff 30 Refer to TIM and LPTIM drivers.
bogdanm 0:9b334a45a8ff 31
bogdanm 0:9b334a45a8ff 32 (#) The comparators COMP1 and COMP2 can be combined in window mode and only COMP2 non inverting input can be used as non-inverting input.
bogdanm 0:9b334a45a8ff 33
bogdanm 0:9b334a45a8ff 34 (#) The 2 comparators have interrupt capability with wake-up
bogdanm 0:9b334a45a8ff 35 from Sleep and Stop modes (through the EXTI controller):
bogdanm 0:9b334a45a8ff 36 (++) COMP1 is internally connected to EXTI Line 21
bogdanm 0:9b334a45a8ff 37 (++) COMP2 is internally connected to EXTI Line 22
bogdanm 0:9b334a45a8ff 38
bogdanm 0:9b334a45a8ff 39 From the corresponding IRQ handler, the right interrupt source can be retrieved with the
bogdanm 0:9b334a45a8ff 40 macro __HAL_COMP_EXTI_GET_FLAG(). Possible values are:
bogdanm 0:9b334a45a8ff 41 (++) COMP_EXTI_LINE_COMP1
bogdanm 0:9b334a45a8ff 42 (++) COMP_EXTI_LINE_COMP2
bogdanm 0:9b334a45a8ff 43
bogdanm 0:9b334a45a8ff 44
bogdanm 0:9b334a45a8ff 45 [..] Table 1. COMP Inputs for the STM32L0xx devices
bogdanm 0:9b334a45a8ff 46 +--------------------------------------------------+
bogdanm 0:9b334a45a8ff 47 | | | COMP1 | COMP2 |
bogdanm 0:9b334a45a8ff 48 |-----------------|----------------|---------------|
bogdanm 0:9b334a45a8ff 49 | | 1/4 VREFINT | -- | OK |
bogdanm 0:9b334a45a8ff 50 | | 1/2 VREFINT | -- | OK |
bogdanm 0:9b334a45a8ff 51 | | 3/4 VREFINT | -- | OK |
bogdanm 0:9b334a45a8ff 52 | Inverting Input | VREFINT | OK | OK |
bogdanm 0:9b334a45a8ff 53 | | DAC OUT (PA4) | OK | OK |
bogdanm 0:9b334a45a8ff 54 | | IO1 | PA0 | PA2 |
bogdanm 0:9b334a45a8ff 55 | | IO2 | PA5 | PA5 |
bogdanm 0:9b334a45a8ff 56 | | IO3 | --- | PB3 |
bogdanm 0:9b334a45a8ff 57 |-----------------|----------------|-------|-------|
bogdanm 0:9b334a45a8ff 58 | Non Inverting | IO1 | PA1 | PA3 |
bogdanm 0:9b334a45a8ff 59 | Input | IO2 | --- | PB4 |
bogdanm 0:9b334a45a8ff 60 | | IO3 | --- | PB5 |
bogdanm 0:9b334a45a8ff 61 | | IO4 | --- | PB6 |
bogdanm 0:9b334a45a8ff 62 | | IO5 | --- | PB7 |
bogdanm 0:9b334a45a8ff 63 +--------------------------------------------------+
bogdanm 0:9b334a45a8ff 64
bogdanm 0:9b334a45a8ff 65 [..] Table 2. COMP Outputs for the STM32L0xx devices
bogdanm 0:9b334a45a8ff 66 +---------------+
bogdanm 0:9b334a45a8ff 67 | COMP1 | COMP2 |
bogdanm 0:9b334a45a8ff 68 |-------|-------|
bogdanm 0:9b334a45a8ff 69 | PA0 | PA2 |
bogdanm 0:9b334a45a8ff 70 | PA6 | PA7 |
bogdanm 0:9b334a45a8ff 71 | PA11 | PA12 |
bogdanm 0:9b334a45a8ff 72 +---------------+
bogdanm 0:9b334a45a8ff 73
bogdanm 0:9b334a45a8ff 74
bogdanm 0:9b334a45a8ff 75 ##### How to use this driver #####
bogdanm 0:9b334a45a8ff 76 ================================================================================
bogdanm 0:9b334a45a8ff 77 [..]
bogdanm 0:9b334a45a8ff 78 This driver provides functions to configure and program the Comparators of all STM32L0xx devices.
bogdanm 0:9b334a45a8ff 79
bogdanm 0:9b334a45a8ff 80 To use the comparator, perform the following steps:
bogdanm 0:9b334a45a8ff 81
bogdanm 0:9b334a45a8ff 82 (#) Initialize the COMP low level resources by implementing the HAL_COMP_MspInit().
bogdanm 0:9b334a45a8ff 83 (++) Configure the comparator input in analog mode using HAL_GPIO_Init().
bogdanm 0:9b334a45a8ff 84 (++) Configure the comparator output in alternate function mode using HAL_GPIO_Init() to map the comparator
bogdanm 0:9b334a45a8ff 85 output to the GPIO pin.
bogdanm 0:9b334a45a8ff 86 (++) If required enable the VREFINT reference using HAL_VREFINT_Cmd() and HAL_COMP_EnableBuffer_Cmd().
bogdanm 0:9b334a45a8ff 87 (++) If required enable the COMP interrupt by configuring and enabling EXTI line in Interrupt mode and
bogdanm 0:9b334a45a8ff 88 selecting the desired sensitivity level using HAL_GPIO_Init() function. After that enable the comparator
bogdanm 0:9b334a45a8ff 89 interrupt vector using HAL_NVIC_EnableIRQ() function.
bogdanm 0:9b334a45a8ff 90
bogdanm 0:9b334a45a8ff 91 (#) Configure the comparator using HAL_COMP_Init() function:
bogdanm 0:9b334a45a8ff 92 (++) Select the inverting input
bogdanm 0:9b334a45a8ff 93 (++) Select the non-inverting input
bogdanm 0:9b334a45a8ff 94 (++) Select the output polarity
bogdanm 0:9b334a45a8ff 95 (++) Select the power mode
bogdanm 0:9b334a45a8ff 96 (++) Select the window mode
bogdanm 0:9b334a45a8ff 97
bogdanm 0:9b334a45a8ff 98 (#) Enable the comparator using HAL_COMP_Start() function
bogdanm 0:9b334a45a8ff 99
bogdanm 0:9b334a45a8ff 100 @endverbatim
bogdanm 0:9b334a45a8ff 101 ******************************************************************************
bogdanm 0:9b334a45a8ff 102 * @attention
bogdanm 0:9b334a45a8ff 103 *
mbed_official 113:b3775bf36a83 104 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
bogdanm 0:9b334a45a8ff 105 *
bogdanm 0:9b334a45a8ff 106 * Redistribution and use in source and binary forms, with or without modification,
bogdanm 0:9b334a45a8ff 107 * are permitted provided that the following conditions are met:
bogdanm 0:9b334a45a8ff 108 * 1. Redistributions of source code must retain the above copyright notice,
bogdanm 0:9b334a45a8ff 109 * this list of conditions and the following disclaimer.
bogdanm 0:9b334a45a8ff 110 * 2. Redistributions in binary form must reproduce the above copyright notice,
bogdanm 0:9b334a45a8ff 111 * this list of conditions and the following disclaimer in the documentation
bogdanm 0:9b334a45a8ff 112 * and/or other materials provided with the distribution.
bogdanm 0:9b334a45a8ff 113 * 3. Neither the name of STMicroelectronics nor the names of its contributors
bogdanm 0:9b334a45a8ff 114 * may be used to endorse or promote products derived from this software
bogdanm 0:9b334a45a8ff 115 * without specific prior written permission.
bogdanm 0:9b334a45a8ff 116 *
bogdanm 0:9b334a45a8ff 117 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
bogdanm 0:9b334a45a8ff 118 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
bogdanm 0:9b334a45a8ff 119 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
bogdanm 0:9b334a45a8ff 120 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
bogdanm 0:9b334a45a8ff 121 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
bogdanm 0:9b334a45a8ff 122 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
bogdanm 0:9b334a45a8ff 123 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
bogdanm 0:9b334a45a8ff 124 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
bogdanm 0:9b334a45a8ff 125 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
bogdanm 0:9b334a45a8ff 126 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
bogdanm 0:9b334a45a8ff 127 *
bogdanm 0:9b334a45a8ff 128 ******************************************************************************
bogdanm 0:9b334a45a8ff 129 */
bogdanm 0:9b334a45a8ff 130
bogdanm 0:9b334a45a8ff 131 /* Includes ------------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 132 #include "stm32l0xx_hal.h"
bogdanm 0:9b334a45a8ff 133
bogdanm 0:9b334a45a8ff 134 /** @addtogroup STM32L0xx_HAL_Driver
bogdanm 0:9b334a45a8ff 135 * @{
bogdanm 0:9b334a45a8ff 136 */
bogdanm 0:9b334a45a8ff 137
mbed_official 113:b3775bf36a83 138 #ifdef HAL_COMP_MODULE_ENABLED
mbed_official 113:b3775bf36a83 139
bogdanm 0:9b334a45a8ff 140 /** @addtogroup COMP
bogdanm 0:9b334a45a8ff 141 * @brief COMP HAL module driver
bogdanm 0:9b334a45a8ff 142 * @{
bogdanm 0:9b334a45a8ff 143 */
bogdanm 0:9b334a45a8ff 144
mbed_official 113:b3775bf36a83 145 /** @addtogroup COMP_Private
mbed_official 113:b3775bf36a83 146 * @{
mbed_official 113:b3775bf36a83 147 */
bogdanm 0:9b334a45a8ff 148 /* Private typedef -----------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 149 /* Private define ------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 150 /* CSR register reset value */
bogdanm 0:9b334a45a8ff 151 #define COMP_CSR_RESET_VALUE ((uint32_t)0x00000000)
bogdanm 0:9b334a45a8ff 152
mbed_official 113:b3775bf36a83 153 #define C_REV_ID_A 0x1000 //Cut1.0
mbed_official 113:b3775bf36a83 154 #define C_REV_ID_Z 0x1008 //Cut1.1
mbed_official 113:b3775bf36a83 155 #define C_REV_ID_Y 0x1003 //Cut1.2
mbed_official 113:b3775bf36a83 156
mbed_official 113:b3775bf36a83 157 #define C_DEV_ID_L073 0x447
mbed_official 113:b3775bf36a83 158 #define C_DEV_ID_L053 0x417
mbed_official 113:b3775bf36a83 159 /**
mbed_official 113:b3775bf36a83 160 * @}
mbed_official 113:b3775bf36a83 161 */
mbed_official 113:b3775bf36a83 162
bogdanm 0:9b334a45a8ff 163
bogdanm 0:9b334a45a8ff 164 /** @addtogroup COMP_Exported_Functions
bogdanm 0:9b334a45a8ff 165 * @{
bogdanm 0:9b334a45a8ff 166 */
bogdanm 0:9b334a45a8ff 167
bogdanm 0:9b334a45a8ff 168 /** @addtogroup COMP_Exported_Functions_Group1
bogdanm 0:9b334a45a8ff 169 * @brief Initialization and Configuration functions
bogdanm 0:9b334a45a8ff 170 *
bogdanm 0:9b334a45a8ff 171 @verbatim
bogdanm 0:9b334a45a8ff 172 ===============================================================================
mbed_official 113:b3775bf36a83 173 ##### Initialization and de-initialization functions #####
bogdanm 0:9b334a45a8ff 174 ===============================================================================
bogdanm 0:9b334a45a8ff 175 [..] This section provides functions to initialize and de-initialize comparators
bogdanm 0:9b334a45a8ff 176
bogdanm 0:9b334a45a8ff 177 @endverbatim
bogdanm 0:9b334a45a8ff 178 * @{
bogdanm 0:9b334a45a8ff 179 */
bogdanm 0:9b334a45a8ff 180
bogdanm 0:9b334a45a8ff 181 /**
bogdanm 0:9b334a45a8ff 182 * @brief Initializes the COMP according to the specified
bogdanm 0:9b334a45a8ff 183 * parameters in the COMP_InitTypeDef and create the associated handle.
bogdanm 0:9b334a45a8ff 184 * @note If the selected comparator is locked, initialization can't be performed.
bogdanm 0:9b334a45a8ff 185 * To unlock the configuration, perform a system reset.
bogdanm 0:9b334a45a8ff 186 * @note When the LPTIM connection is enabled, the following pins LPTIM_IN1(PB5, PC0)
bogdanm 0:9b334a45a8ff 187 and LPTIM_IN2(PB7, PC2) should not be configured in AF.
bogdanm 0:9b334a45a8ff 188 * @param hcomp: COMP handle
bogdanm 0:9b334a45a8ff 189 * @retval HAL status
bogdanm 0:9b334a45a8ff 190 */
bogdanm 0:9b334a45a8ff 191 HAL_StatusTypeDef HAL_COMP_Init(COMP_HandleTypeDef *hcomp)
bogdanm 0:9b334a45a8ff 192 {
bogdanm 0:9b334a45a8ff 193 HAL_StatusTypeDef status = HAL_OK;
bogdanm 0:9b334a45a8ff 194
bogdanm 0:9b334a45a8ff 195 /* Check the COMP handle allocation and lock status */
bogdanm 0:9b334a45a8ff 196 if((hcomp == NULL) || ((hcomp->State & COMP_STATE_BIT_LOCK) != 0x00))
bogdanm 0:9b334a45a8ff 197 {
bogdanm 0:9b334a45a8ff 198 status = HAL_ERROR;
bogdanm 0:9b334a45a8ff 199 }
bogdanm 0:9b334a45a8ff 200 else
bogdanm 0:9b334a45a8ff 201 {
bogdanm 0:9b334a45a8ff 202 /* Check the parameter */
bogdanm 0:9b334a45a8ff 203 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
bogdanm 0:9b334a45a8ff 204 assert_param(IS_COMP_INVERTINGINPUT(hcomp->Init.InvertingInput));
bogdanm 0:9b334a45a8ff 205 assert_param(IS_COMP_NONINVERTINGINPUT(hcomp->Init.NonInvertingInput));
bogdanm 0:9b334a45a8ff 206 assert_param(IS_COMP_OUTPUTPOL(hcomp->Init.OutputPol));
bogdanm 0:9b334a45a8ff 207 assert_param(IS_COMP_MODE(hcomp->Init.Mode));
bogdanm 0:9b334a45a8ff 208
bogdanm 0:9b334a45a8ff 209 if(hcomp->Init.WindowMode != COMP_WINDOWMODE_DISABLE)
bogdanm 0:9b334a45a8ff 210 {
bogdanm 0:9b334a45a8ff 211 assert_param(IS_COMP_WINDOWMODE_INSTANCE(hcomp->Instance));
bogdanm 0:9b334a45a8ff 212 assert_param(IS_COMP_WINDOWMODE(hcomp->Init.WindowMode));
bogdanm 0:9b334a45a8ff 213 }
bogdanm 0:9b334a45a8ff 214
bogdanm 0:9b334a45a8ff 215 if(hcomp->State == HAL_COMP_STATE_RESET)
bogdanm 0:9b334a45a8ff 216 {
mbed_official 113:b3775bf36a83 217 /* Allocate lock resource and initialize it */
mbed_official 113:b3775bf36a83 218 hcomp->Lock = HAL_UNLOCKED;
bogdanm 0:9b334a45a8ff 219 /* Init SYSCFG and the low level hardware to access comparators */
bogdanm 0:9b334a45a8ff 220 __HAL_RCC_SYSCFG_CLK_ENABLE();
bogdanm 0:9b334a45a8ff 221 /* Init the low level hardware : SYSCFG to access comparators */
bogdanm 0:9b334a45a8ff 222 HAL_COMP_MspInit(hcomp);
bogdanm 0:9b334a45a8ff 223 }
bogdanm 0:9b334a45a8ff 224
bogdanm 0:9b334a45a8ff 225 /* Change COMP peripheral state */
bogdanm 0:9b334a45a8ff 226 hcomp->State = HAL_COMP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 227
mbed_official 113:b3775bf36a83 228 /* Set COMP parameters */
mbed_official 113:b3775bf36a83 229 /* Set COMPxINSEL bits according to hcomp->Init.InvertingInput value */
mbed_official 113:b3775bf36a83 230 /* Set COMPxNONINSEL bits according to hcomp->Init.NonInvertingInput value */
mbed_official 113:b3775bf36a83 231 /* Set COMPxLPTIMCONNECTION bits according to hcomp->Init.LPTIMConnection value */
mbed_official 113:b3775bf36a83 232 /* Set COMPxPOL bit according to hcomp->Init.OutputPol value */
mbed_official 113:b3775bf36a83 233 /* Set COMPxMODE bits according to hcomp->Init.Mode value */
mbed_official 113:b3775bf36a83 234 /* Set COMP1WM bit according to hcomp->Init.WindowMode value */
bogdanm 0:9b334a45a8ff 235
mbed_official 113:b3775bf36a83 236 /* No LPTIM connexion requested */
mbed_official 113:b3775bf36a83 237 if (hcomp->Init.LPTIMConnection == COMP_LPTIMCONNECTION_DISABLED)
mbed_official 113:b3775bf36a83 238 {
mbed_official 113:b3775bf36a83 239 MODIFY_REG(hcomp->Instance->CSR, COMP_CSR_UPDATE_PARAMETERS_MASK, \
mbed_official 113:b3775bf36a83 240 hcomp->Init.InvertingInput | \
mbed_official 113:b3775bf36a83 241 hcomp->Init.NonInvertingInput | \
mbed_official 113:b3775bf36a83 242 hcomp->Init.OutputPol | \
mbed_official 113:b3775bf36a83 243 hcomp->Init.Mode | \
mbed_official 113:b3775bf36a83 244 hcomp->Init.WindowMode);
mbed_official 113:b3775bf36a83 245 }
mbed_official 113:b3775bf36a83 246 else
mbed_official 113:b3775bf36a83 247 {
mbed_official 113:b3775bf36a83 248 /* LPTIM connexion requested on COMP2*/
mbed_official 113:b3775bf36a83 249 if ((hcomp->Instance) == COMP2)
mbed_official 113:b3775bf36a83 250 {
mbed_official 113:b3775bf36a83 251 /* Check the MCU_ID in order to allow or not the COMP2 connection to LPTIM-input2 */
mbed_official 113:b3775bf36a83 252 if (((HAL_GetDEVID() == C_DEV_ID_L073) && (HAL_GetREVID() == C_REV_ID_A))
mbed_official 113:b3775bf36a83 253 ||
mbed_official 113:b3775bf36a83 254 ((HAL_GetDEVID() == C_DEV_ID_L053) && (HAL_GetREVID() == C_REV_ID_A))
mbed_official 113:b3775bf36a83 255 ||
mbed_official 113:b3775bf36a83 256 ((HAL_GetDEVID() == C_DEV_ID_L053) && (HAL_GetREVID() == C_REV_ID_Z)))
mbed_official 113:b3775bf36a83 257 {
mbed_official 113:b3775bf36a83 258 /* Note : COMP2 can be connected only to input 1 of LPTIM if requested */
mbed_official 113:b3775bf36a83 259 assert_param(IS_COMP2_LPTIMCONNECTION_RESTRICTED(hcomp->Init.LPTIMConnection));
mbed_official 113:b3775bf36a83 260 MODIFY_REG(hcomp->Instance->CSR, COMP_CSR_UPDATE_PARAMETERS_MASK, \
mbed_official 113:b3775bf36a83 261 hcomp->Init.InvertingInput | \
mbed_official 113:b3775bf36a83 262 hcomp->Init.NonInvertingInput | \
mbed_official 113:b3775bf36a83 263 COMP_CSR_COMP2LPTIM1IN1 | \
mbed_official 113:b3775bf36a83 264 hcomp->Init.OutputPol | \
mbed_official 113:b3775bf36a83 265 hcomp->Init.Mode | \
mbed_official 113:b3775bf36a83 266 hcomp->Init.WindowMode);
mbed_official 113:b3775bf36a83 267 }
mbed_official 113:b3775bf36a83 268 else
mbed_official 113:b3775bf36a83 269 {
mbed_official 113:b3775bf36a83 270 /* Note : COMP2 can be connected to input 1 or input2 of LPTIM if requested */
mbed_official 113:b3775bf36a83 271 assert_param(IS_COMP2_LPTIMCONNECTION(hcomp->Init.LPTIMConnection));
mbed_official 113:b3775bf36a83 272 switch (hcomp->Init.LPTIMConnection)
mbed_official 113:b3775bf36a83 273 {
mbed_official 113:b3775bf36a83 274 case COMP_LPTIMCONNECTION_IN1_ENABLED :
mbed_official 113:b3775bf36a83 275 MODIFY_REG(hcomp->Instance->CSR, COMP_CSR_UPDATE_PARAMETERS_MASK, \
mbed_official 113:b3775bf36a83 276 hcomp->Init.InvertingInput | \
mbed_official 113:b3775bf36a83 277 hcomp->Init.NonInvertingInput | \
mbed_official 113:b3775bf36a83 278 COMP_CSR_COMP2LPTIM1IN1 | \
mbed_official 113:b3775bf36a83 279 hcomp->Init.OutputPol | \
mbed_official 113:b3775bf36a83 280 hcomp->Init.Mode | \
mbed_official 113:b3775bf36a83 281 hcomp->Init.WindowMode);
mbed_official 113:b3775bf36a83 282 break;
mbed_official 113:b3775bf36a83 283 case COMP_LPTIMCONNECTION_IN2_ENABLED :
mbed_official 113:b3775bf36a83 284 MODIFY_REG(hcomp->Instance->CSR, COMP_CSR_UPDATE_PARAMETERS_MASK, \
mbed_official 113:b3775bf36a83 285 hcomp->Init.InvertingInput | \
mbed_official 113:b3775bf36a83 286 hcomp->Init.NonInvertingInput | \
mbed_official 113:b3775bf36a83 287 COMP_CSR_COMP2LPTIM1IN2 | \
mbed_official 113:b3775bf36a83 288 hcomp->Init.OutputPol | \
mbed_official 113:b3775bf36a83 289 hcomp->Init.Mode | \
mbed_official 113:b3775bf36a83 290 hcomp->Init.WindowMode);
mbed_official 113:b3775bf36a83 291 break;
mbed_official 113:b3775bf36a83 292 default :
mbed_official 113:b3775bf36a83 293 MODIFY_REG(hcomp->Instance->CSR, COMP_CSR_UPDATE_PARAMETERS_MASK, \
mbed_official 113:b3775bf36a83 294 hcomp->Init.InvertingInput | \
mbed_official 113:b3775bf36a83 295 hcomp->Init.NonInvertingInput | \
mbed_official 113:b3775bf36a83 296 hcomp->Init.OutputPol | \
mbed_official 113:b3775bf36a83 297 hcomp->Init.Mode | \
mbed_official 113:b3775bf36a83 298 hcomp->Init.WindowMode);
mbed_official 113:b3775bf36a83 299 break;
mbed_official 113:b3775bf36a83 300 }
mbed_official 113:b3775bf36a83 301 }
mbed_official 113:b3775bf36a83 302 }
mbed_official 113:b3775bf36a83 303 else
mbed_official 113:b3775bf36a83 304 /* LPTIM connexion requested on COMP1 */
mbed_official 113:b3775bf36a83 305 {
mbed_official 113:b3775bf36a83 306 /* Note : COMP1 can be connected to the input 1 of LPTIM if requested */
mbed_official 113:b3775bf36a83 307 assert_param(IS_COMP1_LPTIMCONNECTION(hcomp->Init.LPTIMConnection));
mbed_official 113:b3775bf36a83 308 if (hcomp->Init.LPTIMConnection == COMP_LPTIMCONNECTION_IN1_ENABLED)
mbed_official 113:b3775bf36a83 309 MODIFY_REG(hcomp->Instance->CSR, COMP_CSR_UPDATE_PARAMETERS_MASK, \
mbed_official 113:b3775bf36a83 310 hcomp->Init.InvertingInput | \
mbed_official 113:b3775bf36a83 311 hcomp->Init.NonInvertingInput | \
mbed_official 113:b3775bf36a83 312 COMP_CSR_COMP1LPTIM1IN1 | \
mbed_official 113:b3775bf36a83 313 hcomp->Init.OutputPol | \
mbed_official 113:b3775bf36a83 314 hcomp->Init.Mode | \
mbed_official 113:b3775bf36a83 315 hcomp->Init.WindowMode);
mbed_official 113:b3775bf36a83 316 else
mbed_official 113:b3775bf36a83 317 MODIFY_REG(hcomp->Instance->CSR, COMP_CSR_UPDATE_PARAMETERS_MASK, \
mbed_official 113:b3775bf36a83 318 hcomp->Init.InvertingInput | \
mbed_official 113:b3775bf36a83 319 hcomp->Init.NonInvertingInput | \
mbed_official 113:b3775bf36a83 320 hcomp->Init.OutputPol | \
mbed_official 113:b3775bf36a83 321 hcomp->Init.Mode | \
mbed_official 113:b3775bf36a83 322 hcomp->Init.WindowMode);
mbed_official 113:b3775bf36a83 323 }
mbed_official 113:b3775bf36a83 324 }
bogdanm 0:9b334a45a8ff 325 /* Initialize the COMP state*/
bogdanm 0:9b334a45a8ff 326 hcomp->State = HAL_COMP_STATE_READY;
bogdanm 0:9b334a45a8ff 327
bogdanm 0:9b334a45a8ff 328 }
bogdanm 0:9b334a45a8ff 329
bogdanm 0:9b334a45a8ff 330 return status;
bogdanm 0:9b334a45a8ff 331 }
bogdanm 0:9b334a45a8ff 332
bogdanm 0:9b334a45a8ff 333 /**
bogdanm 0:9b334a45a8ff 334 * @brief DeInitializes the COMP peripheral
bogdanm 0:9b334a45a8ff 335 * @note Deinitialization can't be performed if the COMP configuration is locked.
bogdanm 0:9b334a45a8ff 336 * To unlock the configuration, perform a system reset.
bogdanm 0:9b334a45a8ff 337 * @param hcomp: COMP handle
bogdanm 0:9b334a45a8ff 338 * @retval HAL status
bogdanm 0:9b334a45a8ff 339 */
bogdanm 0:9b334a45a8ff 340 HAL_StatusTypeDef HAL_COMP_DeInit(COMP_HandleTypeDef *hcomp)
bogdanm 0:9b334a45a8ff 341 {
bogdanm 0:9b334a45a8ff 342 HAL_StatusTypeDef status = HAL_OK;
bogdanm 0:9b334a45a8ff 343
bogdanm 0:9b334a45a8ff 344 /* Check the COMP handle allocation and lock status */
bogdanm 0:9b334a45a8ff 345 if((hcomp == NULL) || ((hcomp->State & COMP_STATE_BIT_LOCK) != 0x00))
bogdanm 0:9b334a45a8ff 346 {
bogdanm 0:9b334a45a8ff 347 status = HAL_ERROR;
bogdanm 0:9b334a45a8ff 348 }
bogdanm 0:9b334a45a8ff 349 else
bogdanm 0:9b334a45a8ff 350 {
bogdanm 0:9b334a45a8ff 351 /* Check the parameter */
bogdanm 0:9b334a45a8ff 352 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
bogdanm 0:9b334a45a8ff 353
bogdanm 0:9b334a45a8ff 354 /* Set COMP_CSR register to reset value */
bogdanm 0:9b334a45a8ff 355 WRITE_REG(hcomp->Instance->CSR, COMP_CSR_RESET_VALUE);
bogdanm 0:9b334a45a8ff 356
bogdanm 0:9b334a45a8ff 357 /* DeInit the low level hardware: SYSCFG, GPIO, CLOCK and NVIC */
bogdanm 0:9b334a45a8ff 358 HAL_COMP_MspDeInit(hcomp);
bogdanm 0:9b334a45a8ff 359
bogdanm 0:9b334a45a8ff 360 hcomp->State = HAL_COMP_STATE_RESET;
bogdanm 0:9b334a45a8ff 361
bogdanm 0:9b334a45a8ff 362 /* Release Lock */
bogdanm 0:9b334a45a8ff 363 __HAL_UNLOCK(hcomp);
bogdanm 0:9b334a45a8ff 364 }
bogdanm 0:9b334a45a8ff 365
bogdanm 0:9b334a45a8ff 366 return status;
bogdanm 0:9b334a45a8ff 367 }
bogdanm 0:9b334a45a8ff 368
bogdanm 0:9b334a45a8ff 369 /**
bogdanm 0:9b334a45a8ff 370 * @brief Initializes the COMP MSP.
bogdanm 0:9b334a45a8ff 371 * @param hcomp: COMP handle
bogdanm 0:9b334a45a8ff 372 * @retval None
bogdanm 0:9b334a45a8ff 373 */
bogdanm 0:9b334a45a8ff 374 __weak void HAL_COMP_MspInit(COMP_HandleTypeDef *hcomp)
bogdanm 0:9b334a45a8ff 375 {
mbed_official 113:b3775bf36a83 376 /* Prevent unused argument(s) compilation warning */
mbed_official 113:b3775bf36a83 377 UNUSED(hcomp);
mbed_official 113:b3775bf36a83 378
bogdanm 0:9b334a45a8ff 379 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 380 the HAL_COMP_MspInit could be implenetd in the user file
bogdanm 0:9b334a45a8ff 381 */
bogdanm 0:9b334a45a8ff 382 }
bogdanm 0:9b334a45a8ff 383
bogdanm 0:9b334a45a8ff 384 /**
bogdanm 0:9b334a45a8ff 385 * @brief DeInitializes COMP MSP.
bogdanm 0:9b334a45a8ff 386 * @param hcomp: COMP handle
bogdanm 0:9b334a45a8ff 387 * @retval None
bogdanm 0:9b334a45a8ff 388 */
bogdanm 0:9b334a45a8ff 389 __weak void HAL_COMP_MspDeInit(COMP_HandleTypeDef *hcomp)
bogdanm 0:9b334a45a8ff 390 {
mbed_official 113:b3775bf36a83 391 /* Prevent unused argument(s) compilation warning */
mbed_official 113:b3775bf36a83 392 UNUSED(hcomp);
mbed_official 113:b3775bf36a83 393
bogdanm 0:9b334a45a8ff 394 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 395 the HAL_COMP_MspDeInit could be implenetd in the user file
bogdanm 0:9b334a45a8ff 396 */
bogdanm 0:9b334a45a8ff 397 }
bogdanm 0:9b334a45a8ff 398
bogdanm 0:9b334a45a8ff 399 /**
bogdanm 0:9b334a45a8ff 400 * @}
bogdanm 0:9b334a45a8ff 401 */
bogdanm 0:9b334a45a8ff 402
bogdanm 0:9b334a45a8ff 403 /** @addtogroup COMP_Exported_Functions_Group2
bogdanm 0:9b334a45a8ff 404 * @brief Data transfers functions
bogdanm 0:9b334a45a8ff 405 *
bogdanm 0:9b334a45a8ff 406 @verbatim
bogdanm 0:9b334a45a8ff 407 ===============================================================================
bogdanm 0:9b334a45a8ff 408 ##### IO operation functions #####
bogdanm 0:9b334a45a8ff 409 ===============================================================================
bogdanm 0:9b334a45a8ff 410 [..]
bogdanm 0:9b334a45a8ff 411 This subsection provides a set of functions allowing to manage the COMP data
bogdanm 0:9b334a45a8ff 412 transfers.
bogdanm 0:9b334a45a8ff 413
bogdanm 0:9b334a45a8ff 414 @endverbatim
bogdanm 0:9b334a45a8ff 415 * @{
bogdanm 0:9b334a45a8ff 416 */
bogdanm 0:9b334a45a8ff 417
bogdanm 0:9b334a45a8ff 418 /**
bogdanm 0:9b334a45a8ff 419 * @brief Start the comparator
bogdanm 0:9b334a45a8ff 420 * @param hcomp: COMP handle
bogdanm 0:9b334a45a8ff 421 * @retval HAL status
bogdanm 0:9b334a45a8ff 422 */
bogdanm 0:9b334a45a8ff 423 HAL_StatusTypeDef HAL_COMP_Start(COMP_HandleTypeDef *hcomp)
bogdanm 0:9b334a45a8ff 424 {
bogdanm 0:9b334a45a8ff 425 HAL_StatusTypeDef status = HAL_OK;
mbed_official 113:b3775bf36a83 426 uint32_t extiline = 0;
bogdanm 0:9b334a45a8ff 427
bogdanm 0:9b334a45a8ff 428 /* Check the COMP handle allocation and lock status */
bogdanm 0:9b334a45a8ff 429 if((hcomp == NULL) || ((hcomp->State & COMP_STATE_BIT_LOCK) != 0x00))
bogdanm 0:9b334a45a8ff 430 {
bogdanm 0:9b334a45a8ff 431 status = HAL_ERROR;
bogdanm 0:9b334a45a8ff 432 }
bogdanm 0:9b334a45a8ff 433 else
bogdanm 0:9b334a45a8ff 434 {
bogdanm 0:9b334a45a8ff 435 /* Check the parameter */
bogdanm 0:9b334a45a8ff 436 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
bogdanm 0:9b334a45a8ff 437
bogdanm 0:9b334a45a8ff 438 if(hcomp->State == HAL_COMP_STATE_READY)
bogdanm 0:9b334a45a8ff 439 {
mbed_official 113:b3775bf36a83 440 /* Check the Exti Line output configuration */
mbed_official 113:b3775bf36a83 441 extiline = COMP_GET_EXTI_LINE(hcomp->Instance);
mbed_official 113:b3775bf36a83 442
mbed_official 113:b3775bf36a83 443 /* Configure the rising edge */
mbed_official 113:b3775bf36a83 444 if((hcomp->Init.TriggerMode & COMP_TRIGGERMODE_EVENT_RISING) != 0x0)
mbed_official 113:b3775bf36a83 445 {
mbed_official 113:b3775bf36a83 446 if (extiline == COMP_EXTI_LINE_COMP1)
mbed_official 113:b3775bf36a83 447 {
mbed_official 113:b3775bf36a83 448 __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE();
mbed_official 113:b3775bf36a83 449 }
mbed_official 113:b3775bf36a83 450 else
mbed_official 113:b3775bf36a83 451 {
mbed_official 113:b3775bf36a83 452 __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE();
mbed_official 113:b3775bf36a83 453 }
mbed_official 113:b3775bf36a83 454 }
mbed_official 113:b3775bf36a83 455 else
mbed_official 113:b3775bf36a83 456 {
mbed_official 113:b3775bf36a83 457 if (extiline == COMP_EXTI_LINE_COMP1)
mbed_official 113:b3775bf36a83 458 {
mbed_official 113:b3775bf36a83 459 __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE();
mbed_official 113:b3775bf36a83 460 }
mbed_official 113:b3775bf36a83 461 else
mbed_official 113:b3775bf36a83 462 {
mbed_official 113:b3775bf36a83 463 __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE();
mbed_official 113:b3775bf36a83 464 }
mbed_official 113:b3775bf36a83 465 }
mbed_official 113:b3775bf36a83 466
mbed_official 113:b3775bf36a83 467 /* Configure the falling edge */
mbed_official 113:b3775bf36a83 468 if((hcomp->Init.TriggerMode & COMP_TRIGGERMODE_EVENT_FALLING) != 0x0)
mbed_official 113:b3775bf36a83 469 {
mbed_official 113:b3775bf36a83 470 if (extiline == COMP_EXTI_LINE_COMP1)
mbed_official 113:b3775bf36a83 471 {
mbed_official 113:b3775bf36a83 472 __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE();
mbed_official 113:b3775bf36a83 473 }
mbed_official 113:b3775bf36a83 474 else
mbed_official 113:b3775bf36a83 475 {
mbed_official 113:b3775bf36a83 476 __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE();
mbed_official 113:b3775bf36a83 477 }
mbed_official 113:b3775bf36a83 478 }
mbed_official 113:b3775bf36a83 479 else
mbed_official 113:b3775bf36a83 480 {
mbed_official 113:b3775bf36a83 481 if (extiline == COMP_EXTI_LINE_COMP1)
mbed_official 113:b3775bf36a83 482 {
mbed_official 113:b3775bf36a83 483 __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE();
mbed_official 113:b3775bf36a83 484 }
mbed_official 113:b3775bf36a83 485 else
mbed_official 113:b3775bf36a83 486 {
mbed_official 113:b3775bf36a83 487 __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE();
mbed_official 113:b3775bf36a83 488 }
mbed_official 113:b3775bf36a83 489 }
mbed_official 113:b3775bf36a83 490
mbed_official 113:b3775bf36a83 491 /* Configure the COMP module */
mbed_official 113:b3775bf36a83 492 if (extiline == COMP_EXTI_LINE_COMP1)
mbed_official 113:b3775bf36a83 493 {
mbed_official 113:b3775bf36a83 494 /* Clear COMP Exti pending bit */
mbed_official 113:b3775bf36a83 495 __HAL_COMP_COMP1_EXTI_CLEAR_FLAG();
mbed_official 113:b3775bf36a83 496 }
mbed_official 113:b3775bf36a83 497 else
mbed_official 113:b3775bf36a83 498 {
mbed_official 113:b3775bf36a83 499 /* Clear COMP Exti pending bit */
mbed_official 113:b3775bf36a83 500 __HAL_COMP_COMP2_EXTI_CLEAR_FLAG();
mbed_official 113:b3775bf36a83 501 }
mbed_official 113:b3775bf36a83 502
bogdanm 0:9b334a45a8ff 503 /* Enable the selected comparator */
bogdanm 0:9b334a45a8ff 504 __HAL_COMP_ENABLE(hcomp);
bogdanm 0:9b334a45a8ff 505
bogdanm 0:9b334a45a8ff 506 hcomp->State = HAL_COMP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 507 }
bogdanm 0:9b334a45a8ff 508 else
bogdanm 0:9b334a45a8ff 509 {
bogdanm 0:9b334a45a8ff 510 status = HAL_ERROR;
bogdanm 0:9b334a45a8ff 511 }
bogdanm 0:9b334a45a8ff 512 }
bogdanm 0:9b334a45a8ff 513
bogdanm 0:9b334a45a8ff 514 return status;
bogdanm 0:9b334a45a8ff 515 }
bogdanm 0:9b334a45a8ff 516
bogdanm 0:9b334a45a8ff 517 /**
bogdanm 0:9b334a45a8ff 518 * @brief Stop the comparator
bogdanm 0:9b334a45a8ff 519 * @param hcomp: COMP handle
bogdanm 0:9b334a45a8ff 520 * @retval HAL status
bogdanm 0:9b334a45a8ff 521 */
bogdanm 0:9b334a45a8ff 522 HAL_StatusTypeDef HAL_COMP_Stop(COMP_HandleTypeDef *hcomp)
bogdanm 0:9b334a45a8ff 523 {
bogdanm 0:9b334a45a8ff 524 HAL_StatusTypeDef status = HAL_OK;
bogdanm 0:9b334a45a8ff 525
bogdanm 0:9b334a45a8ff 526 /* Check the COMP handle allocation and lock status */
bogdanm 0:9b334a45a8ff 527 if((hcomp == NULL) || ((hcomp->State & COMP_STATE_BIT_LOCK) != 0x00))
bogdanm 0:9b334a45a8ff 528 {
bogdanm 0:9b334a45a8ff 529 status = HAL_ERROR;
bogdanm 0:9b334a45a8ff 530 }
bogdanm 0:9b334a45a8ff 531 else
bogdanm 0:9b334a45a8ff 532 {
bogdanm 0:9b334a45a8ff 533 /* Check the parameter */
bogdanm 0:9b334a45a8ff 534 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
bogdanm 0:9b334a45a8ff 535
bogdanm 0:9b334a45a8ff 536 if(hcomp->State == HAL_COMP_STATE_BUSY)
bogdanm 0:9b334a45a8ff 537 {
bogdanm 0:9b334a45a8ff 538 /* Disable the selected comparator */
bogdanm 0:9b334a45a8ff 539 __HAL_COMP_DISABLE(hcomp);
bogdanm 0:9b334a45a8ff 540
bogdanm 0:9b334a45a8ff 541 hcomp->State = HAL_COMP_STATE_READY;
bogdanm 0:9b334a45a8ff 542 }
bogdanm 0:9b334a45a8ff 543 else
bogdanm 0:9b334a45a8ff 544 {
bogdanm 0:9b334a45a8ff 545 status = HAL_ERROR;
bogdanm 0:9b334a45a8ff 546 }
bogdanm 0:9b334a45a8ff 547 }
bogdanm 0:9b334a45a8ff 548
bogdanm 0:9b334a45a8ff 549 return status;
bogdanm 0:9b334a45a8ff 550 }
bogdanm 0:9b334a45a8ff 551
bogdanm 0:9b334a45a8ff 552 /**
bogdanm 0:9b334a45a8ff 553 * @brief Enables the interrupt and starts the comparator
bogdanm 0:9b334a45a8ff 554 * @param hcomp: COMP handle
bogdanm 0:9b334a45a8ff 555 * @retval HAL status.
bogdanm 0:9b334a45a8ff 556 */
bogdanm 0:9b334a45a8ff 557 HAL_StatusTypeDef HAL_COMP_Start_IT(COMP_HandleTypeDef *hcomp)
bogdanm 0:9b334a45a8ff 558 {
bogdanm 0:9b334a45a8ff 559 HAL_StatusTypeDef status = HAL_OK;
bogdanm 0:9b334a45a8ff 560 uint32_t extiline = 0;
bogdanm 0:9b334a45a8ff 561
mbed_official 113:b3775bf36a83 562 /* Check the COMP handle allocation and lock status */
mbed_official 113:b3775bf36a83 563 if((hcomp == NULL) || ((hcomp->State & COMP_STATE_BIT_LOCK) != 0x00))
bogdanm 0:9b334a45a8ff 564 {
mbed_official 113:b3775bf36a83 565 status = HAL_ERROR;
mbed_official 113:b3775bf36a83 566 }
mbed_official 113:b3775bf36a83 567 else
mbed_official 113:b3775bf36a83 568 {
mbed_official 113:b3775bf36a83 569 /* Check the parameter */
mbed_official 113:b3775bf36a83 570 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
mbed_official 113:b3775bf36a83 571
mbed_official 113:b3775bf36a83 572 if(hcomp->State == HAL_COMP_STATE_READY)
bogdanm 0:9b334a45a8ff 573 {
mbed_official 113:b3775bf36a83 574 /* Check the Exti Line output configuration */
mbed_official 113:b3775bf36a83 575 extiline = COMP_GET_EXTI_LINE(hcomp->Instance);
mbed_official 113:b3775bf36a83 576
mbed_official 113:b3775bf36a83 577 /* Configure the rising edge */
mbed_official 113:b3775bf36a83 578 if((hcomp->Init.TriggerMode & COMP_TRIGGERMODE_IT_RISING) != 0x0)
mbed_official 113:b3775bf36a83 579 {
mbed_official 113:b3775bf36a83 580 if (extiline == COMP_EXTI_LINE_COMP1)
mbed_official 113:b3775bf36a83 581 {
mbed_official 113:b3775bf36a83 582 __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE();
mbed_official 113:b3775bf36a83 583 }
mbed_official 113:b3775bf36a83 584 else
mbed_official 113:b3775bf36a83 585 {
mbed_official 113:b3775bf36a83 586 __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE();
mbed_official 113:b3775bf36a83 587 }
mbed_official 113:b3775bf36a83 588 }
mbed_official 113:b3775bf36a83 589 else
mbed_official 113:b3775bf36a83 590 {
mbed_official 113:b3775bf36a83 591 if (extiline == COMP_EXTI_LINE_COMP1)
mbed_official 113:b3775bf36a83 592 {
mbed_official 113:b3775bf36a83 593 __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE();
mbed_official 113:b3775bf36a83 594 }
mbed_official 113:b3775bf36a83 595 else
mbed_official 113:b3775bf36a83 596 {
mbed_official 113:b3775bf36a83 597 __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE();
mbed_official 113:b3775bf36a83 598 }
mbed_official 113:b3775bf36a83 599 }
mbed_official 113:b3775bf36a83 600
mbed_official 113:b3775bf36a83 601 /* Configure the falling edge */
mbed_official 113:b3775bf36a83 602 if((hcomp->Init.TriggerMode & COMP_TRIGGERMODE_IT_FALLING) != 0x0)
mbed_official 113:b3775bf36a83 603 {
mbed_official 113:b3775bf36a83 604 if (extiline == COMP_EXTI_LINE_COMP1)
mbed_official 113:b3775bf36a83 605 {
mbed_official 113:b3775bf36a83 606 __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE();
mbed_official 113:b3775bf36a83 607 }
mbed_official 113:b3775bf36a83 608 else
mbed_official 113:b3775bf36a83 609 {
mbed_official 113:b3775bf36a83 610 __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE();
mbed_official 113:b3775bf36a83 611 }
mbed_official 113:b3775bf36a83 612 }
mbed_official 113:b3775bf36a83 613 else
mbed_official 113:b3775bf36a83 614 {
mbed_official 113:b3775bf36a83 615 if (extiline == COMP_EXTI_LINE_COMP1)
mbed_official 113:b3775bf36a83 616 {
mbed_official 113:b3775bf36a83 617 __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE();
mbed_official 113:b3775bf36a83 618 }
mbed_official 113:b3775bf36a83 619 else
mbed_official 113:b3775bf36a83 620 {
mbed_official 113:b3775bf36a83 621 __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE();
mbed_official 113:b3775bf36a83 622 }
mbed_official 113:b3775bf36a83 623 }
mbed_official 113:b3775bf36a83 624
mbed_official 113:b3775bf36a83 625 /* Configure the COMP module */
mbed_official 113:b3775bf36a83 626 if (extiline == COMP_EXTI_LINE_COMP1)
mbed_official 113:b3775bf36a83 627 {
mbed_official 113:b3775bf36a83 628 /* Clear COMP Exti pending bit */
mbed_official 113:b3775bf36a83 629 __HAL_COMP_COMP1_EXTI_CLEAR_FLAG();
mbed_official 113:b3775bf36a83 630 /* Enable Exti interrupt mode */
mbed_official 113:b3775bf36a83 631 __HAL_COMP_COMP1_EXTI_ENABLE_IT();
mbed_official 113:b3775bf36a83 632 }
mbed_official 113:b3775bf36a83 633 else
mbed_official 113:b3775bf36a83 634 {
mbed_official 113:b3775bf36a83 635 /* Clear COMP Exti pending bit */
mbed_official 113:b3775bf36a83 636 __HAL_COMP_COMP2_EXTI_CLEAR_FLAG();
mbed_official 113:b3775bf36a83 637 /* Enable Exti interrupt mode */
mbed_official 113:b3775bf36a83 638 __HAL_COMP_COMP2_EXTI_ENABLE_IT();
mbed_official 113:b3775bf36a83 639 }
mbed_official 113:b3775bf36a83 640
mbed_official 113:b3775bf36a83 641 /* Enable the selected comparator */
mbed_official 113:b3775bf36a83 642 __HAL_COMP_ENABLE(hcomp);
mbed_official 113:b3775bf36a83 643
mbed_official 113:b3775bf36a83 644 hcomp->State = HAL_COMP_STATE_BUSY;
bogdanm 0:9b334a45a8ff 645 }
bogdanm 0:9b334a45a8ff 646 else
bogdanm 0:9b334a45a8ff 647 {
mbed_official 113:b3775bf36a83 648 status = HAL_ERROR;
bogdanm 0:9b334a45a8ff 649 }
bogdanm 0:9b334a45a8ff 650 }
bogdanm 0:9b334a45a8ff 651
bogdanm 0:9b334a45a8ff 652 return status;
bogdanm 0:9b334a45a8ff 653 }
bogdanm 0:9b334a45a8ff 654
bogdanm 0:9b334a45a8ff 655 /**
bogdanm 0:9b334a45a8ff 656 * @brief Disable the interrupt and Stop the comparator
bogdanm 0:9b334a45a8ff 657 * @param hcomp: COMP handle
bogdanm 0:9b334a45a8ff 658 * @retval HAL status
bogdanm 0:9b334a45a8ff 659 */
bogdanm 0:9b334a45a8ff 660 HAL_StatusTypeDef HAL_COMP_Stop_IT(COMP_HandleTypeDef *hcomp)
bogdanm 0:9b334a45a8ff 661 {
bogdanm 0:9b334a45a8ff 662 HAL_StatusTypeDef status = HAL_OK;
bogdanm 0:9b334a45a8ff 663
bogdanm 0:9b334a45a8ff 664 if (COMP_GET_EXTI_LINE(hcomp->Instance) == COMP_EXTI_LINE_COMP1)
bogdanm 0:9b334a45a8ff 665 {
bogdanm 0:9b334a45a8ff 666 __HAL_COMP_COMP1_EXTI_DISABLE_IT();
bogdanm 0:9b334a45a8ff 667 }
bogdanm 0:9b334a45a8ff 668 if (COMP_GET_EXTI_LINE(hcomp->Instance) == COMP_EXTI_LINE_COMP2)
bogdanm 0:9b334a45a8ff 669 {
bogdanm 0:9b334a45a8ff 670 __HAL_COMP_COMP2_EXTI_DISABLE_IT();
bogdanm 0:9b334a45a8ff 671 }
bogdanm 0:9b334a45a8ff 672
bogdanm 0:9b334a45a8ff 673 status = HAL_COMP_Stop(hcomp);
bogdanm 0:9b334a45a8ff 674
bogdanm 0:9b334a45a8ff 675 return status;
bogdanm 0:9b334a45a8ff 676 }
bogdanm 0:9b334a45a8ff 677
bogdanm 0:9b334a45a8ff 678 /**
bogdanm 0:9b334a45a8ff 679 * @brief Comparator IRQ Handler
bogdanm 0:9b334a45a8ff 680 * @param hcomp: COMP handle
bogdanm 0:9b334a45a8ff 681 * @retval HAL status
bogdanm 0:9b334a45a8ff 682 */
bogdanm 0:9b334a45a8ff 683 void HAL_COMP_IRQHandler(COMP_HandleTypeDef *hcomp)
bogdanm 0:9b334a45a8ff 684 {
mbed_official 113:b3775bf36a83 685 /* Check which exti line is involved */
mbed_official 113:b3775bf36a83 686 uint32_t extiline = COMP_GET_EXTI_LINE(hcomp->Instance);
bogdanm 0:9b334a45a8ff 687
mbed_official 113:b3775bf36a83 688 /* Manage COMP1 Exti line */
mbed_official 113:b3775bf36a83 689 if (extiline == COMP_EXTI_LINE_COMP1)
mbed_official 113:b3775bf36a83 690 {
mbed_official 113:b3775bf36a83 691 if(__HAL_COMP_COMP1_EXTI_GET_FLAG() != RESET)
mbed_official 113:b3775bf36a83 692 {
mbed_official 113:b3775bf36a83 693 /* Clear COMP Exti pending bit */
mbed_official 113:b3775bf36a83 694 __HAL_COMP_COMP1_EXTI_CLEAR_FLAG();
mbed_official 113:b3775bf36a83 695 /* COMP trigger user callback */
mbed_official 113:b3775bf36a83 696 HAL_COMP_TriggerCallback(hcomp);
mbed_official 113:b3775bf36a83 697 }
mbed_official 113:b3775bf36a83 698 }
mbed_official 113:b3775bf36a83 699
mbed_official 113:b3775bf36a83 700 /* Manage COMP2 Exti line */
mbed_official 113:b3775bf36a83 701 if (extiline == COMP_EXTI_LINE_COMP2)
mbed_official 113:b3775bf36a83 702 {
mbed_official 113:b3775bf36a83 703 if(__HAL_COMP_COMP2_EXTI_GET_FLAG() != RESET)
mbed_official 113:b3775bf36a83 704 {
mbed_official 113:b3775bf36a83 705 /* Clear COMP Exti pending bit */
mbed_official 113:b3775bf36a83 706 __HAL_COMP_COMP2_EXTI_CLEAR_FLAG();
mbed_official 113:b3775bf36a83 707 /* COMP trigger user callback */
mbed_official 113:b3775bf36a83 708 HAL_COMP_TriggerCallback(hcomp);
mbed_official 113:b3775bf36a83 709 }
mbed_official 113:b3775bf36a83 710 }
bogdanm 0:9b334a45a8ff 711 }
bogdanm 0:9b334a45a8ff 712
bogdanm 0:9b334a45a8ff 713 /**
bogdanm 0:9b334a45a8ff 714 * @}
bogdanm 0:9b334a45a8ff 715 */
bogdanm 0:9b334a45a8ff 716
bogdanm 0:9b334a45a8ff 717 /** @addtogroup COMP_Exported_Functions_Group3
bogdanm 0:9b334a45a8ff 718 * @brief management functions
bogdanm 0:9b334a45a8ff 719 *
bogdanm 0:9b334a45a8ff 720 @verbatim
bogdanm 0:9b334a45a8ff 721 ===============================================================================
bogdanm 0:9b334a45a8ff 722 ##### Peripheral Control functions #####
bogdanm 0:9b334a45a8ff 723 ===============================================================================
bogdanm 0:9b334a45a8ff 724 [..]
bogdanm 0:9b334a45a8ff 725 This subsection provides a set of functions allowing to control the COMP data
bogdanm 0:9b334a45a8ff 726 transfers.
bogdanm 0:9b334a45a8ff 727
bogdanm 0:9b334a45a8ff 728 @endverbatim
bogdanm 0:9b334a45a8ff 729 * @{
bogdanm 0:9b334a45a8ff 730 */
bogdanm 0:9b334a45a8ff 731
bogdanm 0:9b334a45a8ff 732 /**
bogdanm 0:9b334a45a8ff 733 * @brief Lock the selected comparator configuration.
bogdanm 0:9b334a45a8ff 734 * @param hcomp: COMP handle
bogdanm 0:9b334a45a8ff 735 * @retval HAL status
bogdanm 0:9b334a45a8ff 736 */
bogdanm 0:9b334a45a8ff 737 HAL_StatusTypeDef HAL_COMP_Lock(COMP_HandleTypeDef *hcomp)
bogdanm 0:9b334a45a8ff 738 {
bogdanm 0:9b334a45a8ff 739 HAL_StatusTypeDef status = HAL_OK;
bogdanm 0:9b334a45a8ff 740
bogdanm 0:9b334a45a8ff 741 /* Check the COMP handle allocation and lock status */
bogdanm 0:9b334a45a8ff 742 if((hcomp == NULL) || ((hcomp->State & COMP_STATE_BIT_LOCK) != 0x00))
bogdanm 0:9b334a45a8ff 743 {
bogdanm 0:9b334a45a8ff 744 status = HAL_ERROR;
bogdanm 0:9b334a45a8ff 745 }
bogdanm 0:9b334a45a8ff 746 else
bogdanm 0:9b334a45a8ff 747 {
bogdanm 0:9b334a45a8ff 748 /* Check the parameter */
bogdanm 0:9b334a45a8ff 749 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
bogdanm 0:9b334a45a8ff 750
bogdanm 0:9b334a45a8ff 751 /* Set lock flag on state */
bogdanm 0:9b334a45a8ff 752 switch(hcomp->State)
bogdanm 0:9b334a45a8ff 753 {
bogdanm 0:9b334a45a8ff 754 case HAL_COMP_STATE_BUSY:
bogdanm 0:9b334a45a8ff 755 hcomp->State = HAL_COMP_STATE_BUSY_LOCKED;
bogdanm 0:9b334a45a8ff 756 break;
bogdanm 0:9b334a45a8ff 757 case HAL_COMP_STATE_READY:
bogdanm 0:9b334a45a8ff 758 hcomp->State = HAL_COMP_STATE_READY_LOCKED;
bogdanm 0:9b334a45a8ff 759 break;
bogdanm 0:9b334a45a8ff 760 default:
bogdanm 0:9b334a45a8ff 761 /* unexpected state */
bogdanm 0:9b334a45a8ff 762 status = HAL_ERROR;
bogdanm 0:9b334a45a8ff 763 break;
bogdanm 0:9b334a45a8ff 764 }
bogdanm 0:9b334a45a8ff 765 }
bogdanm 0:9b334a45a8ff 766
bogdanm 0:9b334a45a8ff 767 if(status == HAL_OK)
bogdanm 0:9b334a45a8ff 768 {
bogdanm 0:9b334a45a8ff 769 /* Set the lock bit corresponding to selected comparator */
bogdanm 0:9b334a45a8ff 770 __HAL_COMP_LOCK(hcomp);
bogdanm 0:9b334a45a8ff 771 }
bogdanm 0:9b334a45a8ff 772
bogdanm 0:9b334a45a8ff 773 return status;
bogdanm 0:9b334a45a8ff 774 }
bogdanm 0:9b334a45a8ff 775
bogdanm 0:9b334a45a8ff 776 /**
bogdanm 0:9b334a45a8ff 777 * @brief Return the output level (high or low) of the selected comparator.
bogdanm 0:9b334a45a8ff 778 * The output level depends on the selected polarity.
bogdanm 0:9b334a45a8ff 779 * If the polarity is not inverted:
bogdanm 0:9b334a45a8ff 780 * - Comparator output is low when the non-inverting input is at a lower
bogdanm 0:9b334a45a8ff 781 * voltage than the inverting input
bogdanm 0:9b334a45a8ff 782 * - Comparator output is high when the non-inverting input is at a higher
bogdanm 0:9b334a45a8ff 783 * voltage than the inverting input
bogdanm 0:9b334a45a8ff 784 * If the polarity is inverted:
bogdanm 0:9b334a45a8ff 785 * - Comparator output is high when the non-inverting input is at a lower
bogdanm 0:9b334a45a8ff 786 * voltage than the inverting input
bogdanm 0:9b334a45a8ff 787 * - Comparator output is low when the non-inverting input is at a higher
bogdanm 0:9b334a45a8ff 788 * voltage than the inverting input
bogdanm 0:9b334a45a8ff 789 * @param hcomp: COMP handle
bogdanm 0:9b334a45a8ff 790 * @retval Returns the selected comparator output level: COMP_OUTPUTLEVEL_LOW or COMP_OUTPUTLEVEL_HIGH.
bogdanm 0:9b334a45a8ff 791 *
bogdanm 0:9b334a45a8ff 792 */
bogdanm 0:9b334a45a8ff 793 uint32_t HAL_COMP_GetOutputLevel(COMP_HandleTypeDef *hcomp)
bogdanm 0:9b334a45a8ff 794 {
bogdanm 0:9b334a45a8ff 795 /* Check the parameter */
bogdanm 0:9b334a45a8ff 796 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
bogdanm 0:9b334a45a8ff 797
bogdanm 0:9b334a45a8ff 798 return((uint32_t)(hcomp->Instance->CSR & COMP_OUTPUTLEVEL_HIGH));
bogdanm 0:9b334a45a8ff 799 }
bogdanm 0:9b334a45a8ff 800
bogdanm 0:9b334a45a8ff 801 /**
bogdanm 0:9b334a45a8ff 802 * @brief Comparator callback.
bogdanm 0:9b334a45a8ff 803 * @param hcomp: COMP handle
bogdanm 0:9b334a45a8ff 804 * @retval None
bogdanm 0:9b334a45a8ff 805 */
bogdanm 0:9b334a45a8ff 806 __weak void HAL_COMP_TriggerCallback(COMP_HandleTypeDef *hcomp)
bogdanm 0:9b334a45a8ff 807 {
mbed_official 113:b3775bf36a83 808 /* Prevent unused argument(s) compilation warning */
mbed_official 113:b3775bf36a83 809 UNUSED(hcomp);
mbed_official 113:b3775bf36a83 810
bogdanm 0:9b334a45a8ff 811 /* NOTE : This function should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 812 the HAL_COMP_TriggerCallback should be implemented in the user file
bogdanm 0:9b334a45a8ff 813 */
bogdanm 0:9b334a45a8ff 814 }
bogdanm 0:9b334a45a8ff 815
bogdanm 0:9b334a45a8ff 816
bogdanm 0:9b334a45a8ff 817 /**
bogdanm 0:9b334a45a8ff 818 * @}
bogdanm 0:9b334a45a8ff 819 */
bogdanm 0:9b334a45a8ff 820
bogdanm 0:9b334a45a8ff 821 /** @addtogroup COMP_Exported_Functions_Group4
bogdanm 0:9b334a45a8ff 822 * @brief Peripheral State functions
bogdanm 0:9b334a45a8ff 823 *
bogdanm 0:9b334a45a8ff 824 @verbatim
bogdanm 0:9b334a45a8ff 825 ===============================================================================
bogdanm 0:9b334a45a8ff 826 ##### Peripheral State functions #####
bogdanm 0:9b334a45a8ff 827 ===============================================================================
bogdanm 0:9b334a45a8ff 828 [..]
bogdanm 0:9b334a45a8ff 829 This subsection permit to get in run-time the status of the peripheral
bogdanm 0:9b334a45a8ff 830 and the data flow.
bogdanm 0:9b334a45a8ff 831
bogdanm 0:9b334a45a8ff 832 @endverbatim
bogdanm 0:9b334a45a8ff 833 * @{
bogdanm 0:9b334a45a8ff 834 */
bogdanm 0:9b334a45a8ff 835
bogdanm 0:9b334a45a8ff 836 /**
bogdanm 0:9b334a45a8ff 837 * @brief Return the COMP state
bogdanm 0:9b334a45a8ff 838 * @param hcomp : COMP handle
bogdanm 0:9b334a45a8ff 839 * @retval HAL state
bogdanm 0:9b334a45a8ff 840 */
bogdanm 0:9b334a45a8ff 841 HAL_COMP_StateTypeDef HAL_COMP_GetState(COMP_HandleTypeDef *hcomp)
bogdanm 0:9b334a45a8ff 842 {
bogdanm 0:9b334a45a8ff 843 /* Check the COMP handle allocation */
bogdanm 0:9b334a45a8ff 844 if(hcomp == NULL)
bogdanm 0:9b334a45a8ff 845 {
bogdanm 0:9b334a45a8ff 846 return HAL_COMP_STATE_RESET;
bogdanm 0:9b334a45a8ff 847 }
bogdanm 0:9b334a45a8ff 848
bogdanm 0:9b334a45a8ff 849 /* Check the parameter */
bogdanm 0:9b334a45a8ff 850 assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
bogdanm 0:9b334a45a8ff 851
bogdanm 0:9b334a45a8ff 852 return hcomp->State;
bogdanm 0:9b334a45a8ff 853 }
bogdanm 0:9b334a45a8ff 854
bogdanm 0:9b334a45a8ff 855 /**
bogdanm 0:9b334a45a8ff 856 * @}
bogdanm 0:9b334a45a8ff 857 */
bogdanm 0:9b334a45a8ff 858
bogdanm 0:9b334a45a8ff 859
bogdanm 0:9b334a45a8ff 860 /**
bogdanm 0:9b334a45a8ff 861 * @}
bogdanm 0:9b334a45a8ff 862 */
bogdanm 0:9b334a45a8ff 863
bogdanm 0:9b334a45a8ff 864 /**
bogdanm 0:9b334a45a8ff 865 * @}
bogdanm 0:9b334a45a8ff 866 */
bogdanm 0:9b334a45a8ff 867
mbed_official 113:b3775bf36a83 868 #endif /* HAL_COMP_MODULE_ENABLED */
mbed_official 113:b3775bf36a83 869
bogdanm 0:9b334a45a8ff 870 /**
bogdanm 0:9b334a45a8ff 871 * @}
bogdanm 0:9b334a45a8ff 872 */
bogdanm 0:9b334a45a8ff 873
bogdanm 0:9b334a45a8ff 874 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
bogdanm 0:9b334a45a8ff 875