// Copyright 2018 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef __I2C_MASTER_H__ #define __I2C_MASTER_H__ #include "esp8266/pin_mux_register.h" #define I2C_MASTER_SDA_MUX PERIPHS_IO_MUX_GPIO2_U #define I2C_MASTER_SCL_MUX PERIPHS_IO_MUX_GPIO4_U #define I2C_MASTER_SDA_GPIO 2 #define I2C_MASTER_SCL_GPIO 4 #define I2C_MASTER_SDA_FUNC FUNC_GPIO2 #define I2C_MASTER_SCL_FUNC FUNC_GPIO4 //#define I2C_MASTER_SDA_MUX PERIPHS_IO_MUX_GPIO2_U //#define I2C_MASTER_SCL_MUX PERIPHS_IO_MUX_GPIO0_U //#define I2C_MASTER_SDA_GPIO 2 //#define I2C_MASTER_SCL_GPIO 0 //#define I2C_MASTER_SDA_FUNC FUNC_GPIO2 //#define I2C_MASTER_SCL_FUNC FUNC_GPIO0 #if 0 #define I2C_MASTER_GPIO_SET(pin) \ gpio_output_set(1<<pin,0,1<<pin,0) #define I2C_MASTER_GPIO_CLR(pin) \ gpio_output_set(0,1<<pin,1<<pin,0) #define I2C_MASTER_GPIO_OUT(pin,val) \ if(val) I2C_MASTER_GPIO_SET(pin);\ else I2C_MASTER_GPIO_CLR(pin) #endif #define I2C_MASTER_SDA_HIGH_SCL_HIGH() \ gpio_output_conf(1<<I2C_MASTER_SDA_GPIO | 1<<I2C_MASTER_SCL_GPIO, 0, 1<<I2C_MASTER_SDA_GPIO | 1<<I2C_MASTER_SCL_GPIO, 0) #define I2C_MASTER_SDA_HIGH_SCL_LOW() \ gpio_output_conf(1<<I2C_MASTER_SDA_GPIO, 1<<I2C_MASTER_SCL_GPIO, 1<<I2C_MASTER_SDA_GPIO | 1<<I2C_MASTER_SCL_GPIO, 0) #define I2C_MASTER_SDA_LOW_SCL_HIGH() \ gpio_output_conf(1<<I2C_MASTER_SCL_GPIO, 1<<I2C_MASTER_SDA_GPIO, 1<<I2C_MASTER_SDA_GPIO | 1<<I2C_MASTER_SCL_GPIO, 0) #define I2C_MASTER_SDA_LOW_SCL_LOW() \ gpio_output_conf(0, 1<<I2C_MASTER_SDA_GPIO | 1<<I2C_MASTER_SCL_GPIO, 1<<I2C_MASTER_SDA_GPIO | 1<<I2C_MASTER_SCL_GPIO, 0) /** \defgroup Driver_APIs Driver APIs * @brief Driver APIs */ /** @addtogroup Driver_APIs * @{ */ /** \defgroup I2C_Driver_APIs I2C_MASTER Driver APIs * @brief UART driver APIs */ /** @addtogroup I2C_MASTER_Driver_APIs * @{ */ /** * @brief i2c_master_gpio_init,config SDA and SCL gpio to open-drain output mode. * * @param null * * @return null */ void i2c_master_gpio_init(void); /** * @brief i2c_master_gpio_init,config SDA and SCL gpio to open-drain output mode. * * @param initilize I2C bus to enable i2c operations. * * @return null */ void i2c_master_init(void); #define i2c_master_wait os_delay_us /** * @brief i2c_master_gpio_init,config SDA and SCL gpio to open-drain output mode. * * @param set i2c to stop sending state. * * @return null */ void i2c_master_stop(void); /** * @brief i2c_master_gpio_init,config SDA and SCL gpio to open-drain output mode. * * @param set i2c to start sending state. * * @return null */ void i2c_master_start(void); /** * @brief i2c_master_gpio_init,config SDA and SCL gpio to open-drain output mode. * * @param set ack to i2c bus as level value. * * @return null */ void i2c_master_setAck(uint8_t level); /** * @brief confirm if peer send ack. * * @param null * * @return null */ uint8_t i2c_master_getAck(void); /** * @brief read Byte from i2c bus. * * @param null * * @return the byte which read from i2c bus. */ uint8_t i2c_master_readByte(void); /** * @brief write wrdata value(one byte) into i2c. * * @param uint8_t wrdata:write value * * @return null */ void i2c_master_writeByte(uint8_t wrdata); /** * @brief i2c_master_checkAck. * * @param null * * @return the result of check ack */ bool i2c_master_checkAck(void); /** * @brief i2c master send Ack. * * @param null * * @return null */ void i2c_master_send_ack(void); /** * @brief i2c master send Nack. * * @param null * * @return null */ void i2c_master_send_nack(void); /** * @} */ /** * @} */ #endif