From cac0ebd4e9c67f3e5d4eca40c10633796a2b417b Mon Sep 17 00:00:00 2001
From: Embedded_Projects <>
Date: Sun, 11 Feb 2024 12:32:39 +0000
Subject: [PATCH] Initial commit
---
.clang-format | 12 +++
.gitignore | 5 +
.gitmodules | 3 +
CMakeLists.txt | 165 +++++++++++++++++++++++++++++++
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 ++++++++++++++
src/main.c | 22 +++++
15 files changed, 1161 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 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..e169242
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "SDK"]
+ path = SDK
+ url = https://git.minori.work/Embedded_SDK/MCUXpresso_MCXA153.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..b19bbac
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,165 @@
+cmake_minimum_required(VERSION 3.10)
+
+project(mcxa153_template)
+
+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/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
+ "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")
+
+# 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/src/main.c b/src/main.c
new file mode 100644
index 0000000..e3bb43d
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,22 @@
+#include
+
+/* Board */
+#include "board.h"
+#include "clock_config.h"
+#include "peripherals.h"
+#include "pin_mux.h"
+
+int main(void) {
+ BOARD_InitBootPins();
+ BOARD_InitBootClocks();
+ BOARD_InitBootPeripherals();
+
+ BOARD_InitDebugConsole();
+
+ printf("Hello world.\r\n");
+
+ for (;;) {
+ GPIO_PortToggle(BOARD_INITLEDPINS_LED_R_GPIO,BOARD_INITLEDPINS_LED_R_GPIO_PIN_MASK);
+ SDK_DelayAtLeastUs(500 * 1000, CLOCK_GetCoreSysClkFreq());
+ }
+}