mirror of
https://github.com/apache/nuttx.git
synced 2026-06-02 17:48:54 +08:00
Kinetis: Add support for I2C2
This commit is contained in:
@@ -37,94 +37,130 @@ config ARCH_CHIP_MK20DX128VLH5
|
|||||||
config ARCH_CHIP_MK20DX64VLH7
|
config ARCH_CHIP_MK20DX64VLH7
|
||||||
bool "MK20DX64VLH7"
|
bool "MK20DX64VLH7"
|
||||||
select ARCH_FAMILY_K20
|
select ARCH_FAMILY_K20
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
|
||||||
config ARCH_CHIP_MK20DX128VLH7
|
config ARCH_CHIP_MK20DX128VLH7
|
||||||
bool "MK20DX128VLH7"
|
bool "MK20DX128VLH7"
|
||||||
select ARCH_FAMILY_K20
|
select ARCH_FAMILY_K20
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
|
||||||
config ARCH_CHIP_MK20DX256VLH7
|
config ARCH_CHIP_MK20DX256VLH7
|
||||||
bool "MK20DX256VLH7"
|
bool "MK20DX256VLH7"
|
||||||
select ARCH_FAMILY_K20
|
select ARCH_FAMILY_K20
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
|
||||||
config ARCH_CHIP_MK40N512VLQ100
|
config ARCH_CHIP_MK40N512VLQ100
|
||||||
bool "MK40N512VLQ100"
|
bool "MK40N512VLQ100"
|
||||||
select ARCH_FAMILY_K40
|
select ARCH_FAMILY_K40
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
|
||||||
config ARCH_CHIP_MK40N512VMD100
|
config ARCH_CHIP_MK40N512VMD100
|
||||||
bool "MK40N512VMD100"
|
bool "MK40N512VMD100"
|
||||||
select ARCH_FAMILY_K40
|
select ARCH_FAMILY_K40
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
|
||||||
config ARCH_CHIP_MK40X128VLQ100
|
config ARCH_CHIP_MK40X128VLQ100
|
||||||
bool "MK40X128VLQ100"
|
bool "MK40X128VLQ100"
|
||||||
select ARCH_FAMILY_K40
|
select ARCH_FAMILY_K40
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
|
||||||
config ARCH_CHIP_MK40X128VMD100
|
config ARCH_CHIP_MK40X128VMD100
|
||||||
bool "MK40X128VMD100"
|
bool "MK40X128VMD100"
|
||||||
select ARCH_FAMILY_K40
|
select ARCH_FAMILY_K40
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
|
||||||
config ARCH_CHIP_MK40X256VLQ100
|
config ARCH_CHIP_MK40X256VLQ100
|
||||||
bool "MK40X256VLQ100"
|
bool "MK40X256VLQ100"
|
||||||
select ARCH_FAMILY_K40
|
select ARCH_FAMILY_K40
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
|
||||||
config ARCH_CHIP_MK40X256VMD100
|
config ARCH_CHIP_MK40X256VMD100
|
||||||
bool "MK40X256VMD100"
|
bool "MK40X256VMD100"
|
||||||
select ARCH_FAMILY_K40
|
select ARCH_FAMILY_K40
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
|
||||||
config ARCH_CHIP_MK60N256VLQ100
|
config ARCH_CHIP_MK60N256VLQ100
|
||||||
bool "MK60N256VLQ100"
|
bool "MK60N256VLQ100"
|
||||||
select ARCH_FAMILY_K60
|
select ARCH_FAMILY_K60
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
|
||||||
config ARCH_CHIP_MK60N256VMD100
|
config ARCH_CHIP_MK60N256VMD100
|
||||||
bool "MK60N256VMD100"
|
bool "MK60N256VMD100"
|
||||||
select ARCH_FAMILY_K60
|
select ARCH_FAMILY_K60
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
select KINETIS_HAVE_I2C2
|
||||||
|
|
||||||
config ARCH_CHIP_MK60N512VLL100
|
config ARCH_CHIP_MK60N512VLL100
|
||||||
bool "MK60N512VLL100"
|
bool "MK60N512VLL100"
|
||||||
select ARCH_FAMILY_K60
|
select ARCH_FAMILY_K60
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
select KINETIS_HAVE_I2C2
|
||||||
|
|
||||||
config ARCH_CHIP_MK60N512VLQ100
|
config ARCH_CHIP_MK60N512VLQ100
|
||||||
bool "MK60N512VLQ100"
|
bool "MK60N512VLQ100"
|
||||||
select ARCH_FAMILY_K60
|
select ARCH_FAMILY_K60
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
select KINETIS_HAVE_I2C2
|
||||||
|
|
||||||
config ARCH_CHIP_MK60N512VMD100
|
config ARCH_CHIP_MK60N512VMD100
|
||||||
bool "MK60N512VMD100"
|
bool "MK60N512VMD100"
|
||||||
select ARCH_FAMILY_K60
|
select ARCH_FAMILY_K60
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
select KINETIS_HAVE_I2C2
|
||||||
|
|
||||||
config ARCH_CHIP_MK60X256VLQ100
|
config ARCH_CHIP_MK60X256VLQ100
|
||||||
bool "MK60X256VLQ100"
|
bool "MK60X256VLQ100"
|
||||||
select ARCH_FAMILY_K60
|
select ARCH_FAMILY_K60
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
select KINETIS_HAVE_I2C2
|
||||||
|
|
||||||
config ARCH_CHIP_MK60X256VMD100
|
config ARCH_CHIP_MK60X256VMD100
|
||||||
bool "MK60X256VMD100"
|
bool "MK60X256VMD100"
|
||||||
select ARCH_FAMILY_K60
|
select ARCH_FAMILY_K60
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
select KINETIS_HAVE_I2C2
|
||||||
|
|
||||||
config ARCH_CHIP_MK64FN1M0VLL12
|
config ARCH_CHIP_MK64FN1M0VLL12
|
||||||
bool "MK64FN1M0VLL12"
|
bool "MK64FN1M0VLL12"
|
||||||
select ARCH_FAMILY_K64
|
select ARCH_FAMILY_K64
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
select KINETIS_HAVE_I2C2
|
||||||
|
|
||||||
config ARCH_CHIP_MK64FX512VLL12
|
config ARCH_CHIP_MK64FX512VLL12
|
||||||
bool "MK64FX512VLL12"
|
bool "MK64FX512VLL12"
|
||||||
select ARCH_FAMILY_K64
|
select ARCH_FAMILY_K64
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
select KINETIS_HAVE_I2C2
|
||||||
|
|
||||||
config ARCH_CHIP_MK64FX512VDC12
|
config ARCH_CHIP_MK64FX512VDC12
|
||||||
bool "MK64FX512VDC12"
|
bool "MK64FX512VDC12"
|
||||||
select ARCH_FAMILY_K64
|
select ARCH_FAMILY_K64
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
select KINETIS_HAVE_I2C2
|
||||||
|
|
||||||
config ARCH_CHIP_MK64FN1M0VDC12
|
config ARCH_CHIP_MK64FN1M0VDC12
|
||||||
bool "MK64FN1M0VDC12"
|
bool "MK64FN1M0VDC12"
|
||||||
select ARCH_FAMILY_K64
|
select ARCH_FAMILY_K64
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
select KINETIS_HAVE_I2C2
|
||||||
|
|
||||||
config ARCH_CHIP_MK64FX512VLQ12
|
config ARCH_CHIP_MK64FX512VLQ12
|
||||||
bool "MK64FX512VLQ12"
|
bool "MK64FX512VLQ12"
|
||||||
select ARCH_FAMILY_K64
|
select ARCH_FAMILY_K64
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
select KINETIS_HAVE_I2C2
|
||||||
|
|
||||||
config ARCH_CHIP_MK64FX512VMD12
|
config ARCH_CHIP_MK64FX512VMD12
|
||||||
bool "MK64FX512VMD12"
|
bool "MK64FX512VMD12"
|
||||||
select ARCH_FAMILY_K64
|
select ARCH_FAMILY_K64
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
select KINETIS_HAVE_I2C2
|
||||||
|
|
||||||
config ARCH_CHIP_MK64FN1M0VMD12
|
config ARCH_CHIP_MK64FN1M0VMD12
|
||||||
bool "MK64FN1M0VMD12"
|
bool "MK64FN1M0VMD12"
|
||||||
select ARCH_FAMILY_K64
|
select ARCH_FAMILY_K64
|
||||||
|
select KINETIS_HAVE_I2C1
|
||||||
|
select KINETIS_HAVE_I2C2
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
@@ -148,6 +184,14 @@ config ARCH_FAMILY_K64
|
|||||||
|
|
||||||
menu "Kinetis Peripheral Support"
|
menu "Kinetis Peripheral Support"
|
||||||
|
|
||||||
|
config KINETIS_HAVE_I2C1
|
||||||
|
bool
|
||||||
|
default n
|
||||||
|
|
||||||
|
config KINETIS_HAVE_I2C2
|
||||||
|
bool
|
||||||
|
default n
|
||||||
|
|
||||||
config KINETIS_TRACE
|
config KINETIS_TRACE
|
||||||
bool "Trace"
|
bool "Trace"
|
||||||
default n
|
default n
|
||||||
@@ -263,6 +307,15 @@ config KINETIS_I2C1
|
|||||||
bool "I2C1"
|
bool "I2C1"
|
||||||
default n
|
default n
|
||||||
select I2C
|
select I2C
|
||||||
|
depends on KINETIS_HAVE_I2C1
|
||||||
|
---help---
|
||||||
|
Support I2C1
|
||||||
|
|
||||||
|
config KINETIS_I2C2
|
||||||
|
bool "I2C2"
|
||||||
|
default n
|
||||||
|
select I2C
|
||||||
|
depends on KINETIS_HAVE_I2C2
|
||||||
---help---
|
---help---
|
||||||
Support I2C1
|
Support I2C1
|
||||||
|
|
||||||
|
|||||||
@@ -78,6 +78,7 @@
|
|||||||
#define KINETIS_I2C0_SLTH (KINETIS_I2C0_BASE+KINETIS_I2C_SLTH_OFFSET)
|
#define KINETIS_I2C0_SLTH (KINETIS_I2C0_BASE+KINETIS_I2C_SLTH_OFFSET)
|
||||||
#define KINETIS_I2C0_SLTL (KINETIS_I2C0_BASE+KINETIS_I2C_SLTL_OFFSET)
|
#define KINETIS_I2C0_SLTL (KINETIS_I2C0_BASE+KINETIS_I2C_SLTL_OFFSET)
|
||||||
|
|
||||||
|
#ifdef CONFIG_KINETIS_HAVE_I2C1
|
||||||
# define KINETIS_I2C1_A1 (KINETIS_I2C1_BASE+KINETIS_I2C_A1_OFFSET)
|
# define KINETIS_I2C1_A1 (KINETIS_I2C1_BASE+KINETIS_I2C_A1_OFFSET)
|
||||||
# define KINETIS_I2C1_F (KINETIS_I2C1_BASE+KINETIS_I2C_F_OFFSET)
|
# define KINETIS_I2C1_F (KINETIS_I2C1_BASE+KINETIS_I2C_F_OFFSET)
|
||||||
# define KINETIS_I2C1_C1 (KINETIS_I2C1_BASE+KINETIS_I2C_C1_OFFSET)
|
# define KINETIS_I2C1_C1 (KINETIS_I2C1_BASE+KINETIS_I2C_C1_OFFSET)
|
||||||
@@ -90,7 +91,9 @@
|
|||||||
# define KINETIS_I2C1_A2 (KINETIS_I2C1_BASE+KINETIS_I2C_A2_OFFSET)
|
# define KINETIS_I2C1_A2 (KINETIS_I2C1_BASE+KINETIS_I2C_A2_OFFSET)
|
||||||
# define KINETIS_I2C1_SLTH (KINETIS_I2C1_BASE+KINETIS_I2C_SLTH_OFFSET)
|
# define KINETIS_I2C1_SLTH (KINETIS_I2C1_BASE+KINETIS_I2C_SLTH_OFFSET)
|
||||||
# define KINETIS_I2C1_SLTL (KINETIS_I2C1_BASE+KINETIS_I2C_SLTL_OFFSET)
|
# define KINETIS_I2C1_SLTL (KINETIS_I2C1_BASE+KINETIS_I2C_SLTL_OFFSET)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_KINETIS_HAVE_I2C2
|
||||||
# define KINETIS_I2C2_A1 (KINETIS_I2C2_BASE+KINETIS_I2C_A1_OFFSET)
|
# define KINETIS_I2C2_A1 (KINETIS_I2C2_BASE+KINETIS_I2C_A1_OFFSET)
|
||||||
# define KINETIS_I2C2_F (KINETIS_I2C2_BASE+KINETIS_I2C_F_OFFSET)
|
# define KINETIS_I2C2_F (KINETIS_I2C2_BASE+KINETIS_I2C_F_OFFSET)
|
||||||
# define KINETIS_I2C2_C1 (KINETIS_I2C2_BASE+KINETIS_I2C_C1_OFFSET)
|
# define KINETIS_I2C2_C1 (KINETIS_I2C2_BASE+KINETIS_I2C_C1_OFFSET)
|
||||||
@@ -103,6 +106,7 @@
|
|||||||
# define KINETIS_I2C2_A2 (KINETIS_I2C2_BASE+KINETIS_I2C_A2_OFFSET)
|
# define KINETIS_I2C2_A2 (KINETIS_I2C2_BASE+KINETIS_I2C_A2_OFFSET)
|
||||||
# define KINETIS_I2C2_SLTH (KINETIS_I2C2_BASE+KINETIS_I2C_SLTH_OFFSET)
|
# define KINETIS_I2C2_SLTH (KINETIS_I2C2_BASE+KINETIS_I2C_SLTH_OFFSET)
|
||||||
# define KINETIS_I2C2_SLTL (KINETIS_I2C2_BASE+KINETIS_I2C_SLTL_OFFSET)
|
# define KINETIS_I2C2_SLTL (KINETIS_I2C2_BASE+KINETIS_I2C_SLTL_OFFSET)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Register Bit Definitions *****************************************************************/
|
/* Register Bit Definitions *****************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,8 @@
|
|||||||
#include "kinetis.h"
|
#include "kinetis.h"
|
||||||
#include "kinetis_i2c.h"
|
#include "kinetis_i2c.h"
|
||||||
|
|
||||||
#if defined(CONFIG_KINETIS_I2C0) || defined(CONFIG_KINETIS_I2C1)
|
#if defined(CONFIG_KINETIS_I2C0) || defined(CONFIG_KINETIS_I2C1) || \
|
||||||
|
defined(CONFIG_KINETIS_I2C2)
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Pre-processor Definitions
|
* Pre-processor Definitions
|
||||||
@@ -134,6 +135,9 @@ static int kinetis_i2c0_interrupt(int irq, void *context);
|
|||||||
#ifdef CONFIG_KINETIS_I2C1
|
#ifdef CONFIG_KINETIS_I2C1
|
||||||
static int kinetis_i2c1_interrupt(int irq, void *context);
|
static int kinetis_i2c1_interrupt(int irq, void *context);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_KINETIS_I2C2
|
||||||
|
static int kinetis_i2c2_interrupt(int irq, void *context);
|
||||||
|
#endif
|
||||||
static void kinetis_i2c_timeout(int argc, uint32_t arg, ...);
|
static void kinetis_i2c_timeout(int argc, uint32_t arg, ...);
|
||||||
static void kinetis_i2c_setfrequency(struct kinetis_i2cdev_s *priv,
|
static void kinetis_i2c_setfrequency(struct kinetis_i2cdev_s *priv,
|
||||||
uint32_t frequency);
|
uint32_t frequency);
|
||||||
@@ -168,6 +172,9 @@ static struct kinetis_i2cdev_s g_i2c0_dev;
|
|||||||
#ifdef CONFIG_KINETIS_I2C1
|
#ifdef CONFIG_KINETIS_I2C1
|
||||||
static struct kinetis_i2cdev_s g_i2c1_dev;
|
static struct kinetis_i2cdev_s g_i2c1_dev;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_KINETIS_I2C2
|
||||||
|
static struct kinetis_i2cdev_s g_i2c2_dev;
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Functions
|
* Private Functions
|
||||||
@@ -829,6 +836,14 @@ static int kinetis_i2c1_interrupt(int irq, void *context)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_KINETIS_I2C2
|
||||||
|
static int kinetis_i2c2_interrupt(int irq, void *context)
|
||||||
|
{
|
||||||
|
i2cinfo("I2C2 Interrupt...\n");
|
||||||
|
return kinetis_i2c_interrupt(&g_i2c2_dev);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: kinetis_i2c_transfer
|
* Name: kinetis_i2c_transfer
|
||||||
*
|
*
|
||||||
@@ -1042,6 +1057,33 @@ struct i2c_master_s *kinetis_i2cbus_initialize(int port)
|
|||||||
kinetis_pinconfig(PIN_I2C1_SDA);
|
kinetis_pinconfig(PIN_I2C1_SDA);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_KINETIS_I2C2
|
||||||
|
if (port == 2)
|
||||||
|
{
|
||||||
|
priv = &g_i2c2_dev;
|
||||||
|
priv->base = KINETIS_I2C2_BASE;
|
||||||
|
priv->irqid = KINETIS_IRQ_I2C2;
|
||||||
|
priv->basefreq = BOARD_BUS_FREQ;
|
||||||
|
|
||||||
|
handler = kinetis_i2c2_interrupt;
|
||||||
|
|
||||||
|
/* Enable clock */
|
||||||
|
|
||||||
|
regval = getreg32(KINETIS_SIM_SCGC4);
|
||||||
|
regval |= SIM_SCGC4_I2C2;
|
||||||
|
putreg32(regval, KINETIS_SIM_SCGC4);
|
||||||
|
|
||||||
|
/* Disable while configuring */
|
||||||
|
|
||||||
|
kinetis_i2c_putreg(priv, 0, KINETIS_I2C_C1_OFFSET);
|
||||||
|
|
||||||
|
/* Configure pins */
|
||||||
|
|
||||||
|
kinetis_pinconfig(PIN_I2C2_SCL);
|
||||||
|
kinetis_pinconfig(PIN_I2C2_SDA);
|
||||||
|
}
|
||||||
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
leave_critical_section(flags);
|
leave_critical_section(flags);
|
||||||
@@ -1108,4 +1150,4 @@ int kinetis_i2cbus_uninitialize(struct i2c_master_s *dev)
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_KINETIS_I2C0 || CONFIG_KINETIS_I2C1 */
|
#endif /* CONFIG_KINETIS_I2C0 || CONFIG_KINETIS_I2C1 || CONFIG_KINETIS_I2C2 */
|
||||||
|
|||||||
Reference in New Issue
Block a user