diff --git a/source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_i2c.h b/source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_i2c.h index a95645f0..ea530a6e 100644 --- a/source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_i2c.h +++ b/source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_i2c.h @@ -170,6 +170,7 @@ void I2C_Disable(I2C_ID_Type i2cNo); BL_Err_Type I2C_SetDeglitchCount(I2C_ID_Type i2cNo, uint8_t cnt); BL_Err_Type I2C_Reset(I2C_ID_Type i2cNo); uint8_t I2C_GetTXFIFOAvailable(); +uint8_t I2C_GetRXFIFOAvailable(); void I2C_DMATxEnable(); void I2C_DMATxDisable(); void I2C_SetPrd(I2C_ID_Type i2cNo, uint8_t phase); diff --git a/source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_i2c.c b/source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_i2c.c index 021e6832..c8715356 100644 --- a/source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_i2c.c +++ b/source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_i2c.c @@ -221,6 +221,15 @@ uint8_t I2C_GetTXFIFOAvailable() { return tmpVal & 0b11; // Lowest two bits } +uint8_t I2C_GetRXFIFOAvailable() { + + volatile uint32_t tmpVal; + uint32_t I2Cx = I2C_BASE; + + tmpVal = BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_1); + return (tmpVal >> 8) & 0b11; // Lowest two bits of byte 2 +} + void I2C_DMATxEnable() { uint32_t tmpVal; uint32_t I2Cx = I2C_BASE; @@ -641,6 +650,7 @@ BL_Err_Type I2C_MasterReceiveBlocking(I2C_ID_Type i2cNo, I2C_Transfer_Cfg *cfg) return TIMEOUT; } } + /* Read I2C data */ while (cfg->dataSize - i >= 4) { timeOut = I2C_FIFO_STATUS_TIMEOUT;