summaryrefslogtreecommitdiff
path: root/components/drivers/include
diff options
context:
space:
mode:
author[email protected] <[email protected]>2012-06-13 16:55:46 +0000
committer[email protected] <[email protected]>2012-06-13 16:55:46 +0000
commit85169d7fe8850c2a299c135c0417b567ebdf03c6 (patch)
treee9b3c17241149ec7a1c76aba906caf2f416c41e7 /components/drivers/include
parentc9250dc32c087539eaf2b96396d734c58a26a264 (diff)
update I2C driver, which now just use small memory
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2159 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'components/drivers/include')
-rw-r--r--components/drivers/include/drivers/i2c-bit-ops.h41
-rw-r--r--components/drivers/include/drivers/i2c.h79
-rw-r--r--components/drivers/include/drivers/i2c_dev.h27
-rw-r--r--components/drivers/include/rtdevice.h9
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