From 73beced22a2677fdc8e790b6d923f0fc804d385b Mon Sep 17 00:00:00 2001 From: Peng Fan Date: Wed, 17 Jul 2013 13:37:31 +0800 Subject: SEP6200 Support --- bsp/sep6200/SConscript | 12 ++ bsp/sep6200/SConstruct | 33 ++++++ bsp/sep6200/application/SConscript | 9 ++ bsp/sep6200/application/application.c | 93 +++++++++++++++ bsp/sep6200/application/startup.c | 121 ++++++++++++++++++++ bsp/sep6200/board.h | 25 ++++ bsp/sep6200/drivers/SConscript | 19 +++ bsp/sep6200/drivers/board.c | 173 ++++++++++++++++++++++++++++ bsp/sep6200/rtconfig.h | 210 ++++++++++++++++++++++++++++++++++ bsp/sep6200/rtconfig.py | 57 +++++++++ bsp/sep6200/sep6200.ld | 86 ++++++++++++++ 11 files changed, 838 insertions(+) create mode 100644 bsp/sep6200/SConscript create mode 100644 bsp/sep6200/SConstruct create mode 100644 bsp/sep6200/application/SConscript create mode 100644 bsp/sep6200/application/application.c create mode 100644 bsp/sep6200/application/startup.c create mode 100644 bsp/sep6200/board.h create mode 100644 bsp/sep6200/drivers/SConscript create mode 100644 bsp/sep6200/drivers/board.c create mode 100644 bsp/sep6200/rtconfig.h create mode 100644 bsp/sep6200/rtconfig.py create mode 100644 bsp/sep6200/sep6200.ld (limited to 'bsp') diff --git a/bsp/sep6200/SConscript b/bsp/sep6200/SConscript new file mode 100644 index 0000000000..0992612410 --- /dev/null +++ b/bsp/sep6200/SConscript @@ -0,0 +1,12 @@ +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/sep6200/SConstruct b/bsp/sep6200/SConstruct new file mode 100644 index 0000000000..7c6bc8e032 --- /dev/null +++ b/bsp/sep6200/SConstruct @@ -0,0 +1,33 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +from building import * + +TARGET = 'rtthread-sep6200.' + rtconfig.TARGET_EXT + +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.Replace(LINKCOM = ['$LINK $SOURCES $LINKFLAGS -o $TARGET']) +Export('RTT_ROOT') +Export('rtconfig') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT) + +# build program +env.Program(TARGET, objs) + +# end building +EndBuilding(TARGET) diff --git a/bsp/sep6200/application/SConscript b/bsp/sep6200/application/SConscript new file mode 100644 index 0000000000..f0c03fb280 --- /dev/null +++ b/bsp/sep6200/application/SConscript @@ -0,0 +1,9 @@ +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd, str(Dir('#'))] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/sep6200/application/application.c b/bsp/sep6200/application/application.c new file mode 100644 index 0000000000..2fbb1b803e --- /dev/null +++ b/bsp/sep6200/application/application.c @@ -0,0 +1,93 @@ +/* + * File : application.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2007-11-20 Yi.Qiu add rtgui application + * 2008-6-28 Bernard no rtgui init + * 2013-7-14 Peng Fan modified from mini4020 + */ + +/** + * @addtogroup sep6200 + */ + +/*@{*/ + +#include "board.h" +#include + +#ifdef RT_USING_DFS +#include +#include +#include +#include +#endif + +#ifdef RT_USING_RTGUI +#include +extern void radio_rtgui_init(void); +#endif + +#define RT_INIT_THREAD_STACK_SIZE (2*1024) + +void rt_init_thread_entry(void *parameter) +{ + while(1){ + rt_thread_sleep(200); + rt_hw_console_output("init thread\n"); + } +} + +void rt_test1_thread_entry(void *parameter) +{ + while(1){ + rt_thread_sleep(800); + rt_hw_console_output("test1 thread\n"); + } +} + +void rt_test2_thread_entry(void *parameter) +{ + while(1){ + rt_thread_sleep(300); + rt_hw_console_output("test2 thread\n"); + } +} + +int rt_application_init(void) +{ + rt_thread_t init_thread; + rt_thread_t test1_thread; + rt_thread_t test2_thread; + + init_thread = rt_thread_create("init", + rt_init_thread_entry, RT_NULL, + RT_INIT_THREAD_STACK_SIZE, 8, 20); + + test1_thread = rt_thread_create("test1", + rt_test1_thread_entry, RT_NULL, + 512, 200, 20); + test2_thread = rt_thread_create("test2", + rt_test2_thread_entry, RT_NULL, + 512, 200, 20); + + if (init_thread != RT_NULL) + rt_thread_startup(init_thread); + + if (test1_thread != RT_NULL) + rt_thread_startup(test1_thread); + + if (test2_thread != RT_NULL) + rt_thread_startup(test2_thread); + + return 0; +} + +/*@}*/ diff --git a/bsp/sep6200/application/startup.c b/bsp/sep6200/application/startup.c new file mode 100644 index 0000000000..6302c62512 --- /dev/null +++ b/bsp/sep6200/application/startup.c @@ -0,0 +1,121 @@ +/* + * File : application.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2009 - 2012, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2013-7-14 Peng Fan Modified from mini4020 + */ + +#include +#include + +#include +#include +#ifdef RT_USING_FINSH +#include +#endif + +#ifdef RT_USING_LWIP +#include +#include +#endif + +#include + +rt_uint8_t _irq_stack_start[1024]; +rt_uint8_t _fiq_stack_start[1024]; +rt_uint8_t _undefined_stack_start[512]; +rt_uint8_t _abort_stack_start[512]; +rt_uint8_t _priv_stack_start[4096]; SECTION(".nobss"); +extern unsigned char __bss_start; +extern unsigned char __bss_end; + + +extern void rt_hw_board_init(void); +extern void rt_application_init(void); +extern void finsh_system_init(void); +extern void sd_init(void); + +void rtthread_startup() +{ + /* init hardware interrupt */ + rt_hw_interrupt_init(); + + /* init board */ + rt_hw_board_init(); + + /* show version */ + rt_show_version(); + + /* init tick */ + rt_system_tick_init(); + + /* init kernel object */ + rt_system_object_init(); + + /* init timer system */ + rt_system_timer_init(); + + /* init heap memory system */ + rt_system_heap_init(&__bss_end, (void*)0x45000000); + + /* init scheduler system */ + rt_system_scheduler_init(); + +#ifdef RT_USING_DEVICE + +#ifdef RT_USING_DFS + rt_hw_sdcard_init(); +#endif + +#ifdef RT_USING_LWIP + eth_system_device_init(); + rt_hw_dm9000_init(); +#endif + + /*init all registed devices */ + rt_device_init_all(); +#endif + + /* init application */ + rt_application_init(); + +#ifdef RT_USING_FINSH + /* init finsh */ + finsh_system_init(); +#ifdef RT_USING_DEVICE + finsh_set_device("uart0"); +#endif +#endif + + rt_system_timer_thread_init(); + + /* init idle thread */ + rt_thread_idle_init(); + + /* start scheduler */ + rt_system_scheduler_start(); + + /* never reach here */ + return ; + +} + +int main() +{ + rt_uint32_t UNUSED level; + + /* disable interrupt first */ + level = rt_hw_interrupt_disable(); + + /* startup RT-Thread RTOS */ + rtthread_startup(); + + return 0; +} diff --git a/bsp/sep6200/board.h b/bsp/sep6200/board.h new file mode 100644 index 0000000000..deaf15d16f --- /dev/null +++ b/bsp/sep6200/board.h @@ -0,0 +1,25 @@ +/* + * File : board.h + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2009 - 2012, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2006-10-08 Bernard add board.h to this bsp + * 2010-10-5 Wangmeng sep4020 implemention + * 2013-7-14 Peng Fan Modified from sep4020 + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include + +void rt_hw_board_init(void); +void rt_hw_sdcard_init(void); + +#endif diff --git a/bsp/sep6200/drivers/SConscript b/bsp/sep6200/drivers/SConscript new file mode 100644 index 0000000000..b9eed3f700 --- /dev/null +++ b/bsp/sep6200/drivers/SConscript @@ -0,0 +1,19 @@ +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') + +# remove no need file. +if GetDepend('RT_USING_LWIP') == False: + SrcRemove(src, 'dm9161.c') +if GetDepend('RT_USING_DFS') == False: + SrcRemove(src, 'sdcard.c') +if GetDepend('RT_USING_RTGUI') == False: + SrcRemove(src, 'lcd.c') + SrcRemove(src, 'lcdc.c') + +CPPPATH = [cwd] + +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/sep6200/drivers/board.c b/bsp/sep6200/drivers/board.c new file mode 100644 index 0000000000..e71449809c --- /dev/null +++ b/bsp/sep6200/drivers/board.c @@ -0,0 +1,173 @@ +/* + * File : board.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006 - 2012 RT-Thread Develop Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://openlab.rt-thread.com/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2013-7-14 Peng Fan sep6200 implementation + */ + +#include +#include + +#include + +#include + +void rt_hw_serial_putc(const char c); + +#define UART0 ((struct uartport *)SEP6200_UART0_BASE) + +struct rt_device uart0_device; +struct serial_int_rx uart0_int_rx; +struct serial_device uart0 = +{ + UART0, + &uart0_int_rx, + RT_NULL +}; + +/* + * This function will handle rtos timer + */ +void rt_timer_handler(int vector, void *param) +{ + rt_uint32_t clear_int; + + /* clear timer interrupt */ + if (read_reg(SEP6200_TIMER_T2IMSR) & 0x1) + clear_int = read_reg(SEP6200_TIMER_T2ISCR); + + rt_tick_increase(); +} + +/* + * This function will handle serial interrupt + */ +#if 1 +void rt_serial_handler(int vector, void *param) +{ + rt_uint32_t num; + switch (vector) { + case INTSRC_UART0: + + /*No interrupt*/ + if ((*(RP)SEP6200_UART0_IIR & 0x1)) + return; + + /*Get the serial interrupt num*/ + num = (*(RP)SEP6200_UART0_IIR >> 1) & 0x7; + + /*Receive or timeout*/ + if ((num == 6) || (num == 2)) + rt_hw_serial_isr(&uart0_device); + break; + /*1,2,3 not implemented now, do in future*/ + case INTSRC_UART1: + break; + case INTSRC_UART2: + break; + case INTSRC_UART3: + break; + } +} +#endif + +/* + * This function will init timer2 for system ticks + */ + +#define BUS4_FREQ 320000000UL +#define TIMER_CLK BUS4_FREQ +#define HZ 100 +void rt_hw_timer_init(void) +{ + *(RP)SEP6200_TIMER_T2LCR = (TIMER_CLK + HZ / 2) / HZ; + *(RP)SEP6200_TIMER_T2CR = 0x6; + + rt_hw_interrupt_install(INTSRC_TIMER1, rt_timer_handler, RT_NULL, "timer"); + rt_hw_interrupt_umask(INTSRC_TIMER1); + + /* start the timer */ + *(RP)SEP6200_TIMER_T2CR |= 0x1; +} + +/* + * This function will init uart + */ +#define UART_CLK 60000000UL +void rt_hw_uart_init(void) +{ + const rt_uint32_t uartclk = UART_CLK; + + *(RP)(SEP6200_UART0_LCR) = 0x83; + *(RP)(SEP6200_UART0_DLBH) = (uartclk/16/115200) >> 8; + *(RP)(SEP6200_UART0_DLBL) = (uartclk/16/115200) & 0xff; + *(RP)(SEP6200_UART0_LCR) = 0x83 & (~(0x1 << 7)); + + *(RP)(SEP6200_UART0_FCR) = 0x0; + *(RP)(SEP6200_UART0_MCR) = 0x0; + + *(RP)(SEP6200_UART0_IER) = 0x0; + /* Enable rx interrupt*/ + *(RP)(SEP6200_UART0_IER) |= 0x1; + /* Disable tx interrupt*/ + *(RP)(SEP6200_UART0_IER) &= ~(0x1 << 1); + + rt_hw_interrupt_install(INTSRC_UART0, rt_serial_handler, RT_NULL, "uart0"); + rt_hw_interrupt_umask(INTSRC_UART0); + + rt_hw_serial_register(&uart0_device, "uart0", + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + &uart0); +} + +void rt_hw_board_init(void) +{ + int i = 0; + rt_hw_uart_init(); + rt_hw_timer_init(); +} + +/* + * Write one char to serial, must not trigger interrupt + */ +void rt_hw_serial_putc(const char c) +{ + if (c == '\n') + rt_hw_serial_putc('\r'); + + while (!((*(RP)SEP6200_UART0_LSR) & 0x40)); + + *(RP)(SEP6200_UART0_TXFIFO) = c; +} + +void printhex(unsigned int data) +{ + int i = 0,a = 0; + for (i = 0; i < 8; i++) { + a = (data>>(32-(i+1)*4))&0xf; + if (((a<=9)&&(a>=0))) + rt_hw_serial_putc(a + 0x30); + else if ((a <= 0xf) && (a >= 0xa)) + rt_hw_serial_putc(a-0xa+0x61); + } + rt_hw_serial_putc('\n'); +} + +/** +* This function is used by rt_kprintf to display a string on console. +* +* @param str the displayed string^M +*/ +void rt_hw_console_output(const char *str) +{ + while (*str) { + rt_hw_serial_putc(*str++); + } +} diff --git a/bsp/sep6200/rtconfig.h b/bsp/sep6200/rtconfig.h new file mode 100644 index 0000000000..b3f260531b --- /dev/null +++ b/bsp/sep6200/rtconfig.h @@ -0,0 +1,210 @@ +/* RT-Thread config file */ +#ifndef __RTTHREAD_CFG_H__ +#define __RTTHREAD_CFG_H__ + +#define RT_DEBUG +//#define RT_DEBUG_IRQ 1 +//#define RT_DEBUG_TIMER 1 + +//#define RT_DEBUG_MEM 1 +//#define RT_DEBUG_MEMHEAP 1 +//#define RT_DEBUG_MODULE 1 +//#define RT_DEBUG_SCHEDULER 1 +//#define RT_DEBUG_SLAB 1 +//#define RT_DEBUG_THREAD 1 +//#define RT_DEBUG_IPC 1 + +/* RT_NAME_MAX*/ +#define RT_NAME_MAX 8 + +/* RT_ALIGN_SIZE*/ +#define RT_ALIGN_SIZE 4 + +/* PRIORITY_MAX */ +#define RT_THREAD_PRIORITY_MAX 256 + +/* Tick per Second */ +#define RT_TICK_PER_SECOND 100 + +/* SECTION: RT_DEBUG */ +/* Thread Debug */ +#define RT_DEBUG +/* #define RT_THREAD_DEBUG */ + +#define RT_USING_OVERFLOW_CHECK + +/* Using Hook */ +#define RT_USING_HOOK + +/* Using Software Timer */ +//#define RT_USING_TIMER_SOFT +#define RT_TIMER_THREAD_PRIO 8 +#define RT_TIMER_THREAD_STACK_SIZE 512 +#define RT_TIMER_TICK_PER_SECOND 10 + +/* SECTION: IPC */ +/* Using Semaphore */ +#define RT_USING_SEMAPHORE + +/* Using Mutex */ +#define RT_USING_MUTEX + +/* Using Event */ +#define RT_USING_EVENT + +/* Using MailBox */ +#define RT_USING_MAILBOX + +/* Using Message Queue */ +#define RT_USING_MESSAGEQUEUE + +/* SECTION: Memory Management */ +/* Using Memory Pool Management*/ +#define RT_USING_MEMPOOL + +/* Using Dynamic Heap Management */ +#define RT_USING_HEAP + +/* Using Small MM */ +/* #define RT_USING_SMALL_MEM */ + +/* Using SLAB Allocator */ +#define RT_USING_SLAB + +#define RT_USING_CONSOLE +/* SECTION: Device System */ +/* Using Device System */ +#define RT_USING_DEVICE + +/* SECTION: Console options */ +/* the buffer size of console */ +#define RT_CONSOLEBUF_SIZE 128 + +/* SECTION: finsh, a C-Express shell */ +/* Using FinSH as Shell*/ +#define RT_USING_FINSH +#define FINSH_USING_SYMTAB +#define FINSH USING DESCRIPTION + +/* SECTION: a runtime libc library */ +/* a runtime libc library */ +/* #define RT_USING_NEWLIB */ + +/* SECTION: a mini libc */ + +/* SECTION: C++ support */ +/* Using C++ support */ +/* #define RT_USING_CPLUSPLUS */ + +/* SECTION: Device filesystem support */ +/* using DFS support */ +//#define RT_USING_DFS //fanpeng +//#define RT_USING_DFS_ELMFAT //fanpeng +/* #define RT_USING_DFS_YAFFS2 */ + +/* #define DFS_USING_WORKDIR */ + +/* the max number of mounted filesystem */ +#define DFS_FILESYSTEMS_MAX 2 +/* the max number of opened files */ +#define DFS_FD_MAX 16 +/* the max number of cached sector */ +#define DFS_CACHE_MAX_NUM 4 + +/* SECTION: lwip, a lighwight TCP/IP protocol stack */ +/* Using lighweight TCP/IP protocol stack */ +//#define RT_USING_LWIP +//#define RT_LWIP_DNS + +/* Trace LwIP protocol */ +/* #define RT_LWIP_DEBUG */ + +/* Enable ICMP protocol */ +#define RT_LWIP_ICMP + +/* Enable IGMP protocol */ +#define RT_LWIP_IGMP + +/* Enable UDP protocol */ +#define RT_LWIP_UDP + +/* Enable TCP protocol */ +#define RT_LWIP_TCP + +/* the number of simulatenously active TCP connections*/ +#define RT_LWIP_TCP_PCB_NUM 5 + +/* TCP sender buffer space */ +#define RT_LWIP_TCP_SND_BUF 1024*10 + +/* TCP receive window. */ +#define RT_LWIP_TCP_WND 1024 + +/* Enable SNMP protocol */ +/* #define RT_LWIP_SNMP */ + +/* Using DHCP */ +/* #define RT_LWIP_DHCP */ + +/* ip address of target */ +#define RT_LWIP_IPADDR0 192 +#define RT_LWIP_IPADDR1 168 +#define RT_LWIP_IPADDR2 1 +#define RT_LWIP_IPADDR3 30 + +/* gateway address of target */ +#define RT_LWIP_GWADDR0 192 +#define RT_LWIP_GWADDR1 168 +#define RT_LWIP_GWADDR2 1 +#define RT_LWIP_GWADDR3 1 + +/* mask address of target */ +#define RT_LWIP_MSKADDR0 255 +#define RT_LWIP_MSKADDR1 255 +#define RT_LWIP_MSKADDR2 255 +#define RT_LWIP_MSKADDR3 0 + +/* the number of blocks for pbuf */ +#define RT_LWIP_PBUF_NUM 16 + +/* thread priority of tcpip thread */ +#define RT_LWIP_TCPTHREAD_PRIORITY 128 + +/* mail box size of tcpip thread to wait for */ +#define RT_LWIP_TCPTHREAD_MBOX_SIZE 8 + +/* thread stack size of tcpip thread */ +#define RT_LWIP_TCPTHREAD_STACKSIZE 4096 + +/* thread priority of ethnetif thread */ +#define RT_LWIP_ETHTHREAD_PRIORITY 144 + +/* mail box size of ethnetif thread to wait for */ +#define RT_LWIP_ETHTHREAD_MBOX_SIZE 32 + +/* thread stack size of ethnetif thread */ +#define RT_LWIP_ETHTHREAD_STACKSIZE 1024 + +/* SECTION: RTGUI support */ +/* using RTGUI support */ +/* #define RT_USING_RTGUI */ + +/* name length of RTGUI object */ +#define RTGUI_NAME_MAX 16 +/* support 16 weight font */ +#define RTGUI_USING_FONT16 +/* support 16 weight font */ +#define RTGUI_USING_FONT12 +/* support Chinese font */ +#define RTGUI_USING_FONTHZ +/* use DFS as file interface */ +#define RTGUI_USING_DFS_FILERW +/* use font file as Chinese font */ +/* #define RTGUI_USING_HZ_FILE */ +/* use Chinese bitmap font */ +#define RTGUI_USING_HZ_BMP +/* use small size in RTGUI */ +/* #define RTGUI_USING_SMALL_SIZE */ +/* use mouse cursor */ +/* #define RTGUI_USING_MOUSE_CURSOR */ +#endif diff --git a/bsp/sep6200/rtconfig.py b/bsp/sep6200/rtconfig.py new file mode 100644 index 0000000000..f2e4a3afdc --- /dev/null +++ b/bsp/sep6200/rtconfig.py @@ -0,0 +1,57 @@ +import os + +# toolchains options +ARCH = 'unicore32' +CPU = 'sep6200' +TextBase = '0x00000000' + +CROSS_TOOL = 'gcc' + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') + +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = '/usr/unicore/gnu-toolchain-unicore/uc4-1.0-beta-hard-RHELAS5/bin/' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = 'C:/Keil' +elif CROSS_TOOL == 'iar': + print '================ERROR============================' + print 'Not support yet!' + print '=================================================' + exit(0) + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +#BUILD = 'debug' +BUILD = 'release' + +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'unicore32-linux-' + CC = PREFIX + 'gcc' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + LINK = PREFIX + 'ld' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + + DEVICE = ' ' + CFLAGS = DEVICE + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp' + ' -DTEXT_BASE=' + TextBase + LFLAGS = DEVICE + ' -Bstatic --gc-sections -Map=rtthread_sep6200.map -cref -u _start -Ttext 0x40000000 -T sep6200.ld -L/usr/unicore/gnu-toolchain-unicore/uc4-1.0-beta-hard-RHELAS5/lib/gcc/unicore32-linux/4.4.2 -lgcc' + ' -Ttext ' + TextBase + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2' + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' diff --git a/bsp/sep6200/sep6200.ld b/bsp/sep6200/sep6200.ld new file mode 100644 index 0000000000..a1f1f75fca --- /dev/null +++ b/bsp/sep6200/sep6200.ld @@ -0,0 +1,86 @@ +OUTPUT_FORMAT("elf32-littleunicore32", "elf32-bigunicore32", "elf32-littleunicore32") +OUTPUT_ARCH(unicore32) +ENTRY(_start) +SEARCH_DIR("/usr/unicore/gnu-toolchain-unicore/uc4-1.0-beta-hard-RHELAS5/unicore32-linux/lib"); +SECTIONS +{ + . = 0x00000000; + + . = ALIGN(4); + .text : + { + *(.init) + *(.text) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + . = ALIGN(4); + + /* section information for modules */ + . = ALIGN(4); + __rtmsymtab_start = .; + KEEP(*(RTMSymTab)) + __rtmsymtab_end = .; + } + + . = ALIGN(4); + .rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*) *(.eh_frame) } + + . = ALIGN(4); + .ctors : + { + PROVIDE(__ctors_start__ = .); + KEEP(*(SORT(.ctors.*))) + KEEP(*(.ctors)) + PROVIDE(__ctors_end__ = .); + } + + .dtors : + { + PROVIDE(__dtors_start__ = .); + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + PROVIDE(__dtors_end__ = .); + } + + . = ALIGN(4); + .data : + { + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + } + + . = ALIGN(4); + .nobss : { *(.nobss) } + + /*. = 0x00300000*/ + . = ALIGN(4); + __bss_start = .; + .bss : { *(.bss) } + __bss_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) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_info 0 : { *(.debug_info) } + .debug_line 0 : { *(.debug_line) } + .debug_pubnames 0 : { *(.debug_pubnames) } + .debug_aranges 0 : { *(.debug_aranges) } + + _end = .; +} -- cgit v1.3.1