Skip to content

Commit d519d21

Browse files
mcux: kw45 Soc and Board Support
Support for KW45 SoC Family and KW45B41Z-EVK Board. Co-authored-by: Mayank Mahajan <[email protected]> Signed-off-by: Sumit Batra <[email protected]>
1 parent 49ff7e3 commit d519d21

21 files changed

+327754
-420
lines changed

dts/nxp/mcx/MCXW716CMFTA-pinctrl.h

Lines changed: 214 additions & 215 deletions
Large diffs are not rendered by default.

mcux/CMakeLists.txt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@ else()
2424
endif()
2525

2626
zephyr_include_directories(mcux-sdk/devices/${MCUX_DEVICE_PATH})
27-
zephyr_include_directories(mcux-sdk/devices/${MCUX_DEVICE_PATH}/drivers)
27+
28+
if("${CONFIG_SOC_SERIES}" STREQUAL "kw45")
29+
zephyr_include_directories(mcux-sdk/devices/MCXW716C/drivers)
30+
else()
31+
zephyr_include_directories(mcux-sdk/devices/${MCUX_DEVICE_PATH}/drivers)
32+
endif()
2833

2934
#include device specific drivers
3035
if (${MCUX_DEVICE} MATCHES "MIMXRT1[0-9][0-9][0-9]")
@@ -46,7 +51,12 @@ zephyr_compile_definitions(${MCUX_CPU})
4651
# Build mcux device-specific objects. Although it is not normal
4752
# practice, drilling down like this avoids the need for repetitive
4853
# build scripts for every mcux device.
49-
zephyr_library_sources(mcux-sdk/devices/${MCUX_DEVICE_PATH}/drivers/fsl_clock.c)
54+
if("${CONFIG_SOC_SERIES}" STREQUAL "kw45")
55+
zephyr_library_sources(mcux-sdk/devices/MCXW716C/drivers/fsl_clock.c)
56+
else()
57+
zephyr_library_sources(mcux-sdk/devices/${MCUX_DEVICE_PATH}/drivers/fsl_clock.c)
58+
endif()
59+
5060
if (${MCUX_DEVICE} MATCHES "LPC|MIMXRT6|MIMXRT5|MIMXRT7|RW6|MCXN.4.")
5161
# fsl_power.c contains ARM specific symbols, which shouldn't be included for Xtensa cores
5262
if (NOT ${MCUX_DEVICE} MATCHES "_dsp|_hifi1|_hifi4")

mcux/hal_nxp.cmake

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ list(APPEND CMAKE_MODULE_PATH
1010
${CMAKE_CURRENT_LIST_DIR}/mcux-sdk/components/lists
1111
)
1212

13+
if("${CONFIG_SOC_SERIES}" STREQUAL "kw45")
14+
list(APPEND CMAKE_MODULE_PATH
15+
${CMAKE_CURRENT_LIST_DIR}/mcux-sdk/devices/MCXW716C/drivers)
16+
endif()
17+
1318
if(CONFIG_CPU_CORTEX_A)
1419
list(APPEND CMAKE_MODULE_PATH
1520
${CMAKE_CURRENT_LIST_DIR}/mcux-sdk/CMSIS/Core_AArch64/Include
@@ -281,6 +286,7 @@ include_driver_ifdef(CONFIG_DAI_NXP_MICFIL pdm driver_pdm)
281286
include_driver_ifdef(CONFIG_GLIKEY_MCUX_GLIKEY glikey driver_glikey)
282287
if(CONFIG_BT_NXP)
283288
include_driver_ifdef(CONFIG_SOC_SERIES_MCXW spc driver_spc)
289+
include_driver_ifdef(CONFIG_SOC_SERIES_KINETIS_KW45 spc driver_spc)
284290
endif()
285291

286292
if (${MCUX_DEVICE} MATCHES "MIMXRT1189")
@@ -334,7 +340,11 @@ endif()
334340

335341
if("${CONFIG_SOC_FAMILY}" STREQUAL "nxp_kinetis")
336342

337-
include_driver_ifdef(CONFIG_SOC_FLASH_MCUX flash driver_flash)
343+
if("${CONFIG_SOC_SERIES}" STREQUAL "kw45")
344+
include_driver_ifdef(CONFIG_SOC_FLASH_MCUX flash_k4 driver_flash_k4)
345+
else()
346+
include_driver_ifdef(CONFIG_SOC_FLASH_MCUX flash driver_flash)
347+
endif()
338348

339349
include(${CMAKE_CURRENT_LIST_DIR}/mcux-sdk/drivers/port/driver_port.cmake)
340350
zephyr_include_directories(${CMAKE_CURRENT_LIST_DIR}/mcux-sdk/drivers/port)
@@ -492,15 +502,15 @@ if(CONFIG_NXP_RF_IMU)
492502
${CMAKE_CURRENT_LIST_DIR}/mcux-sdk/drivers/gdma
493503
)
494504
include(component_wireless_imu_adapter)
495-
elseif(CONFIG_SOC_SERIES_MCXW)
505+
elseif(CONFIG_SOC_SERIES_MCXW OR CONFIG_SOC_SERIES_KINETIS_KW45)
496506
zephyr_include_directories(${CMAKE_CURRENT_LIST_DIR}/mcux-sdk/components/rpmsg)
497507
zephyr_library_sources(${CMAKE_CURRENT_LIST_DIR}/mcux-sdk/components/rpmsg/fsl_adapter_rpmsg.c)
498508
include(component_lists)
499509
zephyr_compile_definitions(HAL_RPMSG_SELECT_ROLE=0U)
500510
endif()
501511
endif()
502512

503-
if(${MCUX_DEVICE} MATCHES "MCXW")
513+
if(${MCUX_DEVICE} MATCHES "MCXW" OR ${MCUX_DEVICE} MATCHES "KW45")
504514
list(APPEND CMAKE_MODULE_PATH
505515
${CMAKE_CURRENT_LIST_DIR}/mcux-sdk/drivers/ccm32k
506516
)

mcux/mcux-sdk/boards/kw45b41zevk/board.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1+
// SPDX-License-Identifier: BSD-3-Clause
12
/*
2-
* Copyright 2021 NXP
3+
* Copyright 2021-2024 NXP
34
* All rights reserved.
4-
*
5-
* SPDX-License-Identifier: BSD-3-Clause
65
*/
76

87
#include <stdint.h>
@@ -20,9 +19,10 @@
2019
/* Initialize debug console. */
2120
void BOARD_InitDebugConsole(void)
2221
{
23-
uint32_t uartClkSrcFreq = BOARD_DEBUG_UART_CLK_FREQ;
22+
uint32_t uartClkSrcFreq = BOARD_DEBUG_UART_CLK_FREQ;
2423

25-
CLOCK_SetIpSrc(kCLOCK_Lpuart1, kCLOCK_IpSrcFro6M);
24+
CLOCK_SetIpSrc(kCLOCK_Lpuart1, kCLOCK_IpSrcFro6M);
2625

27-
DbgConsole_Init(BOARD_DEBUG_UART_INSTANCE, BOARD_DEBUG_UART_BAUDRATE, BOARD_DEBUG_UART_TYPE, uartClkSrcFreq);
26+
DbgConsole_Init(BOARD_DEBUG_UART_INSTANCE, BOARD_DEBUG_UART_BAUDRATE, BOARD_DEBUG_UART_TYPE,
27+
uartClkSrcFreq);
2828
}

mcux/mcux-sdk/boards/kw45b41zevk/board.h

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
/*
2-
* Copyright 2021-2022 NXP
1+
/* SPDX-License-Identifier: BSD-3-Clause
2+
* Copyright 2021-2024 NXP
33
* All rights reserved.
4-
*
5-
* SPDX-License-Identifier: BSD-3-Clause
64
*/
75

86
#ifndef _BOARD_H_
@@ -20,7 +18,7 @@
2018
/* The UART to use for debug messages. */
2119
#define BOARD_USE_LPUART
2220
#define BOARD_DEBUG_UART_TYPE kSerialPort_Uart
23-
#define BOARD_DEBUG_UART_BASEADDR (uint32_t) LPUART1
21+
#define BOARD_DEBUG_UART_BASEADDR ((uint32_t) LPUART1)
2422
#define BOARD_DEBUG_UART_INSTANCE 1U
2523
#define BOARD_DEBUG_UART_CLK_FREQ (CLOCK_GetFreq(kCLOCK_ScgSircClk))
2624

@@ -65,26 +63,38 @@
6563
#define BOARD_LED3_GPIO_PIN 21U
6664
#endif
6765

68-
#define LED1_INIT(output) \
69-
GPIO_PinWrite(BOARD_LED1_GPIO, BOARD_LED1_GPIO_PIN, output); \
70-
BOARD_LED1_GPIO->PDDR |= (1U << BOARD_LED1_GPIO_PIN) /*!< Enable target LED1 */
71-
#define LED1_ON() GPIO_PortSet(BOARD_LED1_GPIO, 1U << BOARD_LED1_GPIO_PIN) /*!< Turn on target LED1 */
72-
#define LED1_OFF() GPIO_PortClear(BOARD_LED1_GPIO, 1U << BOARD_LED1_GPIO_PIN) /*!< Turn off target LED1 */
73-
#define LED1_TOGGLE() GPIO_PortToggle(BOARD_LED1_GPIO, 1U << BOARD_LED1_GPIO_PIN) /*!< Toggle on target LED1 */
74-
75-
#define LED2_INIT(output) \
76-
GPIO_PinWrite(BOARD_LED2_GPIO, BOARD_LED2_GPIO_PIN, output); \
77-
BOARD_LED2_GPIO->PDDR |= (1U << BOARD_LED2_GPIO_PIN) /*!< Enable target LED2 */
78-
#define LED2_ON() GPIO_PortSet(BOARD_LED2_GPIO, 1U << BOARD_LED2_GPIO_PIN) /*!< Turn on target LED2 */
79-
#define LED2_OFF() GPIO_PortClear(BOARD_LED2_GPIO, 1U << BOARD_LED2_GPIO_PIN) /*!< Turn off target LED2 */
80-
#define LED2_TOGGLE() GPIO_PortToggle(BOARD_LED2_GPIO, 1U << BOARD_LED2_GPIO_PIN) /*!< Toggle on target LED2 */
81-
82-
#define LED3_INIT(output) \
83-
GPIO_PinWrite(BOARD_LED3_GPIO, BOARD_LED3_GPIO_PIN, output); \
84-
BOARD_LED3_GPIO->PDDR |= (1U << BOARD_LED3_GPIO_PIN) /*!< Enable target LED3 */
85-
#define LED3_ON() GPIO_PortSet(BOARD_LED3_GPIO, 1U << BOARD_LED3_GPIO_PIN) /*!< Turn on target LED3 */
86-
#define LED3_OFF() GPIO_PortClear(BOARD_LED3_GPIO, 1U << BOARD_LED3_GPIO_PIN) /*!< Turn off target LED3 */
87-
#define LED3_TOGGLE() GPIO_PortToggle(BOARD_LED3_GPIO, 1U << BOARD_LED3_GPIO_PIN) /*!< Toggle on target LED3 */
66+
#define LED1_INIT(output) do { \
67+
GPIO_PinWrite(BOARD_LED1_GPIO, BOARD_LED1_GPIO_PIN, output); \
68+
BOARD_LED1_GPIO->PDDR |= (1U << BOARD_LED1_GPIO_PIN); \
69+
} while (0) /*!< Enable target LED1 */
70+
#define LED1_ON() GPIO_PortSet(BOARD_LED1_GPIO, 1U << BOARD_LED1_GPIO_PIN)
71+
/*!< Turn on target LED1 */
72+
#define LED1_OFF() GPIO_PortClear(BOARD_LED1_GPIO, 1U << BOARD_LED1_GPIO_PIN)
73+
/*!< Turn off target LED1 */
74+
#define LED1_TOGGLE() GPIO_PortToggle(BOARD_LED1_GPIO, 1U << BOARD_LED1_GPIO_PIN)
75+
/*!< Toggle on target LED1 */
76+
77+
#define LED2_INIT(output) do { \
78+
GPIO_PinWrite(BOARD_LED2_GPIO, BOARD_LED2_GPIO_PIN, output); \
79+
BOARD_LED2_GPIO->PDDR |= (1U << BOARD_LED2_GPIO_PIN); \
80+
} while (0) /*!< Enable target LED2 */
81+
#define LED2_ON() GPIO_PortSet(BOARD_LED2_GPIO, 1U << BOARD_LED2_GPIO_PIN)
82+
/*!< Turn on target LED2 */
83+
#define LED2_OFF() GPIO_PortClear(BOARD_LED2_GPIO, 1U << BOARD_LED2_GPIO_PIN)
84+
/*!< Turn off target LED2 */
85+
#define LED2_TOGGLE() GPIO_PortToggle(BOARD_LED2_GPIO, 1U << BOARD_LED2_GPIO_PIN)
86+
/*!< Toggle on target LED2 */
87+
88+
#define LED3_INIT(output) do { \
89+
GPIO_PinWrite(BOARD_LED3_GPIO, BOARD_LED3_GPIO_PIN, output); \
90+
BOARD_LED3_GPIO->PDDR |= (1U << BOARD_LED3_GPIO_PIN); \
91+
} while (0) /*!< Enable target LED3 */
92+
#define LED3_ON() GPIO_PortSet(BOARD_LED3_GPIO, 1U << BOARD_LED3_GPIO_PIN)
93+
/*!< Turn on target LED3 */
94+
#define LED3_OFF() GPIO_PortClear(BOARD_LED3_GPIO, 1U << BOARD_LED3_GPIO_PIN)
95+
/*!< Turn off target LED3 */
96+
#define LED3_TOGGLE() GPIO_PortToggle(BOARD_LED3_GPIO, 1U << BOARD_LED3_GPIO_PIN)
97+
/*!< Toggle on target LED3 */
8898

8999
#define BOARD_SW2_NAME "SW2"
90100
#define BOARD_SW2_GPIO GPIOD

0 commit comments

Comments
 (0)