diff --git a/bsp/lm3s/SConstruct b/bsp/lm3s/SConstruct new file mode 100644 index 0000000000000000000000000000000000000000..edccc757d8cc489102a7c23f348b1d66e4d80d6a --- /dev/null +++ b/bsp/lm3s/SConstruct @@ -0,0 +1,50 @@ +import os +import rtconfig + +RTT_ROOT = os.path.normpath(os.getcwd() + '/../..') +target = 'rtthread-lm3s' + +# search path for C compiler +bsp_path = RTT_ROOT + '/bsp/lm3s' + +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) +env.AppendUnique(CPPPATH = bsp_path) + +Export('env') +Export('RTT_ROOT') +Export('rtconfig') + +objs = SConscript(RTT_ROOT + '/libcpu/SConscript', variant_dir='build/libcpu', duplicate=0) +objs = objs + SConscript(RTT_ROOT + '/src/SConscript', variant_dir='build/src', duplicate=0) +objs = objs + SConscript(RTT_ROOT + '/bsp/lm3s/Libraries/SConscript', variant_dir='build/Libraries', duplicate=0) + +if rtconfig.RT_USING_MINILIBC: + objs = objs + SConscript(RTT_ROOT + '/libc/minilibc/SConscript', variant_dir='build/minilibc', duplicate=0) + +if rtconfig.RT_USING_FINSH: + objs = objs + SConscript(RTT_ROOT + '/finsh/SConscript', variant_dir='build/finsh', duplicate=0) + +if rtconfig.RT_USING_DFS: + objs = objs + SConscript(RTT_ROOT + '/filesystem/dfs/SConscript', variant_dir='build/filesystem', duplicate=0) + +if rtconfig.RT_USING_LWIP: + objs = objs + SConscript(RTT_ROOT + '/net/lwip/SConscript', variant_dir='build/net/lwip', duplicate=0) + +src_bsp = ['application.c', 'startup.c', 'board.c'] + +if rtconfig.RT_USING_DFS: + src_drv = ['sdcard.c'] + +if rtconfig.RT_USING_LWIP: + src_drv += ['luminaryif.c'] + +objs = objs + env.Object(src_bsp + src_drv) + +TARGET = target + '.' + rtconfig.TARGET_EXT +env.Program(TARGET, objs) +env.AddPostAction(TARGET, rtconfig.POST_ACTION) diff --git a/bsp/lm3s/lm3s_rom.ld b/bsp/lm3s/lm3s_rom.ld new file mode 100644 index 0000000000000000000000000000000000000000..b4e1f34ebd74e0146b29ca57ab3df555d91aad00 --- /dev/null +++ b/bsp/lm3s/lm3s_rom.ld @@ -0,0 +1,116 @@ +/* + * linker script for LM3S with GNU ld + * yi.qiu 2009-12-26 modified from Bernard's stm32 version + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + CODE (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 + DATA (rw) : ORIGIN = 0x20000000, LENGTH = 0x00010000 +} +ENTRY(ResetISR) + +SECTIONS +{ + .text : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + . = ALIGN(4); + + . = ALIGN(4); + _etext = .; + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = _etext; + } > CODE = 0 + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >DATA + + __bss_start = .; + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + _estack = .; + + *(.bss.init) + } > DATA + __bss_end = .; + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/lm3s/rtconfig.py b/bsp/lm3s/rtconfig.py new file mode 100644 index 0000000000000000000000000000000000000000..190566216e3af0e95166d4d428b4af48b86dd797 --- /dev/null +++ b/bsp/lm3s/rtconfig.py @@ -0,0 +1,102 @@ +# component options +# finsh shell option +RT_USING_FINSH = True + +# device file system options +RT_USING_DFS = True +RT_USING_DFS_EFSL = True +RT_USING_DFS_ELMFAT = False +RT_USING_DFS_YAFFS2 = False + +# lwip options +RT_USING_LWIP = True + +# rtgui options +RT_USING_RTGUI = False + +# toolchains options +ARCH='arm' +CPU='lm3s' +#PLATFORM = 'gcc' +#EXEC_PATH = 'E:/Program Files/CodeSourcery/Sourcery G++ Lite/bin' +PLATFORM = 'armcc' +EXEC_PATH = 'E:/Keil' +#PLATFORM = 'iar' +#EXEC_PATH = 'E:/Program Files/IAR Systems/Embedded Workbench 5.4/' +BUILD = 'debug' + +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'axf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + + DEVICE = ' -mcpu=cortex-m3 -mthumb' + CFLAGS = DEVICE + ' -Dsourcerygxx' + ' -DRT_USING_MINILIBC' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread-lm3s.map,-cref,-u,ResetISR -T lm3s_rom.ld' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2' + + RT_USING_MINILIBC = True + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --device DARMSTM' + CFLAGS = DEVICE + ' --apcs=interwork' + AFLAGS = DEVICE + LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rtthread-stm32.map --scatter stm32_rom.sct' + + CFLAGS += ' -I' + EXEC_PATH + '/ARM/RV31/INC' + LFLAGS += ' --libpath ' + EXEC_PATH + '/ARM/RV31/LIB' + + EXEC_PATH += '/arm/bin40/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + RT_USING_MINILIBC = False + if RT_USING_FINSH: + LFLAGS += ' --keep __fsym_* --keep __vsym_*' + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iar': + # toolchains + CC = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = ' --cpu DARMSTM --thumb' + + CFLAGS = '' + AFLAGS = '' + LFLAGS = ' --config stm32f10x_flash.icf' + + EXEC_PATH += '/arm/bin/' + RT_USING_MINILIBC = False + POST_ACTION = ''