uint8_t PortI2C::write(uint8_t data) const { sclLo(); for (uint8_t mask = 0x80; mask != 0; mask >>= 1) { sdaOut(data & mask); sclHi(); sclLo(); } sdaOut(1); sclHi(); uint8_t ack = ! sdaIn(); sclLo(); return ack; }
uint8_t i2c_write(uint8_t data) { sclLo(); for (uint8_t mask = 0x80; mask != 0; mask >>= 1) { sdaOut(data & mask); sclHi(); sclLo(); } sdaOut(1); sclHi(); uint8_t ack = ! sdaIn(); sclLo(); return ack; }
uint8_t PortI2C::read(uint8_t last) const { uint8_t data = 0; for (uint8_t mask = 0x80; mask != 0; mask >>= 1) { sclHi(); if (sdaIn()) data |= mask; sclLo(); } sdaOut(last); sclHi(); sclLo(); if (last) stop(); sdaOut(1); return data; }
uint8_t i2c_read(uint8_t last) { uint8_t data = 0; for (uint8_t mask = 0x80; mask != 0; mask >>= 1) { sclHi(); if (sdaIn()) data |= mask; sclLo(); } sdaOut(last); sclHi(); sclLo(); if (last) i2c_stop(); sdaOut(1); return data; }