text: /**
    ******************************************************************************
    * @file    stm8s_gpio.h
    * @author  MCD Application Team
    * @version V2.2.0
    * @date    30-September-2014
    * @brief   This file contains all functions prototype and macros for the GPIO peripheral.
     ******************************************************************************
    * @attention
    *
    * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
    *
    * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
    * You may not use this file except in compliance with the License.
    * You may obtain a copy of the License at:
    *
    *        http://www.st.com/software_license_agreement_liberty_v2
    *
    * Unless required by applicable law or agreed to in writing, software 
    * distributed under the License is distributed on an "AS IS" BASIS, 
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    *
    ******************************************************************************
    */
  
  /* Define to prevent recursive inclusion -------------------------------------*/
  #ifndef __STM8S_GPIO_H
  #define __STM8S_GPIO_H
  
  /* Includes ------------------------------------------------------------------*/
  #include "stm8s.h"
  
  /* Exported variables ------------------------------------------------------- */
  /* Exported types ------------------------------------------------------------*/
  
  /** @addtogroup GPIO_Exported_Types
    * @{
    */
  
  /**
    * @brief  GPIO modes
    *
    * Bits definitions:
    * - Bit 7: 0 = INPUT mode
    *          1 = OUTPUT mode
    *          1 = PULL-UP (input) or PUSH-PULL (output)
    * - Bit 5: 0 = No external interrupt (input) or No slope control (output)
    *          1 = External interrupt (input) or Slow control enabled (output)
    * - Bit 4: 0 = Low level (output)
    *          1 = High level (output push-pull) or HI-Z (output open-drain)
    */
  typedef enum
  {
    GPIO_MODE_IN_FL_NO_IT      = (uint8_t)0x00,  /*!< Input floating, no external interrupt */
    GPIO_MODE_IN_PU_NO_IT      = (uint8_t)0x40,  /*!< Input pull-up, no external interrupt */
    GPIO_MODE_IN_FL_IT         = (uint8_t)0x20,  /*!< Input floating, external interrupt */
    GPIO_MODE_IN_PU_IT         = (uint8_t)0x60,  /*!< Input pull-up, external interrupt */
    GPIO_MODE_OUT_OD_LOW_FAST  = (uint8_t)0xA0,  /*!< Output open-drain, low level, 10MHz */
    GPIO_MODE_OUT_PP_LOW_FAST  = (uint8_t)0xE0,  /*!< Output push-pull, low level, 10MHz */
    GPIO_MODE_OUT_OD_LOW_SLOW  = (uint8_t)0x80,  /*!< Output open-drain, low level, 2MHz */
    GPIO_MODE_OUT_PP_LOW_SLOW  = (uint8_t)0xC0,  /*!< Output push-pull, low level, 2MHz */
    GPIO_MODE_OUT_OD_HIZ_FAST  = (uint8_t)0xB0,  /*!< Output open-drain, high-impedance level,10MHz */
    GPIO_MODE_OUT_PP_HIGH_FAST = (uint8_t)0xF0,  /*!< Output push-pull, high level, 10MHz */
    GPIO_MODE_OUT_OD_HIZ_SLOW  = (uint8_t)0x90,  /*!< Output open-drain, high-impedance level, 2MHz */
    GPIO_MODE_OUT_PP_HIGH_SLOW = (uint8_t)0xD0   /*!< Output push-pull, high level, 2MHz */
  }GPIO_Mode_TypeDef;
  
  /**
    * @brief  Definition of the GPIO pins. Used by the @ref GPIO_Init function in
    * order to select the pins to be initialized.
    */
  
  typedef enum
  {
    GPIO_PIN_0    = ((uint8_t)0x01),  /*!< Pin 0 selected */
    GPIO_PIN_1    = ((uint8_t)0x02),  /*!< Pin 1 selected */
    GPIO_PIN_2    = ((uint8_t)0x04),  /*!< Pin 2 selected */
    GPIO_PIN_3    = ((uint8_t)0x08),   /*!< Pin 3 selected */
    GPIO_PIN_4    = ((uint8_t)0x10),  /*!< Pin 4 selected */
    GPIO_PIN_5    = ((uint8_t)0x20),  /*!< Pin 5 selected */
    GPIO_PIN_6    = ((uint8_t)0x40),  /*!< Pin 6 selected */
    GPIO_PIN_7    = ((uint8_t)0x80),  /*!< Pin 7 selected */
    GPIO_PIN_LNIB = ((uint8_t)0x0F),  /*!< Low nibble pins selected */
    GPIO_PIN_HNIB = ((uint8_t)0xF0),  /*!< High nibble pins selected */
    GPIO_PIN_ALL  = ((uint8_t)0xFF)   /*!< All pins selected */
  }GPIO_Pin_TypeDef;
  
  /**
    * @}
    */
  
  /* Exported constants --------------------------------------------------------*/
  /* Exported macros -----------------------------------------------------------*/
  /* Private macros ------------------------------------------------------------*/
  
  /** @addtogroup GPIO_Private_Macros
    * @{
    */
  
  /**
    * @brief  Macro used by the assert function to check the different functions parameters.
    */
  
  /**
    * @brief  Macro used by the assert function in order to check the different
    * values of GPIOMode_TypeDef.
    */
  #define IS_GPIO_MODE_OK(MODE) \
    (((MODE) == GPIO_MODE_IN_FL_NO_IT)    || \
     ((MODE) == GPIO_MODE_IN_PU_NO_IT)    || \
     ((MODE) == GPIO_MODE_IN_FL_IT)       || \
     ((MODE) == GPIO_MODE_IN_PU_IT)       || \
     ((MODE) == GPIO_MODE_OUT_OD_LOW_FAST)  || \
     ((MODE) == GPIO_MODE_OUT_PP_LOW_FAST)  || \
     ((MODE) == GPIO_MODE_OUT_OD_LOW_SLOW)  || \
     ((MODE) == GPIO_MODE_OUT_PP_LOW_SLOW)  || \
     ((MODE) == GPIO_MODE_OUT_OD_HIZ_FAST)  || \
     ((MODE) == GPIO_MODE_OUT_PP_HIGH_FAST)  || \
     ((MODE) == GPIO_MODE_OUT_OD_HIZ_SLOW)  || \
     ((MODE) == GPIO_MODE_OUT_PP_HIGH_SLOW))
  
  /**
    * @brief  Macro used by the assert function in order to check the different
    * values of GPIO_Pins.
    */
  #define IS_GPIO_PIN_OK(PIN)  ((PIN) != (uint8_t)0x00)
  
  /**
    * @}
    */
  
  /* Exported functions ------------------------------------------------------- */
  /** @addtogroup GPIO_Exported_Functions
    * @{
    */
  
  void GPIO_DeInit(GPIO_TypeDef* GPIOx);
  void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode);
  void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal);
  void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
  void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
  void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
  uint8_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
  uint8_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
  BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin);
  void GPIO_ExternalPullUpConfig(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, FunctionalState NewState);
  /**
    * @}
    */
  
  #endif /* __STM8L_GPIO_H */
  
  
  /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  