X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/rsbs2/blobdiff_plain/453203717769c12e37678c93fcaf4150f2d16a39..75a0197760515c6faedadf705c6d758681880602:/bmc/i2c.c?ds=sidebyside diff --git a/bmc/i2c.c b/bmc/i2c.c index f081991..6ffa31f 100644 --- a/bmc/i2c.c +++ b/bmc/i2c.c @@ -72,7 +72,7 @@ ISR (TWI_vect, ISR_BLOCK) if (i2c_done) TWCR_RESET; - switch (TW_STATUS) { + switch (TW_STATUS & 0xf8) { case TW_SR_SLA_ACK: #ifdef DEBUG printf("I2C: Slave 0x%02x adressed\n", TWDR); @@ -87,6 +87,11 @@ ISR (TWI_vect, ISR_BLOCK) #ifdef DEBUG printf("I2C: Data received: 0x%02x\n", TWDR); #endif + if (i2c_pos >= sizeof(i2c_databuf)) { + TWCR_RESET; + i2c_pos = 0x00; + break; + } i2c_databuf[i2c_pos] = TWDR; i2c_pos++; TWCR_ACK; @@ -104,7 +109,7 @@ ISR (TWI_vect, ISR_BLOCK) default: #ifdef DEBUG - printf("I2C: Unimplemented status 0x%02x\n", TW_STATUS); + printf("I2C: Unimplemented status 0x%02x\n", (TW_STATUS & 0xf8)); #endif TWCR_RESET; break;