text: /**
    ******************************************************************************
    * @file     stm8s_it.c
    * @author   MCD Application Team
    * @version  V2.2.0
    * @date     30-September-2014
    * @brief    Main Interrupt Service Routines.
    ******************************************************************************
    * @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.
    *
    ******************************************************************************
    */ 
  
  /* Includes ------------------------------------------------------------------*/
  #include "stm8s_it.h"
  #include "main.h"
  /** @addtogroup I2C_TwoBoards
    * @{
    */
  
  /** @addtogroup I2C_DataExchange
    * @{
    */
  /* Private typedef -----------------------------------------------------------*/
  /* Private define ------------------------------------------------------------*/
  /* Private macro -------------------------------------------------------------*/
  extern uint8_t HEADER_ADDRESS_Write = (((SLAVE_ADDRESS & 0xFF00) >> 7) | 0xF0);
  extern uint8_t HEADER_ADDRESS_Read;
  /* Private variables ---------------------------------------------------------*/
  __IO uint8_t TxBuffer[BUFFERSIZE];
  extern __IO uint8_t NumOfBytes;
  extern __IO uint8_t Tx_Idx;
  /* Private function prototypes -----------------------------------------------*/
  /* Private functions ---------------------------------------------------------*/
  /* Public functions ----------------------------------------------------------*/
  
  #ifdef _COSMIC_
  /**
    * @brief  Dummy interrupt routine
    * @param  None
    * @retval None
    */
  @far @interrupt void NonHandledInterrupt(void)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  /**
    * @brief  TRAP interrupt routine
    * @param  None
    * @retval None
    */
  @far @interrupt void TRAP_IRQHandler(void)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  #else /*_RAISONANCE_*/
  
  /**
    * @brief  TRAP interrupt routine
    * @param  None
    * @retval None
    */
  INTERRUPT_HANDLER_TRAP(TRAP_IRQHandler)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  #endif /*_COSMIC_*/
  
  /**
    * @brief  Top Level Interrupt routine
    * @param None
    * @retval
    * None
    */
  INTERRUPT_HANDLER(TLI_IRQHandler, 0)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  /**
    * @brief  Auto Wake Up Interrupt routine
    * @param None
    * @retval
    * None
    */
  INTERRUPT_HANDLER(AWU_IRQHandler, 1)	
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  /**
    * @brief  Clock Controller Interrupt routine
    * @param None
    * @retval
    * None
    */
  INTERRUPT_HANDLER(CLK_IRQHandler, 2)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  /**
    * @brief  External Interrupt PORTA Interrupt routine
    * @param None
    * @retval
    * None
    */
  INTERRUPT_HANDLER(EXTI_PORTA_IRQHandler, 3)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  /**
    * @brief  External Interrupt PORTB Interrupt routine
    * @param  None
    * @retval None
    */
  INTERRUPT_HANDLER(EXTI_PORTB_IRQHandler, 4)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  /**
    * @brief  External Interrupt PORTC Interrupt routine
    * @param None
    * @retval
    * None
    */
  INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler, 5)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  /**
    * @brief  External Interrupt PORTD Interrupt routine
    * @param None
    * @retval
    * None
    */
  INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  /**
    * @brief  External Interrupt PORTE Interrupt routine
    * @param None
    * @retval
    * None
    */
  INTERRUPT_HANDLER(EXTI_PORTE_IRQHandler, 7)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  #ifdef STM8S903
  /**
    * @brief  External Interrupt PORTF Interrupt routine
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(EXTI_PORTF_IRQHandler, 8)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  #endif /*STM8S903*/
  
  #ifdef STM8S208
  /**
    * @brief  CAN RX Interrupt routine
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(CAN_RX_IRQHandler, 8)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  /**
    * @brief  CAN TX Interrupt routine
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(CAN_TX_IRQHandler, 9)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  #endif /*STM8S208 || STM8AF52Ax */
  
  /**
    * @brief  SPI Interrupt routine
    * @param None
    * @retval
    * None
    */
  INTERRUPT_HANDLER(SPI_IRQHandler, 10)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  /**
    * @brief  Timer1 Update/Overflow/Trigger/Break Interrupt routine
    * @param None
    * @retval
    * None
    */
  INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  /**
    * @brief  Timer1 Capture/Compare Interrupt routine
    * @param None
    * @retval
    * None
    */
  INTERRUPT_HANDLER(TIM1_CAP_COM_IRQHandler, 12)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  #ifdef STM8S903
  /**
    * @brief  Timer5 Update/Overflow/Break/Trigger Interrupt routine
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(TIM5_UPD_OVF_BRK_TRG_IRQHandler, 13)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  /**
    * @brief  Timer5 Capture/Compare Interrupt routine
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(TIM5_CAP_COM_IRQHandler, 14)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  #else /*STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF62Ax or STM8AF52Ax or STM8AF626x */
  /**
    * @brief  Timer2 Update/Overflow/Break Interrupt routine
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  /**
    * @brief  Timer2 Capture/Compare Interrupt routine
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(TIM2_CAP_COM_IRQHandler, 14)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  #endif /*STM8S903*/
  
  #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \
      defined(STM8S005) ||  defined (STM8AF62Ax) || defined (STM8AF52Ax) || defined (STM8AF626x)
  /**
    * @brief  Timer3 Update/Overflow/Break Interrupt routine
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(TIM3_UPD_OVF_BRK_IRQHandler, 15)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  /**
    * @brief  Timer3 Capture/Compare Interrupt routine
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(TIM3_CAP_COM_IRQHandler, 16)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  #endif /*STM8S208, STM8S207 or STM8S105 or STM8AF62Ax or STM8AF52Ax or STM8AF626x */
  
  #if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S103) || \
      defined(STM8S003) ||  defined (STM8AF62Ax) || defined (STM8AF52Ax) || defined (STM8S903)
  /**
    * @brief  UART1 TX Interrupt routine
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(UART1_TX_IRQHandler, 17)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  /**
    * @brief  UART1 RX Interrupt routine
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  #endif /*STM8S208, STM8S207 or STM8S103 or STM8AF62Ax or STM8AF52Ax or STM8S903 */
  
  /**
    * @brief  I2C Interrupt routine
    * @param None
    * @retval
    * None
    */
  INTERRUPT_HANDLER(I2C_IRQHandler, 19)
  {
    switch (I2C_GetLastEvent())
    {
        /* EV5 */
      case I2C_EVENT_MASTER_MODE_SELECT :
  
  #ifdef TEN_BITS_ADDRESS
        /* Send Header to Slave for write */
        I2C_SendData(HEADER_ADDRESS_Write);
        break;
  
        /* EV9 */
      case I2C_EVENT_MASTER_MODE_ADDRESS10:
        /* Send slave Address for write */
        I2C_Send7bitAddress(SLAVE_ADDRESS, I2C_DIRECTION_TX);
        break;
  #else
        /* Send slave Address for write */
        I2C_Send7bitAddress(SLAVE_ADDRESS, I2C_DIRECTION_TX);
        break;
  #endif
        /* EV6 */
      case I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED:
        if (NumOfBytes != 0)
        {
          /* Send the first Data */
          I2C_SendData(TxBuffer[Tx_Idx++]);
  
          /* Decrement number of bytes */
          NumOfBytes--;
        }
        if (NumOfBytes == 0)
        {
          I2C_ITConfig(I2C_IT_BUF, DISABLE);
        }
        break;
  
        /* EV8 */
      case I2C_EVENT_MASTER_BYTE_TRANSMITTING:
        /* Transmit Data */
        I2C_SendData(TxBuffer[Tx_Idx++]);
  
        /* Decrement number of bytes */
        NumOfBytes--;
  
        if (NumOfBytes == 0)
        {
          I2C_ITConfig(I2C_IT_BUF, DISABLE);
        }
        break;
  
        /* EV8_2 */
      case I2C_EVENT_MASTER_BYTE_TRANSMITTED:
        /* Send STOP condition */
        I2C_GenerateSTOP(ENABLE);
  
        I2C_ITConfig(I2C_IT_EVT, DISABLE);
        break;
  
      default:
        break;
    }
  }
  
  #if defined(STM8S105) || defined(STM8S005) ||  defined (STM8AF626x)
  /**
    * @brief  UART2 TX interrupt routine.
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(UART2_TX_IRQHandler, 20)
  {
      /* In order to detect unexpected events during development,
         it is recommended to set a breakpoint on the following instruction.
      */
  }
  
  /**
    * @brief  UART2 RX interrupt routine.
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(UART2_RX_IRQHandler, 21)
  {
      /* In order to detect unexpected events during development,
         it is recommended to set a breakpoint on the following instruction.
      */
  }
  #endif /* STM8S105*/
  
  #if defined(STM8S207) || defined(STM8S007) || defined(STM8S208) || defined (STM8AF52Ax) || defined (STM8AF62Ax)
  /**
    * @brief  UART3 TX interrupt routine.
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(UART3_TX_IRQHandler, 20)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  /**
    * @brief  UART3 RX interrupt routine.
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(UART3_RX_IRQHandler, 21)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  #endif /*STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax */
  
  #if defined(STM8S207) || defined(STM8S007) || defined(STM8S208) || defined (STM8AF52Ax) || defined (STM8AF62Ax)
  /**
    * @brief  ADC2 interrupt routine.
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(ADC2_IRQHandler, 22)
  {
      /* In order to detect unexpected events during development,
         it is recommended to set a breakpoint on the following instruction.
      */
  }
  #else /*STM8S105, STM8S103 or STM8S903 or STM8AF626x */
  /**
    * @brief  ADC1 interrupt routine.
    * @param  None
    * @retval None
    */
   INTERRUPT_HANDLER(ADC1_IRQHandler, 22)
  {
      /* In order to detect unexpected events during development,
         it is recommended to set a breakpoint on the following instruction.
      */
  }
  #endif /*STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax */
  
  #ifdef STM8S903
  /**
    * @brief  Timer6 Update/Overflow/Trigger Interrupt routine
    * @param None
    * @retval
    * None
    */
  INTERRUPT_HANDLER(TIM6_UPD_OVF_TRG_IRQHandler, 23)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  #else /*STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF62Ax or STM8AF52Ax or STM8AF626x */
  /**
    * @brief  Timer4 Update/Overflow Interrupt routine
    * @param None
    * @retval
    * None
    */
   INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  #endif /*STM8S903*/
  
  /**
    * @brief  Eeprom EEC Interrupt routine
    * @param None
    * @retval
  	* None
    */
  INTERRUPT_HANDLER(EEPROM_EEC_IRQHandler, 24)
  {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  }
  
  /**
    * @}
    */
  
  
  /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/