I2C Read using FX2™ and FX2LP™ - KBA85382
Anonymous
Not applicable
Mar 20, 2011
07:43 PM
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
Mar 20, 2011
07:43 PM
Version: **
Question: How is I2C read implemented in FX2 and FX2LP?
Answer:
I2C read implementation is illustrated in the file i2c.c, which is available in the path \Cypress\USB\Target\Lib\LP\i2c.c.
In this file, the implementation of read occurs in the ISR. The I2C_Read function sends the Read Command and changes the I2C.PktStatus to I2C_PRIME. The I2C enters the ISR every time a byte of data is successfully transferred when the DONE bit is set High.
When the following section of code is executed for the first time, the data that has been read is stored to I2CPckt.dat and the status is changed to I2C_RECEIVING:
case I2C_PRIME:
I2CPckt.dat[I2CPckt.count] = I2DAT;
I2CPckt.status = I2C_RECEIVING;
if(I2CPckt.length == 1) // may be only one byte read
I2CS |= bmLASTRD;
break;
To read more data, the following section of the code is executed the next time the ISR is serviced:
case I2C_RECEIVING:
if(I2CPckt.count == I2CPckt.length - 2)
I2CS |= bmLASTRD;
if(I2CPckt.count == I2CPckt.length - 1)
{
I2CS |= bmSTOP;
I2CPckt.status = I2C_IDLE;
}
I2CPckt.dat[I2CPckt.count] = I2DAT;
++I2CPckt.count;
break;
Rate this article:
Contributors
-
This widget could not be displayed.Anonymous