void I2C1_IRQHandler(void)
{
/* USER CODE BEGIN I2C1_IRQn 0 */
extern void i2c1_irq(I2C_HandleTypeDef *hi2c);
i2c1_irq(&hi2c1);
return ;
/* USER CODE END I2C1_IRQn 0 */
if (hi2c1.Instance->ISR & (I2C_FLAG_BERR | I2C_FLAG_ARLO | I2C_FLAG_OVR)) {
HAL_I2C_ER_IRQHandler(&hi2c1);
} else {
HAL_I2C_EV_IRQHandler(&hi2c1);
}
/* USER CODE BEGIN I2C1_IRQn 1 */
/* USER CODE END I2C1_IRQn 1 */
}
void i2c1_irq(I2C_HandleTypeDef *hi2c)
{
uint32_t ITFlags = READ_REG(hi2c->Instance->ISR);
uint32_t ITSources = READ_REG(hi2c->Instance->CR1);
if (((ITFlags & I2C_FLAG_ADDR) != RESET) )
{
i2c_sta.rx_index=0;
i2c_sta.tx_index=0;
if((ITFlags&I2C_ISR_DIR)!=0)
{
hi2c1.Instance->ISR |= I2C_ISR_TXE;
i2c_sta.pec=Pectable[0^I2C_SLAVE_ADD];
}
__HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR);
}
if (((ITFlags & I2C_FLAG_RXNE) != RESET) )
{
i2c_sta.rx_flag=1;
i2c_sta.rx_buff[i2c_sta.rx_index] = hi2c->Instance->RXDR;
if(i2c_sta.rx_index< I2C_BUFF_LEN-1)
i2c_sta.rx_index++;
}
if (((ITFlags & I2C_FLAG_TXIS) != RESET) )
{
if(i2c_sta.tx_index<i2c_sta.tx_len)
{
hi2c->Instance->TXDR = i2c_sta.tx_buff[i2c_sta.tx_index];
i2c_sta.pec=Pectable[i2c_sta.pec^i2c_sta.tx_buff[i2c_sta.tx_index]];
if(i2c_sta.tx_index< I2C_BUFF_LEN-1)
i2c_sta.tx_index++;
}
else
hi2c->Instance->TXDR = i2c_sta.pec;
}
if (((ITFlags & I2C_FLAG_STOPF) != RESET) )
{
__HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF);
i2c_sta.stop=1;
}
if (((ITFlags & I2C_FLAG_AF) != RESET) )
{
__HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);
}
if (hi2c1.Instance->ISR & (I2C_FLAG_BERR )) {
__HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_BERR);
}
if (hi2c1.Instance->ISR & ( I2C_FLAG_ARLO )) {
__HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ARLO);
}
if (hi2c1.Instance->ISR & (I2C_FLAG_OVR)) {
__HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_OVR);
}
}