STM8L15x Standard Peripherals Drivers: stm8l15x_exti.c Source File

STM8L15x/16x Standard Peripherals Drivers

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>&copy; 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****/
STM8S Firmware Library: Overview

 

 

 

For complete documentation on STM8L15x 8-bit microcontrollers platform visit www.st.com