From e55f9f92c9cbd97cdbe5b53cd1ce11695bde7d63 Mon Sep 17 00:00:00 2001
From: Embedded_Projects <>
Date: Thu, 15 Feb 2024 02:08:10 +0000
Subject: [PATCH] Initial commit
---
.clang-format | 12 ++
.gitignore | 5 +
.gitmodules | 6 +
CMakeLists.txt | 172 +++++++++++++++++++++++
MCXA153.mex | 227 ++++++++++++++++++++++++++++++
arm-none-eabi.cmake | 17 +++
board/board.c | 33 +++++
board/board.h | 121 ++++++++++++++++
board/clock_config.c | 140 +++++++++++++++++++
board/clock_config.h | 60 ++++++++
board/peripherals.c | 94 +++++++++++++
board/peripherals.h | 33 +++++
board/pin_mux.c | 154 +++++++++++++++++++++
board/pin_mux.h | 75 ++++++++++
include/app_init.h | 9 ++
include/tx_user.h | 319 +++++++++++++++++++++++++++++++++++++++++++
src/app_init.c | 16 +++
src/main.c | 56 ++++++++
18 files changed, 1549 insertions(+)
create mode 100644 .clang-format
create mode 100644 .gitignore
create mode 100644 .gitmodules
create mode 100644 CMakeLists.txt
create mode 100644 MCXA153.mex
create mode 100644 arm-none-eabi.cmake
create mode 100644 board/board.c
create mode 100644 board/board.h
create mode 100644 board/clock_config.c
create mode 100644 board/clock_config.h
create mode 100644 board/peripherals.c
create mode 100644 board/peripherals.h
create mode 100644 board/pin_mux.c
create mode 100644 board/pin_mux.h
create mode 100644 include/app_init.h
create mode 100644 include/tx_user.h
create mode 100644 src/app_init.c
create mode 100644 src/main.c
diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..214adf0
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,12 @@
+BasedOnStyle: Google
+IndentWidth: 4
+AlignConsecutiveMacros: Consecutive
+AlignConsecutiveDeclarations: Consecutive
+AlignConsecutiveAssignments: Consecutive
+AllowShortFunctionsOnASingleLine: None
+BreakBeforeBraces: Custom
+BraceWrapping:
+ AfterEnum: false
+ AfterStruct: false
+ SplitEmptyFunction: false
+ColumnLimit: 120
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2da6168
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+/cmake-build-*
+/build
+/board/*.bak
+/.vscode
+
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..bfa4e73
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,6 @@
+[submodule "SDK"]
+ path = SDK
+ url = https://git.minori.work/Embedded_SDK/MCUXpresso_MCXA153.git
+[submodule "lib/threadx"]
+ path = lib/threadx
+ url = https://github.com/eclipse-threadx/threadx.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..beb61c7
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,172 @@
+cmake_minimum_required(VERSION 3.10)
+
+project(mcxa153_threadx)
+
+enable_language(CXX)
+enable_language(ASM)
+
+# Different linker scripts
+set(TARGET_LDSCRIPT_FLASH "${CMAKE_SOURCE_DIR}/SDK/devices/MCXA153/gcc/MCXA153_flash.ld")
+set(TARGET_LDSCRIPT_RAM "${CMAKE_SOURCE_DIR}/SDK/devices/MCXA153/gcc/MCXA153_ram.ld")
+
+set(TARGET_SOURCES
+ "SDK/components/serial_manager/fsl_component_serial_manager.c"
+ "SDK/components/serial_manager/fsl_component_serial_port_uart.c"
+ "SDK/components/uart/fsl_adapter_lpuart.c"
+ "SDK/devices/MCXA153/drivers/fsl_aoi.c"
+ "SDK/devices/MCXA153/drivers/fsl_cdog.c"
+ "SDK/devices/MCXA153/drivers/fsl_clock.c"
+ "SDK/devices/MCXA153/drivers/fsl_cmc.c"
+ "SDK/devices/MCXA153/drivers/fsl_common.c"
+ "SDK/devices/MCXA153/drivers/fsl_common_arm.c"
+ "SDK/devices/MCXA153/drivers/fsl_crc.c"
+ "SDK/devices/MCXA153/drivers/fsl_ctimer.c"
+ "SDK/devices/MCXA153/drivers/fsl_edma.c"
+ "SDK/devices/MCXA153/drivers/fsl_edma_soc.c"
+ "SDK/devices/MCXA153/drivers/fsl_eim.c"
+ "SDK/devices/MCXA153/drivers/fsl_eqdc.c"
+ "SDK/devices/MCXA153/drivers/fsl_erm.c"
+ "SDK/devices/MCXA153/drivers/fsl_freqme.c"
+ "SDK/devices/MCXA153/drivers/fsl_glikey.c"
+ "SDK/devices/MCXA153/drivers/fsl_gpio.c"
+ "SDK/devices/MCXA153/drivers/fsl_i3c.c"
+ "SDK/devices/MCXA153/drivers/fsl_i3c_edma.c"
+ "SDK/devices/MCXA153/drivers/fsl_inputmux.c"
+ "SDK/devices/MCXA153/drivers/fsl_lpadc.c"
+ "SDK/devices/MCXA153/drivers/fsl_lpcmp.c"
+ "SDK/devices/MCXA153/drivers/fsl_lpi2c.c"
+ "SDK/devices/MCXA153/drivers/fsl_lpi2c_edma.c"
+ "SDK/devices/MCXA153/drivers/fsl_lpspi.c"
+ "SDK/devices/MCXA153/drivers/fsl_lpspi_edma.c"
+ "SDK/devices/MCXA153/drivers/fsl_lptmr.c"
+ "SDK/devices/MCXA153/drivers/fsl_lpuart.c"
+ "SDK/devices/MCXA153/drivers/fsl_lpuart_edma.c"
+ "SDK/devices/MCXA153/drivers/fsl_ostimer.c"
+ "SDK/devices/MCXA153/drivers/fsl_pwm.c"
+ "SDK/devices/MCXA153/drivers/fsl_reset.c"
+ "SDK/devices/MCXA153/drivers/fsl_spc.c"
+ "SDK/devices/MCXA153/drivers/fsl_utick.c"
+ "SDK/devices/MCXA153/drivers/fsl_vbat.c"
+ "SDK/devices/MCXA153/drivers/fsl_waketimer.c"
+ "SDK/devices/MCXA153/drivers/fsl_wuu.c"
+ "SDK/devices/MCXA153/drivers/fsl_wwdt.c"
+ "SDK/devices/MCXA153/gcc/startup_MCXA153.S"
+ "SDK/devices/MCXA153/system_MCXA153.c"
+ "SDK/devices/MCXA153/utilities/debug_console/fsl_debug_console.c"
+ "SDK/devices/MCXA153/utilities/fsl_sbrk.c"
+ "SDK/devices/MCXA153/utilities/str/fsl_str.c"
+ "board/board.c"
+ "board/clock_config.c"
+ "board/peripherals.c"
+ "board/pin_mux.c"
+ "src/app_init.c"
+ "src/main.c"
+)
+
+set(TARGET_C_DEFINES
+ "CPU_MCXA153VLH"
+ "MCUXPRESSO_SDK"
+ "SERIAL_PORT_TYPE_UART=1"
+ "SDK_DEBUGCONSOLE_UART=1"
+ "__STARTUP_CLEAR_BSS"
+)
+
+set(TARGET_C_INCLUDES
+ "SDK/CMSIS/Core/Include"
+ "SDK/components/serial_manager"
+ "SDK/components/uart"
+ "SDK/devices/MCXA153"
+ "SDK/devices/MCXA153/drivers"
+ "SDK/devices/MCXA153/utilities/debug_console"
+ "SDK/devices/MCXA153/utilities/str"
+ "board"
+ "include"
+)
+
+# Shared libraries linked with application
+set(TARGET_LIBS
+ "threadx"
+ "c"
+ "m"
+ "nosys"
+)
+
+# Shared library and linker script search paths
+set(TARGET_LIB_DIRECTORIES
+)
+
+# Conditional flags
+# DEBUG
+set(CMAKE_C_FLAGS_DEBUG "-DDEBUG -O0 -g")
+set(CMAKE_CXX_FLAGS_DEBUG "-DDEBUG -O0 -g")
+set(CMAKE_ASM_FLAGS_DEBUG "-DDEBUG -O0 -g")
+
+# RELEASE
+set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG -O2")
+set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -O2")
+set(CMAKE_ASM_FLAGS_RELEASE "-DNDEBUG -O2")
+set(CMAKE_EXE_LINKER_FLAGS_RELEASE "")
+
+# Final compiler flags
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fno-common -fno-builtin -ffreestanding -fdata-sections -ffunction-sections")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fno-common -fno-builtin -ffreestanding -fdata-sections -ffunction-sections")
+set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -x assembler-with-cpp")
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections")
+
+set(THREADX_ARCH "cortex_m33" CACHE STRING "")
+set(THREADX_TOOLCHAIN "gnu" CACHE STRING "")
+set(TX_USER_FILE "${CMAKE_CURRENT_SOURCE_DIR}/include/tx_user.h" CACHE STRING "")
+add_subdirectory(lib/threadx)
+
+# Shared sources, includes and definitions
+add_compile_definitions(${TARGET_C_DEFINES})
+include_directories(${TARGET_C_INCLUDES})
+link_directories(${TARGET_LIB_DIRECTORIES})
+link_libraries(${TARGET_LIBS})
+
+# Main targets are added here
+
+# Create ELF
+add_executable("${CMAKE_PROJECT_NAME}_FLASH.elf" ${TARGET_SOURCES})
+target_compile_definitions("${CMAKE_PROJECT_NAME}_FLASH.elf"
+ PRIVATE ${TARGET_C_DEFINES_XIP}
+ )
+target_link_options("${CMAKE_PROJECT_NAME}_FLASH.elf"
+ PRIVATE "-T${TARGET_LDSCRIPT_FLASH}"
+ PRIVATE "-Wl,--Map=${CMAKE_PROJECT_NAME}_FLASH.map"
+ )
+set_property(TARGET "${CMAKE_PROJECT_NAME}_FLASH.elf" APPEND
+ PROPERTY ADDITIONAL_CLEAN_FILES "${CMAKE_PROJECT_NAME}_FLASH.map"
+ )
+add_custom_command(OUTPUT "${CMAKE_PROJECT_NAME}_FLASH.hex"
+ COMMAND ${CMAKE_OBJCOPY} "-O" "ihex" "${CMAKE_PROJECT_NAME}_FLASH.elf" "${CMAKE_PROJECT_NAME}_FLASH.hex"
+ DEPENDS "${CMAKE_PROJECT_NAME}_FLASH.elf"
+ )
+add_custom_target("${CMAKE_PROJECT_NAME}_FLASH_HEX" DEPENDS "${CMAKE_PROJECT_NAME}_FLASH.hex")
+if(DEFINED TARGET_TOOLCHAIN_SIZE)
+ add_custom_command(TARGET "${CMAKE_PROJECT_NAME}_FLASH.elf" POST_BUILD
+ COMMAND ${TARGET_TOOLCHAIN_SIZE} "${CMAKE_PROJECT_NAME}_FLASH.elf"
+ )
+endif()
+
+
+# Create ELF
+add_executable("${CMAKE_PROJECT_NAME}_RAM.elf" ${TARGET_SOURCES})
+target_link_options("${CMAKE_PROJECT_NAME}_RAM.elf"
+ PRIVATE "-T${TARGET_LDSCRIPT_RAM}"
+ PRIVATE "-Wl,--Map=${CMAKE_PROJECT_NAME}_RAM.map"
+ )
+set_property(TARGET "${CMAKE_PROJECT_NAME}_RAM.elf" APPEND
+ PROPERTY ADDITIONAL_CLEAN_FILES "${CMAKE_PROJECT_NAME}_RAM.map"
+ )
+add_custom_command(OUTPUT "${CMAKE_PROJECT_NAME}_RAM.hex"
+ COMMAND ${CMAKE_OBJCOPY} "-O" "ihex" "${CMAKE_PROJECT_NAME}_RAM.elf" "${CMAKE_PROJECT_NAME}_RAM.hex"
+ DEPENDS "${CMAKE_PROJECT_NAME}_RAM.elf"
+ )
+add_custom_target("${CMAKE_PROJECT_NAME}_RAM_HEX" DEPENDS "${CMAKE_PROJECT_NAME}_RAM.hex")
+if(DEFINED TARGET_TOOLCHAIN_SIZE)
+ add_custom_command(TARGET "${CMAKE_PROJECT_NAME}_RAM.elf" POST_BUILD
+ COMMAND ${TARGET_TOOLCHAIN_SIZE} "${CMAKE_PROJECT_NAME}_RAM.elf"
+ )
+endif()
+
diff --git a/MCXA153.mex b/MCXA153.mex
new file mode 100644
index 0000000..162d8cc
--- /dev/null
+++ b/MCXA153.mex
@@ -0,0 +1,227 @@
+
+
+
+ MCXA153
+ MCXA153VLH
+ ksdk2_0
+
+
+
+
+
+
+ true
+ false
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+ 15.0.0
+
+
+
+
+
+
+ Configures pin routing and optionally pin electrical features.
+
+ true
+ cm33_core0
+ true
+
+
+
+
+ true
+
+
+
+
+
+
+ Configures pin routing and optionally pin electrical features.
+
+ true
+ cm33_core0
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Configures pin routing and optionally pin electrical features.
+
+ true
+ cm33_core0
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 15.0.0
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+ N/A
+
+
+
+
+
+
+
+
+
+ 15.0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ N/A
+
+
+
+
\ No newline at end of file
diff --git a/arm-none-eabi.cmake b/arm-none-eabi.cmake
new file mode 100644
index 0000000..78a09c7
--- /dev/null
+++ b/arm-none-eabi.cmake
@@ -0,0 +1,17 @@
+# Poor old Windows...
+if(WIN32)
+ set(CMAKE_SYSTEM_NAME "Generic")
+endif()
+
+set(CMAKE_C_COMPILER arm-none-eabi-gcc)
+set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
+
+# Optionally set size binary name, for elf section size reporting.
+set(TARGET_TOOLCHAIN_SIZE arm-none-eabi-size)
+
+set(CMAKE_C_FLAGS_INIT "-mcpu=cortex-m33+nodsp -mthumb -mfloat-abi=soft")
+set(CMAKE_CXX_FLAGS_INIT "-mcpu=cortex-m33+nodsp -mthumb -mfloat-abi=soft")
+set(CMAKE_EXE_LINKER_FLAGS_INIT "-specs=nano.specs -specs=nosys.specs -Wl,--print-memory-usage -Wl,--no-warn-rwx-segments")
+
+# Make CMake happy about those compilers
+set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
diff --git a/board/board.c b/board/board.c
new file mode 100644
index 0000000..6475fa9
--- /dev/null
+++ b/board/board.c
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2023 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include
+#include "fsl_common.h"
+#include "fsl_debug_console.h"
+#include "pin_mux.h"
+#include "board.h"
+
+/*******************************************************************************
+ * Variables
+ ******************************************************************************/
+
+/*******************************************************************************
+ * Code
+ ******************************************************************************/
+
+/* Initialize debug console. */
+void BOARD_InitDebugConsole(void)
+{
+ /* attach 12 MHz clock to LPUART0 (debug console) */
+ CLOCK_SetClockDiv(kCLOCK_DivLPUART0, 1u);
+ CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
+
+ RESET_PeripheralReset(BOARD_DEBUG_UART_RST);
+
+ DbgConsole_Init(BOARD_DEBUG_UART_INSTANCE, BOARD_DEBUG_UART_BAUDRATE, BOARD_DEBUG_UART_TYPE,
+ BOARD_DEBUG_UART_CLK_FREQ);
+}
diff --git a/board/board.h b/board/board.h
new file mode 100644
index 0000000..874ed36
--- /dev/null
+++ b/board/board.h
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2023 NXP
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _BOARD_H_
+#define _BOARD_H_
+
+#include "clock_config.h"
+#include "fsl_gpio.h"
+#include "fsl_common.h"
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+/*! @brief The board name */
+#define BOARD_NAME "FRDM-MCXA153"
+/*! @brief The manufacturer name */
+#define MANUFACTURER_NAME "NXP"
+
+/*! @brief The UART to use for debug messages. */
+#define BOARD_DEBUG_UART_TYPE kSerialPort_Uart
+#define BOARD_DEBUG_UART_CLK_FREQ 12000000U
+
+#ifndef BOARD_DEBUG_UART_BAUDRATE
+#define BOARD_DEBUG_UART_BAUDRATE 115200U
+#endif
+
+#define BOARD_DEBUG_UART_BASEADDR (uint32_t) LPUART0
+#define BOARD_DEBUG_UART_INSTANCE 0U
+#define BOARD_DEBUG_UART_CLK_ATTACH kFRO12M_to_LPUART0
+#define BOARD_DEBUG_UART_RST kLPUART0_RST_SHIFT_RSTn
+#define BOARD_DEBUG_UART_CLKSRC kCLOCK_LPUART0
+#define BOARD_UART_IRQ_HANDLER LPUART0_IRQHandler
+#define BOARD_UART_IRQ LPUART0_IRQn
+
+/*! @brief GPIO for LED. */
+#ifndef BOARD_LED_RED_GPIO
+#define BOARD_LED_RED_GPIO GPIO3
+#endif
+#ifndef BOARD_LED_RED_GPIO_PIN
+#define BOARD_LED_RED_GPIO_PIN 12U
+#endif
+
+#ifndef BOARD_LED_GREEN_GPIO
+#define BOARD_LED_GREEN_GPIO GPIO3
+#endif
+#ifndef BOARD_LED_GREEN_GPIO_PIN
+#define BOARD_LED_GREEN_GPIO_PIN 13U
+#endif
+
+#ifndef BOARD_LED_BLUE_GPIO
+#define BOARD_LED_BLUE_GPIO GPIO3
+#endif
+#ifndef BOARD_LED_BLUE_GPIO_PIN
+#define BOARD_LED_BLUE_GPIO_PIN 0U
+#endif
+
+/*! @brief GPIO for SW. */
+#ifndef BOARD_SW2_GPIO
+#define BOARD_SW2_GPIO GPIO3
+#endif
+#ifndef BOARD_SW2_GPIO_PIN
+#define BOARD_SW2_GPIO_PIN 29U
+#endif
+#define BOARD_SW2_NAME "SW2"
+#define BOARD_SW2_IRQ GPIO3_IRQn
+#define BOARD_SW2_IRQ_HANDLER GPIO3_IRQHandler
+
+#ifndef BOARD_SW3_GPIO
+#define BOARD_SW3_GPIO GPIO1
+#endif
+#ifndef BOARD_SW3_GPIO_PIN
+#define BOARD_SW3_GPIO_PIN 7U
+#endif
+#define BOARD_SW3_NAME "SW3"
+#define BOARD_SW3_IRQ GPIO1_IRQn
+#define BOARD_SW3_IRQ_HANDLER GPIO1_IRQHandler
+
+/* Board LED color mapping */
+#define LOGIC_LED_ON 0U
+#define LOGIC_LED_OFF 1U
+
+#define LED_RED_INIT(output) \
+ GPIO_PinWrite(BOARD_LED_RED_GPIO, BOARD_LED_RED_GPIO_PIN, output); \
+ BOARD_LED_RED_GPIO->PDDR |= (1U << BOARD_LED_RED_GPIO_PIN) /*!< Enable target LED_RED */
+#define LED_RED_ON() \
+ GPIO_PinWrite(BOARD_LED_RED_GPIO, BOARD_LED_RED_GPIO_PIN, LOGIC_LED_ON) /*!< Turn on target LED_RED */
+#define LED_RED_OFF() \
+ GPIO_PinWrite(BOARD_LED_RED_GPIO, BOARD_LED_RED_GPIO_PIN, LOGIC_LED_OFF) /*!< Turn off target LED_RED */
+#define LED_RED_TOGGLE() \
+ GPIO_PortToggle(BOARD_LED_RED_GPIO, 1U << BOARD_LED_RED_GPIO_PIN) /*!< Toggle on target LED_RED */
+
+#define LED_GREEN_INIT(output) \
+ GPIO_PinWrite(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PIN, output); \
+ BOARD_LED_GREEN_GPIO->PDDR |= (1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Enable target LED_GREEN */
+#define LED_GREEN_ON() \
+ GPIO_PinWrite(BOARD_LED_RED_GPIO, BOARD_LED_GREEN_GPIO_PIN, LOGIC_LED_ON) /*!< Turn on target LED_GREEN */
+#define LED_GREEN_OFF() \
+ GPIO_PinWrite(BOARD_LED_RED_GPIO, BOARD_LED_GREEN_GPIO_PIN, LOGIC_LED_OFF) /*!< Turn off target LED_GREEN */
+#define LED_GREEN_TOGGLE() \
+ GPIO_PortToggle(BOARD_LED_GREEN_GPIO, 1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Toggle on target LED_GREEN */
+
+#define LED_BLUE_INIT(output) \
+ GPIO_PinWrite(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PIN, output); \
+ BOARD_LED_BLUE_GPIO->PDDR |= (1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Enable target LED_BLUE */
+#define LED_BLUE_ON() \
+ GPIO_PinWrite(BOARD_LED_RED_GPIO, BOARD_LED_BLUE_GPIO_PIN, LOGIC_LED_ON) /*!< Turn on target LED_BLUE */
+#define LED_BLUE_OFF() \
+ GPIO_PinWrite(BOARD_LED_RED_GPIO, BOARD_LED_BLUE_GPIO_PIN, LOGIC_LED_OFF) /*!< Turn off target LED_BLUE */
+#define LED_BLUE_TOGGLE() \
+ GPIO_PortToggle(BOARD_LED_BLUE_GPIO, 1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Toggle on target LED_BLUE */
+
+/*******************************************************************************
+ * API
+ ******************************************************************************/
+void BOARD_InitDebugConsole(void);
+
+#endif /* _BOARD_H_ */
diff --git a/board/clock_config.c b/board/clock_config.c
new file mode 100644
index 0000000..7489044
--- /dev/null
+++ b/board/clock_config.c
@@ -0,0 +1,140 @@
+/***********************************************************************************************************************
+ * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
+ * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
+ **********************************************************************************************************************/
+/*
+ * How to setup clock using clock driver functions:
+ *
+ * 1. Setup clock sources.
+ *
+ * 2. Set up wait states of the flash.
+ *
+ * 3. Set up all dividers.
+ *
+ * 4. Set up all selectors to provide selected clocks.
+ *
+ */
+
+/* clang-format off */
+/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
+!!GlobalInfo
+product: Clocks v13.0
+processor: MCXA153
+package_id: MCXA153VLH
+mcu_data: ksdk2_0
+processor_version: 15.0.0
+ * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
+/* clang-format on */
+
+#include "fsl_clock.h"
+#include "clock_config.h"
+#include "fsl_spc.h"
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+
+/*******************************************************************************
+ * Variables
+ ******************************************************************************/
+/* System clock frequency. */
+extern uint32_t SystemCoreClock;
+
+/*******************************************************************************
+ ************************ BOARD_InitBootClocks function ************************
+ ******************************************************************************/
+void BOARD_InitBootClocks(void)
+{
+ BOARD_BootClockRUN();
+}
+
+/*******************************************************************************
+ ********************** Configuration BOARD_BootClockRUN ***********************
+ ******************************************************************************/
+/* clang-format off */
+/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
+!!Configuration
+name: BOARD_BootClockRUN
+called_from_default_init: true
+outputs:
+- {id: CLK_1M_clock.outFreq, value: 1 MHz}
+- {id: CLK_48M_clock.outFreq, value: 48 MHz}
+- {id: CPU_clock.outFreq, value: 48 MHz}
+- {id: FREQME_reference_clock.outFreq, value: 12 MHz}
+- {id: FREQME_target_clock.outFreq, value: 12 MHz}
+- {id: FRO_12M_clock.outFreq, value: 12 MHz}
+- {id: FRO_HF_DIV_clock.outFreq, value: 48 MHz}
+- {id: FRO_HF_clock.outFreq, value: 48 MHz}
+- {id: MAIN_clock.outFreq, value: 48 MHz}
+- {id: OSTIMER_clock.outFreq, value: 1 MHz}
+- {id: Slow_clock.outFreq, value: 12 MHz}
+- {id: System_clock.outFreq, value: 48 MHz}
+- {id: UTICK_clock.outFreq, value: 1 MHz}
+ * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
+/* clang-format on */
+
+/*******************************************************************************
+ * Variables for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+/*******************************************************************************
+ * Code for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+void BOARD_BootClockRUN(void)
+{
+ uint32_t coreFreq;
+ spc_active_mode_core_ldo_option_t ldoOption;
+ spc_sram_voltage_config_t sramOption;
+
+ /* Get the CPU Core frequency */
+ coreFreq = CLOCK_GetCoreSysClkFreq();
+
+ /* The flow of increasing voltage and frequency */
+ if (coreFreq <= BOARD_BOOTCLOCKRUN_CORE_CLOCK) {
+ /* Set the LDO_CORE VDD regulator level */
+ ldoOption.CoreLDOVoltage = kSPC_CoreLDO_MidDriveVoltage;
+ ldoOption.CoreLDODriveStrength = kSPC_CoreLDO_NormalDriveStrength;
+ (void)SPC_SetActiveModeCoreLDORegulatorConfig(SPC0, &ldoOption);
+ /* Configure Flash to support different voltage level and frequency */
+ FMU0->FCTRL = (FMU0->FCTRL & ~((uint32_t)FMU_FCTRL_RWSC_MASK)) | (FMU_FCTRL_RWSC(0x1U));
+ /* Specifies the operating voltage for the SRAM's read/write timing margin */
+ sramOption.operateVoltage = kSPC_sramOperateAt1P0V;
+ sramOption.requestVoltageUpdate = true;
+ (void)SPC_SetSRAMOperateVoltage(SPC0, &sramOption);
+ }
+
+ CLOCK_SetupFROHFClocking(48000000U); /*!< Enable FRO HF(48MHz) output */
+
+ CLOCK_SetupFRO12MClocking(); /*!< Setup FRO12M clock */
+
+ CLOCK_AttachClk(kFRO_HF_to_MAIN_CLK); /* !< Switch MAIN_CLK to FRO_HF */
+
+ /* The flow of decreasing voltage and frequency */
+ if (coreFreq > BOARD_BOOTCLOCKRUN_CORE_CLOCK) {
+ /* Configure Flash to support different voltage level and frequency */
+ FMU0->FCTRL = (FMU0->FCTRL & ~((uint32_t)FMU_FCTRL_RWSC_MASK)) | (FMU_FCTRL_RWSC(0x1U));
+ /* Specifies the operating voltage for the SRAM's read/write timing margin */
+ sramOption.operateVoltage = kSPC_sramOperateAt1P0V;
+ sramOption.requestVoltageUpdate = true;
+ (void)SPC_SetSRAMOperateVoltage(SPC0, &sramOption);
+ /* Set the LDO_CORE VDD regulator level */
+ ldoOption.CoreLDOVoltage = kSPC_CoreLDO_MidDriveVoltage;
+ ldoOption.CoreLDODriveStrength = kSPC_CoreLDO_NormalDriveStrength;
+ (void)SPC_SetActiveModeCoreLDORegulatorConfig(SPC0, &ldoOption);
+ }
+
+ /*!< Set up clock selectors - Attach clocks to the peripheries */
+ CLOCK_AttachClk(kCLK_1M_to_OSTIMER); /* !< Switch OSTIMER to CLK_1M */
+
+ /* Configure FREQME clock */
+ CLOCK_EnableClock(kCLOCK_InputMux);
+ RESET_PeripheralReset(kINPUTMUX0_RST_SHIFT_RSTn);
+ INPUTMUX0->FREQMEAS_REF = INPUTMUX_FREQMEAS_REF_INP(2);
+ INPUTMUX0->FREQMEAS_TAR = INPUTMUX_FREQMEAS_TAR_INP(2);
+
+ /*!< Set up dividers */
+ CLOCK_SetClockDiv(kCLOCK_DivAHBCLK, 1U); /* !< Set AHBCLKDIV divider to value 1 */
+ CLOCK_SetClockDiv(kCLOCK_DivFRO_HF_DIV, 1U); /* !< Set FROHFDIV divider to value 1 */
+
+ /* Set SystemCoreClock variable */
+ SystemCoreClock = BOARD_BOOTCLOCKRUN_CORE_CLOCK;
+}
diff --git a/board/clock_config.h b/board/clock_config.h
new file mode 100644
index 0000000..ef40901
--- /dev/null
+++ b/board/clock_config.h
@@ -0,0 +1,60 @@
+/***********************************************************************************************************************
+ * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
+ * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
+ **********************************************************************************************************************/
+
+#ifndef _CLOCK_CONFIG_H_
+#define _CLOCK_CONFIG_H_
+
+#include "fsl_common.h"
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+
+/*******************************************************************************
+ ************************ BOARD_InitBootClocks function ************************
+ ******************************************************************************/
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus*/
+
+/*!
+ * @brief This function executes default configuration of clocks.
+ *
+ */
+void BOARD_InitBootClocks(void);
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus*/
+
+/*******************************************************************************
+ ********************** Configuration BOARD_BootClockRUN ***********************
+ ******************************************************************************/
+/*******************************************************************************
+ * Definitions for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+#define BOARD_BOOTCLOCKRUN_CORE_CLOCK 48000000U /*!< Core clock frequency: 48000000Hz */
+
+
+/*******************************************************************************
+ * API for BOARD_BootClockRUN configuration
+ ******************************************************************************/
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus*/
+
+/*!
+ * @brief This function executes configuration of clocks.
+ *
+ */
+void BOARD_BootClockRUN(void);
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus*/
+
+#endif /* _CLOCK_CONFIG_H_ */
+
diff --git a/board/peripherals.c b/board/peripherals.c
new file mode 100644
index 0000000..7b586a6
--- /dev/null
+++ b/board/peripherals.c
@@ -0,0 +1,94 @@
+/***********************************************************************************************************************
+ * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
+ * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
+ **********************************************************************************************************************/
+
+/* clang-format off */
+/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
+!!GlobalInfo
+product: Peripherals v14.0
+processor: MCXA153
+package_id: MCXA153VLH
+mcu_data: ksdk2_0
+processor_version: 15.0.0
+functionalGroups:
+- name: BOARD_InitPeripherals
+ UUID: 314ed5fb-d446-4fc2-a5e5-ba80abad2026
+ called_from_default_init: true
+ selectedCore: cm33_core0
+ * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
+
+/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
+component:
+- type: 'system'
+- type_id: 'system_54b53072540eeeb8f8e9343e71f28176'
+- global_system_definitions:
+ - user_definitions: ''
+ - user_includes: ''
+ - global_init: ''
+ * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
+
+/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
+component:
+- type: 'gpio_adapter_common'
+- type_id: 'gpio_adapter_common_57579b9ac814fe26bf95df0a384c36b6'
+- global_gpio_adapter_common:
+ - quick_selection: 'default'
+ * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
+
+/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
+component:
+- type: 'uart_cmsis_common'
+- type_id: 'uart_cmsis_common_9cb8e302497aa696fdbb5a4fd622c2a8'
+- global_USART_CMSIS_common:
+ - quick_selection: 'default'
+ * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
+/* clang-format on */
+
+/***********************************************************************************************************************
+ * Included files
+ **********************************************************************************************************************/
+#include "peripherals.h"
+
+/***********************************************************************************************************************
+ * BOARD_InitPeripherals functional group
+ **********************************************************************************************************************/
+/***********************************************************************************************************************
+ * NVIC initialization code
+ **********************************************************************************************************************/
+/* clang-format off */
+/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
+instance:
+- name: 'NVIC'
+- type: 'nvic'
+- mode: 'general'
+- custom_name_enabled: 'false'
+- type_id: 'nvic_57b5eef3774cc60acaede6f5b8bddc67'
+- functional_group: 'BOARD_InitPeripherals'
+- peripheral: 'NVIC'
+- config_sets:
+ - nvic:
+ - interrupt_table: []
+ - interrupts: []
+ * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
+/* clang-format on */
+
+/* Empty initialization function (commented out)
+static void NVIC_init(void) {
+} */
+
+/***********************************************************************************************************************
+ * Initialization functions
+ **********************************************************************************************************************/
+void BOARD_InitPeripherals(void)
+{
+ /* Initialize components */
+}
+
+/***********************************************************************************************************************
+ * BOARD_InitBootPeripherals function
+ **********************************************************************************************************************/
+void BOARD_InitBootPeripherals(void)
+{
+ BOARD_InitPeripherals();
+}
diff --git a/board/peripherals.h b/board/peripherals.h
new file mode 100644
index 0000000..2a75809
--- /dev/null
+++ b/board/peripherals.h
@@ -0,0 +1,33 @@
+/***********************************************************************************************************************
+ * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
+ * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
+ **********************************************************************************************************************/
+
+#ifndef _PERIPHERALS_H_
+#define _PERIPHERALS_H_
+
+/***********************************************************************************************************************
+ * Included files
+ **********************************************************************************************************************/
+#include "fsl_common.h"
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus */
+
+/***********************************************************************************************************************
+ * Initialization functions
+ **********************************************************************************************************************/
+
+void BOARD_InitPeripherals(void);
+
+/***********************************************************************************************************************
+ * BOARD_InitBootPeripherals function
+ **********************************************************************************************************************/
+void BOARD_InitBootPeripherals(void);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* _PERIPHERALS_H_ */
diff --git a/board/pin_mux.c b/board/pin_mux.c
new file mode 100644
index 0000000..0f9104a
--- /dev/null
+++ b/board/pin_mux.c
@@ -0,0 +1,154 @@
+/***********************************************************************************************************************
+ * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
+ * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
+ **********************************************************************************************************************/
+
+/* clang-format off */
+/*
+ * TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
+!!GlobalInfo
+product: Pins v15.0
+processor: MCXA153
+package_id: MCXA153VLH
+mcu_data: ksdk2_0
+processor_version: 15.0.0
+pin_labels:
+- {pin_num: '38', pin_signal: P3_12/LPUART2_RTS_B/CT1_MAT2/PWM0_X0, label: LED_R, identifier: LED_R}
+ * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
+ */
+/* clang-format on */
+
+#include "fsl_common.h"
+#include "fsl_port.h"
+#include "fsl_gpio.h"
+#include "pin_mux.h"
+
+/* FUNCTION ************************************************************************************************************
+ *
+ * Function Name : BOARD_InitBootPins
+ * Description : Calls initialization functions.
+ *
+ * END ****************************************************************************************************************/
+void BOARD_InitBootPins(void)
+{
+ BOARD_InitPins();
+ BOARD_InitLEDPins();
+ BOARD_InitDbgUARTPins();
+}
+
+/* clang-format off */
+/*
+ * TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
+BOARD_InitPins:
+- options: {callFromInitBoot: 'true', coreID: cm33_core0, enableClock: 'true'}
+- pin_list: []
+ * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
+ */
+/* clang-format on */
+
+/* FUNCTION ************************************************************************************************************
+ *
+ * Function Name : BOARD_InitPins
+ * Description : Configures pin routing and optionally pin electrical features.
+ *
+ * END ****************************************************************************************************************/
+void BOARD_InitPins(void)
+{
+}
+
+/* clang-format off */
+/*
+ * TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
+BOARD_InitLEDPins:
+- options: {callFromInitBoot: 'true', coreID: cm33_core0, enableClock: 'true'}
+- pin_list:
+ - {pin_num: '38', peripheral: GPIO3, signal: 'GPIO, 12', pin_signal: P3_12/LPUART2_RTS_B/CT1_MAT2/PWM0_X0, direction: OUTPUT, gpio_init_state: 'true'}
+ * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
+ */
+/* clang-format on */
+
+/* FUNCTION ************************************************************************************************************
+ *
+ * Function Name : BOARD_InitLEDPins
+ * Description : Configures pin routing and optionally pin electrical features.
+ *
+ * END ****************************************************************************************************************/
+void BOARD_InitLEDPins(void)
+{
+ /* Write to GPIO3: Peripheral clock is enabled */
+ CLOCK_EnableClock(kCLOCK_GateGPIO3);
+ /* Write to PORT3: Peripheral clock is enabled */
+ CLOCK_EnableClock(kCLOCK_GatePORT3);
+ /* GPIO3 peripheral is released from reset */
+ RESET_ReleasePeripheralReset(kGPIO3_RST_SHIFT_RSTn);
+ /* PORT3 peripheral is released from reset */
+ RESET_ReleasePeripheralReset(kPORT3_RST_SHIFT_RSTn);
+
+ gpio_pin_config_t LED_R_config = {
+ .pinDirection = kGPIO_DigitalOutput,
+ .outputLogic = 1U
+ };
+ /* Initialize GPIO functionality on pin PIO3_12 (pin 38) */
+ GPIO_PinInit(BOARD_INITLEDPINS_LED_R_GPIO, BOARD_INITLEDPINS_LED_R_PIN, &LED_R_config);
+
+ /* PORT3_12 (pin 38) is configured as P3_12 */
+ PORT_SetPinMux(BOARD_INITLEDPINS_LED_R_PORT, BOARD_INITLEDPINS_LED_R_PIN, kPORT_MuxAlt0);
+
+ PORT3->PCR[12] = ((PORT3->PCR[12] &
+ /* Mask bits to zero which are setting */
+ (~(PORT_PCR_IBE_MASK)))
+
+ /* Input Buffer Enable: Enables. */
+ | PORT_PCR_IBE(PCR_IBE_ibe1));
+}
+
+/* clang-format off */
+/*
+ * TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
+BOARD_InitDbgUARTPins:
+- options: {callFromInitBoot: 'true', coreID: cm33_core0, enableClock: 'true'}
+- pin_list:
+ - {pin_num: '51', peripheral: LPUART0, signal: RX, pin_signal: P0_2/TDO/SWO/LPUART0_RXD/LPSPI0_SCK/CT0_MAT0/UTICK_CAP0/I3C0_PUR}
+ - {pin_num: '52', peripheral: LPUART0, signal: TX, pin_signal: P0_3/TDI/LPUART0_TXD/LPSPI0_SDO/CT0_MAT1/UTICK_CAP1/CMP0_OUT/CMP1_IN1}
+ * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
+ */
+/* clang-format on */
+
+/* FUNCTION ************************************************************************************************************
+ *
+ * Function Name : BOARD_InitDbgUARTPins
+ * Description : Configures pin routing and optionally pin electrical features.
+ *
+ * END ****************************************************************************************************************/
+void BOARD_InitDbgUARTPins(void)
+{
+ /* Write to PORT0: Peripheral clock is enabled */
+ CLOCK_EnableClock(kCLOCK_GatePORT0);
+ /* LPUART0 peripheral is released from reset */
+ RESET_ReleasePeripheralReset(kLPUART0_RST_SHIFT_RSTn);
+ /* PORT0 peripheral is released from reset */
+ RESET_ReleasePeripheralReset(kPORT0_RST_SHIFT_RSTn);
+
+ /* PORT0_2 (pin 51) is configured as LPUART0_RXD */
+ PORT_SetPinMux(PORT0, 2U, kPORT_MuxAlt2);
+
+ PORT0->PCR[2] = ((PORT0->PCR[2] &
+ /* Mask bits to zero which are setting */
+ (~(PORT_PCR_IBE_MASK)))
+
+ /* Input Buffer Enable: Enables. */
+ | PORT_PCR_IBE(PCR_IBE_ibe1));
+
+ /* PORT0_3 (pin 52) is configured as LPUART0_TXD */
+ PORT_SetPinMux(PORT0, 3U, kPORT_MuxAlt2);
+
+ PORT0->PCR[3] = ((PORT0->PCR[3] &
+ /* Mask bits to zero which are setting */
+ (~(PORT_PCR_IBE_MASK)))
+
+ /* Input Buffer Enable: Enables. */
+ | PORT_PCR_IBE(PCR_IBE_ibe1));
+}
+/***********************************************************************************************************************
+ * EOF
+ **********************************************************************************************************************/
diff --git a/board/pin_mux.h b/board/pin_mux.h
new file mode 100644
index 0000000..b34cb29
--- /dev/null
+++ b/board/pin_mux.h
@@ -0,0 +1,75 @@
+/***********************************************************************************************************************
+ * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
+ * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
+ **********************************************************************************************************************/
+
+#ifndef _PIN_MUX_H_
+#define _PIN_MUX_H_
+
+/*!
+ * @addtogroup pin_mux
+ * @{
+ */
+
+/***********************************************************************************************************************
+ * API
+ **********************************************************************************************************************/
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/*!
+ * @brief Calls initialization functions.
+ *
+ */
+void BOARD_InitBootPins(void);
+
+/*!
+ * @brief Configures pin routing and optionally pin electrical features.
+ *
+ */
+void BOARD_InitPins(void);
+
+#define PCR_IBE_ibe1 0x01u /*!<@brief Input Buffer Enable: Enables */
+
+/*! @name PORT3_12 (number 38), LED_R
+ @{ */
+
+/* Symbols to be used with GPIO driver */
+#define BOARD_INITLEDPINS_LED_R_GPIO GPIO3 /*!<@brief GPIO peripheral base pointer */
+#define BOARD_INITLEDPINS_LED_R_GPIO_PIN 12U /*!<@brief GPIO pin number */
+#define BOARD_INITLEDPINS_LED_R_GPIO_PIN_MASK (1U << 12U) /*!<@brief GPIO pin mask */
+
+/* Symbols to be used with PORT driver */
+#define BOARD_INITLEDPINS_LED_R_PORT PORT3 /*!<@brief PORT peripheral base pointer */
+#define BOARD_INITLEDPINS_LED_R_PIN 12U /*!<@brief PORT pin number */
+#define BOARD_INITLEDPINS_LED_R_PIN_MASK (1U << 12U) /*!<@brief PORT pin mask */
+ /* @} */
+
+/*!
+ * @brief Configures pin routing and optionally pin electrical features.
+ *
+ */
+void BOARD_InitLEDPins(void);
+
+#define PCR_IBE_ibe1 0x01u /*!<@brief Input Buffer Enable: Enables */
+
+/*!
+ * @brief Configures pin routing and optionally pin electrical features.
+ *
+ */
+void BOARD_InitDbgUARTPins(void);
+
+#if defined(__cplusplus)
+}
+#endif
+
+/*!
+ * @}
+ */
+#endif /* _PIN_MUX_H_ */
+
+/***********************************************************************************************************************
+ * EOF
+ **********************************************************************************************************************/
diff --git a/include/app_init.h b/include/app_init.h
new file mode 100644
index 0000000..96a2968
--- /dev/null
+++ b/include/app_init.h
@@ -0,0 +1,9 @@
+#ifndef APP_INIT_H
+#define APP_INIT_H
+
+#include "tx_api.h"
+
+extern TX_THREAD app_init_thread_id;
+void app_init_thread(ULONG thread_input);
+
+#endif // APP_INIT_H
\ No newline at end of file
diff --git a/include/tx_user.h b/include/tx_user.h
new file mode 100644
index 0000000..e1daa63
--- /dev/null
+++ b/include/tx_user.h
@@ -0,0 +1,319 @@
+/**************************************************************************/
+/***************************************************************************
+ * Copyright (c) 2024 Microsoft Corporation
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the MIT License which is available at
+ * https://opensource.org/licenses/MIT.
+ *
+ * SPDX-License-Identifier: MIT
+ **************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** ThreadX Component */
+/** */
+/** User Specific */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_user.h PORTABLE C */
+/* 6.3.0 */
+/* */
+/* AUTHOR */
+/* */
+/* William E. Lamie, Microsoft Corporation */
+/* */
+/* DESCRIPTION */
+/* */
+/* This file contains user defines for configuring ThreadX in specific */
+/* ways. This file will have an effect only if the application and */
+/* ThreadX library are built with TX_INCLUDE_USER_DEFINE_FILE defined. */
+/* Note that all the defines in this file may also be made on the */
+/* command line when building ThreadX library and application objects. */
+/* */
+/* RELEASE HISTORY */
+/* */
+/* DATE NAME DESCRIPTION */
+/* */
+/* 05-19-2020 William E. Lamie Initial Version 6.0 */
+/* 09-30-2020 Yuxin Zhou Modified comment(s), */
+/* resulting in version 6.1 */
+/* 03-02-2021 Scott Larson Modified comment(s), */
+/* added option to remove */
+/* FileX pointer, */
+/* resulting in version 6.1.5 */
+/* 06-02-2021 Scott Larson Added options for multiple */
+/* block pool search & delay, */
+/* resulting in version 6.1.7 */
+/* 10-15-2021 Yuxin Zhou Modified comment(s), added */
+/* user-configurable symbol */
+/* TX_TIMER_TICKS_PER_SECOND */
+/* resulting in version 6.1.9 */
+/* 04-25-2022 Wenhui Xie Modified comment(s), */
+/* optimized the definition of */
+/* TX_TIMER_TICKS_PER_SECOND, */
+/* resulting in version 6.1.11 */
+/* 10-31-2023 Xiuwen Cai Modified comment(s), */
+/* added option for random */
+/* number stack filling, */
+/* resulting in version 6.3.0 */
+/* */
+/**************************************************************************/
+
+#ifndef TX_USER_H
+#define TX_USER_H
+
+
+/* Define various build options for the ThreadX port. The application should either make changes
+ here by commenting or un-commenting the conditional compilation defined OR supply the defines
+ though the compiler's equivalent of the -D option.
+
+ For maximum speed, the following should be defined:
+
+ TX_MAX_PRIORITIES 32
+ TX_DISABLE_PREEMPTION_THRESHOLD
+ TX_DISABLE_REDUNDANT_CLEARING
+ TX_DISABLE_NOTIFY_CALLBACKS
+ TX_NOT_INTERRUPTABLE
+ TX_TIMER_PROCESS_IN_ISR
+ TX_REACTIVATE_INLINE
+ TX_DISABLE_STACK_FILLING
+ TX_INLINE_THREAD_RESUME_SUSPEND
+
+ For minimum size, the following should be defined:
+
+ TX_MAX_PRIORITIES 32
+ TX_DISABLE_PREEMPTION_THRESHOLD
+ TX_DISABLE_REDUNDANT_CLEARING
+ TX_DISABLE_NOTIFY_CALLBACKS
+ TX_NO_FILEX_POINTER
+ TX_NOT_INTERRUPTABLE
+ TX_TIMER_PROCESS_IN_ISR
+
+ Of course, many of these defines reduce functionality and/or change the behavior of the
+ system in ways that may not be worth the trade-off. For example, the TX_TIMER_PROCESS_IN_ISR
+ results in faster and smaller code, however, it increases the amount of processing in the ISR.
+ In addition, some services that are available in timers are not available from ISRs and will
+ therefore return an error if this option is used. This may or may not be desirable for a
+ given application. */
+
+
+/* Override various options with default values already assigned in tx_port.h. Please also refer
+ to tx_port.h for descriptions on each of these options. */
+
+/*
+#define TX_MAX_PRIORITIES 32
+#define TX_MINIMUM_STACK ????
+#define TX_THREAD_USER_EXTENSION ????
+#define TX_TIMER_THREAD_STACK_SIZE ????
+#define TX_TIMER_THREAD_PRIORITY ????
+*/
+
+/* Define the common timer tick reference for use by other middleware components. The default
+ value is 10ms (i.e. 100 ticks, defined in tx_api.h), but may be replaced by a port-specific
+ version in tx_port.h or here.
+ Note: the actual hardware timer value may need to be changed (usually in tx_initialize_low_level). */
+
+
+#define TX_TIMER_TICKS_PER_SECOND (1000UL)
+
+
+/* Determine if there is a FileX pointer in the thread control block.
+ By default, the pointer is there for legacy/backwards compatibility.
+ The pointer must also be there for applications using FileX.
+ Define this to save space in the thread control block.
+*/
+
+/*
+#define TX_NO_FILEX_POINTER
+*/
+
+/* Determine if timer expirations (application timers, timeouts, and tx_thread_sleep calls
+ should be processed within the a system timer thread or directly in the timer ISR.
+ By default, the timer thread is used. When the following is defined, the timer expiration
+ processing is done directly from the timer ISR, thereby eliminating the timer thread control
+ block, stack, and context switching to activate it. */
+
+/*
+#define TX_TIMER_PROCESS_IN_ISR
+*/
+
+/* Determine if in-line timer reactivation should be used within the timer expiration processing.
+ By default, this is disabled and a function call is used. When the following is defined,
+ reactivating is performed in-line resulting in faster timer processing but slightly larger
+ code size. */
+
+/*
+#define TX_REACTIVATE_INLINE
+*/
+
+/* Determine is stack filling is enabled. By default, ThreadX stack filling is enabled,
+ which places an 0xEF pattern in each byte of each thread's stack. This is used by
+ debuggers with ThreadX-awareness and by the ThreadX run-time stack checking feature. */
+
+/*
+#define TX_DISABLE_STACK_FILLING
+*/
+
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+ disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
+ checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
+ define is negated, thereby forcing the stack fill which is necessary for the stack checking
+ logic. */
+
+/*
+#define TX_ENABLE_STACK_CHECKING
+*/
+
+/* Determine if random number is used for stack filling. By default, ThreadX uses a fixed
+ pattern for stack filling. When the following is defined, ThreadX uses a random number
+ for stack filling. This is effective only when TX_ENABLE_STACK_CHECKING is defined. */
+
+/*
+#define TX_ENABLE_RANDOM_NUMBER_STACK_FILLING
+*/
+
+/* Determine if preemption-threshold should be disabled. By default, preemption-threshold is
+ enabled. If the application does not use preemption-threshold, it may be disabled to reduce
+ code size and improve performance. */
+
+/*
+#define TX_DISABLE_PREEMPTION_THRESHOLD
+*/
+
+/* Determine if global ThreadX variables should be cleared. If the compiler startup code clears
+ the .bss section prior to ThreadX running, the define can be used to eliminate unnecessary
+ clearing of ThreadX global variables. */
+
+/*
+#define TX_DISABLE_REDUNDANT_CLEARING
+*/
+
+/* Determine if no timer processing is required. This option will help eliminate the timer
+ processing when not needed. The user will also have to comment out the call to
+ tx_timer_interrupt, which is typically made from assembly language in
+ tx_initialize_low_level. Note: if TX_NO_TIMER is used, the define TX_TIMER_PROCESS_IN_ISR
+ must also be used and tx_timer_initialize must be removed from ThreadX library. */
+
+/*
+#define TX_NO_TIMER
+#ifndef TX_TIMER_PROCESS_IN_ISR
+#define TX_TIMER_PROCESS_IN_ISR
+#endif
+*/
+
+/* Determine if the notify callback option should be disabled. By default, notify callbacks are
+ enabled. If the application does not use notify callbacks, they may be disabled to reduce
+ code size and improve performance. */
+
+/*
+#define TX_DISABLE_NOTIFY_CALLBACKS
+*/
+
+
+/* Determine if the tx_thread_resume and tx_thread_suspend services should have their internal
+ code in-line. This results in a larger image, but improves the performance of the thread
+ resume and suspend services. */
+
+/*
+#define TX_INLINE_THREAD_RESUME_SUSPEND
+*/
+
+
+/* Determine if the internal ThreadX code is non-interruptable. This results in smaller code
+ size and less processing overhead, but increases the interrupt lockout time. */
+
+/*
+#define TX_NOT_INTERRUPTABLE
+*/
+
+
+/* Determine if the trace event logging code should be enabled. This causes slight increases in
+ code size and overhead, but provides the ability to generate system trace information which
+ is available for viewing in TraceX. */
+
+/*
+#define TX_ENABLE_EVENT_TRACE
+*/
+
+
+/* Determine if block pool performance gathering is required by the application. When the following is
+ defined, ThreadX gathers various block pool performance information. */
+
+/*
+#define TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO
+*/
+
+/* Determine if byte pool performance gathering is required by the application. When the following is
+ defined, ThreadX gathers various byte pool performance information. */
+
+/*
+#define TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO
+*/
+
+/* Determine if event flags performance gathering is required by the application. When the following is
+ defined, ThreadX gathers various event flags performance information. */
+
+/*
+#define TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO
+*/
+
+/* Determine if mutex performance gathering is required by the application. When the following is
+ defined, ThreadX gathers various mutex performance information. */
+
+/*
+#define TX_MUTEX_ENABLE_PERFORMANCE_INFO
+*/
+
+/* Determine if queue performance gathering is required by the application. When the following is
+ defined, ThreadX gathers various queue performance information. */
+
+/*
+#define TX_QUEUE_ENABLE_PERFORMANCE_INFO
+*/
+
+/* Determine if semaphore performance gathering is required by the application. When the following is
+ defined, ThreadX gathers various semaphore performance information. */
+
+/*
+#define TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO
+*/
+
+/* Determine if thread performance gathering is required by the application. When the following is
+ defined, ThreadX gathers various thread performance information. */
+
+/*
+#define TX_THREAD_ENABLE_PERFORMANCE_INFO
+*/
+
+/* Determine if timer performance gathering is required by the application. When the following is
+ defined, ThreadX gathers various timer performance information. */
+
+/*
+#define TX_TIMER_ENABLE_PERFORMANCE_INFO
+*/
+
+/* Override options for byte pool searches of multiple blocks. */
+
+/*
+#define TX_BYTE_POOL_MULTIPLE_BLOCK_SEARCH 20
+*/
+
+/* Override options for byte pool search delay to avoid thrashing. */
+
+/*
+#define TX_BYTE_POOL_DELAY_VALUE 3
+*/
+
+#define TX_SINGLE_MODE_NON_SECURE (1)
+
+#endif
diff --git a/src/app_init.c b/src/app_init.c
new file mode 100644
index 0000000..0a6308f
--- /dev/null
+++ b/src/app_init.c
@@ -0,0 +1,16 @@
+/* Board */
+#include "pin_mux.h"
+
+/* SDK drivers */
+#include "fsl_gpio.h"
+
+/* App */
+#include "app_init.h"
+
+TX_THREAD app_init_thread_id;
+void app_init_thread(ULONG thread_input) {
+ for (;;) {
+ GPIO_PortToggle(BOARD_INITLEDPINS_LED_R_GPIO, BOARD_INITLEDPINS_LED_R_PIN_MASK);
+ tx_thread_sleep(1000);
+ }
+}
\ No newline at end of file
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..14cbfc4
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,56 @@
+/* Board */
+#include "board.h"
+#include "clock_config.h"
+#include "peripherals.h"
+#include "pin_mux.h"
+
+/* ThreadX */
+#include "tx_api.h"
+
+/* App */
+#include "app_init.h"
+
+extern void *__HeapLimit;
+extern void *_tx_initialize_unused_memory;
+
+extern void _tx_timer_interrupt(void);
+
+void tx_application_define(void *first_unused_memory) {
+ tx_thread_create(&app_init_thread_id, "INIT", app_init_thread, 0, first_unused_memory, 1024, 3, 3, TX_NO_TIME_SLICE,
+ TX_AUTO_START);
+}
+
+void _tx_initialize_low_level(void) {
+ const uint32_t primask = DisableGlobalIRQ();
+
+ _tx_initialize_unused_memory = (void *)&__HeapLimit;
+
+ DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
+
+ SysTick_Config(CLOCK_GetCoreSysClkFreq() / TX_TIMER_TICKS_PER_SECOND);
+
+ NVIC_SetPriority(SVCall_IRQn, 7);
+ NVIC_SetPriority(PendSV_IRQn, 7);
+
+ NVIC_SetPriority(SysTick_IRQn, 6);
+
+ EnableGlobalIRQ(primask);
+}
+
+void SysTick_Handler(void) {
+ _tx_timer_interrupt();
+}
+
+int main(void) {
+ BOARD_InitBootPins();
+ BOARD_InitBootClocks();
+ BOARD_InitBootPeripherals();
+
+ BOARD_InitDebugConsole();
+
+ tx_kernel_enter();
+
+ for (;;) {
+ __WFI();
+ }
+}