esp_metadata_generated/
_generated_esp32s3.rs

1// Do NOT edit this file directly. Make your changes to esp-metadata,
2// then run `cargo xtask update-metadata`.
3
4/// The name of the chip as `&str`
5///
6/// # Example
7///
8/// ```rust, no_run
9/// use esp_hal::chip;
10/// let chip_name = chip!();
11#[doc = concat!("assert_eq!(chip_name, ", chip!(), ")")]
12/// ```
13#[macro_export]
14#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
15macro_rules! chip {
16    () => {
17        "esp32s3"
18    };
19}
20/// The properties of this chip and its drivers.
21#[macro_export]
22#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
23macro_rules! property {
24    ("chip") => {
25        "esp32s3"
26    };
27    ("arch") => {
28        "xtensa"
29    };
30    ("cores") => {
31        2
32    };
33    ("cores", str) => {
34        stringify!(2)
35    };
36    ("trm") => {
37        "https://www.espressif.com/sites/default/files/documentation/esp32-s3_technical_reference_manual_en.pdf"
38    };
39    ("assist_debug.has_sp_monitor") => {
40        false
41    };
42    ("assist_debug.has_region_monitor") => {
43        true
44    };
45    ("gpio.has_bank_1") => {
46        true
47    };
48    ("gpio.gpio_function") => {
49        1
50    };
51    ("gpio.gpio_function", str) => {
52        stringify!(1)
53    };
54    ("gpio.constant_0_input") => {
55        60
56    };
57    ("gpio.constant_0_input", str) => {
58        stringify!(60)
59    };
60    ("gpio.constant_1_input") => {
61        56
62    };
63    ("gpio.constant_1_input", str) => {
64        stringify!(56)
65    };
66    ("gpio.remap_iomux_pin_registers") => {
67        false
68    };
69    ("gpio.func_in_sel_offset") => {
70        0
71    };
72    ("gpio.func_in_sel_offset", str) => {
73        stringify!(0)
74    };
75    ("gpio.input_signal_max") => {
76        255
77    };
78    ("gpio.input_signal_max", str) => {
79        stringify!(255)
80    };
81    ("gpio.output_signal_max") => {
82        256
83    };
84    ("gpio.output_signal_max", str) => {
85        stringify!(256)
86    };
87    ("i2c_master.has_fsm_timeouts") => {
88        true
89    };
90    ("i2c_master.has_hw_bus_clear") => {
91        true
92    };
93    ("i2c_master.has_bus_timeout_enable") => {
94        true
95    };
96    ("i2c_master.separate_filter_config_registers") => {
97        false
98    };
99    ("i2c_master.can_estimate_nack_reason") => {
100        true
101    };
102    ("i2c_master.has_conf_update") => {
103        true
104    };
105    ("i2c_master.has_reliable_fsm_reset") => {
106        false
107    };
108    ("i2c_master.has_arbitration_en") => {
109        true
110    };
111    ("i2c_master.has_tx_fifo_watermark") => {
112        true
113    };
114    ("i2c_master.bus_timeout_is_exponential") => {
115        true
116    };
117    ("i2c_master.max_bus_timeout") => {
118        31
119    };
120    ("i2c_master.max_bus_timeout", str) => {
121        stringify!(31)
122    };
123    ("i2c_master.ll_intr_mask") => {
124        262143
125    };
126    ("i2c_master.ll_intr_mask", str) => {
127        stringify!(262143)
128    };
129    ("i2c_master.fifo_size") => {
130        32
131    };
132    ("i2c_master.fifo_size", str) => {
133        stringify!(32)
134    };
135    ("interrupts.status_registers") => {
136        4
137    };
138    ("interrupts.status_registers", str) => {
139        stringify!(4)
140    };
141    ("rmt.ram_start") => {
142        1610704896
143    };
144    ("rmt.ram_start", str) => {
145        stringify!(1610704896)
146    };
147    ("rmt.channel_ram_size") => {
148        48
149    };
150    ("rmt.channel_ram_size", str) => {
151        stringify!(48)
152    };
153    ("spi_master.has_octal") => {
154        true
155    };
156    ("timergroup.timg_has_timer1") => {
157        true
158    };
159    ("wifi.has_wifi6") => {
160        false
161    };
162}
163/// Macro to get the address range of the given memory region.
164#[macro_export]
165#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
166macro_rules! memory_range {
167    ("DRAM") => {
168        1070104576..1070596096
169    };
170}
171/// This macro can be used to generate code for each peripheral instance of the I2C master driver.
172///
173/// For an explanation on the general syntax, as well as usage of individual/repeated
174/// matchers, refer to [the crate-level documentation][crate#for_each-macros].
175///
176/// This macro has one option for its "Individual matcher" case:
177///
178/// Syntax: `($instance:ident, $sys:ident, $scl:ident, $sda:ident)`
179///
180/// Macro fragments:
181///
182/// - `$instance`: the name of the I2C instance
183/// - `$sys`: the name of the instance as it is in the `esp_hal::system::Peripheral` enum.
184/// - `$scl`, `$sda`: peripheral signal names.
185///
186/// Example data: `(I2C0, I2cExt0, I2CEXT0_SCL, I2CEXT0_SDA)`
187#[macro_export]
188#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
189macro_rules! for_each_i2c_master {
190    ($($pattern:tt => $code:tt;)*) => {
191        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
192        _for_each_inner!((I2C0, I2cExt0, I2CEXT0_SCL, I2CEXT0_SDA));
193        _for_each_inner!((I2C1, I2cExt1, I2CEXT1_SCL, I2CEXT1_SDA));
194        _for_each_inner!((all(I2C0, I2cExt0, I2CEXT0_SCL, I2CEXT0_SDA), (I2C1, I2cExt1,
195        I2CEXT1_SCL, I2CEXT1_SDA)));
196    };
197}
198/// This macro can be used to generate code for each peripheral instance of the UART driver.
199///
200/// For an explanation on the general syntax, as well as usage of individual/repeated
201/// matchers, refer to [the crate-level documentation][crate#for_each-macros].
202///
203/// This macro has one option for its "Individual matcher" case:
204///
205/// Syntax: `($instance:ident, $sys:ident, $rx:ident, $tx:ident, $cts:ident, $rts:ident)`
206///
207/// Macro fragments:
208///
209/// - `$instance`: the name of the UART instance
210/// - `$sys`: the name of the instance as it is in the `esp_hal::system::Peripheral` enum.
211/// - `$rx`, `$tx`, `$cts`, `$rts`: signal names.
212///
213/// Example data: `(UART0, Uart0, U0RXD, U0TXD, U0CTS, U0RTS)`
214#[macro_export]
215#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
216macro_rules! for_each_uart {
217    ($($pattern:tt => $code:tt;)*) => {
218        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
219        _for_each_inner!((UART0, Uart0, U0RXD, U0TXD, U0CTS, U0RTS));
220        _for_each_inner!((UART1, Uart1, U1RXD, U1TXD, U1CTS, U1RTS));
221        _for_each_inner!((UART2, Uart2, U2RXD, U2TXD, U2CTS, U2RTS));
222        _for_each_inner!((all(UART0, Uart0, U0RXD, U0TXD, U0CTS, U0RTS), (UART1, Uart1,
223        U1RXD, U1TXD, U1CTS, U1RTS), (UART2, Uart2, U2RXD, U2TXD, U2CTS, U2RTS)));
224    };
225}
226/// This macro can be used to generate code for each peripheral instance of the SPI master driver.
227///
228/// For an explanation on the general syntax, as well as usage of individual/repeated
229/// matchers, refer to [the crate-level documentation][crate#for_each-macros].
230///
231/// This macro has one option for its "Individual matcher" case:
232///
233/// Syntax: `($instance:ident, $sys:ident, $sclk:ident, [$($cs:ident),*] [$($sio:ident),*
234/// $($is_qspi:iteral)?])`
235///
236/// Macro fragments:
237///
238/// - `$instance`: the name of the SPI instance
239/// - `$sys`: the name of the instance as it is in the `esp_hal::system::Peripheral` enum.
240/// - `$cs`, `$sio`: chip select and SIO signal names.
241/// - `$is_qspi`: a `true` literal present if the SPI instance supports QSPI.
242///
243/// Example data:
244/// - `(SPI2, Spi2, FSPICLK [FSPICS0, FSPICS1, FSPICS2, FSPICS3, FSPICS4, FSPICS5] [FSPID, FSPIQ,
245///   FSPIWP, FSPIHD, FSPIIO4, FSPIIO5, FSPIIO6, FSPIIO7], true)`
246/// - `(SPI3, Spi3, SPI3_CLK [SPI3_CS0, SPI3_CS1, SPI3_CS2] [SPI3_D, SPI3_Q])`
247#[macro_export]
248#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
249macro_rules! for_each_spi_master {
250    ($($pattern:tt => $code:tt;)*) => {
251        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
252        _for_each_inner!((SPI2, Spi2, FSPICLK[FSPICS0, FSPICS1, FSPICS2, FSPICS3,
253        FSPICS4, FSPICS5] [FSPID, FSPIQ, FSPIWP, FSPIHD, FSPIIO4, FSPIIO5, FSPIIO6,
254        FSPIIO7], true)); _for_each_inner!((SPI3, Spi3, SPI3_CLK[SPI3_CS0, SPI3_CS1,
255        SPI3_CS2] [SPI3_D, SPI3_Q, SPI3_WP, SPI3_HD], true)); _for_each_inner!((all(SPI2,
256        Spi2, FSPICLK[FSPICS0, FSPICS1, FSPICS2, FSPICS3, FSPICS4, FSPICS5] [FSPID,
257        FSPIQ, FSPIWP, FSPIHD, FSPIIO4, FSPIIO5, FSPIIO6, FSPIIO7], true), (SPI3, Spi3,
258        SPI3_CLK[SPI3_CS0, SPI3_CS1, SPI3_CS2] [SPI3_D, SPI3_Q, SPI3_WP, SPI3_HD],
259        true)));
260    };
261}
262/// This macro can be used to generate code for each peripheral instance of the SPI slave driver.
263///
264/// For an explanation on the general syntax, as well as usage of individual/repeated
265/// matchers, refer to [the crate-level documentation][crate#for_each-macros].
266///
267/// This macro has one option for its "Individual matcher" case:
268///
269/// Syntax: `($instance:ident, $sys:ident, $sclk:ident, $mosi:ident, $miso:ident, $cs:ident)`
270///
271/// Macro fragments:
272///
273/// - `$instance`: the name of the I2C instance
274/// - `$sys`: the name of the instance as it is in the `esp_hal::system::Peripheral` enum.
275/// - `$mosi`, `$miso`, `$cs`: signal names.
276///
277/// Example data: `(SPI2, Spi2, FSPICLK, FSPID, FSPIQ, FSPICS0)`
278#[macro_export]
279#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
280macro_rules! for_each_spi_slave {
281    ($($pattern:tt => $code:tt;)*) => {
282        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
283        _for_each_inner!((SPI2, Spi2, FSPICLK, FSPID, FSPIQ, FSPICS0));
284        _for_each_inner!((SPI3, Spi3, SPI3_CLK, SPI3_D, SPI3_Q, SPI3_CS0));
285        _for_each_inner!((all(SPI2, Spi2, FSPICLK, FSPID, FSPIQ, FSPICS0), (SPI3, Spi3,
286        SPI3_CLK, SPI3_D, SPI3_Q, SPI3_CS0)));
287    };
288}
289#[macro_export]
290#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
291macro_rules! for_each_peripheral {
292    ($($pattern:tt => $code:tt;)*) => {
293        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
294        _for_each_inner!((GPIO0 <= virtual())); _for_each_inner!((GPIO1 <= virtual()));
295        _for_each_inner!((GPIO2 <= virtual())); _for_each_inner!((GPIO3 <= virtual()));
296        _for_each_inner!((GPIO4 <= virtual())); _for_each_inner!((GPIO5 <= virtual()));
297        _for_each_inner!((GPIO6 <= virtual())); _for_each_inner!((GPIO7 <= virtual()));
298        _for_each_inner!((GPIO8 <= virtual())); _for_each_inner!((GPIO9 <= virtual()));
299        _for_each_inner!((GPIO10 <= virtual())); _for_each_inner!((GPIO11 <= virtual()));
300        _for_each_inner!((GPIO12 <= virtual())); _for_each_inner!((GPIO13 <= virtual()));
301        _for_each_inner!((GPIO14 <= virtual())); _for_each_inner!((GPIO15 <= virtual()));
302        _for_each_inner!((GPIO16 <= virtual())); _for_each_inner!((GPIO17 <= virtual()));
303        _for_each_inner!((GPIO18 <= virtual())); _for_each_inner!((GPIO19 <= virtual()));
304        _for_each_inner!((GPIO20 <= virtual())); _for_each_inner!((GPIO21 <= virtual()));
305        _for_each_inner!((GPIO26 <= virtual())); _for_each_inner!((GPIO27 <= virtual()));
306        _for_each_inner!((GPIO28 <= virtual())); _for_each_inner!((GPIO29 <= virtual()));
307        _for_each_inner!((GPIO30 <= virtual())); _for_each_inner!((GPIO31 <= virtual()));
308        _for_each_inner!((GPIO32 <= virtual())); _for_each_inner!((GPIO33 <= virtual()));
309        _for_each_inner!((GPIO34 <= virtual())); _for_each_inner!((GPIO35 <= virtual()));
310        _for_each_inner!((GPIO36 <= virtual())); _for_each_inner!((GPIO37 <= virtual()));
311        _for_each_inner!((GPIO38 <= virtual())); _for_each_inner!((GPIO39 <= virtual()));
312        _for_each_inner!((GPIO40 <= virtual())); _for_each_inner!((GPIO41 <= virtual()));
313        _for_each_inner!((GPIO42 <= virtual())); _for_each_inner!((GPIO43 <= virtual()));
314        _for_each_inner!((GPIO44 <= virtual())); _for_each_inner!((GPIO45 <= virtual()));
315        _for_each_inner!((GPIO46 <= virtual())); _for_each_inner!((GPIO47 <= virtual()));
316        _for_each_inner!((GPIO48 <= virtual())); _for_each_inner!((AES <= AES()
317        (unstable))); _for_each_inner!((APB_CTRL <= APB_CTRL() (unstable)));
318        _for_each_inner!((APB_SARADC <= APB_SARADC() (unstable)));
319        _for_each_inner!((ASSIST_DEBUG <= ASSIST_DEBUG() (unstable)));
320        _for_each_inner!((DMA <= DMA() (unstable))); _for_each_inner!((DS <= DS()
321        (unstable))); _for_each_inner!((EFUSE <= EFUSE() (unstable)));
322        _for_each_inner!((EXTMEM <= EXTMEM() (unstable))); _for_each_inner!((GPIO <=
323        GPIO() (unstable))); _for_each_inner!((GPIO_SD <= GPIO_SD() (unstable)));
324        _for_each_inner!((HMAC <= HMAC() (unstable))); _for_each_inner!((I2C0 <=
325        I2C0(I2C_EXT0 : { bind_peri_interrupt, enable_peri_interrupt,
326        disable_peri_interrupt }))); _for_each_inner!((I2C1 <= I2C1(I2C_EXT1 : {
327        bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })));
328        _for_each_inner!((I2S0 <= I2S0(I2S0 : { bind_peri_interrupt,
329        enable_peri_interrupt, disable_peri_interrupt }) (unstable)));
330        _for_each_inner!((I2S1 <= I2S1(I2S1 : { bind_peri_interrupt,
331        enable_peri_interrupt, disable_peri_interrupt }) (unstable)));
332        _for_each_inner!((INTERRUPT_CORE0 <= INTERRUPT_CORE0() (unstable)));
333        _for_each_inner!((INTERRUPT_CORE1 <= INTERRUPT_CORE1() (unstable)));
334        _for_each_inner!((IO_MUX <= IO_MUX() (unstable))); _for_each_inner!((LCD_CAM <=
335        LCD_CAM() (unstable))); _for_each_inner!((LEDC <= LEDC() (unstable)));
336        _for_each_inner!((LPWR <= RTC_CNTL() (unstable))); _for_each_inner!((MCPWM0 <=
337        MCPWM0() (unstable))); _for_each_inner!((MCPWM1 <= MCPWM1() (unstable)));
338        _for_each_inner!((PCNT <= PCNT() (unstable))); _for_each_inner!((PERI_BACKUP <=
339        PERI_BACKUP() (unstable))); _for_each_inner!((RMT <= RMT() (unstable)));
340        _for_each_inner!((RNG <= RNG() (unstable))); _for_each_inner!((RSA <= RSA()
341        (unstable))); _for_each_inner!((RTC_CNTL <= RTC_CNTL() (unstable)));
342        _for_each_inner!((RTC_I2C <= RTC_I2C() (unstable))); _for_each_inner!((RTC_IO <=
343        RTC_IO() (unstable))); _for_each_inner!((SDHOST <= SDHOST() (unstable)));
344        _for_each_inner!((SENS <= SENS() (unstable))); _for_each_inner!((SENSITIVE <=
345        SENSITIVE() (unstable))); _for_each_inner!((SHA <= SHA() (unstable)));
346        _for_each_inner!((SPI0 <= SPI0() (unstable))); _for_each_inner!((SPI1 <= SPI1()
347        (unstable))); _for_each_inner!((SPI2 <= SPI2(SPI2 : { bind_peri_interrupt,
348        enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((SPI3 <=
349        SPI3(SPI3 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
350        }))); _for_each_inner!((SYSTEM <= SYSTEM() (unstable)));
351        _for_each_inner!((SYSTIMER <= SYSTIMER() (unstable))); _for_each_inner!((TIMG0 <=
352        TIMG0() (unstable))); _for_each_inner!((TIMG1 <= TIMG1() (unstable)));
353        _for_each_inner!((TWAI0 <= TWAI0() (unstable))); _for_each_inner!((UART0 <=
354        UART0(UART0 : { bind_peri_interrupt, enable_peri_interrupt,
355        disable_peri_interrupt }))); _for_each_inner!((UART1 <= UART1(UART1 : {
356        bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })));
357        _for_each_inner!((UART2 <= UART2(UART2 : { bind_peri_interrupt,
358        enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((UHCI0 <=
359        UHCI0() (unstable))); _for_each_inner!((UHCI1 <= UHCI1() (unstable)));
360        _for_each_inner!((USB0 <= USB0() (unstable))); _for_each_inner!((USB_DEVICE <=
361        USB_DEVICE(USB_DEVICE : { bind_peri_interrupt, enable_peri_interrupt,
362        disable_peri_interrupt }) (unstable))); _for_each_inner!((USB_WRAP <= USB_WRAP()
363        (unstable))); _for_each_inner!((WCL <= WCL() (unstable)));
364        _for_each_inner!((XTS_AES <= XTS_AES() (unstable))); _for_each_inner!((DMA_CH0 <=
365        virtual() (unstable))); _for_each_inner!((DMA_CH1 <= virtual() (unstable)));
366        _for_each_inner!((DMA_CH2 <= virtual() (unstable))); _for_each_inner!((DMA_CH3 <=
367        virtual() (unstable))); _for_each_inner!((DMA_CH4 <= virtual() (unstable)));
368        _for_each_inner!((ADC1 <= virtual() (unstable))); _for_each_inner!((ADC2 <=
369        virtual() (unstable))); _for_each_inner!((BT <= virtual() (unstable)));
370        _for_each_inner!((CPU_CTRL <= virtual() (unstable))); _for_each_inner!((PSRAM <=
371        virtual() (unstable))); _for_each_inner!((SW_INTERRUPT <= virtual() (unstable)));
372        _for_each_inner!((ULP_RISCV_CORE <= virtual() (unstable)));
373        _for_each_inner!((WIFI <= virtual() (unstable))); _for_each_inner!((all(GPIO0 <=
374        virtual()), (GPIO1 <= virtual()), (GPIO2 <= virtual()), (GPIO3 <= virtual()),
375        (GPIO4 <= virtual()), (GPIO5 <= virtual()), (GPIO6 <= virtual()), (GPIO7 <=
376        virtual()), (GPIO8 <= virtual()), (GPIO9 <= virtual()), (GPIO10 <= virtual()),
377        (GPIO11 <= virtual()), (GPIO12 <= virtual()), (GPIO13 <= virtual()), (GPIO14 <=
378        virtual()), (GPIO15 <= virtual()), (GPIO16 <= virtual()), (GPIO17 <= virtual()),
379        (GPIO18 <= virtual()), (GPIO19 <= virtual()), (GPIO20 <= virtual()), (GPIO21 <=
380        virtual()), (GPIO26 <= virtual()), (GPIO27 <= virtual()), (GPIO28 <= virtual()),
381        (GPIO29 <= virtual()), (GPIO30 <= virtual()), (GPIO31 <= virtual()), (GPIO32 <=
382        virtual()), (GPIO33 <= virtual()), (GPIO34 <= virtual()), (GPIO35 <= virtual()),
383        (GPIO36 <= virtual()), (GPIO37 <= virtual()), (GPIO38 <= virtual()), (GPIO39 <=
384        virtual()), (GPIO40 <= virtual()), (GPIO41 <= virtual()), (GPIO42 <= virtual()),
385        (GPIO43 <= virtual()), (GPIO44 <= virtual()), (GPIO45 <= virtual()), (GPIO46 <=
386        virtual()), (GPIO47 <= virtual()), (GPIO48 <= virtual()), (AES <= AES()
387        (unstable)), (APB_CTRL <= APB_CTRL() (unstable)), (APB_SARADC <= APB_SARADC()
388        (unstable)), (ASSIST_DEBUG <= ASSIST_DEBUG() (unstable)), (DMA <= DMA()
389        (unstable)), (DS <= DS() (unstable)), (EFUSE <= EFUSE() (unstable)), (EXTMEM <=
390        EXTMEM() (unstable)), (GPIO <= GPIO() (unstable)), (GPIO_SD <= GPIO_SD()
391        (unstable)), (HMAC <= HMAC() (unstable)), (I2C0 <= I2C0(I2C_EXT0 : {
392        bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (I2C1 <=
393        I2C1(I2C_EXT1 : { bind_peri_interrupt, enable_peri_interrupt,
394        disable_peri_interrupt })), (I2S0 <= I2S0(I2S0 : { bind_peri_interrupt,
395        enable_peri_interrupt, disable_peri_interrupt }) (unstable)), (I2S1 <= I2S1(I2S1
396        : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })
397        (unstable)), (INTERRUPT_CORE0 <= INTERRUPT_CORE0() (unstable)), (INTERRUPT_CORE1
398        <= INTERRUPT_CORE1() (unstable)), (IO_MUX <= IO_MUX() (unstable)), (LCD_CAM <=
399        LCD_CAM() (unstable)), (LEDC <= LEDC() (unstable)), (LPWR <= RTC_CNTL()
400        (unstable)), (MCPWM0 <= MCPWM0() (unstable)), (MCPWM1 <= MCPWM1() (unstable)),
401        (PCNT <= PCNT() (unstable)), (PERI_BACKUP <= PERI_BACKUP() (unstable)), (RMT <=
402        RMT() (unstable)), (RNG <= RNG() (unstable)), (RSA <= RSA() (unstable)),
403        (RTC_CNTL <= RTC_CNTL() (unstable)), (RTC_I2C <= RTC_I2C() (unstable)), (RTC_IO
404        <= RTC_IO() (unstable)), (SDHOST <= SDHOST() (unstable)), (SENS <= SENS()
405        (unstable)), (SENSITIVE <= SENSITIVE() (unstable)), (SHA <= SHA() (unstable)),
406        (SPI0 <= SPI0() (unstable)), (SPI1 <= SPI1() (unstable)), (SPI2 <= SPI2(SPI2 : {
407        bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (SPI3 <=
408        SPI3(SPI3 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
409        })), (SYSTEM <= SYSTEM() (unstable)), (SYSTIMER <= SYSTIMER() (unstable)), (TIMG0
410        <= TIMG0() (unstable)), (TIMG1 <= TIMG1() (unstable)), (TWAI0 <= TWAI0()
411        (unstable)), (UART0 <= UART0(UART0 : { bind_peri_interrupt,
412        enable_peri_interrupt, disable_peri_interrupt })), (UART1 <= UART1(UART1 : {
413        bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (UART2 <=
414        UART2(UART2 : { bind_peri_interrupt, enable_peri_interrupt,
415        disable_peri_interrupt })), (UHCI0 <= UHCI0() (unstable)), (UHCI1 <= UHCI1()
416        (unstable)), (USB0 <= USB0() (unstable)), (USB_DEVICE <= USB_DEVICE(USB_DEVICE :
417        { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })
418        (unstable)), (USB_WRAP <= USB_WRAP() (unstable)), (WCL <= WCL() (unstable)),
419        (XTS_AES <= XTS_AES() (unstable)), (DMA_CH0 <= virtual() (unstable)), (DMA_CH1 <=
420        virtual() (unstable)), (DMA_CH2 <= virtual() (unstable)), (DMA_CH3 <= virtual()
421        (unstable)), (DMA_CH4 <= virtual() (unstable)), (ADC1 <= virtual() (unstable)),
422        (ADC2 <= virtual() (unstable)), (BT <= virtual() (unstable)), (CPU_CTRL <=
423        virtual() (unstable)), (PSRAM <= virtual() (unstable)), (SW_INTERRUPT <=
424        virtual() (unstable)), (ULP_RISCV_CORE <= virtual() (unstable)), (WIFI <=
425        virtual() (unstable))));
426    };
427}
428/// This macro can be used to generate code for each `GPIOn` instance.
429///
430/// For an explanation on the general syntax, as well as usage of individual/repeated
431/// matchers, refer to [the crate-level documentation][crate#for_each-macros].
432///
433/// This macro has one option for its "Individual matcher" case:
434///
435/// Syntax: `($n:literal, $gpio:ident ($($digital_input_function:ident =>
436/// $digital_input_signal:ident)*) ($($digital_output_function:ident =>
437/// $digital_output_signal:ident)*) ($([$pin_attribute:ident])*))`
438///
439/// Macro fragments:
440///
441/// - `$n`: the number of the GPIO. For `GPIO0`, `$n` is 0.
442/// - `$gpio`: the name of the GPIO.
443/// - `$digital_input_function`: the number of the digital function, as an identifier (i.e. for
444///   function 0 this is `_0`).
445/// - `$digital_input_function`: the name of the digital function, as an identifier.
446/// - `$digital_output_function`: the number of the digital function, as an identifier (i.e. for
447///   function 0 this is `_0`).
448/// - `$digital_output_function`: the name of the digital function, as an identifier.
449/// - `$pin_attribute`: `Input` and/or `Output`, marks the possible directions of the GPIO.
450///   Bracketed so that they can also be matched as optional fragments. Order is always Input first.
451///
452/// Example data: `(0, GPIO0 (_5 => EMAC_TX_CLK) (_1 => CLK_OUT1 _5 => EMAC_TX_CLK) ([Input]
453/// [Output]))`
454#[macro_export]
455#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
456macro_rules! for_each_gpio {
457    ($($pattern:tt => $code:tt;)*) => {
458        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
459        _for_each_inner!((0, GPIO0() () ([Input] [Output]))); _for_each_inner!((1,
460        GPIO1() () ([Input] [Output]))); _for_each_inner!((2, GPIO2() () ([Input]
461        [Output]))); _for_each_inner!((3, GPIO3() () ([Input] [Output])));
462        _for_each_inner!((4, GPIO4() () ([Input] [Output]))); _for_each_inner!((5,
463        GPIO5() () ([Input] [Output]))); _for_each_inner!((6, GPIO6() () ([Input]
464        [Output]))); _for_each_inner!((7, GPIO7() () ([Input] [Output])));
465        _for_each_inner!((8, GPIO8() (_3 => SUBSPICS1) ([Input] [Output])));
466        _for_each_inner!((9, GPIO9(_3 => SUBSPIHD _4 => FSPIHD) (_3 => SUBSPIHD _4 =>
467        FSPIHD) ([Input] [Output]))); _for_each_inner!((10, GPIO10(_2 => FSPIIO4 _4 =>
468        FSPICS0) (_2 => FSPIIO4 _3 => SUBSPICS0 _4 => FSPICS0) ([Input] [Output])));
469        _for_each_inner!((11, GPIO11(_2 => FSPIIO5 _3 => SUBSPID _4 => FSPID) (_2 =>
470        FSPIIO5 _3 => SUBSPID _4 => FSPID) ([Input] [Output]))); _for_each_inner!((12,
471        GPIO12(_2 => FSPIIO6 _4 => FSPICLK) (_2 => FSPIIO6 _3 => SUBSPICLK _4 => FSPICLK)
472        ([Input] [Output]))); _for_each_inner!((13, GPIO13(_2 => FSPIIO7 _3 => SUBSPIQ _4
473        => FSPIQ) (_2 => FSPIIO7 _3 => SUBSPIQ _4 => FSPIQ) ([Input] [Output])));
474        _for_each_inner!((14, GPIO14(_3 => SUBSPIWP _4 => FSPIWP) (_2 => FSPIDQS _3 =>
475        SUBSPIWP _4 => FSPIWP) ([Input] [Output]))); _for_each_inner!((15, GPIO15() (_2
476        => U0RTS) ([Input] [Output]))); _for_each_inner!((16, GPIO16(_2 => U0CTS) ()
477        ([Input] [Output]))); _for_each_inner!((17, GPIO17() (_2 => U1TXD) ([Input]
478        [Output]))); _for_each_inner!((18, GPIO18(_2 => U1RXD) (_3 => CLK_OUT3) ([Input]
479        [Output]))); _for_each_inner!((19, GPIO19() (_2 => U1RTS _3 => CLK_OUT2) ([Input]
480        [Output]))); _for_each_inner!((20, GPIO20(_2 => U1CTS) (_3 => CLK_OUT1) ([Input]
481        [Output]))); _for_each_inner!((21, GPIO21() () ([Input] [Output])));
482        _for_each_inner!((26, GPIO26() (_0 => SPICS1) ([Input] [Output])));
483        _for_each_inner!((27, GPIO27(_0 => SPIHD) (_0 => SPIHD) ([Input] [Output])));
484        _for_each_inner!((28, GPIO28(_0 => SPIWP) (_0 => SPIWP) ([Input] [Output])));
485        _for_each_inner!((29, GPIO29() (_0 => SPICS0) ([Input] [Output])));
486        _for_each_inner!((30, GPIO30() (_0 => SPICLK) ([Input] [Output])));
487        _for_each_inner!((31, GPIO31(_0 => SPIQ) (_0 => SPIQ) ([Input] [Output])));
488        _for_each_inner!((32, GPIO32(_0 => SPID) (_0 => SPID) ([Input] [Output])));
489        _for_each_inner!((33, GPIO33(_2 => FSPIHD _3 => SUBSPIHD _4 => SPIIO4) (_2 =>
490        FSPIHD _3 => SUBSPIHD _4 => SPIIO4) ([Input] [Output]))); _for_each_inner!((34,
491        GPIO34(_2 => FSPICS0 _4 => SPIIO5) (_2 => FSPICS0 _3 => SUBSPICS0 _4 => SPIIO5)
492        ([Input] [Output]))); _for_each_inner!((35, GPIO35(_2 => FSPID _3 => SUBSPID _4
493        => SPIIO6) (_2 => FSPID _3 => SUBSPID _4 => SPIIO6) ([Input] [Output])));
494        _for_each_inner!((36, GPIO36(_2 => FSPICLK _4 => SPIIO7) (_2 => FSPICLK _3 =>
495        SUBSPICLK _4 => SPIIO7) ([Input] [Output]))); _for_each_inner!((37, GPIO37(_2 =>
496        FSPIQ _3 => SUBSPIQ _4 => SPIDQS) (_2 => FSPIQ _3 => SUBSPIQ _4 => SPIDQS)
497        ([Input] [Output]))); _for_each_inner!((38, GPIO38(_2 => FSPIWP _3 => SUBSPIWP)
498        (_2 => FSPIWP _3 => SUBSPIWP) ([Input] [Output]))); _for_each_inner!((39,
499        GPIO39() (_2 => CLK_OUT3 _3 => SUBSPICS1) ([Input] [Output])));
500        _for_each_inner!((40, GPIO40() (_2 => CLK_OUT2) ([Input] [Output])));
501        _for_each_inner!((41, GPIO41() (_2 => CLK_OUT1) ([Input] [Output])));
502        _for_each_inner!((42, GPIO42() () ([Input] [Output]))); _for_each_inner!((43,
503        GPIO43() (_0 => U0TXD _2 => CLK_OUT1) ([Input] [Output]))); _for_each_inner!((44,
504        GPIO44(_0 => U0RXD) (_2 => CLK_OUT2) ([Input] [Output]))); _for_each_inner!((45,
505        GPIO45() () ([Input] [Output]))); _for_each_inner!((46, GPIO46() () ([Input]
506        [Output]))); _for_each_inner!((47, GPIO47() (_0 => SPICLK_P_DIFF _2 =>
507        SUBSPICLK_P_DIFF) ([Input] [Output]))); _for_each_inner!((48, GPIO48() (_0 =>
508        SPICLK_N_DIFF _2 => SUBSPICLK_N_DIFF) ([Input] [Output])));
509        _for_each_inner!((all(0, GPIO0() () ([Input] [Output])), (1, GPIO1() () ([Input]
510        [Output])), (2, GPIO2() () ([Input] [Output])), (3, GPIO3() () ([Input]
511        [Output])), (4, GPIO4() () ([Input] [Output])), (5, GPIO5() () ([Input]
512        [Output])), (6, GPIO6() () ([Input] [Output])), (7, GPIO7() () ([Input]
513        [Output])), (8, GPIO8() (_3 => SUBSPICS1) ([Input] [Output])), (9, GPIO9(_3 =>
514        SUBSPIHD _4 => FSPIHD) (_3 => SUBSPIHD _4 => FSPIHD) ([Input] [Output])), (10,
515        GPIO10(_2 => FSPIIO4 _4 => FSPICS0) (_2 => FSPIIO4 _3 => SUBSPICS0 _4 => FSPICS0)
516        ([Input] [Output])), (11, GPIO11(_2 => FSPIIO5 _3 => SUBSPID _4 => FSPID) (_2 =>
517        FSPIIO5 _3 => SUBSPID _4 => FSPID) ([Input] [Output])), (12, GPIO12(_2 => FSPIIO6
518        _4 => FSPICLK) (_2 => FSPIIO6 _3 => SUBSPICLK _4 => FSPICLK) ([Input] [Output])),
519        (13, GPIO13(_2 => FSPIIO7 _3 => SUBSPIQ _4 => FSPIQ) (_2 => FSPIIO7 _3 => SUBSPIQ
520        _4 => FSPIQ) ([Input] [Output])), (14, GPIO14(_3 => SUBSPIWP _4 => FSPIWP) (_2 =>
521        FSPIDQS _3 => SUBSPIWP _4 => FSPIWP) ([Input] [Output])), (15, GPIO15() (_2 =>
522        U0RTS) ([Input] [Output])), (16, GPIO16(_2 => U0CTS) () ([Input] [Output])), (17,
523        GPIO17() (_2 => U1TXD) ([Input] [Output])), (18, GPIO18(_2 => U1RXD) (_3 =>
524        CLK_OUT3) ([Input] [Output])), (19, GPIO19() (_2 => U1RTS _3 => CLK_OUT2)
525        ([Input] [Output])), (20, GPIO20(_2 => U1CTS) (_3 => CLK_OUT1) ([Input]
526        [Output])), (21, GPIO21() () ([Input] [Output])), (26, GPIO26() (_0 => SPICS1)
527        ([Input] [Output])), (27, GPIO27(_0 => SPIHD) (_0 => SPIHD) ([Input] [Output])),
528        (28, GPIO28(_0 => SPIWP) (_0 => SPIWP) ([Input] [Output])), (29, GPIO29() (_0 =>
529        SPICS0) ([Input] [Output])), (30, GPIO30() (_0 => SPICLK) ([Input] [Output])),
530        (31, GPIO31(_0 => SPIQ) (_0 => SPIQ) ([Input] [Output])), (32, GPIO32(_0 => SPID)
531        (_0 => SPID) ([Input] [Output])), (33, GPIO33(_2 => FSPIHD _3 => SUBSPIHD _4 =>
532        SPIIO4) (_2 => FSPIHD _3 => SUBSPIHD _4 => SPIIO4) ([Input] [Output])), (34,
533        GPIO34(_2 => FSPICS0 _4 => SPIIO5) (_2 => FSPICS0 _3 => SUBSPICS0 _4 => SPIIO5)
534        ([Input] [Output])), (35, GPIO35(_2 => FSPID _3 => SUBSPID _4 => SPIIO6) (_2 =>
535        FSPID _3 => SUBSPID _4 => SPIIO6) ([Input] [Output])), (36, GPIO36(_2 => FSPICLK
536        _4 => SPIIO7) (_2 => FSPICLK _3 => SUBSPICLK _4 => SPIIO7) ([Input] [Output])),
537        (37, GPIO37(_2 => FSPIQ _3 => SUBSPIQ _4 => SPIDQS) (_2 => FSPIQ _3 => SUBSPIQ _4
538        => SPIDQS) ([Input] [Output])), (38, GPIO38(_2 => FSPIWP _3 => SUBSPIWP) (_2 =>
539        FSPIWP _3 => SUBSPIWP) ([Input] [Output])), (39, GPIO39() (_2 => CLK_OUT3 _3 =>
540        SUBSPICS1) ([Input] [Output])), (40, GPIO40() (_2 => CLK_OUT2) ([Input]
541        [Output])), (41, GPIO41() (_2 => CLK_OUT1) ([Input] [Output])), (42, GPIO42() ()
542        ([Input] [Output])), (43, GPIO43() (_0 => U0TXD _2 => CLK_OUT1) ([Input]
543        [Output])), (44, GPIO44(_0 => U0RXD) (_2 => CLK_OUT2) ([Input] [Output])), (45,
544        GPIO45() () ([Input] [Output])), (46, GPIO46() () ([Input] [Output])), (47,
545        GPIO47() (_0 => SPICLK_P_DIFF _2 => SUBSPICLK_P_DIFF) ([Input] [Output])), (48,
546        GPIO48() (_0 => SPICLK_N_DIFF _2 => SUBSPICLK_N_DIFF) ([Input] [Output]))));
547    };
548}
549/// This macro can be used to generate code for each analog function of each GPIO.
550///
551/// For an explanation on the general syntax, as well as usage of individual/repeated
552/// matchers, refer to [the crate-level documentation][crate#for_each-macros].
553///
554/// This macro has two options for its "Individual matcher" case:
555///
556/// - `all`: `($signal:ident, $gpio:ident)` - simple case where you only need identifiers
557/// - `all_expanded`: `(($signal:ident, $group:ident $(, $number:literal)+), $gpio:ident)` -
558///   expanded signal case, where you need the number(s) of a signal, or the general group to which
559///   the signal belongs. For example, in case of `ADC2_CH3` the expanded form looks like
560///   `(ADC2_CH3, ADCn_CHm, 2, 3)`.
561///
562/// Macro fragments:
563///
564/// - `$signal`: the name of the signal.
565/// - `$group`: the name of the signal, with numbers replaced by placeholders. For `ADC2_CH3` this
566///   is `ADCn_CHm`.
567/// - `$number`: the numbers extracted from `$signal`.
568/// - `$gpio`: the name of the GPIO.
569///
570/// Example data:
571/// - `(ADC2_CH5, GPIO12)`
572/// - `((ADC2_CH5, ADCn_CHm, 2, 5), GPIO12)`
573///
574/// The expanded syntax is only available when the signal has at least one numbered component.
575#[macro_export]
576#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
577macro_rules! for_each_analog_function {
578    ($($pattern:tt => $code:tt;)*) => {
579        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
580        _for_each_inner!((TOUCH1, GPIO1)); _for_each_inner!((ADC1_CH0, GPIO1));
581        _for_each_inner!((TOUCH2, GPIO2)); _for_each_inner!((ADC1_CH1, GPIO2));
582        _for_each_inner!((TOUCH3, GPIO3)); _for_each_inner!((ADC1_CH2, GPIO3));
583        _for_each_inner!((TOUCH4, GPIO4)); _for_each_inner!((ADC1_CH3, GPIO4));
584        _for_each_inner!((TOUCH5, GPIO5)); _for_each_inner!((ADC1_CH4, GPIO5));
585        _for_each_inner!((TOUCH6, GPIO6)); _for_each_inner!((ADC1_CH5, GPIO6));
586        _for_each_inner!((TOUCH7, GPIO7)); _for_each_inner!((ADC1_CH6, GPIO7));
587        _for_each_inner!((TOUCH8, GPIO8)); _for_each_inner!((ADC1_CH7, GPIO8));
588        _for_each_inner!((TOUCH9, GPIO9)); _for_each_inner!((ADC1_CH8, GPIO9));
589        _for_each_inner!((TOUCH10, GPIO10)); _for_each_inner!((ADC1_CH9, GPIO10));
590        _for_each_inner!((TOUCH11, GPIO11)); _for_each_inner!((ADC2_CH0, GPIO11));
591        _for_each_inner!((TOUCH12, GPIO12)); _for_each_inner!((ADC2_CH1, GPIO12));
592        _for_each_inner!((TOUCH13, GPIO13)); _for_each_inner!((ADC2_CH2, GPIO13));
593        _for_each_inner!((TOUCH14, GPIO14)); _for_each_inner!((ADC2_CH3, GPIO14));
594        _for_each_inner!((XTAL_32K_P, GPIO15)); _for_each_inner!((ADC2_CH4, GPIO15));
595        _for_each_inner!((XTAL_32K_N, GPIO16)); _for_each_inner!((ADC2_CH5, GPIO16));
596        _for_each_inner!((ADC2_CH6, GPIO17)); _for_each_inner!((ADC2_CH7, GPIO18));
597        _for_each_inner!((USB_DM, GPIO19)); _for_each_inner!((ADC2_CH8, GPIO19));
598        _for_each_inner!((USB_DP, GPIO20)); _for_each_inner!((ADC2_CH9, GPIO20));
599        _for_each_inner!(((TOUCH1, TOUCHn, 1), GPIO1)); _for_each_inner!(((ADC1_CH0,
600        ADCn_CHm, 1, 0), GPIO1)); _for_each_inner!(((TOUCH2, TOUCHn, 2), GPIO2));
601        _for_each_inner!(((ADC1_CH1, ADCn_CHm, 1, 1), GPIO2)); _for_each_inner!(((TOUCH3,
602        TOUCHn, 3), GPIO3)); _for_each_inner!(((ADC1_CH2, ADCn_CHm, 1, 2), GPIO3));
603        _for_each_inner!(((TOUCH4, TOUCHn, 4), GPIO4)); _for_each_inner!(((ADC1_CH3,
604        ADCn_CHm, 1, 3), GPIO4)); _for_each_inner!(((TOUCH5, TOUCHn, 5), GPIO5));
605        _for_each_inner!(((ADC1_CH4, ADCn_CHm, 1, 4), GPIO5)); _for_each_inner!(((TOUCH6,
606        TOUCHn, 6), GPIO6)); _for_each_inner!(((ADC1_CH5, ADCn_CHm, 1, 5), GPIO6));
607        _for_each_inner!(((TOUCH7, TOUCHn, 7), GPIO7)); _for_each_inner!(((ADC1_CH6,
608        ADCn_CHm, 1, 6), GPIO7)); _for_each_inner!(((TOUCH8, TOUCHn, 8), GPIO8));
609        _for_each_inner!(((ADC1_CH7, ADCn_CHm, 1, 7), GPIO8)); _for_each_inner!(((TOUCH9,
610        TOUCHn, 9), GPIO9)); _for_each_inner!(((ADC1_CH8, ADCn_CHm, 1, 8), GPIO9));
611        _for_each_inner!(((TOUCH10, TOUCHn, 10), GPIO10)); _for_each_inner!(((ADC1_CH9,
612        ADCn_CHm, 1, 9), GPIO10)); _for_each_inner!(((TOUCH11, TOUCHn, 11), GPIO11));
613        _for_each_inner!(((ADC2_CH0, ADCn_CHm, 2, 0), GPIO11));
614        _for_each_inner!(((TOUCH12, TOUCHn, 12), GPIO12)); _for_each_inner!(((ADC2_CH1,
615        ADCn_CHm, 2, 1), GPIO12)); _for_each_inner!(((TOUCH13, TOUCHn, 13), GPIO13));
616        _for_each_inner!(((ADC2_CH2, ADCn_CHm, 2, 2), GPIO13));
617        _for_each_inner!(((TOUCH14, TOUCHn, 14), GPIO14)); _for_each_inner!(((ADC2_CH3,
618        ADCn_CHm, 2, 3), GPIO14)); _for_each_inner!(((ADC2_CH4, ADCn_CHm, 2, 4),
619        GPIO15)); _for_each_inner!(((ADC2_CH5, ADCn_CHm, 2, 5), GPIO16));
620        _for_each_inner!(((ADC2_CH6, ADCn_CHm, 2, 6), GPIO17));
621        _for_each_inner!(((ADC2_CH7, ADCn_CHm, 2, 7), GPIO18));
622        _for_each_inner!(((ADC2_CH8, ADCn_CHm, 2, 8), GPIO19));
623        _for_each_inner!(((ADC2_CH9, ADCn_CHm, 2, 9), GPIO20));
624        _for_each_inner!((all(TOUCH1, GPIO1), (ADC1_CH0, GPIO1), (TOUCH2, GPIO2),
625        (ADC1_CH1, GPIO2), (TOUCH3, GPIO3), (ADC1_CH2, GPIO3), (TOUCH4, GPIO4),
626        (ADC1_CH3, GPIO4), (TOUCH5, GPIO5), (ADC1_CH4, GPIO5), (TOUCH6, GPIO6),
627        (ADC1_CH5, GPIO6), (TOUCH7, GPIO7), (ADC1_CH6, GPIO7), (TOUCH8, GPIO8),
628        (ADC1_CH7, GPIO8), (TOUCH9, GPIO9), (ADC1_CH8, GPIO9), (TOUCH10, GPIO10),
629        (ADC1_CH9, GPIO10), (TOUCH11, GPIO11), (ADC2_CH0, GPIO11), (TOUCH12, GPIO12),
630        (ADC2_CH1, GPIO12), (TOUCH13, GPIO13), (ADC2_CH2, GPIO13), (TOUCH14, GPIO14),
631        (ADC2_CH3, GPIO14), (XTAL_32K_P, GPIO15), (ADC2_CH4, GPIO15), (XTAL_32K_N,
632        GPIO16), (ADC2_CH5, GPIO16), (ADC2_CH6, GPIO17), (ADC2_CH7, GPIO18), (USB_DM,
633        GPIO19), (ADC2_CH8, GPIO19), (USB_DP, GPIO20), (ADC2_CH9, GPIO20)));
634        _for_each_inner!((all_expanded((TOUCH1, TOUCHn, 1), GPIO1), ((ADC1_CH0, ADCn_CHm,
635        1, 0), GPIO1), ((TOUCH2, TOUCHn, 2), GPIO2), ((ADC1_CH1, ADCn_CHm, 1, 1), GPIO2),
636        ((TOUCH3, TOUCHn, 3), GPIO3), ((ADC1_CH2, ADCn_CHm, 1, 2), GPIO3), ((TOUCH4,
637        TOUCHn, 4), GPIO4), ((ADC1_CH3, ADCn_CHm, 1, 3), GPIO4), ((TOUCH5, TOUCHn, 5),
638        GPIO5), ((ADC1_CH4, ADCn_CHm, 1, 4), GPIO5), ((TOUCH6, TOUCHn, 6), GPIO6),
639        ((ADC1_CH5, ADCn_CHm, 1, 5), GPIO6), ((TOUCH7, TOUCHn, 7), GPIO7), ((ADC1_CH6,
640        ADCn_CHm, 1, 6), GPIO7), ((TOUCH8, TOUCHn, 8), GPIO8), ((ADC1_CH7, ADCn_CHm, 1,
641        7), GPIO8), ((TOUCH9, TOUCHn, 9), GPIO9), ((ADC1_CH8, ADCn_CHm, 1, 8), GPIO9),
642        ((TOUCH10, TOUCHn, 10), GPIO10), ((ADC1_CH9, ADCn_CHm, 1, 9), GPIO10), ((TOUCH11,
643        TOUCHn, 11), GPIO11), ((ADC2_CH0, ADCn_CHm, 2, 0), GPIO11), ((TOUCH12, TOUCHn,
644        12), GPIO12), ((ADC2_CH1, ADCn_CHm, 2, 1), GPIO12), ((TOUCH13, TOUCHn, 13),
645        GPIO13), ((ADC2_CH2, ADCn_CHm, 2, 2), GPIO13), ((TOUCH14, TOUCHn, 14), GPIO14),
646        ((ADC2_CH3, ADCn_CHm, 2, 3), GPIO14), ((ADC2_CH4, ADCn_CHm, 2, 4), GPIO15),
647        ((ADC2_CH5, ADCn_CHm, 2, 5), GPIO16), ((ADC2_CH6, ADCn_CHm, 2, 6), GPIO17),
648        ((ADC2_CH7, ADCn_CHm, 2, 7), GPIO18), ((ADC2_CH8, ADCn_CHm, 2, 8), GPIO19),
649        ((ADC2_CH9, ADCn_CHm, 2, 9), GPIO20)));
650    };
651}
652/// This macro can be used to generate code for each LP/RTC function of each GPIO.
653///
654/// For an explanation on the general syntax, as well as usage of individual/repeated
655/// matchers, refer to [the crate-level documentation][crate#for_each-macros].
656///
657/// This macro has two options for its "Individual matcher" case:
658///
659/// - `all`: `($signal:ident, $gpio:ident)` - simple case where you only need identifiers
660/// - `all_expanded`: `(($signal:ident, $group:ident $(, $number:literal)+), $gpio:ident)` -
661///   expanded signal case, where you need the number(s) of a signal, or the general group to which
662///   the signal belongs. For example, in case of `SAR_I2C_SCL_1` the expanded form looks like
663///   `(SAR_I2C_SCL_1, SAR_I2C_SCL_n, 1)`.
664///
665/// Macro fragments:
666///
667/// - `$signal`: the name of the signal.
668/// - `$group`: the name of the signal, with numbers replaced by placeholders. For `ADC2_CH3` this
669///   is `ADCn_CHm`.
670/// - `$number`: the numbers extracted from `$signal`.
671/// - `$gpio`: the name of the GPIO.
672///
673/// Example data:
674/// - `(RTC_GPIO15, GPIO12)`
675/// - `((RTC_GPIO15, RTC_GPIOn, 15), GPIO12)`
676///
677/// The expanded syntax is only available when the signal has at least one numbered component.
678#[macro_export]
679#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
680macro_rules! for_each_lp_function {
681    ($($pattern:tt => $code:tt;)*) => {
682        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
683        _for_each_inner!((RTC_GPIO0, GPIO0)); _for_each_inner!((SAR_I2C_SCL_0, GPIO0));
684        _for_each_inner!((RTC_GPIO1, GPIO1)); _for_each_inner!((SAR_I2C_SDA_0, GPIO1));
685        _for_each_inner!((RTC_GPIO2, GPIO2)); _for_each_inner!((SAR_I2C_SCL_1, GPIO2));
686        _for_each_inner!((RTC_GPIO3, GPIO3)); _for_each_inner!((SAR_I2C_SDA_1, GPIO3));
687        _for_each_inner!((RTC_GPIO4, GPIO4)); _for_each_inner!((RTC_GPIO5, GPIO5));
688        _for_each_inner!((RTC_GPIO6, GPIO6)); _for_each_inner!((RTC_GPIO7, GPIO7));
689        _for_each_inner!((RTC_GPIO8, GPIO8)); _for_each_inner!((RTC_GPIO9, GPIO9));
690        _for_each_inner!((RTC_GPIO10, GPIO10)); _for_each_inner!((RTC_GPIO11, GPIO11));
691        _for_each_inner!((RTC_GPIO12, GPIO12)); _for_each_inner!((RTC_GPIO13, GPIO13));
692        _for_each_inner!((RTC_GPIO14, GPIO14)); _for_each_inner!((RTC_GPIO15, GPIO15));
693        _for_each_inner!((RTC_GPIO16, GPIO16)); _for_each_inner!((RTC_GPIO17, GPIO17));
694        _for_each_inner!((RTC_GPIO18, GPIO18)); _for_each_inner!((RTC_GPIO19, GPIO19));
695        _for_each_inner!((RTC_GPIO20, GPIO20)); _for_each_inner!((RTC_GPIO21, GPIO21));
696        _for_each_inner!(((RTC_GPIO0, RTC_GPIOn, 0), GPIO0));
697        _for_each_inner!(((SAR_I2C_SCL_0, SAR_I2C_SCL_n, 0), GPIO0));
698        _for_each_inner!(((RTC_GPIO1, RTC_GPIOn, 1), GPIO1));
699        _for_each_inner!(((SAR_I2C_SDA_0, SAR_I2C_SDA_n, 0), GPIO1));
700        _for_each_inner!(((RTC_GPIO2, RTC_GPIOn, 2), GPIO2));
701        _for_each_inner!(((SAR_I2C_SCL_1, SAR_I2C_SCL_n, 1), GPIO2));
702        _for_each_inner!(((RTC_GPIO3, RTC_GPIOn, 3), GPIO3));
703        _for_each_inner!(((SAR_I2C_SDA_1, SAR_I2C_SDA_n, 1), GPIO3));
704        _for_each_inner!(((RTC_GPIO4, RTC_GPIOn, 4), GPIO4));
705        _for_each_inner!(((RTC_GPIO5, RTC_GPIOn, 5), GPIO5));
706        _for_each_inner!(((RTC_GPIO6, RTC_GPIOn, 6), GPIO6));
707        _for_each_inner!(((RTC_GPIO7, RTC_GPIOn, 7), GPIO7));
708        _for_each_inner!(((RTC_GPIO8, RTC_GPIOn, 8), GPIO8));
709        _for_each_inner!(((RTC_GPIO9, RTC_GPIOn, 9), GPIO9));
710        _for_each_inner!(((RTC_GPIO10, RTC_GPIOn, 10), GPIO10));
711        _for_each_inner!(((RTC_GPIO11, RTC_GPIOn, 11), GPIO11));
712        _for_each_inner!(((RTC_GPIO12, RTC_GPIOn, 12), GPIO12));
713        _for_each_inner!(((RTC_GPIO13, RTC_GPIOn, 13), GPIO13));
714        _for_each_inner!(((RTC_GPIO14, RTC_GPIOn, 14), GPIO14));
715        _for_each_inner!(((RTC_GPIO15, RTC_GPIOn, 15), GPIO15));
716        _for_each_inner!(((RTC_GPIO16, RTC_GPIOn, 16), GPIO16));
717        _for_each_inner!(((RTC_GPIO17, RTC_GPIOn, 17), GPIO17));
718        _for_each_inner!(((RTC_GPIO18, RTC_GPIOn, 18), GPIO18));
719        _for_each_inner!(((RTC_GPIO19, RTC_GPIOn, 19), GPIO19));
720        _for_each_inner!(((RTC_GPIO20, RTC_GPIOn, 20), GPIO20));
721        _for_each_inner!(((RTC_GPIO21, RTC_GPIOn, 21), GPIO21));
722        _for_each_inner!((all(RTC_GPIO0, GPIO0), (SAR_I2C_SCL_0, GPIO0), (RTC_GPIO1,
723        GPIO1), (SAR_I2C_SDA_0, GPIO1), (RTC_GPIO2, GPIO2), (SAR_I2C_SCL_1, GPIO2),
724        (RTC_GPIO3, GPIO3), (SAR_I2C_SDA_1, GPIO3), (RTC_GPIO4, GPIO4), (RTC_GPIO5,
725        GPIO5), (RTC_GPIO6, GPIO6), (RTC_GPIO7, GPIO7), (RTC_GPIO8, GPIO8), (RTC_GPIO9,
726        GPIO9), (RTC_GPIO10, GPIO10), (RTC_GPIO11, GPIO11), (RTC_GPIO12, GPIO12),
727        (RTC_GPIO13, GPIO13), (RTC_GPIO14, GPIO14), (RTC_GPIO15, GPIO15), (RTC_GPIO16,
728        GPIO16), (RTC_GPIO17, GPIO17), (RTC_GPIO18, GPIO18), (RTC_GPIO19, GPIO19),
729        (RTC_GPIO20, GPIO20), (RTC_GPIO21, GPIO21)));
730        _for_each_inner!((all_expanded((RTC_GPIO0, RTC_GPIOn, 0), GPIO0),
731        ((SAR_I2C_SCL_0, SAR_I2C_SCL_n, 0), GPIO0), ((RTC_GPIO1, RTC_GPIOn, 1), GPIO1),
732        ((SAR_I2C_SDA_0, SAR_I2C_SDA_n, 0), GPIO1), ((RTC_GPIO2, RTC_GPIOn, 2), GPIO2),
733        ((SAR_I2C_SCL_1, SAR_I2C_SCL_n, 1), GPIO2), ((RTC_GPIO3, RTC_GPIOn, 3), GPIO3),
734        ((SAR_I2C_SDA_1, SAR_I2C_SDA_n, 1), GPIO3), ((RTC_GPIO4, RTC_GPIOn, 4), GPIO4),
735        ((RTC_GPIO5, RTC_GPIOn, 5), GPIO5), ((RTC_GPIO6, RTC_GPIOn, 6), GPIO6),
736        ((RTC_GPIO7, RTC_GPIOn, 7), GPIO7), ((RTC_GPIO8, RTC_GPIOn, 8), GPIO8),
737        ((RTC_GPIO9, RTC_GPIOn, 9), GPIO9), ((RTC_GPIO10, RTC_GPIOn, 10), GPIO10),
738        ((RTC_GPIO11, RTC_GPIOn, 11), GPIO11), ((RTC_GPIO12, RTC_GPIOn, 12), GPIO12),
739        ((RTC_GPIO13, RTC_GPIOn, 13), GPIO13), ((RTC_GPIO14, RTC_GPIOn, 14), GPIO14),
740        ((RTC_GPIO15, RTC_GPIOn, 15), GPIO15), ((RTC_GPIO16, RTC_GPIOn, 16), GPIO16),
741        ((RTC_GPIO17, RTC_GPIOn, 17), GPIO17), ((RTC_GPIO18, RTC_GPIOn, 18), GPIO18),
742        ((RTC_GPIO19, RTC_GPIOn, 19), GPIO19), ((RTC_GPIO20, RTC_GPIOn, 20), GPIO20),
743        ((RTC_GPIO21, RTC_GPIOn, 21), GPIO21)));
744    };
745}
746/// Defines the `InputSignal` and `OutputSignal` enums.
747///
748/// This macro is intended to be called in esp-hal only.
749#[macro_export]
750#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
751macro_rules! define_io_mux_signals {
752    () => {
753        #[allow(non_camel_case_types, clippy::upper_case_acronyms)]
754        #[derive(Debug, PartialEq, Copy, Clone)]
755        #[cfg_attr(feature = "defmt", derive(defmt::Format))]
756        #[doc(hidden)]
757        pub enum InputSignal {
758            SPIQ                    = 0,
759            SPID                    = 1,
760            SPIHD                   = 2,
761            SPIWP                   = 3,
762            SPID4                   = 7,
763            SPID5                   = 8,
764            SPID6                   = 9,
765            SPID7                   = 10,
766            SPIDQS                  = 11,
767            U0RXD                   = 12,
768            U0CTS                   = 13,
769            U0DSR                   = 14,
770            U1RXD                   = 15,
771            U1CTS                   = 16,
772            U1DSR                   = 17,
773            U2RXD                   = 18,
774            U2CTS                   = 19,
775            U2DSR                   = 20,
776            I2S1_MCLK               = 21,
777            I2S0O_BCK               = 22,
778            I2S0_MCLK               = 23,
779            I2S0O_WS                = 24,
780            I2S0I_SD                = 25,
781            I2S0I_BCK               = 26,
782            I2S0I_WS                = 27,
783            I2S1O_BCK               = 28,
784            I2S1O_WS                = 29,
785            I2S1I_SD                = 30,
786            I2S1I_BCK               = 31,
787            I2S1I_WS                = 32,
788            PCNT0_SIG_CH0           = 33,
789            PCNT0_SIG_CH1           = 34,
790            PCNT0_CTRL_CH0          = 35,
791            PCNT0_CTRL_CH1          = 36,
792            PCNT1_SIG_CH0           = 37,
793            PCNT1_SIG_CH1           = 38,
794            PCNT1_CTRL_CH0          = 39,
795            PCNT1_CTRL_CH1          = 40,
796            PCNT2_SIG_CH0           = 41,
797            PCNT2_SIG_CH1           = 42,
798            PCNT2_CTRL_CH0          = 43,
799            PCNT2_CTRL_CH1          = 44,
800            PCNT3_SIG_CH0           = 45,
801            PCNT3_SIG_CH1           = 46,
802            PCNT3_CTRL_CH0          = 47,
803            PCNT3_CTRL_CH1          = 48,
804            I2S0I_SD1               = 51,
805            I2S0I_SD2               = 52,
806            I2S0I_SD3               = 53,
807            USB_EXTPHY_VP           = 55,
808            USB_EXTPHY_VM           = 56,
809            USB_EXTPHY_RCV          = 57,
810            USB_OTG_IDDIG           = 58,
811            USB_OTG_AVALID          = 59,
812            USB_SRP_BVALID          = 60,
813            USB_OTG_VBUSVALID       = 61,
814            USB_SRP_SESSEND         = 62,
815            SPI3_CLK                = 66,
816            SPI3_Q                  = 67,
817            SPI3_D                  = 68,
818            SPI3_HD                 = 69,
819            SPI3_WP                 = 70,
820            SPI3_CS0                = 71,
821            RMT_SIG_0               = 81,
822            RMT_SIG_1               = 82,
823            RMT_SIG_2               = 83,
824            RMT_SIG_3               = 84,
825            I2CEXT0_SCL             = 89,
826            I2CEXT0_SDA             = 90,
827            I2CEXT1_SCL             = 91,
828            I2CEXT1_SDA             = 92,
829            FSPICLK                 = 101,
830            FSPIQ                   = 102,
831            FSPID                   = 103,
832            FSPIHD                  = 104,
833            FSPIWP                  = 105,
834            FSPIIO4                 = 106,
835            FSPIIO5                 = 107,
836            FSPIIO6                 = 108,
837            FSPIIO7                 = 109,
838            FSPICS0                 = 110,
839            TWAI_RX                 = 116,
840            SUBSPIQ                 = 120,
841            SUBSPID                 = 121,
842            SUBSPIHD                = 122,
843            SUBSPIWP                = 123,
844            CAM_DATA_0              = 133,
845            CAM_DATA_1              = 134,
846            CAM_DATA_2              = 135,
847            CAM_DATA_3              = 136,
848            CAM_DATA_4              = 137,
849            CAM_DATA_5              = 138,
850            CAM_DATA_6              = 139,
851            CAM_DATA_7              = 140,
852            CAM_DATA_8              = 141,
853            CAM_DATA_9              = 142,
854            CAM_DATA_10             = 143,
855            CAM_DATA_11             = 144,
856            CAM_DATA_12             = 145,
857            CAM_DATA_13             = 146,
858            CAM_DATA_14             = 147,
859            CAM_DATA_15             = 148,
860            CAM_PCLK                = 149,
861            CAM_H_ENABLE            = 150,
862            CAM_H_SYNC              = 151,
863            CAM_V_SYNC              = 152,
864            SUBSPID4                = 155,
865            SUBSPID5                = 156,
866            SUBSPID6                = 157,
867            SUBSPID7                = 158,
868            SUBSPIDQS               = 159,
869            PWM0_SYNC0              = 160,
870            PWM0_SYNC1              = 161,
871            PWM0_SYNC2              = 162,
872            PWM0_F0                 = 163,
873            PWM0_F1                 = 164,
874            PWM0_F2                 = 165,
875            PWM0_CAP0               = 166,
876            PWM0_CAP1               = 167,
877            PWM0_CAP2               = 168,
878            PWM1_SYNC0              = 169,
879            PWM1_SYNC1              = 170,
880            PWM1_SYNC2              = 171,
881            PWM1_F0                 = 172,
882            PWM1_F1                 = 173,
883            PWM1_F2                 = 174,
884            PWM1_CAP0               = 175,
885            PWM1_CAP1               = 176,
886            PWM1_CAP2               = 177,
887            SDHOST_CCMD_IN_1        = 178,
888            SDHOST_CCMD_IN_2        = 179,
889            SDHOST_CDATA_IN_10      = 180,
890            SDHOST_CDATA_IN_11      = 181,
891            SDHOST_CDATA_IN_12      = 182,
892            SDHOST_CDATA_IN_13      = 183,
893            SDHOST_CDATA_IN_14      = 184,
894            SDHOST_CDATA_IN_15      = 185,
895            SDHOST_CDATA_IN_16      = 186,
896            SDHOST_CDATA_IN_17      = 187,
897            SDHOST_DATA_STROBE_1    = 192,
898            SDHOST_DATA_STROBE_2    = 193,
899            SDHOST_CARD_DETECT_N_1  = 194,
900            SDHOST_CARD_DETECT_N_2  = 195,
901            SDHOST_CARD_WRITE_PRT_1 = 196,
902            SDHOST_CARD_WRITE_PRT_2 = 197,
903            SDHOST_CARD_INT_N_1     = 198,
904            SDHOST_CARD_INT_N_2     = 199,
905            SDHOST_CDATA_IN_20      = 213,
906            SDHOST_CDATA_IN_21      = 214,
907            SDHOST_CDATA_IN_22      = 215,
908            SDHOST_CDATA_IN_23      = 216,
909            SDHOST_CDATA_IN_24      = 217,
910            SDHOST_CDATA_IN_25      = 218,
911            SDHOST_CDATA_IN_26      = 219,
912            SDHOST_CDATA_IN_27      = 220,
913            PRO_ALONEGPIO_IN0       = 221,
914            PRO_ALONEGPIO_IN1       = 222,
915            PRO_ALONEGPIO_IN2       = 223,
916            PRO_ALONEGPIO_IN3       = 224,
917            PRO_ALONEGPIO_IN4       = 225,
918            PRO_ALONEGPIO_IN5       = 226,
919            PRO_ALONEGPIO_IN6       = 227,
920            PRO_ALONEGPIO_IN7       = 228,
921            USB_JTAG_TDO_BRIDGE     = 251,
922            CORE1_GPIO_IN3          = 252,
923            CORE1_GPIO_IN4          = 253,
924            CORE1_GPIO_IN5          = 254,
925            CORE1_GPIO_IN6          = 255,
926            SPIIO4,
927            SPIIO5,
928            SPIIO6,
929            SPIIO7,
930            MTDI,
931            MTCK,
932            MTMS,
933        }
934        #[allow(non_camel_case_types, clippy::upper_case_acronyms)]
935        #[derive(Debug, PartialEq, Copy, Clone)]
936        #[cfg_attr(feature = "defmt", derive(defmt::Format))]
937        #[doc(hidden)]
938        pub enum OutputSignal {
939            SPIQ                       = 0,
940            SPID                       = 1,
941            SPIHD                      = 2,
942            SPIWP                      = 3,
943            SPICLK                     = 4,
944            SPICS0                     = 5,
945            SPICS1                     = 6,
946            SPID4                      = 7,
947            SPID5                      = 8,
948            SPID6                      = 9,
949            SPID7                      = 10,
950            SPIDQS                     = 11,
951            U0TXD                      = 12,
952            U0RTS                      = 13,
953            U0DTR                      = 14,
954            U1TXD                      = 15,
955            U1RTS                      = 16,
956            U1DTR                      = 17,
957            U2TXD                      = 18,
958            U2RTS                      = 19,
959            U2DTR                      = 20,
960            I2S1_MCLK                  = 21,
961            I2S0O_BCK                  = 22,
962            I2S0_MCLK                  = 23,
963            I2S0O_WS                   = 24,
964            I2S0O_SD                   = 25,
965            I2S0I_BCK                  = 26,
966            I2S0I_WS                   = 27,
967            I2S1O_BCK                  = 28,
968            I2S1O_WS                   = 29,
969            I2S1O_SD                   = 30,
970            I2S1I_BCK                  = 31,
971            I2S1I_WS                   = 32,
972            USB_EXTPHY_OEN             = 55,
973            USB_EXTPHY_VPO             = 57,
974            USB_EXTPHY_VMO             = 58,
975            SPI3_CLK                   = 66,
976            SPI3_Q                     = 67,
977            SPI3_D                     = 68,
978            SPI3_HD                    = 69,
979            SPI3_WP                    = 70,
980            SPI3_CS0                   = 71,
981            SPI3_CS1                   = 72,
982            LEDC_LS_SIG0               = 73,
983            LEDC_LS_SIG1               = 74,
984            LEDC_LS_SIG2               = 75,
985            LEDC_LS_SIG3               = 76,
986            LEDC_LS_SIG4               = 77,
987            LEDC_LS_SIG5               = 78,
988            LEDC_LS_SIG6               = 79,
989            LEDC_LS_SIG7               = 80,
990            RMT_SIG_0                  = 81,
991            RMT_SIG_1                  = 82,
992            RMT_SIG_2                  = 83,
993            RMT_SIG_3                  = 84,
994            I2CEXT0_SCL                = 89,
995            I2CEXT0_SDA                = 90,
996            I2CEXT1_SCL                = 91,
997            I2CEXT1_SDA                = 92,
998            GPIO_SD0                   = 93,
999            GPIO_SD1                   = 94,
1000            GPIO_SD2                   = 95,
1001            GPIO_SD3                   = 96,
1002            GPIO_SD4                   = 97,
1003            GPIO_SD5                   = 98,
1004            GPIO_SD6                   = 99,
1005            GPIO_SD7                   = 100,
1006            FSPICLK                    = 101,
1007            FSPIQ                      = 102,
1008            FSPID                      = 103,
1009            FSPIHD                     = 104,
1010            FSPIWP                     = 105,
1011            FSPIIO4                    = 106,
1012            FSPIIO5                    = 107,
1013            FSPIIO6                    = 108,
1014            FSPIIO7                    = 109,
1015            FSPICS0                    = 110,
1016            FSPICS1                    = 111,
1017            FSPICS2                    = 112,
1018            FSPICS3                    = 113,
1019            FSPICS4                    = 114,
1020            FSPICS5                    = 115,
1021            TWAI_TX                    = 116,
1022            SUBSPICLK                  = 119,
1023            SUBSPIQ                    = 120,
1024            SUBSPID                    = 121,
1025            SUBSPIHD                   = 122,
1026            SUBSPIWP                   = 123,
1027            SUBSPICS0                  = 124,
1028            SUBSPICS1                  = 125,
1029            FSPIDQS                    = 126,
1030            SPI3_CS2                   = 127,
1031            I2S0O_SD1                  = 128,
1032            LCD_CS                     = 132,
1033            LCD_DATA_0                 = 133,
1034            LCD_DATA_1                 = 134,
1035            LCD_DATA_2                 = 135,
1036            LCD_DATA_3                 = 136,
1037            LCD_DATA_4                 = 137,
1038            LCD_DATA_5                 = 138,
1039            LCD_DATA_6                 = 139,
1040            LCD_DATA_7                 = 140,
1041            LCD_DATA_8                 = 141,
1042            LCD_DATA_9                 = 142,
1043            LCD_DATA_10                = 143,
1044            LCD_DATA_11                = 144,
1045            LCD_DATA_12                = 145,
1046            LCD_DATA_13                = 146,
1047            LCD_DATA_14                = 147,
1048            LCD_DATA_15                = 148,
1049            CAM_CLK                    = 149,
1050            LCD_H_ENABLE               = 150,
1051            LCD_H_SYNC                 = 151,
1052            LCD_V_SYNC                 = 152,
1053            LCD_DC                     = 153,
1054            LCD_PCLK                   = 154,
1055            SUBSPID4                   = 155,
1056            SUBSPID5                   = 156,
1057            SUBSPID6                   = 157,
1058            SUBSPID7                   = 158,
1059            SUBSPIDQS                  = 159,
1060            PWM0_0A                    = 160,
1061            PWM0_0B                    = 161,
1062            PWM0_1A                    = 162,
1063            PWM0_1B                    = 163,
1064            PWM0_2A                    = 164,
1065            PWM0_2B                    = 165,
1066            PWM1_0A                    = 166,
1067            PWM1_0B                    = 167,
1068            PWM1_1A                    = 168,
1069            PWM1_1B                    = 169,
1070            PWM1_2A                    = 170,
1071            PWM1_2B                    = 171,
1072            SDHOST_CCLK_OUT_1          = 172,
1073            SDHOST_CCLK_OUT_2          = 173,
1074            SDHOST_RST_N_1             = 174,
1075            SDHOST_RST_N_2             = 175,
1076            SDHOST_CCMD_OD_PULLUP_EN_N = 176,
1077            SDIO_TOHOST_INT            = 177,
1078            SDHOST_CCMD_OUT_1          = 178,
1079            SDHOST_CCMD_OUT_2          = 179,
1080            SDHOST_CDATA_OUT_10        = 180,
1081            SDHOST_CDATA_OUT_11        = 181,
1082            SDHOST_CDATA_OUT_12        = 182,
1083            SDHOST_CDATA_OUT_13        = 183,
1084            SDHOST_CDATA_OUT_14        = 184,
1085            SDHOST_CDATA_OUT_15        = 185,
1086            SDHOST_CDATA_OUT_16        = 186,
1087            SDHOST_CDATA_OUT_17        = 187,
1088            SDHOST_CDATA_OUT_20        = 213,
1089            SDHOST_CDATA_OUT_21        = 214,
1090            SDHOST_CDATA_OUT_22        = 215,
1091            SDHOST_CDATA_OUT_23        = 216,
1092            SDHOST_CDATA_OUT_24        = 217,
1093            SDHOST_CDATA_OUT_25        = 218,
1094            SDHOST_CDATA_OUT_26        = 219,
1095            SDHOST_CDATA_OUT_27        = 220,
1096            PRO_ALONEGPIO_OUT0         = 221,
1097            PRO_ALONEGPIO_OUT1         = 222,
1098            PRO_ALONEGPIO_OUT2         = 223,
1099            PRO_ALONEGPIO_OUT3         = 224,
1100            PRO_ALONEGPIO_OUT4         = 225,
1101            PRO_ALONEGPIO_OUT5         = 226,
1102            PRO_ALONEGPIO_OUT6         = 227,
1103            PRO_ALONEGPIO_OUT7         = 228,
1104            USB_JTAG_TRST              = 251,
1105            CORE1_GPIO_OUT3            = 252,
1106            CORE1_GPIO_OUT4            = 253,
1107            CORE1_GPIO_OUT5            = 254,
1108            CORE1_GPIO_OUT6            = 255,
1109            GPIO                       = 256,
1110            SPIIO4,
1111            SPIIO5,
1112            SPIIO6,
1113            SPIIO7,
1114            CLK_OUT1,
1115            CLK_OUT2,
1116            CLK_OUT3,
1117            SPICLK_P_DIFF,
1118            SPICLK_N_DIFF,
1119            SUBSPICLK_P_DIFF,
1120            SUBSPICLK_N_DIFF,
1121            MTDO,
1122        }
1123    };
1124}
1125/// Defines and implements the `io_mux_reg` function.
1126///
1127/// The generated function has the following signature:
1128///
1129/// ```rust,ignore
1130/// pub(crate) fn io_mux_reg(gpio_num: u8) -> &'static crate::pac::io_mux::GPIO0 {
1131///     // ...
1132/// # unimplemented!()
1133/// }
1134/// ```
1135///
1136/// This macro is intended to be called in esp-hal only.
1137#[macro_export]
1138#[expect(clippy::crate_in_macro_def)]
1139#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1140macro_rules! define_io_mux_reg {
1141    () => {
1142        pub(crate) fn io_mux_reg(gpio_num: u8) -> &'static crate::pac::io_mux::GPIO {
1143            crate::peripherals::IO_MUX::regs().gpio(gpio_num as usize)
1144        }
1145    };
1146}