diff --git a/Documentation/platforms/avr/atmega/boards/elegoo-mega2560r3/elegoo-mega2560r3.jpg b/Documentation/platforms/avr/atmega/boards/elegoo-mega2560r3/elegoo-mega2560r3.jpg
new file mode 100644
index 00000000000..2b3dcf1dc43
Binary files /dev/null and b/Documentation/platforms/avr/atmega/boards/elegoo-mega2560r3/elegoo-mega2560r3.jpg differ
diff --git a/Documentation/platforms/avr/atmega/boards/elegoo-mega2560r3/index.rst b/Documentation/platforms/avr/atmega/boards/elegoo-mega2560r3/index.rst
new file mode 100644
index 00000000000..e05e79764e9
--- /dev/null
+++ b/Documentation/platforms/avr/atmega/boards/elegoo-mega2560r3/index.rst
@@ -0,0 +1,120 @@
+====================
+Elegoo Mega2560 Rev3
+====================
+
+.. tags:: chip:atmega2560, chip:atmega, arch:avr, vendor:elegoo, experimental
+
+.. figure:: elegoo-mega2560r3.jpg
+ :scale: 40 %
+ :align: center
+ :alt: The Elegoo Mega2560 Rev3 board with its included USB cable
+
+ The Elegoo Mega2560 Rev3 board with its included USB cable
+
+This board is a variant of the `Arduino Mega2560 Rev3 board
+`_ designed by Elegoo. The `product
+listing can be found here
+`_.
+
+Features
+========
+
+* Atmel ATMega2560 chip
+* 54 digital pins
+* 16 analog inputs
+* 4 serial ports
+* 4KB EEPROM
+
+.. warning::
+
+ The ATMega2560 chip supported is limited, and thus this board does not
+ support many peripherals. If you would like to help improve support for this
+ board and other ATMega2560-based boards, please see the :doc:`contributing
+ guidelines `.
+
+Buttons and LEDs
+================
+
+The board has a large RESET button, which is not user controllable.
+
+There are 4 LEDs on-board the Elegoo Mega2560 Rev3:
+
+* ON: indicates active power, connected directly to the power supply
+* TX: indicates transmitting data
+* RX: indicates receiving data
+* TEST: board controllable LED, near "PWM" label. Turns on to indicate that
+ NuttX started, and flashes at 1Hz to indicate panic.
+
+Pin Mapping
+===========
+
+The full pin-out of this board is the same as the Arduino Mega2560r3 pinout,
+which can be found `here `_.
+
+Power Supply
+============
+
+This board uses 5V logic. It has on-board power regulation to provide 5V and
+3.3V rails to the user. The 3.3V rail can only supply 50mA.
+
+The board can be powered a few different ways:
+
+* Via the USB connection at 5V
+* Via external power supply to the barrel jack (center-positive) at 7V - 12V
+
+Installation
+============
+
+You will need the ``avrdude`` utility to flash this board. For instructions on
+how to install the AVR toolchain, consult the main documentation for the AVR
+architecture.
+
+Building NuttX
+==============
+
+In order to build NuttX, you can follow the regular process of using
+``./tools/configure.sh`` and ``make``.
+
+.. code:: console
+
+ $ ./tools/configure.sh elegoo-mega2560r3:nsh
+ $ make
+
+The build system will generate a ``.hex`` file along with the typical ELF file.
+If not, enable the ``CONFIG_INTELHEX_BINARY`` option.
+
+.. warning::
+
+ Beware of the small memory size of this board's chip when choosing what to
+ include in your NuttX image.
+
+Flashing
+========
+
+Then, to flash the board, connect it via USB to the host computer and run the
+following command:
+
+.. code:: console
+
+ $ avrdude -c stk500v2 -p m2560 -P /dev/ttyACM0 -U flash:w:nuttx.hex -v -D
+
+This command assumes that the board USB connection is available on ``ttyACM0``,
+but you should verify the file path to its connection. You can use ``lsusb`` on
+Linux to look for "Arduino SA Mega 2560 R3".
+
+If you want to reduce the console output of the command, remove the ``-v`` flag.
+
+The board uses the STK500v2 programmer type through the on-board programmer,
+hence the argument to ``-c``. The argument to ``-p`` specifies the AVR device to
+be the ATMega2560. The ``-U`` argument tells the program to write the
+``nuttx.hex`` image to flash.
+
+Configurations
+==============
+
+nsh
+---
+
+Very basic configuration with the ``nsh`` shell on the UART0 pins at a baud
+rate of 38400. You can also access UART0 through the USB connector on your host
+machine.
diff --git a/boards/Kconfig b/boards/Kconfig
index 2e216187802..64f394f7072 100644
--- a/boards/Kconfig
+++ b/boards/Kconfig
@@ -27,6 +27,14 @@ config ARCH_BOARD_ARDUINO_MEGA2560
This option selects the Arduino Mega 2560 board featuring the Atmel
Atmega2560 MCU running at 16 MHz.
+config ARCH_BOARD_ELEGOO_MEGA2560R3
+ bool "Elegoo Mega 2560r3"
+ depends on ARCH_CHIP_ATMEGA2560
+ select ARCH_HAVE_LEDS
+ ---help---
+ This option selects the Elegoo Mega 2560 board featuring the Atmel
+ Atmega2560 MCU running at 16 MHz.
+
config ARCH_BOARD_ARDUINO_DUE
bool "Arduino Due"
depends on ARCH_CHIP_ATSAM3X8E
@@ -3450,6 +3458,7 @@ config ARCH_BOARD
default "efm32-g8xx-stk" if ARCH_BOARD_EFM32G8XXSTK
default "efm32gg-stk3700" if ARCH_BOARD_EFM32GG_STK3700
default "ekk-lm3s9b96" if ARCH_BOARD_EKKLM3S9B96
+ default "elegoo-mega2560r3" if ARCH_BOARD_ELEGOO_MEGA2560R3
default "emw3162" if ARCH_BOARD_EMW3162
default "quickfeather" if ARCH_BOARD_QUICKFEATHER
default "esp32-audio-kit" if ARCH_BOARD_ESP32_AUDIO_KIT
@@ -4597,6 +4606,9 @@ endif
if ARCH_BOARD_ARDUINO_MEGA2560
source "boards/avr/atmega/arduino-mega2560/Kconfig"
endif
+if ARCH_BOARD_ELEGOO_MEGA2560R3
+source "boards/avr/atmega/elegoo-mega2560r3/Kconfig"
+endif
if ARCH_BOARD_MOTEINO_MEGA
source "boards/avr/atmega/moteino-mega/Kconfig"
endif
diff --git a/boards/avr/atmega/elegoo-mega2560r3/Kconfig b/boards/avr/atmega/elegoo-mega2560r3/Kconfig
new file mode 100644
index 00000000000..ae2bf31307d
--- /dev/null
+++ b/boards/avr/atmega/elegoo-mega2560r3/Kconfig
@@ -0,0 +1,4 @@
+#
+# For a description of the syntax of this configuration file,
+# see misc/tools/kconfig-language.txt.
+#
diff --git a/boards/avr/atmega/elegoo-mega2560r3/configs/nsh/defconfig b/boards/avr/atmega/elegoo-mega2560r3/configs/nsh/defconfig
new file mode 100644
index 00000000000..2d690acf672
--- /dev/null
+++ b/boards/avr/atmega/elegoo-mega2560r3/configs/nsh/defconfig
@@ -0,0 +1,42 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# CONFIG_DEBUG_OPT_UNUSED_SECTIONS is not set
+CONFIG_ARCH="avr"
+CONFIG_ARCH_AVR=y
+CONFIG_ARCH_BOARD="elegoo-mega2560r3"
+CONFIG_ARCH_BOARD_ELEGOO_MEGA2560R3=y
+CONFIG_ARCH_CHIP="atmega"
+CONFIG_ARCH_CHIP_ATMEGA2560=y
+CONFIG_ARCH_CHIP_ATMEGA=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_AVR_LINUXGCC_TOOLCHAIN=y
+CONFIG_AVR_USART0=y
+CONFIG_BOARD_LOOPSPERMSEC=800
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DEFAULT_SMALL=y
+CONFIG_DISABLE_MOUNTPOINT=y
+CONFIG_IDLETHREAD_STACKSIZE=128
+CONFIG_INIT_ENTRYPOINT="nsh_main"
+CONFIG_INIT_STACKSIZE=768
+CONFIG_INTELHEX_BINARY=y
+CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=4
+CONFIG_NUNGET_CHARS=0
+CONFIG_POSIX_SPAWN_DEFAULT_STACKSIZE=768
+CONFIG_PTHREAD_STACK_DEFAULT=128
+CONFIG_PTHREAD_STACK_MIN=128
+CONFIG_RAM_SIZE=8192
+CONFIG_RAM_START=0x800200
+CONFIG_START_DAY=16
+CONFIG_START_MONTH=6
+CONFIG_START_YEAR=2011
+CONFIG_STDIO_BUFFER_SIZE=0
+CONFIG_SYSTEM_NSH=y
+CONFIG_TASK_NAME_SIZE=0
+CONFIG_USART0_BAUD=38400
+CONFIG_USART0_SERIAL_CONSOLE=y
diff --git a/boards/avr/atmega/elegoo-mega2560r3/include/board.h b/boards/avr/atmega/elegoo-mega2560r3/include/board.h
new file mode 100644
index 00000000000..2912a8d263e
--- /dev/null
+++ b/boards/avr/atmega/elegoo-mega2560r3/include/board.h
@@ -0,0 +1,88 @@
+/****************************************************************************
+ * boards/avr/atmega/elegoo-mega2560r3/include/board.h
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you 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.
+ *
+ ****************************************************************************/
+
+#ifndef __BOARDS_AVR_ATMEGA_ELEGOO_MEGA2560R3_INCLUDE_BOARD_H
+#define __BOARDS_AVR_ATMEGA_ELEGOO_MEGA2560R3_INCLUDE_BOARD_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Configuration ************************************************************/
+
+/* Clocking *****************************************************************/
+
+/* Assume default CLKDIV8 fuse setting is overridden to CLKDIV1 */
+
+/* #define BOARD_XTAL_FREQ 20000000 */ /* 20MHz crystal */
+
+/* #define BOARD_XTAL_FREQ 16700000 */ /* 16.7MHz crystal */
+
+#define BOARD_XTAL_FREQ 16000000 /* 16MHz crystal */
+#define BOARD_CPU_CLOCK BOARD_XTAL_FREQ /* F_CPU = 16MHz */
+
+/* LED definitions for Elegoo Mega2560r3 */
+
+#define LED_STARTED 0 /* OFF ON (when board turns on) */
+#define LED_HEAPALLOCATE 1 /* OFF ON (never happens) */
+#define LED_IRQSENABLED 1 /* OFF ON (never happens) */
+#define LED_STACKCREATED 1 /* ON ON (never happens) */
+#define LED_INIRQ 1 /* OFF NC (never happens) */
+#define LED_SIGNAL 1 /* OFF NC (never happens) */
+#define LED_ASSERTION 1 /* OFF NC (never happens) */
+#define LED_PANIC 2 /* OFF ON (1Hz flashing PB7) */
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+/****************************************************************************
+ * Inline Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+#ifdef __cplusplus
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+#undef EXTERN
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __ASSEMBLY__ */
+#endif /* __BOARDS_AVR_ATMEGA_ELEGOO_MEGA2560R3_INCLUDE_BOARD_H */
diff --git a/boards/avr/atmega/elegoo-mega2560r3/scripts/Make.defs b/boards/avr/atmega/elegoo-mega2560r3/scripts/Make.defs
new file mode 100644
index 00000000000..be258e62106
--- /dev/null
+++ b/boards/avr/atmega/elegoo-mega2560r3/scripts/Make.defs
@@ -0,0 +1,37 @@
+############################################################################
+# boards/avr/atmega/elegoo-mega2560r3/scripts/Make.defs
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership. The
+# ASF licenses this file to you 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.
+#
+############################################################################
+
+include $(TOPDIR)/.config
+include $(TOPDIR)/tools/Config.mk
+include $(TOPDIR)/arch/avr/src/avr/Toolchain.defs
+
+LDSCRIPT = flash.ld
+ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)
+
+
+CFLAGS := $(ARCHCFLAGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
+CXXFLAGS := $(ARCHCXXFLAGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
+CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS)
+CPPFLAGS := $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
+AFLAGS := $(CFLAGS) -D__ASSEMBLY__
+
+EXEEXT = .elf
diff --git a/boards/avr/atmega/elegoo-mega2560r3/scripts/flash.ld b/boards/avr/atmega/elegoo-mega2560r3/scripts/flash.ld
new file mode 100644
index 00000000000..b4e275f4348
--- /dev/null
+++ b/boards/avr/atmega/elegoo-mega2560r3/scripts/flash.ld
@@ -0,0 +1,200 @@
+/****************************************************************************
+ * boards/avr/atmega/elegoo-mega2560r3/scripts/flash.ld
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you 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.
+ *
+ ****************************************************************************/
+
+/* Memory Regions ***********************************************************/
+
+/* ------ ------ ------+------- -- ------ -- ------ --- ------ ----+------- ---
+ * FLASH | REGISTERS I/O EXT I/O ISRAM | EEPROM
+ * | REGISTERS REGISTERS |
+ * ------- ------ -----+------- -- ------ -- ------ --- ------ ----+------- ---
+ * 0x0000 256Kb| 0x0000 32 0x0020 64 0x0060 416 0x0200 8Kb | 0x0000 4Kb
+ * ------- ------ -----+------- -- ------ -- ------ --- ------ ----+------- ---
+ * *Memory configuration A
+ */
+
+MEMORY
+{
+ flash (rx) : ORIGIN = 0, LENGTH = 256K
+ sram (rw!x) : ORIGIN = 0x800200, LENGTH = 8K
+ eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 4K
+}
+
+ENTRY(__start)
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .gnu.version : { *(.gnu.version) }
+ .gnu.version_d : { *(.gnu.version_d) }
+ .gnu.version_r : { *(.gnu.version_r) }
+ .rel.init : { *(.rel.init) }
+ .rela.init : { *(.rela.init) }
+
+ .rel.text :
+ {
+ *(.rel.text)
+ *(.rel.text.*)
+ *(.rel.gnu.linkonce.t*)
+ }
+
+ .rela.text :
+ {
+ *(.rela.text)
+ *(.rela.text.*)
+ *(.rela.gnu.linkonce.t*)
+ }
+
+ .rel.fini : { *(.rel.fini) }
+ .rela.fini : { *(.rela.fini) }
+
+ .rel.rodata :
+ {
+ *(.rel.rodata)
+ *(.rel.rodata.*)
+ *(.rel.gnu.linkonce.r*)
+ }
+
+ .rela.rodata :
+ {
+ *(.rela.rodata)
+ *(.rela.rodata.*)
+ *(.rela.gnu.linkonce.r*)
+ }
+
+ .rel.data :
+ {
+ *(.rel.data)
+ *(.rel.data.*)
+ *(.rel.gnu.linkonce.d*)
+ }
+
+ .rela.data :
+ {
+ *(.rela.data)
+ *(.rela.data.*)
+ *(.rela.gnu.linkonce.d*)
+ }
+
+ .rel.ctors : { *(.rel.ctors) }
+ .rela.ctors : { *(.rela.ctors) }
+ .rel.dtors : { *(.rel.dtors) }
+ .rela.dtors : { *(.rela.dtors) }
+ .rel.got : { *(.rel.got) }
+ .rela.got : { *(.rela.got) }
+ .rel.bss : { *(.rel.bss) }
+ .rela.bss : { *(.rela.bss) }
+ .rel.plt : { *(.rel.plt) }
+ .rela.plt : { *(.rela.plt) }
+
+ .text :
+ {
+ _stext = . ;
+ KEEP(*(.vectors))
+ *(.init)
+ *(.handlers)
+ *(.progmem .progmem.*)
+ . = ALIGN(2);
+ *(.text)
+ *(.text.*)
+ _etext = . ;
+ } > flash
+
+ .data :
+ {
+ _sdata = ABSOLUTE(.);
+ *(.rodata .rodata.*)
+ *(.data .data.*)
+ *(.gnu.linkonce.d.*)
+ CONSTRUCTORS
+ _edata = ABSOLUTE(.);
+ } > sram AT > flash
+
+ _eronly = LOADADDR(.data);
+
+ .bss :
+ {
+ _sbss = ABSOLUTE(.);
+ *(.bss .bss.*)
+ *(.gnu.linkonce.b.*)
+ *(COMMON)
+ _ebss = ABSOLUTE(.);
+ } > sram
+
+ /* Global data not cleared after reset. */
+
+ .noinit :
+ {
+ _snoinit = ABSOLUTE(.);
+ *(.noinit*)
+ _enoinit = ABSOLUTE(.);
+ } > sram
+
+ .eeprom :
+ {
+ _seeprom = ABSOLUTE(.);
+ *(.eeprom*)
+ _eeeprom = ABSOLUTE(.);
+ } > eeprom
+
+ /* Stabs debugging sections. */
+
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+
+ /* DWARF 2 */
+
+ .debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+}
diff --git a/boards/avr/atmega/elegoo-mega2560r3/src/Makefile b/boards/avr/atmega/elegoo-mega2560r3/src/Makefile
new file mode 100644
index 00000000000..de15084f89e
--- /dev/null
+++ b/boards/avr/atmega/elegoo-mega2560r3/src/Makefile
@@ -0,0 +1,31 @@
+############################################################################
+# boards/avr/atmega/elegoo-mega2560r3/src/Makefile
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership. The
+# ASF licenses this file to you 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.
+#
+############################################################################
+
+include $(TOPDIR)/Make.defs
+
+CSRCS = avr_boot.c
+
+ifeq ($(CONFIG_ARCH_LEDS),y)
+CSRCS += avr_leds.c
+endif
+
+include $(TOPDIR)/boards/Board.mk
diff --git a/boards/avr/atmega/elegoo-mega2560r3/src/avr_boot.c b/boards/avr/atmega/elegoo-mega2560r3/src/avr_boot.c
new file mode 100644
index 00000000000..bbd2977b330
--- /dev/null
+++ b/boards/avr/atmega/elegoo-mega2560r3/src/avr_boot.c
@@ -0,0 +1,68 @@
+/****************************************************************************
+ * boards/avr/atmega/elegoo-mega2560r3/src/avr_boot.c
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you 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.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include
+
+#include
+
+#include
+#include
+
+#include "atmega.h"
+#include "avr_internal.h"
+#include "elegoo_mega2560r3.h"
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: up_boardinitialize
+ *
+ * Description:
+ * All ATMega architectures must provide the following entry point.
+ * This entry point is called early in the initialization -- after all
+ * memory has been configured and mapped but before any devices have been
+ * initialized.
+ *
+ ****************************************************************************/
+
+void atmega_boardinitialize(void)
+{
+ /* Configure on-board LEDs if LED support has been selected. */
+
+#ifdef CONFIG_ARCH_LEDS
+ board_autoled_initialize();
+#endif
+}
diff --git a/boards/avr/atmega/elegoo-mega2560r3/src/avr_leds.c b/boards/avr/atmega/elegoo-mega2560r3/src/avr_leds.c
new file mode 100644
index 00000000000..84cbc771cc7
--- /dev/null
+++ b/boards/avr/atmega/elegoo-mega2560r3/src/avr_leds.c
@@ -0,0 +1,81 @@
+/****************************************************************************
+ * boards/avr/atmega/elegoo-mega2560r3/src/avr_leds.c
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you 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.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include
+
+#include
+
+#include
+#include
+
+#include "avr_internal.h"
+#include "elegoo_mega2560r3.h"
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_autoled_initialize
+ ****************************************************************************/
+
+#ifdef CONFIG_ARCH_LEDS
+void board_autoled_initialize(void)
+{
+ DDRB |= (1 << 7); /* Configure as output */
+}
+
+/****************************************************************************
+ * Name: board_autoled_on
+ ****************************************************************************/
+
+void board_autoled_on(int led)
+{
+ switch (led)
+ {
+ case LED_STARTED:
+ case LED_PANIC:
+ PORTB |= (1 << 7);
+ break;
+ }
+}
+
+/****************************************************************************
+ * Name: board_autoled_off
+ ****************************************************************************/
+
+void board_autoled_off(int led)
+{
+ switch (led)
+ {
+ case LED_STARTED:
+ case LED_PANIC:
+ PORTB &= ~(1 << 7);
+ break;
+ }
+}
+
+#endif /* CONFIG_ARCH_LEDS */
diff --git a/boards/avr/atmega/elegoo-mega2560r3/src/elegoo_mega2560r3.h b/boards/avr/atmega/elegoo-mega2560r3/src/elegoo_mega2560r3.h
new file mode 100644
index 00000000000..bc6c021ad6b
--- /dev/null
+++ b/boards/avr/atmega/elegoo-mega2560r3/src/elegoo_mega2560r3.h
@@ -0,0 +1,53 @@
+/****************************************************************************
+ * boards/avr/atmega/elegoo-mega2560r3/src/elegoo_mega2560r3.h
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you 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.
+ *
+ ****************************************************************************/
+
+#ifndef __BOARDS_AVR_ATMEGA_ELEGOO_MEGA2560R3_SRC_ELEGOO_MEGA2560R3_H
+#define __BOARDS_AVR_ATMEGA_ELEGOO_MEGA2560R3_SRC_ELEGOO_MEGA2560R3_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Configuration ************************************************************/
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+/****************************************************************************
+ * Inline Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+#endif /* __ASSEMBLY__ */
+#endif /* __BOARDS_AVR_ATMEGA_ELEGOO_MEGA2560R3_SRC_ELEGOO_MEGA2560R3_H */