Servicing the Interrupt
After servicing this interrupt, and transmitting the second part of the address, the Status register contains one of the codes in Table
Note: If a repeated START condition transmits, the status code is 10h instead of 08h.
| Table | |||
|
|
|
|
|
Code | I2C State |
| Microprocessor Response | Next I2C Action |
38h | Arbitration lost |
| Clear IFLG | Return to idle |
|
|
| OR |
|
|
|
| Set STA, clear IFLG | Transmit START when bus free |
68h | Arbitration lost, |
| Clear IFLG, AAK=0 | Receive data byte, transmit not ACK |
| SLA + W received, |
|
|
|
| ACK transmitted |
| OR |
|
|
|
| Clear IFLG, AAK=1 | Receive data byte, transmit ACK |
B0h | Arbitration lost, |
| Write byte to DATA, Clear IFLG, | Transmit data byte, receive ACK |
| SLA + R received, |
| AAK=0 |
|
| ACK transmitted |
| OR |
|
|
|
|
| |
|
|
| Write byte to DATA, Clear IFLG, | Transmit data byte, receive ACK |
|
|
| AAK=1 |
|
D0h | Second Address byte + |
| Write byte to DATA, clear IFLG | Transmit data byte, receive ACK |
| W, transmitted ACK |
|
|
|
| received |
| OR |
|
|
|
| Set STA, clear IFLG | Transmit repeated START |
|
|
| OR |
|
|
|
| Set STP, clear IFLG | Transmit STOP |
|
|
| OR |
|
|
|
| Set STA & STP, clear IFLG | Transmit STOP, then START |
D8h | Second Address byte + |
| Same as code D0h | Same as code D0h |
| W, transmitted ACK |
|
|
|
| received |
|
|
|
15