Przeglądaj źródła

fix samg55 with newlib missing end symbol

hathach 6 lat temu
rodzic
commit
387384c0d9

+ 3 - 2
hw/bsp/samg55xplained/board.mk

@@ -1,11 +1,12 @@
 CFLAGS += \
 CFLAGS += \
-  -D__SAMG55J19__ \
+  -flto \
   -mthumb \
   -mthumb \
   -mabi=aapcs \
   -mabi=aapcs \
   -mcpu=cortex-m4 \
   -mcpu=cortex-m4 \
   -mfloat-abi=hard \
   -mfloat-abi=hard \
   -mfpu=fpv4-sp-d16 \
   -mfpu=fpv4-sp-d16 \
   -nostdlib -nostartfiles \
   -nostdlib -nostartfiles \
+  -D__SAMG55J19__ \
   -DCFG_TUSB_MCU=OPT_MCU_SAMG
   -DCFG_TUSB_MCU=OPT_MCU_SAMG
 
 
 #CFLAGS += -Wno-error=undef
 #CFLAGS += -Wno-error=undef
@@ -13,7 +14,7 @@ CFLAGS += \
 ASF_DIR = hw/mcu/microchip/samg55
 ASF_DIR = hw/mcu/microchip/samg55
 
 
 # All source paths should be relative to the top level.
 # All source paths should be relative to the top level.
-LD_FILE = $(ASF_DIR)/samg55/gcc/gcc/samg55j19_flash.ld
+LD_FILE = hw/bsp/$(BOARD)/samg55j19_flash.ld
 
 
 SRC_C += \
 SRC_C += \
 	$(ASF_DIR)/samg55/gcc/gcc/startup_samg55j19.c \
 	$(ASF_DIR)/samg55/gcc/gcc/startup_samg55j19.c \

+ 158 - 0
hw/bsp/samg55xplained/samg55j19_flash.ld

@@ -0,0 +1,158 @@
+/**
+ * \file
+ *
+ * \brief GCC linker script (flash) for ATSAMG55J19
+ *
+ * Copyright (c) 2017 Atmel Corporation, a wholly owned subsidiary of Microchip Technology Inc.
+ *
+ * \license_start
+ *
+ * \page License
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * \license_stop
+ *
+ */
+
+/*------------------------------------------------------------------------------
+ *      Linker script for running in internal FLASH on the ATSAMG55J19
+ *----------------------------------------------------------------------------*/
+
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+
+/* Memory Spaces Definitions */
+MEMORY
+{
+    rom (rx)    : ORIGIN = 0x00400000, LENGTH = 0x00080000 /* rom, 524288K */
+    ram (rwx)   : ORIGIN = 0x20000000, LENGTH = 0x00028000 /* ram, 163840K */
+}
+
+/* The stack size used by the application. NOTE: you need to adjust according to your application. */
+STACK_SIZE = DEFINED(STACK_SIZE) ? STACK_SIZE : DEFINED(__stack_size__) ? __stack_size__ : 0x0400;
+
+/* The heapsize used by the application. NOTE: you need to adjust according to your application. */
+HEAP_SIZE = DEFINED(HEAP_SIZE) ? HEAP_SIZE : DEFINED(__heap_size__) ? __heap_size__ : 0x0200;
+
+/* Section Definitions */
+SECTIONS
+{
+    .text :
+    {
+        . = ALIGN(4);
+        _sfixed = .;
+        KEEP(*(.vectors .vectors.*))
+        *(.text .text.* .gnu.linkonce.t.*)
+        *(.glue_7t) *(.glue_7)
+        *(.rodata .rodata* .gnu.linkonce.r.*)
+        *(.ARM.extab* .gnu.linkonce.armextab.*)
+
+        /* Support C constructors, and C destructors in both user code
+           and the C library. This also provides support for C++ code. */
+        . = ALIGN(4);
+        KEEP(*(.init))
+        . = ALIGN(4);
+        __preinit_array_start = .;
+        KEEP (*(.preinit_array))
+        __preinit_array_end = .;
+
+        . = ALIGN(4);
+        __init_array_start = .;
+        KEEP (*(SORT(.init_array.*)))
+        KEEP (*(.init_array))
+        __init_array_end = .;
+
+        . = ALIGN(0x4);
+        KEEP (*crtbegin.o(.ctors))
+        KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
+        KEEP (*(SORT(.ctors.*)))
+        KEEP (*crtend.o(.ctors))
+
+        . = ALIGN(4);
+        KEEP(*(.fini))
+
+        . = ALIGN(4);
+        __fini_array_start = .;
+        KEEP (*(.fini_array))
+        KEEP (*(SORT(.fini_array.*)))
+        __fini_array_end = .;
+
+        KEEP (*crtbegin.o(.dtors))
+        KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
+        KEEP (*(SORT(.dtors.*)))
+        KEEP (*crtend.o(.dtors))
+
+        . = ALIGN(4);
+        _efixed = .;            /* End of text section */
+    } > rom
+
+    /* .ARM.exidx is sorted, so has to go in its own output section.  */
+    PROVIDE_HIDDEN (__exidx_start = .);
+    .ARM.exidx :
+    {
+      *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+    } > rom
+    PROVIDE_HIDDEN (__exidx_end = .);
+
+    . = ALIGN(4);
+    _etext = .;
+
+    .relocate : AT (_etext)
+    {
+        . = ALIGN(4);
+        _srelocate = .;
+        *(.ramfunc .ramfunc.*);
+        *(.data .data.*);
+        . = ALIGN(4);
+        _erelocate = .;
+    } > ram
+
+    /* .bss section which is used for uninitialized data */
+    .bss (NOLOAD) :
+    {
+        . = ALIGN(4);
+        _sbss = . ;
+        _szero = .;
+        *(.bss .bss.*)
+        *(COMMON)
+        . = ALIGN(4);
+        _ebss = . ;
+        _ezero = .;
+        end = .;
+    } > ram
+
+    /* heap section */
+    .heap (NOLOAD):
+    {
+        . = ALIGN(8);
+         _sheap = .;
+        . = . + HEAP_SIZE;
+        . = ALIGN(8);
+        _eheap = .;
+    } > ram
+
+    /* stack section */
+    .stack (NOLOAD):
+    {
+        . = ALIGN(8);
+        _sstack = .;
+        . = . + STACK_SIZE;
+        . = ALIGN(8);
+        _estack = .;
+    } > ram
+
+    . = ALIGN(4);
+    _end = . ;
+    _ram_end_ = ORIGIN(ram) + LENGTH(ram) - 1 ;
+}

+ 1 - 4
hw/bsp/samg55xplained/samg55xplained.c

@@ -71,14 +71,11 @@ void board_init(void)
   /* Clear SYSIO 10 & 11 for USB DM & DP */
   /* Clear SYSIO 10 & 11 for USB DM & DP */
   hri_matrix_clear_CCFG_SYSIO_reg(MATRIX, CCFG_SYSIO_SYSIO10 | CCFG_SYSIO_SYSIO11);
   hri_matrix_clear_CCFG_SYSIO_reg(MATRIX, CCFG_SYSIO_SYSIO10 | CCFG_SYSIO_SYSIO11);
 
 
-  // Enble clock
+  // Enable clock
   _pmc_enable_periph_clock(ID_UDP);
   _pmc_enable_periph_clock(ID_UDP);
 
 
 	/* USB Device mode & Transceiver active */
 	/* USB Device mode & Transceiver active */
 	hri_matrix_write_CCFG_USBMR_reg(MATRIX, CCFG_USBMR_USBMODE);
 	hri_matrix_write_CCFG_USBMR_reg(MATRIX, CCFG_USBMR_USBMODE);
-
-  // Attach
-  hri_udp_write_TXVC_reg(UDP, UDP_TXVC_PUON);
 }
 }
 
 
 //--------------------------------------------------------------------+
 //--------------------------------------------------------------------+