English
Language : 

UPSD3422_06 Datasheet, PDF (131/293 Pages) STMicroelectronics – Turbo Plus Series Fast Turbo 8032 MCU with USB and Programmable Logic
uPSD34xx
I2C interface
Else If mode is Master-Receiver:
Bus Arbitration lost? (status.BLOST=1?)
If Yes, Arbitration was lost:
– S1DAT = dummy, write to release bus
– Exit ISR, SIOE will switch to Slave Recv mode
If No, Aribitration was not lost, continue:
Is this Interrupt from sending an address to Slave, or is it from
receiving a data byte from Slave?
If its from sending Slave address, goto A:
If its from receiving Slave data, goto B:
A: (Interrupt is from Master sending addr to Slave)
ACK recvd from Slave? (status.ACK_RESP=0?)
If No, an ACK was not received:
– S1CON.STO = 1, set STOP condition
<STOP occurs after ISR exit>
– dummy = S1DAT, read to release bus
– Exit ISR
If Yes, ACK was received, then continue:
– dummy = S1DAT, read to release bus
Does Master want to receive just one data byte?
If Yes, do not allow Master to ACK on next interrupt:
<S1CON.AA is already 0>
– Exit ISR, now ready to recv one byte from Slv
If No, Master can ACK next byte from Slv
– S1CON.AA = 1, allow Master to send ACK
– Exit ISR, now ready to recv data from Slave
B: (Interrupt is from Master recving data from Slv)
– recv_buf[buffer_index] = S1DAT, read byte
Is this the last data byte to receive from Slave?
If Yes, tell Slave to stop transmitting:
– S1CON.STO = 1, set STOP bus condition
<STOP occurs after ISR exit>
– Exit ISR, finished receiving data from Slave
If No, continue:
131/293