Part Number: TMS320F280049
Other Parts Discussed in Thread: C2000WARE
Hi C2000 Gurus,
I have an I2C link set-up between a F28004x device and a host MCU. The host works as the master during normal operation, while the C28x is the slave. The 0049 device is able to receive data in I2C_SLAVE_RECEIVE_MODE, but unable to send any out in I2C_SLAVE_SEND_MODE.
I have attached a scope shot of SDA and SCL lines where the first set of activity corresponds to the host MCU sending 2 bytes of data to the 0049. This is received perfectly every time. The following set of pulses correspond to the master trying to read data sent by the 0049 but there is nothing there.
I am using a FIFO ISR on the C28x to receive data. After reading the received data in the ISR I immediately load 2 bytes of C28x data to be sent on the transmit register. DXR register correctly reflects the data I am supposed to send. But this is not seen on the bus or by the host MCU on a read request. Even if we assume that my read request from the host MCU is coming in too quick (which is clearly not the case as seen in the attached scope shot), my subsequent read requests from the host MCU also return nothing. I am pretty sure I am missing something fairly basic here and would be very grateful if you could point me in the right direction.
An interesting thing to note is that I am able to receive the data on the 0049 just fine even if I configure the I2C to be in the I2C_SLAVE_SEND_MODE throughout the operation. In the following snippet of code taken from my FIFO ISR, I am actually resetting the I2C module as part of the mode switching process. As I mentioned, if I don't switch the mode (no I2C reset) and configure the I2C in I2C_SLAVE_SEND_MODE from initialization, it still gives me the same behavior.

Your help is greatly appreciated.
Thank you!
Hrishi
CH1: SCL, CH2: SDA

