Loading...
Searching...
No Matches
periph_conf_common.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2023 Gunar Schorcht
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
22
23#if defined(CPU_FAM_ESP32)
25#elif defined(CPU_FAM_ESP32C3)
27#elif defined(CPU_FAM_ESP32C6)
29#elif defined(CPU_FAM_ESP32H2)
31#elif defined(CPU_FAM_ESP32S2)
33#elif defined(CPU_FAM_ESP32S3)
35#else
36# error "ESP32x SoC family not supported"
37#endif
38
39/* include periph_cpu.h to make it visible in any case */
40#include "periph_cpu.h"
41#include "kernel_defines.h"
42
43#ifdef __cplusplus
44extern "C" {
45#endif
46
51
59#ifndef ADC_GPIOS
60#define ADC_GPIOS { }
61#endif
62
66static const gpio_t adc_channels[] = ADC_GPIOS;
67
76#define ADC_NUMOF ARRAY_SIZE(adc_channels)
78
83
91#ifndef DAC_GPIOS
92#define DAC_GPIOS { }
93#endif
94
98static const gpio_t dac_channels[] = DAC_GPIOS;
99
108#define DAC_NUMOF ARRAY_SIZE(dac_channels)
110
115
116#if defined(I2C0_SCL) && !defined(I2C0_SCL_PULLUP)
118#define I2C0_SCL_PULLUP true
119#endif
120
121#if defined(I2C0_SDA) && !defined(I2C0_SDA_PULLUP)
123#define I2C0_SDA_PULLUP true
124#endif
125
126#if (SOC_I2C_NUM > 1) && defined(I2C1_SCL) && !defined(I2C1_SCL_PULLUP)
128#define I2C1_SCL_PULLUP true
129#endif
130
131#if (SOC_I2C_NUM > 1) && defined(I2C1_SDA) && !defined(I2C1_SDA_PULLUP)
133#define I2C1_SDA_PULLUP true
134#endif
135
139static const i2c_conf_t i2c_config[] = {
140#if defined(I2C0_SCL) && defined(I2C0_SDA) && defined(I2C0_SPEED)
141 {
142 .module = PERIPH_I2C0_MODULE,
143 .speed = I2C0_SPEED,
144 .scl = I2C0_SCL,
145 .sda = I2C0_SDA,
146 .scl_pullup = I2C0_SCL_PULLUP,
147 .sda_pullup = I2C0_SCL_PULLUP,
148 },
149#endif
150#if (SOC_I2C_NUM > 1) && defined(I2C1_SCL) && defined(I2C1_SDA) && defined(I2C1_SPEED)
151 {
152 .module = PERIPH_I2C1_MODULE,
153 .speed = I2C1_SPEED,
154 .scl = I2C1_SCL,
155 .sda = I2C1_SDA,
156 .scl_pullup = I2C1_SCL_PULLUP,
157 .sda_pullup = I2C1_SCL_PULLUP,
158 },
159#endif
160};
161
170#define I2C_NUMOF ARRAY_SIZE(i2c_config)
171
173
178
182#ifdef PWM0_GPIOS
183static const gpio_t pwm0_gpios[] = PWM0_GPIOS;
184#endif
185
189#ifdef PWM1_GPIOS
190static const gpio_t pwm1_gpios[] = PWM1_GPIOS;
191#endif
192
196#ifdef PWM2_GPIOS
197static const gpio_t pwm2_gpios[] = PWM2_GPIOS;
198#endif
199
203#ifdef PWM3_GPIOS
204static const gpio_t pwm3_gpios[] = PWM3_GPIOS;
205#endif
206
210static const pwm_config_t pwm_config[] =
211{
212#ifdef PWM0_GPIOS
213 {
214 .module = PERIPH_LEDC_MODULE,
215 .group = LEDC_LOW_SPEED_MODE,
216 .timer = LEDC_TIMER_0,
217 .ch_numof = ARRAY_SIZE(pwm0_gpios),
218 .gpios = pwm0_gpios,
219 },
220#endif
221#ifdef PWM1_GPIOS
222 {
223 .module = PERIPH_LEDC_MODULE,
224#ifdef SOC_LEDC_SUPPORT_HS_MODE
225 .group = LEDC_HIGH_SPEED_MODE,
226#else
227 .group = LEDC_LOW_SPEED_MODE,
228#endif
229 .timer = LEDC_TIMER_1,
230 .ch_numof = ARRAY_SIZE(pwm1_gpios),
231 .gpios = pwm1_gpios,
232 },
233#endif
234#ifdef PWM2_GPIOS
235 {
236 .module = PERIPH_LEDC_MODULE,
237 .group = LEDC_LOW_SPEED_MODE,
238 .timer = LEDC_TIMER_2,
239 .ch_numof = ARRAY_SIZE(pwm2_gpios),
240 .gpios = pwm2_gpios,
241 },
242#endif
243#ifdef PWM3_GPIOS
244 {
245 .module = PERIPH_LEDC_MODULE,
246#ifdef SOC_LEDC_SUPPORT_HS_MODE
247 .group = LEDC_HIGH_SPEED_MODE,
248#else
249 .group = LEDC_LOW_SPEED_MODE,
250#endif
251 .timer = LEDC_TIMER_3,
252 .ch_numof = ARRAY_SIZE(pwm3_gpios),
253 .gpios = pwm3_gpios,
254 },
255#endif
256};
257
265#define PWM_NUMOF ARRAY_SIZE(pwm_config)
266
268
273
285#ifndef HAVE_RMT_CHANNEL_CONFIG
287#ifdef WS281X_PARAM_PIN
288 { 0, WS281X_PARAM_PIN },
289#else
290 /* default for boards that don't define WS281X_PARAM_PIN */
291 { 0, GPIO0 },
292#endif
293};
294#endif
295
299#define RMT_CH_NUMOF ARRAY_SIZE(rmt_channel_config)
300
302
307
311static const spi_conf_t spi_config[] = {
312#if defined(SPI0_CTRL)
313 {
314 .ctrl = SPI0_CTRL,
315 .sck = SPI0_SCK,
316 .mosi = SPI0_MOSI,
317 .miso = SPI0_MISO,
318 .cs = SPI0_CS0,
319 },
320#endif
321#if defined(SPI1_CTRL) && (SOC_SPI_PERIPH_NUM > 2)
322 {
323 .ctrl = SPI1_CTRL,
324 .sck = SPI1_SCK,
325 .mosi = SPI1_MOSI,
326 .miso = SPI1_MISO,
327 .cs = SPI1_CS0,
328 },
329#endif
330};
331
340#define SPI_NUMOF ARRAY_SIZE(spi_config)
341
342#if IS_USED(MODULE_PERIPH_SPI)
343static_assert(SPI_NUMOF != 0, "No SPI devices defined");
344#endif
346
351
355static const uart_conf_t uart_config[] = {
356 {
357 .txd = UART0_TXD,
358 .rxd = UART0_RXD,
359 },
360#if (SOC_UART_NUM > 1) && defined(UART1_TXD) && defined(UART1_RXD)
361 {
362 .txd = UART1_TXD,
363 .rxd = UART1_RXD,
364 },
365#endif
366#if (SOC_UART_NUM > 2) && defined(UART2_TXD) && defined(UART2_RXD)
367 {
368 .txd = UART2_TXD,
369 .rxd = UART2_RXD,
370 },
371#endif
372};
373
382#define UART_NUMOF ARRAY_SIZE(uart_config)
384
385#ifdef SOC_USB_OTG_SUPPORTED
390
391#include "usbdev_esp32.h"
392
397 {
398 .periph = USB_OTG_FS_PERIPH_BASE,
399 .type = DWC2_USB_OTG_FS,
401 }
402};
403
407#define USBDEV_NUMOF ARRAY_SIZE(dwc2_usb_otg_fshs_config)
408
410#endif /* SOC_USB_OTG_SUPPORTED */
411
412#ifdef __cplusplus
413} /* end extern "C" */
414#endif
415
#define WS281X_PARAM_PIN
GPIO pin connected to the data pin of the first LED.
Definition board.h:71
#define I2C0_SPEED
I2C bus speed of I2C_DEV(0)
Definition periph_conf.h:77
#define SPI0_MOSI
Routed vio the GPIO matrix to FSPI MOSI signal.
#define UART0_RXD
direct I/O pin for UART_DEV(0) RxD, can't be changed
#define SPI0_CTRL
FSPI is used as SPI_DEV(0)
#define SPI0_CS0
Routed vio the GPIO matrix to FSPI CS0 signal.
#define I2C0_SCL
SCL signal of I2C_DEV(0)
Definition periph_conf.h:81
#define PWM0_GPIOS
Declaration of the channels for device PWM_DEV(0), at maximum eight channels (PWM_CH_NUMOF_MAX).
#define SPI0_SCK
Routed vio the GPIO matrix to FSPI CLK signal.
#define SPI0_MISO
Routed vio the GPIO matrix to FSPI MISO signal.
#define ADC_GPIOS
Declaration of GPIOs that can be used as ADC channels.
Definition periph_conf.h:58
#define PWM1_GPIOS
Declaration of the channels for device PWM_DEV(1), at maximum eight channels (PWM_CH_NUMOF_MAX).
#define UART0_TXD
direct I/O pin for UART_DEV(0) TxD, can't be changed
#define I2C0_SDA
SDA signal of I2C_DEV(0)
Definition periph_conf.h:85
#define SPI1_MOSI
HSPI MOSI.
#define SPI1_SCK
HSPI SCK.
#define SPI1_MISO
HSPI MISO.
#define SPI1_CS0
HSPI CS0.
#define SPI1_CTRL
HSPI is used as SPI_DEV(1)
#define ARRAY_SIZE(a)
Calculate the number of elements in a static array.
Definition container.h:82
#define DAC_GPIOS
Declaration of GPIOs that can be used as DAC channels.
static const gpio_t dac_channels[]
Static array with declared DAC channels.
static const rmt_channel_config_t rmt_channel_config[]
RMT channel configuration.
#define UART1_TXD
TxD pin of UART_DEV(1)
#define UART1_RXD
RxD pin of UART_DEV(1)
static const dwc2_usb_otg_fshs_config_t dwc2_usb_otg_fshs_config[]
Common USB OTG FS configuration.
#define SPI_NUMOF
Amount of SPI devices.
Common macros and compiler attributes/pragmas configuration.
Common declarations of ESP32 periphery for all ESP32 boards.
Common peripheral configurations for ESP32-C3 boards.
Common peripheral configurations for ESP32-C6 boards.
Common peripheral configurations for ESP32-H2 boards.
Common peripheral configurations for ESP32-S2 boards.
Common peripheral configurations for ESP32-S3 boards.
I2C configuration structure.
Definition periph_cpu.h:295
PWM configuration structure type.
Definition periph_cpu.h:573
RMT channel configuration.
Definition periph_cpu.h:613
SPI device configuration.
Definition periph_cpu.h:333
UART device configuration.
Definition periph_cpu.h:214
@ DWC2_USB_OTG_PHY_BUILTIN
on-chip FS PHY
@ DWC2_USB_OTG_FS
Full speed peripheral.