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; }
PortI2C::PortI2C (uint8_t num, uint8_t rate) : Port (num), uswait (rate) { sdaOut(1); mode2(OUTPUT); sclHi(); }
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; }
uint8_t i2c_start(uint8_t addr) { // sclLo(); hold(); // sclHi(); sdaOut(0); return i2c_write(addr); }
void PortI2C::stop() const { sdaOut(0); sclHi(); sdaOut(1); }
uint8_t PortI2C::start(uint8_t addr) const { sclLo(); sclHi(); sdaOut(0); return write(addr); }
void i2c_stop() { sdaOut(0); sclHi(); sdaOut(1); }
void i2c_init () { sdaOut(1); bitWrite(SDA_RD,SDA_PIN,1); bitWrite(SCL_RD,SCL_PIN,1); sclHi(); }