case 2: // Receive Address Ack/Nack bit USICTL0 &= ~USIOE; // SDA = input USICNT |= 0x01; // Bit counter=1, receive (N)Ack bit I2C_State = 4; // Go to next state: check (N)Ack break;
case 4: // Process Address Ack/Nack & handle data TX if(Transmit == 1){ USICTL0 |= USIOE; // SDA = output if (USISRL & 0x01) // If Nack received... { // Send stop... USISRL = 0x00; USICNT |= 0x01; // Bit counter=1, SCL high, SDA low I2C_State = 14; // Go to next state: generate Stop P1OUT |= 0x01; // Turn on LED: error } else { // Ack received, TX data to slave... USISRL = MST_Data++; // Load data byte USICNT |= 0x08; // Bit counter = 8, start TX I2C_State = 10; // next state: receive data (N)Ack Bytecount++; P1OUT &= ~0x01; // Turn off LED break; } } if(Transmit == 0){
if (USISRL & 0x01) // If Nack received { // Prep Stop Condition USICTL0 |= USIOE; USISRL = 0x00; USICNT |= 0x01; // Bit counter= 1, SCL high, SDA low I2C_State = 8; // Go to next state: generate Stop P1OUT |= 0x01; // Turn on LED: error } else{ Data_RX();} // Ack received
} break;
--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
|