From d42ba1aff6a8212e2847b75a5cfad70619a8a679 Mon Sep 17 00:00:00 2001 From: Ajit Ananthadevan Date: Sun, 25 Jan 2026 20:35:21 +1100 Subject: [PATCH] first commit --- .gitignore | 5 + myapps/blinky-out/Makefile | 107 ++++++ myapps/blinky-out/device_linker.lds | 201 +++++++++++ myapps/blinky-out/empty.syscfg | 20 ++ myapps/blinky-out/src/main.c | 10 + myapps/blinky-out/startup_mspm0g350x_gcc.c | 221 ++++++++++++ myapps/blinky-out/ti_msp_dl_config.c | 86 +++++ myapps/blinky-out/ti_msp_dl_config.h | 92 +++++ myapps/blinky/Makefile | 107 ++++++ myapps/blinky/device.lds.genlibs | 53 +++ myapps/blinky/device.opt | 2 + myapps/blinky/device_linker.lds | 201 +++++++++++ myapps/blinky/empty.map | 377 +++++++++++++++++++++ myapps/blinky/empty.obj | Bin 0 -> 42412 bytes myapps/blinky/empty.out | Bin 0 -> 222056 bytes myapps/blinky/empty.syscfg | 20 ++ myapps/blinky/src/main.c | 10 + myapps/blinky/startup_mspm0g350x_gcc.c | 221 ++++++++++++ myapps/blinky/startup_mspm0g350x_gcc.obj | Bin 0 -> 6536 bytes myapps/blinky/ti_msp_dl_config.c | 86 +++++ myapps/blinky/ti_msp_dl_config.h | 92 +++++ myapps/blinky/ti_msp_dl_config.obj | Bin 0 -> 47724 bytes myapps/empty/Makefile | 160 +++++++++ myapps/empty/Makefile.bkp | 159 +++++++++ myapps/empty/Makefile.bkp1 | 160 +++++++++ myapps/empty/device_linker.lds | 201 +++++++++++ myapps/empty/src/main.c | 10 + myapps/empty/ti_msp_dl_config.c | 86 +++++ myapps/empty/ti_msp_dl_config.h | 92 +++++ readme.md | 11 + 30 files changed, 2790 insertions(+) create mode 100644 .gitignore create mode 100644 myapps/blinky-out/Makefile create mode 100644 myapps/blinky-out/device_linker.lds create mode 100644 myapps/blinky-out/empty.syscfg create mode 100644 myapps/blinky-out/src/main.c create mode 100644 myapps/blinky-out/startup_mspm0g350x_gcc.c create mode 100644 myapps/blinky-out/ti_msp_dl_config.c create mode 100644 myapps/blinky-out/ti_msp_dl_config.h create mode 100644 myapps/blinky/Makefile create mode 100644 myapps/blinky/device.lds.genlibs create mode 100644 myapps/blinky/device.opt create mode 100644 myapps/blinky/device_linker.lds create mode 100644 myapps/blinky/empty.map create mode 100644 myapps/blinky/empty.obj create mode 100755 myapps/blinky/empty.out create mode 100644 myapps/blinky/empty.syscfg create mode 100644 myapps/blinky/src/main.c create mode 100644 myapps/blinky/startup_mspm0g350x_gcc.c create mode 100644 myapps/blinky/startup_mspm0g350x_gcc.obj create mode 100644 myapps/blinky/ti_msp_dl_config.c create mode 100644 myapps/blinky/ti_msp_dl_config.h create mode 100644 myapps/blinky/ti_msp_dl_config.obj create mode 100644 myapps/empty/Makefile create mode 100644 myapps/empty/Makefile.bkp create mode 100644 myapps/empty/Makefile.bkp1 create mode 100644 myapps/empty/device_linker.lds create mode 100644 myapps/empty/src/main.c create mode 100644 myapps/empty/ti_msp_dl_config.c create mode 100644 myapps/empty/ti_msp_dl_config.h create mode 100644 readme.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8450e3d --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +/mspm0-sdk/ +build/ +.cache/ +compile_commands.json + diff --git a/myapps/blinky-out/Makefile b/myapps/blinky-out/Makefile new file mode 100644 index 0000000..ec1e803 --- /dev/null +++ b/myapps/blinky-out/Makefile @@ -0,0 +1,107 @@ +# For Linux +RM = rm -f +RMDIR = rm -rf +DEVNULL = /dev/null +ECHOBLANKLINE = echo + +#---------------- + +SYSCONFIG_TOOL ?= /home/ajit/ti/sysconfig_1.26.2/sysconfig_cli.sh +MSPM0_SDK_INSTALL_DIR ?= $(abspath ../../mspm0-sdk) + +CC = "arm-none-eabi-gcc" +LNK = "arm-none-eabi-gcc" + +SYSCONFIG_GUI_TOOL = $(dir $(SYSCONFIG_TOOL))sysconfig_gui$(suffix $(SYSCONFIG_TOOL)) +SYSCFG_CMD_STUB = $(SYSCONFIG_TOOL) --compiler gcc --product $(MSPM0_SDK_INSTALL_DIR)/.metadata/product.json +SYSCFG_GUI_CMD_STUB = $(SYSCONFIG_GUI_TOOL) --compiler gcc --product $(MSPM0_SDK_INSTALL_DIR)/.metadata/product.json +SYSCFG_FILES := $(shell $(SYSCFG_CMD_STUB) --listGeneratedFiles --listReferencedFiles --output . empty.syscfg) + +SYSCFG_C_FILES = $(filter %.c,$(SYSCFG_FILES)) +SYSCFG_H_FILES = $(filter %.h,$(SYSCFG_FILES)) +SYSCFG_OPT_FILES = $(filter %.opt,$(SYSCFG_FILES)) + +OBJECTS = empty.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) +NAME = empty + +CFLAGS += -I. \ + $(addprefix @,$(SYSCFG_OPT_FILES)) \ + -O2 \ + @device.opt \ + "-I$(MSPM0_SDK_INSTALL_DIR)/source/third_party/CMSIS/Core/Include" \ + "-I$(MSPM0_SDK_INSTALL_DIR)/source" \ + -mcpu=cortex-m0plus \ + -march=armv6-m \ + -mthumb \ + -std=c99 \ + -mfloat-abi=soft \ + -ffunction-sections \ + -fdata-sections \ + -g \ + -gstrict-dwarf \ + -Wall \ + --specs=nano.specs + +LFLAGS += "-L$(MSPM0_SDK_INSTALL_DIR)/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x" \ + -nostartfiles \ + -Tdevice.lds.genlibs \ + -l:driverlib.a \ + -Wl,-T,device_linker.lds \ + "-Wl,-Map,$(NAME).map" \ + "-L$(MSPM0_SDK_INSTALL_DIR)/source" \ + -L.. \ + -march=armv6-m \ + -mthumb \ + -static \ + -Wl,--gc-sections \ + "-L/usr/lib/gcc/arm-none-eabi/14.2.1/thumb/nofp" \ + -lgcc \ + -lc \ + -lm \ + --specs=nano.specs \ + --specs=nosys.specs + +all: $(NAME).out + +.INTERMEDIATE: syscfg +$(SYSCFG_FILES): syscfg + @ echo generation complete + +syscfg: empty.syscfg + @ echo Generating configuration files... + @ $(SYSCFG_CMD_STUB) --output $(@D) $< + + +# Helpful hint that the user needs to use a standalone SysConfig installation +$(SYSCONFIG_GUI_TOOL): + $(error $(dir $(SYSCONFIG_TOOL)) does not contain the GUI framework \ + necessary to launch the SysConfig GUI. Please set SYSCONFIG_TOOL \ + (in your SDK's imports.mak) to a standalone SysConfig installation \ + rather than one inside CCS) + +syscfg-gui: empty.syscfg $(SYSCONFIG_GUI_TOOL) + @ echo Opening SysConfig GUI + @ $(SYSCFG_GUI_CMD_STUB) $< + +define C_RULE +$(basename $(notdir $(1))).obj: $(1) $(SYSCFG_H_FILES) + @ echo Building $$@ + @ $(CC) $(CFLAGS) $$< -c -o $$@ +endef + +$(foreach c_file,$(SYSCFG_C_FILES),$(eval $(call C_RULE,$(c_file)))) + +empty.obj: src/main.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) $< -c -o $@ + +$(NAME).out: $(OBJECTS) + @ echo linking $@ + @ $(LNK) $(OBJECTS) $(LFLAGS) -o $(NAME).out + +clean: + @ echo Cleaning... + @ $(RM) $(OBJECTS) > $(DEVNULL) 2>&1 + @ $(RM) $(NAME).out > $(DEVNULL) 2>&1 + @ $(RM) $(NAME).map > $(DEVNULL) 2>&1 + @ $(RM) $(SYSCFG_FILES)> $(DEVNULL) 2>&1 diff --git a/myapps/blinky-out/device_linker.lds b/myapps/blinky-out/device_linker.lds new file mode 100644 index 0000000..f280511 --- /dev/null +++ b/myapps/blinky-out/device_linker.lds @@ -0,0 +1,201 @@ +/***************************************************************************** + + Copyright (C) 2024 Texas Instruments Incorporated - http://www.ti.com/ + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the + distribution. + + Neither the name of Texas Instruments Incorporated nor the names of + its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*****************************************************************************/ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0; /* required amount of heap */ +_Min_Stack_Size = 0x80; /* required amount of stack */ + + +/* Specify the memory areas */ +MEMORY +{ + FLASH (RX) : ORIGIN = 0x00000000, LENGTH = 0x00020000 + SRAM (RWX) : ORIGIN = 0x20200000, LENGTH = 0x00008000 + BCR_CONFIG (R) : ORIGIN = 0x41C00000, LENGTH = 0x000000FF + BSL_CONFIG (R) : ORIGIN = 0x41C00100, LENGTH = 0x00000080 +} + +/* Note: SRAM length must match MPPC/MEMSS config! Please edit it manually. */ + +REGION_ALIAS("REGION_TEXT", FLASH); +REGION_ALIAS("REGION_PREINIT_ARRAY", FLASH); +REGION_ALIAS("REGION_INIT_ARRAY", FLASH); +REGION_ALIAS("REGION_FINI_ARRAY", FLASH); +REGION_ALIAS("REGION_BSS", SRAM); +REGION_ALIAS("REGION_NOINIT", SRAM); +REGION_ALIAS("REGION_DATA", SRAM); +REGION_ALIAS("REGION_STACK", SRAM); +REGION_ALIAS("REGION_HEAP", SRAM); +REGION_ALIAS("REGION_TEXT_RAM", SRAM); +REGION_ALIAS("REGION_ARM_EXIDX", FLASH); +REGION_ALIAS("REGION_ARM_EXTAB", FLASH); + +/* Define output sections */ +SECTIONS +{ + /* section for the interrupt vector area */ + PROVIDE (_intvecs_base_address = + DEFINED(_intvecs_base_address) ? _intvecs_base_address : 0x00000000); + + .intvecs (_intvecs_base_address) : AT (_intvecs_base_address) { + KEEP (*(.intvecs)) + } > REGION_TEXT + + PROVIDE (_vtable_base_address = + DEFINED(_vtable_base_address) ? _vtable_base_address : 0x20200000); + + .vtable (_vtable_base_address) (NOLOAD) : AT (_vtable_base_address) { + KEEP (*(.vtable)) + } > REGION_DATA + + .text : { + CREATE_OBJECT_SYMBOLS + KEEP (*(.text)) + . = ALIGN(0x8); + *(.text.*) + . = ALIGN(0x8); + KEEP (*(.ctors)) + . = ALIGN(0x8); + KEEP (*(.dtors)) + . = ALIGN(0x8); + KEEP (*(.init)) + . = ALIGN(0x8); + KEEP (*(.fini*)) + . = ALIGN(0x8); + } > REGION_TEXT AT> REGION_TEXT + + .ramfunc : { + __ramfunct_load__ = LOADADDR (.ramfunc); + __ramfunct_start__ = .; + *(.ramfunc) + . = ALIGN(0x8); + __ramfunct_end__ = .; + } > REGION_TEXT_RAM AT> REGION_TEXT + + .rodata : { + *(.rodata) + . = ALIGN(0x8); + *(.rodata.*) + . = ALIGN(0x8); + } > REGION_TEXT AT> REGION_TEXT + + .preinit_array : { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)); + PROVIDE_HIDDEN (__preinit_array_end = .); + } > REGION_PREINIT_ARRAY AT> REGION_TEXT + + .init_array : { + . = ALIGN(0x8); + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } > REGION_INIT_ARRAY AT> REGION_TEXT + + .fini_array : { + . = ALIGN(0x8); + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + . = ALIGN(0x8); + } > REGION_FINI_ARRAY AT> REGION_TEXT + + .ARM.exidx : { + __exidx_start = .; + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + __exidx_end = .; + } > REGION_ARM_EXIDX AT> REGION_ARM_EXIDX + + .ARM.extab : { + . = ALIGN(0x8); + KEEP (*(.ARM.extab* .gnu.linkonce.armextab.*)) + . = ALIGN(0x8); + } > REGION_ARM_EXTAB AT> REGION_ARM_EXTAB + + __etext = .; + + .data : { + __data_load__ = LOADADDR (.data); + __data_start__ = .; + KEEP (*(.data)) + KEEP (*(.data*)) + . = ALIGN (8); + __data_end__ = .; + } > REGION_DATA AT> REGION_TEXT + + .bss : { + __bss_start__ = .; + *(.shbss) + KEEP (*(.bss)) + *(.bss.*) + *(COMMON) + . = ALIGN (8); + __bss_end__ = .; + } > REGION_BSS AT> REGION_BSS + + .noinit : { + /* place all symbols in input sections that start with .noinit */ + KEEP(*(*.noinit*)) + . = ALIGN (8); + } > REGION_NOINIT AT> REGION_NOINIT + + .heap : { + __heap_start__ = .; + end = __heap_start__; + _end = end; + __end = end; + KEEP (*(.heap)) + __heap_end__ = .; + __HeapLimit = __heap_end__; + } > REGION_HEAP AT> REGION_HEAP + + .stack (NOLOAD) : ALIGN(0x8) { + _stack = .; + KEEP(*(.stack)) + } > REGION_STACK AT> REGION_STACK + + .BCRConfig : + { + KEEP(*(.BCRConfig)) + } > BCR_CONFIG + + .BSLConfig : + { + KEEP(*(.BSLConfig)) + } > BSL_CONFIG + + __StackTop = ORIGIN(REGION_STACK) + LENGTH(REGION_STACK); + PROVIDE(__stack = __StackTop); +} diff --git a/myapps/blinky-out/empty.syscfg b/myapps/blinky-out/empty.syscfg new file mode 100644 index 0000000..c19d068 --- /dev/null +++ b/myapps/blinky-out/empty.syscfg @@ -0,0 +1,20 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + */ +//@cliArgs --device "MSPM0G350X" --package "LQFP-64(PM)" --part "Default" +//@v2CliArgs --device "MSPM0G3507" --package "LQFP-64(PM)" +// @cliArgs --board /ti/boards/LP_MSPM0G3507 --rtos nortos + +/** + * Import the modules used in this configuration. + */ +const SYSCTL = scripting.addModule("/ti/driverlib/SYSCTL"); + +/** + * Write custom configuration values to the imported modules. + */ + +const Board = scripting.addModule("/ti/driverlib/Board", {}, false); + +SYSCTL.forceDefaultClkConfig = true; diff --git a/myapps/blinky-out/src/main.c b/myapps/blinky-out/src/main.c new file mode 100644 index 0000000..21140a9 --- /dev/null +++ b/myapps/blinky-out/src/main.c @@ -0,0 +1,10 @@ + +#include "ti_msp_dl_config.h" + +int main(void) +{ + SYSCFG_DL_init(); + + while (1) { + } +} diff --git a/myapps/blinky-out/startup_mspm0g350x_gcc.c b/myapps/blinky-out/startup_mspm0g350x_gcc.c new file mode 100644 index 0000000..8777f26 --- /dev/null +++ b/myapps/blinky-out/startup_mspm0g350x_gcc.c @@ -0,0 +1,221 @@ +/***************************************************************************** + + Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/ + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the + distribution. + + Neither the name of Texas Instruments Incorporated nor the names of + its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*****************************************************************************/ + +#include + +/* Entry point for the application. */ +extern void SystemInit(void); +extern int main( void ); + +extern uint32_t __data_load__; +extern uint32_t __data_start__; +extern uint32_t __data_end__; +extern uint32_t __ramfunct_load__; +extern uint32_t __ramfunct_start__; +extern uint32_t __ramfunct_end__; +extern uint32_t __bss_start__; +extern uint32_t __bss_end__; +extern uint32_t __StackTop; + +typedef void( *pFunc )( void ); + +/* Forward declaration of the default fault handlers. */ +void Default_Handler(void); +extern void Reset_Handler (void) __attribute__((weak)); +extern void __libc_init_array(void); +extern void _init (void) __attribute__((weak, alias("initStub"))); +void initStub(void){;} + +/* Processor Exceptions */ +extern void NMI_Handler (void) __attribute__((weak, alias("Default_Handler"))); +extern void HardFault_Handler (void) __attribute__((weak, alias("Default_Handler"))); +extern void SVC_Handler (void) __attribute__((weak, alias("Default_Handler"))); +extern void PendSV_Handler (void) __attribute__((weak, alias("Default_Handler"))); +extern void SysTick_Handler (void) __attribute__((weak, alias("Default_Handler"))); + +/* Device Specific Interrupt Handlers */ +extern void GROUP0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void GROUP1_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void TIMG8_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void UART3_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void ADC0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void ADC1_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void CANFD0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void DAC0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void SPI0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void SPI1_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void UART1_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void UART2_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void UART0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void TIMG0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void TIMG6_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void TIMA0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void TIMA1_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void TIMG7_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void TIMG12_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void I2C0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void I2C1_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void AES_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void RTC_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void DMA_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); + + +/* Interrupt vector table. Note that the proper constructs must be placed on this to */ +/* ensure that it ends up at physical address 0x0000.0000 or at the start of */ +/* the program if located at a start address other than 0. */ +void (* const interruptVectors[])(void) __attribute__ ((used)) __attribute__ ((section (".intvecs"))) = +{ + (pFunc)&__StackTop, /* The initial stack pointer */ + Reset_Handler, /* The reset handler */ + NMI_Handler, /* The NMI handler */ + HardFault_Handler, /* The hard fault handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* SVCall handler */ + 0, /* Reserved */ + 0, /* Reserved */ + PendSV_Handler, /* The PendSV handler */ + SysTick_Handler, /* SysTick handler */ + GROUP0_IRQHandler, /* GROUP0 interrupt handler */ + GROUP1_IRQHandler, /* GROUP1 interrupt handler */ + TIMG8_IRQHandler, /* TIMG8 interrupt handler */ + UART3_IRQHandler, /* UART3 interrupt handler */ + ADC0_IRQHandler, /* ADC0 interrupt handler */ + ADC1_IRQHandler, /* ADC1 interrupt handler */ + CANFD0_IRQHandler, /* CANFD0 interrupt handler */ + DAC0_IRQHandler, /* DAC0 interrupt handler */ + 0, /* Reserved */ + SPI0_IRQHandler, /* SPI0 interrupt handler */ + SPI1_IRQHandler, /* SPI1 interrupt handler */ + 0, /* Reserved */ + 0, /* Reserved */ + UART1_IRQHandler, /* UART1 interrupt handler */ + UART2_IRQHandler, /* UART2 interrupt handler */ + UART0_IRQHandler, /* UART0 interrupt handler */ + TIMG0_IRQHandler, /* TIMG0 interrupt handler */ + TIMG6_IRQHandler, /* TIMG6 interrupt handler */ + TIMA0_IRQHandler, /* TIMA0 interrupt handler */ + TIMA1_IRQHandler, /* TIMA1 interrupt handler */ + TIMG7_IRQHandler, /* TIMG7 interrupt handler */ + TIMG12_IRQHandler, /* TIMG12 interrupt handler */ + 0, /* Reserved */ + 0, /* Reserved */ + I2C0_IRQHandler, /* I2C0 interrupt handler */ + I2C1_IRQHandler, /* I2C1 interrupt handler */ + 0, /* Reserved */ + 0, /* Reserved */ + AES_IRQHandler, /* AES interrupt handler */ + 0, /* Reserved */ + RTC_IRQHandler, /* RTC interrupt handler */ + DMA_IRQHandler, /* DMA interrupt handler */ + +}; + +/* Forward declaration of the default fault handlers. */ +/* This is the code that gets called when the processor first starts execution */ +/* following a reset event. Only the absolutely necessary set is performed, */ +/* after which the application supplied entry() routine is called. Any fancy */ +/* actions (such as making decisions based on the reset cause register, and */ +/* resetting the bits in that register) are left solely in the hands of the */ +/* application. */ +void Reset_Handler(void) +{ + uint32_t *pui32Src, *pui32Dest; + uint32_t *bs, *be; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &__data_load__; + for(pui32Dest = &__data_start__; pui32Dest < &__data_end__; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Copy the ramfunct segment initializers from flash to SRAM. + // + pui32Src = &__ramfunct_load__; + for(pui32Dest = &__ramfunct_start__; pui32Dest < &__ramfunct_end__; ) + { + *pui32Dest++ = *pui32Src++; + } + + // Initialize .bss to zero + bs = &__bss_start__; + be = &__bss_end__; + while (bs < be) + { + *bs = 0; + bs++; + } + + /* + * System initialization routine can be called here, but it's not + * required for MSPM0. + */ + // SystemInit(); + + // + // Initialize virtual tables, along executing init, init_array, constructors + // and preinit_array functions + // + __libc_init_array(); + + // + // Call the application's entry point. + // + main(); + + // + // If we ever return signal Error + // + HardFault_Handler(); +} + +/* This is the code that gets called when the processor receives an unexpected */ +/* interrupt. This simply enters an infinite loop, preserving the system state */ +/* for examination by a debugger. */ +void Default_Handler(void) +{ + /* Enter an infinite loop. */ + while(1) + { + } +} diff --git a/myapps/blinky-out/ti_msp_dl_config.c b/myapps/blinky-out/ti_msp_dl_config.c new file mode 100644 index 0000000..eda8bc6 --- /dev/null +++ b/myapps/blinky-out/ti_msp_dl_config.c @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2023, Texas Instruments Incorporated + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * ============ ti_msp_dl_config.c ============= + * Configured MSPM0 DriverLib module definitions + * + * DO NOT EDIT - This file is generated for the MSPM0G350X + * by the SysConfig tool. + */ + +#include "ti_msp_dl_config.h" + +/* + * ======== SYSCFG_DL_init ======== + * Perform any initialization needed before using any board APIs + */ +SYSCONFIG_WEAK void SYSCFG_DL_init(void) +{ + SYSCFG_DL_initPower(); + SYSCFG_DL_GPIO_init(); + /* Module-Specific Initializations*/ + SYSCFG_DL_SYSCTL_init(); +} + +SYSCONFIG_WEAK void SYSCFG_DL_initPower(void) +{ + DL_GPIO_reset(GPIOA); + DL_GPIO_reset(GPIOB); + + DL_GPIO_enablePower(GPIOA); + DL_GPIO_enablePower(GPIOB); + delay_cycles(POWER_STARTUP_DELAY); +} + +SYSCONFIG_WEAK void SYSCFG_DL_GPIO_init(void) +{ + +} + + +SYSCONFIG_WEAK void SYSCFG_DL_SYSCTL_init(void) +{ + + //Low Power Mode is configured to be SLEEP0 + DL_SYSCTL_setBORThreshold(DL_SYSCTL_BOR_THRESHOLD_LEVEL_0); + + DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE); + /* Set default configuration */ + DL_SYSCTL_disableHFXT(); + DL_SYSCTL_disableSYSPLL(); + DL_SYSCTL_setULPCLKDivider(DL_SYSCTL_ULPCLK_DIV_1); + DL_SYSCTL_setMCLKDivider(DL_SYSCTL_MCLK_DIVIDER_DISABLE); + +} + + diff --git a/myapps/blinky-out/ti_msp_dl_config.h b/myapps/blinky-out/ti_msp_dl_config.h new file mode 100644 index 0000000..b6f0d1f --- /dev/null +++ b/myapps/blinky-out/ti_msp_dl_config.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023, Texas Instruments Incorporated - http://www.ti.com + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * ============ ti_msp_dl_config.h ============= + * Configured MSPM0 DriverLib module declarations + * + * DO NOT EDIT - This file is generated for the MSPM0G350X + * by the SysConfig tool. + */ +#ifndef ti_msp_dl_config_h +#define ti_msp_dl_config_h + +#define CONFIG_MSPM0G350X +#define CONFIG_MSPM0G3507 + +#if defined(__ti_version__) || defined(__TI_COMPILER_VERSION__) +#define SYSCONFIG_WEAK __attribute__((weak)) +#elif defined(__IAR_SYSTEMS_ICC__) +#define SYSCONFIG_WEAK __weak +#elif defined(__GNUC__) +#define SYSCONFIG_WEAK __attribute__((weak)) +#endif + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * ======== SYSCFG_DL_init ======== + * Perform all required MSP DL initialization + * + * This function should be called once at a point before any use of + * MSP DL. + */ + + +/* clang-format off */ + +#define POWER_STARTUP_DELAY (16) + + +#define CPUCLK_FREQ 32000000 + + + +/* clang-format on */ + +void SYSCFG_DL_init(void); +void SYSCFG_DL_initPower(void); +void SYSCFG_DL_GPIO_init(void); +void SYSCFG_DL_SYSCTL_init(void); + + +#ifdef __cplusplus +} +#endif + +#endif /* ti_msp_dl_config_h */ diff --git a/myapps/blinky/Makefile b/myapps/blinky/Makefile new file mode 100644 index 0000000..ec1e803 --- /dev/null +++ b/myapps/blinky/Makefile @@ -0,0 +1,107 @@ +# For Linux +RM = rm -f +RMDIR = rm -rf +DEVNULL = /dev/null +ECHOBLANKLINE = echo + +#---------------- + +SYSCONFIG_TOOL ?= /home/ajit/ti/sysconfig_1.26.2/sysconfig_cli.sh +MSPM0_SDK_INSTALL_DIR ?= $(abspath ../../mspm0-sdk) + +CC = "arm-none-eabi-gcc" +LNK = "arm-none-eabi-gcc" + +SYSCONFIG_GUI_TOOL = $(dir $(SYSCONFIG_TOOL))sysconfig_gui$(suffix $(SYSCONFIG_TOOL)) +SYSCFG_CMD_STUB = $(SYSCONFIG_TOOL) --compiler gcc --product $(MSPM0_SDK_INSTALL_DIR)/.metadata/product.json +SYSCFG_GUI_CMD_STUB = $(SYSCONFIG_GUI_TOOL) --compiler gcc --product $(MSPM0_SDK_INSTALL_DIR)/.metadata/product.json +SYSCFG_FILES := $(shell $(SYSCFG_CMD_STUB) --listGeneratedFiles --listReferencedFiles --output . empty.syscfg) + +SYSCFG_C_FILES = $(filter %.c,$(SYSCFG_FILES)) +SYSCFG_H_FILES = $(filter %.h,$(SYSCFG_FILES)) +SYSCFG_OPT_FILES = $(filter %.opt,$(SYSCFG_FILES)) + +OBJECTS = empty.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) +NAME = empty + +CFLAGS += -I. \ + $(addprefix @,$(SYSCFG_OPT_FILES)) \ + -O2 \ + @device.opt \ + "-I$(MSPM0_SDK_INSTALL_DIR)/source/third_party/CMSIS/Core/Include" \ + "-I$(MSPM0_SDK_INSTALL_DIR)/source" \ + -mcpu=cortex-m0plus \ + -march=armv6-m \ + -mthumb \ + -std=c99 \ + -mfloat-abi=soft \ + -ffunction-sections \ + -fdata-sections \ + -g \ + -gstrict-dwarf \ + -Wall \ + --specs=nano.specs + +LFLAGS += "-L$(MSPM0_SDK_INSTALL_DIR)/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x" \ + -nostartfiles \ + -Tdevice.lds.genlibs \ + -l:driverlib.a \ + -Wl,-T,device_linker.lds \ + "-Wl,-Map,$(NAME).map" \ + "-L$(MSPM0_SDK_INSTALL_DIR)/source" \ + -L.. \ + -march=armv6-m \ + -mthumb \ + -static \ + -Wl,--gc-sections \ + "-L/usr/lib/gcc/arm-none-eabi/14.2.1/thumb/nofp" \ + -lgcc \ + -lc \ + -lm \ + --specs=nano.specs \ + --specs=nosys.specs + +all: $(NAME).out + +.INTERMEDIATE: syscfg +$(SYSCFG_FILES): syscfg + @ echo generation complete + +syscfg: empty.syscfg + @ echo Generating configuration files... + @ $(SYSCFG_CMD_STUB) --output $(@D) $< + + +# Helpful hint that the user needs to use a standalone SysConfig installation +$(SYSCONFIG_GUI_TOOL): + $(error $(dir $(SYSCONFIG_TOOL)) does not contain the GUI framework \ + necessary to launch the SysConfig GUI. Please set SYSCONFIG_TOOL \ + (in your SDK's imports.mak) to a standalone SysConfig installation \ + rather than one inside CCS) + +syscfg-gui: empty.syscfg $(SYSCONFIG_GUI_TOOL) + @ echo Opening SysConfig GUI + @ $(SYSCFG_GUI_CMD_STUB) $< + +define C_RULE +$(basename $(notdir $(1))).obj: $(1) $(SYSCFG_H_FILES) + @ echo Building $$@ + @ $(CC) $(CFLAGS) $$< -c -o $$@ +endef + +$(foreach c_file,$(SYSCFG_C_FILES),$(eval $(call C_RULE,$(c_file)))) + +empty.obj: src/main.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) $< -c -o $@ + +$(NAME).out: $(OBJECTS) + @ echo linking $@ + @ $(LNK) $(OBJECTS) $(LFLAGS) -o $(NAME).out + +clean: + @ echo Cleaning... + @ $(RM) $(OBJECTS) > $(DEVNULL) 2>&1 + @ $(RM) $(NAME).out > $(DEVNULL) 2>&1 + @ $(RM) $(NAME).map > $(DEVNULL) 2>&1 + @ $(RM) $(SYSCFG_FILES)> $(DEVNULL) 2>&1 diff --git a/myapps/blinky/device.lds.genlibs b/myapps/blinky/device.lds.genlibs new file mode 100644 index 0000000..efec0cd --- /dev/null +++ b/myapps/blinky/device.lds.genlibs @@ -0,0 +1,53 @@ +/***************************************************************************** + + Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/ + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the + distribution. + + Neither the name of Texas Instruments Incorporated nor the names of + its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*****************************************************************************/ +/* + * ======== board.cmd.genlibs ======== + * Libraries needed to link this application's configuration + * + * NOTE, this feature requires software components configured in your + * system to correctly indicate their dependencies and report the + * libraries needed for your specific configuration. If you find + * errors, please report them on TI's E2E forums + * (https://e2e.ti.com/) so they can be addressed in a future + * release. + * + * This file allows one to portably link applications that use SysConfig + * _without_ having to make changes to build rules when moving to a new + * device OR when upgrading to a new version of a SysConfig enabled + * product. + * + * DO NOT EDIT - This file is generated by the SysConfig tool for the + * TI C/C++ toolchain + */ +INPUT("ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a") diff --git a/myapps/blinky/device.opt b/myapps/blinky/device.opt new file mode 100644 index 0000000..16b265b --- /dev/null +++ b/myapps/blinky/device.opt @@ -0,0 +1,2 @@ +-D__MSPM0G3507__ +-D__USE_SYSCONFIG__ diff --git a/myapps/blinky/device_linker.lds b/myapps/blinky/device_linker.lds new file mode 100644 index 0000000..f280511 --- /dev/null +++ b/myapps/blinky/device_linker.lds @@ -0,0 +1,201 @@ +/***************************************************************************** + + Copyright (C) 2024 Texas Instruments Incorporated - http://www.ti.com/ + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the + distribution. + + Neither the name of Texas Instruments Incorporated nor the names of + its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*****************************************************************************/ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0; /* required amount of heap */ +_Min_Stack_Size = 0x80; /* required amount of stack */ + + +/* Specify the memory areas */ +MEMORY +{ + FLASH (RX) : ORIGIN = 0x00000000, LENGTH = 0x00020000 + SRAM (RWX) : ORIGIN = 0x20200000, LENGTH = 0x00008000 + BCR_CONFIG (R) : ORIGIN = 0x41C00000, LENGTH = 0x000000FF + BSL_CONFIG (R) : ORIGIN = 0x41C00100, LENGTH = 0x00000080 +} + +/* Note: SRAM length must match MPPC/MEMSS config! Please edit it manually. */ + +REGION_ALIAS("REGION_TEXT", FLASH); +REGION_ALIAS("REGION_PREINIT_ARRAY", FLASH); +REGION_ALIAS("REGION_INIT_ARRAY", FLASH); +REGION_ALIAS("REGION_FINI_ARRAY", FLASH); +REGION_ALIAS("REGION_BSS", SRAM); +REGION_ALIAS("REGION_NOINIT", SRAM); +REGION_ALIAS("REGION_DATA", SRAM); +REGION_ALIAS("REGION_STACK", SRAM); +REGION_ALIAS("REGION_HEAP", SRAM); +REGION_ALIAS("REGION_TEXT_RAM", SRAM); +REGION_ALIAS("REGION_ARM_EXIDX", FLASH); +REGION_ALIAS("REGION_ARM_EXTAB", FLASH); + +/* Define output sections */ +SECTIONS +{ + /* section for the interrupt vector area */ + PROVIDE (_intvecs_base_address = + DEFINED(_intvecs_base_address) ? _intvecs_base_address : 0x00000000); + + .intvecs (_intvecs_base_address) : AT (_intvecs_base_address) { + KEEP (*(.intvecs)) + } > REGION_TEXT + + PROVIDE (_vtable_base_address = + DEFINED(_vtable_base_address) ? _vtable_base_address : 0x20200000); + + .vtable (_vtable_base_address) (NOLOAD) : AT (_vtable_base_address) { + KEEP (*(.vtable)) + } > REGION_DATA + + .text : { + CREATE_OBJECT_SYMBOLS + KEEP (*(.text)) + . = ALIGN(0x8); + *(.text.*) + . = ALIGN(0x8); + KEEP (*(.ctors)) + . = ALIGN(0x8); + KEEP (*(.dtors)) + . = ALIGN(0x8); + KEEP (*(.init)) + . = ALIGN(0x8); + KEEP (*(.fini*)) + . = ALIGN(0x8); + } > REGION_TEXT AT> REGION_TEXT + + .ramfunc : { + __ramfunct_load__ = LOADADDR (.ramfunc); + __ramfunct_start__ = .; + *(.ramfunc) + . = ALIGN(0x8); + __ramfunct_end__ = .; + } > REGION_TEXT_RAM AT> REGION_TEXT + + .rodata : { + *(.rodata) + . = ALIGN(0x8); + *(.rodata.*) + . = ALIGN(0x8); + } > REGION_TEXT AT> REGION_TEXT + + .preinit_array : { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)); + PROVIDE_HIDDEN (__preinit_array_end = .); + } > REGION_PREINIT_ARRAY AT> REGION_TEXT + + .init_array : { + . = ALIGN(0x8); + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } > REGION_INIT_ARRAY AT> REGION_TEXT + + .fini_array : { + . = ALIGN(0x8); + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + . = ALIGN(0x8); + } > REGION_FINI_ARRAY AT> REGION_TEXT + + .ARM.exidx : { + __exidx_start = .; + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + __exidx_end = .; + } > REGION_ARM_EXIDX AT> REGION_ARM_EXIDX + + .ARM.extab : { + . = ALIGN(0x8); + KEEP (*(.ARM.extab* .gnu.linkonce.armextab.*)) + . = ALIGN(0x8); + } > REGION_ARM_EXTAB AT> REGION_ARM_EXTAB + + __etext = .; + + .data : { + __data_load__ = LOADADDR (.data); + __data_start__ = .; + KEEP (*(.data)) + KEEP (*(.data*)) + . = ALIGN (8); + __data_end__ = .; + } > REGION_DATA AT> REGION_TEXT + + .bss : { + __bss_start__ = .; + *(.shbss) + KEEP (*(.bss)) + *(.bss.*) + *(COMMON) + . = ALIGN (8); + __bss_end__ = .; + } > REGION_BSS AT> REGION_BSS + + .noinit : { + /* place all symbols in input sections that start with .noinit */ + KEEP(*(*.noinit*)) + . = ALIGN (8); + } > REGION_NOINIT AT> REGION_NOINIT + + .heap : { + __heap_start__ = .; + end = __heap_start__; + _end = end; + __end = end; + KEEP (*(.heap)) + __heap_end__ = .; + __HeapLimit = __heap_end__; + } > REGION_HEAP AT> REGION_HEAP + + .stack (NOLOAD) : ALIGN(0x8) { + _stack = .; + KEEP(*(.stack)) + } > REGION_STACK AT> REGION_STACK + + .BCRConfig : + { + KEEP(*(.BCRConfig)) + } > BCR_CONFIG + + .BSLConfig : + { + KEEP(*(.BSLConfig)) + } > BSL_CONFIG + + __StackTop = ORIGIN(REGION_STACK) + LENGTH(REGION_STACK); + PROVIDE(__stack = __StackTop); +} diff --git a/myapps/blinky/empty.map b/myapps/blinky/empty.map new file mode 100644 index 0000000..58d21f1 --- /dev/null +++ b/myapps/blinky/empty.map @@ -0,0 +1,377 @@ +Archive member included to satisfy reference by file (symbol) + +/home/ajit/work/ti/msp/mspm0-sdk/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a(dl_common.o) + ti_msp_dl_config.obj (DL_Common_delayCycles) +/usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + startup_mspm0g350x_gcc.obj (__libc_init_array) +/usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + startup_mspm0g350x_gcc.obj (memset) +/usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) + startup_mspm0g350x_gcc.obj (memcpy) + +There are no discarded input sections + +Memory Configuration + +Name Origin Length Attributes +FLASH 0x00000000 0x00020000 xr +SRAM 0x20200000 0x00008000 xrw +BCR_CONFIG 0x41c00000 0x000000ff r +BSL_CONFIG 0x41c00100 0x00000080 r +*default* 0x00000000 0xffffffff + +Linker script and memory map + +LOAD empty.obj +LOAD ti_msp_dl_config.obj +LOAD startup_mspm0g350x_gcc.obj +LOAD /home/ajit/work/ti/msp/mspm0-sdk/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a + 0x00000000 _Min_Heap_Size = 0x0 + 0x00000080 _Min_Stack_Size = 0x80 + 0x00000000 PROVIDE (_intvecs_base_address = DEFINED (_intvecs_base_address)?_intvecs_base_address:0x0) + +.intvecs 0x00000000 0xc0 + *(.intvecs) + .intvecs 0x00000000 0xc0 startup_mspm0g350x_gcc.obj + 0x00000000 interruptVectors + 0x20200000 PROVIDE (_vtable_base_address = DEFINED (_vtable_base_address)?_vtable_base_address:0x20200000) + +.vtable + *(.vtable) + +.text 0x000000c0 0x2b0 + CREATE_OBJECT_SYMBOLS + *(.text) + .text 0x000000c0 0x0 empty.obj + .text 0x000000c0 0x0 ti_msp_dl_config.obj + .text 0x000000c0 0x0 startup_mspm0g350x_gcc.obj + .text 0x000000c0 0x0 /home/ajit/work/ti/msp/mspm0-sdk/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a(dl_common.o) + .text 0x000000c0 0x48 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + 0x000000c0 __libc_init_array + .text 0x00000108 0xa8 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + 0x00000108 memset + .text 0x000001b0 0x8c /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) + 0x000001b0 memcpy + 0x00000240 . = ALIGN (0x8) + *fill* 0x0000023c 0x4 + *(.text.*) + .text.startup.main + 0x00000240 0x8 empty.obj + 0x00000240 main + .text.SYSCFG_DL_initPower + 0x00000248 0x34 ti_msp_dl_config.obj + 0x00000248 SYSCFG_DL_initPower + .text.SYSCFG_DL_GPIO_init + 0x0000027c 0x4 ti_msp_dl_config.obj + 0x0000027c SYSCFG_DL_GPIO_init + .text.SYSCFG_DL_SYSCTL_init + 0x00000280 0x50 ti_msp_dl_config.obj + 0x00000280 SYSCFG_DL_SYSCTL_init + .text.SYSCFG_DL_init + 0x000002d0 0x10 ti_msp_dl_config.obj + 0x000002d0 SYSCFG_DL_init + .text.Default_Handler + 0x000002e0 0x4 startup_mspm0g350x_gcc.obj + 0x000002e0 TIMG6_IRQHandler + 0x000002e0 TIMG8_IRQHandler + 0x000002e0 I2C0_IRQHandler + 0x000002e0 HardFault_Handler + 0x000002e0 SysTick_Handler + 0x000002e0 PendSV_Handler + 0x000002e0 NMI_Handler + 0x000002e0 I2C1_IRQHandler + 0x000002e0 UART1_IRQHandler + 0x000002e0 TIMA1_IRQHandler + 0x000002e0 UART0_IRQHandler + 0x000002e0 ADC0_IRQHandler + 0x000002e0 SPI1_IRQHandler + 0x000002e0 TIMG0_IRQHandler + 0x000002e0 ADC1_IRQHandler + 0x000002e0 GROUP1_IRQHandler + 0x000002e0 RTC_IRQHandler + 0x000002e0 GROUP0_IRQHandler + 0x000002e0 UART2_IRQHandler + 0x000002e0 Default_Handler + 0x000002e0 SVC_Handler + 0x000002e0 TIMG12_IRQHandler + 0x000002e0 DAC0_IRQHandler + 0x000002e0 TIMG7_IRQHandler + 0x000002e0 SPI0_IRQHandler + 0x000002e0 AES_IRQHandler + 0x000002e0 DMA_IRQHandler + 0x000002e0 TIMA0_IRQHandler + 0x000002e0 UART3_IRQHandler + 0x000002e0 CANFD0_IRQHandler + .text.Reset_Handler + 0x000002e4 0x78 startup_mspm0g350x_gcc.obj + 0x000002e4 Reset_Handler + .text.initStub + 0x0000035c 0x4 startup_mspm0g350x_gcc.obj + 0x0000035c _init + 0x0000035c initStub + .text.DL_Common_delayCycles + 0x00000360 0xc /home/ajit/work/ti/msp/mspm0-sdk/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a(dl_common.o) + 0x00000360 DL_Common_delayCycles + 0x00000370 . = ALIGN (0x8) + *fill* 0x0000036c 0x4 + *(.ctors) + 0x00000370 . = ALIGN (0x8) + *(.dtors) + 0x00000370 . = ALIGN (0x8) + *(.init) + 0x00000370 . = ALIGN (0x8) + *(.fini*) + 0x00000370 . = ALIGN (0x8) + +.glue_7 0x00000370 0x0 + .glue_7 0x00000370 0x0 linker stubs + +.glue_7t 0x00000370 0x0 + .glue_7t 0x00000370 0x0 linker stubs + +.vfp11_veneer 0x00000370 0x0 + .vfp11_veneer 0x00000370 0x0 linker stubs + +.v4_bx 0x00000370 0x0 + .v4_bx 0x00000370 0x0 linker stubs + +.iplt 0x00000370 0x0 + .iplt 0x00000370 0x0 empty.obj + +.rel.dyn 0x00000370 0x0 + .rel.iplt 0x00000370 0x0 empty.obj + +.ramfunc 0x20200000 0x0 load address 0x00000370 + 0x00000370 __ramfunct_load__ = LOADADDR (.ramfunc) + 0x20200000 __ramfunct_start__ = . + *(.ramfunc) + 0x20200000 . = ALIGN (0x8) + 0x20200000 __ramfunct_end__ = . + +.rodata 0x00000370 0x0 + *(.rodata) + 0x00000370 . = ALIGN (0x8) + *(.rodata.*) + 0x00000370 . = ALIGN (0x8) + +.preinit_array 0x00000370 0x0 + 0x00000370 PROVIDE (__preinit_array_start = .) + *(.preinit_array*) + 0x00000370 PROVIDE (__preinit_array_end = .) + +.init_array 0x00000370 0x0 + 0x00000370 . = ALIGN (0x8) + 0x00000370 PROVIDE (__init_array_start = .) + *(SORT_BY_NAME(.init_array.*)) + *(.init_array*) + 0x00000370 PROVIDE (__init_array_end = .) + +.fini_array 0x00000370 0x0 + 0x00000370 . = ALIGN (0x8) + [!provide] PROVIDE (__fini_array_start = .) + *(SORT_BY_NAME(.fini_array.*)) + *(.fini_array*) + [!provide] PROVIDE (__fini_array_end = .) + 0x00000370 . = ALIGN (0x8) + +.ARM.exidx 0x00000370 0x0 + 0x00000370 __exidx_start = . + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + 0x00000370 __exidx_end = . + +.ARM.extab 0x00000370 0x0 + 0x00000370 . = ALIGN (0x8) + *(.ARM.extab* .gnu.linkonce.armextab.*) + 0x00000370 . = ALIGN (0x8) + 0x00000370 __etext = . + +.data 0x20200000 0x0 load address 0x00000370 + 0x00000370 __data_load__ = LOADADDR (.data) + 0x20200000 __data_start__ = . + *(.data) + .data 0x20200000 0x0 empty.obj + .data 0x20200000 0x0 ti_msp_dl_config.obj + .data 0x20200000 0x0 startup_mspm0g350x_gcc.obj + .data 0x20200000 0x0 /home/ajit/work/ti/msp/mspm0-sdk/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a(dl_common.o) + .data 0x20200000 0x0 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + .data 0x20200000 0x0 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + .data 0x20200000 0x0 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) + *(.data*) + 0x20200000 . = ALIGN (0x8) + 0x20200000 __data_end__ = . + +.igot.plt 0x20200000 0x0 load address 0x00000370 + .igot.plt 0x20200000 0x0 empty.obj + +.bss 0x20200000 0x0 + 0x20200000 __bss_start__ = . + *(.shbss) + *(.bss) + .bss 0x20200000 0x0 empty.obj + .bss 0x20200000 0x0 ti_msp_dl_config.obj + .bss 0x20200000 0x0 startup_mspm0g350x_gcc.obj + .bss 0x20200000 0x0 /home/ajit/work/ti/msp/mspm0-sdk/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a(dl_common.o) + .bss 0x20200000 0x0 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + .bss 0x20200000 0x0 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + .bss 0x20200000 0x0 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) + *(.bss.*) + *(COMMON) + 0x20200000 . = ALIGN (0x8) + 0x20200000 __bss_end__ = . + +.noinit 0x20200000 0x0 + *(*.noinit*) + 0x20200000 . = ALIGN (0x8) + +.heap 0x20200000 0x0 + 0x20200000 __heap_start__ = . + 0x20200000 end = __heap_start__ + 0x20200000 _end = end + 0x20200000 __end = end + *(.heap) + 0x20200000 __heap_end__ = . + 0x20200000 __HeapLimit = __heap_end__ + +.stack 0x20200000 0x0 + 0x20200000 _stack = . + *(.stack) + +.BCRConfig + *(.BCRConfig) + +.BSLConfig + *(.BSLConfig) + 0x20208000 __StackTop = (ORIGIN (REGION_STACK) + LENGTH (REGION_STACK)) + [!provide] PROVIDE (__stack = __StackTop) +LOAD /usr/lib/gcc/arm-none-eabi/14.2.1/thumb/nofp/libgcc.a +LOAD /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a +LOAD /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libm.a +START GROUP +LOAD /usr/lib/gcc/arm-none-eabi/14.2.1/thumb/nofp/libgcc.a +LOAD /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a +END GROUP +START GROUP +LOAD /usr/lib/gcc/arm-none-eabi/14.2.1/thumb/nofp/libgcc.a +LOAD /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a +LOAD /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libnosys.a +END GROUP +START GROUP +LOAD /usr/lib/gcc/arm-none-eabi/14.2.1/thumb/nofp/libgcc.a +LOAD /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a +LOAD /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libnosys.a +END GROUP +LOAD /home/ajit/work/ti/msp/mspm0-sdk/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a +OUTPUT(empty.out elf32-littlearm) +LOAD linker stubs + +.debug_info 0x00000000 0x109bd + .debug_info 0x00000000 0x5525 empty.obj + .debug_info 0x00005525 0x5912 ti_msp_dl_config.obj + .debug_info 0x0000ae37 0x1d9 startup_mspm0g350x_gcc.obj + .debug_info 0x0000b010 0x561b /home/ajit/work/ti/msp/mspm0-sdk/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a(dl_common.o) + .debug_info 0x0001062b 0x10b /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + .debug_info 0x00010736 0x135 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + .debug_info 0x0001086b 0x152 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) + +.debug_abbrev 0x00000000 0x92e + .debug_abbrev 0x00000000 0x174 empty.obj + .debug_abbrev 0x00000174 0x2ca ti_msp_dl_config.obj + .debug_abbrev 0x0000043e 0x140 startup_mspm0g350x_gcc.obj + .debug_abbrev 0x0000057e 0x166 /home/ajit/work/ti/msp/mspm0-sdk/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a(dl_common.o) + .debug_abbrev 0x000006e4 0xc9 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + .debug_abbrev 0x000007ad 0xb7 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + .debug_abbrev 0x00000864 0xca /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) + +.debug_aranges 0x00000000 0x108 + .debug_aranges + 0x00000000 0x20 empty.obj + .debug_aranges + 0x00000020 0x38 ti_msp_dl_config.obj + .debug_aranges + 0x00000058 0x30 startup_mspm0g350x_gcc.obj + .debug_aranges + 0x00000088 0x20 /home/ajit/work/ti/msp/mspm0-sdk/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a(dl_common.o) + .debug_aranges + 0x000000a8 0x20 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + .debug_aranges + 0x000000c8 0x20 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + .debug_aranges + 0x000000e8 0x20 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) + +.debug_rnglists + 0x00000000 0x96 + .debug_rnglists + 0x00000000 0x13 empty.obj + .debug_rnglists + 0x00000013 0x64 ti_msp_dl_config.obj + .debug_rnglists + 0x00000077 0x1f startup_mspm0g350x_gcc.obj + +.debug_line 0x00000000 0x12c8 + .debug_line 0x00000000 0x32b empty.obj + .debug_line 0x0000032b 0x569 ti_msp_dl_config.obj + .debug_line 0x00000894 0x15e startup_mspm0g350x_gcc.obj + .debug_line 0x000009f2 0x425 /home/ajit/work/ti/msp/mspm0-sdk/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a(dl_common.o) + .debug_line 0x00000e17 0x105 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + .debug_line 0x00000f1c 0x1c1 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + .debug_line 0x000010dd 0x1eb /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) + +.debug_str 0x00000000 0x231f + .debug_str 0x00000000 0x231f empty.obj + 0x1a63 (size before relaxing) + .debug_str 0x0000231f 0x1ee4 ti_msp_dl_config.obj + .debug_str 0x0000231f 0x2d3 startup_mspm0g350x_gcc.obj + .debug_str 0x0000231f 0x1b26 /home/ajit/work/ti/msp/mspm0-sdk/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a(dl_common.o) + .debug_str 0x0000231f 0x1f7 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + .debug_str 0x0000231f 0x1aa /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + .debug_str 0x0000231f 0x1c7 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) + +.comment 0x00000000 0xc5 + .comment 0x00000000 0xc5 empty.obj + 0x27 (size before relaxing) + .comment 0x000000c5 0x27 ti_msp_dl_config.obj + .comment 0x000000c5 0x27 startup_mspm0g350x_gcc.obj + .comment 0x000000c5 0x7a /home/ajit/work/ti/msp/mspm0-sdk/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a(dl_common.o) + .comment 0x000000c5 0x27 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + .comment 0x000000c5 0x27 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + .comment 0x000000c5 0x27 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) + +.ARM.attributes + 0x00000000 0x2c + .ARM.attributes + 0x00000000 0x2c empty.obj + .ARM.attributes + 0x0000002c 0x2c ti_msp_dl_config.obj + .ARM.attributes + 0x00000058 0x2c startup_mspm0g350x_gcc.obj + .ARM.attributes + 0x00000084 0x2b /home/ajit/work/ti/msp/mspm0-sdk/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a(dl_common.o) + .ARM.attributes + 0x000000af 0x2c /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + .ARM.attributes + 0x000000db 0x2c /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + .ARM.attributes + 0x00000107 0x2c /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) + +.debug_frame 0x00000000 0x17c + .debug_frame 0x00000000 0x28 empty.obj + .debug_frame 0x00000028 0x60 ti_msp_dl_config.obj + .debug_frame 0x00000088 0x48 startup_mspm0g350x_gcc.obj + .debug_frame 0x000000d0 0x20 /home/ajit/work/ti/msp/mspm0-sdk/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a(dl_common.o) + .debug_frame 0x000000f0 0x2c /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + .debug_frame 0x0000011c 0x30 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + .debug_frame 0x0000014c 0x30 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) + +.debug_loclists + 0x00000000 0x5c6 + .debug_loclists + 0x00000000 0xdf ti_msp_dl_config.obj + .debug_loclists + 0x000000df 0x5a /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + .debug_loclists + 0x00000139 0x1c6 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + .debug_loclists + 0x000002ff 0x2c7 /usr/lib/gcc/arm-none-eabi/14.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) + +.debug_ranges 0x00000000 0x10 + .debug_ranges 0x00000000 0x10 /home/ajit/work/ti/msp/mspm0-sdk/source/ti/driverlib/lib/gcc/m0p/mspm0g1x0x_g3x0x/driverlib.a(dl_common.o) diff --git a/myapps/blinky/empty.obj b/myapps/blinky/empty.obj new file mode 100644 index 0000000000000000000000000000000000000000..eb3a2a1c1932c86a785c8ca9aef987af3012e6e6 GIT binary patch literal 42412 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 + +/* Entry point for the application. */ +extern void SystemInit(void); +extern int main( void ); + +extern uint32_t __data_load__; +extern uint32_t __data_start__; +extern uint32_t __data_end__; +extern uint32_t __ramfunct_load__; +extern uint32_t __ramfunct_start__; +extern uint32_t __ramfunct_end__; +extern uint32_t __bss_start__; +extern uint32_t __bss_end__; +extern uint32_t __StackTop; + +typedef void( *pFunc )( void ); + +/* Forward declaration of the default fault handlers. */ +void Default_Handler(void); +extern void Reset_Handler (void) __attribute__((weak)); +extern void __libc_init_array(void); +extern void _init (void) __attribute__((weak, alias("initStub"))); +void initStub(void){;} + +/* Processor Exceptions */ +extern void NMI_Handler (void) __attribute__((weak, alias("Default_Handler"))); +extern void HardFault_Handler (void) __attribute__((weak, alias("Default_Handler"))); +extern void SVC_Handler (void) __attribute__((weak, alias("Default_Handler"))); +extern void PendSV_Handler (void) __attribute__((weak, alias("Default_Handler"))); +extern void SysTick_Handler (void) __attribute__((weak, alias("Default_Handler"))); + +/* Device Specific Interrupt Handlers */ +extern void GROUP0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void GROUP1_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void TIMG8_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void UART3_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void ADC0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void ADC1_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void CANFD0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void DAC0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void SPI0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void SPI1_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void UART1_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void UART2_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void UART0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void TIMG0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void TIMG6_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void TIMA0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void TIMA1_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void TIMG7_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void TIMG12_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void I2C0_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void I2C1_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void AES_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void RTC_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); +extern void DMA_IRQHandler (void) __attribute__((weak, alias("Default_Handler"))); + + +/* Interrupt vector table. Note that the proper constructs must be placed on this to */ +/* ensure that it ends up at physical address 0x0000.0000 or at the start of */ +/* the program if located at a start address other than 0. */ +void (* const interruptVectors[])(void) __attribute__ ((used)) __attribute__ ((section (".intvecs"))) = +{ + (pFunc)&__StackTop, /* The initial stack pointer */ + Reset_Handler, /* The reset handler */ + NMI_Handler, /* The NMI handler */ + HardFault_Handler, /* The hard fault handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* SVCall handler */ + 0, /* Reserved */ + 0, /* Reserved */ + PendSV_Handler, /* The PendSV handler */ + SysTick_Handler, /* SysTick handler */ + GROUP0_IRQHandler, /* GROUP0 interrupt handler */ + GROUP1_IRQHandler, /* GROUP1 interrupt handler */ + TIMG8_IRQHandler, /* TIMG8 interrupt handler */ + UART3_IRQHandler, /* UART3 interrupt handler */ + ADC0_IRQHandler, /* ADC0 interrupt handler */ + ADC1_IRQHandler, /* ADC1 interrupt handler */ + CANFD0_IRQHandler, /* CANFD0 interrupt handler */ + DAC0_IRQHandler, /* DAC0 interrupt handler */ + 0, /* Reserved */ + SPI0_IRQHandler, /* SPI0 interrupt handler */ + SPI1_IRQHandler, /* SPI1 interrupt handler */ + 0, /* Reserved */ + 0, /* Reserved */ + UART1_IRQHandler, /* UART1 interrupt handler */ + UART2_IRQHandler, /* UART2 interrupt handler */ + UART0_IRQHandler, /* UART0 interrupt handler */ + TIMG0_IRQHandler, /* TIMG0 interrupt handler */ + TIMG6_IRQHandler, /* TIMG6 interrupt handler */ + TIMA0_IRQHandler, /* TIMA0 interrupt handler */ + TIMA1_IRQHandler, /* TIMA1 interrupt handler */ + TIMG7_IRQHandler, /* TIMG7 interrupt handler */ + TIMG12_IRQHandler, /* TIMG12 interrupt handler */ + 0, /* Reserved */ + 0, /* Reserved */ + I2C0_IRQHandler, /* I2C0 interrupt handler */ + I2C1_IRQHandler, /* I2C1 interrupt handler */ + 0, /* Reserved */ + 0, /* Reserved */ + AES_IRQHandler, /* AES interrupt handler */ + 0, /* Reserved */ + RTC_IRQHandler, /* RTC interrupt handler */ + DMA_IRQHandler, /* DMA interrupt handler */ + +}; + +/* Forward declaration of the default fault handlers. */ +/* This is the code that gets called when the processor first starts execution */ +/* following a reset event. Only the absolutely necessary set is performed, */ +/* after which the application supplied entry() routine is called. Any fancy */ +/* actions (such as making decisions based on the reset cause register, and */ +/* resetting the bits in that register) are left solely in the hands of the */ +/* application. */ +void Reset_Handler(void) +{ + uint32_t *pui32Src, *pui32Dest; + uint32_t *bs, *be; + + // + // Copy the data segment initializers from flash to SRAM. + // + pui32Src = &__data_load__; + for(pui32Dest = &__data_start__; pui32Dest < &__data_end__; ) + { + *pui32Dest++ = *pui32Src++; + } + + // + // Copy the ramfunct segment initializers from flash to SRAM. + // + pui32Src = &__ramfunct_load__; + for(pui32Dest = &__ramfunct_start__; pui32Dest < &__ramfunct_end__; ) + { + *pui32Dest++ = *pui32Src++; + } + + // Initialize .bss to zero + bs = &__bss_start__; + be = &__bss_end__; + while (bs < be) + { + *bs = 0; + bs++; + } + + /* + * System initialization routine can be called here, but it's not + * required for MSPM0. + */ + // SystemInit(); + + // + // Initialize virtual tables, along executing init, init_array, constructors + // and preinit_array functions + // + __libc_init_array(); + + // + // Call the application's entry point. + // + main(); + + // + // If we ever return signal Error + // + HardFault_Handler(); +} + +/* This is the code that gets called when the processor receives an unexpected */ +/* interrupt. This simply enters an infinite loop, preserving the system state */ +/* for examination by a debugger. */ +void Default_Handler(void) +{ + /* Enter an infinite loop. */ + while(1) + { + } +} diff --git a/myapps/blinky/startup_mspm0g350x_gcc.obj b/myapps/blinky/startup_mspm0g350x_gcc.obj new file mode 100644 index 0000000000000000000000000000000000000000..4e8bc8900a79650129e7bdddd4d8a774dc86e0d4 GIT binary patch literal 6536 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 x2C7Zpg5O;T!s{gdHL&}~Oh~@pzW^2wuqOZj literal 0 HcmV?d00001 diff --git a/myapps/blinky/ti_msp_dl_config.c b/myapps/blinky/ti_msp_dl_config.c new file mode 100644 index 0000000..eda8bc6 --- /dev/null +++ b/myapps/blinky/ti_msp_dl_config.c @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2023, Texas Instruments Incorporated + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * ============ ti_msp_dl_config.c ============= + * Configured MSPM0 DriverLib module definitions + * + * DO NOT EDIT - This file is generated for the MSPM0G350X + * by the SysConfig tool. + */ + +#include "ti_msp_dl_config.h" + +/* + * ======== SYSCFG_DL_init ======== + * Perform any initialization needed before using any board APIs + */ +SYSCONFIG_WEAK void SYSCFG_DL_init(void) +{ + SYSCFG_DL_initPower(); + SYSCFG_DL_GPIO_init(); + /* Module-Specific Initializations*/ + SYSCFG_DL_SYSCTL_init(); +} + +SYSCONFIG_WEAK void SYSCFG_DL_initPower(void) +{ + DL_GPIO_reset(GPIOA); + DL_GPIO_reset(GPIOB); + + DL_GPIO_enablePower(GPIOA); + DL_GPIO_enablePower(GPIOB); + delay_cycles(POWER_STARTUP_DELAY); +} + +SYSCONFIG_WEAK void SYSCFG_DL_GPIO_init(void) +{ + +} + + +SYSCONFIG_WEAK void SYSCFG_DL_SYSCTL_init(void) +{ + + //Low Power Mode is configured to be SLEEP0 + DL_SYSCTL_setBORThreshold(DL_SYSCTL_BOR_THRESHOLD_LEVEL_0); + + DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE); + /* Set default configuration */ + DL_SYSCTL_disableHFXT(); + DL_SYSCTL_disableSYSPLL(); + DL_SYSCTL_setULPCLKDivider(DL_SYSCTL_ULPCLK_DIV_1); + DL_SYSCTL_setMCLKDivider(DL_SYSCTL_MCLK_DIVIDER_DISABLE); + +} + + diff --git a/myapps/blinky/ti_msp_dl_config.h b/myapps/blinky/ti_msp_dl_config.h new file mode 100644 index 0000000..b6f0d1f --- /dev/null +++ b/myapps/blinky/ti_msp_dl_config.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023, Texas Instruments Incorporated - http://www.ti.com + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * ============ ti_msp_dl_config.h ============= + * Configured MSPM0 DriverLib module declarations + * + * DO NOT EDIT - This file is generated for the MSPM0G350X + * by the SysConfig tool. + */ +#ifndef ti_msp_dl_config_h +#define ti_msp_dl_config_h + +#define CONFIG_MSPM0G350X +#define CONFIG_MSPM0G3507 + +#if defined(__ti_version__) || defined(__TI_COMPILER_VERSION__) +#define SYSCONFIG_WEAK __attribute__((weak)) +#elif defined(__IAR_SYSTEMS_ICC__) +#define SYSCONFIG_WEAK __weak +#elif defined(__GNUC__) +#define SYSCONFIG_WEAK __attribute__((weak)) +#endif + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * ======== SYSCFG_DL_init ======== + * Perform all required MSP DL initialization + * + * This function should be called once at a point before any use of + * MSP DL. + */ + + +/* clang-format off */ + +#define POWER_STARTUP_DELAY (16) + + +#define CPUCLK_FREQ 32000000 + + + +/* clang-format on */ + +void SYSCFG_DL_init(void); +void SYSCFG_DL_initPower(void); +void SYSCFG_DL_GPIO_init(void); +void SYSCFG_DL_SYSCTL_init(void); + + +#ifdef __cplusplus +} +#endif + +#endif /* ti_msp_dl_config_h */ diff --git a/myapps/blinky/ti_msp_dl_config.obj b/myapps/blinky/ti_msp_dl_config.obj new file mode 100644 index 0000000000000000000000000000000000000000..4a62396f7c2ebeb4be92680c9cc1bce8e4eb2b53 GIT binary patch literal 47724 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 REGION_TEXT + + PROVIDE (_vtable_base_address = + DEFINED(_vtable_base_address) ? _vtable_base_address : 0x20200000); + + .vtable (_vtable_base_address) (NOLOAD) : AT (_vtable_base_address) { + KEEP (*(.vtable)) + } > REGION_DATA + + .text : { + CREATE_OBJECT_SYMBOLS + KEEP (*(.text)) + . = ALIGN(0x8); + *(.text.*) + . = ALIGN(0x8); + KEEP (*(.ctors)) + . = ALIGN(0x8); + KEEP (*(.dtors)) + . = ALIGN(0x8); + KEEP (*(.init)) + . = ALIGN(0x8); + KEEP (*(.fini*)) + . = ALIGN(0x8); + } > REGION_TEXT AT> REGION_TEXT + + .ramfunc : { + __ramfunct_load__ = LOADADDR (.ramfunc); + __ramfunct_start__ = .; + *(.ramfunc) + . = ALIGN(0x8); + __ramfunct_end__ = .; + } > REGION_TEXT_RAM AT> REGION_TEXT + + .rodata : { + *(.rodata) + . = ALIGN(0x8); + *(.rodata.*) + . = ALIGN(0x8); + } > REGION_TEXT AT> REGION_TEXT + + .preinit_array : { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)); + PROVIDE_HIDDEN (__preinit_array_end = .); + } > REGION_PREINIT_ARRAY AT> REGION_TEXT + + .init_array : { + . = ALIGN(0x8); + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } > REGION_INIT_ARRAY AT> REGION_TEXT + + .fini_array : { + . = ALIGN(0x8); + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + . = ALIGN(0x8); + } > REGION_FINI_ARRAY AT> REGION_TEXT + + .ARM.exidx : { + __exidx_start = .; + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + __exidx_end = .; + } > REGION_ARM_EXIDX AT> REGION_ARM_EXIDX + + .ARM.extab : { + . = ALIGN(0x8); + KEEP (*(.ARM.extab* .gnu.linkonce.armextab.*)) + . = ALIGN(0x8); + } > REGION_ARM_EXTAB AT> REGION_ARM_EXTAB + + __etext = .; + + .data : { + __data_load__ = LOADADDR (.data); + __data_start__ = .; + KEEP (*(.data)) + KEEP (*(.data*)) + . = ALIGN (8); + __data_end__ = .; + } > REGION_DATA AT> REGION_TEXT + + .bss : { + __bss_start__ = .; + *(.shbss) + KEEP (*(.bss)) + *(.bss.*) + *(COMMON) + . = ALIGN (8); + __bss_end__ = .; + } > REGION_BSS AT> REGION_BSS + + .noinit : { + /* place all symbols in input sections that start with .noinit */ + KEEP(*(*.noinit*)) + . = ALIGN (8); + } > REGION_NOINIT AT> REGION_NOINIT + + .heap : { + __heap_start__ = .; + end = __heap_start__; + _end = end; + __end = end; + KEEP (*(.heap)) + __heap_end__ = .; + __HeapLimit = __heap_end__; + } > REGION_HEAP AT> REGION_HEAP + + .stack (NOLOAD) : ALIGN(0x8) { + _stack = .; + KEEP(*(.stack)) + } > REGION_STACK AT> REGION_STACK + + .BCRConfig : + { + KEEP(*(.BCRConfig)) + } > BCR_CONFIG + + .BSLConfig : + { + KEEP(*(.BSLConfig)) + } > BSL_CONFIG + + __StackTop = ORIGIN(REGION_STACK) + LENGTH(REGION_STACK); + PROVIDE(__stack = __StackTop); +} diff --git a/myapps/empty/src/main.c b/myapps/empty/src/main.c new file mode 100644 index 0000000..21140a9 --- /dev/null +++ b/myapps/empty/src/main.c @@ -0,0 +1,10 @@ + +#include "ti_msp_dl_config.h" + +int main(void) +{ + SYSCFG_DL_init(); + + while (1) { + } +} diff --git a/myapps/empty/ti_msp_dl_config.c b/myapps/empty/ti_msp_dl_config.c new file mode 100644 index 0000000..eda8bc6 --- /dev/null +++ b/myapps/empty/ti_msp_dl_config.c @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2023, Texas Instruments Incorporated + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * ============ ti_msp_dl_config.c ============= + * Configured MSPM0 DriverLib module definitions + * + * DO NOT EDIT - This file is generated for the MSPM0G350X + * by the SysConfig tool. + */ + +#include "ti_msp_dl_config.h" + +/* + * ======== SYSCFG_DL_init ======== + * Perform any initialization needed before using any board APIs + */ +SYSCONFIG_WEAK void SYSCFG_DL_init(void) +{ + SYSCFG_DL_initPower(); + SYSCFG_DL_GPIO_init(); + /* Module-Specific Initializations*/ + SYSCFG_DL_SYSCTL_init(); +} + +SYSCONFIG_WEAK void SYSCFG_DL_initPower(void) +{ + DL_GPIO_reset(GPIOA); + DL_GPIO_reset(GPIOB); + + DL_GPIO_enablePower(GPIOA); + DL_GPIO_enablePower(GPIOB); + delay_cycles(POWER_STARTUP_DELAY); +} + +SYSCONFIG_WEAK void SYSCFG_DL_GPIO_init(void) +{ + +} + + +SYSCONFIG_WEAK void SYSCFG_DL_SYSCTL_init(void) +{ + + //Low Power Mode is configured to be SLEEP0 + DL_SYSCTL_setBORThreshold(DL_SYSCTL_BOR_THRESHOLD_LEVEL_0); + + DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE); + /* Set default configuration */ + DL_SYSCTL_disableHFXT(); + DL_SYSCTL_disableSYSPLL(); + DL_SYSCTL_setULPCLKDivider(DL_SYSCTL_ULPCLK_DIV_1); + DL_SYSCTL_setMCLKDivider(DL_SYSCTL_MCLK_DIVIDER_DISABLE); + +} + + diff --git a/myapps/empty/ti_msp_dl_config.h b/myapps/empty/ti_msp_dl_config.h new file mode 100644 index 0000000..b6f0d1f --- /dev/null +++ b/myapps/empty/ti_msp_dl_config.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023, Texas Instruments Incorporated - http://www.ti.com + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * ============ ti_msp_dl_config.h ============= + * Configured MSPM0 DriverLib module declarations + * + * DO NOT EDIT - This file is generated for the MSPM0G350X + * by the SysConfig tool. + */ +#ifndef ti_msp_dl_config_h +#define ti_msp_dl_config_h + +#define CONFIG_MSPM0G350X +#define CONFIG_MSPM0G3507 + +#if defined(__ti_version__) || defined(__TI_COMPILER_VERSION__) +#define SYSCONFIG_WEAK __attribute__((weak)) +#elif defined(__IAR_SYSTEMS_ICC__) +#define SYSCONFIG_WEAK __weak +#elif defined(__GNUC__) +#define SYSCONFIG_WEAK __attribute__((weak)) +#endif + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * ======== SYSCFG_DL_init ======== + * Perform all required MSP DL initialization + * + * This function should be called once at a point before any use of + * MSP DL. + */ + + +/* clang-format off */ + +#define POWER_STARTUP_DELAY (16) + + +#define CPUCLK_FREQ 32000000 + + + +/* clang-format on */ + +void SYSCFG_DL_init(void); +void SYSCFG_DL_initPower(void); +void SYSCFG_DL_GPIO_init(void); +void SYSCFG_DL_SYSCTL_init(void); + + +#ifdef __cplusplus +} +#endif + +#endif /* ti_msp_dl_config_h */ diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..738e318 --- /dev/null +++ b/readme.md @@ -0,0 +1,11 @@ + + +## TI mspm0 projects + +After cloning, + +``` +cd +git clone https://github.com/TexasInstruments/mspm0-sdk.git +``` +