mirror of
https://github.com/apache/nuttx.git
synced 2026-05-21 13:13:08 +08:00
Kinetis: Add support for I2C2
This commit is contained in:
@@ -37,94 +37,130 @@ config ARCH_CHIP_MK20DX128VLH5
|
||||
config ARCH_CHIP_MK20DX64VLH7
|
||||
bool "MK20DX64VLH7"
|
||||
select ARCH_FAMILY_K20
|
||||
select KINETIS_HAVE_I2C1
|
||||
|
||||
config ARCH_CHIP_MK20DX128VLH7
|
||||
bool "MK20DX128VLH7"
|
||||
select ARCH_FAMILY_K20
|
||||
select KINETIS_HAVE_I2C1
|
||||
|
||||
config ARCH_CHIP_MK20DX256VLH7
|
||||
bool "MK20DX256VLH7"
|
||||
select ARCH_FAMILY_K20
|
||||
select KINETIS_HAVE_I2C1
|
||||
|
||||
config ARCH_CHIP_MK40N512VLQ100
|
||||
bool "MK40N512VLQ100"
|
||||
select ARCH_FAMILY_K40
|
||||
select KINETIS_HAVE_I2C1
|
||||
|
||||
config ARCH_CHIP_MK40N512VMD100
|
||||
bool "MK40N512VMD100"
|
||||
select ARCH_FAMILY_K40
|
||||
select KINETIS_HAVE_I2C1
|
||||
|
||||
config ARCH_CHIP_MK40X128VLQ100
|
||||
bool "MK40X128VLQ100"
|
||||
select ARCH_FAMILY_K40
|
||||
select KINETIS_HAVE_I2C1
|
||||
|
||||
config ARCH_CHIP_MK40X128VMD100
|
||||
bool "MK40X128VMD100"
|
||||
select ARCH_FAMILY_K40
|
||||
select KINETIS_HAVE_I2C1
|
||||
|
||||
config ARCH_CHIP_MK40X256VLQ100
|
||||
bool "MK40X256VLQ100"
|
||||
select ARCH_FAMILY_K40
|
||||
select KINETIS_HAVE_I2C1
|
||||
|
||||
config ARCH_CHIP_MK40X256VMD100
|
||||
bool "MK40X256VMD100"
|
||||
select ARCH_FAMILY_K40
|
||||
select KINETIS_HAVE_I2C1
|
||||
|
||||
config ARCH_CHIP_MK60N256VLQ100
|
||||
bool "MK60N256VLQ100"
|
||||
select ARCH_FAMILY_K60
|
||||
select KINETIS_HAVE_I2C1
|
||||
|
||||
config ARCH_CHIP_MK60N256VMD100
|
||||
bool "MK60N256VMD100"
|
||||
select ARCH_FAMILY_K60
|
||||
select KINETIS_HAVE_I2C1
|
||||
select KINETIS_HAVE_I2C2
|
||||
|
||||
config ARCH_CHIP_MK60N512VLL100
|
||||
bool "MK60N512VLL100"
|
||||
select ARCH_FAMILY_K60
|
||||
select KINETIS_HAVE_I2C1
|
||||
select KINETIS_HAVE_I2C2
|
||||
|
||||
config ARCH_CHIP_MK60N512VLQ100
|
||||
bool "MK60N512VLQ100"
|
||||
select ARCH_FAMILY_K60
|
||||
select KINETIS_HAVE_I2C1
|
||||
select KINETIS_HAVE_I2C2
|
||||
|
||||
config ARCH_CHIP_MK60N512VMD100
|
||||
bool "MK60N512VMD100"
|
||||
select ARCH_FAMILY_K60
|
||||
select KINETIS_HAVE_I2C1
|
||||
select KINETIS_HAVE_I2C2
|
||||
|
||||
config ARCH_CHIP_MK60X256VLQ100
|
||||
bool "MK60X256VLQ100"
|
||||
select ARCH_FAMILY_K60
|
||||
select KINETIS_HAVE_I2C1
|
||||
select KINETIS_HAVE_I2C2
|
||||
|
||||
config ARCH_CHIP_MK60X256VMD100
|
||||
bool "MK60X256VMD100"
|
||||
select ARCH_FAMILY_K60
|
||||
select KINETIS_HAVE_I2C1
|
||||
select KINETIS_HAVE_I2C2
|
||||
|
||||
config ARCH_CHIP_MK64FN1M0VLL12
|
||||
bool "MK64FN1M0VLL12"
|
||||
select ARCH_FAMILY_K64
|
||||
select KINETIS_HAVE_I2C1
|
||||
select KINETIS_HAVE_I2C2
|
||||
|
||||
config ARCH_CHIP_MK64FX512VLL12
|
||||
bool "MK64FX512VLL12"
|
||||
select ARCH_FAMILY_K64
|
||||
select KINETIS_HAVE_I2C1
|
||||
select KINETIS_HAVE_I2C2
|
||||
|
||||
config ARCH_CHIP_MK64FX512VDC12
|
||||
bool "MK64FX512VDC12"
|
||||
select ARCH_FAMILY_K64
|
||||
select KINETIS_HAVE_I2C1
|
||||
select KINETIS_HAVE_I2C2
|
||||
|
||||
config ARCH_CHIP_MK64FN1M0VDC12
|
||||
bool "MK64FN1M0VDC12"
|
||||
select ARCH_FAMILY_K64
|
||||
select KINETIS_HAVE_I2C1
|
||||
select KINETIS_HAVE_I2C2
|
||||
|
||||
config ARCH_CHIP_MK64FX512VLQ12
|
||||
bool "MK64FX512VLQ12"
|
||||
select ARCH_FAMILY_K64
|
||||
select KINETIS_HAVE_I2C1
|
||||
select KINETIS_HAVE_I2C2
|
||||
|
||||
config ARCH_CHIP_MK64FX512VMD12
|
||||
bool "MK64FX512VMD12"
|
||||
select ARCH_FAMILY_K64
|
||||
select KINETIS_HAVE_I2C1
|
||||
select KINETIS_HAVE_I2C2
|
||||
|
||||
config ARCH_CHIP_MK64FN1M0VMD12
|
||||
bool "MK64FN1M0VMD12"
|
||||
select ARCH_FAMILY_K64
|
||||
select KINETIS_HAVE_I2C1
|
||||
select KINETIS_HAVE_I2C2
|
||||
|
||||
endchoice
|
||||
|
||||
@@ -148,6 +184,14 @@ config ARCH_FAMILY_K64
|
||||
|
||||
menu "Kinetis Peripheral Support"
|
||||
|
||||
config KINETIS_HAVE_I2C1
|
||||
bool
|
||||
default n
|
||||
|
||||
config KINETIS_HAVE_I2C2
|
||||
bool
|
||||
default n
|
||||
|
||||
config KINETIS_TRACE
|
||||
bool "Trace"
|
||||
default n
|
||||
@@ -263,6 +307,15 @@ config KINETIS_I2C1
|
||||
bool "I2C1"
|
||||
default n
|
||||
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---
|
||||
Support I2C1
|
||||
|
||||
|
||||
@@ -78,31 +78,35 @@
|
||||
#define KINETIS_I2C0_SLTH (KINETIS_I2C0_BASE+KINETIS_I2C_SLTH_OFFSET)
|
||||
#define KINETIS_I2C0_SLTL (KINETIS_I2C0_BASE+KINETIS_I2C_SLTL_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_C1 (KINETIS_I2C1_BASE+KINETIS_I2C_C1_OFFSET)
|
||||
#define KINETIS_I2C1_S (KINETIS_I2C1_BASE+KINETIS_I2C_S_OFFSET)
|
||||
#define KINETIS_I2C1_D (KINETIS_I2C1_BASE+KINETIS_I2C_D_OFFSET)
|
||||
#define KINETIS_I2C1_C2 (KINETIS_I2C1_BASE+KINETIS_I2C_C2_OFFSET)
|
||||
#define KINETIS_I2C1_FLT (KINETIS_I2C1_BASE+KINETIS_I2C_FLT_OFFSET)
|
||||
#define KINETIS_I2C1_RA (KINETIS_I2C1_BASE+KINETIS_I2C_RA_OFFSET)
|
||||
#define KINETIS_I2C1_SMB (KINETIS_I2C1_BASE+KINETIS_I2C_SMB_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_SLTL (KINETIS_I2C1_BASE+KINETIS_I2C_SLTL_OFFSET)
|
||||
#ifdef CONFIG_KINETIS_HAVE_I2C1
|
||||
# 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_C1 (KINETIS_I2C1_BASE+KINETIS_I2C_C1_OFFSET)
|
||||
# define KINETIS_I2C1_S (KINETIS_I2C1_BASE+KINETIS_I2C_S_OFFSET)
|
||||
# define KINETIS_I2C1_D (KINETIS_I2C1_BASE+KINETIS_I2C_D_OFFSET)
|
||||
# define KINETIS_I2C1_C2 (KINETIS_I2C1_BASE+KINETIS_I2C_C2_OFFSET)
|
||||
# define KINETIS_I2C1_FLT (KINETIS_I2C1_BASE+KINETIS_I2C_FLT_OFFSET)
|
||||
# define KINETIS_I2C1_RA (KINETIS_I2C1_BASE+KINETIS_I2C_RA_OFFSET)
|
||||
# define KINETIS_I2C1_SMB (KINETIS_I2C1_BASE+KINETIS_I2C_SMB_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_SLTL (KINETIS_I2C1_BASE+KINETIS_I2C_SLTL_OFFSET)
|
||||
#endif
|
||||
|
||||
#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_C1 (KINETIS_I2C2_BASE+KINETIS_I2C_C1_OFFSET)
|
||||
#define KINETIS_I2C2_S (KINETIS_I2C2_BASE+KINETIS_I2C_S_OFFSET)
|
||||
#define KINETIS_I2C2_D (KINETIS_I2C2_BASE+KINETIS_I2C_D_OFFSET)
|
||||
#define KINETIS_I2C2_C2 (KINETIS_I2C2_BASE+KINETIS_I2C_C2_OFFSET)
|
||||
#define KINETIS_I2C2_FLT (KINETIS_I2C2_BASE+KINETIS_I2C_FLT_OFFSET)
|
||||
#define KINETIS_I2C2_RA (KINETIS_I2C2_BASE+KINETIS_I2C_RA_OFFSET)
|
||||
#define KINETIS_I2C2_SMB (KINETIS_I2C2_BASE+KINETIS_I2C_SMB_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_SLTL (KINETIS_I2C2_BASE+KINETIS_I2C_SLTL_OFFSET)
|
||||
#ifdef CONFIG_KINETIS_HAVE_I2C2
|
||||
# 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_C1 (KINETIS_I2C2_BASE+KINETIS_I2C_C1_OFFSET)
|
||||
# define KINETIS_I2C2_S (KINETIS_I2C2_BASE+KINETIS_I2C_S_OFFSET)
|
||||
# define KINETIS_I2C2_D (KINETIS_I2C2_BASE+KINETIS_I2C_D_OFFSET)
|
||||
# define KINETIS_I2C2_C2 (KINETIS_I2C2_BASE+KINETIS_I2C_C2_OFFSET)
|
||||
# define KINETIS_I2C2_FLT (KINETIS_I2C2_BASE+KINETIS_I2C_FLT_OFFSET)
|
||||
# define KINETIS_I2C2_RA (KINETIS_I2C2_BASE+KINETIS_I2C_RA_OFFSET)
|
||||
# define KINETIS_I2C2_SMB (KINETIS_I2C2_BASE+KINETIS_I2C_SMB_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_SLTL (KINETIS_I2C2_BASE+KINETIS_I2C_SLTL_OFFSET)
|
||||
#endif
|
||||
|
||||
/* Register Bit Definitions *****************************************************************/
|
||||
|
||||
|
||||
@@ -66,7 +66,8 @@
|
||||
#include "kinetis.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
|
||||
@@ -134,6 +135,9 @@ static int kinetis_i2c0_interrupt(int irq, void *context);
|
||||
#ifdef CONFIG_KINETIS_I2C1
|
||||
static int kinetis_i2c1_interrupt(int irq, void *context);
|
||||
#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_setfrequency(struct kinetis_i2cdev_s *priv,
|
||||
uint32_t frequency);
|
||||
@@ -168,6 +172,9 @@ static struct kinetis_i2cdev_s g_i2c0_dev;
|
||||
#ifdef CONFIG_KINETIS_I2C1
|
||||
static struct kinetis_i2cdev_s g_i2c1_dev;
|
||||
#endif
|
||||
#ifdef CONFIG_KINETIS_I2C2
|
||||
static struct kinetis_i2cdev_s g_i2c2_dev;
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Private Functions
|
||||
@@ -829,6 +836,14 @@ static int kinetis_i2c1_interrupt(int irq, void *context)
|
||||
}
|
||||
#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
|
||||
*
|
||||
@@ -1042,6 +1057,33 @@ struct i2c_master_s *kinetis_i2cbus_initialize(int port)
|
||||
kinetis_pinconfig(PIN_I2C1_SDA);
|
||||
}
|
||||
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
|
||||
{
|
||||
leave_critical_section(flags);
|
||||
@@ -1108,4 +1150,4 @@ int kinetis_i2cbus_uninitialize(struct i2c_master_s *dev)
|
||||
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