From 6f02e5f1f85f0937bff083edb45f6ae3d17dd0d6 Mon Sep 17 00:00:00 2001 From: Katherine Temkin Date: Wed, 3 Feb 2021 13:33:40 -0700 Subject: [PATCH 1/2] add BSP for SAMD11 variant of Great Scott Gadgets' LUNA boards (SAMD11) --- hw/bsp/samd11/boards/luna_d11/board.h | 46 ++++++ hw/bsp/samd11/boards/luna_d11/board.mk | 11 ++ .../boards/luna_d11/samd11d14am_flash.ld | 143 ++++++++++++++++++ hw/bsp/samd11/boards/samd11_xplained/board.h | 46 ++++++ hw/bsp/samd11/boards/samd11_xplained/board.mk | 12 ++ .../samd11_xplained/samd11d14am_flash.ld | 0 .../samd11_xplained.c => samd11/family.c} | 12 +- .../board.mk => samd11/family.mk} | 15 +- 8 files changed, 267 insertions(+), 18 deletions(-) create mode 100644 hw/bsp/samd11/boards/luna_d11/board.h create mode 100644 hw/bsp/samd11/boards/luna_d11/board.mk create mode 100644 hw/bsp/samd11/boards/luna_d11/samd11d14am_flash.ld create mode 100644 hw/bsp/samd11/boards/samd11_xplained/board.h create mode 100644 hw/bsp/samd11/boards/samd11_xplained/board.mk rename hw/bsp/{ => samd11/boards}/samd11_xplained/samd11d14am_flash.ld (100%) rename hw/bsp/{samd11_xplained/samd11_xplained.c => samd11/family.c} (95%) rename hw/bsp/{samd11_xplained/board.mk => samd11/family.mk} (80%) diff --git a/hw/bsp/samd11/boards/luna_d11/board.h b/hw/bsp/samd11/boards/luna_d11/board.h new file mode 100644 index 00000000..1bda9293 --- /dev/null +++ b/hw/bsp/samd11/boards/luna_d11/board.h @@ -0,0 +1,46 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2020, Ha Thach (tinyusb.org) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * This file is part of the TinyUSB stack. + */ + +#ifndef BOARD_H_ +#define BOARD_H_ + +#ifdef __cplusplus + extern "C" { +#endif + +// LED +#define LED_PIN PIN_PA27 // pin PA22 +#define LED_STATE_ON 0 + +// Button +#define BUTTON_PIN PIN_PA16 // pin PB22 +#define BUTTON_STATE_ACTIVE 0 + +#ifdef __cplusplus + } +#endif + +#endif /* BOARD_H_ */ diff --git a/hw/bsp/samd11/boards/luna_d11/board.mk b/hw/bsp/samd11/boards/luna_d11/board.mk new file mode 100644 index 00000000..ad9cfb25 --- /dev/null +++ b/hw/bsp/samd11/boards/luna_d11/board.mk @@ -0,0 +1,11 @@ +CFLAGS += -D__SAMD11D14AM__ + +# All source paths should be relative to the top level. +LD_FILE = $(BOARD_PATH)/samd11d14am_flash.ld + +# For flash-jlink target +JLINK_DEVICE = ATSAMD11D14 + +# flash using dfu-util +flash: $(BUILD)/$(PROJECT).bin + dfu-util -a 0 -d 1d50:615c -D $< || dfu-util -a 0 -d 16d0:05a5 -D $< diff --git a/hw/bsp/samd11/boards/luna_d11/samd11d14am_flash.ld b/hw/bsp/samd11/boards/luna_d11/samd11d14am_flash.ld new file mode 100644 index 00000000..c9b825d6 --- /dev/null +++ b/hw/bsp/samd11/boards/luna_d11/samd11d14am_flash.ld @@ -0,0 +1,143 @@ +/** + * \file + * + * \brief Linker script for running in internal FLASH on the SAMD11D14AM + * + * Copyright (c) 2018 Microchip Technology Inc. + * + * \asf_license_start + * + * \page License + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 Licence 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. + * + * \asf_license_stop + * + */ + + +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") +OUTPUT_ARCH(arm) +SEARCH_DIR(.) + +/* Memory Spaces Definitions */ +MEMORY +{ + rom (rx) : ORIGIN = 0x00000000 + 4K, LENGTH = 0x00004000 - 4K + ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 +} + +/* 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__ : 0x400; + +/* 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(4); + 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 = .; + } > ram + + /* stack section */ + .stack (NOLOAD): + { + . = ALIGN(8); + _sstack = .; + . = . + STACK_SIZE; + . = ALIGN(8); + _estack = .; + } > ram + + . = ALIGN(4); + _end = . ; +} diff --git a/hw/bsp/samd11/boards/samd11_xplained/board.h b/hw/bsp/samd11/boards/samd11_xplained/board.h new file mode 100644 index 00000000..cfeac673 --- /dev/null +++ b/hw/bsp/samd11/boards/samd11_xplained/board.h @@ -0,0 +1,46 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2020, Ha Thach (tinyusb.org) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * This file is part of the TinyUSB stack. + */ + +#ifndef BOARD_H_ +#define BOARD_H_ + +#ifdef __cplusplus + extern "C" { +#endif + +// LED +#define LED_PIN PIN_PA16 // pin PA22 +#define LED_STATE_ON 0 + +// Button +#define BUTTON_PIN PIN_PA14 // pin PB22 +#define BUTTON_STATE_ACTIVE 0 + +#ifdef __cplusplus + } +#endif + +#endif /* BOARD_H_ */ diff --git a/hw/bsp/samd11/boards/samd11_xplained/board.mk b/hw/bsp/samd11/boards/samd11_xplained/board.mk new file mode 100644 index 00000000..79ad8706 --- /dev/null +++ b/hw/bsp/samd11/boards/samd11_xplained/board.mk @@ -0,0 +1,12 @@ +CFLAGS += -D__SAMD11D14AM__ + +# All source paths should be relative to the top level. +LD_FILE = $(BOARD_PATH)/samd11d14am_flash.ld + +# For flash-jlink target +JLINK_DEVICE = ATSAMD11D14 + + +# flash using edbg +flash: $(BUILD)/$(PROJECT).bin + edbg -b -t samd11 -e -pv -f $< diff --git a/hw/bsp/samd11_xplained/samd11d14am_flash.ld b/hw/bsp/samd11/boards/samd11_xplained/samd11d14am_flash.ld similarity index 100% rename from hw/bsp/samd11_xplained/samd11d14am_flash.ld rename to hw/bsp/samd11/boards/samd11_xplained/samd11d14am_flash.ld diff --git a/hw/bsp/samd11_xplained/samd11_xplained.c b/hw/bsp/samd11/family.c similarity index 95% rename from hw/bsp/samd11_xplained/samd11_xplained.c rename to hw/bsp/samd11/family.c index 874e36d7..8d963397 100644 --- a/hw/bsp/samd11_xplained/samd11_xplained.c +++ b/hw/bsp/samd11/family.c @@ -24,9 +24,10 @@ * This file is part of the TinyUSB stack. */ -#include "bsp/board.h" - #include "sam.h" +#include "bsp/board.h" +#include "board.h" + #include "hal/include/hal_gpio.h" #include "hal/include/hal_init.h" #include "hri/hri_nvmctrl_d11.h" @@ -47,8 +48,6 @@ void USB_Handler(void) //--------------------------------------------------------------------+ // MACRO TYPEDEF CONSTANT ENUM DECLARATION //--------------------------------------------------------------------+ -#define LED_PIN PIN_PA16 // pin PA22 -#define BUTTON_PIN PIN_PA14 // pin PB22 /* Referenced GCLKs, should be initialized firstly */ #define _GCLK_INIT_1ST (1 << 0 | 1 << 1) @@ -106,13 +105,12 @@ void board_init(void) void board_led_write(bool state) { - gpio_set_pin_level(LED_PIN, state); + gpio_set_pin_level(LED_PIN, state ? LED_STATE_ON : (1-LED_STATE_ON)); } uint32_t board_button_read(void) { - // button is active low - return gpio_get_pin_level(BUTTON_PIN) ? 0 : 1; + return BUTTON_STATE_ACTIVE == gpio_get_pin_level(BUTTON_PIN); } int board_uart_read(uint8_t* buf, int len) diff --git a/hw/bsp/samd11_xplained/board.mk b/hw/bsp/samd11/family.mk similarity index 80% rename from hw/bsp/samd11_xplained/board.mk rename to hw/bsp/samd11/family.mk index c12ecd21..4f01db8d 100644 --- a/hw/bsp/samd11_xplained/board.mk +++ b/hw/bsp/samd11/family.mk @@ -1,16 +1,15 @@ + +include $(TOP)/$(BOARD_PATH)/board.mk + CFLAGS += \ -mthumb \ -mabi=aapcs-linux \ -mcpu=cortex-m0plus \ -nostdlib -nostartfiles \ - -D__SAMD11D14AM__ \ -DCONF_DFLL_OVERWRITE_CALIBRATION=0 \ -DOSC32K_OVERWRITE_CALIBRATION=0 \ -DCFG_TUSB_MCU=OPT_MCU_SAMD11 -# All source paths should be relative to the top level. -LD_FILE = hw/bsp/$(BOARD)/samd11d14am_flash.ld - SRC_C += \ hw/mcu/microchip/samd11/gcc/gcc/startup_samd11.c \ hw/mcu/microchip/samd11/gcc/system_samd11.c \ @@ -20,6 +19,7 @@ SRC_C += \ hw/mcu/microchip/samd11/hal/src/hal_atomic.c INC += \ + $(TOP)/$(BOARD_PATH) \ $(TOP)/hw/mcu/microchip/samd11/ \ $(TOP)/hw/mcu/microchip/samd11/config \ $(TOP)/hw/mcu/microchip/samd11/include \ @@ -37,10 +37,3 @@ CHIP_FAMILY = samd # For freeRTOS port source FREERTOS_PORT = ARM_CM0 - -# For flash-jlink target -JLINK_DEVICE = ATSAMD11D14 - -# flash using edbg -flash: $(BUILD)/$(PROJECT).bin - edbg -b -t samd11 -e -pv -f $< From 2997e78da3d1f54548ce9687f318e323e5669371 Mon Sep 17 00:00:00 2001 From: Katherine Temkin Date: Wed, 3 Feb 2021 13:34:11 -0700 Subject: [PATCH 2/2] bsp: rename SAMD21 LUNA variant to luna_d21 We now have SAMD21 and SAMD11 variants of LUNA; so we'll rename the existing LUNA BSP to be more specific / reflect its version. --- hw/bsp/samd21/boards/{luna => luna_d21}/board.h | 0 hw/bsp/samd21/boards/{luna => luna_d21}/board.mk | 0 hw/bsp/samd21/boards/{luna => luna_d21}/samd21g18a_flash.ld | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename hw/bsp/samd21/boards/{luna => luna_d21}/board.h (100%) rename hw/bsp/samd21/boards/{luna => luna_d21}/board.mk (100%) rename hw/bsp/samd21/boards/{luna => luna_d21}/samd21g18a_flash.ld (100%) diff --git a/hw/bsp/samd21/boards/luna/board.h b/hw/bsp/samd21/boards/luna_d21/board.h similarity index 100% rename from hw/bsp/samd21/boards/luna/board.h rename to hw/bsp/samd21/boards/luna_d21/board.h diff --git a/hw/bsp/samd21/boards/luna/board.mk b/hw/bsp/samd21/boards/luna_d21/board.mk similarity index 100% rename from hw/bsp/samd21/boards/luna/board.mk rename to hw/bsp/samd21/boards/luna_d21/board.mk diff --git a/hw/bsp/samd21/boards/luna/samd21g18a_flash.ld b/hw/bsp/samd21/boards/luna_d21/samd21g18a_flash.ld similarity index 100% rename from hw/bsp/samd21/boards/luna/samd21g18a_flash.ld rename to hw/bsp/samd21/boards/luna_d21/samd21g18a_flash.ld