From 342f883acbde330afd39f7456ac632b36f5dcc24 Mon Sep 17 00:00:00 2001
From: lzp <417350690@qq.com>
Date: Wed, 28 Mar 2018 14:40:05 +0800
Subject: [PATCH] [BSP]NUC472
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1.增加MDK4工程
2.修复GCC的链接文件 栈内存与动态内存地址重复
3.修复EMAC驱动宏错误
---
.../Nuvoton/NUC472_442/Source/GCC/startup.c | 6 +-
bsp/nuvoton_nuc472/README.md | 2 +-
bsp/nuvoton_nuc472/drivers/board.c | 4 +-
bsp/nuvoton_nuc472/drivers/nuc472_eth.c | 6 +-
bsp/nuvoton_nuc472/ldscripts/libs.ld | 8 -
bsp/nuvoton_nuc472/ldscripts/mem.ld | 25 -
bsp/nuvoton_nuc472/ldscripts/sections.ld | 392 ++----
bsp/nuvoton_nuc472/project.uvproj | 1153 +++++++++++++++++
bsp/nuvoton_nuc472/template.uvproj | 407 ++++++
9 files changed, 1643 insertions(+), 360 deletions(-)
delete mode 100644 bsp/nuvoton_nuc472/ldscripts/libs.ld
delete mode 100644 bsp/nuvoton_nuc472/ldscripts/mem.ld
create mode 100644 bsp/nuvoton_nuc472/project.uvproj
create mode 100644 bsp/nuvoton_nuc472/template.uvproj
diff --git a/bsp/nuvoton_nuc472/Libraries/Device/Nuvoton/NUC472_442/Source/GCC/startup.c b/bsp/nuvoton_nuc472/Libraries/Device/Nuvoton/NUC472_442/Source/GCC/startup.c
index c4bc353cf6..388f88671f 100644
--- a/bsp/nuvoton_nuc472/Libraries/Device/Nuvoton/NUC472_442/Source/GCC/startup.c
+++ b/bsp/nuvoton_nuc472/Libraries/Device/Nuvoton/NUC472_442/Source/GCC/startup.c
@@ -150,9 +150,9 @@ extern unsigned char _sdata;
// End address for the .data section// defined in linker script
extern unsigned char _edata;
// Begin address for the .bss section// defined in linker script
-extern unsigned char __bss_start__;
+extern unsigned char __bss_start;
// End address for the .bss section// defined in linker script
-extern unsigned char __bss_end__;
+extern unsigned char __bss_end;
extern int entry(void);
@@ -333,7 +333,7 @@ pHandler g_pfnVectors[] =
void _start()
{
memcpy(&_sdata, &_sidata, &_edata - &_sdata);
- memset(&__bss_start__, 0, &__bss_end__ - &__bss_start__);
+ memset(&__bss_start, 0, &__bss_end - &__bss_start);
}
static void Reset_Handler(void)
diff --git a/bsp/nuvoton_nuc472/README.md b/bsp/nuvoton_nuc472/README.md
index a3febd4e36..5bc4e9c7b3 100644
--- a/bsp/nuvoton_nuc472/README.md
+++ b/bsp/nuvoton_nuc472/README.md
@@ -3,7 +3,7 @@
NuTiny-EVB-NUC472
## note:
- support the GCC MDK5 IAR
+ support the GCC MDK4 MDK5 IAR
**TODO**
diff --git a/bsp/nuvoton_nuc472/drivers/board.c b/bsp/nuvoton_nuc472/drivers/board.c
index f8135a795e..3184e138f9 100644
--- a/bsp/nuvoton_nuc472/drivers/board.c
+++ b/bsp/nuvoton_nuc472/drivers/board.c
@@ -22,7 +22,7 @@ extern int Image$$RW_IRAM1$$ZI$$Limit;
#elif __ICCARM__
#pragma section="HEAP"
#else
-extern int __bss_end__;
+extern int __bss_end;
#endif
/**
@@ -80,7 +80,7 @@ void rt_hw_board_init(void)
rt_system_heap_init(__segment_end("HEAP"), (void*)SRAM_END);
#else
/* init memory system */
- rt_system_heap_init((void*)&__bss_end__, (void*)SRAM_END);
+ rt_system_heap_init((void*)&__bss_end, (void*)SRAM_END);
#endif
#endif /* RT_USING_HEAP */
diff --git a/bsp/nuvoton_nuc472/drivers/nuc472_eth.c b/bsp/nuvoton_nuc472/drivers/nuc472_eth.c
index de9f32eedd..e082669ca8 100644
--- a/bsp/nuvoton_nuc472/drivers/nuc472_eth.c
+++ b/bsp/nuvoton_nuc472/drivers/nuc472_eth.c
@@ -181,7 +181,7 @@ static void init_rx_desc(rt_nuc472_emac_t emac)
emac->rx_desc[i].status1 = OWNERSHIP_EMAC;
emac->rx_desc[i].buf = &emac->rx_buf[i][0];
emac->rx_desc[i].status2 = 0;
- emac->rx_desc[i].next = &emac->rx_desc[(i + 1) % TX_DESCRIPTOR_NUM];
+ emac->rx_desc[i].next = &emac->rx_desc[(i + 1) % RX_DESCRIPTOR_NUM];
}
emac_base->RXDSA = (unsigned int)&emac->rx_desc[0];
return;
@@ -205,8 +205,8 @@ static void set_mac_addr(rt_nuc472_emac_t emac, rt_uint8_t *addr)
void EMAC_init(rt_nuc472_emac_t emac, rt_uint8_t *mac_addr)
{
+ EMAC_T *emac_base = emac->emac_base;
RT_ASSERT(emac->dev_addr != RT_NULL);
- EMAC_T *emac_base = emac->emac_base;
CLK_EnableModuleClock(EMAC_MODULE);
@@ -445,12 +445,12 @@ rt_err_t rt_nuc472_emac_tx(rt_device_t dev, struct pbuf* p)
struct pbuf *rt_nuc472_emac_rx(rt_device_t dev)
{
rt_nuc472_emac_t emac = (rt_nuc472_emac_t)dev;
+ unsigned int status;
struct pbuf* p;
/* init p pointer */
p = RT_NULL;
- unsigned int status;
status = emac->cur_rx_desc_ptr->status1;
if(status & OWNERSHIP_EMAC)
diff --git a/bsp/nuvoton_nuc472/ldscripts/libs.ld b/bsp/nuvoton_nuc472/ldscripts/libs.ld
deleted file mode 100644
index 70fea89265..0000000000
--- a/bsp/nuvoton_nuc472/ldscripts/libs.ld
+++ /dev/null
@@ -1,8 +0,0 @@
-
-/*
- * Placeholder to list other libraries required by the application.
-
-GROUP(
-)
-
- */
diff --git a/bsp/nuvoton_nuc472/ldscripts/mem.ld b/bsp/nuvoton_nuc472/ldscripts/mem.ld
deleted file mode 100644
index 351c8f767a..0000000000
--- a/bsp/nuvoton_nuc472/ldscripts/mem.ld
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Memory Spaces Definitions.
- *
- * Need modifying for a specific board.
- * FLASH.ORIGIN: starting address of flash
- * FLASH.LENGTH: length of flash
- * RAM.ORIGIN: starting address of RAM bank 0
- * RAM.LENGTH: length of RAM bank 0
- *
- * The values below can be addressed in further linker scripts
- * using functions like 'ORIGIN(RAM)' or 'LENGTH(RAM)'.
- */
-
-MEMORY
-{
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
- FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K /*4K*/
-}
-
-/*
- * For external ram use something like:
-
- RAM (xrw) : ORIGIN = 0x68000000, LENGTH = 8K
-
- */
diff --git a/bsp/nuvoton_nuc472/ldscripts/sections.ld b/bsp/nuvoton_nuc472/ldscripts/sections.ld
index d7989ad7f9..9e7ed857ca 100644
--- a/bsp/nuvoton_nuc472/ldscripts/sections.ld
+++ b/bsp/nuvoton_nuc472/ldscripts/sections.ld
@@ -1,129 +1,32 @@
/*
- * Default linker script for Cortex-M
- *
- * To make use of the multi-region initialisations, define
- * OS_INCLUDE_STARTUP_INIT_MULTIPLE_RAM_SECTIONS for the _startup.c file.
+ * linker script for STM32F10x with GNU ld
+ * bernard.xiong 2009-10-14
*/
-/*
- * The '__stack' definition is required by crt0, do not remove it.
- */
-__stack = ORIGIN(RAM) + LENGTH(RAM);
-
-_estack = __stack; /* STM specific definition */
-
-/*
- * Default stack sizes.
- * These are used by the startup in order to allocate stacks
- * for the different modes.
- */
-
-__Main_Stack_Size = 1024 ;
-
-PROVIDE ( _Main_Stack_Size = __Main_Stack_Size ) ;
-
-__Main_Stack_Limit = __stack - __Main_Stack_Size ;
-
-/* "PROVIDE" allows to easily override these values from an
- * object file or the command line. */
-PROVIDE ( _Main_Stack_Limit = __Main_Stack_Limit ) ;
-
-/*
- * There will be a link error if there is not this amount of
- * RAM free at the end.
- */
-_Minimum_Stack_Size = 256 ;
-
-/*
- * Default heap definitions.
- * The heap start immediately after the last statically allocated
- * .sbss/.noinit section, and extends up to the main stack limit.
- */
-PROVIDE ( _Heap_Begin = _end_noinit ) ;
-PROVIDE ( _Heap_Limit = __stack - __Main_Stack_Size ) ;
-
-/*
- * The entry point is informative, for debuggers and simulators,
- * since the Cortex-M vector points to it anyway.
- */
+/* Program Entry, set to mark it as "used" and avoid gc */
+MEMORY
+{
+ CODE (rx) : ORIGIN = 0x00000000, LENGTH = 512k /* 128K sram */
+ DATA (rw) : ORIGIN = 0x20000000, LENGTH = 64k /* 512KB flash */
+}
ENTRY(_start)
-
-
-/* Sections Definitions */
+_system_stack_size = 0x400;
SECTIONS
{
- /*
- * For Cortex-M devices, the beginning of the startup code is stored in
- * the .isr_vector section, which goes to FLASH.
- */
- .isr_vector : ALIGN(4)
+ .text :
{
- FILL(0xFF)
-
- __vectors_start = ABSOLUTE(.) ;
- __vectors_start__ = ABSOLUTE(.) ; /* STM specific definition */
- KEEP(*(.isr_vector)) /* Interrupt vectors */
-
- KEEP(*(.cfmconfig)) /* Freescale configuration words */
-
- /*
- * This section is here for convenience, to store the
- * startup code at the beginning of the flash area, hoping that
- * this will increase the readability of the listing.
- */
- *(.after_vectors .after_vectors.*) /* Startup code and ISR */
-
- } >FLASH
-
- .inits : ALIGN(4)
- {
- /*
- * Memory regions initialisation arrays.
- *
- * Thee are two kinds of arrays for each RAM region, one for
- * data and one for bss. Each is iterrated at startup and the
- * region initialisation is performed.
- *
- * The data array includes:
- * - from (LOADADDR())
- * - region_begin (ADDR())
- * - region_end (ADDR()+SIZEOF())
- *
- * The bss array includes:
- * - region_begin (ADDR())
- * - region_end (ADDR()+SIZEOF())
- *
- * WARNING: It is mandatory that the regions are word aligned,
- * since the initialisation code works only on words.
- */
-
- __data_regions_array_start = .;
-
- LONG(LOADADDR(.data));
- LONG(ADDR(.data));
- LONG(ADDR(.data)+SIZEOF(.data));
-
- __data_regions_array_end = .;
-
- __bss_regions_array_start = .;
-
- LONG(ADDR(.bss));
- LONG(ADDR(.bss)+SIZEOF(.bss));
-
-
- __bss_regions_array_end = .;
-
- /* End of memory regions initialisation arrays. */
-
- /*
- * These are the old initialisation sections, intended to contain
- * naked code, with the prologue/epilogue added by crti.o/crtn.o
- * when linking with startup files. The standalone startup code
- * currently does not run these, better use the init arrays below.
- */
- KEEP(*(.init))
- KEEP(*(.fini))
+ . = ALIGN(4);
+ _stext = .;
+ KEEP(*(.isr_vector)) /* Startup code */
+ . = ALIGN(4);
+ *(.text) /* remaining code */
+ *(.text.*) /* remaining code */
+ *(.rodata) /* read-only data (constants) */
+ *(.rodata*)
+ *(.glue_7)
+ *(.glue_7t)
+ *(.gnu.linkonce.t*)
/* section information for finsh shell */
. = ALIGN(4);
@@ -135,7 +38,7 @@ SECTIONS
KEEP(*(VSymTab))
__vsymtab_end = .;
. = ALIGN(4);
-
+
/* section information for initial. */
. = ALIGN(4);
__rt_init_start = .;
@@ -143,212 +46,67 @@ SECTIONS
__rt_init_end = .;
. = ALIGN(4);
+ . = ALIGN(4);
+ _etext = .;
+ } > CODE = 0
- /*
- * The preinit code, i.e. an array of pointers to initialisation
- * functions to be performed before constructors.
- */
- PROVIDE_HIDDEN (__preinit_array_start = .);
-
- /*
- * Used to run the SystemInit() before anything else.
- */
- KEEP(*(.preinit_array_sysinit .preinit_array_sysinit.*))
-
- /*
- * Used for other platform inits.
- */
- KEEP(*(.preinit_array_platform .preinit_array_platform.*))
-
- /*
- * The application inits. If you need to enforce some order in
- * execution, create new sections, as before.
- */
- KEEP(*(.preinit_array .preinit_array.*))
-
- PROVIDE_HIDDEN (__preinit_array_end = .);
-
- . = ALIGN(4);
-
- /*
- * The init code, i.e. an array of pointers to static constructors.
- */
- PROVIDE_HIDDEN (__init_array_start = .);
- KEEP(*(SORT(.init_array.*)))
- KEEP(*(.init_array))
- PROVIDE_HIDDEN (__init_array_end = .);
-
- . = ALIGN(4);
-
- /*
- * The fini code, i.e. an array of pointers to static destructors.
- */
- PROVIDE_HIDDEN (__fini_array_start = .);
- KEEP(*(SORT(.fini_array.*)))
- KEEP(*(.fini_array))
- PROVIDE_HIDDEN (__fini_array_end = .);
-
- } >FLASH
-
- /*
- * For some STRx devices, the beginning of the startup code
- * is stored in the .flashtext section, which goes to FLASH.
- */
- .flashtext : ALIGN(4)
+ /* .ARM.exidx is sorted, so has to go in its own output section. */
+ __exidx_start = .;
+ .ARM.exidx :
{
- *(.flashtext .flashtext.*) /* Startup code */
- } >FLASH
-
-
- /*
- * The program code is stored in the .text section,
- * which goes to FLASH.
- */
- .text : ALIGN(4)
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+
+ /* This is used by the startup in order to initialize the .data secion */
+ _sidata = .;
+ } > CODE
+ __exidx_end = .;
+
+ /* .data section which is used for initialized data */
+
+ .data : AT (_sidata)
{
- *(.text .text.*) /* all remaining code */
-
- /* read-only data (constants) */
- *(.rodata .rodata.* .constdata .constdata.*)
+ . = ALIGN(4);
+ /* This is used by the startup in order to initialize the .data secion */
+ _sdata = . ;
- *(vtable) /* C++ virtual tables */
+ *(.data)
+ *(.data.*)
+ *(.gnu.linkonce.d*)
- KEEP(*(.eh_frame*))
+ . = ALIGN(4);
+ /* This is used by the startup in order to initialize the .data secion */
+ _edata = . ;
+ } >DATA
- /*
- * Stub sections generated by the linker, to glue together
- * ARM and Thumb code. .glue_7 is used for ARM code calling
- * Thumb code, and .glue_7t is used for Thumb code calling
- * ARM code. Apparently always generated by the linker, for some
- * architectures, so better leave them here.
- */
- *(.glue_7)
- *(.glue_7t)
-
- KEEP (*(.init))
- KEEP (*(.fini))
-
- } >FLASH
-
- /* ARM magic sections */
- .ARM.extab : ALIGN(4)
- {
- *(.ARM.extab* .gnu.linkonce.armextab.*)
- } > FLASH
-
- . = ALIGN(4);
- __exidx_start = .;
- .ARM.exidx : ALIGN(4)
- {
- *(.ARM.exidx* .gnu.linkonce.armexidx.*)
- } > FLASH
- __exidx_end = .;
-
- . = ALIGN(4);
- _etext = .;
- __etext = .;
-
- /* MEMORY_ARRAY */
- /*
- .ROarraySection :
+ .stack :
{
- *(.ROarraySection .ROarraySection.*)
- } >MEMORY_ARRAY
- */
-
- /*
- * This address is used by the startup code to
- * initialise the .data section.
- */
- _sidata = LOADADDR(.data);
+ _sstack = .;
+ . = . + _system_stack_size;
+ . = ALIGN(4);
+ _estack = .;
+ } >DATA
- /*
- * The initialised data section.
- *
- * The program executes knowing that the data is in the RAM
- * but the loader puts the initial values in the FLASH (inidata).
- * It is one task of the startup to copy the initial values from
- * FLASH to RAM.
- */
- .data : ALIGN(4)
+ __bss_start = .;
+ .bss :
{
- FILL(0xFF)
- /* This is used by the startup code to initialise the .data section */
- _sdata = . ; /* STM specific definition */
- __data_start__ = . ;
- *(.data_begin .data_begin.*)
+ . = ALIGN(4);
+ /* This is used by the startup in order to initialize the .bss secion */
+ _sbss = .;
- *(.data .data.*)
-
- *(.data_end .data_end.*)
- . = ALIGN(4);
-
- /* This is used by the startup code to initialise the .data section */
- _edata = . ; /* STM specific definition */
- __data_end__ = . ;
-
- } >RAM AT>FLASH
-
- /*
- * The uninitialised data sections. NOLOAD is used to avoid
- * the "section `.bss' type changed to PROGBITS" warning
- */
-
- /* The primary uninitialised data section. */
- .bss (NOLOAD) : ALIGN(4)
- {
- __bss_start__ = .; /* standard newlib definition */
- _sbss = .; /* STM specific definition */
- *(.bss_begin .bss_begin.*)
-
- *(.bss .bss.*)
+ *(.bss)
+ *(.bss.*)
*(COMMON)
-
- *(.bss_end .bss_end.*)
- . = ALIGN(4);
- __bss_end__ = .; /* standard newlib definition */
- _ebss = . ; /* STM specific definition */
- } >RAM
-
- .noinit (NOLOAD) : ALIGN(4)
- {
- _noinit = .;
-
- *(.noinit .noinit.*)
-
- . = ALIGN(4) ;
- _end_noinit = .;
- } > RAM
-
- /* Mandatory to be word aligned, _sbrk assumes this */
- PROVIDE ( end = _end_noinit ); /* was _ebss */
- PROVIDE ( _end = _end_noinit );
- PROVIDE ( __end = _end_noinit );
- PROVIDE ( __end__ = _end_noinit );
-
- /*
- * Used for validation only, do not allocate anything here!
- *
- * This is just to check that there is enough RAM left for the Main
- * stack. It should generate an error if it's full.
- */
- ._check_stack : ALIGN(4)
- {
- . = . + _Minimum_Stack_Size ;
- } >RAM
- /* After that there are only debugging sections. */
-
- /* This can remove the debugging information from the standard libraries */
- /*
- DISCARD :
- {
- libc.a ( * )
- libm.a ( * )
- libgcc.a ( * )
- }
- */
-
+ . = ALIGN(4);
+ /* This is used by the startup in order to initialize the .bss secion */
+ _ebss = . ;
+
+ *(.bss.init)
+ } > DATA
+ __bss_end = .;
+
+ _end = .;
+
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
@@ -357,11 +115,9 @@ SECTIONS
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
- /*
- * DWARF debug sections.
+ /* DWARF debug sections.
* Symbols in the DWARF debugging sections are relative to the beginning
- * of the section so we begin them at 0.
- */
+ * of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
@@ -383,5 +139,5 @@ SECTIONS
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
- .debug_varnames 0 : { *(.debug_varnames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
}
diff --git a/bsp/nuvoton_nuc472/project.uvproj b/bsp/nuvoton_nuc472/project.uvproj
new file mode 100644
index 0000000000..0888eb8df9
--- /dev/null
+++ b/bsp/nuvoton_nuc472/project.uvproj
@@ -0,0 +1,1153 @@
+
+
+ 1.1
+ ### uVision Project, (C) Keil Software
+
+
+ rtthread-nuc472
+ 0x4
+ ARM-ADS
+
+
+ NUC472HI8AE
+ Nuvoton
+ IRAM(0x20000000-0x2000FFFF) IROM(0-0x7FFFF) CLOCK(84000000) CPUTYPE("Cortex-M4") FPU2
+
+ undefined
+
+ 0
+
+
+
+
+
+
+
+
+
+
+ SFD\Nuvoton\NUC400_v1.SFR
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 1
+
+ .\build\
+ template
+ 1
+ 0
+ 1
+ 1
+ 1
+ .\build\
+ 1
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 3
+
+
+ 1
+
+
+ SARMCM3.DLL
+
+ DARMCM1.DLL
+
+ SARMCM3.DLL
+
+ TARMCM1.DLL
+
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 16
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+
+
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 1
+ 1
+
+ 0
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ -1
+
+ 0
+
+
+
+
+
+
+ 0
+
+
+
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ "Cortex-M4"
+
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+ 0
+ 2
+ 0
+ 0
+ 8
+ 0
+ 0
+ 0
+ 3
+ 3
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x20000000
+ 0x10000
+
+
+ 1
+ 0x0
+ 0x80000
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x80000
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x20000000
+ 0x10000
+
+
+ 0
+ 0x0
+ 0x0
+
+
+
+
+
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+ applications;.;drivers;Libraries\CMSIS\Include;Libraries\Device\Nuvoton\NUC472_442\Include;Libraries\StdDriver\inc;..\..\include;..\..\libcpu\arm\cortex-m4;..\..\libcpu\arm\common;..\..\components\drivers\include;..\..\components\drivers\include;..\..\components\finsh;..\..\components\net\lwip-2.0.2\src;..\..\components\net\lwip-2.0.2\src\include;..\..\components\net\lwip-2.0.2\src\include\ipv4;..\..\components\net\lwip-2.0.2\src\arch\include;..\..\components\net\lwip-2.0.2\src\include\netif;..\..\components\net\lwip-2.0.2\src\include\posix
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0x00000000
+ 0x20000000
+
+
+
+
+ --keep *.o(.rti_fn.*) --keep *.o(FSymTab)
+
+
+
+
+
+
+
+ Applications
+
+
+ application.c
+ 1
+ applications\application.c
+
+
+
+
+ Drivers
+
+
+ board.c
+ 1
+ drivers\board.c
+
+
+
+
+ nuc472_eth.c
+ 1
+ drivers\nuc472_eth.c
+
+
+
+
+ usart.c
+ 1
+ drivers\usart.c
+
+
+
+
+ CMSIS
+
+
+ system_NUC472_442.c
+ 1
+ Libraries\Device\Nuvoton\NUC472_442\Source\system_NUC472_442.c
+
+
+
+
+ startup_NUC472_442.s
+ 2
+ Libraries\Device\Nuvoton\NUC472_442\Source\ARM\startup_NUC472_442.s
+
+
+
+
+ NUC472_StdPeriph
+
+
+ acmp.c
+ 1
+ Libraries\StdDriver\src\acmp.c
+
+
+
+
+ adc.c
+ 1
+ Libraries\StdDriver\src\adc.c
+
+
+
+
+ can.c
+ 1
+ Libraries\StdDriver\src\can.c
+
+
+
+
+ cap.c
+ 1
+ Libraries\StdDriver\src\cap.c
+
+
+
+
+ clk.c
+ 1
+ Libraries\StdDriver\src\clk.c
+
+
+
+
+ crc.c
+ 1
+ Libraries\StdDriver\src\crc.c
+
+
+
+
+ crypto.c
+ 1
+ Libraries\StdDriver\src\crypto.c
+
+
+
+
+ eadc.c
+ 1
+ Libraries\StdDriver\src\eadc.c
+
+
+
+
+ ebi.c
+ 1
+ Libraries\StdDriver\src\ebi.c
+
+
+
+
+ emac.c
+ 1
+ Libraries\StdDriver\src\emac.c
+
+
+
+
+ epwm.c
+ 1
+ Libraries\StdDriver\src\epwm.c
+
+
+
+
+ fmc.c
+ 1
+ Libraries\StdDriver\src\fmc.c
+
+
+
+
+ gpio.c
+ 1
+ Libraries\StdDriver\src\gpio.c
+
+
+
+
+ i2c.c
+ 1
+ Libraries\StdDriver\src\i2c.c
+
+
+
+
+ i2s.c
+ 1
+ Libraries\StdDriver\src\i2s.c
+
+
+
+
+ pdma.c
+ 1
+ Libraries\StdDriver\src\pdma.c
+
+
+
+
+ ps2.c
+ 1
+ Libraries\StdDriver\src\ps2.c
+
+
+
+
+ pwm.c
+ 1
+ Libraries\StdDriver\src\pwm.c
+
+
+
+
+ rtc.c
+ 1
+ Libraries\StdDriver\src\rtc.c
+
+
+
+
+ sc.c
+ 1
+ Libraries\StdDriver\src\sc.c
+
+
+
+
+ scuart.c
+ 1
+ Libraries\StdDriver\src\scuart.c
+
+
+
+
+ sd.c
+ 1
+ Libraries\StdDriver\src\sd.c
+
+
+
+
+ spi.c
+ 1
+ Libraries\StdDriver\src\spi.c
+
+
+
+
+ sys_.c
+ 1
+ Libraries\StdDriver\src\sys_.c
+
+
+
+
+ timer_.c
+ 1
+ Libraries\StdDriver\src\timer_.c
+
+
+
+
+ uart.c
+ 1
+ Libraries\StdDriver\src\uart.c
+
+
+
+
+ usbd.c
+ 1
+ Libraries\StdDriver\src\usbd.c
+
+
+
+
+ wdt.c
+ 1
+ Libraries\StdDriver\src\wdt.c
+
+
+
+
+ wwdt.c
+ 1
+ Libraries\StdDriver\src\wwdt.c
+
+
+
+
+ Kernel
+
+
+ clock.c
+ 1
+ ..\..\src\clock.c
+
+
+
+
+ components.c
+ 1
+ ..\..\src\components.c
+
+
+
+
+ device.c
+ 1
+ ..\..\src\device.c
+
+
+
+
+ idle.c
+ 1
+ ..\..\src\idle.c
+
+
+
+
+ ipc.c
+ 1
+ ..\..\src\ipc.c
+
+
+
+
+ irq.c
+ 1
+ ..\..\src\irq.c
+
+
+
+
+ kservice.c
+ 1
+ ..\..\src\kservice.c
+
+
+
+
+ mem.c
+ 1
+ ..\..\src\mem.c
+
+
+
+
+ mempool.c
+ 1
+ ..\..\src\mempool.c
+
+
+
+
+ object.c
+ 1
+ ..\..\src\object.c
+
+
+
+
+ scheduler.c
+ 1
+ ..\..\src\scheduler.c
+
+
+
+
+ signal.c
+ 1
+ ..\..\src\signal.c
+
+
+
+
+ thread.c
+ 1
+ ..\..\src\thread.c
+
+
+
+
+ timer.c
+ 1
+ ..\..\src\timer.c
+
+
+
+
+ CORTEX-M4
+
+
+ cpuport.c
+ 1
+ ..\..\libcpu\arm\cortex-m4\cpuport.c
+
+
+
+
+ context_rvds.S
+ 2
+ ..\..\libcpu\arm\cortex-m4\context_rvds.S
+
+
+
+
+ backtrace.c
+ 1
+ ..\..\libcpu\arm\common\backtrace.c
+
+
+
+
+ div0.c
+ 1
+ ..\..\libcpu\arm\common\div0.c
+
+
+
+
+ showmem.c
+ 1
+ ..\..\libcpu\arm\common\showmem.c
+
+
+
+
+ DeviceDrivers
+
+
+ serial.c
+ 1
+ ..\..\components\drivers\serial\serial.c
+
+
+
+
+ completion.c
+ 1
+ ..\..\components\drivers\src\completion.c
+
+
+
+
+ dataqueue.c
+ 1
+ ..\..\components\drivers\src\dataqueue.c
+
+
+
+
+ pipe.c
+ 1
+ ..\..\components\drivers\src\pipe.c
+
+
+
+
+ ringbuffer.c
+ 1
+ ..\..\components\drivers\src\ringbuffer.c
+
+
+
+
+ waitqueue.c
+ 1
+ ..\..\components\drivers\src\waitqueue.c
+
+
+
+
+ workqueue.c
+ 1
+ ..\..\components\drivers\src\workqueue.c
+
+
+
+
+ finsh
+
+
+ shell.c
+ 1
+ ..\..\components\finsh\shell.c
+
+
+
+
+ symbol.c
+ 1
+ ..\..\components\finsh\symbol.c
+
+
+
+
+ cmd.c
+ 1
+ ..\..\components\finsh\cmd.c
+
+
+
+
+ msh.c
+ 1
+ ..\..\components\finsh\msh.c
+
+
+
+
+ msh_cmd.c
+ 1
+ ..\..\components\finsh\msh_cmd.c
+
+
+
+
+ msh_file.c
+ 1
+ ..\..\components\finsh\msh_file.c
+
+
+
+
+ lwIP
+
+
+ sys_arch.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\arch\sys_arch.c
+
+
+
+
+ api_lib.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\api\api_lib.c
+
+
+
+
+ api_msg.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\api\api_msg.c
+
+
+
+
+ err.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\api\err.c
+
+
+
+
+ netbuf.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\api\netbuf.c
+
+
+
+
+ netdb.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\api\netdb.c
+
+
+
+
+ netifapi.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\api\netifapi.c
+
+
+
+
+ sockets.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\api\sockets.c
+
+
+
+
+ tcpip.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\api\tcpip.c
+
+
+
+
+ def.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\def.c
+
+
+
+
+ dns.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\dns.c
+
+
+
+
+ inet_chksum.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\inet_chksum.c
+
+
+
+
+ init.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\init.c
+
+
+
+
+ ip.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\ip.c
+
+
+
+
+ memp.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\memp.c
+
+
+
+
+ netif.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\netif.c
+
+
+
+
+ pbuf.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\pbuf.c
+
+
+
+
+ raw.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\raw.c
+
+
+
+
+ stats.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\stats.c
+
+
+
+
+ sys.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\sys.c
+
+
+
+
+ tcp.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\tcp.c
+
+
+
+
+ tcp_in.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\tcp_in.c
+
+
+
+
+ tcp_out.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\tcp_out.c
+
+
+
+
+ timeouts.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\timeouts.c
+
+
+
+
+ udp.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\udp.c
+
+
+
+
+ ethernet.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\netif\ethernet.c
+
+
+
+
+ ethernetif.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\netif\ethernetif.c
+
+
+
+
+ lowpan6.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\netif\lowpan6.c
+
+
+
+
+ autoip.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\ipv4\autoip.c
+
+
+
+
+ dhcp.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\ipv4\dhcp.c
+
+
+
+
+ etharp.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\ipv4\etharp.c
+
+
+
+
+ icmp.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\ipv4\icmp.c
+
+
+
+
+ igmp.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\ipv4\igmp.c
+
+
+
+
+ ip4.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\ipv4\ip4.c
+
+
+
+
+ ip4_addr.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\ipv4\ip4_addr.c
+
+
+
+
+ ip4_frag.c
+ 1
+ ..\..\components\net\lwip-2.0.2\src\core\ipv4\ip4_frag.c
+
+
+
+
+
+
+
diff --git a/bsp/nuvoton_nuc472/template.uvproj b/bsp/nuvoton_nuc472/template.uvproj
new file mode 100644
index 0000000000..61af4cfa37
--- /dev/null
+++ b/bsp/nuvoton_nuc472/template.uvproj
@@ -0,0 +1,407 @@
+
+
+
+ 1.1
+
+ ### uVision Project, (C) Keil Software
+
+
+
+ rtthread-nuc472
+ 0x4
+ ARM-ADS
+
+
+ NUC472HI8AE
+ Nuvoton
+ IRAM(0x20000000-0x2000FFFF) IROM(0-0x7FFFF) CLOCK(84000000) CPUTYPE("Cortex-M4") FPU2
+
+ undefined
+
+ 0
+
+
+
+
+
+
+
+
+
+
+ SFD\Nuvoton\NUC400_v1.SFR
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 1
+
+ .\build\
+ template
+ 1
+ 0
+ 1
+ 1
+ 1
+ .\build\
+ 1
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 3
+
+
+ 1
+
+
+ SARMCM3.DLL
+
+ DARMCM1.DLL
+
+ SARMCM3.DLL
+
+ TARMCM1.DLL
+
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 16
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+
+
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 1
+ 1
+
+ 0
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ -1
+
+ 0
+
+
+
+
+
+
+ 0
+
+
+
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ "Cortex-M4"
+
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+ 0
+ 2
+ 0
+ 0
+ 8
+ 0
+ 0
+ 0
+ 3
+ 3
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x20000000
+ 0x10000
+
+
+ 1
+ 0x0
+ 0x80000
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x80000
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x20000000
+ 0x10000
+
+
+ 0
+ 0x0
+ 0x0
+
+
+
+
+
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0x00000000
+ 0x20000000
+
+
+
+
+
+
+
+
+
+
+
+
+
+