MS51
Nov. 28, 2019 Page 419 of 491 Rev 1.00
MS51 32K SERIES TECHNICAL REFERENCE MANUAL
STO = 1; //recover from bus error
break;
//===========
//Master Mode
//===========
case 0x08: /*08H, a START transmitted*/
STA = 0; //STA bit should be cleared by
software
I2DAT = SLA_ADDR1; //load SLA+W/R
break;
case 0x10: /*10H, a repeated START transmitted*/
STA = 0;
I2DAT = SLA_ADDR2;
break;
//=======================
//Master Transmitter Mode
//=======================
case 0x18: /*18H, SLA+W transmitted, ACK received*/
I2DAT = NEXT_SEND_DATA1; //load DATA
break;
case 0x20: /*20H, SLA+W transmitted, NACK received*/
STO = 1; //transmit STOP
AA = 1; //ready for ACK own SLA+W/R or
General Call
break;
case 0x28: /*28H, DATA transmitted, ACK received*/
if (Conti_TX_Data) //if continuing to send DATA
I2DAT = NEXT_SEND_DATA2;
else //if no DATA to be sent
{
STO = 1;
AA = 1;
}
break;
case 0x30: /*30H, DATA transmitted, NACK received*/
STO = 1;
AA = 1;
break;
//===========
//Master Mode
//===========
case 0x38: /*38H, arbitration lost*/
STA = 1; //retry to transmit START if bus free
break;
//====================
//Master Receiver Mode
//====================
case 0x40: /*40H, SLA+R transmitted, ACK received*/
AA = 1; //ACK next received DATA
break;
case 0x48: /*48H, SLA+R transmitted, NACK received*/
STO = 1;
AA = 1;
break;
case 0x50: /*50H, DATA received, ACK transmitted*/
DATA_RECEIVED1 = I2DAT; //store received DATA
if (To_RX_Last_Data1) //if last DATA will be received
AA = 0; //not ACK next received DATA
else //if continuing receiving DATA
AA = 1;
break;
case 0x58: /*58H, DATA received, NACK transmitted*/
DATA_RECEIVED_LAST1 = I2DAT;