diff options
| author | Bernard Xiong <[email protected]> | 2017-11-22 13:42:37 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-11-22 13:42:37 +0800 |
| commit | 5b8aa350ac4dda29b2ba0b906e67d2f3bdd63fb7 (patch) | |
| tree | 5628f5651dbeae09c442b2e1ffa10608dc8121bc | |
| parent | a3a0bda99cfcbe8f09ff7d73c261f21dfce63128 (diff) | |
| parent | 711ad21e30e42ed7cfc476b371033069b696197a (diff) | |
Merge pull request #1026 from caogos/master
[BSP] 龙芯1c平台的rtt统一标准的I2C接口
| -rw-r--r-- | bsp/ls1cdev/drivers/drv_i2c.c | 129 | ||||
| -rw-r--r-- | bsp/ls1cdev/drivers/drv_i2c.h | 34 | ||||
| -rw-r--r-- | bsp/ls1cdev/rtconfig.h | 3 |
3 files changed, 166 insertions, 0 deletions
diff --git a/bsp/ls1cdev/drivers/drv_i2c.c b/bsp/ls1cdev/drivers/drv_i2c.c new file mode 100644 index 0000000000..998f0f6ec3 --- /dev/null +++ b/bsp/ls1cdev/drivers/drv_i2c.c @@ -0,0 +1,129 @@ +/* + * File : drv_i2c.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Change Logs: + * Date Author Notes + * 2017-11-14 ��Ϊ�� first version + */ + +#include <rtthread.h> +#include <drivers/i2c.h> +#include <drivers/i2c-bit-ops.h> +#include "drv_i2c.h" +#include "../libraries/ls1c_gpio.h" +#include "../libraries/ls1c_delay.h" + + +#define LS1C_I2C_SCL (57) // gpio57 +#define LS1C_I2C_SDA (56) // gpio56 + +#define LS1C_SET_GPIO_MODE + +static void ls1c_i2c_gpio_init(void) +{ + gpio_init(LS1C_I2C_SCL, gpio_mode_output); + gpio_set(LS1C_I2C_SCL, gpio_level_high); + + gpio_init(LS1C_I2C_SDA, gpio_mode_output); + gpio_set(LS1C_I2C_SDA, gpio_level_high); + + return ; +} + + +static void ls1c_udelay(rt_uint32_t us) +{ + delay_us((int)us); +} + + +static void ls1c_set_sda(void *data, rt_int32_t state) +{ +#ifdef LS1C_SET_GPIO_MODE + gpio_init(LS1C_I2C_SDA, gpio_mode_output); + ls1c_udelay(5); +#endif + gpio_set(LS1C_I2C_SDA, state); + return ; +} + + +static void ls1c_set_scl(void *data, rt_int32_t state) +{ +#ifdef LS1C_SET_GPIO_MODE + gpio_init(LS1C_I2C_SCL, gpio_mode_output); + ls1c_udelay(5); +#endif + gpio_set(LS1C_I2C_SCL, state); + return ; +} + + +static rt_int32_t ls1c_get_sda(void *data) +{ +#ifdef LS1C_SET_GPIO_MODE + gpio_init(LS1C_I2C_SDA, gpio_mode_input); + ls1c_udelay(5); +#endif + return gpio_get(LS1C_I2C_SDA); +} + + +static rt_int32_t ls1c_get_scl(void *data) +{ +#ifdef LS1C_SET_GPIO_MODE + gpio_init(LS1C_I2C_SCL, gpio_mode_input); + ls1c_udelay(5); +#endif + return gpio_get(LS1C_I2C_SCL); +} + + +static const struct rt_i2c_bit_ops bit_ops = { + .data = RT_NULL, + .set_sda = ls1c_set_sda, + .set_scl = ls1c_set_scl, + .get_sda = ls1c_get_sda, + .get_scl = ls1c_get_scl, + + .udelay = ls1c_udelay, + + .delay_us = 20, // ��ֵΪ����(us) + .timeout = 10, // ��λΪtick +}; + + + +int ls1c_i2c_init(void) +{ + static struct rt_i2c_bus_device bus = {0}; + + bus.priv = (void *)&bit_ops; + + ls1c_i2c_gpio_init(); + + rt_i2c_bit_add_bus(&bus, "i2c2"); + + return RT_EOK; +} + + + + + diff --git a/bsp/ls1cdev/drivers/drv_i2c.h b/bsp/ls1cdev/drivers/drv_i2c.h new file mode 100644 index 0000000000..6d07039c2e --- /dev/null +++ b/bsp/ls1cdev/drivers/drv_i2c.h @@ -0,0 +1,34 @@ +/* + * File : drv_i2c.h + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Change Logs: + * Date Author Notes + * 2017-11-14 ��Ϊ�� first version + */ + +#ifndef LS1C_DRV_I2C_H +#define LS1C_DRV_I2C_H + + +int ls1c_i2c_init(void); + + + +#endif + diff --git a/bsp/ls1cdev/rtconfig.h b/bsp/ls1cdev/rtconfig.h index ae208a485e..79cfc3e56e 100644 --- a/bsp/ls1cdev/rtconfig.h +++ b/bsp/ls1cdev/rtconfig.h @@ -231,6 +231,9 @@ #define RT_USING_SPI0 #define RT_USING_SPI1 +#define RT_USING_I2C +#define RT_USING_I2C_BITOPS + // </RDTConfigurator> |
