mirror of
https://github.com/apache/nuttx.git
synced 2026-05-30 21:36:28 +08:00
Add support to the esp32s2-saola-1 board
This commit is contained in:
committed by
Alin Jerpelea
parent
7767acd24a
commit
1201777457
@@ -0,0 +1,10 @@
|
|||||||
|
#
|
||||||
|
# For a description of the syntax of this configuration file,
|
||||||
|
# see the file kconfig-language.txt in the NuttX tools repository.
|
||||||
|
#
|
||||||
|
config ESP32S2_QEMU_IMAGE
|
||||||
|
bool "ESP32S2 binary image for QEMU"
|
||||||
|
default n
|
||||||
|
---help---
|
||||||
|
Create a binary flash image used for QEMU.
|
||||||
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
#############################################################################
|
||||||
|
# boards/xtensa/esp32s2/common/Makefile
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
|
||||||
|
include board/Make.defs
|
||||||
|
include src/Make.defs
|
||||||
|
|
||||||
|
DEPPATH += --dep-path board
|
||||||
|
DEPPATH += --dep-path src
|
||||||
|
|
||||||
|
include $(TOPDIR)/boards/Board.mk
|
||||||
|
|
||||||
|
ARCHSRCDIR = $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src
|
||||||
|
BOARDDIR = $(ARCHSRCDIR)$(DELIM)board
|
||||||
|
CFLAGS += $(shell $(INCDIR) "$(CC)" $(BOARDDIR)$(DELIM)include)
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#############################################################################
|
||||||
|
# boards/xtensa/esp32s2/common/src/Make.defs
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
DEPPATH += --dep-path src
|
||||||
|
VPATH += :src
|
||||||
|
CFLAGS += $(shell $(INCDIR) "$(CC)" $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)src)
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#
|
||||||
|
# For a description of the syntax of this configuration file,
|
||||||
|
# see the file kconfig-language.txt in the NuttX tools repository.
|
||||||
|
#
|
||||||
|
|
||||||
|
if ARCH_BOARD_ESP32S2_SAOLA_1
|
||||||
|
|
||||||
|
endif # ARCH_BOARD_ESP32S2_SAOLA_1
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
#
|
||||||
|
# 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_ARCH_LEDS is not set
|
||||||
|
# CONFIG_NSH_ARGCAT is not set
|
||||||
|
# CONFIG_NSH_CMDOPT_HEXDUMP is not set
|
||||||
|
# CONFIG_NSH_CMDPARMS is not set
|
||||||
|
CONFIG_ARCH="xtensa"
|
||||||
|
CONFIG_ARCH_BOARD="esp32s2-saola-1"
|
||||||
|
CONFIG_ARCH_BOARD_ESP32S2_SAOLA_1=y
|
||||||
|
CONFIG_ARCH_CHIP="esp32s2"
|
||||||
|
CONFIG_ARCH_CHIP_ESP32S2=y
|
||||||
|
CONFIG_ARCH_CHIP_ESP32S2WROVER=y
|
||||||
|
CONFIG_ARCH_STACKDUMP=y
|
||||||
|
CONFIG_ARCH_XTENSA=y
|
||||||
|
CONFIG_BOARD_LOOPSPERMSEC=16717
|
||||||
|
CONFIG_BUILTIN=y
|
||||||
|
CONFIG_ESP32S2_DATA_CACHE_0KB=y
|
||||||
|
CONFIG_ESP32S2_UART0=y
|
||||||
|
CONFIG_FS_PROCFS=y
|
||||||
|
CONFIG_HAVE_CXX=y
|
||||||
|
CONFIG_HAVE_CXXINITIALIZE=y
|
||||||
|
CONFIG_IDLETHREAD_STACKSIZE=3072
|
||||||
|
CONFIG_INTELHEX_BINARY=y
|
||||||
|
CONFIG_MAX_TASKS=16
|
||||||
|
CONFIG_NSH_ARCHINIT=y
|
||||||
|
CONFIG_NSH_BUILTIN_APPS=y
|
||||||
|
CONFIG_NSH_FILEIOSIZE=512
|
||||||
|
CONFIG_NSH_LINELEN=64
|
||||||
|
CONFIG_NSH_READLINE=y
|
||||||
|
CONFIG_PREALLOC_TIMERS=4
|
||||||
|
CONFIG_RAM_SIZE=114688
|
||||||
|
CONFIG_RAM_START=0x20000000
|
||||||
|
CONFIG_RAW_BINARY=y
|
||||||
|
CONFIG_RR_INTERVAL=200
|
||||||
|
CONFIG_SCHED_WAITPID=y
|
||||||
|
CONFIG_SDCLONE_DISABLE=y
|
||||||
|
CONFIG_START_DAY=6
|
||||||
|
CONFIG_START_MONTH=12
|
||||||
|
CONFIG_START_YEAR=2011
|
||||||
|
CONFIG_SYSTEM_NSH=y
|
||||||
|
CONFIG_UART0_SERIAL_CONSOLE=y
|
||||||
|
CONFIG_USER_ENTRYPOINT="nsh_main"
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
#
|
||||||
|
# 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_ARCH_LEDS is not set
|
||||||
|
# CONFIG_NSH_ARGCAT is not set
|
||||||
|
# CONFIG_NSH_CMDOPT_HEXDUMP is not set
|
||||||
|
# CONFIG_NSH_CMDPARMS is not set
|
||||||
|
CONFIG_ARCH="xtensa"
|
||||||
|
CONFIG_ARCH_BOARD="esp32s2-saola-1"
|
||||||
|
CONFIG_ARCH_BOARD_ESP32S2_SAOLA_1=y
|
||||||
|
CONFIG_ARCH_CHIP="esp32s2"
|
||||||
|
CONFIG_ARCH_CHIP_ESP32S2=y
|
||||||
|
CONFIG_ARCH_CHIP_ESP32S2WROVER=y
|
||||||
|
CONFIG_ARCH_STACKDUMP=y
|
||||||
|
CONFIG_ARCH_XTENSA=y
|
||||||
|
CONFIG_BOARD_LOOPSPERMSEC=16717
|
||||||
|
CONFIG_BUILTIN=y
|
||||||
|
CONFIG_ESP32S2_DATA_CACHE_0KB=y
|
||||||
|
CONFIG_ESP32S2_UART0=y
|
||||||
|
CONFIG_FS_PROCFS=y
|
||||||
|
CONFIG_HAVE_CXX=y
|
||||||
|
CONFIG_HAVE_CXXINITIALIZE=y
|
||||||
|
CONFIG_IDLETHREAD_STACKSIZE=3072
|
||||||
|
CONFIG_INTELHEX_BINARY=y
|
||||||
|
CONFIG_MAX_TASKS=16
|
||||||
|
CONFIG_NSH_ARCHINIT=y
|
||||||
|
CONFIG_NSH_BUILTIN_APPS=y
|
||||||
|
CONFIG_NSH_FILEIOSIZE=512
|
||||||
|
CONFIG_NSH_LINELEN=64
|
||||||
|
CONFIG_NSH_READLINE=y
|
||||||
|
CONFIG_PREALLOC_TIMERS=4
|
||||||
|
CONFIG_RAM_SIZE=114688
|
||||||
|
CONFIG_RAM_START=0x20000000
|
||||||
|
CONFIG_RAW_BINARY=y
|
||||||
|
CONFIG_RR_INTERVAL=200
|
||||||
|
CONFIG_SCHED_WAITPID=y
|
||||||
|
CONFIG_SDCLONE_DISABLE=y
|
||||||
|
CONFIG_START_DAY=6
|
||||||
|
CONFIG_START_MONTH=12
|
||||||
|
CONFIG_START_YEAR=2011
|
||||||
|
CONFIG_SYSTEM_NSH=y
|
||||||
|
CONFIG_UART0_SERIAL_CONSOLE=y
|
||||||
|
CONFIG_USER_ENTRYPOINT="nsh_main"
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* boards/xtensa/esp32s2/esp32s2-saola-1/include/board.h
|
||||||
|
*
|
||||||
|
* 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_XTENSA_ESP32S2_ESP32S2_CORE_INCLUDE_BOARD_H
|
||||||
|
#define __BOARDS_XTENSA_ESP32S2_ESP32S2_CORE_INCLUDE_BOARD_H
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Pre-processor Definitions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/* Clocking *****************************************************************/
|
||||||
|
|
||||||
|
/* The ESP32S2 board V2 is fitted with a 40MHz crystal */
|
||||||
|
|
||||||
|
#define BOARD_XTAL_FREQUENCY 40000000
|
||||||
|
|
||||||
|
/* Clock reconfiguration is currently disabled, so the CPU will be running
|
||||||
|
* at the XTAL frequency or at two times the XTAL frequency, depending upon
|
||||||
|
* how we load the code:
|
||||||
|
*
|
||||||
|
* - If we load the code into FLASH at address 0x1000 where it is started by
|
||||||
|
* the second level bootloader, then the frequency is the crystal
|
||||||
|
* frequency.
|
||||||
|
* - If we load the code into IRAM after the second level bootloader has run
|
||||||
|
* this frequency will be twice the crystal frequency.
|
||||||
|
*
|
||||||
|
* Don't ask me for an explanation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Note: The bootloader (esp-idf bootloader.bin) configures:
|
||||||
|
*
|
||||||
|
* - CPU frequency to 80MHz
|
||||||
|
* - The XTAL frequency according to the SDK config CONFIG_ESP32S2_XTAL_FREQ,
|
||||||
|
* which is 40MHz by default.
|
||||||
|
*
|
||||||
|
* Reference:
|
||||||
|
* https://github.com/espressif/esp-idf/blob
|
||||||
|
* /6fd855ab8d00d23bad4660216bc2122c2285d5be/components
|
||||||
|
* /bootloader_support/src/bootloader_clock.c#L38-L62
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef CONFIG_ESP32S2_RUN_IRAM
|
||||||
|
# define BOARD_CLOCK_FREQUENCY (2 * BOARD_XTAL_FREQUENCY)
|
||||||
|
#else
|
||||||
|
#ifdef CONFIG_ESP32S2_DEFAULT_CPU_FREQ_MHZ
|
||||||
|
# define BOARD_CLOCK_FREQUENCY (CONFIG_ESP32S2_DEFAULT_CPU_FREQ_MHZ * 1000000)
|
||||||
|
#else
|
||||||
|
# define BOARD_CLOCK_FREQUENCY 80000000
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* LED definitions **********************************************************/
|
||||||
|
|
||||||
|
/* Define how many LEDs this board has (needed by userleds) */
|
||||||
|
|
||||||
|
#define BOARD_NLEDS 1
|
||||||
|
|
||||||
|
/* GPIO pins used by the GPIO Subsystem */
|
||||||
|
|
||||||
|
#define BOARD_NGPIOOUT 1 /* Amount of GPIO Output pins */
|
||||||
|
#define BOARD_NGPIOIN 1 /* Amount of GPIO Input without Interruption */
|
||||||
|
#define BOARD_NGPIOINT 1 /* Amount of GPIO Input w/ Interruption pins */
|
||||||
|
|
||||||
|
#endif /* __BOARDS_XTENSA_ESP32S2_ESP32S2_CORE_INCLUDE_BOARD_H */
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
############################################################################
|
||||||
|
# boards/xtensa/esp32s2/esp32s2-devkitc/scripts/Make.defs
|
||||||
|
#
|
||||||
|
# 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)/tools/esp32s2/Config.mk
|
||||||
|
include $(TOPDIR)/arch/xtensa/src/lx7/Toolchain.defs
|
||||||
|
|
||||||
|
LDSCRIPT1 = $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_out.ld
|
||||||
|
LDSCRIPT3 = $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_rom.ld
|
||||||
|
LDSCRIPT4 = $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_peripherals.ld
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_ESP32S2_RUN_IRAM),y)
|
||||||
|
LDSCRIPT2 = $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_iram.ld
|
||||||
|
else
|
||||||
|
LDSCRIPT2 = $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32s2_flash.ld
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
|
||||||
|
ARCHSCRIPT = -T "${shell cygpath -w $(LDSCRIPT1)}"
|
||||||
|
ARCHSCRIPT += -T "${shell cygpath -w $(LDSCRIPT2)}"
|
||||||
|
ARCHSCRIPT += -T "${shell cygpath -w $(LDSCRIPT3)}"
|
||||||
|
ARCHSCRIPT += -T "${shell cygpath -w $(LDSCRIPT4)}"
|
||||||
|
else
|
||||||
|
ARCHSCRIPT = -T$(LDSCRIPT1) -T$(LDSCRIPT2) -T$(LDSCRIPT3) -T$(LDSCRIPT4)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
|
||||||
|
ARCHOPTIMIZATION = -g
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq ($(CONFIG_DEBUG_NOOPT),y)
|
||||||
|
ARCHOPTIMIZATION += $(MAXOPTIMIZATION) -fno-strict-aliasing -fno-strength-reduce -fomit-frame-pointer
|
||||||
|
endif
|
||||||
|
|
||||||
|
ARCHCFLAGS = -fno-builtin -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -mlongcalls
|
||||||
|
ARCHCXXFLAGS = $(ARCHCFLAGS) -fno-exceptions -fcheck-new -fno-rtti
|
||||||
|
ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow -Wundef
|
||||||
|
ARCHWARNINGSXX = -Wall -Wshadow -Wundef
|
||||||
|
ARCHPICFLAGS = -fpic
|
||||||
|
|
||||||
|
# if SPIRAM/PSRAM is used then we need to include a workaround
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_ESP32S2_SPIRAM),y)
|
||||||
|
ARCHCFLAGS += -mfix-esp32s2-psram-cache-issue
|
||||||
|
endif
|
||||||
|
|
||||||
|
CFLAGS := $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
|
||||||
|
CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS)
|
||||||
|
CXXFLAGS := $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
|
||||||
|
CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS)
|
||||||
|
CPPFLAGS := $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
|
||||||
|
AFLAGS := $(CFLAGS) -D__ASSEMBLY__
|
||||||
|
|
||||||
|
NXFLATLDFLAGS1 = -r -d -warn-common
|
||||||
|
NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-pcrel.ld -no-check-sections
|
||||||
|
LDNXFLATFLAGS = -e main -s 2048
|
||||||
|
|
||||||
|
# Loadable module definitions
|
||||||
|
|
||||||
|
CMODULEFLAGS = $(CFLAGS) -mtext-section-literals
|
||||||
|
|
||||||
|
LDMODULEFLAGS = -r -e module_initialize
|
||||||
|
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
|
||||||
|
LDMODULEFLAGS += -T "${shell cygpath -w $(TOPDIR)/libs/libc/modlib/gnu-elf.ld}"
|
||||||
|
else
|
||||||
|
LDMODULEFLAGS += -T $(TOPDIR)/libs/libc/modlib/gnu-elf.ld
|
||||||
|
endif
|
||||||
|
|
||||||
|
# ELF module definitions
|
||||||
|
|
||||||
|
CELFFLAGS = $(CFLAGS) -mtext-section-literals
|
||||||
|
CXXELFFLAGS = $(CXXFLAGS) -mtext-section-literals
|
||||||
|
|
||||||
|
LDELFFLAGS = -r -e main
|
||||||
|
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
|
||||||
|
LDELFFLAGS += -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)gnu-elf.ld}"
|
||||||
|
else
|
||||||
|
LDELFFLAGS += -T $(BOARD_DIR)$(DELIM)scripts$(DELIM)gnu-elf.ld
|
||||||
|
endif
|
||||||
|
|
||||||
|
LDFLAGS += -nostartfiles -nodefaultlibs
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
|
||||||
|
LDFLAGS += -Map="${shell cygpath -w $(TOPDIR)/nuttx.map}" --cref
|
||||||
|
else
|
||||||
|
LDFLAGS += -Map=$(TOPDIR)/nuttx.map --cref
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
|
||||||
|
LDFLAGS += -g
|
||||||
|
endif
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2.template.ld
|
||||||
|
* ESP32S2 Linker Script Memory Layout
|
||||||
|
*
|
||||||
|
* This file describes the memory layout (memory blocks) as virtual
|
||||||
|
* memory addresses.
|
||||||
|
*
|
||||||
|
* esp32s2.common.ld contains output sections to link compiler output
|
||||||
|
* into these memory blocks.
|
||||||
|
*
|
||||||
|
* NOTE: That this is not the actual linker script but rather a "template"
|
||||||
|
* for the elf32_out.ld script. This template script is passed through
|
||||||
|
* the C preprocessor to include selected configuration options.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <nuttx/config.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_ESP32S2_INSTRUCTION_CACHE_8KB
|
||||||
|
# define CONFIG_ESP32S2_INSTRUCTION_CACHE_SIZE 0x2000
|
||||||
|
#else
|
||||||
|
# define CONFIG_ESP32S2_INSTRUCTION_CACHE_SIZE 0x4000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_ESP32S2_DATA_CACHE_0KB
|
||||||
|
# define CONFIG_ESP32S2_DATA_CACHE_SIZE 0
|
||||||
|
#elif defined CONFIG_ESP32S2_DATA_CACHE_8KB
|
||||||
|
# define CONFIG_ESP32S2_DATA_CACHE_SIZE 0x2000
|
||||||
|
#else
|
||||||
|
# define CONFIG_ESP32S2_DATA_CACHE_SIZE 0x4000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define RAM_IRAM_START 0x40020000
|
||||||
|
#define RAM_DRAM_START 0x3FFB0000
|
||||||
|
|
||||||
|
#define DATA_RAM_END 0x3FFE0000 /* 2nd stage bootloader iram_loader_seg
|
||||||
|
* starts at SRAM block 14 (reclaimed
|
||||||
|
* after app boots)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define IRAM_ORG (RAM_IRAM_START + CONFIG_ESP32S2_INSTRUCTION_CACHE_SIZE \
|
||||||
|
+ CONFIG_ESP32S2_DATA_CACHE_SIZE)
|
||||||
|
|
||||||
|
#define DRAM_ORG (RAM_DRAM_START + CONFIG_ESP32S2_INSTRUCTION_CACHE_SIZE \
|
||||||
|
+ CONFIG_ESP32S2_DATA_CACHE_SIZE)
|
||||||
|
|
||||||
|
#define I_D_RAM_SIZE DATA_RAM_END - DRAM_ORG
|
||||||
|
|
||||||
|
#define STATIC_RAM_SIZE 0 /* FIXME: Should it be configurable? */
|
||||||
|
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
/* All these values assume the flash cache is on, and have the blocks this
|
||||||
|
* uses subtracted from the length of the various regions. The 'data access
|
||||||
|
* port' dram/drom regions map to the same iram/irom regions but are
|
||||||
|
* connected to the data port of the CPU and eg allow bytewise access.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* IRAM for CPU */
|
||||||
|
|
||||||
|
iram0_0_seg (RX) : org = IRAM_ORG, len = I_D_RAM_SIZE
|
||||||
|
|
||||||
|
/* Even though the segment name is iram, it is actually mapped to flash */
|
||||||
|
|
||||||
|
iram0_2_seg (RX) : org = 0x40080020, len = 0x780000-0x20
|
||||||
|
|
||||||
|
/* (0x20 offset above is a convenience for the app binary image generation.
|
||||||
|
* Flash cache has 64KB pages. The .bin file which is flashed to the chip
|
||||||
|
* has a 0x18 byte file header, and each segment has a 0x08 byte segment
|
||||||
|
* header. Setting this offset makes it simple to meet the flash cache MMU's
|
||||||
|
* constraint that (paddr % 64KB == vaddr % 64KB).)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Shared data RAM, excluding memory reserved for bootloader and ROM
|
||||||
|
* bss/data/stack.
|
||||||
|
*/
|
||||||
|
|
||||||
|
dram0_0_seg (RW) : org = DRAM_ORG, len = I_D_RAM_SIZE - \
|
||||||
|
STATIC_RAM_SIZE
|
||||||
|
|
||||||
|
/* Flash mapped constant data */
|
||||||
|
|
||||||
|
drom0_0_seg (R) : org = 0x3f000020, len = 0x3f0000-0x20
|
||||||
|
|
||||||
|
/* RTC fast memory (executable). Persists over deep sleep. */
|
||||||
|
|
||||||
|
rtc_iram_seg(RWX) : org = 0x40070000, len = 0x2000
|
||||||
|
|
||||||
|
/* RTC slow memory (data accessible). Persists over deep sleep.
|
||||||
|
* Start of RTC slow memory is reserved for ULP co-processor code + data,
|
||||||
|
* if enabled.
|
||||||
|
*/
|
||||||
|
|
||||||
|
rtc_slow_seg(RW) : org = 0x50000000 + CONFIG_ESP32S2_ULP_COPROC_RESERVE_MEM,
|
||||||
|
len = 0x2000 - CONFIG_ESP32S2_ULP_COPROC_RESERVE_MEM
|
||||||
|
|
||||||
|
/* External memory, including data and text */
|
||||||
|
|
||||||
|
extmem_seg(RWX) : org = 0x3f800000, len = 0x400000
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Heap ends at top of dram0_0_seg */
|
||||||
|
|
||||||
|
_eheap = 0x40000000 - CONFIG_ESP32S2_TRACEMEM_RESERVE_DRAM;
|
||||||
|
|
||||||
|
/* Module text area ends at top of dram0_0_seg */
|
||||||
|
|
||||||
|
_emodtext = 0x400a0000;
|
||||||
@@ -0,0 +1,223 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_flash.ld
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/* Default entry point: */
|
||||||
|
|
||||||
|
ENTRY(__start);
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
/* Send .iram0 code to iram */
|
||||||
|
|
||||||
|
.iram0.vectors :
|
||||||
|
{
|
||||||
|
_iram_start = ABSOLUTE(.);
|
||||||
|
|
||||||
|
/* Vectors go to IRAM */
|
||||||
|
|
||||||
|
_init_start = ABSOLUTE(.);
|
||||||
|
|
||||||
|
/* Vectors according to builds/RF-2015.2-win32/esp108_v1_2_s5_512int_2/config.html */
|
||||||
|
|
||||||
|
. = 0x0;
|
||||||
|
KEEP (*(.window_vectors.text));
|
||||||
|
. = 0x180;
|
||||||
|
KEEP (*(.xtensa_level2_vector.text));
|
||||||
|
. = 0x1c0;
|
||||||
|
KEEP (*(.xtensa_level3_vector.text));
|
||||||
|
. = 0x200;
|
||||||
|
KEEP (*(.xtensa_level4_vector.text));
|
||||||
|
. = 0x240;
|
||||||
|
KEEP (*(.xtensa_level5_vector.text));
|
||||||
|
. = 0x280;
|
||||||
|
KEEP (*(.debug_exception_vector.text));
|
||||||
|
. = 0x2c0;
|
||||||
|
KEEP (*(.nmi_vector.text));
|
||||||
|
. = 0x300;
|
||||||
|
KEEP (*(.kernel_exception_vector.text));
|
||||||
|
. = 0x340;
|
||||||
|
KEEP (*(.user_exception_vector.text));
|
||||||
|
. = 0x3c0;
|
||||||
|
KEEP (*(.double_exception_vector.text));
|
||||||
|
. = 0x400;
|
||||||
|
*(.*_vector.literal)
|
||||||
|
|
||||||
|
. = ALIGN (16);
|
||||||
|
*(.entry.text)
|
||||||
|
*(.init.literal)
|
||||||
|
*(.init)
|
||||||
|
_init_end = ABSOLUTE(.);
|
||||||
|
} > iram0_0_seg
|
||||||
|
|
||||||
|
.iram0.text :
|
||||||
|
{
|
||||||
|
/* Code marked as running out of IRAM */
|
||||||
|
|
||||||
|
_iram_text_start = ABSOLUTE(.);
|
||||||
|
*(.iram1 .iram1.*)
|
||||||
|
*librtc.a:(.literal .text .literal.* .text.*)
|
||||||
|
*libarch.a:esp32s2_spiflash.*(.literal .text .literal.* .text.*)
|
||||||
|
*(.wifirxiram .wifirxiram.*)
|
||||||
|
*(.wifi0iram .wifi0iram.*)
|
||||||
|
_iram_text_end = ABSOLUTE(.);
|
||||||
|
|
||||||
|
/* Module text area starts at the end of iram0_0_seg */
|
||||||
|
|
||||||
|
_smodtext = ABSOLUTE(.);
|
||||||
|
_iram_text = ABSOLUTE(.);
|
||||||
|
} > iram0_0_seg
|
||||||
|
|
||||||
|
.dram0_reserved_for_iram (NOLOAD):
|
||||||
|
{
|
||||||
|
. = ORIGIN(dram0_0_seg) + _iram_text - _iram_start;
|
||||||
|
} > dram0_0_seg
|
||||||
|
|
||||||
|
/* Shared RAM */
|
||||||
|
|
||||||
|
.dram0.bss (NOLOAD) :
|
||||||
|
{
|
||||||
|
/* .bss initialized on power-up */
|
||||||
|
|
||||||
|
. = ALIGN (8);
|
||||||
|
_sbss = ABSOLUTE(.);
|
||||||
|
*(.dynsbss)
|
||||||
|
*(.sbss)
|
||||||
|
*(.sbss.*)
|
||||||
|
*(.gnu.linkonce.sb.*)
|
||||||
|
*(.scommon)
|
||||||
|
*(.sbss2)
|
||||||
|
*(.sbss2.*)
|
||||||
|
*(.gnu.linkonce.sb2.*)
|
||||||
|
*(.dynbss)
|
||||||
|
KEEP (*(.bss))
|
||||||
|
*(.bss.*)
|
||||||
|
*(.share.mem)
|
||||||
|
*(.gnu.linkonce.b.*)
|
||||||
|
*(COMMON)
|
||||||
|
*libarch.a:esp32s2_spiflash.*(.bss .bss.* COMMON)
|
||||||
|
. = ALIGN(8);
|
||||||
|
_ebss = ABSOLUTE(.);
|
||||||
|
} >dram0_0_seg
|
||||||
|
|
||||||
|
.noinit (NOLOAD):
|
||||||
|
{
|
||||||
|
/* This section contains data that is not initialized during load,
|
||||||
|
* or during the application's initialization sequence.
|
||||||
|
*/
|
||||||
|
|
||||||
|
*(.noinit)
|
||||||
|
} >dram0_0_seg
|
||||||
|
|
||||||
|
.dram0.data :
|
||||||
|
{
|
||||||
|
/* .data initialized on power-up in ROMed configurations. */
|
||||||
|
|
||||||
|
_sdata = ABSOLUTE(.);
|
||||||
|
KEEP (*(.data))
|
||||||
|
KEEP (*(.data.*))
|
||||||
|
KEEP (*(.gnu.linkonce.d.*))
|
||||||
|
KEEP (*(.data1))
|
||||||
|
KEEP (*(.sdata))
|
||||||
|
KEEP (*(.sdata.*))
|
||||||
|
KEEP (*(.gnu.linkonce.s.*))
|
||||||
|
KEEP (*(.sdata2))
|
||||||
|
KEEP (*(.sdata2.*))
|
||||||
|
KEEP (*(.gnu.linkonce.s2.*))
|
||||||
|
KEEP (*(.jcr))
|
||||||
|
*(.dram1 .dram1.*)
|
||||||
|
*libphy.a:(.rodata .rodata.*)
|
||||||
|
*libarch.a:esp32s2_spiflash.*(.rodata .rodata.*)
|
||||||
|
. = ALIGN(4);
|
||||||
|
_edata = ABSOLUTE(.);
|
||||||
|
|
||||||
|
/* Heap starts at the end of .data */
|
||||||
|
|
||||||
|
_sheap = ABSOLUTE(.);
|
||||||
|
} >dram0_0_seg
|
||||||
|
|
||||||
|
/* External memory bss, from any global variable with EXT_RAM_ATTR attribute */
|
||||||
|
|
||||||
|
.extmem.bss (NOLOAD) :
|
||||||
|
{
|
||||||
|
_sbss_extmem = ABSOLUTE(.);
|
||||||
|
*(.extmem.bss .extmem.bss.*)
|
||||||
|
. = ALIGN(4);
|
||||||
|
_ebss_extmem = ABSOLUTE(.);
|
||||||
|
} > extmem_seg
|
||||||
|
|
||||||
|
.flash.rodata :
|
||||||
|
{
|
||||||
|
_srodata = ABSOLUTE(.);
|
||||||
|
*(.rodata)
|
||||||
|
*(.rodata.*)
|
||||||
|
*(.irom1.text) /* catch stray ICACHE_RODATA_ATTR */
|
||||||
|
*(.gnu.linkonce.r.*)
|
||||||
|
*(.rodata1)
|
||||||
|
__XT_EXCEPTION_TABLE_ = ABSOLUTE(.);
|
||||||
|
*(.xt_except_table)
|
||||||
|
*(.gcc_except_table)
|
||||||
|
*(.gcc_except_table.*)
|
||||||
|
*(.gnu.linkonce.e.*)
|
||||||
|
*(.gnu.version_r)
|
||||||
|
*(.eh_frame)
|
||||||
|
|
||||||
|
. = (. + 3) & ~ 3;
|
||||||
|
|
||||||
|
/* C++ constructor and destructor tables, properly ordered: */
|
||||||
|
|
||||||
|
_sinit = ABSOLUTE(.);
|
||||||
|
KEEP (*crtbegin.o(.ctors))
|
||||||
|
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
||||||
|
KEEP (*(SORT(.ctors.*)))
|
||||||
|
KEEP (*(.ctors))
|
||||||
|
_einit = ABSOLUTE(.);
|
||||||
|
KEEP (*crtbegin.o(.dtors))
|
||||||
|
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
||||||
|
KEEP (*(SORT(.dtors.*)))
|
||||||
|
KEEP (*(.dtors))
|
||||||
|
|
||||||
|
/* C++ exception handlers table: */
|
||||||
|
|
||||||
|
__XT_EXCEPTION_DESCS_ = ABSOLUTE(.);
|
||||||
|
*(.xt_except_desc)
|
||||||
|
*(.gnu.linkonce.h.*)
|
||||||
|
__XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
|
||||||
|
*(.xt_except_desc_end)
|
||||||
|
*(.dynamic)
|
||||||
|
*(.gnu.version_d)
|
||||||
|
_erodata = ABSOLUTE(.);
|
||||||
|
/* Literals are also RO data. */
|
||||||
|
_lit4_start = ABSOLUTE(.);
|
||||||
|
*(*.lit4)
|
||||||
|
*(.lit4.*)
|
||||||
|
*(.gnu.linkonce.lit4.*)
|
||||||
|
_lit4_end = ABSOLUTE(.);
|
||||||
|
. = ALIGN(4);
|
||||||
|
} >drom0_0_seg
|
||||||
|
|
||||||
|
.flash.text :
|
||||||
|
{
|
||||||
|
_stext = .;
|
||||||
|
_text_start = ABSOLUTE(.);
|
||||||
|
*(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
|
||||||
|
*(.irom0.text) /* catch stray ICACHE_RODATA_ATTR */
|
||||||
|
*(.fini.literal)
|
||||||
|
*(.fini)
|
||||||
|
*(.gnu.version)
|
||||||
|
_text_end = ABSOLUTE(.);
|
||||||
|
_etext = .;
|
||||||
|
} >iram0_2_seg
|
||||||
|
|
||||||
|
.rtc.text :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
*(.rtc.literal .rtc.text)
|
||||||
|
} >rtc_iram_seg
|
||||||
|
|
||||||
|
.rtc.data :
|
||||||
|
{
|
||||||
|
*(.rtc.data)
|
||||||
|
*(.rtc.rodata)
|
||||||
|
} > rtc_slow_seg
|
||||||
|
}
|
||||||
@@ -0,0 +1,190 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2s2_iram.ld
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/* Default entry point: */
|
||||||
|
|
||||||
|
ENTRY(__start);
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
/* Send .iram0 code to iram */
|
||||||
|
|
||||||
|
.iram0.vectors :
|
||||||
|
{
|
||||||
|
/* Vectors go to IRAM */
|
||||||
|
|
||||||
|
_init_start = ABSOLUTE(.);
|
||||||
|
|
||||||
|
/* Vectors according to builds/RF-2015.2-win32/esp108_v1_2_s5_512int_2/config.html */
|
||||||
|
|
||||||
|
. = 0x0;
|
||||||
|
KEEP (*(.window_vectors.text));
|
||||||
|
. = 0x180;
|
||||||
|
KEEP (*(.xtensa_level2_vector.text));
|
||||||
|
. = 0x1c0;
|
||||||
|
KEEP (*(.xtensa_level3_vector.text));
|
||||||
|
. = 0x200;
|
||||||
|
KEEP (*(.xtensa_level4_vector.text));
|
||||||
|
. = 0x240;
|
||||||
|
KEEP (*(.xtensa_level5_vector.text));
|
||||||
|
. = 0x280;
|
||||||
|
KEEP (*(.debug_exception_vector.text));
|
||||||
|
. = 0x2c0;
|
||||||
|
KEEP (*(.nmi_vector.text));
|
||||||
|
. = 0x300;
|
||||||
|
KEEP (*(.kernel_exception_vector.text));
|
||||||
|
. = 0x340;
|
||||||
|
KEEP (*(.user_exception_vector.text));
|
||||||
|
. = 0x3c0;
|
||||||
|
KEEP (*(.double_exception_vector.text));
|
||||||
|
. = 0x400;
|
||||||
|
*(.*_vector.literal)
|
||||||
|
|
||||||
|
. = ALIGN (16);
|
||||||
|
*(.entry.text)
|
||||||
|
*(.init.literal)
|
||||||
|
*(.init)
|
||||||
|
_init_end = ABSOLUTE(.);
|
||||||
|
} > iram0_0_seg
|
||||||
|
|
||||||
|
.iram0.text :
|
||||||
|
{
|
||||||
|
/* Code marked as running out of IRAM */
|
||||||
|
|
||||||
|
_iram_text_start = ABSOLUTE(.);
|
||||||
|
*(.iram1 .iram1.*)
|
||||||
|
*libphy.a:(.literal .text .literal.* .text.*)
|
||||||
|
*librtc.a:(.literal .text .literal.* .text.*)
|
||||||
|
*libpp.a:(.literal .text .literal.* .text.*)
|
||||||
|
*libhal.a:(.literal .text .literal.* .text.*)
|
||||||
|
_iram_text_end = ABSOLUTE(.);
|
||||||
|
|
||||||
|
_stext = .;
|
||||||
|
_text_start = ABSOLUTE(.);
|
||||||
|
*(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
|
||||||
|
*(.irom0.text) /* catch stray ICACHE_RODATA_ATTR */
|
||||||
|
*(.fini.literal)
|
||||||
|
*(.fini)
|
||||||
|
*(.gnu.version)
|
||||||
|
_text_end = ABSOLUTE(.);
|
||||||
|
_etext = .;
|
||||||
|
|
||||||
|
/* Module text area starts at the end of iram0_0_seg */
|
||||||
|
|
||||||
|
_smodtext = ABSOLUTE(.);
|
||||||
|
} > iram0_0_seg
|
||||||
|
|
||||||
|
/* Shared RAM */
|
||||||
|
|
||||||
|
.dram0.bss (NOLOAD) :
|
||||||
|
{
|
||||||
|
/* .bss initialized on power-up */
|
||||||
|
|
||||||
|
. = ALIGN (8);
|
||||||
|
_sbss = ABSOLUTE(.);
|
||||||
|
*(.dynsbss)
|
||||||
|
*(.sbss)
|
||||||
|
*(.sbss.*)
|
||||||
|
*(.gnu.linkonce.sb.*)
|
||||||
|
*(.scommon)
|
||||||
|
*(.sbss2)
|
||||||
|
*(.sbss2.*)
|
||||||
|
*(.gnu.linkonce.sb2.*)
|
||||||
|
*(.dynbss)
|
||||||
|
KEEP (*(.bss))
|
||||||
|
*(.bss.*)
|
||||||
|
*(.share.mem)
|
||||||
|
*(.gnu.linkonce.b.*)
|
||||||
|
*(COMMON)
|
||||||
|
. = ALIGN(8);
|
||||||
|
_ebss = ABSOLUTE(.);
|
||||||
|
|
||||||
|
/* Uninitialized .bss */
|
||||||
|
|
||||||
|
*(.noinit)
|
||||||
|
} >dram0_0_seg
|
||||||
|
|
||||||
|
.dram0.data :
|
||||||
|
{
|
||||||
|
/* .data initialized on power-up in ROMed configurations. */
|
||||||
|
|
||||||
|
_sdata = ABSOLUTE(.);
|
||||||
|
KEEP (*(.data))
|
||||||
|
KEEP (*(.data.*))
|
||||||
|
KEEP (*(.gnu.linkonce.d.*))
|
||||||
|
KEEP (*(.data1))
|
||||||
|
KEEP (*(.sdata))
|
||||||
|
KEEP (*(.sdata.*))
|
||||||
|
KEEP (*(.gnu.linkonce.s.*))
|
||||||
|
KEEP (*(.sdata2))
|
||||||
|
KEEP (*(.sdata2.*))
|
||||||
|
KEEP (*(.gnu.linkonce.s2.*))
|
||||||
|
KEEP (*(.jcr))
|
||||||
|
*(.dram1 .dram1.*)
|
||||||
|
. = ALIGN(4);
|
||||||
|
_edata = ABSOLUTE(.);
|
||||||
|
|
||||||
|
_srodata = ABSOLUTE(.);
|
||||||
|
*(.rodata)
|
||||||
|
*(.rodata.*)
|
||||||
|
*(.irom1.text) /* catch stray ICACHE_RODATA_ATTR */
|
||||||
|
*(.gnu.linkonce.r.*)
|
||||||
|
*(.rodata1)
|
||||||
|
__XT_EXCEPTION_TABLE_ = ABSOLUTE(.);
|
||||||
|
*(.xt_except_table)
|
||||||
|
*(.gcc_except_table)
|
||||||
|
*(.gnu.linkonce.e.*)
|
||||||
|
*(.gnu.version_r)
|
||||||
|
*(.eh_frame)
|
||||||
|
|
||||||
|
. = (. + 3) & ~ 3;
|
||||||
|
|
||||||
|
/* C++ constructor and destructor tables, properly ordered: */
|
||||||
|
|
||||||
|
_sinit = ABSOLUTE(.);
|
||||||
|
KEEP (*crtbegin.o(.ctors))
|
||||||
|
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
||||||
|
KEEP (*(SORT(.ctors.*)))
|
||||||
|
KEEP (*(.ctors))
|
||||||
|
_einit = ABSOLUTE(.);
|
||||||
|
KEEP (*crtbegin.o(.dtors))
|
||||||
|
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
||||||
|
KEEP (*(SORT(.dtors.*)))
|
||||||
|
KEEP (*(.dtors))
|
||||||
|
|
||||||
|
/* C++ exception handlers table: */
|
||||||
|
|
||||||
|
__XT_EXCEPTION_DESCS_ = ABSOLUTE(.);
|
||||||
|
*(.xt_except_desc)
|
||||||
|
*(.gnu.linkonce.h.*)
|
||||||
|
__XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
|
||||||
|
*(.xt_except_desc_end)
|
||||||
|
*(.dynamic)
|
||||||
|
*(.gnu.version_d)
|
||||||
|
_erodata = ABSOLUTE(.);
|
||||||
|
/* Literals are also RO data. */
|
||||||
|
_lit4_start = ABSOLUTE(.);
|
||||||
|
*(*.lit4)
|
||||||
|
*(.lit4.*)
|
||||||
|
*(.gnu.linkonce.lit4.*)
|
||||||
|
_lit4_end = ABSOLUTE(.);
|
||||||
|
. = ALIGN(4);
|
||||||
|
|
||||||
|
/* Heap starts at the end of .data */
|
||||||
|
|
||||||
|
_sheap = ABSOLUTE(.);
|
||||||
|
} >dram0_0_seg
|
||||||
|
|
||||||
|
.rtc.text :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
*(.rtc.literal .rtc.text)
|
||||||
|
} >rtc_iram_seg
|
||||||
|
|
||||||
|
.rtc.data :
|
||||||
|
{
|
||||||
|
*(.rtc.data)
|
||||||
|
*(.rtc.rodata)
|
||||||
|
} > rtc_slow_seg
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* boards/xtensa/esp32s2/esp32s2-saola-1/scripts/esp32s2_peripherals.ld
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
PROVIDE ( UART0 = 0x3f400000 );
|
||||||
|
PROVIDE ( SPIMEM1 = 0x3f402000 );
|
||||||
|
PROVIDE ( SPIMEM0 = 0x3f403000 );
|
||||||
|
PROVIDE ( GPIO = 0x3f404000 );
|
||||||
|
PROVIDE ( SIGMADELTA = 0x3f404f00 );
|
||||||
|
PROVIDE ( RTCCNTL = 0x3f408000 );
|
||||||
|
PROVIDE ( RTCIO = 0x3f408400 );
|
||||||
|
PROVIDE ( SENS = 0x3f408800 );
|
||||||
|
PROVIDE ( HINF = 0x3f40b000 );
|
||||||
|
PROVIDE ( I2S0 = 0x3f40F000 );
|
||||||
|
PROVIDE ( UART1 = 0x3f410000 );
|
||||||
|
PROVIDE ( I2C0 = 0x3f413000 );
|
||||||
|
PROVIDE ( UHCI0 = 0x3f414000 );
|
||||||
|
PROVIDE ( HOST = 0x3f415000 );
|
||||||
|
PROVIDE ( RMT = 0x3f416000 );
|
||||||
|
PROVIDE ( RMTMEM = 0x3f416400 );
|
||||||
|
PROVIDE ( PCNT = 0x3f417000 );
|
||||||
|
PROVIDE ( SLC = 0x3f418000 );
|
||||||
|
PROVIDE ( LEDC = 0x3f419000 );
|
||||||
|
PROVIDE ( CP_DMA = 0x3f4c3000 );
|
||||||
|
PROVIDE ( TIMERG0 = 0x3f41f000 );
|
||||||
|
PROVIDE ( TIMERG1 = 0x3f420000 );
|
||||||
|
PROVIDE ( SPI2 = 0x3f424000 );
|
||||||
|
PROVIDE ( SPI3 = 0x3f425000 );
|
||||||
|
PROVIDE ( SYSCON = 0x3f426000 );
|
||||||
|
PROVIDE ( I2C1 = 0x3f427000 );
|
||||||
|
PROVIDE ( TWAI = 0x3f42b000 );
|
||||||
|
PROVIDE ( APB_SARADC = 0x3f440000 );
|
||||||
|
PROVIDE ( DEDIC_GPIO = 0x3f4cf000 );
|
||||||
|
PROVIDE ( USB0 = 0x60080000 );
|
||||||
|
PROVIDE ( USBH = 0x60080000 );
|
||||||
|
PROVIDE ( USB_WRAP = 0x3f439000 );
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,73 @@
|
|||||||
|
############################################################################
|
||||||
|
# boards/xtensa/esp32s2/esp32s2-saola-1/src/Make.defs
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
|
||||||
|
SCRIPTDIR = $(BOARD_DIR)$(DELIM)scripts
|
||||||
|
|
||||||
|
CONFIGFILE = $(TOPDIR)$(DELIM)include$(DELIM)nuttx$(DELIM)config.h
|
||||||
|
|
||||||
|
CSRCS = esp32s2_boot.c esp32s2_bringup.c
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_LIB_BOARDCTL),y)
|
||||||
|
CSRCS += esp32s2_appinit.c
|
||||||
|
ifeq ($(CONFIG_BOARDCTL_RESET),y)
|
||||||
|
CSRCS += esp32s2_reset.c
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_ESP32S2_SPI),y)
|
||||||
|
CSRCS += esp32s2_spi.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_ESP32S2_SPIFLASH),y)
|
||||||
|
CSRCS += esp32s2_spiflash.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_DEV_GPIO),y)
|
||||||
|
CSRCS += esp32s2_gpio.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_USERLED),y)
|
||||||
|
CSRCS += esp32s2_userleds.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_ARCH_BUTTONS),y)
|
||||||
|
CSRCS += esp32s2_buttons.c
|
||||||
|
endif
|
||||||
|
|
||||||
|
SCRIPTIN = $(SCRIPTDIR)$(DELIM)esp32s2.template.ld
|
||||||
|
SCRIPTOUT = $(SCRIPTDIR)$(DELIM)esp32s2_out.ld
|
||||||
|
|
||||||
|
.PHONY = context distclean
|
||||||
|
|
||||||
|
$(SCRIPTOUT): $(SCRIPTIN) $(CONFIGFILE)
|
||||||
|
$(Q) $(CC) -isystem $(TOPDIR)/include -C -P -x c -E $(SCRIPTIN) -o $@
|
||||||
|
|
||||||
|
context:: $(SCRIPTOUT)
|
||||||
|
|
||||||
|
distclean::
|
||||||
|
$(call DELFILE, $(SCRIPTOUT))
|
||||||
|
$(call DELFILE, $(TOPDIR)/esp32s2_qemu_img.bin)
|
||||||
|
|
||||||
|
DEPPATH += --dep-path board
|
||||||
|
VPATH += :board
|
||||||
|
CFLAGS += $(shell $(INCDIR) "$(CC)" $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)board)
|
||||||
|
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* boards/xtensa/esp32s2/esp32s2-saola-1/src/esp32s2-saola-1.h
|
||||||
|
*
|
||||||
|
* 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_XTENSA_ESP32S2_ESP32S2_CORE_SRC_ESP32S2_CORE_H
|
||||||
|
#define __BOARDS_XTENSA_ESP32S2_ESP32S2_CORE_SRC_ESP32S2_CORE_H
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Included Files
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <nuttx/config.h>
|
||||||
|
#include <nuttx/compiler.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Pre-processor Definitions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/* ESP32S2-DevKitC GPIOs ****************************************************/
|
||||||
|
|
||||||
|
/* BOOT Button */
|
||||||
|
|
||||||
|
#define BUTTON_BOOT 0
|
||||||
|
|
||||||
|
/* LED
|
||||||
|
*
|
||||||
|
* This is an externally connected LED used for testing.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define GPIO_LED1 2
|
||||||
|
|
||||||
|
/* MCP2515 Interrupt pin */
|
||||||
|
|
||||||
|
#define GPIO_MCP2515_IRQ 22
|
||||||
|
|
||||||
|
/* TIMERS */
|
||||||
|
|
||||||
|
#define TIMER0 0
|
||||||
|
#define TIMER1 1
|
||||||
|
#define TIMER2 2
|
||||||
|
#define TIMER3 3
|
||||||
|
|
||||||
|
/* ONESHOT */
|
||||||
|
|
||||||
|
#define ONESHOT_TIMER 1
|
||||||
|
#define ONESHOT_RESOLUTION_US 1
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Types
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Data
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Function Prototypes
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: esp32s2_bringup
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Perform architecture-specific initialization
|
||||||
|
*
|
||||||
|
* CONFIG_BOARD_LATE_INITIALIZE=y :
|
||||||
|
* Called from board_late_initialize().
|
||||||
|
*
|
||||||
|
* CONFIG_BOARD_LATE_INITIALIZE=y && CONFIG_LIB_BOARDCTL=y :
|
||||||
|
* Called from the NSH library via board_app_initialize()
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
int esp32s2_bringup(void);
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: esp32s2_mmcsd_initialize
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Initialize SPI-based SD card and card detect thread.
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
int esp32s2_mmcsd_initialize(int minor);
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: esp32s2_spiflash_init
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Initialize the SPIFLASH and register the MTD device.
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
int esp32s2_spiflash_init(void);
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: esp32s2_spiflash_encrypt_test
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Test ESP32S2 SPI Flash driver read/write with encryption.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* None.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef CONFIG_ESP32S2_SPIFLASH_ENCRYPTION_TEST
|
||||||
|
void esp32s2_spiflash_encrypt_test(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: esp32s2_gpio_init
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef CONFIG_DEV_GPIO
|
||||||
|
int esp32s2_gpio_init(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __ASSEMBLY__ */
|
||||||
|
#endif /* __BOARDS_XTENSA_ESP32S2_ESP32S2_CORE_SRC_ESP32S2_CORE_H */
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* boards/xtensa/esp32s2/esp32s2-saola-1/src/esp32s2_appinit.c
|
||||||
|
*
|
||||||
|
* 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 <nuttx/config.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <nuttx/board.h>
|
||||||
|
|
||||||
|
#include "esp32s2-saola-1.h"
|
||||||
|
|
||||||
|
#ifdef CONFIG_LIB_BOARDCTL
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Pre-processor Definitions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: board_app_initialize
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Perform application specific initialization. This function is never
|
||||||
|
* called directly from application code, but only indirectly via the
|
||||||
|
* (non-standard) boardctl() interface using the command BOARDIOC_INIT.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* arg - The boardctl() argument is passed to the board_app_initialize()
|
||||||
|
* implementation without modification. The argument has no
|
||||||
|
* meaning to NuttX; the meaning of the argument is a contract
|
||||||
|
* between the board-specific initialization logic and the
|
||||||
|
* matching application logic. The value could be such things as a
|
||||||
|
* mode enumeration value, a set of DIP switch settings, a
|
||||||
|
* pointer to configuration data read from a file or serial FLASH,
|
||||||
|
* or whatever you would like to do with it. Every implementation
|
||||||
|
* should accept zero/NULL as a default configuration.
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Zero (OK) is returned on success; a negated errno value is returned on
|
||||||
|
* any failure to indicate the nature of the failure.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
int board_app_initialize(uintptr_t arg)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_BOARD_LATE_INITIALIZE
|
||||||
|
/* Board initialization already performed by board_late_initialize() */
|
||||||
|
|
||||||
|
return OK;
|
||||||
|
#else
|
||||||
|
/* Perform board-specific initialization */
|
||||||
|
|
||||||
|
return esp32s2_bringup();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_LIB_BOARDCTL */
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* boards/xtensa/esp32s2/esp32s2-saola-1/src/esp32s2_boot.c
|
||||||
|
*
|
||||||
|
* 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 <nuttx/config.h>
|
||||||
|
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
#include <nuttx/board.h>
|
||||||
|
#include <nuttx/mm/mm.h>
|
||||||
|
#include <arch/board/board.h>
|
||||||
|
|
||||||
|
#include "esp32s2-saola-1.h"
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Pre-processor Definitions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Private Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: esp32s2_board_initialize
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* All ESP32 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 esp32s2_board_initialize(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: board_late_initialize
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* If CONFIG_BOARD_LATE_INITIALIZE is selected, then an additional
|
||||||
|
* initialization call will be performed in the boot-up sequence to a
|
||||||
|
* function called board_late_initialize(). board_late_initialize() will
|
||||||
|
* be called immediately after up_initialize() is called and just before
|
||||||
|
* the initial application is started. This additional initialization
|
||||||
|
* phase may be used, for example, to initialize board-specific device
|
||||||
|
* drivers.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef CONFIG_BOARD_LATE_INITIALIZE
|
||||||
|
void board_late_initialize(void)
|
||||||
|
{
|
||||||
|
/* Perform board-specific initialization */
|
||||||
|
|
||||||
|
esp32s2_bringup();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* boards/xtensa/esp32s2/esp32s2-saola-1/src/esp32s2_bringup.c
|
||||||
|
*
|
||||||
|
* 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 <nuttx/config.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <syslog.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <syslog.h>
|
||||||
|
#include <debug.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <nuttx/fs/fs.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_USERLED
|
||||||
|
# include <nuttx/leds/userled.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_INPUT_BUTTONS
|
||||||
|
# include <nuttx/input/buttons.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "esp32s2-saola-1.h"
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: esp32s2_bringup
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Perform architecture-specific initialization
|
||||||
|
*
|
||||||
|
* CONFIG_BOARD_LATE_INITIALIZE=y :
|
||||||
|
* Called from board_late_initialize().
|
||||||
|
*
|
||||||
|
* CONFIG_BOARD_LATE_INITIALIZE=n && CONFIG_LIB_BOARDCTL=y :
|
||||||
|
* Called from the NSH library
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
int esp32s2_bringup(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
#ifdef CONFIG_FS_PROCFS
|
||||||
|
/* Mount the procfs file system */
|
||||||
|
|
||||||
|
ret = nx_mount(NULL, "/proc", "procfs", 0, NULL);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
syslog(LOG_ERR, "ERROR: Failed to mount procfs at /proc: %d\n", ret);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_FS_TMPFS
|
||||||
|
/* Mount the tmpfs file system */
|
||||||
|
|
||||||
|
ret = nx_mount(NULL, CONFIG_LIBC_TMPDIR, "tmpfs", 0, NULL);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
syslog(LOG_ERR, "ERROR: Failed to mount tmpfs at %s: %d\n",
|
||||||
|
CONFIG_LIBC_TMPDIR, ret);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_DEV_GPIO
|
||||||
|
ret = esp32s2_gpio_init();
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
syslog(LOG_ERR, "Failed to initialize GPIO Driver: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* If we got here then perhaps not all initialization was successful, but
|
||||||
|
* at least enough succeeded to bring-up NSH with perhaps reduced
|
||||||
|
* capabilities.
|
||||||
|
*/
|
||||||
|
|
||||||
|
UNUSED(ret);
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
@@ -0,0 +1,397 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* boards/xtensa/esp32s2/esp32s2-saola-1/src/esp32s2_gpio.c
|
||||||
|
*
|
||||||
|
* 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 <nuttx/config.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <syslog.h>
|
||||||
|
#include <nuttx/irq.h>
|
||||||
|
#include <arch/irq.h>
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
#include <nuttx/ioexpander/gpio.h>
|
||||||
|
|
||||||
|
#include <arch/board/board.h>
|
||||||
|
|
||||||
|
#include "esp32s2-saola-1.h"
|
||||||
|
#include "esp32s2_gpio.h"
|
||||||
|
#include "hardware/esp32s2_gpio_sigmap.h"
|
||||||
|
|
||||||
|
#if defined(CONFIG_DEV_GPIO) && !defined(CONFIG_GPIO_LOWER_HALF)
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Pre-processor Definitions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#if !defined(CONFIG_ESP32S2_GPIO_IRQ) && BOARD_NGPIOINT > 0
|
||||||
|
# error "NGPIOINT is > 0 and GPIO interrupts aren't enabled"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Output pins. GPIO15 is used as an example, any other outputs could be
|
||||||
|
* used.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define GPIO_OUT1 15
|
||||||
|
|
||||||
|
/* Input pins. GPIO18 is used as an example, any other inputs could be
|
||||||
|
* used.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define GPIO_IN1 18
|
||||||
|
|
||||||
|
/* Interrupt pins. GPIO20 is used as an example, any other inputs could be
|
||||||
|
* used.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define GPIO_IRQPIN1 20
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Private Types
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
struct esp32s2gpio_dev_s
|
||||||
|
{
|
||||||
|
struct gpio_dev_s gpio;
|
||||||
|
uint8_t id;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct esp32s2gpint_dev_s
|
||||||
|
{
|
||||||
|
struct esp32s2gpio_dev_s esp32s2gpio;
|
||||||
|
pin_interrupt_t callback;
|
||||||
|
};
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Private Function Prototypes
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#if BOARD_NGPIOOUT > 0
|
||||||
|
static int gpout_read(FAR struct gpio_dev_s *dev, FAR bool *value);
|
||||||
|
static int gpout_write(FAR struct gpio_dev_s *dev, bool value);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if BOARD_NGPIOIN > 0
|
||||||
|
static int gpin_read(FAR struct gpio_dev_s *dev, FAR bool *value);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if BOARD_NGPIOINT > 0
|
||||||
|
static int gpint_read(FAR struct gpio_dev_s *dev, FAR bool *value);
|
||||||
|
static int gpint_attach(FAR struct gpio_dev_s *dev,
|
||||||
|
pin_interrupt_t callback);
|
||||||
|
static int gpint_enable(FAR struct gpio_dev_s *dev, bool enable);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Private Data
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#if BOARD_NGPIOOUT > 0
|
||||||
|
static const struct gpio_operations_s gpout_ops =
|
||||||
|
{
|
||||||
|
.go_read = gpout_read,
|
||||||
|
.go_write = gpout_write,
|
||||||
|
.go_attach = NULL,
|
||||||
|
.go_enable = NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This array maps the GPIO pins used as OUTPUT */
|
||||||
|
|
||||||
|
static const uint32_t g_gpiooutputs[BOARD_NGPIOOUT] =
|
||||||
|
{
|
||||||
|
GPIO_OUT1
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct esp32s2gpio_dev_s g_gpout[BOARD_NGPIOOUT];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if BOARD_NGPIOIN > 0
|
||||||
|
static const struct gpio_operations_s gpin_ops =
|
||||||
|
{
|
||||||
|
.go_read = gpin_read,
|
||||||
|
.go_write = NULL,
|
||||||
|
.go_attach = NULL,
|
||||||
|
.go_enable = NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This array maps the GPIO pins used as INTERRUPT INPUTS */
|
||||||
|
|
||||||
|
static const uint32_t g_gpioinputs[BOARD_NGPIOIN] =
|
||||||
|
{
|
||||||
|
GPIO_IN1
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct esp32s2gpio_dev_s g_gpin[BOARD_NGPIOIN];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if BOARD_NGPIOINT > 0
|
||||||
|
static const struct gpio_operations_s gpint_ops =
|
||||||
|
{
|
||||||
|
.go_read = gpint_read,
|
||||||
|
.go_write = NULL,
|
||||||
|
.go_attach = gpint_attach,
|
||||||
|
.go_enable = gpint_enable,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This array maps the GPIO pins used as INTERRUPT INPUTS */
|
||||||
|
|
||||||
|
static const uint32_t g_gpiointinputs[BOARD_NGPIOINT] =
|
||||||
|
{
|
||||||
|
GPIO_IRQPIN1,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct esp32s2gpint_dev_s g_gpint[BOARD_NGPIOINT];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Private Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: gpout_read
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#if BOARD_NGPIOOUT > 0
|
||||||
|
static int gpout_read(FAR struct gpio_dev_s *dev, FAR bool *value)
|
||||||
|
{
|
||||||
|
FAR struct esp32s2gpio_dev_s *esp32s2gpio =
|
||||||
|
(FAR struct esp32s2gpio_dev_s *)dev;
|
||||||
|
|
||||||
|
DEBUGASSERT(esp32s2gpio != NULL && value != NULL);
|
||||||
|
DEBUGASSERT(esp32s2gpio->id < BOARD_NGPIOOUT);
|
||||||
|
gpioinfo("Reading...\n");
|
||||||
|
|
||||||
|
*value = esp32s2_gpioread(g_gpiooutputs[esp32s2gpio->id]);
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: gpout_write
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
static int gpout_write(FAR struct gpio_dev_s *dev, bool value)
|
||||||
|
{
|
||||||
|
FAR struct esp32s2gpio_dev_s *esp32s2gpio =
|
||||||
|
(FAR struct esp32s2gpio_dev_s *)dev;
|
||||||
|
|
||||||
|
DEBUGASSERT(esp32s2gpio != NULL);
|
||||||
|
DEBUGASSERT(esp32s2gpio->id < BOARD_NGPIOOUT);
|
||||||
|
gpioinfo("Writing %d\n", (int)value);
|
||||||
|
|
||||||
|
esp32s2_gpiowrite(g_gpiooutputs[esp32s2gpio->id], value);
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: gpin_read
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#if BOARD_NGPIOIN > 0
|
||||||
|
static int gpin_read(FAR struct gpio_dev_s *dev, FAR bool *value)
|
||||||
|
{
|
||||||
|
FAR struct esp32s2gpio_dev_s *esp32s2gpio =
|
||||||
|
(FAR struct esp32s2gpio_dev_s *)dev;
|
||||||
|
|
||||||
|
DEBUGASSERT(esp32s2gpio != NULL && value != NULL);
|
||||||
|
DEBUGASSERT(esp32s2gpio->id < BOARD_NGPIOIN);
|
||||||
|
gpioinfo("Reading... pin %d\n", g_gpioinputs[esp32s2gpio->id]);
|
||||||
|
|
||||||
|
*value = esp32s2_gpioread(g_gpioinputs[esp32s2gpio->id]);
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: esp32s2gpio_interrupt
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#if BOARD_NGPIOINT > 0
|
||||||
|
static int esp32s2gpio_interrupt(int irq, void *context, void *arg)
|
||||||
|
{
|
||||||
|
FAR struct esp32s2gpint_dev_s *esp32s2gpint =
|
||||||
|
(FAR struct esp32s2gpint_dev_s *)arg;
|
||||||
|
|
||||||
|
DEBUGASSERT(esp32s2gpint != NULL && esp32s2gpint->callback != NULL);
|
||||||
|
gpioinfo("Interrupt! callback=%p\n", esp32s2gpint->callback);
|
||||||
|
|
||||||
|
esp32s2gpint->callback(&esp32s2gpint->esp32s2gpio.gpio,
|
||||||
|
esp32s2gpint->esp32s2gpio.id);
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: gpint_read
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
static int gpint_read(FAR struct gpio_dev_s *dev, FAR bool *value)
|
||||||
|
{
|
||||||
|
FAR struct esp32s2gpint_dev_s *esp32s2gpint =
|
||||||
|
(FAR struct esp32s2gpint_dev_s *)dev;
|
||||||
|
|
||||||
|
DEBUGASSERT(esp32s2gpint != NULL && value != NULL);
|
||||||
|
DEBUGASSERT(esp32s2gpint->esp32s2gpio.id < BOARD_NGPIOINT);
|
||||||
|
gpioinfo("Reading int pin...\n");
|
||||||
|
|
||||||
|
*value = esp32s2_gpioread(g_gpiointinputs[esp32s2gpint->esp32s2gpio.id]);
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: gpint_attach
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
static int gpint_attach(FAR struct gpio_dev_s *dev,
|
||||||
|
pin_interrupt_t callback)
|
||||||
|
{
|
||||||
|
FAR struct esp32s2gpint_dev_s *esp32s2gpint =
|
||||||
|
(FAR struct esp32s2gpint_dev_s *)dev;
|
||||||
|
int irq = ESP32S2_PIN2IRQ(g_gpiointinputs[esp32s2gpint->esp32s2gpio.id]);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
gpioinfo("Attaching the callback\n");
|
||||||
|
|
||||||
|
/* Make sure the interrupt is disabled */
|
||||||
|
|
||||||
|
esp32s2_gpioirqdisable(irq);
|
||||||
|
ret = irq_attach(irq,
|
||||||
|
esp32s2gpio_interrupt,
|
||||||
|
&g_gpint[esp32s2gpint->esp32s2gpio.id]);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
syslog(LOG_ERR, "ERROR: gpint_attach() failed: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
gpioinfo("Attach %p\n", callback);
|
||||||
|
esp32s2gpint->callback = callback;
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: gpint_enable
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
static int gpint_enable(FAR struct gpio_dev_s *dev, bool enable)
|
||||||
|
{
|
||||||
|
FAR struct esp32s2gpint_dev_s *esp32s2gpint =
|
||||||
|
(FAR struct esp32s2gpint_dev_s *)dev;
|
||||||
|
int irq = ESP32S2_PIN2IRQ(g_gpiointinputs[esp32s2gpint->esp32s2gpio.id]);
|
||||||
|
|
||||||
|
if (enable)
|
||||||
|
{
|
||||||
|
if (esp32s2gpint->callback != NULL)
|
||||||
|
{
|
||||||
|
gpioinfo("Enabling the interrupt\n");
|
||||||
|
|
||||||
|
/* Configure the interrupt for rising edge */
|
||||||
|
|
||||||
|
esp32s2_gpioirqenable(irq, RISING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gpioinfo("Disable the interrupt\n");
|
||||||
|
esp32s2_gpioirqdisable(irq);
|
||||||
|
}
|
||||||
|
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: esp32s2_gpio_init
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
int esp32s2_gpio_init(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int pincount = 0;
|
||||||
|
|
||||||
|
#if BOARD_NGPIOOUT > 0
|
||||||
|
for (i = 0; i < BOARD_NGPIOOUT; i++)
|
||||||
|
{
|
||||||
|
/* Setup and register the GPIO pin */
|
||||||
|
|
||||||
|
g_gpout[i].gpio.gp_pintype = GPIO_OUTPUT_PIN;
|
||||||
|
g_gpout[i].gpio.gp_ops = &gpout_ops;
|
||||||
|
g_gpout[i].id = i;
|
||||||
|
gpio_pin_register(&g_gpout[i].gpio, pincount);
|
||||||
|
|
||||||
|
/* Configure the pins that will be used as output */
|
||||||
|
|
||||||
|
esp32s2_gpio_matrix_out(g_gpiooutputs[i], SIG_GPIO_OUT_IDX, 0, 0);
|
||||||
|
esp32s2_configgpio(g_gpiooutputs[i], OUTPUT_FUNCTION_3);
|
||||||
|
esp32s2_gpiowrite(g_gpiooutputs[i], 0);
|
||||||
|
|
||||||
|
pincount++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
pincount = 0;
|
||||||
|
|
||||||
|
#if BOARD_NGPIOIN > 0
|
||||||
|
for (i = 0; i < BOARD_NGPIOIN; i++)
|
||||||
|
{
|
||||||
|
/* Setup and register the GPIO pin */
|
||||||
|
|
||||||
|
g_gpin[i].gpio.gp_pintype = GPIO_INPUT_PIN;
|
||||||
|
g_gpin[i].gpio.gp_ops = &gpin_ops;
|
||||||
|
g_gpin[i].id = i;
|
||||||
|
gpio_pin_register(&g_gpin[i].gpio, pincount);
|
||||||
|
|
||||||
|
/* Configure the pins that will be used as INPUT */
|
||||||
|
|
||||||
|
esp32s2_configgpio(g_gpioinputs[i], INPUT_FUNCTION_3);
|
||||||
|
|
||||||
|
pincount++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
pincount = 0;
|
||||||
|
|
||||||
|
#if BOARD_NGPIOINT > 0
|
||||||
|
for (i = 0; i < BOARD_NGPIOINT; i++)
|
||||||
|
{
|
||||||
|
/* Setup and register the GPIO pin */
|
||||||
|
|
||||||
|
g_gpint[i].esp32s2gpio.gpio.gp_pintype = GPIO_INTERRUPT_PIN;
|
||||||
|
g_gpint[i].esp32s2gpio.gpio.gp_ops = &gpint_ops;
|
||||||
|
g_gpint[i].esp32s2gpio.id = i;
|
||||||
|
gpio_pin_register(&g_gpint[i].esp32s2gpio.gpio, pincount);
|
||||||
|
|
||||||
|
/* Configure the pins that will be used as interrupt input */
|
||||||
|
|
||||||
|
esp32s2_configgpio(g_gpiointinputs[i], INPUT_FUNCTION_3 | PULLDOWN);
|
||||||
|
|
||||||
|
pincount++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_DEV_GPIO && !CONFIG_GPIO_LOWER_HALF */
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* boards/xtensa/esp32s2/esp32s2-saola-1/src/esp32s2_reset.c
|
||||||
|
*
|
||||||
|
* 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 <nuttx/config.h>
|
||||||
|
|
||||||
|
#include <nuttx/arch.h>
|
||||||
|
#include <nuttx/board.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_BOARDCTL_RESET
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: board_reset
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Reset board. Support for this function is required by board-level
|
||||||
|
* logic if CONFIG_BOARDCTL_RESET is selected.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* status - Status information provided with the reset event. This
|
||||||
|
* meaning of this status information is board-specific. If not
|
||||||
|
* used by a board, the value zero may be provided in calls to
|
||||||
|
* board_reset().
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* If this function returns, then it was not possible to power-off the
|
||||||
|
* board due to some constraints. The return value in this case is a
|
||||||
|
* board-specific reason for the failure to shutdown.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
int board_reset(int status)
|
||||||
|
{
|
||||||
|
up_systemreset();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_BOARDCTL_RESET */
|
||||||
Reference in New Issue
Block a user