diff --git a/boards/arduino-mega2560/Makefile b/boards/arduino-mega2560/Makefile index f8fcbb53a0..b597cd662a 100644 --- a/boards/arduino-mega2560/Makefile +++ b/boards/arduino-mega2560/Makefile @@ -1,3 +1,5 @@ MODULE = board +DIRS = $(RIOTBOARD)/arduino-atmega-common + include $(RIOTBASE)/Makefile.base diff --git a/boards/arduino-mega2560/Makefile.features b/boards/arduino-mega2560/Makefile.features index 8131d940b2..f76efd160e 100644 --- a/boards/arduino-mega2560/Makefile.features +++ b/boards/arduino-mega2560/Makefile.features @@ -1,10 +1 @@ -# Put defined MCU peripherals here (in alphabetical order) -FEATURES_PROVIDED += periph_gpio -FEATURES_PROVIDED += periph_spi -FEATURES_PROVIDED += periph_timer -FEATURES_PROVIDED += periph_uart - -# Various other features (if any) - -# The board MPU family (used for grouping by the CI system) -FEATURES_MCU_GROUP = avr8 +include $(RIOTBOARD)/arduino-atmega-common/Makefile.features diff --git a/boards/arduino-mega2560/Makefile.include b/boards/arduino-mega2560/Makefile.include index 601a6b2a4a..b77e1fa630 100644 --- a/boards/arduino-mega2560/Makefile.include +++ b/boards/arduino-mega2560/Makefile.include @@ -1,53 +1,19 @@ # define the cpu used by the arduino mega2560 board export CPU = atmega2560 -export TERMPROG = $(RIOTBASE)/dist/tools/pyterm/pyterm -export TERMFLAGS = -b 9600 -p $(PORT) +USEMODULE += arduino-atmega-common -#define the flash-tool and default port depending on the host operating system -OS = $(shell uname) -ifeq ($(OS),Linux) - PORT ?= /dev/ttyACM0 - FLASHER = avrdude -else ifeq ($(OS),Darwin) - PORT ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*))) - FLASHER = avrdude -else - $(info CAUTION: No flash tool for your host system found!) - # TODO: fix for building under windows -endif -export FLASHER -export PORT -export DIST_PATH = $(RIOTBOARD)/$(BOARD)/dist -export DEBUGSERVER_PORT = 4242 -export DEBUGSERVER = $(DIST_PATH)/debug_srv.sh -export DEBUGSERVER_FLAGS = "-g -j usb :$(DEBUGSERVER_PORT)" -export DEBUGGER_FLAGS = "-x $(RIOTBOARD)/$(BOARD)/dist/gdb.conf $(ELFFILE)" -export DEBUGGER = $(DIST_PATH)/debug.sh $(DEBUGSERVER_FLAGS) $(DIST_PATH) $(DEBUGSERVER_PORT) +# add arduino-atmega-common include path +INCLUDES += -I$(RIOTBOARD)/arduino-atmega-common/include + +#export needed for flash rule +export LINUX_PORT ?= /dev/ttyACM0 +export PROGRAMMER_SPEED ?= 115200 + +export FFLAGS += -p m2560 # PROGRAMMER defaults to stk500v2 which is the internal flasher via USB. Can be # overridden for debugging (which requires changes that require to use an ISP) export PROGRAMMER ?= stk500v2 -ifeq ($(PROGRAMMER), stk500v2) - export PROGRAMMER_FLAGS = -P $(PORT) -b 115200 -endif - -# define build specific options -export CFLAGS_CPU = -mmcu=atmega2560 $(CFLAGS_FPU) -export CFLAGS_LINK = -fno-builtin -fshort-enums -export CFLAGS_DBG ?= -ggdb -g3 -export CFLAGS_OPT ?= -Os - -export CFLAGS += $(CFLAGS_CPU) $(CFLAGS_LINK) $(CFLAGS_DBG) $(CFLAGS_OPT) -export ASFLAGS += $(CFLAGS_CPU) $(CFLAGS_DBG) -export LINKFLAGS += $(CFLAGS_CPU) $(CFLAGS_DBG) $(CFLAGS_OPT) -e reset_handler -export OFLAGS += -j .text -j .data -O ihex -export FFLAGS += -p m2560 -c $(PROGRAMMER) $(PROGRAMMER_FLAGS) -F -D -U flash:w:bin/$(BOARD)/$(PROJECT)$(APPLICATION).hex - -ifeq ($(LTO),1) - # avr-gcc <4.8.3 has a bug when using LTO which causes a warning to be printed always: - # '_vector_25' appears to be a misspelled signal handler [enabled by default] - # See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59396 - export LINKFLAGS += -Wno-error -endif +include $(RIOTBOARD)/arduino-atmega-common/Makefile.include \ No newline at end of file diff --git a/boards/arduino-mega2560/board.c b/boards/arduino-mega2560/board.c deleted file mode 100644 index c9166e967d..0000000000 --- a/boards/arduino-mega2560/board.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2014 Freie Universität Berlin, Hinnerk van Bruinehsen - * 2015 Kaspar Schleiser - * - * This file is subject to the terms and conditions of the GNU Lesser - * General Public License v2.1. See the file LICENSE in the top level - * directory for more details. - */ - -/** - * @ingroup boards_arduino-mega2560 - * @{ - * - * @file - * @brief Board specific implementations for the Arduino Mega 2560 board - * - * @author Hinnerk van Bruinehsen - * @author Kaspar Schleiser - * - * @} - */ - -#include -#include - -#include "board.h" -#include "cpu.h" -#include "uart_stdio.h" - -void led_init(void); -void SystemInit(void); -static int uart_putchar(char c, FILE *stream); -static int uart_getchar(FILE *stream); - -static FILE uart_stdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE); -static FILE uart_stdin = FDEV_SETUP_STREAM(NULL, uart_getchar, _FDEV_SETUP_READ); - -void board_init(void) -{ - /* initialize stdio via USART_0 */ - SystemInit(); - - /* initialize the CPU */ - cpu_init(); - - /* initialize the board LED (connected to pin PB7) */ - DDRB |= (1 << DDB7); - PORTB &= ~(1 << 7); - - irq_enable(); -} - -/** - * @brief Initialize the System, initialize IO via UART_0 - */ -void SystemInit(void) -{ - /* initialize UART_0 for use as stdout */ - uart_stdio_init(); - - stdout = &uart_stdout; - stdin = &uart_stdin; - - /* Flush stdout */ - puts("\f"); -} - -static int uart_putchar(char c, FILE *stream) -{ - (void) stream; - uart_stdio_write(&c, 1); - return 0; -} - -int uart_getchar(FILE *stream) -{ - (void) stream; - char c; - uart_stdio_read(&c, 1); - return (int)c; -} diff --git a/boards/arduino-mega2560/dist/debug.sh b/boards/arduino-mega2560/dist/debug.sh deleted file mode 100755 index 0b10852f20..0000000000 --- a/boards/arduino-mega2560/dist/debug.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -sleep 2 -setsid -w avarice $1 & -#sleep 2 && $2/avr-gdb-wrapper -ex "target remote localhost:$3" $4 -sleep 3 && avr-gdb -ex "target remote localhost:$3" $4 - -# avarice exits with 1 if the connection is released, therefore we always exit with 0 -exit 0 diff --git a/boards/arduino-mega2560/dist/debug_srv.sh b/boards/arduino-mega2560/dist/debug_srv.sh deleted file mode 100755 index 8e7de053ab..0000000000 --- a/boards/arduino-mega2560/dist/debug_srv.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -sleep 2 -avarice $1 - -# avarice exits with 1 if the connection is released, therefore we always exit with 0 -exit 0 diff --git a/boards/arduino-mega2560/dist/gdb.conf b/boards/arduino-mega2560/dist/gdb.conf deleted file mode 100644 index ca68eb344c..0000000000 --- a/boards/arduino-mega2560/dist/gdb.conf +++ /dev/null @@ -1 +0,0 @@ -set $pc=0x00 diff --git a/boards/arduino-mega2560/include/arduino_pinmap.h b/boards/arduino-mega2560/include/arduino_pinmap.h deleted file mode 100644 index 8d5480895b..0000000000 --- a/boards/arduino-mega2560/include/arduino_pinmap.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2015 Freie Universität Berlin - * - * This file is subject to the terms and conditions of the GNU Lesser - * General Public License v2.1. See the file LICENSE in the top level - * directory for more details. - */ - -/** - * @ingroup boards_arduino-mega2560 - * @{ - * - * @file - * @brief Mapping from MCU pins to Arduino pins - * - * You can use the defines in this file for simplified interaction with the - * Arduino specific pin numbers. - * - * @author Hauke Petersen - * @author Daniel Nordahl - */ - -#ifndef ARDUINO_PINMAP_H -#define ARDUINO_PINMAP_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @brief Mapping of MCU pins to Arduino pins - * - * @note ISCP pins are not mapped. - */ -#define ARDUINO_PIN_0 GPIO_PIN(PORT_E, 0) -#define ARDUINO_PIN_1 GPIO_PIN(PORT_E, 1) -#define ARDUINO_PIN_2 GPIO_PIN(PORT_E, 4) -#define ARDUINO_PIN_3 GPIO_PIN(PORT_E, 5) -#define ARDUINO_PIN_4 GPIO_PIN(PORT_G, 5) -#define ARDUINO_PIN_5 GPIO_PIN(PORT_E, 3) -#define ARDUINO_PIN_6 GPIO_PIN(PORT_H, 3) -#define ARDUINO_PIN_7 GPIO_PIN(PORT_H, 4) -#define ARDUINO_PIN_8 GPIO_PIN(PORT_H, 5) -#define ARDUINO_PIN_9 GPIO_PIN(PORT_H, 6) -#define ARDUINO_PIN_10 GPIO_PIN(PORT_B, 4) -#define ARDUINO_PIN_11 GPIO_PIN(PORT_B, 5) -#define ARDUINO_PIN_12 GPIO_PIN(PORT_B, 6) -#define ARDUINO_PIN_13 GPIO_PIN(PORT_B, 7) -#define ARDUINO_PIN_14 GPIO_PIN(PORT_J, 1) -#define ARDUINO_PIN_15 GPIO_PIN(PORT_J, 0) -#define ARDUINO_PIN_16 GPIO_PIN(PORT_H, 1) -#define ARDUINO_PIN_17 GPIO_PIN(PORT_H, 0) -#define ARDUINO_PIN_18 GPIO_PIN(PORT_D, 3) -#define ARDUINO_PIN_19 GPIO_PIN(PORT_D, 2) -#define ARDUINO_PIN_20 GPIO_PIN(PORT_D, 1) -#define ARDUINO_PIN_21 GPIO_PIN(PORT_D, 0) -#define ARDUINO_PIN_22 GPIO_PIN(PORT_A, 0) -#define ARDUINO_PIN_23 GPIO_PIN(PORT_A, 1) -#define ARDUINO_PIN_24 GPIO_PIN(PORT_A, 2) -#define ARDUINO_PIN_25 GPIO_PIN(PORT_A, 3) -#define ARDUINO_PIN_26 GPIO_PIN(PORT_A, 4) -#define ARDUINO_PIN_27 GPIO_PIN(PORT_A, 5) -#define ARDUINO_PIN_28 GPIO_PIN(PORT_A, 6) -#define ARDUINO_PIN_29 GPIO_PIN(PORT_A, 7) -#define ARDUINO_PIN_30 GPIO_PIN(PORT_C, 7) -#define ARDUINO_PIN_31 GPIO_PIN(PORT_C, 6) -#define ARDUINO_PIN_32 GPIO_PIN(PORT_C, 5) -#define ARDUINO_PIN_33 GPIO_PIN(PORT_C, 4) -#define ARDUINO_PIN_34 GPIO_PIN(PORT_C, 3) -#define ARDUINO_PIN_35 GPIO_PIN(PORT_C, 2) -#define ARDUINO_PIN_36 GPIO_PIN(PORT_C, 1) -#define ARDUINO_PIN_37 GPIO_PIN(PORT_E, 0) -#define ARDUINO_PIN_38 GPIO_PIN(PORT_D, 7) -#define ARDUINO_PIN_39 GPIO_PIN(PORT_G, 2) -#define ARDUINO_PIN_40 GPIO_PIN(PORT_G, 1) -#define ARDUINO_PIN_41 GPIO_PIN(PORT_G, 0) -#define ARDUINO_PIN_42 GPIO_PIN(PORT_L, 7) -#define ARDUINO_PIN_43 GPIO_PIN(PORT_L, 6) -#define ARDUINO_PIN_44 GPIO_PIN(PORT_L, 5) -#define ARDUINO_PIN_45 GPIO_PIN(PORT_L, 4) -#define ARDUINO_PIN_46 GPIO_PIN(PORT_L, 3) -#define ARDUINO_PIN_47 GPIO_PIN(PORT_L, 2) -#define ARDUINO_PIN_48 GPIO_PIN(PORT_L, 1) -#define ARDUINO_PIN_49 GPIO_PIN(PORT_L, 0) -#define ARDUINO_PIN_50 GPIO_PIN(PORT_B, 3) -#define ARDUINO_PIN_51 GPIO_PIN(PORT_B, 2) -#define ARDUINO_PIN_52 GPIO_PIN(PORT_B, 1) -#define ARDUINO_PIN_53 GPIO_PIN(PORT_B, 0) -#define ARDUINO_PIN_54 GPIO_PIN(PORT_F, 0) -#define ARDUINO_PIN_55 GPIO_PIN(PORT_F, 1) -#define ARDUINO_PIN_56 GPIO_PIN(PORT_F, 2) -#define ARDUINO_PIN_57 GPIO_PIN(PORT_F, 3) -#define ARDUINO_PIN_58 GPIO_PIN(PORT_F, 4) -#define ARDUINO_PIN_59 GPIO_PIN(PORT_F, 5) -#define ARDUINO_PIN_60 GPIO_PIN(PORT_F, 6) -#define ARDUINO_PIN_61 GPIO_PIN(PORT_F, 7) -#define ARDUINO_PIN_62 GPIO_PIN(PORT_K, 0) -#define ARDUINO_PIN_63 GPIO_PIN(PORT_K, 1) -#define ARDUINO_PIN_64 GPIO_PIN(PORT_K, 2) -#define ARDUINO_PIN_65 GPIO_PIN(PORT_K, 3) -#define ARDUINO_PIN_66 GPIO_PIN(PORT_K, 4) -#define ARDUINO_PIN_67 GPIO_PIN(PORT_K, 5) -#define ARDUINO_PIN_68 GPIO_PIN(PORT_K, 6) -#define ARDUINO_PIN_69 GPIO_PIN(PORT_K, 7) -#define ARDUINO_PIN_A0 ARDUINO_PIN_54 -#define ARDUINO_PIN_A1 ARDUINO_PIN_55 -#define ARDUINO_PIN_A2 ARDUINO_PIN_56 -#define ARDUINO_PIN_A3 ARDUINO_PIN_57 -#define ARDUINO_PIN_A4 ARDUINO_PIN_58 -#define ARDUINO_PIN_A5 ARDUINO_PIN_59 -#define ARDUINO_PIN_A6 ARDUINO_PIN_60 -#define ARDUINO_PIN_A7 ARDUINO_PIN_61 -#define ARDUINO_PIN_A8 ARDUINO_PIN_62 -#define ARDUINO_PIN_A9 ARDUINO_PIN_63 -#define ARDUINO_PIN_A10 ARDUINO_PIN_64 -#define ARDUINO_PIN_A11 ARDUINO_PIN_65 -#define ARDUINO_PIN_A12 ARDUINO_PIN_66 -#define ARDUINO_PIN_A13 ARDUINO_PIN_67 -#define ARDUINO_PIN_A14 ARDUINO_PIN_68 -#define ARDUINO_PIN_A15 ARDUINO_PIN_69 -/** @ */ - -#ifdef __cplusplus -} -#endif - -#endif /* ARDUINO_PINMAP_H */ -/** @} */ diff --git a/boards/arduino-mega2560/include/board.h b/boards/arduino-mega2560/include/board.h deleted file mode 100644 index 1aee0c2cc8..0000000000 --- a/boards/arduino-mega2560/include/board.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2014 Freie Universität Berlin, Hinnerk van Bruinehsen - * - * This file is subject to the terms and conditions of the GNU Lesser - * General Public License v2.1. See the file LICENSE in the top level - * directory for more details. - */ - -/** - * @defgroup boards_arduino-mega2560 Arduino Mega 2560 - * @ingroup boards - * @brief Board specific files for the Arduino Mega 2560 board. - * @{ - * - * @file - * @brief Board specific definitions for the Arduino Mega 2560 board. - * - * @author Hinnerk van Bruinehsen - */ - -#ifndef BOARD_H -#define BOARD_H - -#include "cpu.h" -#include "arduino_pinmap.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** -* @brief As the CPU is too slow to handle 115200 baud, we set the default -* baudrate to 9600 for this board -*/ -#define UART_STDIO_BAUDRATE (9600U) - -/** - * @brief LED pin definitions and handlers - * @{ - */ -#define LED0_PIN GPIO_PIN(1, 7) - -#define LED0_MASK (1 << DDB7) - -#define LED0_ON (PORTB |= LED0_MASK) -#define LED0_OFF (PORTB &= ~LED0_MASK) -#define LED0_TOGGLE (PORTB ^= LED0_MASK) -/** @} */ - - -/** - * Context swap defines - * Setup to use PJ6 which is pin change interrupt 15 (PCINT15) - * This emulates a software triggered interrupt - **/ -#define AVR_CONTEXT_SWAP_INIT do { \ - DDRJ |= (1 << PJ6); \ - PCICR |= (1 << PCIE1); \ - PCMSK1 |= (1 << PCINT15); \ -} while (0) -#define AVR_CONTEXT_SWAP_INTERRUPT_VECT PCINT1_vect -#define AVR_CONTEXT_SWAP_TRIGGER PORTJ ^= (1 << PJ6) - - - -/** - * @brief xtimer configuration values - * @{ - */ -#define XTIMER_WIDTH (16) -#define XTIMER_SHIFT (2) -#define XTIMER_HZ (250000UL) -#define XTIMER_BACKOFF (40) -/** @} */ - -/** - * @brief Initialize board specific hardware, including clock, LEDs and std-IO - */ -void board_init(void); - -#ifdef __cplusplus -} -#endif - -#endif /* BOARD_H */ -/** @} */ diff --git a/boards/arduino-mega2560/include/periph_conf.h b/boards/arduino-mega2560/include/periph_conf.h deleted file mode 100644 index 45c1e89d3f..0000000000 --- a/boards/arduino-mega2560/include/periph_conf.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2014-2016 Freie Universität Berlin - * 2014 Hinnerk van Bruinehsen - * - * This file is subject to the terms and conditions of the GNU Lesser - * General Public License v2.1. See the file LICENSE in the top level - * directory for more details. - */ - -/** - * @ingroup boards_arduino-mega2560 - * @{ - * - * @file - * @brief Peripheral MCU configuration for the Arduino Mega 2560 board - * - * @author Hinnerk van Bruinehsen - * @author Hauke Petersen - */ - -#ifndef PERIPH_CONF_H -#define PERIPH_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @brief Clock configuration - * @{ - */ -#define CLOCK_CORECLOCK (16000000L) -/** @} */ - -/** - * @name Timer configuration - * - * The timer driver only supports the four 16-bit timers (Timer1, Timer3, - * Timer4, Timer5), so those are the only onces we can use here. - * - * @{ - */ -#define TIMER_NUMOF (2U) - -#define TIMER_0 MEGA_TIMER1 -#define TIMER_0_MASK &TIMSK1 -#define TIMER_0_FLAG &TIFR1 -#define TIMER_0_ISRA TIMER1_COMPA_vect -#define TIMER_0_ISRB TIMER1_COMPB_vect -#define TIMER_0_ISRC TIMER1_COMPC_vect - -#define TIMER_1 MEGA_TIMER4 -#define TIMER_1_MASK &TIMSK4 -#define TIMER_1_FLAG &TIFR4 -#define TIMER_1_ISRA TIMER4_COMPA_vect -#define TIMER_1_ISRB TIMER4_COMPB_vect -#define TIMER_1_ISRC TIMER4_COMPC_vect -/** @} */ - -/** - * @name UART configuration - * - * The UART devices have fixed pin mappings, so all we need to do, is to specify - * which devices we would like to use and their corresponding RX interrupts. See - * the reference manual for the fixed pin mapping. - * - * @{ - */ -#define UART_NUMOF (4U) - -#define UART_0 MEGA_UART0 -#define UART_0_ISR USART0_RX_vect - -#define UART_1 MEGA_UART1 -#define UART_1_ISR USART1_RX_vect - -#define UART_2 MEGA_UART2 -#define UART_2_ISR USART2_RX_vect - -#define UART_3 MEGA_UART3 -#define UART_3_ISR USART3_RX_vect -/** @} */ - -/** - * @name SPI configuration - * - * The atmega2560 has only one hardware SPI with fixed pin configuration, so all - * we can do here, is to enable or disable it... - * - * The fixed pins used, are: - * MOSI - PB2 (Arduino pin 51) - * MISO - PB3 (Arduino pin 50) - * SCK - PB1 (Arduino pin 52) - * SS - PB0 (Arduino pin 53) -> this pin is configured as output, but not used - * - * @{ - */ -#define SPI_NUMOF 1 /* set to 0 to disable SPI */ -#define MEGA_PRR PRR0 /* Power Reduction Register is PRR0 */ -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* PERIPH_CONF_H */