From 624c6f24cac0cd8ae9770e8dd4649e3c721ca82d Mon Sep 17 00:00:00 2001 From: Gunar Schorcht Date: Wed, 18 Dec 2019 13:10:34 +0100 Subject: [PATCH 1/3] boards/esp32: allow board specific initialization --- boards/common/esp32/board_common.c | 4 +-- boards/common/esp32/include/board_common.h | 26 ++++++++++++++----- .../esp32-mh-et-live-minikit/include/board.h | 8 ++++++ boards/esp32-olimex-evb/include/board.h | 8 ++++++ boards/esp32-ttgo-t-beam/Makefile.dep | 4 +++ boards/esp32-ttgo-t-beam/include/board.h | 5 ++++ .../esp32-wemos-lolin-d32-pro/include/board.h | 8 ++++++ boards/esp32-wroom-32/include/board.h | 8 ++++++ boards/esp32-wrover-kit/include/board.h | 8 ++++++ 9 files changed, 71 insertions(+), 8 deletions(-) diff --git a/boards/common/esp32/board_common.c b/boards/common/esp32/board_common.c index d393f6e5f8..42a05e2e01 100644 --- a/boards/common/esp32/board_common.c +++ b/boards/common/esp32/board_common.c @@ -30,7 +30,7 @@ extern "C" { #endif -void board_init(void) +void board_init_common(void) { #ifdef LED0_PIN gpio_init (LED0_PIN, GPIO_OUT); @@ -54,7 +54,7 @@ extern void spi_print_config(void); extern void uart_print_config(void); extern void can_print_config(void); -void print_board_config (void) +void print_board_config(void) { ets_printf("\nBoard configuration:\n"); diff --git a/boards/common/esp32/include/board_common.h b/boards/common/esp32/include/board_common.h index 3b5143eb59..f8076e0831 100644 --- a/boards/common/esp32/include/board_common.h +++ b/boards/common/esp32/include/board_common.h @@ -147,23 +147,37 @@ extern mtd_dev_t *mtd0; /** - * @brief Initialize board specific hardware + * @brief Initialize the hardware that is common for all ESP32 boards. * - * Since all features of ESP32 boards are provided by the SOC, almost all - * initializations are done during the CPU initialization that is called from - * boot loader. + * This function has to be called from the board specific `board_init` function. */ -void board_init (void); +void board_init_common(void); /** * @brief Print the board configuration in a human readable format */ -void print_board_config (void); +void print_board_config(void); #ifdef __cplusplus } /* end extern "C" */ #endif +#else /* ESP32_IDF_CODE */ + +#ifndef DOXYGEN + +#ifdef __cplusplus +extern "C" +#endif + +/* declaration of `board_init_common` is required when compiling vendor code */ +extern void board_init_common(void); + +#ifdef __cplusplus +} +#endif + +#endif /* DOXYGEN */ #endif /* ESP32_IDF_CODE */ #endif /* BOARD_COMMON_H */ /** @} */ diff --git a/boards/esp32-mh-et-live-minikit/include/board.h b/boards/esp32-mh-et-live-minikit/include/board.h index ca1a91ff4a..5efe74313a 100644 --- a/boards/esp32-mh-et-live-minikit/include/board.h +++ b/boards/esp32-mh-et-live-minikit/include/board.h @@ -58,5 +58,13 @@ /* include definitions for optional hardware modules */ #include "board_modules.h" +/** + * @brief Initialize the board specific hardware + */ +static inline void board_init(void) { + /* there is nothing special to initialize on this board */ + board_init_common(); +} + #endif /* BOARD_H */ /** @} */ diff --git a/boards/esp32-olimex-evb/include/board.h b/boards/esp32-olimex-evb/include/board.h index b46ba658d5..4233bede75 100644 --- a/boards/esp32-olimex-evb/include/board.h +++ b/boards/esp32-olimex-evb/include/board.h @@ -98,6 +98,14 @@ extern "C" { /* include common board definitions as last step */ #include "board_common.h" +/** + * @brief Initialize the board specific hardware + */ +static inline void board_init(void) { + /* there is nothing special to initialize on this board */ + board_init_common(); +} + #ifdef __cplusplus } /* end extern "C" */ #endif diff --git a/boards/esp32-ttgo-t-beam/Makefile.dep b/boards/esp32-ttgo-t-beam/Makefile.dep index 29d6c99ba8..6c6d30e82b 100644 --- a/boards/esp32-ttgo-t-beam/Makefile.dep +++ b/boards/esp32-ttgo-t-beam/Makefile.dep @@ -1 +1,5 @@ +ifneq (,$(filter esp32_ttgo_t_beam_v1_0,$(USEMODULE))) + FEATURES_REQUIRED += periph_i2c +endif + include $(RIOTBOARD)/common/esp32/Makefile.dep diff --git a/boards/esp32-ttgo-t-beam/include/board.h b/boards/esp32-ttgo-t-beam/include/board.h index 45759d88e1..80fee9be7e 100644 --- a/boards/esp32-ttgo-t-beam/include/board.h +++ b/boards/esp32-ttgo-t-beam/include/board.h @@ -79,5 +79,10 @@ /* include common board definitions as last step */ #include "board_common.h" +/** + * @brief Initialize the board specific hardware + */ +void board_init(void); + #endif /* BOARD_H */ /** @} */ diff --git a/boards/esp32-wemos-lolin-d32-pro/include/board.h b/boards/esp32-wemos-lolin-d32-pro/include/board.h index dbab5be37b..330d2970ed 100644 --- a/boards/esp32-wemos-lolin-d32-pro/include/board.h +++ b/boards/esp32-wemos-lolin-d32-pro/include/board.h @@ -80,5 +80,13 @@ /* include common board definitions as last step */ #include "board_common.h" +/** + * @brief Initialize the board specific hardware + */ +static inline void board_init(void) { + /* there is nothing special to initialize on this board */ + board_init_common(); +} + #endif /* BOARD_H */ /** @} */ diff --git a/boards/esp32-wroom-32/include/board.h b/boards/esp32-wroom-32/include/board.h index d7ed1d6ecf..3ff7e5f03a 100644 --- a/boards/esp32-wroom-32/include/board.h +++ b/boards/esp32-wroom-32/include/board.h @@ -64,5 +64,13 @@ /* include common board definitions as last step */ #include "board_common.h" +/** + * @brief Initialize the board specific hardware + */ +static inline void board_init(void) { + /* there is nothing special to initialize on this board */ + board_init_common(); +} + #endif /* BOARD_H */ /** @} */ diff --git a/boards/esp32-wrover-kit/include/board.h b/boards/esp32-wrover-kit/include/board.h index def0ed0951..ab559e0be3 100644 --- a/boards/esp32-wrover-kit/include/board.h +++ b/boards/esp32-wrover-kit/include/board.h @@ -108,5 +108,13 @@ /* include common board definitions as last step */ #include "board_common.h" +/** + * @brief Initialize the board specific hardware + */ +static inline void board_init(void) { + /* there is nothing special to initialize on this board */ + board_init_common(); +} + #endif /* BOARD_H */ /** @} */ From 3208207ec5174579cbb4f622841fdd27b45b56d7 Mon Sep 17 00:00:00 2001 From: Gunar Schorcht Date: Wed, 18 Dec 2019 13:12:04 +0100 Subject: [PATCH 2/3] cpu/esp32: change order of board and periph init To be able to access periphals to initialize board specific hardware, the board_init function has to be called after periph_init. --- cpu/esp32/startup.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cpu/esp32/startup.c b/cpu/esp32/startup.c index 04771ee604..0eec9ae0f5 100644 --- a/cpu/esp32/startup.c +++ b/cpu/esp32/startup.c @@ -314,9 +314,6 @@ static NORETURN void IRAM system_init (void) LOG_STARTUP("Heap free: %u bytes\n", get_free_heap_size()); uart_tx_wait_idle(CONFIG_CONSOLE_UART_NUM); - /* initialize the board */ - board_init(); - /* initialize stdio */ stdio_init(); @@ -341,6 +338,9 @@ static NORETURN void IRAM system_init (void) spi_flash_drive_init(); #endif + /* initialize the board */ + board_init(); + /* route a software interrupt source to CPU as trigger for thread yields */ intr_matrix_set(PRO_CPU_NUM, ETS_FROM_CPU_INTR0_SOURCE, CPU_INUM_SOFTWARE); /* set thread yield handler and enable the software interrupt */ From c30674d5398b986477d08b726e5452a61fd6982b Mon Sep 17 00:00:00 2001 From: Gunar Schorcht Date: Wed, 18 Dec 2019 13:13:02 +0100 Subject: [PATCH 3/3] boards/esp32-ttgo-t-beam: switch on GPS module --- boards/esp32-ttgo-t-beam/board.c | 56 ++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 boards/esp32-ttgo-t-beam/board.c diff --git a/boards/esp32-ttgo-t-beam/board.c b/boards/esp32-ttgo-t-beam/board.c new file mode 100644 index 0000000000..3ec4007657 --- /dev/null +++ b/boards/esp32-ttgo-t-beam/board.c @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2019 Gunar Schorcht + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup boards_esp32_ttgo-t-beam + * @{ + * + * @file + * @brief Board specific definitions for TTGO T-Beam board + * + * @author Gunar Schorcht + */ + +#include "board.h" + +#if MODULE_ESP32_TTGO_T_BEAM_V1_0 +#include "periph/i2c.h" +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +#define AXP192_I2C_ADDR (0x34) +#define AXP192_LDO234_DC23_CTL (0x12) +#define AXP192_LDO3OUT_VOL (0x29) +#define AXP192_LDO3_ON_BIT (1 << 3) + +void board_init(void) +{ + board_init_common(); + +#if MODULE_ESP32_TTGO_T_BEAM_V1_0 + uint8_t reg; + + i2c_acquire(I2C_DEV(0)); + /* enable the LDO3 power control */ + i2c_read_reg(I2C_DEV(0), AXP192_I2C_ADDR, AXP192_LDO234_DC23_CTL, ®, 0); + reg |= AXP192_LDO3_ON_BIT; + i2c_write_reg(I2C_DEV(0), AXP192_I2C_ADDR, AXP192_LDO234_DC23_CTL, reg, 0); + /* set the output voltage to 3V3 */ + i2c_write_reg(I2C_DEV(0), AXP192_I2C_ADDR, AXP192_LDO3OUT_VOL, 0xff, 0); + i2c_release(I2C_DEV(0)); +#endif +} + +#ifdef __cplusplus +} /* end extern "C" */ +#endif + +/** @} */