Hi Eugene:
From hardware perspective, we need to configure below registers
I2Cx_SMB[TCKSEL] is used to select the clock source of the time out counter.



For example, if timeout is 30ms, TCKSEL=0, bus clock is 25M
I2C0_SLTL = I2C_SLTL_SSLT(0xC7); /* I2C0_SLTL: SSLT=0xC7 */
I2C0_SLTH: SSLT=0x2D /* Set SCL low timeout register low */
I2C0_SLTH = I2C_SLTH_SSLT(0x2D); /* Set SCL low timeout register high */
For FreeRTOS driver perspective, I would suggest you try to configure the timeout value from portMAX_DELAY to a specified value.
xSemaphoreTake(handle->semaphore, portMAX_DELAY); // forever
Regards
Daniel