STM8L15x Standard Peripherals Drivers
|
stm8l15x_exti.c
Go to the documentation of this file.
00001 /** 00002 ****************************************************************************** 00003 * @file stm8l15x_exti.c 00004 * @author MCD Application Team 00005 * @version V1.5.0 00006 * @date 13-May-2011 00007 * @brief This file provides firmware functions to manage the following 00008 * functionalities of the EXTI peripheral: 00009 * - Interrupt sensitivity of GPIO ports/pins configuration 00010 * - Interrupt status management 00011 * @verbatim 00012 * 00013 * =================================================================== 00014 * How to use this driver 00015 * =================================================================== 00016 * This driver provides functions to configure and initialise the EXTI 00017 * peripheral 00018 * These functions are split in 2 groups: 00019 * 00020 * 1. EXTI configuration: this group includes all needed functions 00021 * to configure the EXTI GPIO ports and pins: 00022 * - Set GPIO pins sensitivity 00023 * - Select GPIO port, GPIO half port and set the GPIO port sensitivity 00024 * 00025 * 2. EXTI interrupt status management 00026 * - Get the interrupt status: set/reset 00027 * - Clear interrupt pending bits 00028 * 00029 * @endverbatim 00030 * 00031 ****************************************************************************** 00032 * @attention 00033 * 00034 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 00035 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 00036 * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 00037 * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 00038 * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 00039 * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 00040 * 00041 * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2> 00042 ****************************************************************************** 00043 */ 00044 00045 /* Includes ------------------------------------------------------------------*/ 00046 #include "stm8l15x_exti.h" 00047 00048 /** @addtogroup STM8L15x_StdPeriph_Driver 00049 * @{ 00050 */ 00051 00052 /** @defgroup EXTI 00053 * @brief EXTI driver modules 00054 * @{ 00055 */ 00056 00057 /* Private typedef -----------------------------------------------------------*/ 00058 /* Private define ------------------------------------------------------------*/ 00059 /* Private macro -------------------------------------------------------------*/ 00060 /* Private variables ---------------------------------------------------------*/ 00061 /* Private function prototypes -----------------------------------------------*/ 00062 /* Private functions ---------------------------------------------------------*/ 00063 00064 /** @defgroup EXTI_Private_Functions 00065 * @{ 00066 */ 00067 00068 /** @defgroup EXTI_Group1 Interrupt sensitivity of GPIO ports/pins configuration 00069 * @brief Interrupt sensitivity of GPIO ports/pins configuration 00070 * 00071 @verbatim 00072 =============================================================================== 00073 EXTI configuration functions 00074 =============================================================================== 00075 00076 =================================================================== 00077 EXTI Driver: how to configure EXTI 00078 =================================================================== 00079 To use a GPIO pin as an interrupt source, follow theses steps: 00080 00081 1. Configure the GPIO pin in input mode with interrupt enabled using 00082 GPIO_Init() 00083 00084 2. Configure the GPIO pin sensitivity (falling, rising...) using 00085 EXTI_SetPinSensitivity() 00086 00087 3. Enable global interrupts using enableInterrupts() 00088 00089 4. In the IRQ handler corresponding to the GPIO pin, clear the interrupt 00090 pending bit using EXTI_ClearITPendingBit() 00091 00092 To use a GPIO port as an interrupt source, follows theses steps: 00093 00094 1. Configure the GPIO pins of the same port in input mode with interrupt 00095 enabled using GPIO_Init() 00096 00097 2. Configure the GPIO port sensitivity (falling, rising...) using 00098 EXTI_SetPortSensitivity() 00099 00100 3. Select the GPIO port and the corresponding half port using 00101 EXTI_SelectPort() then EXTI_SetHalfPortSelection() 00102 00103 4. Enable global interrupts using enableInterrupts() 00104 00105 5. In the IRQ handler corresponding to the GPIO port, clear the interrupt 00106 pending bit using EXTI_ClearITPendingBit() 00107 00108 @endverbatim 00109 * @{ 00110 */ 00111 00112 /** 00113 * @brief Deinitializes the EXTI registers to their default reset value. 00114 * @param None 00115 * @retval None 00116 */ 00117 void EXTI_DeInit(void) 00118 { 00119 EXTI->CR1 = EXTI_CR1_RESET_VALUE; 00120 EXTI->CR2 = EXTI_CR2_RESET_VALUE; 00121 EXTI->CR3 = EXTI_CR3_RESET_VALUE; 00122 EXTI->CR4 = EXTI_CR4_RESET_VALUE; 00123 EXTI->SR1 = 0xFF; /* Setting SR1 bits in order to clear flags */ 00124 EXTI->SR2 = 0xFF; /* Setting SR2 bits in order to clear flags */ 00125 EXTI->CONF1 = EXTI_CONF1_RESET_VALUE; 00126 EXTI->CONF2 = EXTI_CONF2_RESET_VALUE; 00127 } 00128 00129 /** 00130 * @brief Sets the external interrupt sensitivity of the selected pin. 00131 * @note Global interrupts must be disabled before calling this function. 00132 * @note The modification of external interrupt sensitivity is only possible 00133 * when he interrupts are disabled. 00134 * @note The normal behavior is to disable the interrupts before calling this 00135 * function, and re-enable them after. 00136 * @param EXTI_Pin : The pin to configure. 00137 * This parameter can be one of the following values: 00138 * @arg EXTI_Pin_0: GPIO Pin 0 00139 * @arg EXTI_Pin_1: GPIO Pin 1 00140 * @arg EXTI_Pin_2: GPIO Pin 2 00141 * @arg EXTI_Pin_3: GPIO Pin 3 00142 * @arg EXTI_Pin_4: GPIO Pin 4 00143 * @arg EXTI_Pin_5: GPIO Pin 5 00144 * @arg EXTI_Pin_6: GPIO Pin 6 00145 * @arg EXTI_Pin_7: GPIO Pin 7 00146 * @param EXTI_Trigger : The external interrupt sensitivity value to set. 00147 * This parameter can be one of the following values: 00148 * @arg EXTI_Trigger_Falling_Low: Interrupt on Falling edge and Low level 00149 * @arg EXTI_Trigger_Rising: Interrupt on Rising edge only 00150 * @arg EXTI_Trigger_Falling: Interrupt on Falling edge only 00151 * @arg EXTI_Trigger_Rising_Falling: Interrupt on Rising and Falling edges 00152 * @retval None 00153 */ 00154 void EXTI_SetPinSensitivity(EXTI_Pin_TypeDef EXTI_Pin, EXTI_Trigger_TypeDef EXTI_Trigger) 00155 { 00156 00157 /* Check function parameters */ 00158 assert_param(IS_EXTI_PINNUM(EXTI_Pin)); 00159 assert_param(IS_EXTI_TRIGGER(EXTI_Trigger)); 00160 00161 /* Clear port sensitivity bits */ 00162 switch (EXTI_Pin) 00163 { 00164 case EXTI_Pin_0: 00165 EXTI->CR1 &= (uint8_t)(~EXTI_CR1_P0IS); 00166 EXTI->CR1 |= (uint8_t)((uint8_t)(EXTI_Trigger) << EXTI_Pin); 00167 break; 00168 case EXTI_Pin_1: 00169 EXTI->CR1 &= (uint8_t)(~EXTI_CR1_P1IS); 00170 EXTI->CR1 |= (uint8_t)((uint8_t)(EXTI_Trigger) << EXTI_Pin); 00171 break; 00172 case EXTI_Pin_2: 00173 EXTI->CR1 &= (uint8_t)(~EXTI_CR1_P2IS); 00174 EXTI->CR1 |= (uint8_t)((uint8_t)(EXTI_Trigger) << EXTI_Pin); 00175 break; 00176 case EXTI_Pin_3: 00177 EXTI->CR1 &= (uint8_t)(~EXTI_CR1_P3IS); 00178 EXTI->CR1 |= (uint8_t)((uint8_t)(EXTI_Trigger) << EXTI_Pin); 00179 break; 00180 case EXTI_Pin_4: 00181 EXTI->CR2 &= (uint8_t)(~EXTI_CR2_P4IS); 00182 EXTI->CR2 |= (uint8_t)((uint8_t)(EXTI_Trigger) << ((uint8_t)EXTI_Pin & (uint8_t)0xEF)); 00183 break; 00184 case EXTI_Pin_5: 00185 EXTI->CR2 &= (uint8_t)(~EXTI_CR2_P5IS); 00186 EXTI->CR2 |= (uint8_t)((uint8_t)(EXTI_Trigger) << ((uint8_t)EXTI_Pin & (uint8_t)0xEF)); 00187 break; 00188 case EXTI_Pin_6: 00189 EXTI->CR2 &= (uint8_t)(~EXTI_CR2_P6IS); 00190 EXTI->CR2 |= (uint8_t)((uint8_t)(EXTI_Trigger) << ((uint8_t)EXTI_Pin & (uint8_t)0xEF)); 00191 break; 00192 case EXTI_Pin_7: 00193 EXTI->CR2 &= (uint8_t)(~EXTI_CR2_P7IS); 00194 EXTI->CR2 |= (uint8_t)((uint8_t)(EXTI_Trigger) << ((uint8_t)EXTI_Pin & (uint8_t)0xEF)); 00195 break; 00196 default: 00197 break; 00198 } 00199 } 00200 00201 /** 00202 * @brief Selects the port interrupt selection. 00203 * @param EXTI_Port : The port number to access. 00204 * This parameter can be one of the following values: 00205 * @arg EXTI_Port_B: GPIO Port B 00206 * @arg EXTI_Port_D: GPIO Port D 00207 * @arg EXTI_Port_E: GPIO Port E 00208 * @arg EXTI_Port_F: GPIO Port F 00209 * @arg EXTI_Port_G: GPIO Port G 00210 * @arg EXTI_Port_H: GPIO Port H 00211 * @retval None 00212 */ 00213 void EXTI_SelectPort(EXTI_Port_TypeDef EXTI_Port) 00214 { 00215 /* Check function parameter */ 00216 assert_param(IS_EXTI_PORT(EXTI_Port)); 00217 00218 if (EXTI_Port == EXTI_Port_B) 00219 { 00220 /* Select Port B by resetting PGBS bit in CONF2 register */ 00221 EXTI->CONF2 &= (uint8_t) (~EXTI_CONF2_PGBS); 00222 } 00223 else if (EXTI_Port == EXTI_Port_D) 00224 { 00225 /* Select Port D by resetting PHDS bit in CONF2 register */ 00226 EXTI->CONF2 &= (uint8_t) (~EXTI_CONF2_PHDS); 00227 } 00228 else if (EXTI_Port == EXTI_Port_E) 00229 { 00230 /* Select Port E by resetting PFES bit in CONF1 register */ 00231 EXTI->CONF1 &= (uint8_t) (~EXTI_CONF1_PFES); 00232 } 00233 else if (EXTI_Port == EXTI_Port_F) 00234 { 00235 /* Select Port F by setting PFES bit in CONF1 register */ 00236 EXTI->CONF1 |= (uint8_t) (EXTI_CONF1_PFES); 00237 } 00238 else if (EXTI_Port == EXTI_Port_G) 00239 { 00240 /* Select Port G by setting PGBS bit in CONF2 register */ 00241 EXTI->CONF2 |= (uint8_t) (EXTI_CONF2_PGBS); 00242 } 00243 else /* EXTI_Port is EXTI_Port_H */ 00244 { 00245 /* Select Port H by setting PHDS bit in CONF2 register */ 00246 EXTI->CONF2 |= (uint8_t) (EXTI_CONF2_PHDS); 00247 } 00248 } 00249 00250 /** 00251 * @brief Configures the half port interrupt selection. 00252 * @note This function should be called once the port sensitivity configured, 00253 * otherwise it will not have any effect on the port external interrupt. 00254 * @note This function should be called after EXTI_SelectPort() function which 00255 * selects the port to be used otherwise ports are selected by default 00256 * @param EXTI_HalfPort : The port part to access (MSB or LSB). 00257 * This parameter can be one of the following values: 00258 * @arg EXTI_HalfPort_B_LSB: Interrupt selector PB(3:0) 00259 * @arg EXTI_HalfPort_B_MSB: Interrupt selector PB(7:4) 00260 * @arg EXTI_HalfPort_D_LSB: Interrupt selector PD(3:0) 00261 * @arg EXTI_HalfPort_D_MSB: Interrupt selector PD(7:4) 00262 * @arg EXTI_HalfPort_E_LSB: Interrupt selector PE(3:0) 00263 * @arg EXTI_HalfPort_E_MSB: Interrupt selector PE(7:4) 00264 * @arg EXTI_HalfPort_F_LSB: Interrupt selector PF(3:0) 00265 * @arg EXTI_HalfPort_F_MSB: Interrupt selector PF(7:4) 00266 * @arg EXTI_HalfPort_G_LSB: Interrupt selector PG(3:0) 00267 * @arg EXTI_HalfPort_G_MSB: Interrupt selector PG(7:4) 00268 * @arg EXTI_HalfPort_H_LSB: Interrupt selector PH(3:0) 00269 * @arg EXTI_HalfPort_H_MSB: Interrupt selector PH(7:4) 00270 * @param NewState : The external interrupt new state. 00271 * This parameter can be: ENABLE or DISABLE. 00272 * @retval None 00273 */ 00274 void EXTI_SetHalfPortSelection(EXTI_HalfPort_TypeDef EXTI_HalfPort, 00275 FunctionalState NewState) 00276 { 00277 /* Check function parameters */ 00278 assert_param(IS_EXTI_HALFPORT(EXTI_HalfPort)); 00279 assert_param(IS_FUNCTIONAL_STATE(NewState)); 00280 00281 if ((EXTI_HalfPort & 0x80) == 0x00) 00282 { 00283 if (NewState != DISABLE) 00284 { 00285 /* Enable port interrupt selector */ 00286 EXTI->CONF1 |= (uint8_t)EXTI_HalfPort; 00287 } 00288 else /*NewState == DISABLE */ 00289 { 00290 /* Disable port interrupt selector */ 00291 EXTI->CONF1 &= (uint8_t)(~(uint8_t)EXTI_HalfPort); 00292 } 00293 } 00294 else 00295 { 00296 if (NewState != DISABLE) 00297 { 00298 /* Enable port interrupt selector */ 00299 EXTI->CONF2 |= (uint8_t)(EXTI_HalfPort & (uint8_t)0x7F); 00300 } 00301 else /*NewState == DISABLE */ 00302 { 00303 /* Disable port interrupt selector */ 00304 EXTI->CONF2 &= (uint8_t)(~(uint8_t) (EXTI_HalfPort & (uint8_t)0x7F)); 00305 } 00306 } 00307 } 00308 00309 /** 00310 * @brief Sets the external interrupt sensitivity of the selected port. 00311 * @note Global interrupts must be disabled before calling this function. 00312 * @note The modification of external interrupt sensitivity is only possible 00313 * when the interrupts are disabled. 00314 * @note The normal behavior is to disable the interrupts before calling this 00315 * function, and re-enable them after. 00316 * @param EXTI_Port : The port number to access. 00317 * This parameter can be one of the following values: 00318 * @arg EXTI_Port_B: GPIO Port B 00319 * @arg EXTI_Port_D: GPIO Port D 00320 * @arg EXTI_Port_E: GPIO Port E 00321 * @arg EXTI_Port_F: GPIO Port F 00322 * @arg EXTI_Port_G: GPIO Port G 00323 * @arg EXTI_Port_H: GPIO Port H 00324 * @param EXTI_Trigger : The external interrupt sensitivity value to set. 00325 * This parameter can be one of the following values: 00326 * @arg EXTI_Trigger_Falling_Low: Interrupt on Falling edge and Low level 00327 * @arg EXTI_Trigger_Rising: Interrupt on Rising edge only 00328 * @arg EXTI_Trigger_Falling: Interrupt on Falling edge only 00329 * @arg EXTI_Trigger_Rising_Falling: Interrupt on Rising and Falling edges 00330 * @retval None 00331 */ 00332 void EXTI_SetPortSensitivity(EXTI_Port_TypeDef EXTI_Port, 00333 EXTI_Trigger_TypeDef EXTI_Trigger) 00334 { 00335 /* Check function parameters */ 00336 assert_param(IS_EXTI_PORT(EXTI_Port)); 00337 assert_param(IS_EXTI_TRIGGER(EXTI_Trigger)); 00338 00339 /* Ceck if selected port is in EXTI_CR3 register */ 00340 if ((EXTI_Port & 0xF0) == 0x00) 00341 { 00342 /* Reset the trigger bits corresponding to EXTI_Port */ 00343 EXTI->CR3 &= (uint8_t) (~(uint8_t)((uint8_t)0x03 << EXTI_Port)); 00344 /* Write EXTI port trigger */ 00345 EXTI->CR3 |= (uint8_t)((uint8_t)(EXTI_Trigger) << EXTI_Port); 00346 } 00347 else /* selected port is in EXTI_CR4 register */ 00348 { 00349 /* Reset the trigger bits corresponding to EXTI_Port */ 00350 EXTI->CR4 &= (uint8_t) (~(uint8_t)((uint8_t)0x03 << (EXTI_Port & 0x0F))); 00351 /* Write EXTI port trigger */ 00352 EXTI->CR4 |= (uint8_t)(EXTI_Trigger << (EXTI_Port & 0x0F)); 00353 } 00354 } 00355 00356 /** 00357 * @brief Gets the external interrupt sensitivity of the selected pin. 00358 * @param EXTI_Pin : The pin number to access. 00359 * This parameter can be one of the following values: 00360 * @arg EXTI_Pin_0: GPIO Pin 0 00361 * @arg EXTI_Pin_1: GPIO Pin 1 00362 * @arg EXTI_Pin_2: GPIO Pin 2 00363 * @arg EXTI_Pin_3: GPIO Pin 3 00364 * @arg EXTI_Pin_4: GPIO Pin 4 00365 * @arg EXTI_Pin_5: GPIO Pin 5 00366 * @arg EXTI_Pin_6: GPIO Pin 6 00367 * @arg EXTI_Pin_7: GPIO Pin 7 00368 * @retval The external interrupt sensitivity of the selected port. 00369 */ 00370 EXTI_Trigger_TypeDef EXTI_GetPinSensitivity(EXTI_Pin_TypeDef EXTI_Pin) 00371 { 00372 uint8_t value = 0; 00373 00374 /* Check function parameters */ 00375 assert_param(IS_EXTI_PINNUM(EXTI_Pin)); 00376 00377 switch (EXTI_Pin) 00378 { 00379 case EXTI_Pin_0: 00380 value = (uint8_t)(EXTI->CR1 & EXTI_CR1_P0IS); 00381 break; 00382 case EXTI_Pin_1: 00383 value = (uint8_t)((uint8_t)(EXTI->CR1 & EXTI_CR1_P1IS) >> EXTI_Pin_1); 00384 break; 00385 case EXTI_Pin_2: 00386 value = (uint8_t)((uint8_t)(EXTI->CR1 & EXTI_CR1_P2IS) >> EXTI_Pin_2); 00387 break; 00388 case EXTI_Pin_3: 00389 value = (uint8_t)((uint8_t)(EXTI->CR1 & EXTI_CR1_P3IS) >> EXTI_Pin_3); 00390 break; 00391 case EXTI_Pin_4: 00392 value = (uint8_t)(EXTI->CR2 & EXTI_CR2_P4IS); 00393 break; 00394 case EXTI_Pin_5: 00395 value = (uint8_t)((uint8_t)(EXTI->CR2 & EXTI_CR2_P5IS) >> ((uint8_t)EXTI_Pin_5 & (uint8_t)0x0F)); 00396 break; 00397 case EXTI_Pin_6: 00398 value = (uint8_t)((uint8_t)(EXTI->CR2 & EXTI_CR2_P6IS) >> ((uint8_t)EXTI_Pin_6 & (uint8_t)0x0F)); 00399 break; 00400 case EXTI_Pin_7: 00401 value = (uint8_t)((uint8_t)(EXTI->CR2 & EXTI_CR2_P7IS) >> ((uint8_t)EXTI_Pin_7 & (uint8_t)0x0F)); 00402 break; 00403 default: 00404 break; 00405 } 00406 return((EXTI_Trigger_TypeDef)value); 00407 } 00408 00409 /** 00410 * @brief Gets the external interrupt sensitivity of the selected port. 00411 * @param EXTI_Port : The port number to access. 00412 * This parameter can be one of the following values: 00413 * @arg EXTI_Port_B: GPIO Port B 00414 * @arg EXTI_Port_D: GPIO Port D 00415 * @arg EXTI_Port_E: GPIO Port E 00416 * @arg EXTI_Port_F: GPIO Port F 00417 * @arg EXTI_Port_G: GPIO Port G 00418 * @arg EXTI_Port_H: GPIO Port H 00419 * @retval The external interrupt sensitivity of the selected port. 00420 */ 00421 EXTI_Trigger_TypeDef EXTI_GetPortSensitivity(EXTI_Port_TypeDef EXTI_Port) 00422 { 00423 uint8_t portsensitivity = 0; 00424 00425 /* Check function parameters */ 00426 assert_param(IS_EXTI_PORT(EXTI_Port)); 00427 00428 /* Check if selected port is in EXTI_CR3 */ 00429 if ((EXTI_Port & 0xF0) == 0x00) 00430 { 00431 /* Get port sensitivity */ 00432 portsensitivity = (uint8_t)((uint8_t)0x03 & (uint8_t)(EXTI->CR3 >> EXTI_Port)); 00433 } 00434 /* selected port is in EXTI_CR4 */ 00435 else 00436 { 00437 /* Get port sensitivity */ 00438 portsensitivity = (uint8_t)((uint8_t)0x03 & (uint8_t)(EXTI->CR4 >> (EXTI_Port & 0x0F))); 00439 } 00440 00441 return((EXTI_Trigger_TypeDef)portsensitivity); 00442 } 00443 00444 /** 00445 * @} 00446 */ 00447 00448 /** @defgroup EXTI_Group2 EXTI Interrupt status management functions 00449 * @brief EXTI Interrupt status management functions 00450 * 00451 @verbatim 00452 =============================================================================== 00453 EXTI Interrupt status management functions 00454 =============================================================================== 00455 00456 @endverbatim 00457 * @{ 00458 */ 00459 00460 /** 00461 * @brief Gets the external interrupt status. 00462 * @param EXTI_IT : Specifies the interrupt to read. 00463 * This parameter can be one of the following values: 00464 * @arg EXTI_IT_Pin0: GPIO Pin 0 00465 * @arg EXTI_IT_Pin1: GPIO Pin 1 00466 * @arg EXTI_IT_Pin2: GPIO Pin 2 00467 * @arg EXTI_IT_Pin3: GPIO Pin 3 00468 * @arg EXTI_IT_Pin4: GPIO Pin 4 00469 * @arg EXTI_IT_Pin5: GPIO Pin 5 00470 * @arg EXTI_IT_Pin6: GPIO Pin 6 00471 * @arg EXTI_IT_Pin7: GPIO Pin 7 00472 * @arg EXTI_IT_PortB: GPIO Port B 00473 * @arg EXTI_IT_PortD: GPIO Port D 00474 * @arg EXTI_IT_PortE: GPIO Port E 00475 * @arg EXTI_IT_PortF: GPIO Port F 00476 * @arg EXTI_IT_PortG: GPIO Port G 00477 * @arg EXTI_IT_PortH: GPIO Port H 00478 * @retval The status of the specified interrupt. 00479 * This parameter can be a SET or RESET 00480 */ 00481 ITStatus EXTI_GetITStatus(EXTI_IT_TypeDef EXTI_IT) 00482 { 00483 ITStatus status = RESET; 00484 /* Check function parameters */ 00485 assert_param(IS_EXTI_ITPENDINGBIT(EXTI_IT)); 00486 00487 if (((uint16_t)EXTI_IT & (uint16_t)0xFF00) == 0x0100) 00488 { 00489 status = (ITStatus)(EXTI->SR2 & (uint8_t)((uint16_t)EXTI_IT & (uint16_t)0x00FF)); 00490 } 00491 else 00492 { 00493 status = (ITStatus)(EXTI->SR1 & ((uint8_t)((uint16_t)EXTI_IT & (uint16_t)0x00FF))); 00494 } 00495 return((ITStatus)status); 00496 } 00497 00498 /** 00499 * @brief Clears the specified interrupt pending bit 00500 * @param EXTI_IT : Specifies the interrupt to clear 00501 * This parameter can be one of the following values: 00502 * @arg EXTI_IT_Pin0: GPIO Pin 0 00503 * @arg EXTI_IT_Pin1: GPIO Pin 1 00504 * @arg EXTI_IT_Pin2: GPIO Pin 2 00505 * @arg EXTI_IT_Pin3: GPIO Pin 3 00506 * @arg EXTI_IT_Pin4: GPIO Pin 4 00507 * @arg EXTI_IT_Pin5: GPIO Pin 5 00508 * @arg EXTI_IT_Pin6: GPIO Pin 6 00509 * @arg EXTI_IT_Pin7: GPIO Pin 7 00510 * @arg EXTI_IT_PortB: GPIO Port B 00511 * @arg EXTI_IT_PortD: GPIO Port D 00512 * @arg EXTI_IT_PortE: GPIO Port E 00513 * @arg EXTI_IT_PortF: GPIO Port F 00514 * @arg EXTI_IT_PortG: GPIO Port G 00515 * @arg EXTI_IT_PortH: GPIO Port H 00516 * @retval None 00517 */ 00518 void EXTI_ClearITPendingBit(EXTI_IT_TypeDef EXTI_IT) 00519 { 00520 uint16_t tempvalue = 0; 00521 00522 /* Check function parameters */ 00523 assert_param(IS_EXTI_ITPENDINGBIT(EXTI_IT)); 00524 00525 tempvalue = ((uint16_t)EXTI_IT & (uint16_t)0xFF00); 00526 00527 if ( tempvalue == 0x0100) 00528 { 00529 EXTI->SR2 = (uint8_t)((uint16_t)EXTI_IT & (uint16_t)0x00FF); 00530 } 00531 else 00532 { 00533 EXTI->SR1 = (uint8_t) (EXTI_IT); 00534 } 00535 } 00536 00537 /** 00538 * @} 00539 */ 00540 00541 /** 00542 * @} 00543 */ 00544 00545 /** 00546 * @} 00547 */ 00548 00549 /** 00550 * @} 00551 */ 00552 00553 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/