37.4.2.8.1 Host Transmission (10-Bit)
The following section describes the sequence of events that occur when the module is transmitting data in 10-bit Addressing mode:
- Depending on the configuration of the
Address Buffer Disable (ABD) bit, one of two methods may be used to begin
communication:
- When ABD is clear (ABD =
0
), the address buffers, I2CxADB0 and I2CxADB1, are enabled. In this case, the address high byte is loaded into I2CxADB1 with the R/W bit clear, while the address low byte is loaded into I2CxADB0. I2CxCNT is loaded with the total number of data bytes to transmit, and the first data byte is loaded into I2CxTXB. After these registers are loaded, software must set the Start bit to begin communication. - When ABD is set (ABD =
1
), the address buffers are disabled. In this case, I2CxCNT must be loaded with the total number of bytes to transmit prior to loading I2CxTXB with the address high byte and R/W bit. A write to I2CxTXB forces module hardware to issue a Start condition automatically; software writes to the S bit are ignored.
- When ABD is clear (ABD =
- Host hardware waits for BFRE to be set, then shifts out the Start condition. Module hardware sets the Host Mode Active (MMA) bit and the Start Condition Interrupt Flag (SCIF). If the Start Condition Interrupt Enable (SCIE) bit is also set, the generic I2CxIF is also set.
- Host hardware transmits the address high byte and R/W bit from I2CxADB1.
- Host hardware transmits the 9th clock
pulse and shifts in the ACK/NACK response from the
client.
If the host receives a NACK, it issues a Stop condition.
If the host receives and ACK and:
- If upon the 8th falling edge of SCL
I2CxTXB is empty (TXBE =
1
), I2CxCNT is nonzero (I2CxCNT !=0
), and the Clock Stretching Disable (CSD) bit is clear (CSD =0
): - Hardware transmits the 9th clock pulse and waits for an ACK/NACK response from the client. If the host receives an ACK, module hardware transfers the data from I2CxTXB into the transmit shift register, and I2CxCNT is decremented by one. If the host receives a NACK, hardware will attempt to issue a Stop condition. If the clock is currently being stretched by a client, the host must wait until the bus is free before issuing the Stop.
- Host hardware checks I2CxCNT
for a zero value. If I2CxCNT is zero:
- If ABD is clear (ABD =
0
), host hardware issues a Stop condition or sets MDR if the Restart Enable (RSEN) bit is set and waits for software to set the Start bit to issue a Restart condition. CNTIF is set. - If ABD is set (ABD =
1
), host hardware issues a Stop condition or sets MDR if RSEN is set and waits for software to load I2CxTXB with a new client address. CNTIF is set.
- If ABD is clear (ABD =
- Host hardware transmits the data byte.
- If upon the 8th falling edge of SCL
I2CxTXB is empty (TXBE =
1
), I2CxCNT is nonzero (I2CxCNT !=0
), and CSD is clear (CSD =0
): - Repeat Steps 6 – 9 until all data has been transmitted.