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