STM32H735xx HAL User Manual
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32h7xx_ll_exti.c 00004 * @author MCD Application Team 00005 * @brief EXTI LL module driver. 00006 ****************************************************************************** 00007 * @attention 00008 * 00009 * Copyright (c) 2017 STMicroelectronics. 00010 * All rights reserved. 00011 * 00012 * This software is licensed under terms that can be found in the LICENSE file 00013 * in the root directory of this software component. 00014 * If no LICENSE file comes with this software, it is provided AS-IS. 00015 * 00016 ****************************************************************************** 00017 */ 00018 #if defined(USE_FULL_LL_DRIVER) 00019 00020 /* Includes ------------------------------------------------------------------*/ 00021 #include "stm32h7xx_ll_exti.h" 00022 #ifdef USE_FULL_ASSERT 00023 #include "stm32_assert.h" 00024 #else 00025 #define assert_param(expr) ((void)0U) 00026 #endif 00027 00028 /** @addtogroup STM32H7xx_LL_Driver 00029 * @{ 00030 */ 00031 00032 #if defined (EXTI) 00033 00034 /** @defgroup EXTI_LL EXTI 00035 * @{ 00036 */ 00037 00038 /* Private types -------------------------------------------------------------*/ 00039 /* Private variables ---------------------------------------------------------*/ 00040 /* Private constants ---------------------------------------------------------*/ 00041 /* Private macros ------------------------------------------------------------*/ 00042 /** @addtogroup EXTI_LL_Private_Macros 00043 * @{ 00044 */ 00045 00046 #define IS_LL_EXTI_LINE_0_31(__VALUE__) (((__VALUE__) & ~LL_EXTI_LINE_ALL_0_31) == 0x00000000U) 00047 #define IS_LL_EXTI_LINE_32_63(__VALUE__) (((__VALUE__) & ~LL_EXTI_LINE_ALL_32_63) == 0x00000000U) 00048 #define IS_LL_EXTI_LINE_64_95(__VALUE__) (((__VALUE__) & ~LL_EXTI_LINE_ALL_64_95) == 0x00000000U) 00049 00050 #define IS_LL_EXTI_MODE(__VALUE__) (((__VALUE__) == LL_EXTI_MODE_IT) \ 00051 || ((__VALUE__) == LL_EXTI_MODE_EVENT) \ 00052 || ((__VALUE__) == LL_EXTI_MODE_IT_EVENT)) 00053 00054 00055 #define IS_LL_EXTI_TRIGGER(__VALUE__) (((__VALUE__) == LL_EXTI_TRIGGER_NONE) \ 00056 || ((__VALUE__) == LL_EXTI_TRIGGER_RISING) \ 00057 || ((__VALUE__) == LL_EXTI_TRIGGER_FALLING) \ 00058 || ((__VALUE__) == LL_EXTI_TRIGGER_RISING_FALLING)) 00059 00060 /** 00061 * @} 00062 */ 00063 00064 /* Private function prototypes -----------------------------------------------*/ 00065 00066 /* Exported functions --------------------------------------------------------*/ 00067 /** @addtogroup EXTI_LL_Exported_Functions 00068 * @{ 00069 */ 00070 00071 /** @addtogroup EXTI_LL_EF_Init 00072 * @{ 00073 */ 00074 00075 /** 00076 * @brief De-initialize the EXTI registers to their default reset values. 00077 * @retval An ErrorStatus enumeration value: 00078 * - SUCCESS: EXTI registers are de-initialized 00079 * - ERROR: not applicable 00080 */ 00081 ErrorStatus LL_EXTI_DeInit(void) 00082 { 00083 /* Rising Trigger selection register set to default reset values */ 00084 LL_EXTI_WriteReg(RTSR1, 0x00000000U); 00085 LL_EXTI_WriteReg(RTSR2, 0x00000000U); 00086 LL_EXTI_WriteReg(RTSR3, 0x00000000U); 00087 00088 /* Falling Trigger selection register set to default reset values */ 00089 LL_EXTI_WriteReg(FTSR1, 0x00000000U); 00090 LL_EXTI_WriteReg(FTSR2, 0x00000000U); 00091 LL_EXTI_WriteReg(FTSR3, 0x00000000U); 00092 00093 /* Software interrupt event register set to default reset values */ 00094 LL_EXTI_WriteReg(SWIER1, 0x00000000U); 00095 LL_EXTI_WriteReg(SWIER2, 0x00000000U); 00096 LL_EXTI_WriteReg(SWIER3, 0x00000000U); 00097 00098 /* D3 Pending register set to default reset values */ 00099 LL_EXTI_WriteReg(D3PMR1, 0x00000000U); 00100 LL_EXTI_WriteReg(D3PMR2, 0x00000000U); 00101 LL_EXTI_WriteReg(D3PMR3, 0x00000000U); 00102 00103 /* D3 Pending clear selection register low to default reset values */ 00104 LL_EXTI_WriteReg(D3PCR1L, 0x00000000U); 00105 LL_EXTI_WriteReg(D3PCR2L, 0x00000000U); 00106 LL_EXTI_WriteReg(D3PCR3L, 0x00000000U); 00107 00108 /* D3 Pending clear selection register high to default reset values */ 00109 LL_EXTI_WriteReg(D3PCR1H, 0x00000000U); 00110 LL_EXTI_WriteReg(D3PCR2H, 0x00000000U); 00111 LL_EXTI_WriteReg(D3PCR3H, 0x00000000U); 00112 00113 /* Interrupt mask register reset */ 00114 LL_EXTI_WriteReg(IMR1, 0x00000000U); 00115 LL_EXTI_WriteReg(IMR2, 0x00000000U); 00116 LL_EXTI_WriteReg(IMR3, 0x00000000U); 00117 00118 /* Event mask register reset */ 00119 LL_EXTI_WriteReg(EMR1, 0x00000000U); 00120 LL_EXTI_WriteReg(EMR2, 0x00000000U); 00121 LL_EXTI_WriteReg(EMR3, 0x00000000U); 00122 00123 /* Clear Pending requests */ 00124 LL_EXTI_WriteReg(PR1, EXTI_PR1_PR_Msk); 00125 LL_EXTI_WriteReg(PR2, EXTI_PR2_PR_Msk); 00126 LL_EXTI_WriteReg(PR3, EXTI_PR3_PR_Msk); 00127 00128 #if defined(DUAL_CORE) 00129 /* Interrupt mask register set to default reset values for Core 2 (Coretx-M4)*/ 00130 LL_EXTI_WriteReg(C2IMR1, 0x00000000U); 00131 LL_EXTI_WriteReg(C2IMR2, 0x00000000U); 00132 LL_EXTI_WriteReg(C2IMR3, 0x00000000U); 00133 00134 /* Event mask register set to default reset values */ 00135 LL_EXTI_WriteReg(C2EMR1, 0x00000000U); 00136 LL_EXTI_WriteReg(C2EMR2, 0x00000000U); 00137 LL_EXTI_WriteReg(C2EMR3, 0x00000000U); 00138 00139 /* Clear Pending requests */ 00140 LL_EXTI_WriteReg(C2PR1, EXTI_PR1_PR_Msk); 00141 LL_EXTI_WriteReg(C2PR2, EXTI_PR2_PR_Msk); 00142 LL_EXTI_WriteReg(C2PR3, EXTI_PR3_PR_Msk); 00143 00144 #endif /* DUAL_CORE*/ 00145 return SUCCESS; 00146 } 00147 00148 /** 00149 * @brief Initialize the EXTI registers according to the specified parameters in EXTI_InitStruct. 00150 * @param EXTI_InitStruct pointer to a @ref LL_EXTI_InitTypeDef structure. 00151 * @retval An ErrorStatus enumeration value: 00152 * - SUCCESS: EXTI registers are initialized 00153 * - ERROR: not applicable 00154 */ 00155 ErrorStatus LL_EXTI_Init(LL_EXTI_InitTypeDef *EXTI_InitStruct) 00156 { 00157 ErrorStatus status = SUCCESS; 00158 /* Check the parameters */ 00159 assert_param(IS_LL_EXTI_LINE_0_31(EXTI_InitStruct->Line_0_31)); 00160 assert_param(IS_LL_EXTI_LINE_32_63(EXTI_InitStruct->Line_32_63)); 00161 assert_param(IS_LL_EXTI_LINE_64_95(EXTI_InitStruct->Line_64_95)); 00162 assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->LineCommand)); 00163 assert_param(IS_LL_EXTI_MODE(EXTI_InitStruct->Mode)); 00164 00165 /* ENABLE LineCommand */ 00166 if (EXTI_InitStruct->LineCommand != DISABLE) 00167 { 00168 assert_param(IS_LL_EXTI_TRIGGER(EXTI_InitStruct->Trigger)); 00169 00170 /* Configure EXTI Lines in range from 0 to 31 */ 00171 if (EXTI_InitStruct->Line_0_31 != LL_EXTI_LINE_NONE) 00172 { 00173 if((EXTI_InitStruct->Mode & LL_EXTI_MODE_IT) == LL_EXTI_MODE_IT) 00174 { 00175 /* Enable IT on provided Lines for Cortex-M7*/ 00176 LL_EXTI_EnableIT_0_31(EXTI_InitStruct->Line_0_31); 00177 } 00178 else 00179 { 00180 /* Disable IT on provided Lines for Cortex-M7*/ 00181 LL_EXTI_DisableIT_0_31(EXTI_InitStruct->Line_0_31); 00182 } 00183 00184 if((EXTI_InitStruct->Mode & LL_EXTI_MODE_EVENT) == LL_EXTI_MODE_EVENT) 00185 { 00186 /* Enable event on provided Lines for Cortex-M7 */ 00187 LL_EXTI_EnableEvent_0_31(EXTI_InitStruct->Line_0_31); 00188 } 00189 else 00190 { 00191 /* Disable event on provided Lines for Cortex-M7 */ 00192 LL_EXTI_DisableEvent_0_31(EXTI_InitStruct->Line_0_31); 00193 } 00194 #if defined(DUAL_CORE) 00195 if((EXTI_InitStruct->Mode & LL_EXTI_MODE_C2_IT) == LL_EXTI_MODE_C2_IT) 00196 { 00197 /* Enable IT on provided Lines for Cortex-M4 */ 00198 LL_C2_EXTI_EnableIT_0_31 (EXTI_InitStruct->Line_0_31); 00199 } 00200 else 00201 { 00202 /* Disable IT on provided Lines for Cortex-M4*/ 00203 LL_C2_EXTI_DisableIT_0_31(EXTI_InitStruct->Line_0_31); 00204 } 00205 00206 if((EXTI_InitStruct->Mode & LL_EXTI_MODE_C2_EVENT) == LL_EXTI_MODE_C2_EVENT) 00207 { 00208 /* Enable event on provided Lines for Cortex-M4 */ 00209 LL_C2_EXTI_EnableEvent_0_31(EXTI_InitStruct->Line_0_31); 00210 } 00211 else 00212 { 00213 /* Disable event on provided Lines for Cortex-M4*/ 00214 LL_C2_EXTI_DisableEvent_0_31(EXTI_InitStruct->Line_0_31); 00215 } 00216 #endif /* DUAL_CORE */ 00217 00218 if (EXTI_InitStruct->Trigger != LL_EXTI_TRIGGER_NONE) 00219 { 00220 switch (EXTI_InitStruct->Trigger) 00221 { 00222 case LL_EXTI_TRIGGER_RISING: 00223 /* First Disable Falling Trigger on provided Lines */ 00224 LL_EXTI_DisableFallingTrig_0_31(EXTI_InitStruct->Line_0_31); 00225 /* Then Enable Rising Trigger on provided Lines */ 00226 LL_EXTI_EnableRisingTrig_0_31(EXTI_InitStruct->Line_0_31); 00227 break; 00228 case LL_EXTI_TRIGGER_FALLING: 00229 /* First Disable Rising Trigger on provided Lines */ 00230 LL_EXTI_DisableRisingTrig_0_31(EXTI_InitStruct->Line_0_31); 00231 /* Then Enable Falling Trigger on provided Lines */ 00232 LL_EXTI_EnableFallingTrig_0_31(EXTI_InitStruct->Line_0_31); 00233 break; 00234 case LL_EXTI_TRIGGER_RISING_FALLING: 00235 LL_EXTI_EnableRisingTrig_0_31(EXTI_InitStruct->Line_0_31); 00236 LL_EXTI_EnableFallingTrig_0_31(EXTI_InitStruct->Line_0_31); 00237 break; 00238 default: 00239 status = ERROR; 00240 break; 00241 } 00242 } 00243 } 00244 /* Configure EXTI Lines in range from 32 to 63 */ 00245 if (EXTI_InitStruct->Line_32_63 != LL_EXTI_LINE_NONE) 00246 { 00247 if((EXTI_InitStruct->Mode & LL_EXTI_MODE_IT) == LL_EXTI_MODE_IT) 00248 { 00249 /* Enable IT on provided Lines for Cortex-M7*/ 00250 LL_EXTI_EnableIT_32_63(EXTI_InitStruct->Line_32_63); 00251 } 00252 else 00253 { 00254 /* Disable IT on provided Lines for Cortex-M7*/ 00255 LL_EXTI_DisableIT_32_63(EXTI_InitStruct->Line_32_63); 00256 } 00257 00258 if((EXTI_InitStruct->Mode & LL_EXTI_MODE_EVENT) == LL_EXTI_MODE_EVENT) 00259 { 00260 /* Enable event on provided Lines for Cortex-M7 */ 00261 LL_EXTI_EnableEvent_32_63(EXTI_InitStruct->Line_32_63); 00262 } 00263 else 00264 { 00265 /* Disable event on provided Lines for Cortex-M7 */ 00266 LL_EXTI_DisableEvent_32_63(EXTI_InitStruct->Line_32_63); 00267 } 00268 #if defined(DUAL_CORE) 00269 if((EXTI_InitStruct->Mode & LL_EXTI_MODE_C2_IT) == LL_EXTI_MODE_C2_IT) 00270 { 00271 /* Enable IT on provided Lines for Cortex-M4 */ 00272 LL_C2_EXTI_EnableIT_32_63 (EXTI_InitStruct->Line_32_63); 00273 } 00274 else 00275 { 00276 /* Disable IT on provided Lines for Cortex-M4 */ 00277 LL_C2_EXTI_DisableIT_32_63 (EXTI_InitStruct->Line_32_63); 00278 } 00279 00280 if((EXTI_InitStruct->Mode & LL_EXTI_MODE_C2_EVENT) == LL_EXTI_MODE_C2_EVENT) 00281 { 00282 /* Enable event on provided Lines for Cortex-M4 */ 00283 LL_C2_EXTI_EnableEvent_32_63(EXTI_InitStruct->Line_32_63); 00284 } 00285 else 00286 { 00287 /* Disable event on provided Lines for Cortex-M4 */ 00288 LL_C2_EXTI_DisableEvent_32_63(EXTI_InitStruct->Line_32_63); 00289 } 00290 #endif /* DUAL_CORE */ 00291 00292 if (EXTI_InitStruct->Trigger != LL_EXTI_TRIGGER_NONE) 00293 { 00294 switch (EXTI_InitStruct->Trigger) 00295 { 00296 case LL_EXTI_TRIGGER_RISING: 00297 /* First Disable Falling Trigger on provided Lines */ 00298 LL_EXTI_DisableFallingTrig_32_63(EXTI_InitStruct->Line_32_63); 00299 /* Then Enable IT on provided Lines */ 00300 LL_EXTI_EnableRisingTrig_32_63(EXTI_InitStruct->Line_32_63); 00301 break; 00302 case LL_EXTI_TRIGGER_FALLING: 00303 /* First Disable Rising Trigger on provided Lines */ 00304 LL_EXTI_DisableRisingTrig_32_63(EXTI_InitStruct->Line_32_63); 00305 /* Then Enable Falling Trigger on provided Lines */ 00306 LL_EXTI_EnableFallingTrig_32_63(EXTI_InitStruct->Line_32_63); 00307 break; 00308 case LL_EXTI_TRIGGER_RISING_FALLING: 00309 LL_EXTI_EnableRisingTrig_32_63(EXTI_InitStruct->Line_32_63); 00310 LL_EXTI_EnableFallingTrig_32_63(EXTI_InitStruct->Line_32_63); 00311 break; 00312 default: 00313 status = ERROR; 00314 break; 00315 } 00316 } 00317 } 00318 /* Configure EXTI Lines in range from 64 to 95 */ 00319 if (EXTI_InitStruct->Line_64_95 != LL_EXTI_LINE_NONE) 00320 { 00321 if((EXTI_InitStruct->Mode & LL_EXTI_MODE_IT) == LL_EXTI_MODE_IT) 00322 { 00323 /* Enable IT on provided Lines for Cortex-M7*/ 00324 LL_EXTI_EnableIT_64_95(EXTI_InitStruct->Line_64_95); 00325 } 00326 else 00327 { 00328 /* Disable IT on provided Lines for Cortex-M7*/ 00329 LL_EXTI_DisableIT_64_95(EXTI_InitStruct->Line_64_95); 00330 } 00331 00332 if((EXTI_InitStruct->Mode & LL_EXTI_MODE_EVENT) == LL_EXTI_MODE_EVENT) 00333 { 00334 /* Enable event on provided Lines for Cortex-M7 */ 00335 LL_EXTI_EnableEvent_64_95(EXTI_InitStruct->Line_64_95); 00336 } 00337 else 00338 { 00339 /* Disable event on provided Lines for Cortex-M7 */ 00340 LL_EXTI_DisableEvent_64_95(EXTI_InitStruct->Line_64_95); 00341 } 00342 00343 #if defined(DUAL_CORE) 00344 if((EXTI_InitStruct->Mode & LL_EXTI_MODE_C2_IT) == LL_EXTI_MODE_C2_IT) 00345 { 00346 /* Enable IT on provided Lines for Cortex-M4 */ 00347 LL_C2_EXTI_EnableIT_64_95 (EXTI_InitStruct->Line_64_95); 00348 } 00349 else 00350 { 00351 /* Disable IT on provided Lines for Cortex-M4 */ 00352 LL_C2_EXTI_DisableIT_64_95 (EXTI_InitStruct->Line_64_95); 00353 } 00354 00355 if((EXTI_InitStruct->Mode & LL_EXTI_MODE_C2_EVENT) == LL_EXTI_MODE_C2_EVENT) 00356 { 00357 /* Enable event on provided Lines for Cortex-M4 */ 00358 LL_C2_EXTI_EnableEvent_64_95(EXTI_InitStruct->Line_64_95); 00359 } 00360 else 00361 { 00362 /* Disable event on provided Lines for Cortex-M4 */ 00363 LL_C2_EXTI_DisableEvent_64_95(EXTI_InitStruct->Line_64_95); 00364 } 00365 #endif /* DUAL_CORE */ 00366 00367 if (EXTI_InitStruct->Trigger != LL_EXTI_TRIGGER_NONE) 00368 { 00369 switch (EXTI_InitStruct->Trigger) 00370 { 00371 case LL_EXTI_TRIGGER_RISING: 00372 /* First Disable Falling Trigger on provided Lines */ 00373 LL_EXTI_DisableFallingTrig_64_95(EXTI_InitStruct->Line_64_95); 00374 /* Then Enable IT on provided Lines */ 00375 LL_EXTI_EnableRisingTrig_64_95(EXTI_InitStruct->Line_64_95); 00376 break; 00377 case LL_EXTI_TRIGGER_FALLING: 00378 /* First Disable Rising Trigger on provided Lines */ 00379 LL_EXTI_DisableRisingTrig_64_95(EXTI_InitStruct->Line_64_95); 00380 /* Then Enable Falling Trigger on provided Lines */ 00381 LL_EXTI_EnableFallingTrig_64_95(EXTI_InitStruct->Line_64_95); 00382 break; 00383 case LL_EXTI_TRIGGER_RISING_FALLING: 00384 LL_EXTI_EnableRisingTrig_64_95(EXTI_InitStruct->Line_64_95); 00385 LL_EXTI_EnableFallingTrig_64_95(EXTI_InitStruct->Line_64_95); 00386 break; 00387 default: 00388 status = ERROR; 00389 break; 00390 } 00391 } 00392 } 00393 } 00394 else /* DISABLE LineCommand */ 00395 { 00396 /* Disable IT on provided Lines for Cortex-M7*/ 00397 LL_EXTI_DisableIT_0_31(EXTI_InitStruct->Line_0_31); 00398 LL_EXTI_DisableIT_32_63(EXTI_InitStruct->Line_32_63); 00399 LL_EXTI_DisableIT_64_95(EXTI_InitStruct->Line_64_95); 00400 00401 /* Disable event on provided Lines for Cortex-M7 */ 00402 LL_EXTI_DisableEvent_0_31(EXTI_InitStruct->Line_0_31); 00403 LL_EXTI_DisableEvent_32_63(EXTI_InitStruct->Line_32_63); 00404 LL_EXTI_DisableEvent_64_95(EXTI_InitStruct->Line_64_95); 00405 00406 #if defined(DUAL_CORE) 00407 /* Disable IT on provided Lines for Cortex-M4*/ 00408 LL_C2_EXTI_DisableIT_0_31(EXTI_InitStruct->Line_0_31); 00409 LL_C2_EXTI_DisableIT_32_63(EXTI_InitStruct->Line_32_63); 00410 LL_C2_EXTI_DisableIT_64_95(EXTI_InitStruct->Line_64_95); 00411 00412 /* Disable event on provided Lines for Cortex-M4 */ 00413 LL_C2_EXTI_DisableEvent_0_31(EXTI_InitStruct->Line_0_31); 00414 LL_C2_EXTI_DisableEvent_32_63(EXTI_InitStruct->Line_32_63); 00415 LL_C2_EXTI_DisableEvent_64_95(EXTI_InitStruct->Line_64_95); 00416 #endif /* DUAL_CORE */ 00417 } 00418 00419 return status; 00420 } 00421 00422 /** 00423 * @brief Set each @ref LL_EXTI_InitTypeDef field to default value. 00424 * @param EXTI_InitStruct Pointer to a @ref LL_EXTI_InitTypeDef structure. 00425 * @retval None 00426 */ 00427 void LL_EXTI_StructInit(LL_EXTI_InitTypeDef *EXTI_InitStruct) 00428 { 00429 EXTI_InitStruct->Line_0_31 = LL_EXTI_LINE_NONE; 00430 EXTI_InitStruct->Line_32_63 = LL_EXTI_LINE_NONE; 00431 EXTI_InitStruct->Line_64_95 = LL_EXTI_LINE_NONE; 00432 EXTI_InitStruct->LineCommand = DISABLE; 00433 EXTI_InitStruct->Mode = LL_EXTI_MODE_IT; 00434 EXTI_InitStruct->Trigger = LL_EXTI_TRIGGER_FALLING; 00435 } 00436 00437 /** 00438 * @} 00439 */ 00440 00441 /** 00442 * @} 00443 */ 00444 00445 /** 00446 * @} 00447 */ 00448 00449 #endif /* defined (EXTI) */ 00450 00451 /** 00452 * @} 00453 */ 00454 00455 #endif /* USE_FULL_LL_DRIVER */ 00456