@@ -760,12 +760,14 @@ STATIC mp_obj_t pyb_i2c_send(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_
760
760
if (!use_dma ) {
761
761
status = HAL_I2C_Master_Transmit (self -> i2c , i2c_addr , bufinfo .buf , bufinfo .len , args [2 ].u_int );
762
762
} else {
763
+ MP_HAL_CLEAN_DCACHE (bufinfo .buf , bufinfo .len );
763
764
status = HAL_I2C_Master_Transmit_DMA (self -> i2c , i2c_addr , bufinfo .buf , bufinfo .len );
764
765
}
765
766
} else {
766
767
if (!use_dma ) {
767
768
status = HAL_I2C_Slave_Transmit (self -> i2c , bufinfo .buf , bufinfo .len , args [2 ].u_int );
768
769
} else {
770
+ MP_HAL_CLEAN_DCACHE (bufinfo .buf , bufinfo .len );
769
771
status = HAL_I2C_Slave_Transmit_DMA (self -> i2c , bufinfo .buf , bufinfo .len );
770
772
}
771
773
}
@@ -834,12 +836,14 @@ STATIC mp_obj_t pyb_i2c_recv(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_
834
836
if (!use_dma ) {
835
837
status = HAL_I2C_Master_Receive (self -> i2c , i2c_addr , (uint8_t * )vstr .buf , vstr .len , args [2 ].u_int );
836
838
} else {
839
+ MP_HAL_CLEANINVALIDATE_DCACHE (vstr .buf , vstr .len );
837
840
status = HAL_I2C_Master_Receive_DMA (self -> i2c , i2c_addr , (uint8_t * )vstr .buf , vstr .len );
838
841
}
839
842
} else {
840
843
if (!use_dma ) {
841
844
status = HAL_I2C_Slave_Receive (self -> i2c , (uint8_t * )vstr .buf , vstr .len , args [2 ].u_int );
842
845
} else {
846
+ MP_HAL_CLEANINVALIDATE_DCACHE (vstr .buf , vstr .len );
843
847
status = HAL_I2C_Slave_Receive_DMA (self -> i2c , (uint8_t * )vstr .buf , vstr .len );
844
848
}
845
849
}
@@ -920,6 +924,7 @@ STATIC mp_obj_t pyb_i2c_mem_read(mp_uint_t n_args, const mp_obj_t *pos_args, mp_
920
924
dma_init (& rx_dma , self -> rx_dma_descr , self -> i2c );
921
925
self -> i2c -> hdmatx = NULL ;
922
926
self -> i2c -> hdmarx = & rx_dma ;
927
+ MP_HAL_CLEANINVALIDATE_DCACHE (vstr .buf , vstr .len );
923
928
status = HAL_I2C_Mem_Read_DMA (self -> i2c , i2c_addr , mem_addr , mem_addr_size , (uint8_t * )vstr .buf , vstr .len );
924
929
if (status == HAL_OK ) {
925
930
status = i2c_wait_dma_finished (self -> i2c , args [3 ].u_int );
@@ -988,6 +993,7 @@ STATIC mp_obj_t pyb_i2c_mem_write(mp_uint_t n_args, const mp_obj_t *pos_args, mp
988
993
dma_init (& tx_dma , self -> tx_dma_descr , self -> i2c );
989
994
self -> i2c -> hdmatx = & tx_dma ;
990
995
self -> i2c -> hdmarx = NULL ;
996
+ MP_HAL_CLEAN_DCACHE (bufinfo .buf , bufinfo .len );
991
997
status = HAL_I2C_Mem_Write_DMA (self -> i2c , i2c_addr , mem_addr , mem_addr_size , bufinfo .buf , bufinfo .len );
992
998
if (status == HAL_OK ) {
993
999
status = i2c_wait_dma_finished (self -> i2c , args [3 ].u_int );
0 commit comments