English
Language : 

UPSD3422_06 Datasheet, PDF (132/293 Pages) STMicroelectronics – Turbo Plus Series Fast Turbo 8032 MCU with USB and Programmable Logic
I2C interface
uPSD34xx
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?)
If No, an ACK was not received:
– S1DAT = dummy, write to release bus
– Exit ISR, Master needs no more data bytes
If Yes, ACK was received, then continue:
– S1DAT = xmit_buf[buffer_index], transmit byte
– Exit ISR, transmit next byte on next interrupt
Else If mode is Slave-Receiver:
Is this Intr from SIOE detecting a STOP on bus?
If Yes, a STOP was detected:
– recv_buf[buffer_index] = S1DAT, get last byte
– Exit ISR, Master has sent last byte
If No, a STOP was not detected, continue:
Determine if this Interrupt is from receiving an address or a data
byte from a Master.
Is (S1CON.ADDR = 1 and S1CON.AA =1)?
If No, intr is from receiving data, goto C:
If Yes, intr is from an address, continue:
– slave_is_adressed = 1, local variable set true
<indicates Master selected this slave>
– S1CON.ADDR = 0, clear address match flag
Determine if R/W bit indicates transmit or receive.
132/293