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; }
static void i2cBitTx(uint8_t instance, char bit){ if(bit) sdaHi(instance); else sdaLo(instance); i2cDelay(instance); sclHi(instance); i2cDelay(instance); sclLo(instance); }
static void i2cStart(uint8_t instance){ sdaHi(instance); sclHi(instance); i2cDelay(instance); sdaLo(instance); i2cDelay(instance); sclLo(instance); i2cDelay(instance); }
void SHT1x::startCommand() { // Command start sequence sdaHi(); sclLo(); delayTimer.uDelay(COM_DELAY); sclHi(); delayTimer.uDelay(COM_DELAY); sdaLo(); delayTimer.uDelay(COM_DELAY); sclLo(); delayTimer.uDelay(COM_DELAY); sclHi(); delayTimer.uDelay(COM_DELAY); sdaHi(); delayTimer.uDelay(COM_DELAY); sclLo(); }
void SHT1x::init() { // Initialize GPIO RCC_AHB1PeriphClockCmd(properties.gpioClk, ENABLE); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = properties.sclPin | properties.sdaPin; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(properties.gpio, &GPIO_InitStruct); sclLo(); sdaHi(); }
static char i2cBitRx(uint8_t instance){ char ret; sdaHi(instance); i2cDelay(instance); sclHi(instance); i2cDelay(instance); ret = sdaRd(instance); sclLo(instance); return ret; }
uint8_t PortI2C::start(uint8_t addr) const { sclLo(); sclHi(); sdaOut(0); return write(addr); }
void SHT1x::sclPulse() { sclHi(); delayTimer.uDelay(COM_DELAY); sclLo(); }