English
Language : 

UPSD3354DV-40U6 Datasheet, PDF (139/272 Pages) STMicroelectronics – fast 8032 MCU with programmable logic
UPSD33xx
I2C interface
Is this the next to last byte to receive from Slave?
If this is the next to last byte, do not allow Master to ACK on
next interrupt.
● S1CON.AA = 0, don’t let Master return ACK
● Exit ISR, now ready to recv last byte from Slv
If this is not next to last byte, let Master send ACK to Slave
<S1CON.AA is already 1>
● Exit ISR, ready to recv more bytes from Slave
Else If mode is Slave-Transmitter
Is this Intr from SIOE detecting a STOP on bus?
If Yes, a STOP was detected:
● S1DAT = dummy, write to release bus
● Exit ISR, Master needs no more data bytes
If No, a STOP was not detected, continue:
) ACK recvd from Master? (status.ACK_RESP=0?)
t(s If No, an ACK was not received:
c ● S1DAT = dummy, write to release bus
du ● Exit ISR, Master needs no more data bytes
ro If Yes, ACK was received, then continue:
P ● S1DAT = xmit_buf[buffer_index], transmit byte
te ● Exit ISR, transmit next byte on next interrupt
le Else If mode is Slave-Receiver:
so Is this Intr from SIOE detecting a STOP on bus?
b If Yes, a STOP was detected:
- O ● recv_buf[buffer_index] = S1DAT, get last byte
) ● Exit ISR, Master has sent last byte
t(s If No, a STOP was not detected, continue:
uc Determine if this Interrupt is from receiving an address or a data
d byte from a Master.
ro Is (S1CON.ADDR = 1 and S1CON.AA =1)?
P If No, intr is from receiving data, goto C:
teIf Yes, intr is from an address, continue:
le● slave_is_adressed = 1, local variable set true
so <indicates Master selected this slave>
Ob ● S1CON.ADDR = 0, clear address match flag
Determine if R/W bit indicates transmit or receive.
Doc ID 9685 Rev 7
139/272