void irom i2c_gpio_init(uint8_t sda, uint8_t scl)
{
	pinSDA = sda;
	pinSCL = scl;

	pinMode(pinSDA, INPUT_PULLUP);
	pinMode(pinSCL, INPUT_PULLUP);

	I2C_MASTER_SDA_HIGH_SCL_HIGH();

	i2c_init();
}
static void irom i2c_set_dc(uint8_t SDA, uint8_t SCL)
{
	SDA &= 0x01;
	SCL &= 0x01;
	m_nLastSDA = SDA;
	m_nLastSCL = SCL;

	if ((0 == SDA) && (0 == SCL)) {
		I2C_MASTER_SDA_LOW_SCL_LOW();
	} else if ((0 == SDA) && (1 == SCL)) {
		I2C_MASTER_SDA_LOW_SCL_HIGH();
	} else if ((1 == SDA) && (0 == SCL)) {
		I2C_MASTER_SDA_HIGH_SCL_LOW();
	} else {
		I2C_MASTER_SDA_HIGH_SCL_HIGH();
	}
}
Ejemplo n.º 3
0
/******************************************************************************
 * FunctionName : i2c_master_setDC
 * Description  : Internal used function -
 *                    set i2c SDA and SCL bit value for half clk cycle
 * Parameters   : uint8 SDA
 *                uint8 SCL
 * Returns      : NONE
*******************************************************************************/
LOCAL void ICACHE_FLASH_ATTR
i2c_master_setDC(uint8 SDA, uint8 SCL)
{
    SDA	&= 0x01;
    SCL	&= 0x01;
    m_nLastSDA = SDA;
    m_nLastSCL = SCL;

    if ((0 == SDA) && (0 == SCL)) {
        I2C_MASTER_SDA_LOW_SCL_LOW();
    } else if ((0 == SDA) && (1 == SCL)) {
        I2C_MASTER_SDA_LOW_SCL_HIGH();
    } else if ((1 == SDA) && (0 == SCL)) {
        I2C_MASTER_SDA_HIGH_SCL_LOW();
    } else {
        I2C_MASTER_SDA_HIGH_SCL_HIGH();
    }
}
Ejemplo n.º 4
0
/******************************************************************************
 * FunctionName : i2c_master_gpio_init
 * Description  : config SDA and SCL gpio to open-drain output mode,
 *                mux and gpio num defined in i2c_master.h
 * Parameters   : NONE
 * Returns      : NONE
*******************************************************************************/
void ICACHE_FLASH_ATTR i2c_master_gpio_init(void)
{
    ETS_GPIO_INTR_DISABLE() ;
//    ETS_INTR_LOCK();

    PIN_FUNC_SELECT(I2C_MASTER_SDA_MUX, I2C_MASTER_SDA_FUNC);
    PIN_FUNC_SELECT(I2C_MASTER_SCL_MUX, I2C_MASTER_SCL_FUNC);

    GPIO_REG_WRITE(GPIO_PIN_ADDR(GPIO_ID_PIN(I2C_MASTER_SDA_GPIO)), GPIO_REG_READ(GPIO_PIN_ADDR(GPIO_ID_PIN(I2C_MASTER_SDA_GPIO))) | GPIO_PIN_PAD_DRIVER_SET(GPIO_PAD_DRIVER_ENABLE)); //open drain;
    GPIO_REG_WRITE(GPIO_ENABLE_ADDRESS, GPIO_REG_READ(GPIO_ENABLE_ADDRESS) | (1 << I2C_MASTER_SDA_GPIO));
    GPIO_REG_WRITE(GPIO_PIN_ADDR(GPIO_ID_PIN(I2C_MASTER_SCL_GPIO)), GPIO_REG_READ(GPIO_PIN_ADDR(GPIO_ID_PIN(I2C_MASTER_SCL_GPIO))) | GPIO_PIN_PAD_DRIVER_SET(GPIO_PAD_DRIVER_ENABLE)); //open drain;
    GPIO_REG_WRITE(GPIO_ENABLE_ADDRESS, GPIO_REG_READ(GPIO_ENABLE_ADDRESS) | (1 << I2C_MASTER_SCL_GPIO));

    I2C_MASTER_SDA_HIGH_SCL_HIGH();

    ETS_GPIO_INTR_ENABLE() ;
//    ETS_INTR_UNLOCK();

    i2c_master_init();
}
Ejemplo n.º 5
0
/******************************************************************************
 * FunctionName : i2c_master_setDC
 * Description  : Internal used function -
 *					set i2c SDA and SCL bit value for half clk cycle
 * Parameters   : uint8 SDA
 *				uint8 SCL
 * Returns	  : NONE
*******************************************************************************/
LOCAL void ICACHE_FLASH_ATTR
i2c_master_setDC(uint8 SDA, uint8 SCL)
{
	SDA	&= 0x01;
	SCL	&= 0x01;
	m_nLastSDA = SDA;
	m_nLastSCL = SCL;

	if ((0 == SDA) && (0 == SCL)) {
		I2C_MASTER_SDA_LOW_SCL_LOW();
	} else if ((0 == SDA) && (1 == SCL)) {
		do {
			I2C_MASTER_SDA_LOW_SCL_HIGH();
		} while (GPIO_INPUT_GET(GPIO_ID_PIN(I2C_MASTER_SCL_GPIO)) == 0);
	} else if ((1 == SDA) && (0 == SCL)) {
		I2C_MASTER_SDA_HIGH_SCL_LOW();
	} else {
		do {
			I2C_MASTER_SDA_HIGH_SCL_HIGH();
		} while (GPIO_INPUT_GET(GPIO_ID_PIN(I2C_MASTER_SCL_GPIO)) == 0);
	}
	i2c_master_wait(I2C_DELAY);
}