Skip to content

Commit

Permalink
Merge pull request #259 from adafruit/matrixportal
Browse files Browse the repository at this point in the history
Matrix portal draft
  • Loading branch information
ladyada authored Sep 4, 2020
2 parents d1c52f2 + c044ba3 commit 8d3b49b
Show file tree
Hide file tree
Showing 7 changed files with 944 additions and 0 deletions.
64 changes: 64 additions & 0 deletions boards.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1321,6 +1321,70 @@ adafruit_hallowing_m4.menu.debug.off=Off
adafruit_hallowing_m4.menu.debug.on=On
adafruit_hallowing_m4.menu.debug.on.build.flags.debug=-g

# Adafruit Matrix Portal M4 (SAMD51)
# ------------------------------
adafruit_matrixportal_m4.name=Adafruit Matrix Portal M4 (SAMD51)
adafruit_matrixportal_m4.vid.0=0x239A
adafruit_matrixportal_m4.pid.0=0x80C9
adafruit_matrixportal_m4.vid.1=0x239A
adafruit_matrixportal_m4.pid.1=0x00C9
adafruit_matrixportal_m4.vid.1=0x239A
adafruit_matrixportal_m4.pid.1=0x80CA
adafruit_matrixportal_m4.upload.tool=bossac18
adafruit_matrixportal_m4.upload.protocol=sam-ba
adafruit_matrixportal_m4.upload.maximum_size=507904
adafruit_matrixportal_m4.upload.offset=0x4000
adafruit_matrixportal_m4.upload.use_1200bps_touch=true
adafruit_matrixportal_m4.upload.wait_for_upload_port=true
adafruit_matrixportal_m4.upload.native_usb=true
adafruit_matrixportal_m4.build.mcu=cortex-m4
#adafruit_matrixportal_m4.build.f_cpu=120000000L
adafruit_matrixportal_m4.build.usb_product="Adafruit Matrix Portal M4"
adafruit_matrixportal_m4.build.usb_manufacturer="Adafruit LLC"
adafruit_matrixportal_m4.build.board=MATRIXPORTAL_M4
adafruit_matrixportal_m4.build.core=arduino
adafruit_matrixportal_m4.build.extra_flags=-D__SAMD51J19A__ -DADAFRUIT_MATRIXPORTAL_M4_EXPRESS -DCRYSTALLESS -D__SAMD51__ {build.usb_flags} -D__FPU_PRESENT -DARM_MATH_CM4 -mfloat-abi=hard -mfpu=fpv4-sp-d16
adafruit_matrixportal_m4.build.ldscript=linker_scripts/gcc/flash_with_bootloader.ld
adafruit_matrixportal_m4.build.openocdscript=openocd_scripts/arduino_zero.cfg
adafruit_matrixportal_m4.build.variant=matrixportal_m4
adafruit_matrixportal_m4.build.variant_system_lib=
adafruit_matrixportal_m4.build.vid=0x239A
adafruit_matrixportal_m4.build.pid=0x80C9
adafruit_matrixportal_m4.bootloader.tool=openocd
adafruit_matrixportal_m4.bootloader.file=matrixportalM4/bootloader-matrixportal_m4.bin
adafruit_matrixportal_m4.compiler.arm.cmsis.ldflags="-L{runtime.tools.CMSIS-5.4.0.path}/CMSIS/Lib/GCC/" "-L{build.variant.path}" -larm_cortexM4lf_math -mfloat-abi=hard -mfpu=fpv4-sp-d16
adafruit_matrixportal_m4.menu.cache.on=Enabled
adafruit_matrixportal_m4.menu.cache.on.build.cache_flags=-DENABLE_CACHE
adafruit_matrixportal_m4.menu.cache.off=Disabled
adafruit_matrixportal_m4.menu.cache.off.build.cache_flags=
adafruit_matrixportal_m4.menu.speed.120=120 MHz (standard)
adafruit_matrixportal_m4.menu.speed.120.build.f_cpu=120000000L
adafruit_matrixportal_m4.menu.speed.150=150 MHz (overclock)
adafruit_matrixportal_m4.menu.speed.150.build.f_cpu=150000000L
adafruit_matrixportal_m4.menu.speed.180=180 MHz (overclock)
adafruit_matrixportal_m4.menu.speed.180.build.f_cpu=180000000L
adafruit_matrixportal_m4.menu.speed.200=200 MHz (overclock)
adafruit_matrixportal_m4.menu.speed.200.build.f_cpu=200000000L
adafruit_matrixportal_m4.menu.opt.small=Small (-Os) (standard)
adafruit_matrixportal_m4.menu.opt.small.build.flags.optimize=-Os
adafruit_matrixportal_m4.menu.opt.fast=Fast (-O2)
adafruit_matrixportal_m4.menu.opt.fast.build.flags.optimize=-O2
adafruit_matrixportal_m4.menu.opt.faster=Faster (-O3)
adafruit_matrixportal_m4.menu.opt.faster.build.flags.optimize=-O3
adafruit_matrixportal_m4.menu.opt.fastest=Fastest (-Ofast)
adafruit_matrixportal_m4.menu.opt.fastest.build.flags.optimize=-Ofast
adafruit_matrixportal_m4.menu.opt.dragons=Here be dragons (-Ofast -funroll-loops)
adafruit_matrixportal_m4.menu.opt.dragons.build.flags.optimize=-Ofast -funroll-loops
adafruit_matrixportal_m4.menu.maxqspi.50=50 MHz (standard)
adafruit_matrixportal_m4.menu.maxqspi.50.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=50000000
adafruit_matrixportal_m4.menu.maxqspi.fcpu=CPU Speed / 2
adafruit_matrixportal_m4.menu.maxqspi.fcpu.build.flags.maxqspi=-DVARIANT_QSPI_BAUD_DEFAULT=({build.f_cpu})
adafruit_matrixportal_m4.menu.usbstack.arduino=Arduino
adafruit_matrixportal_m4.menu.usbstack.tinyusb=TinyUSB
adafruit_matrixportal_m4.menu.usbstack.tinyusb.build.flags.usbstack=-DUSE_TINYUSB
adafruit_matrixportal_m4.menu.debug.off=Off
adafruit_matrixportal_m4.menu.debug.on=On
adafruit_matrixportal_m4.menu.debug.on.build.flags.debug=-g

# Adafruit BLM Badge (SAMD21)
# ------------------------------
Expand Down
Binary file not shown.
216 changes: 216 additions & 0 deletions variants/matrixportal_m4/linker_scripts/gcc/flash_with_bootloader.ld
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
/*
Copyright (c) 2014-2015 Arduino LLC. All right reserved.

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/

/* Linker script to configure memory regions.
* 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
*/
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00080000-0x4000 /* First 16KB used by bootloader */
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000
}

/* Linker script to place sections and symbol values. Should be used together
* with other linker script that defines memory regions FLASH and RAM.
* It references following symbols, which must be defined in code:
* Reset_Handler : Entry of reset handler
*
* It defines following symbols, which code can use without definition:
* __exidx_start
* __exidx_end
* __copy_table_start__
* __copy_table_end__
* __zero_table_start__
* __zero_table_end__
* __etext
* __data_start__
* __preinit_array_start
* __preinit_array_end
* __init_array_start
* __init_array_end
* __fini_array_start
* __fini_array_end
* __data_end__
* __bss_start__
* __bss_end__
* __end__
* end
* __HeapLimit
* __StackLimit
* __StackTop
* __stack
*/
ENTRY(Reset_Handler)

SECTIONS
{
.text :
{
__text_start__ = .;

KEEP(*(.sketch_boot))

. = ALIGN(0x4000);
KEEP(*(.isr_vector))
*(.text*)

KEEP(*(.init))
KEEP(*(.fini))

/* .ctors */
*crtbegin.o(.ctors)
*crtbegin?.o(.ctors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
*(SORT(.ctors.*))
*(.ctors)

/* .dtors */
*crtbegin.o(.dtors)
*crtbegin?.o(.dtors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
*(SORT(.dtors.*))
*(.dtors)

*(.rodata*)

KEEP(*(.eh_frame*))
} > FLASH

.ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} > FLASH

__exidx_start = .;
.ARM.exidx :
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
} > FLASH
__exidx_end = .;

/* To copy multiple ROM to RAM sections,
* uncomment .copy.table section and,
* define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
/*
.copy.table :
{
. = ALIGN(4);
__copy_table_start__ = .;
LONG (__etext)
LONG (__data_start__)
LONG (__data_end__ - __data_start__)
LONG (__etext2)
LONG (__data2_start__)
LONG (__data2_end__ - __data2_start__)
__copy_table_end__ = .;
} > FLASH
*/

/* To clear multiple BSS sections,
* uncomment .zero.table section and,
* define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
/*
.zero.table :
{
. = ALIGN(4);
__zero_table_start__ = .;
LONG (__bss_start__)
LONG (__bss_end__ - __bss_start__)
LONG (__bss2_start__)
LONG (__bss2_end__ - __bss2_start__)
__zero_table_end__ = .;
} > FLASH
*/

__etext = .;

.data : AT (__etext)
{
__data_start__ = .;
*(vtable)
*(.data*)

. = ALIGN(4);
/* preinit data */
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP(*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);

. = ALIGN(4);
/* init data */
PROVIDE_HIDDEN (__init_array_start = .);
KEEP(*(SORT(.init_array.*)))
KEEP(*(.init_array))
PROVIDE_HIDDEN (__init_array_end = .);


. = ALIGN(4);
/* finit data */
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP(*(SORT(.fini_array.*)))
KEEP(*(.fini_array))
PROVIDE_HIDDEN (__fini_array_end = .);

KEEP(*(.jcr*))
. = ALIGN(16);
/* All data end */
__data_end__ = .;

} > RAM

.bss :
{
. = ALIGN(4);
__bss_start__ = .;
*(.bss*)
*(COMMON)
. = ALIGN(4);
__bss_end__ = .;
} > RAM

.heap (COPY):
{
__end__ = .;
PROVIDE(end = .);
*(.heap*)
__HeapLimit = .;
} > RAM

/* .stack_dummy section doesn't contains any symbols. It is only
* used for linker to calculate size of stack sections, and assign
* values to stack symbols later */
.stack_dummy (COPY):
{
*(.stack*)
} > RAM

/* Set stack top to end of RAM, and stack limit move down by
* size of stack_dummy section */
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
PROVIDE(__stack = __StackTop);

__ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ;

/* Check if data + heap + stack exceeds RAM limit */
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
}
Loading

0 comments on commit 8d3b49b

Please sign in to comment.