@@ -535,6 +535,8 @@ void i2c_init_internal(i2c_t *obj, const i2c_pinmap_t *pinmap)
535
535
obj_s -> slave = 0 ;
536
536
obj_s -> pending_slave_tx_master_rx = 0 ;
537
537
obj_s -> pending_slave_rx_maxter_tx = 0 ;
538
+ obj_s -> slave_tx_transfer_in_progress = 0 ;
539
+ obj_s -> slave_rx_transfer_in_progress = 0 ;
538
540
#endif
539
541
540
542
obj_s -> event = 0 ;
@@ -1573,6 +1575,7 @@ void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *I2cHandle)
1573
1575
i2c_t * obj = get_i2c_obj (I2cHandle );
1574
1576
struct i2c_s * obj_s = I2C_S (obj );
1575
1577
obj_s -> pending_slave_tx_master_rx = 0 ;
1578
+ obj_s -> slave_tx_transfer_in_progress = 0 ;
1576
1579
}
1577
1580
1578
1581
void HAL_I2C_SlaveRxCpltCallback (I2C_HandleTypeDef * I2cHandle )
@@ -1587,9 +1590,11 @@ void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *I2cHandle)
1587
1590
HAL_I2C_Slave_Seq_Receive_IT (I2cHandle , & (obj_s -> slave_rx_buffer [obj_s -> slave_rx_count ]), 1 , I2C_NEXT_FRAME );
1588
1591
} else {
1589
1592
obj_s -> pending_slave_rx_maxter_tx = 0 ;
1593
+ obj_s -> slave_rx_transfer_in_progress = 0 ;
1590
1594
}
1591
1595
} else {
1592
1596
obj_s -> pending_slave_rx_maxter_tx = 0 ;
1597
+ obj_s -> slave_rx_transfer_in_progress = 0 ;
1593
1598
}
1594
1599
}
1595
1600
@@ -1643,12 +1648,13 @@ int i2c_slave_read(i2c_t *obj, char *data, int length)
1643
1648
_length = length ;
1644
1649
}
1645
1650
1651
+ obj_s -> slave_rx_transfer_in_progress = 1 ;
1646
1652
/* Always use I2C_NEXT_FRAME as slave will just adapt to master requests */
1647
1653
ret = HAL_I2C_Slave_Seq_Receive_IT (handle , (uint8_t * ) data , _length , I2C_NEXT_FRAME );
1648
1654
1649
1655
if (ret == HAL_OK ) {
1650
1656
timeout = BYTE_TIMEOUT_US * (_length + 1 );
1651
- while (obj_s -> pending_slave_rx_maxter_tx && (-- timeout != 0 )) {
1657
+ while (obj_s -> slave_rx_transfer_in_progress && (-- timeout != 0 )) {
1652
1658
wait_us (1 );
1653
1659
}
1654
1660
@@ -1673,12 +1679,13 @@ int i2c_slave_write(i2c_t *obj, const char *data, int length)
1673
1679
int ret = 0 ;
1674
1680
uint32_t timeout = 0 ;
1675
1681
1682
+ obj_s -> slave_tx_transfer_in_progress = 1 ;
1676
1683
/* Always use I2C_NEXT_FRAME as slave will just adapt to master requests */
1677
1684
ret = HAL_I2C_Slave_Seq_Transmit_IT (handle , (uint8_t * ) data , length , I2C_NEXT_FRAME );
1678
1685
1679
1686
if (ret == HAL_OK ) {
1680
1687
timeout = BYTE_TIMEOUT_US * (length + 1 );
1681
- while (obj_s -> pending_slave_tx_master_rx && (-- timeout != 0 )) {
1688
+ while (obj_s -> slave_tx_transfer_in_progress && (-- timeout != 0 )) {
1682
1689
wait_us (1 );
1683
1690
}
1684
1691
0 commit comments