boards: initial support for the ESP32-LyraT

boards/esp32-lyrat: Fix board name in comment

boards/esp32-lyrat: Fix coding style

boards/esp32-lyrat: Removed BOOT_BUTTON support

boards/esp32-lyrat: Improved code maintainability and fixed styling

boards/esp32-lyrat: Specified board version in configuration files

boards/esp32-lyrat: Added wapi config

boards/esp32-lyrat: Added documentation

boards/esp32-lyrat: Fix typo in documentation

boards/esp32-lyrat: Added comment on BUTTON_BOOT
This commit is contained in:
Lucas Saavedra Vaz 2022-09-22 17:45:49 -03:00 committed by Xiang Xiao
parent 47b350a4c3
commit 4ee22e8739
21 changed files with 2414 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

View file

@ -0,0 +1,398 @@
..
Ported from ESP-ADF documentation https://espressif-docs.readthedocs-hosted.com/projects/esp-adf/en/latest/design-guide/dev-boards/board-esp32-lyrat-v4.3.html
================
ESP32-LyraT V4.3
================
The ESP32-LyraT development board is a hardware platform designed for the
dual-core ESP32 audio applications, e.g., Wi-Fi or BT audio speakers,
speech-based remote controllers, smart-home appliances with audio
functionality(ies), etc. You can find the board schematic `here <https://dl.espressif.com/dl/schematics/ESP32-LYRAT_V4.3-20220119.pdf>`_.
.. figure:: esp32-lyrat-v4.3-layout-with-wrover-e-module.jpg
:alt: ESP32 LyraT V4.3 Board Layout
:figclass: align-center
ESP32-LyraT V4.3 Board Layout
The block diagram below presents main components of the ESP32-LyraT.
.. figure:: esp32-lyrat-v4.3-electrical-block-diagram-with-wrover-e-module.png
:alt: ESP32 LyraT V4.3 Electrical Block Diagram
:figclass: align-center
ESP32-LyraT V4.3 Electrical Block Diagram
Features
========
- ESP32-WROVER-E Module
- JTAG Interface
- MicroSD Slot
- Audio Codec Chip
- Battery Charger Chip
- Touch Pad Buttons
Serial Console
==============
UART0 is, by default, the serial console. It connects to the on-board
CP2102N bridge and is available on the USB connector.
It will show up as /dev/ttyUSB[n] where [n] will probably be 0.
Buttons and LEDs
================
Buttons
-------
Two key labeled *Rec* and *Mode*. They are routed to **ESP32-WROVER-E Module**
and intended for developing and testing a UI for audio applications using
dedicated API.
Four touch pads labeled *Play*, *Sel*, *Vol+* and *Vol-*.
They are routed to **ESP32-WROVER-E Module** and intended for development and
testing of a UI for audio applications using dedicated API. **They are currently
not supported as the driver is in development.**
There are two buttons labeled Boot and EN. The EN button pulls the chip enable
line that doubles as a reset line. The BOOT button is connected to IO0. On
reset it is used as a strapping pin to determine whether the chip boots
normally or into the serial bootloader.
Entering of the ESP32 into upload mode may be done in two ways:
* Manually by pressing both **Boot** and **RST** keys and then releasing first
**RST** and then **Boot** key.
* Automatically by software performing the upload. The software is using
**DTR** and **RTS** signals of the serial interface to control states of
**EN**, **IO0** and **IO2** pins of the ESP32. This functionality is enabled
by installing jumpers in three headers **JP23**, **JP24** and **JP25**.
Remove all jumpers after upload is complete.
LEDs
----
A general purpose green LED controlled by the **ESP32-WROVER-E Module** to
indicate certain operation states of the audio application using dedicated
API. It can also be used by the user for other purposes.
The **Standby** green LED indicates that power has been applied to the
**Micro USB Port**. The **Charging** red LED indicates that a battery
connected to the **Battery Socket** is being charged.
Audio Codec
===========
**This is currently unsupported. Drivers still in development.**
The Audio Codec Chip, `ES8388 <http://www.everest-semi.com/pdf/ES8388%20DS.pdf>`_,
is a low power stereo audio codec with a headphone amplifier. It consists
of 2-channel ADC, 2-channel DAC, microphone amplifier, headphone amplifier
, digital sound effects, analog mixing and gain functions. It is
interfaced with **ESP32-WROVER-E Module** over I2S and I2S buses to
provide audio processing in hardware independently from the audio
application.
It also provides:
- Onboard microphone connected to IN1 of the **Audio Codec Chip**.
- Auxiliary input socket connected to IN2 (left and right channel) of the
**Audio Codec Chip**. Use a 3.5 mm stereo jack to connect to this socket.
- Output socket to connect headphones with a 3.5 mm stereo jack.
.. note::
The socket may be used with mobile phone headsets and is compatible
with OMPT standard headsets only. It does work with CTIA headsets.
Please refer to `Phone connector (audio) <https://en.wikipedia.org/wiki/Phone_connector_(audio)#TRRS_standards>`_
on Wikipedia.
- Output socket to connect a speaker. The 4-ohm and 3-watt speaker is
recommended. The pins have a 2.00 mm / 0.08" pitch.
The development board uses two mono Class D amplifier ICs, model number NS4150
with maximum output power of 3W and operating voltage from 3.0V to 5.25V.
The audio input source is the digital-to-analog converter (DAC) output of the
ES8388. Audio output supports two external speakers.
An optional audio output is a pair of headphones feed from the same DACs as
the amplifier ICs.
To switch between using headphones and speakers, the board provides a digital
input signal to detect when a headphone jack is inserted and a digital output
signal to enable or disable the amplifier ICs. In other words selection
between speakers and headphones is under software control instead of using
mechanical contacts that would disconnect speakers once a headphone jack is
inserted.
SD card
=======
The development board supports a MicroSD card in SPI/1-bit/4-bit modes,
and can store or play audio files in the MicroSD card. Note that **JTAG**
cannot be used and should be disconnected by setting **Function DIP
Switch** when **MicroSD Card** is in operation, because some of signals
are shared by both devices.
Enable MicroSD Card in 1-wire Mode
""""""""""""""""""""""""""""""""""
Set **Function DIP Switch** to:
+---------+-----------------+
| DIP SW | Position |
+=========+=================+
| 1 | OFF |
+---------+-----------------+
| 2 | OFF |
+---------+-----------------+
| 3 | OFF |
+---------+-----------------+
| 4 | OFF |
+---------+-----------------+
| 5 | OFF |
+---------+-----------------+
| 6 | OFF |
+---------+-----------------+
| 7 | OFF :sup:`1` |
+---------+-----------------+
| 8 | n/a |
+---------+-----------------+
1. **AUX Input** detection may be enabled by toggling the DIP SW 7 *ON*.
Note that the **AUX Input** signal pin should not be be plugged in when the
system powers up. Otherwise the ESP32 may not be able to boot correctly.
In this mode:
* **JTAG** functionality is not available
* *Vol-* touch button is available for use with the API
Enable MicroSD Card in 4-wire Mode
""""""""""""""""""""""""""""""""""
Set **Function DIP Switch** to:
+---------+-----------+
| DIP SW | Position |
+=========+===========+
| 1 | ON |
+---------+-----------+
| 2 | ON |
+---------+-----------+
| 3 | OFF |
+---------+-----------+
| 4 | OFF |
+---------+-----------+
| 5 | OFF |
+---------+-----------+
| 6 | OFF |
+---------+-----------+
| 7 | OFF |
+---------+-----------+
| 8 | n/a |
+---------+-----------+
In this mode:
* **JTAG** functionality is not available
* *Vol-* touch button is not available for use with the API
* **AUX Input** detection from the API is not available
JTAG
====
Provides access to the **JTAG** interface of **ESP32-WROVER-E Module**.
It may be used for debugging, application upload, as well as implementing
several other functions.
Enable JTAG
"""""""""""
Set **Function DIP Switch** to:
+---------+-----------+
| DIP SW | Position |
+=========+===========+
| 1 | OFF |
+---------+-----------+
| 2 | OFF |
+---------+-----------+
| 3 | ON |
+---------+-----------+
| 4 | ON |
+---------+-----------+
| 5 | ON |
+---------+-----------+
| 6 | ON |
+---------+-----------+
| 7 | ON |
+---------+-----------+
| 8 | n/a |
+---------+-----------+
In this mode:
* **MicroSD Card** functionality is not available, remove the card from the slot
* *Vol-* touch button is not available for use with the API
* **AUX Input** detection from the API is not available
Battery
=======
The board has a constant current & constant voltage linear charger for single cell
lithium-ion batteries AP5056. Used for charging of a battery connected to
the **Battery Socket** over the **Micro USB Port**.
.. note::
Please verify if polarity on the battery plug matches polarity of the
socket as marked on the board's soldermask besides the socket.
.. note::
The **Power On Switch** does not affect/disconnect the Li-ion
battery charging.
Pin Mapping
===========
Several pins ESP32 module are allocated to the on board hardware. Some of
them, like GPIO0 or GPIO2, have multiple functions. Please refer to the table
below.
+-----------+------+-------------------------------------------------------+
| GPIO Pin | Type | Function Definition |
+===========+======+=======================================================+
| SENSOR_VP | I | Audio **Rec** (PB) |
+-----------+------+-------------------------------------------------------+
| SENSOR_VN | I | Audio **Mode** (PB) |
+-----------+------+-------------------------------------------------------+
| IO32 | I/O | Audio **Set** (TP) |
+-----------+------+-------------------------------------------------------+
| IO33 | I/O | Audio **Play** (TP) |
+-----------+------+-------------------------------------------------------+
| IO27 | I/O | Audio **Vol+** (TP) |
+-----------+------+-------------------------------------------------------+
| IO13 | I/O | JTAG **MTCK**, MicroSD **D3**, Audio **Vol-** (TP) |
+-----------+------+-------------------------------------------------------+
| IO14 | I/O | JTAG **MTMS**, MicroSD **CLK** |
+-----------+------+-------------------------------------------------------+
| IO12 | I/O | JTAG **MTDI**, MicroSD **D2**, Aux signal **detect** |
+-----------+------+-------------------------------------------------------+
| IO15 | I/O | JTAG **MTDO**, MicroSD **CMD** |
+-----------+------+-------------------------------------------------------+
| IO2 | I/O | Automatic Upload, MicroSD **D0** |
+-----------+------+-------------------------------------------------------+
| IO4 | I/O | MicroSD **D1** |
+-----------+------+-------------------------------------------------------+
| IO34 | I | MicroSD insert **detect** |
+-----------+------+-------------------------------------------------------+
| IO0 | I/O | Automatic Upload, I2S **MCLK** |
+-----------+------+-------------------------------------------------------+
| IO5 | I/O | I2S **SCLK** |
+-----------+------+-------------------------------------------------------+
| IO25 | I/O | I2S **LRCK** |
+-----------+------+-------------------------------------------------------+
| IO26 | I/O | I2S **DSDIN** |
+-----------+------+-------------------------------------------------------+
| IO35 | I | I2S **ASDOUT** |
+-----------+------+-------------------------------------------------------+
| IO19 | I/O | Headphone jack insert **detect** |
+-----------+------+-------------------------------------------------------+
| IO22 | I/O | Green LED indicator |
+-----------+------+-------------------------------------------------------+
| IO21 | I/O | PA Enable output |
+-----------+------+-------------------------------------------------------+
| IO18 | I/O | I2C **SDA** |
+-----------+------+-------------------------------------------------------+
| IO23 | I/O | I2C **SCL** |
+-----------+------+-------------------------------------------------------+
* (TP) - touch pad
* (PB) - push button
There are several pin headers available to connect external components, check
the state of particular signal bus or debug operation of ESP32. Note that some
signals are shared.
UART Header / JP2
"""""""""""""""""
+---+-------------+
| | Header Pin |
+===+=============+
| 1 | 3.3V |
+---+-------------+
| 2 | TX |
+---+-------------+
| 3 | RX |
+---+-------------+
| 4 | GND |
+---+-------------+
I2S Header / JP4
""""""""""""""""
+---+----------------+-------------+
| | I2C Header Pin | ESP32 Pin |
+===+================+=============+
| 1 | MCLK | GPIO0 |
+---+----------------+-------------+
| 2 | SCLK | GPIO5 |
+---+----------------+-------------+
| 1 | LRCK | GPIO25 |
+---+----------------+-------------+
| 2 | DSDIN | GPIO26 |
+---+----------------+-------------+
| 3 | ASDOUT | GPIO35 |
+---+----------------+-------------+
| 3 | GND | GND |
+---+----------------+-------------+
I2C Header / JP5
""""""""""""""""
+---+----------------+-------------+
| | I2C Header Pin | ESP32 Pin |
+===+================+=============+
| 1 | SCL | GPIO23 |
+---+----------------+-------------+
| 2 | SDA | GPIO18 |
+---+----------------+-------------+
| 3 | GND | GND |
+---+----------------+-------------+
JTAG Header / JP7
"""""""""""""""""
+---+---------------+-------------+
| | ESP32 Pin | JTAG Signal |
+===+===============+=============+
| 1 | MTDO / GPIO15 | TDO |
+---+---------------+-------------+
| 2 | MTCK / GPIO13 | TCK |
+---+---------------+-------------+
| 3 | MTDI / GPIO12 | TDI |
+---+---------------+-------------+
| 4 | MTMS / GPIO14 | TMS |
+---+---------------+-------------+
.. note::
**JTAG** cannot be used if **MicroSD Card** is enabled.
Configurations
==============
nsh
---
Basic NuttShell configuration (console enabled in UART0, exposed via
USB connection by means of the CP2102N bridge, at 115200 bps).
wapi
----
Enables Wi-Fi support.

View file

@ -242,6 +242,17 @@ config ARCH_BOARD_ESP32_ETHERNETKIT
more flexible power supply options, the ESP32-Ethernet-Kit also supports power
over Ethernet (PoE).
config ARCH_BOARD_ESP32_LYRAT
bool "Espressif ESP32-LyraT"
depends on ARCH_CHIP_ESP32WROVER
select ARCH_HAVE_LEDS
select ARCH_HAVE_BUTTONS
select ARCH_HAVE_IRQBUTTONS if ESP32_GPIO_IRQ
---help---
ESP32-LyraT is an open-source development board for Espressif Systems' Audio
Development Framework (ADF). It is designed for smart speakers and smart-home
applications. This port is for board version 4.3.
config ARCH_BOARD_ESP32_WROVERKIT
bool "Espressif ESP-WROVER-KIT"
depends on ARCH_CHIP_ESP32WROVER
@ -2629,6 +2640,7 @@ config ARCH_BOARD
default "esp32-devkitc" if ARCH_BOARD_ESP32_DEVKITC
default "ttgo_eink5_v2" if ARCH_BOARD_TTGO_T5V2_ESP32
default "esp32-ethernet-kit" if ARCH_BOARD_ESP32_ETHERNETKIT
default "esp32-lyrat" if ARCH_BOARD_ESP32_LYRAT
default "esp32-wrover-kit" if ARCH_BOARD_ESP32_WROVERKIT
default "esp32c3-devkit" if ARCH_BOARD_ESP32C3_DEVKIT
default "esp32c3-devkit-rust-1" if ARCH_BOARD_ESP32C3_DEVKIT_RUST1
@ -3620,6 +3632,9 @@ endif
if ARCH_BOARD_ESP32_ETHERNETKIT
source "boards/xtensa/esp32/esp32-ethernet-kit/Kconfig"
endif
if ARCH_BOARD_ESP32_LYRAT
source "boards/xtensa/esp32/esp32-lyrat/Kconfig"
endif
if ARCH_BOARD_ESP32_WROVERKIT
source "boards/xtensa/esp32/esp32-wrover-kit/Kconfig"
endif

View file

@ -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_ESP32_LYRAT
endif # ARCH_BOARD_ESP32_LYRAT

View file

@ -0,0 +1,45 @@
#
# 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="esp32-lyrat"
CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_ESP32_LYRAT=y
CONFIG_ARCH_CHIP="esp32"
CONFIG_ARCH_CHIP_ESP32=y
CONFIG_ARCH_CHIP_ESP32WROVER=y
CONFIG_ARCH_STACKDUMP=y
CONFIG_ARCH_XTENSA=y
CONFIG_BOARD_LOOPSPERMSEC=16717
CONFIG_BUILTIN=y
CONFIG_ESP32_UART0=y
CONFIG_FS_PROCFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=3072
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INTELHEX_BINARY=y
CONFIG_MM_REGIONS=3
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_RR_INTERVAL=200
CONFIG_SCHED_WAITPID=y
CONFIG_START_DAY=6
CONFIG_START_MONTH=12
CONFIG_START_YEAR=2011
CONFIG_SYSTEM_NSH=y
CONFIG_UART0_SERIAL_CONSOLE=y

View file

@ -0,0 +1,76 @@
#
# 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_ALLOW_BSD_COMPONENTS=y
CONFIG_ARCH="xtensa"
CONFIG_ARCH_BOARD="esp32-lyrat"
CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_ESP32_LYRAT=y
CONFIG_ARCH_CHIP="esp32"
CONFIG_ARCH_CHIP_ESP32=y
CONFIG_ARCH_CHIP_ESP32WROVER=y
CONFIG_ARCH_STACKDUMP=y
CONFIG_ARCH_XTENSA=y
CONFIG_BOARD_LOOPSPERMSEC=16717
CONFIG_BUILTIN=y
CONFIG_DRIVERS_IEEE80211=y
CONFIG_DRIVERS_WIRELESS=y
CONFIG_ESP32_SPIFLASH=y
CONFIG_ESP32_SPIFLASH_SPIFFS=y
CONFIG_ESP32_STORAGE_MTD_SIZE=0x80000
CONFIG_ESP32_UART0=y
CONFIG_ESP32_WIFI=y
CONFIG_ESP32_WIFI_SAVE_PARAM=y
CONFIG_FS_PROCFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=3072
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=3072
CONFIG_INTELHEX_BINARY=y
CONFIG_MM_REGIONS=3
CONFIG_NAME_MAX=48
CONFIG_NETDB_DNSCLIENT=y
CONFIG_NETDEV_LATEINIT=y
CONFIG_NETDEV_PHY_IOCTL=y
CONFIG_NETDEV_WIRELESS_IOCTL=y
CONFIG_NET_BROADCAST=y
CONFIG_NET_ICMP=y
CONFIG_NET_ICMP_SOCKET=y
CONFIG_NET_TCP=y
CONFIG_NET_UDP=y
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_PTHREAD_MUTEX_TYPES=y
CONFIG_RAM_SIZE=114688
CONFIG_RAM_START=0x20000000
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_LPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_SIG_DEFAULT=y
CONFIG_SPI=y
CONFIG_SPIFFS_NAME_MAX=48
CONFIG_START_DAY=6
CONFIG_START_MONTH=12
CONFIG_START_YEAR=2011
CONFIG_SYSTEM_DHCPC_RENEW=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_PING=y
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_WAPI=y
CONFIG_WIRELESS_WAPI_CMDTOOL=y
CONFIG_WIRELESS_WAPI_STACKSIZE=4096

View file

@ -0,0 +1,79 @@
/****************************************************************************
* boards/xtensa/esp32/esp32-lyrat/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_ESP32_ESP32_LYRAT_INCLUDE_BOARD_H
#define __BOARDS_XTENSA_ESP32_ESP32_LYRAT_INCLUDE_BOARD_H
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Clocking *****************************************************************/
/* The ESP32-LyraT board is fitted with either a 26 or a 40MHz crystal */
#ifdef CONFIG_ESP32_XTAL_26MHz
# define BOARD_XTAL_FREQUENCY 26000000
#else
# define BOARD_XTAL_FREQUENCY 40000000
#endif
#ifdef CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ
# define BOARD_CLOCK_FREQUENCY (CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ * 1000000)
#else
# define BOARD_CLOCK_FREQUENCY 80000000
#endif
/* Button definitions *******************************************************/
/* Board supports six buttons (2 push buttons and 4 touch buttons). */
#define BUTTON_BTN1 0
#define BUTTON_BTN2 1
#define NUM_BUTTONS 2
#define BUTTON_BTN1_BIT (1 << BUTTON_BTN1)
#define BUTTON_BTN2_BIT (1 << BUTTON_BTN2)
/* GPIO definitions *********************************************************/
/* ES8388 CODEC */
#define ES8388_CCLK 23
#define ES8388_CDATA 18
#define ES8388_MCLK 0
#define ES8388_SCLK 5
#define ES8388_LRCK 25
#define ES8388_DSDIN 26
#define ES8388_ASDOUT 35
/* 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_ESP32_ESP32_LYRAT_INCLUDE_BOARD_H */

View file

@ -0,0 +1,128 @@
/****************************************************************************
* boards/xtensa/esp32/esp32-lyrat/include/board_memorymap.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_ESP32_ESP32_LYRAT_INCLUDE_BOARD_MEMORYMAP_H
#define __BOARDS_XTENSA_ESP32_ESP32_LYRAT_INCLUDE_BOARD_MEMORYMAP_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <stdint.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Kernel ROM */
#define KIROM_START (uintptr_t)&__kirom_start
#define KIROM_SIZE (uintptr_t)&__kirom_size
#define KDROM_START (uintptr_t)&__kdrom_start
#define KDROM_SIZE (uintptr_t)&__kdrom_size
/* Kernel RAM */
#define KIRAM_0_START (uintptr_t)&__kiram_0_start
#define KIRAM_0_SIZE (uintptr_t)&__kiram_0_size
#define KIRAM_0_END (uintptr_t)&__kiram_0_end
#define KIRAM_1_START (uintptr_t)&__kiram_1_start
#define KIRAM_1_SIZE (uintptr_t)&__kiram_1_size
#define KIRAM_1_END (uintptr_t)&__kiram_1_end
#define KDRAM_0_START (uintptr_t)&__kdram_0_start
#define KDRAM_0_SIZE (uintptr_t)&__kdram_0_size
#define KDRAM_0_END (uintptr_t)&__kdram_0_end
#define KDRAM_1_START (uintptr_t)&__kdram_1_start
#define KDRAM_1_SIZE (uintptr_t)&__kdram_1_size
#define KDRAM_1_END (uintptr_t)&__kdram_1_end
/* Exception vectors */
#define VECTORS_START (uintptr_t)&__vectors_start
#define VECTORS_END (uintptr_t)&__vectors_end
/* User ROM */
#define UIROM_START (uintptr_t)&__uirom_start
#define UIROM_SIZE (uintptr_t)&__uirom_size
#define UIROM_END (uintptr_t)&__uirom_end
#define UDROM_START (uintptr_t)&__udrom_start
#define UDROM_SIZE (uintptr_t)&__udrom_size
#define UDROM_END (uintptr_t)&__udrom_end
/* User RAM */
#define UIRAM_START (uintptr_t)&__uiram_start
#define UIRAM_SIZE (uintptr_t)&__uiram_size
#define UIRAM_END (uintptr_t)&__uiram_end
#define UDRAM_START (uintptr_t)&__udram_start
#define UDRAM_SIZE (uintptr_t)&__udram_size
#define UDRAM_END (uintptr_t)&__udram_end
/****************************************************************************
* Public Data
****************************************************************************/
/* Kernel ROM (RX) */
extern uintptr_t __kirom_start;
extern uintptr_t __kirom_size;
extern uintptr_t __kdrom_start;
extern uintptr_t __kdrom_size;
/* Kernel RAM (RW) */
extern uintptr_t __kiram_0_start;
extern uintptr_t __kiram_0_size;
extern uintptr_t __kiram_0_end;
extern uintptr_t __kiram_1_start;
extern uintptr_t __kiram_1_size;
extern uintptr_t __kiram_1_end;
extern uintptr_t __kdram_0_start;
extern uintptr_t __kdram_0_size;
extern uintptr_t __kdram_0_end;
extern uintptr_t __kdram_1_start;
extern uintptr_t __kdram_1_size;
extern uintptr_t __kdram_1_end;
/* Exception vectors */
extern uintptr_t __vectors_start;
extern uintptr_t __vectors_end;
/* User ROM (RX) */
extern uintptr_t __uirom_start;
extern uintptr_t __uirom_size;
extern uintptr_t __uirom_end;
extern uintptr_t __udrom_start;
extern uintptr_t __udrom_size;
extern uintptr_t __udrom_end;
/* User RAM (RW) */
extern uintptr_t __uiram_start;
extern uintptr_t __uiram_size;
extern uintptr_t __uiram_end;
extern uintptr_t __udram_start;
extern uintptr_t __udram_size;
extern uintptr_t __udram_end;
#endif /* __BOARDS_XTENSA_ESP32_ESP32_LYRAT_INCLUDE_BOARD_MEMORYMAP_H */

View file

@ -0,0 +1 @@
/esp32_out.ld

View file

@ -0,0 +1,92 @@
############################################################################
# boards/xtensa/esp32/esp32-lyrat/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/esp32/Config.mk
include $(TOPDIR)/arch/xtensa/src/lx6/Toolchain.defs
# This is the generated memory layout linker script. It will always be
# generated at the board level.
ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32_out.ld
# Pick the linker scripts from the board level if they exist, if not
# pick the common linker scripts.
ifneq ($(wildcard $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32.ld),)
ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32.ld
else
ifeq ($(CONFIG_BUILD_PROTECTED),y)
ARCHSCRIPT += $(BOARD_COMMON_DIR)$(DELIM)scripts$(DELIM)kernel-space.ld
else
ifeq ($(CONFIG_ESP32_APP_FORMAT_MCUBOOT),y)
ARCHSCRIPT += $(BOARD_COMMON_DIR)$(DELIM)scripts$(DELIM)esp32_mcuboot.ld
else
ARCHSCRIPT += $(BOARD_COMMON_DIR)$(DELIM)scripts$(DELIM)esp32.ld
endif
endif
endif
ifneq ($(wildcard $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32_rom.ld),)
ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32_rom.ld
else
ARCHSCRIPT += $(BOARD_COMMON_DIR)$(DELIM)scripts$(DELIM)esp32_rom.ld
endif
ifneq ($(wildcard $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32.template.ld),)
LDSCRIPT_TEMPLATE = $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32.template.ld
else
ifeq ($(CONFIG_BUILD_PROTECTED),y)
LDSCRIPT_TEMPLATE = $(BOARD_COMMON_DIR)$(DELIM)scripts$(DELIM)protected.template.ld
else
LDSCRIPT_TEMPLATE = $(BOARD_COMMON_DIR)$(DELIM)scripts$(DELIM)flat.template.ld
endif
endif
ARCHPICFLAGS = -fpic
# if SPIRAM/PSRAM is used then we need to include a workaround
ifeq ($(CONFIG_ESP32_SPIRAM),y)
ARCHCFLAGS += -mfix-esp32-psram-cache-issue
endif
CFLAGS := $(ARCHCFLAGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS)
CXXFLAGS := $(ARCHCXXFLAGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS)
CPPFLAGS := $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
AFLAGS := $(CFLAGS) -D__ASSEMBLY__
# Loadable module definitions
CMODULEFLAGS = $(CFLAGS) -mtext-section-literals
LDMODULEFLAGS = -r -e module_initialize
LDMODULEFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/modlib/gnu-elf.ld)
# ELF module definitions
CELFFLAGS = $(CFLAGS) -mtext-section-literals
CXXELFFLAGS = $(CXXFLAGS) -mtext-section-literals
LDELFFLAGS = -r -e main
LDELFFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)$(DELIM)binfmt$(DELIM)libelf$(DELIM)gnu-elf.ld)

View file

@ -0,0 +1,65 @@
#############################################################################
# boards/xtensa/esp32/esp32-lyrat/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
CONFIGFILE = $(TOPDIR)$(DELIM)include$(DELIM)nuttx$(DELIM)config.h
CSRCS = esp32_boot.c esp32_bringup.c
ifeq ($(CONFIG_USERLED),y)
CSRCS += esp32_userleds.c
endif
ifeq ($(CONFIG_BOARDCTL),y)
CSRCS += esp32_appinit.c
ifeq ($(CONFIG_BOARDCTL_RESET),y)
CSRCS += esp32_reset.c
endif
endif
ifeq ($(CONFIG_MMCSD),y)
CSRCS += esp32_mmcsd.c
endif
ifeq ($(CONFIG_DEV_GPIO),y)
CSRCS += esp32_gpio.c
endif
ifeq ($(CONFIG_ARCH_BUTTONS),y)
CSRCS += esp32_buttons.c
endif
SCRIPTOUT = $(BOARD_DIR)$(DELIM)scripts$(DELIM)esp32_out.ld
.PHONY = context distclean
$(SCRIPTOUT): $(LDSCRIPT_TEMPLATE) $(CONFIGFILE)
$(Q) $(CC) -isystem $(TOPDIR)/include -C -P -x c -E $(LDSCRIPT_TEMPLATE) -o $@
context:: $(SCRIPTOUT)
distclean::
$(call DELFILE, $(SCRIPTOUT))
DEPPATH += --dep-path board
VPATH += :board
CFLAGS += $(shell $(INCDIR) "$(CC)" $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)board)

View file

@ -0,0 +1,123 @@
/****************************************************************************
* boards/xtensa/esp32/esp32-lyrat/src/esp32-lyrat.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_ESP32_ESP32_LYRAT_SRC_ESP32_LYRAT_H
#define __BOARDS_XTENSA_ESP32_ESP32_LYRAT_SRC_ESP32_LYRAT_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <nuttx/compiler.h>
#include <stdint.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* ESP32-LyraT GPIOs ********************************************************/
/* LEDs */
#define GPIO_LED1 22
/* Buttons */
/* As BOOT_BUTTON shares pins with I2S and the SD card it cannot be used
* as an user button like regular ESP32 boards. As the ESP32-LyraT has
* other buttons that can be used, BOOT_BUTTON is disabled in the buttons
* driver to avoid conflict with the remaining peripherals.
*/
#define BUTTON_REC 36
#define BUTTON_MODE 39
/* 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: esp32_bringup
*
* Description:
* Perform architecture-specific initialization
*
* CONFIG_BOARD_LATE_INITIALIZE=y :
* Called from board_late_initialize().
*
* CONFIG_BOARD_LATE_INITIALIZE=y && CONFIG_BOARDCTL=y :
* Called from the NSH library via board_app_initialize()
*
****************************************************************************/
int esp32_bringup(void);
/****************************************************************************
* Name: esp32_mmcsd_initialize
*
* Description:
* Initialize SPI-based SD card and card detect thread.
*
****************************************************************************/
int esp32_mmcsd_initialize(int minor);
/****************************************************************************
* Name: esp32_spiflash_init
*
* Description:
* Initialize the SPIFLASH and register the MTD device.
****************************************************************************/
int esp32_spiflash_init(void);
/****************************************************************************
* Name: esp32_gpio_init
****************************************************************************/
#ifdef CONFIG_DEV_GPIO
int esp32_gpio_init(void);
#endif
#endif /* __ASSEMBLY__ */
#endif /* __BOARDS_XTENSA_ESP32_ESP32_LYRAT_SRC_ESP32_LYRAT_H */

View file

@ -0,0 +1,80 @@
/****************************************************************************
* boards/xtensa/esp32/esp32-lyrat/src/esp32_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 "esp32-lyrat.h"
#ifdef CONFIG_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 esp32_bringup();
#endif
}
#endif /* CONFIG_BOARDCTL */

View file

@ -0,0 +1,101 @@
/****************************************************************************
* boards/xtensa/esp32/esp32-lyrat/src/esp32_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 <arch/esp32/memory_layout.h>
#include "esp32-lyrat.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: esp32_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 esp32_board_initialize(void)
{
/* Configure on-board LEDs if LED support has been selected. */
#ifdef CONFIG_ARCH_LEDS
board_autoled_initialize();
#endif
}
/****************************************************************************
* 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 */
esp32_bringup();
#ifdef CONFIG_SMP
/* To avoid corrupting the heap, this region of memory (~3KB) is not
* included until the APP CPU has started.
* So we can't add it with the rest of the regions at xtensa_add_region(),
* that function is called early from up_initialize(). We wait until the
* SMP bringup is complete.
*/
umm_addregion((void *)HEAP_REGION_ROMAPP_START,
(size_t)(HEAP_REGION_ROMAPP_END - HEAP_REGION_ROMAPP_START));
#endif
}
#endif

View file

@ -0,0 +1,396 @@
/****************************************************************************
* boards/xtensa/esp32/esp32-lyrat/src/esp32_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 <syslog.h>
#include <errno.h>
#include <nuttx/fs/fs.h>
#include <nuttx/himem/himem.h>
#include "esp32_partition.h"
#include <arch/board/board.h>
#ifdef CONFIG_USERLED
# include <nuttx/leds/userled.h>
#endif
#ifdef CONFIG_TIMER
#include <esp32_tim_lowerhalf.h>
#endif
#ifdef CONFIG_ONESHOT
# include "esp32_board_oneshot.h"
#endif
#ifdef CONFIG_WATCHDOG
# include "esp32_board_wdt.h"
#endif
#ifdef CONFIG_ESP32_SPIFLASH
# include "esp32_board_spiflash.h"
#endif
#ifdef CONFIG_ESP32_BLE
# include "esp32_ble.h"
#endif
#ifdef CONFIG_ESP32_WIFI
# include "esp32_board_wlan.h"
#endif
#ifdef CONFIG_ESP32_I2C
# include "esp32_board_i2c.h"
#endif
#ifdef CONFIG_SENSORS_BMP180
# include "esp32_bmp180.h"
#endif
#ifdef CONFIG_INPUT_BUTTONS
# include <nuttx/input/buttons.h>
#endif
#ifdef CONFIG_VIDEO_FB
# include <nuttx/video/fb.h>
#endif
#ifdef CONFIG_ESP32_RT_TIMER
# include "esp32_rt_timer.h"
#endif
#ifdef CONFIG_LCD_DEV
# include <nuttx/board.h>
# include <nuttx/lcd/lcd_dev.h>
#endif
#ifdef CONFIG_RTC_DRIVER
# include "esp32_rtc_lowerhalf.h"
#endif
#ifdef CONFIG_LCD_BACKPACK
# include "esp32_lcd_backpack.h"
#endif
#include "esp32-lyrat.h"
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: esp32_bringup
*
* Description:
* Perform architecture-specific initialization
*
* CONFIG_BOARD_LATE_INITIALIZE=y :
* Called from board_late_initialize().
*
* CONFIG_BOARD_LATE_INITIALIZE=n && CONFIG_BOARDCTL=y :
* Called from the NSH library
*
****************************************************************************/
int esp32_bringup(void)
{
int ret;
#if defined(CONFIG_ESP32_SPIRAM) && \
defined(CONFIG_ESP32_SPIRAM_BANKSWITCH_ENABLE)
ret = esp_himem_init();
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: Failed to init HIMEM: %d\n", ret);
}
#endif
#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_LCD_BACKPACK
/* slcd:0, i2c:0, rows=2, cols=16 */
ret = board_lcd_backpack_init(0, 0, 2, 16);
if (ret < 0)
{
syslog(LOG_ERR, "Failed to initialize PCF8574 LCD, error %d\n", ret);
}
#endif
#ifdef CONFIG_MMCSD
ret = esp32_mmcsd_initialize(0);
if (ret < 0)
{
syslog(LOG_ERR, "Failed to initialize SD slot: %d\n", ret);
}
#endif
#ifdef CONFIG_ESP32_SPIFLASH
ret = esp32_spiflash_init();
if (ret)
{
syslog(LOG_ERR, "ERROR: Failed to initialize SPI Flash\n");
}
#endif
#ifdef CONFIG_ESP32_PARTITION_TABLE
ret = esp32_partition_init();
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: Failed to initialize partition error=%d\n",
ret);
}
#endif
#ifdef CONFIG_ESP32_RT_TIMER
ret = esp32_rt_timer_init();
if (ret < 0)
{
syslog(LOG_ERR, "Failed to initialize RT timer: %d\n", ret);
}
#endif
#ifdef CONFIG_ESP32_BLE
ret = esp32_ble_initialize();
if (ret)
{
syslog(LOG_ERR, "ERROR: Failed to initialize BLE: %d\n", ret);
}
#endif
#ifdef CONFIG_ESP32_WIFI
ret = board_wlan_init();
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: Failed to initialize wireless subsystem=%d\n",
ret);
}
#endif
/* First, register the timer drivers and let timer 1 for oneshot
* if it is enabled.
*/
#ifdef CONFIG_TIMER
#if defined(CONFIG_ESP32_TIMER0) && !defined(CONFIG_ESP32_RT_TIMER)
ret = esp32_timer_initialize("/dev/timer0", TIMER0);
if (ret < 0)
{
syslog(LOG_ERR,
"ERROR: Failed to initialize timer driver: %d\n",
ret);
}
#endif
#if defined(CONFIG_ESP32_TIMER1) && !defined(CONFIG_ONESHOT)
ret = esp32_timer_initialize("/dev/timer1", TIMER1);
if (ret < 0)
{
syslog(LOG_ERR,
"ERROR: Failed to initialize timer driver: %d\n",
ret);
}
#endif
#ifdef CONFIG_ESP32_TIMER2
ret = esp32_timer_initialize("/dev/timer2", TIMER2);
if (ret < 0)
{
syslog(LOG_ERR,
"ERROR: Failed to initialize timer driver: %d\n",
ret);
}
#endif
#ifdef CONFIG_ESP32_TIMER3
ret = esp32_timer_initialize("/dev/timer3", TIMER3);
if (ret < 0)
{
syslog(LOG_ERR,
"ERROR: Failed to initialize timer driver: %d\n",
ret);
}
#endif
#endif /* CONFIG_TIMER */
/* Now register one oneshot driver */
#if defined(CONFIG_ONESHOT) && defined(CONFIG_ESP32_TIMER1)
ret = esp32_oneshot_init(ONESHOT_TIMER, ONESHOT_RESOLUTION_US);
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: esp32_oneshot_init() failed: %d\n", ret);
}
#endif /* CONFIG_ONESHOT */
#ifdef CONFIG_USERLED
/* Register the LED driver */
ret = userled_lower_initialize("/dev/userleds");
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: userled_lower_initialize() failed: %d\n", ret);
}
#endif
#ifdef CONFIG_WATCHDOG
/* Configure watchdog timer */
ret = board_wdt_init();
if (ret < 0)
{
syslog(LOG_ERR,
"ERROR: Failed to initialize watchdog drivers: %d\n",
ret);
}
#endif
#ifdef CONFIG_DEV_GPIO
ret = esp32_gpio_init();
if (ret < 0)
{
syslog(LOG_ERR, "Failed to initialize GPIO Driver: %d\n", ret);
}
#endif
#ifdef CONFIG_I2C_DRIVER
#ifdef CONFIG_ESP32_I2C0
ret = esp32_i2c_register(0);
if (ret < 0)
{
syslog(LOG_ERR, "Failed to initialize I2C Driver for I2C0: %d\n", ret);
}
#endif
#ifdef CONFIG_ESP32_I2C1
ret = esp32_i2c_register(1);
if (ret < 0)
{
syslog(LOG_ERR, "Failed to initialize I2C Driver for I2C1: %d\n", ret);
}
#endif
#endif
#ifdef CONFIG_SENSORS_BMP180
/* Try to register BMP180 device in I2C0 */
ret = board_bmp180_initialize(0, 0);
if (ret < 0)
{
syslog(LOG_ERR, "Failed to initialize BMP180 driver: %d\n", ret);
}
#endif
#ifdef CONFIG_INPUT_BUTTONS
/* Register the BUTTON driver */
ret = btn_lower_initialize("/dev/buttons");
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: btn_lower_initialize() failed: %d\n", ret);
}
#endif
#ifdef CONFIG_VIDEO_FB
ret = fb_register(0, 0);
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: Failed to initialize Frame Buffer Driver.\n");
}
#endif
#ifdef CONFIG_LCD_DEV
ret = board_lcd_initialize();
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: board_lcd_initialize() failed: %d\n", ret);
}
ret = lcddev_register(0);
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: lcddev_register() failed: %d\n", ret);
}
#endif
#ifdef CONFIG_RTC_DRIVER
/* Instantiate the ESP32 RTC driver */
ret = esp32_rtc_driverinit();
if (ret < 0)
{
syslog(LOG_ERR,
"ERROR: Failed to Instantiate the RTC driver: %d\n", 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;
}

View file

@ -0,0 +1,174 @@
/****************************************************************************
* boards/xtensa/esp32/esp32-lyrat/src/esp32_buttons.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 <assert.h>
#include <debug.h>
#include <errno.h>
#include <stdbool.h>
#include <stdio.h>
#include <nuttx/arch.h>
#include <nuttx/board.h>
#include <nuttx/irq.h>
#include <arch/irq.h>
#include "esp32_gpio.h"
#include "esp32-lyrat.h"
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: board_button_initialize
*
* Description:
* board_button_initialize() must be called to initialize button resources.
* After that, board_buttons() may be called to collect the current state
* of all buttons or board_button_irq() may be called to register button
* interrupt handlers.
*
****************************************************************************/
uint32_t board_button_initialize(void)
{
esp32_configgpio(BUTTON_MODE, INPUT_FUNCTION_3 | PULLUP);
esp32_configgpio(BUTTON_REC, INPUT_FUNCTION_3 | PULLUP);
return 1;
}
/****************************************************************************
* Name: board_buttons
*
* Description:
* After board_button_initialize() has been called, board_buttons() may be
* called to collect the state of all buttons. board_buttons() returns an
* 8-bit bit set with each bit associated with a button. See the
* BUTTON_*_BIT definitions in board.h for the meaning of each bit.
*
****************************************************************************/
uint32_t board_buttons(void)
{
uint8_t ret = 0;
int n = 0;
const uint8_t btn_id_arr[] =
{
BUTTON_REC,
BUTTON_MODE
};
for (uint8_t btn_id = 0; btn_id < sizeof(btn_id_arr); btn_id++)
{
iinfo("Reading button %d\n", btn_id);
bool b0 = esp32_gpioread(btn_id_arr[btn_id]);
for (int i = 0; i < 10; i++)
{
up_mdelay(1); /* TODO */
bool b1 = esp32_gpioread(btn_id_arr[btn_id]);
if (b0 == b1)
{
n++;
}
else
{
n = 0;
}
if (3 == n)
{
break;
}
b0 = b1;
}
iinfo("b=%d n=%d\n", b0, n);
/* Low value means that the button is pressed */
if (!b0)
{
ret |= (1 << btn_id);
}
}
return ret;
}
/****************************************************************************
* Name: board_button_irq
*
* Description:
* board_button_irq() may be called to register an interrupt handler that
* will be called when a button is depressed or released. The ID value is
* a button enumeration value that uniquely identifies a button resource.
* See the BUTTON_* definitions in board.h for the meaning of enumeration
* value.
*
****************************************************************************/
#ifdef CONFIG_ARCH_IRQBUTTONS
int board_button_irq(int id, xcpt_t irqhandler, void *arg)
{
int ret;
int irq = ESP32_PIN2IRQ(id);
if (NULL != irqhandler)
{
/* Make sure the interrupt is disabled */
esp32_gpioirqdisable(irq);
ret = irq_attach(irq, irqhandler, arg);
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: irq_attach() failed: %d\n", ret);
return ret;
}
gpioinfo("Attach %p\n", irqhandler);
gpioinfo("Enabling the interrupt\n");
/* Configure the interrupt for rising and falling edges */
esp32_gpioirqenable(irq, CHANGE);
}
else
{
gpioinfo("Disable the interrupt\n");
esp32_gpioirqdisable(irq);
}
return OK;
}
#endif

View file

@ -0,0 +1,391 @@
/****************************************************************************
* boards/xtensa/esp32/esp32-lyrat/src/esp32_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 <nuttx/irq.h>
#include <arch/irq.h>
#include <assert.h>
#include <debug.h>
#include <nuttx/ioexpander/gpio.h>
#include <arch/board/board.h>
#include "esp32-lyrat.h"
#include "esp32_gpio.h"
#include "hardware/esp32_gpio_sigmap.h"
#if defined(CONFIG_DEV_GPIO) && !defined(CONFIG_GPIO_LOWER_HALF)
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#if !defined(CONFIG_ESP32_GPIO_IRQ) && BOARD_NGPIOINT > 0
# error "NGPIOINT is > 0 and GPIO interrupts aren't enabled"
#endif
/* Output pins. GPIO16 is used as an example, any other outputs could be
* used.
*/
#define GPIO_OUT1 16
/* Input pins. GPIO17 is used as an example, any other inputs could be
* used.
*/
#define GPIO_IN1 17
/* Interrupt pins. GPIO24 is used as an example, any other inputs could be
* used.
*/
#define GPIO_IRQPIN1 24
/****************************************************************************
* Private Types
****************************************************************************/
struct esp32gpio_dev_s
{
struct gpio_dev_s gpio;
uint8_t id;
};
struct esp32gpint_dev_s
{
struct esp32gpio_dev_s esp32gpio;
pin_interrupt_t callback;
};
/****************************************************************************
* Private Function Prototypes
****************************************************************************/
#if BOARD_NGPIOOUT > 0
static int gpout_read(struct gpio_dev_s *dev, bool *value);
static int gpout_write(struct gpio_dev_s *dev, bool value);
#endif
#if BOARD_NGPIOIN > 0
static int gpin_read(struct gpio_dev_s *dev, bool *value);
#endif
#if BOARD_NGPIOINT > 0
static int gpint_read(struct gpio_dev_s *dev, bool *value);
static int gpint_attach(struct gpio_dev_s *dev,
pin_interrupt_t callback);
static int gpint_enable(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 esp32gpio_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 esp32gpio_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 esp32gpint_dev_s g_gpint[BOARD_NGPIOINT];
#endif
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Name: gpout_read
****************************************************************************/
#if BOARD_NGPIOOUT > 0
static int gpout_read(struct gpio_dev_s *dev, bool *value)
{
struct esp32gpio_dev_s *esp32gpio = (struct esp32gpio_dev_s *)dev;
DEBUGASSERT(esp32gpio != NULL && value != NULL);
DEBUGASSERT(esp32gpio->id < BOARD_NGPIOOUT);
gpioinfo("Reading...\n");
*value = esp32_gpioread(g_gpiooutputs[esp32gpio->id]);
return OK;
}
/****************************************************************************
* Name: gpout_write
****************************************************************************/
static int gpout_write(struct gpio_dev_s *dev, bool value)
{
struct esp32gpio_dev_s *esp32gpio = (struct esp32gpio_dev_s *)dev;
DEBUGASSERT(esp32gpio != NULL);
DEBUGASSERT(esp32gpio->id < BOARD_NGPIOOUT);
gpioinfo("Writing %d\n", (int)value);
esp32_gpiowrite(g_gpiooutputs[esp32gpio->id], value);
return OK;
}
#endif
/****************************************************************************
* Name: gpin_read
****************************************************************************/
#if BOARD_NGPIOIN > 0
static int gpin_read(struct gpio_dev_s *dev, bool *value)
{
struct esp32gpio_dev_s *esp32gpio = (struct esp32gpio_dev_s *)dev;
DEBUGASSERT(esp32gpio != NULL && value != NULL);
DEBUGASSERT(esp32gpio->id < BOARD_NGPIOIN);
gpioinfo("Reading... pin %d\n", g_gpioinputs[esp32gpio->id]);
*value = esp32_gpioread(g_gpioinputs[esp32gpio->id]);
return OK;
}
#endif
/****************************************************************************
* Name: esp32gpio_interrupt
****************************************************************************/
#if BOARD_NGPIOINT > 0
static int esp32gpio_interrupt(int irq, void *context, void *arg)
{
struct esp32gpint_dev_s *esp32gpint =
(struct esp32gpint_dev_s *)arg;
DEBUGASSERT(esp32gpint != NULL && esp32gpint->callback != NULL);
gpioinfo("Interrupt! callback=%p\n", esp32gpint->callback);
esp32gpint->callback(&esp32gpint->esp32gpio.gpio,
esp32gpint->esp32gpio.id);
return OK;
}
/****************************************************************************
* Name: gpint_read
****************************************************************************/
static int gpint_read(struct gpio_dev_s *dev, bool *value)
{
struct esp32gpint_dev_s *esp32gpint =
(struct esp32gpint_dev_s *)dev;
DEBUGASSERT(esp32gpint != NULL && value != NULL);
DEBUGASSERT(esp32gpint->esp32gpio.id < BOARD_NGPIOINT);
gpioinfo("Reading int pin...\n");
*value = esp32_gpioread(g_gpiointinputs[esp32gpint->esp32gpio.id]);
return OK;
}
/****************************************************************************
* Name: gpint_attach
****************************************************************************/
static int gpint_attach(struct gpio_dev_s *dev,
pin_interrupt_t callback)
{
struct esp32gpint_dev_s *esp32gpint =
(struct esp32gpint_dev_s *)dev;
int irq = ESP32_PIN2IRQ(g_gpiointinputs[esp32gpint->esp32gpio.id]);
int ret;
gpioinfo("Attaching the callback\n");
/* Make sure the interrupt is disabled */
esp32_gpioirqdisable(irq);
ret = irq_attach(irq,
esp32gpio_interrupt,
&g_gpint[esp32gpint->esp32gpio.id]);
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: gpint_attach() failed: %d\n", ret);
return ret;
}
gpioinfo("Attach %p\n", callback);
esp32gpint->callback = callback;
return OK;
}
/****************************************************************************
* Name: gpint_enable
****************************************************************************/
static int gpint_enable(struct gpio_dev_s *dev, bool enable)
{
struct esp32gpint_dev_s *esp32gpint =
(struct esp32gpint_dev_s *)dev;
int irq = ESP32_PIN2IRQ(g_gpiointinputs[esp32gpint->esp32gpio.id]);
if (enable)
{
if (esp32gpint->callback != NULL)
{
gpioinfo("Enabling the interrupt\n");
/* Configure the interrupt for rising edge */
esp32_gpioirqenable(irq, RISING);
}
}
else
{
gpioinfo("Disable the interrupt\n");
esp32_gpioirqdisable(irq);
}
return OK;
}
#endif
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: esp32_gpio_init
****************************************************************************/
int esp32_gpio_init(void)
{
int pincount = 0;
int i;
#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 */
esp32_gpio_matrix_out(g_gpiooutputs[i], SIG_GPIO_OUT_IDX, 0, 0);
esp32_configgpio(g_gpiooutputs[i], OUTPUT_FUNCTION_3 |
INPUT_FUNCTION_3);
esp32_gpiowrite(g_gpiooutputs[i], 0);
pincount++;
}
#endif
#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 */
esp32_configgpio(g_gpioinputs[i], INPUT_FUNCTION_3);
pincount++;
}
#endif
#if BOARD_NGPIOINT > 0
for (i = 0; i < BOARD_NGPIOINT; i++)
{
/* Setup and register the GPIO pin */
g_gpint[i].esp32gpio.gpio.gp_pintype = GPIO_INTERRUPT_PIN;
g_gpint[i].esp32gpio.gpio.gp_ops = &gpint_ops;
g_gpint[i].esp32gpio.id = i;
gpio_pin_register(&g_gpint[i].esp32gpio.gpio, pincount);
/* Configure the pins that will be used as interrupt input */
esp32_configgpio(g_gpiointinputs[i], INPUT_FUNCTION_3 | PULLDOWN);
pincount++;
}
#endif
return OK;
}
#endif /* CONFIG_DEV_GPIO && !CONFIG_GPIO_LOWER_HALF */

View file

@ -0,0 +1,84 @@
/****************************************************************************
* boards/xtensa/esp32/esp32-lyrat/src/esp32_mmcsd.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 <debug.h>
#include <nuttx/config.h>
#include <nuttx/mmcsd.h>
#include <nuttx/spi/spi.h>
#include <pthread.h>
#include <sched.h>
#include <time.h>
#include <unistd.h>
#include "esp32_spi.h"
#include "esp32-lyrat.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Private Definitions
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: esp32_mmcsd_initialize
*
* Description:
* Initialize SPI-based SD card and card detect thread.
****************************************************************************/
int esp32_mmcsd_initialize(int minor)
{
struct spi_dev_s *spi;
int rv;
mcinfo("INFO: Initializing mmcsd card\n");
spi = esp32_spibus_initialize(CONFIG_NSH_MMCSDSPIPORTNO);
if (spi == NULL)
{
mcerr("ERROR: Failed to initialize SPI port %d\n", 2);
return -ENODEV;
}
rv = mmcsd_spislotinitialize(minor, 0, spi);
if (rv < 0)
{
mcerr("ERROR: Failed to bind SPI port %d to SD slot %d\n",
2, 0);
return rv;
}
spiinfo("INFO: mmcsd card has been initialized successfully\n");
return OK;
}

View file

@ -0,0 +1,63 @@
/****************************************************************************
* boards/xtensa/esp32/esp32-lyrat/src/esp32_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 */

View file

@ -0,0 +1,95 @@
/****************************************************************************
* boards/xtensa/esp32/esp32-lyrat/src/esp32_userleds.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 <stdint.h>
#include <stdbool.h>
#include <debug.h>
#include <nuttx/board.h>
#include <arch/board/board.h>
#include "esp32_gpio.h"
#include "esp32-lyrat.h"
/****************************************************************************
* Private Data
****************************************************************************/
/* This array maps an LED number to GPIO pin configuration */
static const uint32_t g_ledcfg[BOARD_NLEDS] =
{
GPIO_LED1
};
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: board_userled_initialize
****************************************************************************/
uint32_t board_userled_initialize(void)
{
uint8_t i;
/* Configure the LEDs GPIOs as outputs */
for (i = 0; i < BOARD_NLEDS; i++)
{
esp32_configgpio(g_ledcfg[i], OUTPUT);
}
return BOARD_NLEDS;
}
/****************************************************************************
* Name: board_userled
****************************************************************************/
void board_userled(int led, bool ledon)
{
if ((unsigned)led < BOARD_NLEDS)
{
esp32_gpiowrite(g_ledcfg[led], ledon);
}
}
/****************************************************************************
* Name: board_userled_all
****************************************************************************/
void board_userled_all(uint32_t ledset)
{
uint8_t i;
for (i = 0; i < BOARD_NLEDS; i++)
{
esp32_gpiowrite(g_ledcfg[i], (ledset & (1 << i)) != 0);
}
}