Unable to read data from I2C?
I didn't wade thru your code, but one obvious problem pops out immediately.

You don't use a UART to do IIC.  Note the "A" in UART stands for "asynchronous", which IIC is definitely not.

To do IIC, use the IIC peripheral or do it all in firmware.  That's actually quite easy when you're the master since you own the clock.