Skip to content

Instantly share code, notes, and snippets.

@TeWu
Created February 14, 2019 12:16
Show Gist options
  • Save TeWu/4bc5d6ec01b3a937d6677a54fd033496 to your computer and use it in GitHub Desktop.
Save TeWu/4bc5d6ec01b3a937d6677a54fd033496 to your computer and use it in GitHub Desktop.
TWI ISR swtich statement
ISR(TWI_vect) {
switch(TW_STATUS) {
// NOTE: SLA+W = SLave Address + Write bit
// SLA+R = SLave Address + Read bit
// All
case TW_NO_INFO: // No state information available
case TW_BUS_ERROR: // Bus error; Illegal START or STOP condition
// All Master
case TW_START: // Start condition transmitted
case TW_REP_START: // Repeated start condition transmitted
// Master Transmitter
case TW_MT_SLA_ACK: // SLA+W transmitted, ACK received = Slave receiver ACKed address
case TW_MT_SLA_NACK: // SLA+W transmitted, NACK received = Slave receiver with transmitted address doesn't exists?
case TW_MT_DATA_ACK: // Data transmitted, ACK received = Slave receiver ACKed data
case TW_MT_DATA_NACK: // Data transmitted, NACK received
case TW_MT_ARB_LOST: // Arbitration lost in SLA+W or data
// Master Receiver
case TW_MR_SLA_ACK: // SLA+R transmitted, ACK received = Slave transmitter ACKed address
case TW_MR_SLA_NACK: // SLA+R transmitted, NACK received = Slave transmitter with transmitted address doesn't exists?
case TW_MR_DATA_ACK: // Data received, ACK returned
case TW_MR_DATA_NACK: // Data received, NACK returned
case TW_MR_ARB_LOST: // Arbitration lost in SLA+R or NACK
// Slave Receiver
case TW_SR_SLA_ACK: // SLA+W received, ACK returned = Addressed, returned ACK
case TW_SR_GCALL_ACK: // General call received, ACK returned = Addressed generally, returned ACK
case TW_SR_ARB_LOST_SLA_ACK: // Arbitration lost in SLA+RW, SLA+W received, ACK returned
case TW_SR_ARB_LOST_GCALL_ACK: // Arbitration lost in SLA+RW, general call received, ACK returned
case TW_SR_DATA_ACK: // Data received, ACK returned
case TW_SR_DATA_NACK: // Data received, NACK returned
case TW_SR_GCALL_DATA_ACK: // General call data received, ACK returned
case TW_SR_GCALL_DATA_NACK: // General call data received, NACK returned
case TW_SR_STOP: // Stop or repeated start condition received while selected
// Slave Transmitter
case TW_ST_SLA_ACK: // SLA+R received, ACK returned = Addressed, returned ACK
case TW_ST_ARB_LOST_SLA_ACK: // Arbitration lost in SLA+RW, SLA+R received, ACK returned
case TW_ST_DATA_ACK: // Data transmitted, ACK received
case TW_ST_DATA_NACK: // Data transmitted, NACK received = Received NACK, so we are done
case TW_ST_LAST_DATA: // Last data byte transmitted, ACK received = Received ACK, but we are done already!
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment