Exemple #1
0
uint8_t i2c_write(uint8_t data) {
    i2c_sclLo();
    uint8_t mask;
    for (mask = 0x80; mask != 0; mask >>=1) {
        i2c_sdaOut(data & mask);
        i2c_sclHi();
        i2c_sclLo();
    } 
    i2c_sdaOut(1);
    i2c_sclHi();
    uint8_t ack =  ! i2c_sdaIn();
    i2c_sclLo();
    return ack;
}
Exemple #2
0
INLINE bool i2c_bitbang_start_1(struct I2c *i2c)
{
	bool ret;
	/* Clear all error, we restart */
	i2c->errors &= ~(I2C_NO_ACK | I2C_ARB_LOST);

	if (old_api)
	{
		SDA_HI;
		SCL_HI;
		I2C_HALFBIT_DELAY();
		SDA_LO;
		I2C_HALFBIT_DELAY();

		ret = !SDA_IN;
	}
	else
	{
		i2c_sdaHi(I2C_DEV(i2c));
		i2c_sclHi(I2C_DEV(i2c));
		i2c_halfbitDelay(I2C_DEV(i2c));
		i2c_sdaLo(I2C_DEV(i2c));
		i2c_halfbitDelay(I2C_DEV(i2c));

		ret = !i2c_sdaIn(I2C_DEV(i2c));
	}

	return ret;
}
Exemple #3
0
uint8_t i2c_read(uint8_t last) {
    uint8_t data = 0;
    uint8_t mask; 
    for (mask = 0x80; mask !=0; mask >>=1) {
        i2c_sclHi();
        if (i2c_sdaIn()) {
            data |= mask;
        }
        i2c_sclLo();
    }
    i2c_sdaOut(last);
    i2c_sclHi();
    i2c_sclLo();
    if (last) {
        i2c_stop();
    }
    i2c_sdaOut(1);
    return data;
}
Exemple #4
0
static void i2c_bitbang_stop_1(struct I2c *i2c)
{
	if (old_api)
	{
		SDA_LO;
		SCL_HI;
		I2C_HALFBIT_DELAY();
		SDA_HI;
	}
	else
	{
		i2c_sdaLo(I2C_DEV(i2c));
		i2c_sclHi(I2C_DEV(i2c));
		i2c_halfbitDelay(I2C_DEV(i2c));
		i2c_sdaHi(I2C_DEV(i2c));
	}
}
Exemple #5
0
void i2c_stop() {
    i2c_sdaOut(0);
    i2c_sclHi();
    i2c_sdaOut(1);
}
Exemple #6
0
uint8_t i2c_start(uint8_t addr) {
    i2c_sclLo();
    i2c_sclHi();
    i2c_sdaOut(0);
    return i2c_write(addr);
}
Exemple #7
0
void i2c_init() {
    i2c_sdaOut(1);     
    PINMODE(SCL_DDR,SCL,OUTPUT); 
    i2c_sclHi();
}