Exemple #1
0
/*******************************************************************************
* Function Name  : I2C2_EV_IRQHandler
* Description    : This function handles I2C2 Event interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void I2C2_EV_IRQHandler(void)
{
  switch (I2C_GetLastEvent(I2C2))
  {
    /* Slave Transmitter ---------------------------------------------------*/
    case I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED:  /* EV1 */
    
      /* Transmit I2C2 data */
      I2C_SendData(I2C2, I2C2_Buffer_Tx[Tx2_Idx++]);
      break;

   case I2C_EVENT_SLAVE_BYTE_TRANSMITTED:             /* EV3 */
      /* Transmit I2C2 data */
      I2C_SendData(I2C2, I2C2_Buffer_Tx[Tx2_Idx++]);
      break; 
  

    /* Slave Receiver ------------------------------------------------------*/
    case I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED:     /* EV1 */
      break;

    case I2C_EVENT_SLAVE_BYTE_RECEIVED:                /* EV2 */
      /* Store I2C2 received data */
      I2C2_Buffer_Rx[Rx2_Idx++] = I2C_ReceiveData(I2C2);

      if(Rx2_Idx == Tx2BufferSize)
      { 
        I2C_TransmitPEC(I2C2, ENABLE);  
        Direction = Receiver;
      }
      break; 

    case I2C_EVENT_SLAVE_STOP_DETECTED:                /* EV4 */
      /* Clear I2C2 STOPF flag: read of I2C_SR1 followed by a write on I2C_CR1 */
      (void)(I2C_GetITStatus(I2C2, I2C_IT_STOPF));
      I2C_Cmd(I2C2, ENABLE);
      break;
   
    default:
      break;
  }
}
Exemple #2
0
/*******************************************************************************
* Function Name  : I2C1_EV_IRQHandler
* Description    : This function handles I2C1 Event interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void I2C1_EV_IRQHandler(void)
{
  switch (I2C_GetLastEvent(I2C1))
  {
    case I2C_EVENT_MASTER_MODE_SELECT:                 /* EV5 */
      if(Direction == Transmitter)
      {
        /* Master Transmitter ----------------------------------------------*/
        /* Send slave Address for write */
        I2C_Send7bitAddress(I2C1, I2C2_SLAVE_ADDRESS7, I2C_Direction_Transmitter);
      }
      else
      {
        /* Master Receiver -------------------------------------------------*/
        /* Send slave Address for read */
        I2C_Send7bitAddress(I2C1, I2C2_SLAVE_ADDRESS7, I2C_Direction_Receiver);
       
      }
      break;
        
    /* Master Transmitter --------------------------------------------------*/
    /* Test on I2C1 EV6 and first EV8 and clear them */
    case I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED:  
      
      /* Send the first data */
      I2C_SendData(I2C1, I2C1_Buffer_Tx[Tx1_Idx++]); 
      break;

    /* Test on I2C1 EV8 and clear it */
  case I2C_EVENT_MASTER_BYTE_TRANSMITTING:  /* Without BTF, EV8 */     
      if(Tx1_Idx < (Tx1BufferSize))
      {
        /* Transmit I2C1 data */
        I2C_SendData(I2C1, I2C1_Buffer_Tx[Tx1_Idx++]);
      
      }
      else
      {
        I2C_TransmitPEC(I2C1, ENABLE); 
        I2C_ITConfig(I2C1, I2C_IT_BUF, DISABLE);
      }            
      break;

    case I2C_EVENT_MASTER_BYTE_TRANSMITTED: /* With BTF EV8-2 */
        I2C_ITConfig(I2C1, I2C_IT_BUF, ENABLE);
        /* I2C1 Re-START Condition */
        I2C_GenerateSTART(I2C1, ENABLE);
      break;

    /* Master Receiver -------------------------------------------------------*/
    case I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED:
      if(Tx2BufferSize == 1)
      {
        /* Disable I2C1 acknowledgement */
        I2C_AcknowledgeConfig(I2C1, DISABLE);
        /* Send I2C1 STOP Condition */
        I2C_GenerateSTOP(I2C1, ENABLE);
      }
      break;

   /* Test on I2C1 EV7 and clear it */
   case I2C_EVENT_MASTER_BYTE_RECEIVED:
     /* Store I2C1 received data */
     I2C1_Buffer_Rx[Rx1_Idx++] = I2C_ReceiveData (I2C1);
     /* Disable ACK and send I2C1 STOP condition before receiving the last data */
     if(Rx1_Idx == (Tx2BufferSize - 1))
     {
       /* Disable I2C1 acknowledgement */
       I2C_AcknowledgeConfig(I2C1, DISABLE);
       /* Send I2C1 STOP Condition */
       I2C_GenerateSTOP(I2C1, ENABLE);
     }
     break;

    default:
      break;
  }
}
Exemple #3
0
/*************************************************************
 * I2C initialization code template
**************************************************************/
void I2C1_Init()
{
    #if (STRCMP($interruptEn$, 0) == 0)
    NVIC_InitTypeDef NVIC_InitStructure;
    #endif
    I2C_InitTypeDef I2C_InitStructure;
	
    //PUT_A_NEW_LINE_HERE
    //
    // Enable I2C clock
    //
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);

    #if (STRCMP($SCL1$, DISABLE) == 0 || STRCMP($SDA1$, DISABLE) == 0)
    //PUT_A_NEW_LINE_HERE
    //
    // Enable AFIO and I2C clock
    //
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);	
    //PUT_A_NEW_LINE_HERE
    //
    // I2C SCL pin remap to PB8, I2C SDA pin remap to PB8
    //
    GPIO_PinRemapConfig(GPIO_Remap_I2C1,ENABLE);
	#endif

    //PUT_A_NEW_LINE_HERE
    //
    // I2C config
    //
    I2C_InitStructure.I2C_Mode = $mode$;
    I2C_InitStructure.I2C_DutyCycle = $dutyCycle$;
    I2C_InitStructure.I2C_OwnAddress1 = $ownAddress$;
    I2C_InitStructure.I2C_Ack = $ack$;
    I2C_InitStructure.I2C_AcknowledgedAddress = $ackAddress$;
    I2C_InitStructure.I2C_ClockSpeed = $speed$;
    I2C_Init($I2C$, &I2C_InitStructure);

    //PUT_A_NEW_LINE_HERE
    //
    // Enable I2C
    //
    I2C_Cmd($I2C$, ENABLE);
    I2C_Init($I2C$, &I2C_InitStructure);
	
    #if (STRCMP($interruptEn$, 0) == 0)	
    //PUT_A_NEW_LINE_HERE
    //
    // Enable I2C DualAddress
    //
    I2C_OwnAddress2Config($I2C$, $ownAddress2$);
    I2C_DualAddressCmd($I2C$, ENABLE);
    #endif
	
    #if($modeSelect$)
    //PUT_A_NEW_LINE_HERE
    //
    // Transmits the address byte to select the slave device
    //
    I2C_Send7bitAddress($I2C$, $slaveAddress$, $transferDirection$);
    #endif
	
    #if(STRCMP($GenCallEn$, DISABLE) == 0)
    //PUT_A_NEW_LINE_HERE
    //
    // Enables I2C1 general call feature
    //
    I2C_GeneralCallCmd($I2C$, ENABLE);
    #endif

    #if(STRCMP($StrchClkEn$, DISABLE) == 0)
    //PUT_A_NEW_LINE_HERE
    //
    // Enables I2C1 Clock stretching
    //
    I2C_StretchClockCmd($I2C$, ENABLE);
    #endif
	
    #if (STRCMP($interruptEn$, 0) == 0)
    //PUT_A_NEW_LINE_HERE
    //
    // Interrupt config
    //
    I2C_ITConfig($I2C$, $interruptEn$, ENABLE);
    NVIC_InitStructure.NVIC_IRQChannel = I2C1_EV_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    #endif

    #if($pecTransmitEn$)
    //PUT_A_NEW_LINE_HERE
    //
    // PEC Transmit Enable
    //
    #if($pecTransmitEn$)
    I2C_TransmitPEC($I2C$, ENABLE);
    #endif
    #if($pecCalculateEn$)
    I2C_CalculatePEC($I2C$, ENABLE);
    #endif   
    #if(STRCMP($pecPosition$, I2C_PECPosition_Next))
    I2C_PECPositionConfig($I2C$, $pecPosition$);
    #endif  
    #if(STRCMP($pecPosition$, I2C_PECPosition_Current))
    I2C_PECPositionConfig($I2C$, $pecPosition$);
    #endif
    #endif
    
	#if(!STRCMP($mode$, I2C_Mode_I2C))
    //PUT_A_NEW_LINE_HERE
    //
    // PEC Transmit Enable
    //
    I2C_SMBusAlertConfig($I2C$, $SMBusAlertCfg$);
    I2C_ARPCmd($I2C$, $ARPEn$);
    #endif
}