@@ -535,6 +535,8 @@ void i2c_init_internal(i2c_t *obj, const i2c_pinmap_t *pinmap)
535535 obj_s -> slave = 0 ;
536536 obj_s -> pending_slave_tx_master_rx = 0 ;
537537 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 ;
538540#endif
539541
540542 obj_s -> event = 0 ;
@@ -1573,6 +1575,7 @@ void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *I2cHandle)
15731575 i2c_t * obj = get_i2c_obj (I2cHandle );
15741576 struct i2c_s * obj_s = I2C_S (obj );
15751577 obj_s -> pending_slave_tx_master_rx = 0 ;
1578+ obj_s -> slave_tx_transfer_in_progress = 0 ;
15761579}
15771580
15781581void HAL_I2C_SlaveRxCpltCallback (I2C_HandleTypeDef * I2cHandle )
@@ -1587,9 +1590,11 @@ void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *I2cHandle)
15871590 HAL_I2C_Slave_Seq_Receive_IT (I2cHandle , & (obj_s -> slave_rx_buffer [obj_s -> slave_rx_count ]), 1 , I2C_NEXT_FRAME );
15881591 } else {
15891592 obj_s -> pending_slave_rx_maxter_tx = 0 ;
1593+ obj_s -> slave_rx_transfer_in_progress = 0 ;
15901594 }
15911595 } else {
15921596 obj_s -> pending_slave_rx_maxter_tx = 0 ;
1597+ obj_s -> slave_rx_transfer_in_progress = 0 ;
15931598 }
15941599}
15951600
@@ -1643,12 +1648,13 @@ int i2c_slave_read(i2c_t *obj, char *data, int length)
16431648 _length = length ;
16441649 }
16451650
1651+ obj_s -> slave_rx_transfer_in_progress = 1 ;
16461652 /* Always use I2C_NEXT_FRAME as slave will just adapt to master requests */
16471653 ret = HAL_I2C_Slave_Seq_Receive_IT (handle , (uint8_t * ) data , _length , I2C_NEXT_FRAME );
16481654
16491655 if (ret == HAL_OK ) {
16501656 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 )) {
16521658 wait_us (1 );
16531659 }
16541660
@@ -1673,12 +1679,13 @@ int i2c_slave_write(i2c_t *obj, const char *data, int length)
16731679 int ret = 0 ;
16741680 uint32_t timeout = 0 ;
16751681
1682+ obj_s -> slave_tx_transfer_in_progress = 1 ;
16761683 /* Always use I2C_NEXT_FRAME as slave will just adapt to master requests */
16771684 ret = HAL_I2C_Slave_Seq_Transmit_IT (handle , (uint8_t * ) data , length , I2C_NEXT_FRAME );
16781685
16791686 if (ret == HAL_OK ) {
16801687 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 )) {
16821689 wait_us (1 );
16831690 }
16841691
0 commit comments