summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bsp/nrf5x/libraries/drivers/SConscript3
-rw-r--r--bsp/nrf5x/libraries/drivers/drv_i2c.c116
-rw-r--r--bsp/nrf5x/libraries/drivers/drv_i2c.h23
-rw-r--r--bsp/nrf5x/nrf52832/board/Kconfig44
-rw-r--r--bsp/nrf5x/nrf52832/board/sdk_config.h2
-rw-r--r--bsp/nrf5x/nrf52840/board/Kconfig42
-rw-r--r--bsp/nrf5x/nrf52840/board/sdk_config.h8
7 files changed, 231 insertions, 7 deletions
diff --git a/bsp/nrf5x/libraries/drivers/SConscript b/bsp/nrf5x/libraries/drivers/SConscript
index 611b52d993..7c2a47a734 100644
--- a/bsp/nrf5x/libraries/drivers/SConscript
+++ b/bsp/nrf5x/libraries/drivers/SConscript
@@ -18,6 +18,9 @@ if GetDepend(['BSP_USING_ON_CHIP_FLASH']):
if GetDepend(['BSP_USING_QSPI_FLASH']):
src += ['drv_qspi_flash.c']
+
+if GetDepend(['BSP_USING_I2C']):
+ src += ['drv_i2c.c']
if GetDepend(['BSP_USING_SPI']):
src += ['drv_spi.c']
diff --git a/bsp/nrf5x/libraries/drivers/drv_i2c.c b/bsp/nrf5x/libraries/drivers/drv_i2c.c
new file mode 100644
index 0000000000..fedb00b2d4
--- /dev/null
+++ b/bsp/nrf5x/libraries/drivers/drv_i2c.c
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2006-2020, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2020-11-15 xckhmf First Verison
+ *
+ */
+
+#include <rtdevice.h>
+#include <nrfx_twi_twim.h>
+#include <nrfx_twim.h>
+#include <drv_i2c.h>
+#if defined(BSP_USING_I2C0) || defined(BSP_USING_I2C1)
+typedef struct
+{
+ nrf_twim_frequency_t freq;
+ uint32_t scl_pin;
+ uint32_t sda_pin;
+ nrfx_twim_t twi_instance;
+}drv_i2c_cfg_t;
+
+#ifdef BSP_USING_I2C0
+static drv_i2c_cfg_t drv_i2c_0 =
+{
+ .freq = NRF_TWIM_FREQ_400K,
+ .scl_pin = BSP_I2C0_SCL_PIN,
+ .sda_pin = BSP_I2C0_SDA_PIN,
+ .twi_instance = NRFX_TWIM_INSTANCE(0)
+};
+static struct rt_i2c_bus_device i2c0_bus;
+#endif
+#ifdef BSP_USING_I2C1
+static drv_i2c_cfg_t drv_i2c_1 =
+{
+ .freq = NRF_TWIM_FREQ_400K,
+ .scl_pin = BSP_I2C1_SCL_PIN,
+ .sda_pin = BSP_I2C1_SDA_PIN,
+ .twi_instance = NRFX_TWIM_INSTANCE(1)
+};
+static struct rt_i2c_bus_device i2c1_bus;
+#endif
+static int twi_master_init(struct rt_i2c_bus_device *bus)
+{
+ nrfx_err_t rtn;
+ nrfx_twim_config_t config = NRFX_TWIM_DEFAULT_CONFIG(0,0);
+ drv_i2c_cfg_t *p_cfg = bus->priv;
+ nrfx_twim_t const * p_instance = &p_cfg->twi_instance;
+
+ config.frequency = p_cfg->freq;
+ config.scl = p_cfg->scl_pin;
+ config.sda = p_cfg->sda_pin;
+
+ nrfx_twi_twim_bus_recover(config.scl,config.sda);
+
+ rtn = nrfx_twim_init(p_instance,&config,NULL,NULL);
+ nrfx_twim_enable(p_instance);
+ return 0;
+}
+
+static rt_size_t _master_xfer(struct rt_i2c_bus_device *bus,
+ struct rt_i2c_msg msgs[],
+ rt_uint32_t num)
+{
+ nrfx_twim_t const * p_instance = &((drv_i2c_cfg_t *)bus->priv)->twi_instance;
+ nrfx_err_t ret = NRFX_ERROR_INTERNAL;
+ uint32_t no_stop_flag = 0;
+
+ nrfx_twim_xfer_desc_t xfer = NRFX_TWIM_XFER_DESC_TX(msgs->addr,msgs->buf, msgs->len);
+ if((msgs->flags & 0x01) == RT_I2C_WR)
+ {
+ xfer.type = NRFX_TWIM_XFER_TX;
+ if((msgs->flags & 0x40) == RT_I2C_NO_READ_ACK)
+ {
+ no_stop_flag = NRFX_TWIM_FLAG_TX_NO_STOP;
+ }
+ }
+ else if((msgs->flags & 0x01) == RT_I2C_RD)
+ {
+ xfer.type = NRFX_TWIM_XFER_RX;
+ }
+ ret = nrfx_twim_xfer(p_instance,&xfer,no_stop_flag);
+ return (ret == NRFX_SUCCESS) ? msgs->len : 0;
+
+}
+
+static const struct rt_i2c_bus_device_ops _i2c_ops =
+{
+ _master_xfer,
+ NULL,
+ NULL,
+};
+
+int rt_hw_i2c_init(void)
+{
+#ifdef BSP_USING_I2C0
+ i2c0_bus.ops= &_i2c_ops;
+ i2c0_bus.timeout = 0;
+ i2c0_bus.priv = (void *)&drv_i2c_0;
+ twi_master_init(&i2c0_bus);
+ rt_i2c_bus_device_register(&i2c0_bus, "i2c0");
+#endif
+#ifdef BSP_USING_I2C1
+ i2c1_bus.ops= &_i2c_ops;
+ i2c1_bus.timeout = 0;
+ i2c1_bus.priv = (void *)&drv_i2c_1;
+ twi_master_init(&i2c1_bus);
+ rt_i2c_bus_device_register(&i2c1_bus, "i2c1");
+#endif
+ return 0;
+}
+
+INIT_BOARD_EXPORT(rt_hw_i2c_init);
+#endif /* defined(BSP_USING_I2C0) || defined(BSP_USING_I2C1) */
diff --git a/bsp/nrf5x/libraries/drivers/drv_i2c.h b/bsp/nrf5x/libraries/drivers/drv_i2c.h
new file mode 100644
index 0000000000..e3843927c1
--- /dev/null
+++ b/bsp/nrf5x/libraries/drivers/drv_i2c.h
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2006-2020, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2020-11-15 xckhmf First Verison
+ *
+ */
+#ifndef __DRV_I2C_H__
+#define __DRV_I2C_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __DRV_I2C_H__ */
diff --git a/bsp/nrf5x/nrf52832/board/Kconfig b/bsp/nrf5x/nrf52832/board/Kconfig
index 9f7b1e89d7..98cf53014b 100644
--- a/bsp/nrf5x/nrf52832/board/Kconfig
+++ b/bsp/nrf5x/nrf52832/board/Kconfig
@@ -218,7 +218,49 @@ menu "On-chip Peripheral Drivers"
default 6
endif
endif
-
+
+ config BSP_USING_I2C
+ bool "Enable I2C"
+ select RT_USING_I2C
+ default n
+ if BSP_USING_I2C
+ config NRFX_TWIM_ENABLED
+ int
+ default 1
+ config BSP_USING_I2C0
+ bool "Enable I2C0 bus"
+ default n
+ if BSP_USING_I2C0
+ config NRFX_TWIM0_ENABLED
+ int
+ default 1
+ config BSP_I2C0_SCL_PIN
+ int "i2c0 scl pin number"
+ range 0 31
+ default 27
+ config BSP_I2C0_SDA_PIN
+ int "I2C0 sda pin number"
+ range 0 31
+ default 26
+ endif
+ config BSP_USING_I2C1
+ bool "Enable I2C1 bus"
+ default n
+ if BSP_USING_I2C1
+ config NRFX_TWIM1_ENABLED
+ int
+ default 1
+ config BSP_I2C1_SCL_PIN
+ int "i2c1 scl pin number"
+ range 0 31
+ default 3
+ config BSP_I2C1_SDA_PIN
+ int "I2C1 sda pin number"
+ range 0 31
+ default 2
+ endif
+ endif
+
config BSP_USING_SPI
bool "Enable SPI"
select RT_USING_PIN
diff --git a/bsp/nrf5x/nrf52832/board/sdk_config.h b/bsp/nrf5x/nrf52832/board/sdk_config.h
index bdc0abd4a9..4055c9ddde 100644
--- a/bsp/nrf5x/nrf52832/board/sdk_config.h
+++ b/bsp/nrf5x/nrf52832/board/sdk_config.h
@@ -3557,7 +3557,7 @@
// <e> NRFX_SPI_ENABLED - nrfx_spi - SPI peripheral driver
//==========================================================
#ifndef NRFX_SPI_ENABLED
-#define NRFX_SPI_ENABLED 1
+#define NRFX_SPI_ENABLED 0
#endif
// <q> NRFX_SPI0_ENABLED - Enable SPI0 instance
diff --git a/bsp/nrf5x/nrf52840/board/Kconfig b/bsp/nrf5x/nrf52840/board/Kconfig
index 4015c3fa95..94715c0bb9 100644
--- a/bsp/nrf5x/nrf52840/board/Kconfig
+++ b/bsp/nrf5x/nrf52840/board/Kconfig
@@ -271,7 +271,47 @@ menu "On-chip Peripheral Drivers"
default 5
endif
endif
-
+ config BSP_USING_I2C
+ bool "Enable I2C"
+ select RT_USING_I2C
+ default n
+ if BSP_USING_I2C
+ config NRFX_TWIM_ENABLED
+ int
+ default 1
+ config BSP_USING_I2C0
+ bool "Enable I2C0 bus"
+ default n
+ if BSP_USING_I2C0
+ config NRFX_TWIM0_ENABLED
+ int
+ default 1
+ config BSP_I2C0_SCL_PIN
+ int "i2c0 scl pin number"
+ range 0 31
+ default 27
+ config BSP_I2C0_SDA_PIN
+ int "I2C0 sda pin number"
+ range 0 31
+ default 26
+ endif
+ config BSP_USING_I2C1
+ bool "Enable I2C1 bus"
+ default n
+ if BSP_USING_I2C1
+ config NRFX_TWIM1_ENABLED
+ int
+ default 1
+ config BSP_I2C1_SCL_PIN
+ int "i2c1 scl pin number"
+ range 0 31
+ default 3
+ config BSP_I2C1_SDA_PIN
+ int "I2C1 sda pin number"
+ range 0 31
+ default 2
+ endif
+ endif
config BSP_USING_SPI
bool "Enable SPI"
select RT_USING_PIN
diff --git a/bsp/nrf5x/nrf52840/board/sdk_config.h b/bsp/nrf5x/nrf52840/board/sdk_config.h
index bdc0abd4a9..8f6f5dc0d9 100644
--- a/bsp/nrf5x/nrf52840/board/sdk_config.h
+++ b/bsp/nrf5x/nrf52840/board/sdk_config.h
@@ -3557,27 +3557,27 @@
// <e> NRFX_SPI_ENABLED - nrfx_spi - SPI peripheral driver
//==========================================================
#ifndef NRFX_SPI_ENABLED
-#define NRFX_SPI_ENABLED 1
+#define NRFX_SPI_ENABLED 0
#endif
// <q> NRFX_SPI0_ENABLED - Enable SPI0 instance
#ifndef NRFX_SPI0_ENABLED
-#define NRFX_SPI0_ENABLED 1
+#define NRFX_SPI0_ENABLED 0
#endif
// <q> NRFX_SPI1_ENABLED - Enable SPI1 instance
#ifndef NRFX_SPI1_ENABLED
-#define NRFX_SPI1_ENABLED 1
+#define NRFX_SPI1_ENABLED 0
#endif
// <q> NRFX_SPI2_ENABLED - Enable SPI2 instance
#ifndef NRFX_SPI2_ENABLED
-#define NRFX_SPI2_ENABLED 1
+#define NRFX_SPI2_ENABLED 0
#endif
// <o> NRFX_SPI_MISO_PULL_CFG - MISO pin pull configuration.