Пытаюсь разобраться с коммуникацией по I2C, есть плата, которая шлёт мне 16 байт, и в ответ ожидает от меня 3 байта, с обработкой пришедших байт всё нормально, однако при отправке, байты отправляются в неправильном порядке, я ожидаю, что байты уйдут в последовательности 0x01 0x02 0x03, сижу битый час безрезультатно, возможно кто-то может подсказать в чём ошибка.
Мой обработчик прерываний I2C:
void I2C2_IRQHandler(void)
{
/* USER CODE BEGIN I2C2_IRQn 0 */
TXBUF[0] = 0x01;
TXBUF[1] = 0x02;
TXBUF[2] = 0x03;
/* USER CODE END I2C2_IRQn 0 */
if(I2C2->ISR & I2C_ISR_RXNE)
{
BUF[CNT] = I2C2->RXDR;
CNT++;
}
if(I2C2->ISR & I2C_ISR_ADDR)
{
CNT=0;
TXCNT=0;
I2C2->ICR |= I2C_ICR_ADDRCF;
}
if(I2C2->ISR & I2C_ISR_STOPF)
{
I2C2->ICR |= I2C_ICR_STOPCF;
}
if(I2C2->ISR & I2C_ISR_NACKF)
{
I2C2->ICR |= I2C_ICR_NACKCF;
}
if(I2C2->ISR & I2C_ISR_TXIS)
{
if(TXCNT >= 3)
{
I2C2->CR2 |= I2C_CR2_STOP;
}
else
{
I2C2->TXDR = TXBUF[TXCNT];
TXCNT++;
}
}
/* USER CODE BEGIN I2C2_IRQn 1 */
/* USER CODE END I2C2_IRQn 1 */
}
Инициализация I2C:
void MX_I2C2_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_I2C2_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF6_I2C2;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
CLEAR_BIT(I2C2->CR1, I2C_CR1_PE);
I2C2->TIMINGR = 0x0010061A;
I2C2->OAR1 &= ~I2C_OAR1_OA1EN;
I2C2->OAR1 |= (I2C_OAR1_OA1EN | 0x78);
I2C2->CR2 |= (I2C_CR2_AUTOEND | I2C_CR2_NACK);
I2C2->CR1 |= I2C_CR1_PE;
I2C2->CR1 |= I2C_CR1_RXIE;
I2C2->CR1 |= I2C_CR1_STOPIE;
I2C2->CR1 |= I2C_CR1_NACKIE;
I2C2->CR1 |= I2C_CR1_TXIE;
I2C2->CR1 |= I2C_CR1_ADDRIE;
NVIC_EnableIRQ(I2C2_IRQn);
NVIC_SetPriority(I2C2_IRQn,0);
}
То, что уходит по шине