diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/applications/main.c b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/applications/main.c index db33aa290d8..db278a7a9b5 100644 --- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/applications/main.c +++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/applications/main.c @@ -14,9 +14,22 @@ #include #include +static rt_err_t _print_device(rt_object_t object, void *data) +{ + rt_kprintf(" %s\r\n", object->name); + return RT_EOK; +} + +static void print_devices(void) +{ + rt_kprintf("device list:\r\n"); + rt_object_for_each(RT_Object_Class_Device, _print_device, RT_NULL); +} + int main(void) { rt_kprintf("MIMXRT1180_CM33 Hello_World\r\n"); + print_devices(); while (1) { diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/Kconfig b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/Kconfig index 12d8078d8c2..341e47877b2 100644 --- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/Kconfig +++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/Kconfig @@ -17,7 +17,7 @@ config SOC_MIMXRT1189CVM8C_CM33 default y depends on SOC_MIMXRT1189CVM8C select ARCH_ARM_CORTEX_M33 - select ARCH_ARM_CORTEX_FPU + select ARCH_ARM_CORTEX_FPU select ARCH_ARM_CORTEX_SECURE menu "On-chip Peripheral Drivers" @@ -128,6 +128,42 @@ menu "On-chip Peripheral Drivers" default 1 endif + menuconfig BSP_USING_I2C + bool "Enable I2C" + select RT_USING_I2C + default n + if BSP_USING_I2C + config BSP_USING_I2C2 + bool "Enable I2C2" + default y + + config BSP_USING_I2C3 + bool "Enable I2C3" + default n + + choice + prompt "Select I2C2 badurate" + default HW_I2C2_BADURATE_100kHZ + + config HW_I2C2_BADURATE_100kHZ + bool "Badurate 100kHZ" + + config HW_I2C2_BADURATE_400kHZ + bool "Badurate 400kHZ" + endchoice + + choice + prompt "Select I2C3 badurate" + default HW_I2C3_BADURATE_100kHZ + + config HW_I2C3_BADURATE_100kHZ + bool "Badurate 100kHZ" + + config HW_I2C3_BADURATE_400kHZ + bool "Badurate 400kHZ" + endchoice + endif + menuconfig BSP_USING_CAN bool "Enable CAN" select RT_USING_CAN diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/MCUX_Config/pin_mux.c b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/MCUX_Config/pin_mux.c index 9ef62aca0ed..a523d6cd5e0 100644 --- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/MCUX_Config/pin_mux.c +++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/MCUX_Config/pin_mux.c @@ -73,7 +73,7 @@ void BOARD_InitPins(void) { 0U); /* Software Input On Field: Input Path is determined by functionality */ IOMUXC_SetPinMux( IOMUXC_GPIO_AON_09_LPUART1_RX, /* GPIO_AON_09 is configured as LPUART1_RX */ - 0U); /* Software Input On Field: Input Path is determined by functionality */ + 1U); /* Software Input On Field: Force input path of pad GPIO_AON_09 */ IOMUXC_SetPinConfig( IOMUXC_GPIO_AON_08_LPUART1_TX, /* GPIO_AON_08 PAD functional properties : */ 0x02U); /* Slew Rate Field: Fast Slew Rate @@ -88,6 +88,25 @@ void BOARD_InitPins(void) { Pull / Keep Select Field: Pull Disable, Highz Pull Up / Down Config. Field: Weak pull down Open Drain Field: Disabled */ + + IOMUXC_SetPinMux( + IOMUXC_GPIO_AON_16_LPI2C2_SCL, /* GPIO_AON_16 is configured as LPI2C2_SCL */ + 0U); /* Software Input On Field: Input Path is determined by functionality */ + IOMUXC_SetPinMux( + IOMUXC_GPIO_AON_15_LPI2C2_SDA, /* GPIO_AON_15 is configured as LPI2C2_SDA */ + 0U); /* Software Input On Field: Input Path is determined by functionality */ + IOMUXC_SetPinConfig( + IOMUXC_GPIO_AON_16_LPI2C2_SCL, /* GPIO_AON_16 PAD functional properties : */ + 0x1DU); /* Slew Rate Field: Slow Slew Rate + Pull Enable Field: Pull Enable + Pull Up / Down Config. Field: Weak pull up + Open Drain Field: Enabled */ + IOMUXC_SetPinConfig( + IOMUXC_GPIO_AON_15_LPI2C2_SDA, /* GPIO_AON_15 PAD functional properties : */ + 0x1DU); /* Slew Rate Field: Slow Slew Rate + Pull Enable Field: Pull Enable + Pull Up / Down Config. Field: Weak pull up + Open Drain Field: Enabled */ } void BOARD_InitLeds(void) { diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/SConscript b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/SConscript index 0cfbe5a55b1..3552105b741 100644 --- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/SConscript +++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm33/board/SConscript @@ -26,6 +26,10 @@ if rtconfig.PLATFORM in ['iccarm']: CPPDEFINES += ['NDEBUG'] # CPPDEFINES += ['FSL_SDK_DRIVER_QUICK_ACCESS_ENABLE=1'] +if GetDepend(['BSP_USING_I2C']): + src += ['../packages/nxp-imxrt-sdk-latest/MIMXRT1180/MIMXRT1189/drivers/fsl_lpi2c.c'] + CPPPATH += [cwd + '/../packages/nxp-imxrt-sdk-latest/MIMXRT1180/MIMXRT1189/drivers'] + group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES=CPPDEFINES) Return('group') diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/Kconfig b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/Kconfig index 20b7ee52514..4d3ff4a0290 100644 --- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/Kconfig +++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/Kconfig @@ -17,8 +17,8 @@ config SOC_MIMXRT1189CVM8C_CM7 default y depends on SOC_MIMXRT1189CVM8C select ARCH_ARM_CORTEX_M7 - select ARCH_ARM_CORTEX_FPU - + select ARCH_ARM_CORTEX_FPU + config BSP_USING_LCD_MIPI bool default n @@ -131,6 +131,42 @@ menu "On-chip Peripheral Drivers" default 1 endif + menuconfig BSP_USING_I2C + bool "Enable I2C" + select RT_USING_I2C + default n + if BSP_USING_I2C + config BSP_USING_I2C2 + bool "Enable I2C2" + default y + + config BSP_USING_I2C3 + bool "Enable I2C3" + default n + + choice + prompt "Select I2C2 badurate" + default HW_I2C2_BADURATE_100kHZ + + config HW_I2C2_BADURATE_100kHZ + bool "Badurate 100kHZ" + + config HW_I2C2_BADURATE_400kHZ + bool "Badurate 400kHZ" + endchoice + + choice + prompt "Select I2C3 badurate" + default HW_I2C3_BADURATE_100kHZ + + config HW_I2C3_BADURATE_100kHZ + bool "Badurate 100kHZ" + + config HW_I2C3_BADURATE_400kHZ + bool "Badurate 400kHZ" + endchoice + endif + menuconfig BSP_USING_CAN bool "Enable CAN" select RT_USING_CAN @@ -244,13 +280,13 @@ menu "Onboard Peripheral Drivers" choice prompt "Select display panel" default DISPLAY_USING_RK055AHD091 - + config DISPLAY_USING_RK055AHD091 bool "RK055AHD091-CTG (RK055HDMIPI4M 720 * 1280)" - + config DISPLAY_USING_RK055IQH091 bool "RK055IQH091-CTG (540 * 960)" - + config DISPLAY_USING_RK055MHD091 bool "RK055MHD091A0-CTG (RK055HDMIPI4MA0 720 * 1280)" endchoice @@ -258,10 +294,10 @@ menu "Onboard Peripheral Drivers" choice prompt "Select display controller" default BSP_USING_LCDIFV2 - + config BSP_USING_ELCDIF bool "ELCDIF" - + config BSP_USING_LCDIFV2 bool "LCDIFV2" endchoice diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/MCUX_Config/pin_mux.c b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/MCUX_Config/pin_mux.c index ff39c120f77..0996f1d63fc 100644 --- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/MCUX_Config/pin_mux.c +++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/MCUX_Config/pin_mux.c @@ -60,7 +60,7 @@ void BOARD_InitPins(void) { 0U); /* Software Input On Field: Input Path is determined by functionality */ IOMUXC_SetPinMux( IOMUXC_GPIO_AON_09_LPUART1_RX, /* GPIO_AON_09 is configured as LPUART1_RX */ - 0U); /* Software Input On Field: Input Path is determined by functionality */ + 1U); /* Software Input On Field: Force input path of pad GPIO_AON_09 */ IOMUXC_SetPinConfig( IOMUXC_GPIO_AON_08_LPUART1_TX, /* GPIO_AON_08 PAD functional properties : */ 0x02U); /* Slew Rate Field: Fast Slew Rate @@ -75,6 +75,25 @@ void BOARD_InitPins(void) { Pull / Keep Select Field: Pull Disable, Highz Pull Up / Down Config. Field: Weak pull down Open Drain Field: Disabled */ + + IOMUXC_SetPinMux( + IOMUXC_GPIO_AON_16_LPI2C2_SCL, /* GPIO_AON_16 is configured as LPI2C2_SCL */ + 0U); /* Software Input On Field: Input Path is determined by functionality */ + IOMUXC_SetPinMux( + IOMUXC_GPIO_AON_15_LPI2C2_SDA, /* GPIO_AON_15 is configured as LPI2C2_SDA */ + 0U); /* Software Input On Field: Input Path is determined by functionality */ + IOMUXC_SetPinConfig( + IOMUXC_GPIO_AON_16_LPI2C2_SCL, /* GPIO_AON_16 PAD functional properties : */ + 0x1DU); /* Slew Rate Field: Slow Slew Rate + Pull Enable Field: Pull Enable + Pull Up / Down Config. Field: Weak pull up + Open Drain Field: Enabled */ + IOMUXC_SetPinConfig( + IOMUXC_GPIO_AON_15_LPI2C2_SDA, /* GPIO_AON_15 PAD functional properties : */ + 0x1DU); /* Slew Rate Field: Slow Slew Rate + Pull Enable Field: Pull Enable + Pull Up / Down Config. Field: Weak pull up + Open Drain Field: Enabled */ } /*********************************************************************************************************************** diff --git a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/SConscript b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/SConscript index 81007a0eebc..754a74e939c 100644 --- a/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/SConscript +++ b/bsp/nxp/imx/imxrt/imxrt1180-nxp-evk/cm7/board/SConscript @@ -22,6 +22,10 @@ if rtconfig.PLATFORM in ['armcc', 'armclang']: if rtconfig.PLATFORM in ['iccarm']: CPPDEFINES += ['NDEBUG'] +if GetDepend(['BSP_USING_I2C']): + src += ['../packages/nxp-imxrt-sdk-latest/MIMXRT1180/MIMXRT1189/drivers/fsl_lpi2c.c'] + CPPPATH += [cwd + '/../packages/nxp-imxrt-sdk-latest/MIMXRT1180/MIMXRT1189/drivers'] + group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES=CPPDEFINES) Return('group') diff --git a/bsp/nxp/imx/imxrt/libraries/drivers/drv_i2c.c b/bsp/nxp/imx/imxrt/libraries/drivers/drv_i2c.c index 7210421c318..6108a775ae4 100644 --- a/bsp/nxp/imx/imxrt/libraries/drivers/drv_i2c.c +++ b/bsp/nxp/imx/imxrt/libraries/drivers/drv_i2c.c @@ -35,7 +35,7 @@ struct imxrt_i2c_bus volatile rt_uint32_t msg_ptr; volatile rt_uint32_t dptr; char *device_name; -#ifdef SOC_IMXRT1170_SERIES +#if defined(SOC_IMXRT1170_SERIES) || defined(SOC_IMXRT1180_SERIES) clock_root_t clock_root; #endif }; @@ -164,6 +164,9 @@ static rt_err_t imxrt_lpi2c_configure(struct imxrt_i2c_bus *bus, lpi2c_master_co CLOCK_SetRootClock(bus->clock_root, &rootCfg); volatile uint32_t freq = CLOCK_GetRootClockFreq(bus->clock_root); LPI2C_MasterInit(bus->I2C, cfg, freq); +#elif defined(SOC_IMXRT1180_SERIES) + volatile uint32_t freq = CLOCK_GetRootClockFreq(bus->clock_root); + LPI2C_MasterInit(bus->I2C, cfg, freq); #else CLOCK_SetMux(kCLOCK_Lpi2cMux, LPI2C_CLOCK_SOURCE_SELECT); CLOCK_SetDiv(kCLOCK_Lpi2cDiv, LPI2C_CLOCK_SOURCE_DIVIDER); @@ -298,16 +301,6 @@ static rt_ssize_t imxrt_i2c_mst_xfer(struct rt_i2c_bus_device *bus, } } - if (LPI2C_MasterStart(imxrt_i2c->I2C, imxrt_i2c->msg[i].addr, kLPI2C_Read) != kStatus_Success) - { - i = 0; - break; - } - - while (LPI2C_MasterGetStatusFlags(imxrt_i2c->I2C) & kLPI2C_MasterNackDetectFlag) - { - } - if (LPI2C_MasterReceive(imxrt_i2c->I2C, imxrt_i2c->msg[i].buf, imxrt_i2c->msg[i].len) != kStatus_Success) { i = 0; @@ -391,6 +384,11 @@ int rt_hw_i2c_init(void) #elif defined(HW_I2C1_BADURATE_100kHZ) masterConfig.baudRate_Hz = 100000U; #endif /*HW_I2C1_BADURATE_400kHZ*/ +#if defined(SOC_IMXRT1170_SERIES) + lpi2c1.clock_root = kCLOCK_Root_Lpi2c1; +#elif defined(SOC_IMXRT1180_SERIES) + lpi2c1.clock_root = kCLOCK_Root_Lpi2c0102; +#endif imxrt_lpi2c_configure(&lpi2c1, &masterConfig); rt_i2c_bus_device_register(&lpi2c1.parent, lpi2c1.device_name); #endif /* BSP_USING_I2C1 */ @@ -402,6 +400,11 @@ int rt_hw_i2c_init(void) #elif defined(HW_I2C2_BADURATE_100kHZ) masterConfig.baudRate_Hz = 100000U; #endif /* HW_I2C2_BADURATE_400kHZ */ +#if defined(SOC_IMXRT1170_SERIES) + lpi2c2.clock_root = kCLOCK_Root_Lpi2c2; +#elif defined(SOC_IMXRT1180_SERIES) + lpi2c2.clock_root = kCLOCK_Root_Lpi2c0102; +#endif imxrt_lpi2c_configure(&lpi2c2, &masterConfig); rt_i2c_bus_device_register(&lpi2c2.parent, lpi2c2.device_name); #endif /* BSP_USING_I2C2 */ @@ -415,6 +418,11 @@ int rt_hw_i2c_init(void) #elif defined(HW_I2C3_BADURATE_100kHZ) masterConfig.baudRate_Hz = 100000U; #endif /* HW_I2C3_BADURATE_400kHZ */ +#if defined(SOC_IMXRT1170_SERIES) + lpi2c3.clock_root = kCLOCK_Root_Lpi2c3; +#elif defined(SOC_IMXRT1180_SERIES) + lpi2c3.clock_root = kCLOCK_Root_Lpi2c0304; +#endif imxrt_lpi2c_configure(&lpi2c3, &masterConfig); rt_i2c_bus_device_register(&lpi2c3.parent, lpi2c3.device_name); #endif /* BSP_USING_I2C3 */ @@ -426,6 +434,11 @@ int rt_hw_i2c_init(void) #elif defined(HW_I2C4_BADURATE_100kHZ) masterConfig.baudRate_Hz = 100000U; #endif /* HW_I2C4_BADURATE_400kHZ */ +#if defined(SOC_IMXRT1170_SERIES) + lpi2c4.clock_root = kCLOCK_Root_Lpi2c4; +#elif defined(SOC_IMXRT1180_SERIES) + lpi2c4.clock_root = kCLOCK_Root_Lpi2c0304; +#endif imxrt_lpi2c_configure(&lpi2c4, &masterConfig); rt_i2c_bus_device_register(&lpi2c4.parent, lpi2c4.device_name); #endif /* BSP_USING_I2C4 */ @@ -437,7 +450,11 @@ int rt_hw_i2c_init(void) #elif defined(HW_I2C5_BADURATE_100kHZ) masterConfig.baudRate_Hz = 100000U; #endif /* HW_I2C5_BADURATE_400kHZ */ +#if defined(SOC_IMXRT1170_SERIES) lpi2c5.clock_root = kCLOCK_Root_Lpi2c5; +#elif defined(SOC_IMXRT1180_SERIES) + lpi2c5.clock_root = kCLOCK_Root_Lpi2c0506; +#endif imxrt_lpi2c_configure(&lpi2c5, &masterConfig); rt_i2c_bus_device_register(&lpi2c5.parent, lpi2c5.device_name); #endif /* BSP_USING_I2C5 */ @@ -449,7 +466,11 @@ int rt_hw_i2c_init(void) #elif defined(HW_I2C6_BADURATE_100kHZ) masterConfig.baudRate_Hz = 100000U; #endif /* HW_I2C6_BADURATE_400kHZ */ +#if defined(SOC_IMXRT1170_SERIES) lpi2c6.clock_root = kCLOCK_Root_Lpi2c6; +#elif defined(SOC_IMXRT1180_SERIES) + lpi2c6.clock_root = kCLOCK_Root_Lpi2c0506; +#endif imxrt_lpi2c_configure(&lpi2c6, &masterConfig); rt_i2c_bus_device_register(&lpi2c6.parent, lpi2c6.device_name); #endif /* BSP_USING_I2C6 */