diff options
Diffstat (limited to 'components/drivers/include')
| -rw-r--r-- | components/drivers/include/drivers/i2c-bit-ops.h | 41 | ||||
| -rw-r--r-- | components/drivers/include/drivers/i2c.h | 79 | ||||
| -rw-r--r-- | components/drivers/include/drivers/i2c_dev.h | 27 | ||||
| -rw-r--r-- | components/drivers/include/rtdevice.h | 9 |
4 files changed, 156 insertions, 0 deletions
diff --git a/components/drivers/include/drivers/i2c-bit-ops.h b/components/drivers/include/drivers/i2c-bit-ops.h new file mode 100644 index 0000000000..8b9253d9ff --- /dev/null +++ b/components/drivers/include/drivers/i2c-bit-ops.h @@ -0,0 +1,41 @@ +/* + * File : i2c-bit-ops.h + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2012-04-25 weety first version + */ + +#ifndef __I2C_BIT_OPS_H__ +#define __I2C_BIT_OPS_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +struct rt_i2c_bit_ops { + void *data; /* private data for lowlevel routines */ + void (*set_sda) (void *data, rt_int32_t state); + void (*set_scl) (void *data, rt_int32_t state); + rt_int32_t (*get_sda) (void *data); + rt_int32_t (*get_scl) (void *data); + + void (*udelay) (rt_uint32_t us); + + rt_uint32_t delay_us; /* scl and sda line delay */ + rt_uint32_t timeout; /* in tick */ +}; + +rt_err_t rt_i2c_bit_add_bus(struct rt_i2c_bus_device *bus, const char *bus_name); + +#ifdef __cplusplus +} +#endif + +#endif
\ No newline at end of file diff --git a/components/drivers/include/drivers/i2c.h b/components/drivers/include/drivers/i2c.h new file mode 100644 index 0000000000..69b43e95b4 --- /dev/null +++ b/components/drivers/include/drivers/i2c.h @@ -0,0 +1,79 @@ +/* + * File : i2c.h + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2012-04-25 weety first version + */ + +#ifndef __I2C_H__ +#define __I2C_H__ + +#include <rtthread.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define RT_I2C_WR 0x0000 +#define RT_I2C_RD (1u << 0) +#define RT_I2C_ADDR_10BIT (1u << 2) /* this is a ten bit chip address */ +#define RT_I2C_NO_START (1u << 4) +#define RT_I2C_IGNORE_NACK (1u << 5) +#define RT_I2C_NO_READ_ACK (1u << 6) /* when I2C reading, we do not ACK */ + +struct rt_i2c_msg { + rt_uint16_t addr; + rt_uint16_t flags; + rt_uint16_t len; + rt_uint8_t *buf; +}; + +struct rt_i2c_bus_device; + +struct rt_i2c_bus_device_ops { + rt_size_t (*master_xfer) (struct rt_i2c_bus_device *bus, struct rt_i2c_msg msgs[], rt_uint32_t num); + rt_size_t (*slave_xfer) (struct rt_i2c_bus_device *bus, struct rt_i2c_msg msgs[], rt_uint32_t num); + rt_err_t (*i2c_bus_control) (struct rt_i2c_bus_device *bus, rt_uint32_t, rt_uint32_t); +}; + +/*for i2c bus driver*/ +struct rt_i2c_bus_device { + struct rt_device parent; + const struct rt_i2c_bus_device_ops *ops; + rt_uint16_t flags; + rt_uint16_t addr; + struct rt_mutex lock; + rt_uint32_t timeout; + rt_uint32_t retries; + void *priv; +}; + +#ifdef RT_I2C_DEBUG +#define i2c_dbg(fmt, ...) rt_kprintf(fmt, ##__VA_ARGS__) +#else +#define i2c_dbg(fmt, ...) +#endif + +rt_err_t rt_i2c_bus_device_register(struct rt_i2c_bus_device *bus, const char *bus_name); +struct rt_i2c_bus_device* rt_i2c_bus_device_find(const char *bus_name); +rt_size_t rt_i2c_transfer(struct rt_i2c_bus_device *bus, struct rt_i2c_msg msgs[], rt_uint32_t num); +rt_size_t rt_i2c_master_send(struct rt_i2c_bus_device *bus, rt_uint16_t addr, + rt_uint16_t flags, const rt_uint8_t *buf, + rt_uint32_t count); +rt_size_t rt_i2c_master_recv(struct rt_i2c_bus_device *bus, rt_uint16_t addr, + rt_uint16_t flags, rt_uint8_t *buf, + rt_uint32_t count); +rt_err_t rt_i2c_core_init(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/components/drivers/include/drivers/i2c_dev.h b/components/drivers/include/drivers/i2c_dev.h new file mode 100644 index 0000000000..b173e99333 --- /dev/null +++ b/components/drivers/include/drivers/i2c_dev.h @@ -0,0 +1,27 @@ +#ifndef __I2C_DEV_H__ +#define __I2C_DEV_H__ + +#include <rtthread.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define RT_I2C_DEV_CTRL_10BIT 0x20 +#define RT_I2C_DEV_CTRL_ADDR 0x21 +#define RT_I2C_DEV_CTRL_TIMEOUT 0x22 +#define RT_I2C_DEV_CTRL_RW 0x23 + +struct rt_i2c_priv_data { + struct rt_i2c_msg *msgs; + rt_size_t number; +}; + +rt_err_t rt_i2c_bus_device_device_init(struct rt_i2c_bus_device* bus, const char* name); + + +#ifdef __cplusplus +} +#endif + +#endif
\ No newline at end of file diff --git a/components/drivers/include/rtdevice.h b/components/drivers/include/rtdevice.h index 2b4b7b9ec4..77dbddd9ae 100644 --- a/components/drivers/include/rtdevice.h +++ b/components/drivers/include/rtdevice.h @@ -67,4 +67,13 @@ rt_size_t rt_ringbuffer_emptry_size(struct rt_ringbuffer* rb); #include "drivers/serial.h" #endif +#ifdef RT_USING_I2C +#include "drivers/i2c.h" +#include "drivers/i2c_dev.h" +#endif + +#ifdef RT_USING_I2C_BITOPS +#include "drivers/i2c-bit-ops.h" +#endif + #endif |
