User manual

Table Of Contents
Zynq-7000 AP SoC Technical Reference Manual www.xilinx.com 609
UG585 (v1.11) September 27, 2016
Chapter 20: I2C Controller
If the I2C master terminates the transfer before all of the data in the FIFO is sent by the slave, the
host is notified, and the NACK interrupt flag is set while TXDV remains set and the Transfer Size
register indicates the remaining bytes in the FIFO. The host must set the CLR_FIFO bit in the Control
register to clear the FIFO and the TXDV bit.
Slave Receiver
The slave becomes a receiver after recognizing the entire slave address sent by the master and when
the R/W bit in the first address byte is Low. This means that the master is about to send one or more
data bytes to the slave over the I2C bus.
After a byte is acknowledged by the I2C slave, the RXDV bit in the Status register is set, indicating
that new data has been received. The host reads the received data through the I2C Data register. An
interrupt is generated and the DATA interrupt flag is set when there are only two free locations left
in the FIFO.
Whenever the I2C master generates a STOP condition, an interrupt is generated and the COMP
interrupt flag is set. The Transfer Size register then contains the number of bytes received that are
available in the FIFO. This number is decremented by the host on each read of the I2C Data register.
If the FIFO is full when one or more bytes are received by the I2C interface, an interrupt is generated
and the RX_OVF interrupt flag is set. The last byte received is not acknowledged and the data in the
FIFO is kept intact.
The HOLD bit can be set in the Control register to avoid overflow conditions when it is impossible to
respond to interrupts in a reasonable time. If the HOLD bit is set, the I2C interface keeps the SCL line
Low until the host clears resources for data reception. This prevents the master from continuing with
the transfer, causing an overflow condition in the slave. The host clears resources for data reception
by reading the data register.
If the HOLD bit is set and the I2C interface keeps the SCL line Low for longer than the timeout period,
an interrupt is generated and the TO interrupt flag is set.
20.2.5 I2C Speed
The main clock used within the I2C interface is the clock enable signal (see Figure 20-3).
In slave mode, the clock enable is used to extract synchronization information for correct
sampling of the SDA line.
In master mode, the clock enable is used to establish a time base for generating the desired SCL
frequency.