1 /** 2 ****************************************************************************** 3 * @file stm32f1xx_ll_exti.c 4 * @author MCD Application Team 5 * @brief EXTI LL module driver. 6 ****************************************************************************** 7 * @attention 8 * 9 * <h2><center>© Copyright (c) 2016 STMicroelectronics. 10 * All rights reserved.</center></h2> 11 * 12 * This software component is licensed by ST under BSD 3-Clause license, 13 * the "License"; You may not use this file except in compliance with the 14 * License. You may obtain a copy of the License at: 15 * opensource.org/licenses/BSD-3-Clause 16 * 17 ****************************************************************************** 18 */ 19 20 #if defined(USE_FULL_LL_DRIVER) 21 22 /* Includes ------------------------------------------------------------------*/ 23 #include "stm32f1xx_ll_exti.h" 24 #ifdef USE_FULL_ASSERT 25 #include "stm32_assert.h" 26 #else 27 #define assert_param(expr) ((void)0U) 28 #endif 29 30 /** @addtogroup STM32F1xx_LL_Driver 31 * @{ 32 */ 33 34 #if defined (EXTI) 35 36 /** @defgroup EXTI_LL EXTI 37 * @{ 38 */ 39 40 /* Private types -------------------------------------------------------------*/ 41 /* Private variables ---------------------------------------------------------*/ 42 /* Private constants ---------------------------------------------------------*/ 43 /* Private macros ------------------------------------------------------------*/ 44 /** @addtogroup EXTI_LL_Private_Macros 45 * @{ 46 */ 47 48 #define IS_LL_EXTI_LINE_0_31(__VALUE__) (((__VALUE__) & ~LL_EXTI_LINE_ALL_0_31) == 0x00000000U) 49 50 #define IS_LL_EXTI_MODE(__VALUE__) (((__VALUE__) == LL_EXTI_MODE_IT) \ 51 || ((__VALUE__) == LL_EXTI_MODE_EVENT) \ 52 || ((__VALUE__) == LL_EXTI_MODE_IT_EVENT)) 53 54 55 #define IS_LL_EXTI_TRIGGER(__VALUE__) (((__VALUE__) == LL_EXTI_TRIGGER_NONE) \ 56 || ((__VALUE__) == LL_EXTI_TRIGGER_RISING) \ 57 || ((__VALUE__) == LL_EXTI_TRIGGER_FALLING) \ 58 || ((__VALUE__) == LL_EXTI_TRIGGER_RISING_FALLING)) 59 60 /** 61 * @} 62 */ 63 64 /* Private function prototypes -----------------------------------------------*/ 65 66 /* Exported functions --------------------------------------------------------*/ 67 /** @addtogroup EXTI_LL_Exported_Functions 68 * @{ 69 */ 70 71 /** @addtogroup EXTI_LL_EF_Init 72 * @{ 73 */ 74 75 /** 76 * @brief De-initialize the EXTI registers to their default reset values. 77 * @retval An ErrorStatus enumeration value: 78 * - SUCCESS: EXTI registers are de-initialized 79 * - ERROR: not applicable 80 */ LL_EXTI_DeInit(void)81uint32_t LL_EXTI_DeInit(void) 82 { 83 /* Interrupt mask register set to default reset values */ 84 LL_EXTI_WriteReg(IMR, 0x00000000U); 85 /* Event mask register set to default reset values */ 86 LL_EXTI_WriteReg(EMR, 0x00000000U); 87 /* Rising Trigger selection register set to default reset values */ 88 LL_EXTI_WriteReg(RTSR, 0x00000000U); 89 /* Falling Trigger selection register set to default reset values */ 90 LL_EXTI_WriteReg(FTSR, 0x00000000U); 91 /* Software interrupt event register set to default reset values */ 92 LL_EXTI_WriteReg(SWIER, 0x00000000U); 93 /* Pending register clear */ 94 LL_EXTI_WriteReg(PR, 0x000FFFFFU); 95 96 return SUCCESS; 97 } 98 99 /** 100 * @brief Initialize the EXTI registers according to the specified parameters in EXTI_InitStruct. 101 * @param EXTI_InitStruct pointer to a @ref LL_EXTI_InitTypeDef structure. 102 * @retval An ErrorStatus enumeration value: 103 * - SUCCESS: EXTI registers are initialized 104 * - ERROR: not applicable 105 */ LL_EXTI_Init(LL_EXTI_InitTypeDef * EXTI_InitStruct)106uint32_t LL_EXTI_Init(LL_EXTI_InitTypeDef *EXTI_InitStruct) 107 { 108 ErrorStatus status = SUCCESS; 109 /* Check the parameters */ 110 assert_param(IS_LL_EXTI_LINE_0_31(EXTI_InitStruct->Line_0_31)); 111 assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->LineCommand)); 112 assert_param(IS_LL_EXTI_MODE(EXTI_InitStruct->Mode)); 113 114 /* ENABLE LineCommand */ 115 if (EXTI_InitStruct->LineCommand != DISABLE) 116 { 117 assert_param(IS_LL_EXTI_TRIGGER(EXTI_InitStruct->Trigger)); 118 119 /* Configure EXTI Lines in range from 0 to 31 */ 120 if (EXTI_InitStruct->Line_0_31 != LL_EXTI_LINE_NONE) 121 { 122 switch (EXTI_InitStruct->Mode) 123 { 124 case LL_EXTI_MODE_IT: 125 /* First Disable Event on provided Lines */ 126 LL_EXTI_DisableEvent_0_31(EXTI_InitStruct->Line_0_31); 127 /* Then Enable IT on provided Lines */ 128 LL_EXTI_EnableIT_0_31(EXTI_InitStruct->Line_0_31); 129 break; 130 case LL_EXTI_MODE_EVENT: 131 /* First Disable IT on provided Lines */ 132 LL_EXTI_DisableIT_0_31(EXTI_InitStruct->Line_0_31); 133 /* Then Enable Event on provided Lines */ 134 LL_EXTI_EnableEvent_0_31(EXTI_InitStruct->Line_0_31); 135 break; 136 case LL_EXTI_MODE_IT_EVENT: 137 /* Directly Enable IT & Event on provided Lines */ 138 LL_EXTI_EnableIT_0_31(EXTI_InitStruct->Line_0_31); 139 LL_EXTI_EnableEvent_0_31(EXTI_InitStruct->Line_0_31); 140 break; 141 default: 142 status = ERROR; 143 break; 144 } 145 if (EXTI_InitStruct->Trigger != LL_EXTI_TRIGGER_NONE) 146 { 147 switch (EXTI_InitStruct->Trigger) 148 { 149 case LL_EXTI_TRIGGER_RISING: 150 /* First Disable Falling Trigger on provided Lines */ 151 LL_EXTI_DisableFallingTrig_0_31(EXTI_InitStruct->Line_0_31); 152 /* Then Enable Rising Trigger on provided Lines */ 153 LL_EXTI_EnableRisingTrig_0_31(EXTI_InitStruct->Line_0_31); 154 break; 155 case LL_EXTI_TRIGGER_FALLING: 156 /* First Disable Rising Trigger on provided Lines */ 157 LL_EXTI_DisableRisingTrig_0_31(EXTI_InitStruct->Line_0_31); 158 /* Then Enable Falling Trigger on provided Lines */ 159 LL_EXTI_EnableFallingTrig_0_31(EXTI_InitStruct->Line_0_31); 160 break; 161 case LL_EXTI_TRIGGER_RISING_FALLING: 162 LL_EXTI_EnableRisingTrig_0_31(EXTI_InitStruct->Line_0_31); 163 LL_EXTI_EnableFallingTrig_0_31(EXTI_InitStruct->Line_0_31); 164 break; 165 default: 166 status = ERROR; 167 break; 168 } 169 } 170 } 171 } 172 /* DISABLE LineCommand */ 173 else 174 { 175 /* De-configure EXTI Lines in range from 0 to 31 */ 176 LL_EXTI_DisableIT_0_31(EXTI_InitStruct->Line_0_31); 177 LL_EXTI_DisableEvent_0_31(EXTI_InitStruct->Line_0_31); 178 } 179 return status; 180 } 181 182 /** 183 * @brief Set each @ref LL_EXTI_InitTypeDef field to default value. 184 * @param EXTI_InitStruct Pointer to a @ref LL_EXTI_InitTypeDef structure. 185 * @retval None 186 */ LL_EXTI_StructInit(LL_EXTI_InitTypeDef * EXTI_InitStruct)187void LL_EXTI_StructInit(LL_EXTI_InitTypeDef *EXTI_InitStruct) 188 { 189 EXTI_InitStruct->Line_0_31 = LL_EXTI_LINE_NONE; 190 EXTI_InitStruct->LineCommand = DISABLE; 191 EXTI_InitStruct->Mode = LL_EXTI_MODE_IT; 192 EXTI_InitStruct->Trigger = LL_EXTI_TRIGGER_FALLING; 193 } 194 195 /** 196 * @} 197 */ 198 199 /** 200 * @} 201 */ 202 203 /** 204 * @} 205 */ 206 207 #endif /* defined (EXTI) */ 208 209 /** 210 * @} 211 */ 212 213 #endif /* USE_FULL_LL_DRIVER */ 214 215 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 216