1#[doc = concat!("assert_eq!(chip_name, ", chip!(), ")")]
12#[macro_export]
14#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
15macro_rules! chip {
16 () => {
17 "esp32"
18 };
19}
20#[macro_export]
22#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
23macro_rules! property {
24 ("chip") => {
25 "esp32"
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_technical_reference_manual_en.pdf"
38 };
39 ("soc.cpu_has_csr_pc") => {
40 false
41 };
42 ("soc.cpu_has_prv_mode") => {
43 false
44 };
45 ("soc.ref_tick_hz") => {
46 1000000
47 };
48 ("soc.ref_tick_hz", str) => {
49 stringify!(1000000)
50 };
51 ("soc.rc_fast_clk_default") => {
52 8500000
53 };
54 ("soc.rc_fast_clk_default", str) => {
55 stringify!(8500000)
56 };
57 ("soc.rc_slow_clock") => {
58 150000
59 };
60 ("soc.rc_slow_clock", str) => {
61 stringify!(150000)
62 };
63 ("soc.has_multiple_xtal_options") => {
64 true
65 };
66 ("aes.dma") => {
67 false
68 };
69 ("aes.has_split_text_registers") => {
70 false
71 };
72 ("aes.endianness_configurable") => {
73 true
74 };
75 ("gpio.has_bank_1") => {
76 true
77 };
78 ("gpio.gpio_function") => {
79 2
80 };
81 ("gpio.gpio_function", str) => {
82 stringify!(2)
83 };
84 ("gpio.constant_0_input") => {
85 48
86 };
87 ("gpio.constant_0_input", str) => {
88 stringify!(48)
89 };
90 ("gpio.constant_1_input") => {
91 56
92 };
93 ("gpio.constant_1_input", str) => {
94 stringify!(56)
95 };
96 ("gpio.remap_iomux_pin_registers") => {
97 true
98 };
99 ("gpio.func_in_sel_offset") => {
100 0
101 };
102 ("gpio.func_in_sel_offset", str) => {
103 stringify!(0)
104 };
105 ("gpio.input_signal_max") => {
106 206
107 };
108 ("gpio.input_signal_max", str) => {
109 stringify!(206)
110 };
111 ("gpio.output_signal_max") => {
112 256
113 };
114 ("gpio.output_signal_max", str) => {
115 stringify!(256)
116 };
117 ("i2c_master.has_fsm_timeouts") => {
118 false
119 };
120 ("i2c_master.has_hw_bus_clear") => {
121 false
122 };
123 ("i2c_master.has_bus_timeout_enable") => {
124 false
125 };
126 ("i2c_master.separate_filter_config_registers") => {
127 true
128 };
129 ("i2c_master.can_estimate_nack_reason") => {
130 false
131 };
132 ("i2c_master.has_conf_update") => {
133 false
134 };
135 ("i2c_master.has_reliable_fsm_reset") => {
136 false
137 };
138 ("i2c_master.has_arbitration_en") => {
139 false
140 };
141 ("i2c_master.has_tx_fifo_watermark") => {
142 false
143 };
144 ("i2c_master.bus_timeout_is_exponential") => {
145 false
146 };
147 ("i2c_master.i2c0_data_register_ahb_address") => {
148 1610690588
149 };
150 ("i2c_master.i2c0_data_register_ahb_address", str) => {
151 stringify!(1610690588)
152 };
153 ("i2c_master.max_bus_timeout") => {
154 1048575
155 };
156 ("i2c_master.max_bus_timeout", str) => {
157 stringify!(1048575)
158 };
159 ("i2c_master.ll_intr_mask") => {
160 262143
161 };
162 ("i2c_master.ll_intr_mask", str) => {
163 stringify!(262143)
164 };
165 ("i2c_master.fifo_size") => {
166 32
167 };
168 ("i2c_master.fifo_size", str) => {
169 stringify!(32)
170 };
171 ("interrupts.status_registers") => {
172 3
173 };
174 ("interrupts.status_registers", str) => {
175 stringify!(3)
176 };
177 ("rmt.ram_start") => {
178 1073047552
179 };
180 ("rmt.ram_start", str) => {
181 stringify!(1073047552)
182 };
183 ("rmt.channel_ram_size") => {
184 64
185 };
186 ("rmt.channel_ram_size", str) => {
187 stringify!(64)
188 };
189 ("rmt.has_tx_immediate_stop") => {
190 false
191 };
192 ("rmt.has_tx_loop_count") => {
193 false
194 };
195 ("rmt.has_tx_loop_auto_stop") => {
196 false
197 };
198 ("rmt.has_tx_carrier_data_only") => {
199 false
200 };
201 ("rmt.has_tx_sync") => {
202 false
203 };
204 ("rmt.has_rx_wrap") => {
205 false
206 };
207 ("rmt.has_rx_demodulation") => {
208 false
209 };
210 ("rmt.has_dma") => {
211 false
212 };
213 ("rmt.has_per_channel_clock") => {
214 true
215 };
216 ("rng.apb_cycle_wait_num") => {
217 16
218 };
219 ("rng.apb_cycle_wait_num", str) => {
220 stringify!(16)
221 };
222 ("rsa.size_increment") => {
223 512
224 };
225 ("rsa.size_increment", str) => {
226 stringify!(512)
227 };
228 ("rsa.memory_size_bytes") => {
229 512
230 };
231 ("rsa.memory_size_bytes", str) => {
232 stringify!(512)
233 };
234 ("sha.dma") => {
235 false
236 };
237 ("spi_master.has_octal") => {
238 false
239 };
240 ("timergroup.timg_has_timer1") => {
241 true
242 };
243 ("timergroup.timg_has_divcnt_rst") => {
244 false
245 };
246 ("uart.ram_size") => {
247 128
248 };
249 ("uart.ram_size", str) => {
250 stringify!(128)
251 };
252 ("wifi.has_wifi6") => {
253 false
254 };
255 ("bt.controller") => {
256 "btdm"
257 };
258 ("phy.combo_module") => {
259 true
260 };
261}
262#[macro_export]
264#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
265macro_rules! memory_range {
266 ("DRAM") => {
267 1073405952..1073741824
268 };
269}
270#[macro_export]
271#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
272macro_rules! for_each_soc_xtal_options {
273 ($($pattern:tt => $code:tt;)*) => {
274 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
275 _for_each_inner!((26)); _for_each_inner!((40)); _for_each_inner!((all(26),
276 (40)));
277 };
278}
279#[macro_export]
280#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
281macro_rules! for_each_aes_key_length {
282 ($($pattern:tt => $code:tt;)*) => {
283 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
284 _for_each_inner!((128)); _for_each_inner!((192)); _for_each_inner!((256));
285 _for_each_inner!((128, 0, 4)); _for_each_inner!((192, 1, 5));
286 _for_each_inner!((256, 2, 6)); _for_each_inner!((bits(128), (192), (256)));
287 _for_each_inner!((modes(128, 0, 4), (192, 1, 5), (256, 2, 6)));
288 };
289}
290#[macro_export]
312#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
313macro_rules! for_each_rmt_channel {
314 ($($pattern:tt => $code:tt;)*) => {
315 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
316 _for_each_inner!((0)); _for_each_inner!((1)); _for_each_inner!((2));
317 _for_each_inner!((3)); _for_each_inner!((4)); _for_each_inner!((5));
318 _for_each_inner!((6)); _for_each_inner!((7)); _for_each_inner!((0, 0));
319 _for_each_inner!((1, 1)); _for_each_inner!((2, 2)); _for_each_inner!((3, 3));
320 _for_each_inner!((4, 4)); _for_each_inner!((5, 5)); _for_each_inner!((6, 6));
321 _for_each_inner!((7, 7)); _for_each_inner!((0, 0)); _for_each_inner!((1, 1));
322 _for_each_inner!((2, 2)); _for_each_inner!((3, 3)); _for_each_inner!((4, 4));
323 _for_each_inner!((5, 5)); _for_each_inner!((6, 6)); _for_each_inner!((7, 7));
324 _for_each_inner!((all(0), (1), (2), (3), (4), (5), (6), (7)));
325 _for_each_inner!((tx(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7,
326 7))); _for_each_inner!((rx(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6),
327 (7, 7)));
328 };
329}
330#[macro_export]
331#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
332macro_rules! for_each_rmt_clock_source {
333 ($($pattern:tt => $code:tt;)*) => {
334 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
335 _for_each_inner!((RefTick, 0)); _for_each_inner!((Apb, 1));
336 _for_each_inner!((Apb)); _for_each_inner!((all(RefTick, 0), (Apb, 1)));
337 _for_each_inner!((default(Apb))); _for_each_inner!((is_boolean));
338 };
339}
340#[macro_export]
341#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
342macro_rules! for_each_rsa_exponentiation {
343 ($($pattern:tt => $code:tt;)*) => {
344 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
345 _for_each_inner!((512)); _for_each_inner!((1024)); _for_each_inner!((1536));
346 _for_each_inner!((2048)); _for_each_inner!((2560)); _for_each_inner!((3072));
347 _for_each_inner!((3584)); _for_each_inner!((4096)); _for_each_inner!((all(512),
348 (1024), (1536), (2048), (2560), (3072), (3584), (4096)));
349 };
350}
351#[macro_export]
352#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
353macro_rules! for_each_rsa_multiplication {
354 ($($pattern:tt => $code:tt;)*) => {
355 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
356 _for_each_inner!((512)); _for_each_inner!((1024)); _for_each_inner!((1536));
357 _for_each_inner!((2048)); _for_each_inner!((all(512), (1024), (1536), (2048)));
358 };
359}
360#[macro_export]
361#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
362macro_rules! for_each_sha_algorithm {
363 ($($pattern:tt => $code:tt;)*) => {
364 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
365 _for_each_inner!((Sha1, "SHA-1"(sizes : 64, 20, 8) (insecure_against :
366 "collision", "length extension"), 0)); _for_each_inner!((Sha256, "SHA-256"(sizes
367 : 64, 32, 8) (insecure_against : "length extension"), 0));
368 _for_each_inner!((Sha384, "SHA-384"(sizes : 128, 48, 16) (insecure_against :),
369 0)); _for_each_inner!((Sha512, "SHA-512"(sizes : 128, 64, 16) (insecure_against :
370 "length extension"), 0)); _for_each_inner!((algos(Sha1, "SHA-1"(sizes : 64, 20,
371 8) (insecure_against : "collision", "length extension"), 0), (Sha256,
372 "SHA-256"(sizes : 64, 32, 8) (insecure_against : "length extension"), 0),
373 (Sha384, "SHA-384"(sizes : 128, 48, 16) (insecure_against :), 0), (Sha512,
374 "SHA-512"(sizes : 128, 64, 16) (insecure_against : "length extension"), 0)));
375 };
376}
377#[macro_export]
394#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
395macro_rules! for_each_i2c_master {
396 ($($pattern:tt => $code:tt;)*) => {
397 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
398 _for_each_inner!((I2C0, I2cExt0, I2CEXT0_SCL, I2CEXT0_SDA));
399 _for_each_inner!((I2C1, I2cExt1, I2CEXT1_SCL, I2CEXT1_SDA));
400 _for_each_inner!((all(I2C0, I2cExt0, I2CEXT0_SCL, I2CEXT0_SDA), (I2C1, I2cExt1,
401 I2CEXT1_SCL, I2CEXT1_SDA)));
402 };
403}
404#[macro_export]
421#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
422macro_rules! for_each_uart {
423 ($($pattern:tt => $code:tt;)*) => {
424 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
425 _for_each_inner!((UART0, Uart0, U0RXD, U0TXD, U0CTS, U0RTS));
426 _for_each_inner!((UART1, Uart1, U1RXD, U1TXD, U1CTS, U1RTS));
427 _for_each_inner!((UART2, Uart2, U2RXD, U2TXD, U2CTS, U2RTS));
428 _for_each_inner!((all(UART0, Uart0, U0RXD, U0TXD, U0CTS, U0RTS), (UART1, Uart1,
429 U1RXD, U1TXD, U1CTS, U1RTS), (UART2, Uart2, U2RXD, U2TXD, U2CTS, U2RTS)));
430 };
431}
432#[macro_export]
454#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
455macro_rules! for_each_spi_master {
456 ($($pattern:tt => $code:tt;)*) => {
457 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
458 _for_each_inner!((SPI2, Spi2, HSPICLK[HSPICS0, HSPICS1, HSPICS2] [HSPID, HSPIQ,
459 HSPIWP, HSPIHD], true)); _for_each_inner!((SPI3, Spi3, VSPICLK[VSPICS0, VSPICS1,
460 VSPICS2] [VSPID, VSPIQ, VSPIWP, VSPIHD], true)); _for_each_inner!((all(SPI2,
461 Spi2, HSPICLK[HSPICS0, HSPICS1, HSPICS2] [HSPID, HSPIQ, HSPIWP, HSPIHD], true),
462 (SPI3, Spi3, VSPICLK[VSPICS0, VSPICS1, VSPICS2] [VSPID, VSPIQ, VSPIWP, VSPIHD],
463 true)));
464 };
465}
466#[macro_export]
483#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
484macro_rules! for_each_spi_slave {
485 ($($pattern:tt => $code:tt;)*) => {
486 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
487 _for_each_inner!((SPI2, Spi2, HSPICLK, HSPID, HSPIQ, HSPICS0));
488 _for_each_inner!((SPI3, Spi3, VSPICLK, VSPID, VSPIQ, VSPICS0));
489 _for_each_inner!((all(SPI2, Spi2, HSPICLK, HSPID, HSPIQ, HSPICS0), (SPI3, Spi3,
490 VSPICLK, VSPID, VSPIQ, VSPICS0)));
491 };
492}
493#[macro_export]
494#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
495macro_rules! for_each_peripheral {
496 ($($pattern:tt => $code:tt;)*) => {
497 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
498 _for_each_inner!((GPIO0 <= virtual())); _for_each_inner!((GPIO1 <= virtual()));
499 _for_each_inner!((GPIO2 <= virtual())); _for_each_inner!((GPIO3 <= virtual()));
500 _for_each_inner!((GPIO4 <= virtual())); _for_each_inner!((GPIO5 <= virtual()));
501 _for_each_inner!((GPIO12 <= virtual())); _for_each_inner!((GPIO13 <= virtual()));
502 _for_each_inner!((GPIO14 <= virtual())); _for_each_inner!((GPIO15 <= virtual()));
503 _for_each_inner!((GPIO16 <= virtual())); _for_each_inner!((GPIO17 <= virtual()));
504 _for_each_inner!((GPIO18 <= virtual())); _for_each_inner!((GPIO19 <= virtual()));
505 _for_each_inner!((GPIO21 <= virtual())); _for_each_inner!((GPIO22 <= virtual()));
506 _for_each_inner!((GPIO23 <= virtual())); _for_each_inner!((GPIO25 <= virtual()));
507 _for_each_inner!((GPIO26 <= virtual())); _for_each_inner!((GPIO27 <= virtual()));
508 _for_each_inner!((GPIO32 <= virtual())); _for_each_inner!((GPIO33 <= virtual()));
509 _for_each_inner!((GPIO34 <= virtual())); _for_each_inner!((GPIO35 <= virtual()));
510 _for_each_inner!((GPIO36 <= virtual())); _for_each_inner!((GPIO37 <= virtual()));
511 _for_each_inner!((GPIO38 <= virtual())); _for_each_inner!((GPIO39 <= virtual()));
512 _for_each_inner!((AES <= AES() (unstable))); _for_each_inner!((APB_CTRL <=
513 APB_CTRL() (unstable))); _for_each_inner!((BB <= BB() (unstable)));
514 _for_each_inner!((DPORT <= DPORT() (unstable))); _for_each_inner!((SYSTEM <=
515 DPORT() (unstable))); _for_each_inner!((EFUSE <= EFUSE() (unstable)));
516 _for_each_inner!((EMAC_DMA <= EMAC_DMA() (unstable))); _for_each_inner!((EMAC_EXT
517 <= EMAC_EXT() (unstable))); _for_each_inner!((EMAC_MAC <= EMAC_MAC()
518 (unstable))); _for_each_inner!((FLASH_ENCRYPTION <= FLASH_ENCRYPTION()
519 (unstable))); _for_each_inner!((FRC_TIMER <= FRC_TIMER() (unstable)));
520 _for_each_inner!((GPIO <= GPIO() (unstable))); _for_each_inner!((GPIO_SD <=
521 GPIO_SD() (unstable))); _for_each_inner!((HINF <= HINF() (unstable)));
522 _for_each_inner!((I2C0 <= I2C0(I2C_EXT0 : { bind_peri_interrupt,
523 enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((I2C1 <=
524 I2C1(I2C_EXT1 : { bind_peri_interrupt, enable_peri_interrupt,
525 disable_peri_interrupt }))); _for_each_inner!((I2S0 <= I2S0(I2S0 : {
526 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })
527 (unstable))); _for_each_inner!((I2S1 <= I2S1(I2S1 : { bind_peri_interrupt,
528 enable_peri_interrupt, disable_peri_interrupt }) (unstable)));
529 _for_each_inner!((IO_MUX <= IO_MUX() (unstable))); _for_each_inner!((LEDC <=
530 LEDC() (unstable))); _for_each_inner!((MCPWM0 <= MCPWM0() (unstable)));
531 _for_each_inner!((MCPWM1 <= MCPWM1() (unstable))); _for_each_inner!((NRX <= NRX()
532 (unstable))); _for_each_inner!((PCNT <= PCNT() (unstable)));
533 _for_each_inner!((RMT <= RMT() (unstable))); _for_each_inner!((RNG <= RNG()
534 (unstable))); _for_each_inner!((RSA <= RSA(RSA : { bind_peri_interrupt,
535 enable_peri_interrupt, disable_peri_interrupt }) (unstable)));
536 _for_each_inner!((LPWR <= RTC_CNTL() (unstable))); _for_each_inner!((RTC_I2C <=
537 RTC_I2C() (unstable))); _for_each_inner!((RTC_IO <= RTC_IO() (unstable)));
538 _for_each_inner!((SDHOST <= SDHOST() (unstable))); _for_each_inner!((SENS <=
539 SENS() (unstable))); _for_each_inner!((SHA <= SHA() (unstable)));
540 _for_each_inner!((SLC <= SLC() (unstable))); _for_each_inner!((SLCHOST <=
541 SLCHOST() (unstable))); _for_each_inner!((SPI0 <= SPI0() (unstable)));
542 _for_each_inner!((SPI1 <= SPI1() (unstable))); _for_each_inner!((SPI2 <=
543 SPI2(SPI2_DMA : { bind_dma_interrupt, enable_dma_interrupt, disable_dma_interrupt
544 }, SPI2 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
545 }))); _for_each_inner!((SPI3 <= SPI3(SPI3_DMA : { bind_dma_interrupt,
546 enable_dma_interrupt, disable_dma_interrupt }, SPI3 : { bind_peri_interrupt,
547 enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((TIMG0 <=
548 TIMG0() (unstable))); _for_each_inner!((TIMG1 <= TIMG1() (unstable)));
549 _for_each_inner!((TWAI0 <= TWAI0() (unstable))); _for_each_inner!((UART0 <=
550 UART0(UART0 : { bind_peri_interrupt, enable_peri_interrupt,
551 disable_peri_interrupt }))); _for_each_inner!((UART1 <= UART1(UART1 : {
552 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })));
553 _for_each_inner!((UART2 <= UART2(UART2 : { bind_peri_interrupt,
554 enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((UHCI0 <=
555 UHCI0() (unstable))); _for_each_inner!((UHCI1 <= UHCI1() (unstable)));
556 _for_each_inner!((WIFI <= WIFI() (unstable))); _for_each_inner!((DMA_SPI2 <=
557 SPI2() (unstable))); _for_each_inner!((DMA_SPI3 <= SPI3() (unstable)));
558 _for_each_inner!((DMA_I2S0 <= I2S0() (unstable))); _for_each_inner!((DMA_I2S1 <=
559 I2S1() (unstable))); _for_each_inner!((ADC1 <= virtual() (unstable)));
560 _for_each_inner!((ADC2 <= virtual() (unstable))); _for_each_inner!((BT <=
561 virtual() (unstable))); _for_each_inner!((CPU_CTRL <= virtual() (unstable)));
562 _for_each_inner!((DAC1 <= virtual() (unstable))); _for_each_inner!((DAC2 <=
563 virtual() (unstable))); _for_each_inner!((FLASH <= virtual() (unstable)));
564 _for_each_inner!((PSRAM <= virtual() (unstable))); _for_each_inner!((SW_INTERRUPT
565 <= virtual() (unstable))); _for_each_inner!((TOUCH <= virtual() (unstable)));
566 _for_each_inner!((all(GPIO0 <= virtual()), (GPIO1 <= virtual()), (GPIO2 <=
567 virtual()), (GPIO3 <= virtual()), (GPIO4 <= virtual()), (GPIO5 <= virtual()),
568 (GPIO12 <= virtual()), (GPIO13 <= virtual()), (GPIO14 <= virtual()), (GPIO15 <=
569 virtual()), (GPIO16 <= virtual()), (GPIO17 <= virtual()), (GPIO18 <= virtual()),
570 (GPIO19 <= virtual()), (GPIO21 <= virtual()), (GPIO22 <= virtual()), (GPIO23 <=
571 virtual()), (GPIO25 <= virtual()), (GPIO26 <= virtual()), (GPIO27 <= virtual()),
572 (GPIO32 <= virtual()), (GPIO33 <= virtual()), (GPIO34 <= virtual()), (GPIO35 <=
573 virtual()), (GPIO36 <= virtual()), (GPIO37 <= virtual()), (GPIO38 <= virtual()),
574 (GPIO39 <= virtual()), (AES <= AES() (unstable)), (APB_CTRL <= APB_CTRL()
575 (unstable)), (BB <= BB() (unstable)), (DPORT <= DPORT() (unstable)), (SYSTEM <=
576 DPORT() (unstable)), (EFUSE <= EFUSE() (unstable)), (EMAC_DMA <= EMAC_DMA()
577 (unstable)), (EMAC_EXT <= EMAC_EXT() (unstable)), (EMAC_MAC <= EMAC_MAC()
578 (unstable)), (FLASH_ENCRYPTION <= FLASH_ENCRYPTION() (unstable)), (FRC_TIMER <=
579 FRC_TIMER() (unstable)), (GPIO <= GPIO() (unstable)), (GPIO_SD <= GPIO_SD()
580 (unstable)), (HINF <= HINF() (unstable)), (I2C0 <= I2C0(I2C_EXT0 : {
581 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (I2C1 <=
582 I2C1(I2C_EXT1 : { bind_peri_interrupt, enable_peri_interrupt,
583 disable_peri_interrupt })), (I2S0 <= I2S0(I2S0 : { bind_peri_interrupt,
584 enable_peri_interrupt, disable_peri_interrupt }) (unstable)), (I2S1 <= I2S1(I2S1
585 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })
586 (unstable)), (IO_MUX <= IO_MUX() (unstable)), (LEDC <= LEDC() (unstable)),
587 (MCPWM0 <= MCPWM0() (unstable)), (MCPWM1 <= MCPWM1() (unstable)), (NRX <= NRX()
588 (unstable)), (PCNT <= PCNT() (unstable)), (RMT <= RMT() (unstable)), (RNG <=
589 RNG() (unstable)), (RSA <= RSA(RSA : { bind_peri_interrupt,
590 enable_peri_interrupt, disable_peri_interrupt }) (unstable)), (LPWR <= RTC_CNTL()
591 (unstable)), (RTC_I2C <= RTC_I2C() (unstable)), (RTC_IO <= RTC_IO() (unstable)),
592 (SDHOST <= SDHOST() (unstable)), (SENS <= SENS() (unstable)), (SHA <= SHA()
593 (unstable)), (SLC <= SLC() (unstable)), (SLCHOST <= SLCHOST() (unstable)), (SPI0
594 <= SPI0() (unstable)), (SPI1 <= SPI1() (unstable)), (SPI2 <= SPI2(SPI2_DMA : {
595 bind_dma_interrupt, enable_dma_interrupt, disable_dma_interrupt }, SPI2 : {
596 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (SPI3 <=
597 SPI3(SPI3_DMA : { bind_dma_interrupt, enable_dma_interrupt, disable_dma_interrupt
598 }, SPI3 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
599 })), (TIMG0 <= TIMG0() (unstable)), (TIMG1 <= TIMG1() (unstable)), (TWAI0 <=
600 TWAI0() (unstable)), (UART0 <= UART0(UART0 : { bind_peri_interrupt,
601 enable_peri_interrupt, disable_peri_interrupt })), (UART1 <= UART1(UART1 : {
602 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (UART2 <=
603 UART2(UART2 : { bind_peri_interrupt, enable_peri_interrupt,
604 disable_peri_interrupt })), (UHCI0 <= UHCI0() (unstable)), (UHCI1 <= UHCI1()
605 (unstable)), (WIFI <= WIFI() (unstable)), (DMA_SPI2 <= SPI2() (unstable)),
606 (DMA_SPI3 <= SPI3() (unstable)), (DMA_I2S0 <= I2S0() (unstable)), (DMA_I2S1 <=
607 I2S1() (unstable)), (ADC1 <= virtual() (unstable)), (ADC2 <= virtual()
608 (unstable)), (BT <= virtual() (unstable)), (CPU_CTRL <= virtual() (unstable)),
609 (DAC1 <= virtual() (unstable)), (DAC2 <= virtual() (unstable)), (FLASH <=
610 virtual() (unstable)), (PSRAM <= virtual() (unstable)), (SW_INTERRUPT <=
611 virtual() (unstable)), (TOUCH <= virtual() (unstable))));
612 };
613}
614#[macro_export]
641#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
642macro_rules! for_each_gpio {
643 ($($pattern:tt => $code:tt;)*) => {
644 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
645 _for_each_inner!((0, GPIO0(_5 => EMAC_TX_CLK) (_1 => CLK_OUT1 _5 => EMAC_TX_CLK)
646 ([Input] [Output]))); _for_each_inner!((1, GPIO1(_5 => EMAC_RXD2) (_0 => U0TXD _1
647 => CLK_OUT3) ([Input] [Output]))); _for_each_inner!((2, GPIO2(_1 => HSPIWP _3 =>
648 HS2_DATA0 _4 => SD_DATA0) (_1 => HSPIWP _3 => HS2_DATA0 _4 => SD_DATA0) ([Input]
649 [Output]))); _for_each_inner!((3, GPIO3(_0 => U0RXD) (_1 => CLK_OUT2) ([Input]
650 [Output]))); _for_each_inner!((4, GPIO4(_1 => HSPIHD _3 => HS2_DATA1 _4 =>
651 SD_DATA1 _5 => EMAC_TX_ER) (_1 => HSPIHD _3 => HS2_DATA1 _4 => SD_DATA1 _5 =>
652 EMAC_TX_ER) ([Input] [Output]))); _for_each_inner!((5, GPIO5(_1 => VSPICS0 _3 =>
653 HS1_DATA6 _5 => EMAC_RX_CLK) (_1 => VSPICS0 _3 => HS1_DATA6) ([Input]
654 [Output]))); _for_each_inner!((12, GPIO12(_0 => MTDI _1 => HSPIQ _3 => HS2_DATA2
655 _4 => SD_DATA2) (_1 => HSPIQ _3 => HS2_DATA2 _4 => SD_DATA2 _5 => EMAC_TXD3)
656 ([Input] [Output]))); _for_each_inner!((13, GPIO13(_0 => MTCK _1 => HSPID _3 =>
657 HS2_DATA3 _4 => SD_DATA3 _5 => EMAC_RX_ER) (_1 => HSPID _3 => HS2_DATA3 _4 =>
658 SD_DATA3 _5 => EMAC_RX_ER) ([Input] [Output]))); _for_each_inner!((14, GPIO14(_0
659 => MTMS _1 => HSPICLK) (_1 => HSPICLK _3 => HS2_CLK _4 => SD_CLK _5 => EMAC_TXD2)
660 ([Input] [Output]))); _for_each_inner!((15, GPIO15(_1 => HSPICS0 _4 => SD_CMD _5
661 => EMAC_RXD3) (_0 => MTDO _1 => HSPICS0 _3 => HS2_CMD _4 => SD_CMD) ([Input]
662 [Output]))); _for_each_inner!((16, GPIO16(_3 => HS1_DATA4 _4 => U2RXD) (_3 =>
663 HS1_DATA4 _5 => EMAC_CLK_OUT) ([Input] [Output]))); _for_each_inner!((17,
664 GPIO17(_3 => HS1_DATA5) (_3 => HS1_DATA5 _4 => U2TXD _5 => EMAC_CLK_180) ([Input]
665 [Output]))); _for_each_inner!((18, GPIO18(_1 => VSPICLK _3 => HS1_DATA7) (_1 =>
666 VSPICLK _3 => HS1_DATA7) ([Input] [Output]))); _for_each_inner!((19, GPIO19(_1 =>
667 VSPIQ _3 => U0CTS) (_1 => VSPIQ _5 => EMAC_TXD0) ([Input] [Output])));
668 _for_each_inner!((21, GPIO21(_1 => VSPIHD) (_1 => VSPIHD _5 => EMAC_TX_EN)
669 ([Input] [Output]))); _for_each_inner!((22, GPIO22(_1 => VSPIWP) (_1 => VSPIWP _3
670 => U0RTS _5 => EMAC_TXD1) ([Input] [Output]))); _for_each_inner!((23, GPIO23(_1
671 => VSPID) (_1 => VSPID _3 => HS1_STROBE) ([Input] [Output])));
672 _for_each_inner!((25, GPIO25(_5 => EMAC_RXD0) () ([Input] [Output])));
673 _for_each_inner!((26, GPIO26(_5 => EMAC_RXD1) () ([Input] [Output])));
674 _for_each_inner!((27, GPIO27(_5 => EMAC_RX_DV) () ([Input] [Output])));
675 _for_each_inner!((32, GPIO32() () ([Input] [Output]))); _for_each_inner!((33,
676 GPIO33() () ([Input] [Output]))); _for_each_inner!((34, GPIO34() () ([Input]
677 []))); _for_each_inner!((35, GPIO35() () ([Input] []))); _for_each_inner!((36,
678 GPIO36() () ([Input] []))); _for_each_inner!((37, GPIO37() () ([Input] [])));
679 _for_each_inner!((38, GPIO38() () ([Input] []))); _for_each_inner!((39, GPIO39()
680 () ([Input] []))); _for_each_inner!((all(0, GPIO0(_5 => EMAC_TX_CLK) (_1 =>
681 CLK_OUT1 _5 => EMAC_TX_CLK) ([Input] [Output])), (1, GPIO1(_5 => EMAC_RXD2) (_0
682 => U0TXD _1 => CLK_OUT3) ([Input] [Output])), (2, GPIO2(_1 => HSPIWP _3 =>
683 HS2_DATA0 _4 => SD_DATA0) (_1 => HSPIWP _3 => HS2_DATA0 _4 => SD_DATA0) ([Input]
684 [Output])), (3, GPIO3(_0 => U0RXD) (_1 => CLK_OUT2) ([Input] [Output])), (4,
685 GPIO4(_1 => HSPIHD _3 => HS2_DATA1 _4 => SD_DATA1 _5 => EMAC_TX_ER) (_1 => HSPIHD
686 _3 => HS2_DATA1 _4 => SD_DATA1 _5 => EMAC_TX_ER) ([Input] [Output])), (5,
687 GPIO5(_1 => VSPICS0 _3 => HS1_DATA6 _5 => EMAC_RX_CLK) (_1 => VSPICS0 _3 =>
688 HS1_DATA6) ([Input] [Output])), (12, GPIO12(_0 => MTDI _1 => HSPIQ _3 =>
689 HS2_DATA2 _4 => SD_DATA2) (_1 => HSPIQ _3 => HS2_DATA2 _4 => SD_DATA2 _5 =>
690 EMAC_TXD3) ([Input] [Output])), (13, GPIO13(_0 => MTCK _1 => HSPID _3 =>
691 HS2_DATA3 _4 => SD_DATA3 _5 => EMAC_RX_ER) (_1 => HSPID _3 => HS2_DATA3 _4 =>
692 SD_DATA3 _5 => EMAC_RX_ER) ([Input] [Output])), (14, GPIO14(_0 => MTMS _1 =>
693 HSPICLK) (_1 => HSPICLK _3 => HS2_CLK _4 => SD_CLK _5 => EMAC_TXD2) ([Input]
694 [Output])), (15, GPIO15(_1 => HSPICS0 _4 => SD_CMD _5 => EMAC_RXD3) (_0 => MTDO
695 _1 => HSPICS0 _3 => HS2_CMD _4 => SD_CMD) ([Input] [Output])), (16, GPIO16(_3 =>
696 HS1_DATA4 _4 => U2RXD) (_3 => HS1_DATA4 _5 => EMAC_CLK_OUT) ([Input] [Output])),
697 (17, GPIO17(_3 => HS1_DATA5) (_3 => HS1_DATA5 _4 => U2TXD _5 => EMAC_CLK_180)
698 ([Input] [Output])), (18, GPIO18(_1 => VSPICLK _3 => HS1_DATA7) (_1 => VSPICLK _3
699 => HS1_DATA7) ([Input] [Output])), (19, GPIO19(_1 => VSPIQ _3 => U0CTS) (_1 =>
700 VSPIQ _5 => EMAC_TXD0) ([Input] [Output])), (21, GPIO21(_1 => VSPIHD) (_1 =>
701 VSPIHD _5 => EMAC_TX_EN) ([Input] [Output])), (22, GPIO22(_1 => VSPIWP) (_1 =>
702 VSPIWP _3 => U0RTS _5 => EMAC_TXD1) ([Input] [Output])), (23, GPIO23(_1 => VSPID)
703 (_1 => VSPID _3 => HS1_STROBE) ([Input] [Output])), (25, GPIO25(_5 => EMAC_RXD0)
704 () ([Input] [Output])), (26, GPIO26(_5 => EMAC_RXD1) () ([Input] [Output])), (27,
705 GPIO27(_5 => EMAC_RX_DV) () ([Input] [Output])), (32, GPIO32() () ([Input]
706 [Output])), (33, GPIO33() () ([Input] [Output])), (34, GPIO34() () ([Input] [])),
707 (35, GPIO35() () ([Input] [])), (36, GPIO36() () ([Input] [])), (37, GPIO37() ()
708 ([Input] [])), (38, GPIO38() () ([Input] [])), (39, GPIO39() () ([Input] []))));
709 };
710}
711#[macro_export]
738#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
739macro_rules! for_each_analog_function {
740 ($($pattern:tt => $code:tt;)*) => {
741 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
742 _for_each_inner!((ADC2_CH1, GPIO0)); _for_each_inner!((TOUCH1, GPIO0));
743 _for_each_inner!((ADC2_CH2, GPIO2)); _for_each_inner!((TOUCH2, GPIO2));
744 _for_each_inner!((ADC2_CH0, GPIO4)); _for_each_inner!((TOUCH0, GPIO4));
745 _for_each_inner!((ADC2_CH5, GPIO12)); _for_each_inner!((TOUCH5, GPIO12));
746 _for_each_inner!((ADC2_CH4, GPIO13)); _for_each_inner!((TOUCH4, GPIO13));
747 _for_each_inner!((ADC2_CH6, GPIO14)); _for_each_inner!((TOUCH6, GPIO14));
748 _for_each_inner!((ADC2_CH3, GPIO15)); _for_each_inner!((TOUCH3, GPIO15));
749 _for_each_inner!((DAC1, GPIO25)); _for_each_inner!((ADC2_CH8, GPIO25));
750 _for_each_inner!((DAC2, GPIO26)); _for_each_inner!((ADC2_CH9, GPIO26));
751 _for_each_inner!((ADC2_CH7, GPIO27)); _for_each_inner!((TOUCH7, GPIO27));
752 _for_each_inner!((XTAL_32K_P, GPIO32)); _for_each_inner!((ADC1_CH4, GPIO32));
753 _for_each_inner!((TOUCH9, GPIO32)); _for_each_inner!((XTAL_32K_N, GPIO33));
754 _for_each_inner!((ADC1_CH5, GPIO33)); _for_each_inner!((TOUCH8, GPIO33));
755 _for_each_inner!((ADC1_CH6, GPIO34)); _for_each_inner!((ADC1_CH7, GPIO35));
756 _for_each_inner!((ADC_H, GPIO36)); _for_each_inner!((ADC1_CH0, GPIO36));
757 _for_each_inner!((ADC_H, GPIO37)); _for_each_inner!((ADC1_CH1, GPIO37));
758 _for_each_inner!((ADC_H, GPIO38)); _for_each_inner!((ADC1_CH2, GPIO38));
759 _for_each_inner!((ADC_H, GPIO39)); _for_each_inner!((ADC1_CH3, GPIO39));
760 _for_each_inner!(((ADC2_CH1, ADCn_CHm, 2, 1), GPIO0)); _for_each_inner!(((TOUCH1,
761 TOUCHn, 1), GPIO0)); _for_each_inner!(((ADC2_CH2, ADCn_CHm, 2, 2), GPIO2));
762 _for_each_inner!(((TOUCH2, TOUCHn, 2), GPIO2)); _for_each_inner!(((ADC2_CH0,
763 ADCn_CHm, 2, 0), GPIO4)); _for_each_inner!(((TOUCH0, TOUCHn, 0), GPIO4));
764 _for_each_inner!(((ADC2_CH5, ADCn_CHm, 2, 5), GPIO12));
765 _for_each_inner!(((TOUCH5, TOUCHn, 5), GPIO12)); _for_each_inner!(((ADC2_CH4,
766 ADCn_CHm, 2, 4), GPIO13)); _for_each_inner!(((TOUCH4, TOUCHn, 4), GPIO13));
767 _for_each_inner!(((ADC2_CH6, ADCn_CHm, 2, 6), GPIO14));
768 _for_each_inner!(((TOUCH6, TOUCHn, 6), GPIO14)); _for_each_inner!(((ADC2_CH3,
769 ADCn_CHm, 2, 3), GPIO15)); _for_each_inner!(((TOUCH3, TOUCHn, 3), GPIO15));
770 _for_each_inner!(((DAC1, DACn, 1), GPIO25)); _for_each_inner!(((ADC2_CH8,
771 ADCn_CHm, 2, 8), GPIO25)); _for_each_inner!(((DAC2, DACn, 2), GPIO26));
772 _for_each_inner!(((ADC2_CH9, ADCn_CHm, 2, 9), GPIO26));
773 _for_each_inner!(((ADC2_CH7, ADCn_CHm, 2, 7), GPIO27));
774 _for_each_inner!(((TOUCH7, TOUCHn, 7), GPIO27)); _for_each_inner!(((ADC1_CH4,
775 ADCn_CHm, 1, 4), GPIO32)); _for_each_inner!(((TOUCH9, TOUCHn, 9), GPIO32));
776 _for_each_inner!(((ADC1_CH5, ADCn_CHm, 1, 5), GPIO33));
777 _for_each_inner!(((TOUCH8, TOUCHn, 8), GPIO33)); _for_each_inner!(((ADC1_CH6,
778 ADCn_CHm, 1, 6), GPIO34)); _for_each_inner!(((ADC1_CH7, ADCn_CHm, 1, 7),
779 GPIO35)); _for_each_inner!(((ADC1_CH0, ADCn_CHm, 1, 0), GPIO36));
780 _for_each_inner!(((ADC1_CH1, ADCn_CHm, 1, 1), GPIO37));
781 _for_each_inner!(((ADC1_CH2, ADCn_CHm, 1, 2), GPIO38));
782 _for_each_inner!(((ADC1_CH3, ADCn_CHm, 1, 3), GPIO39));
783 _for_each_inner!((all(ADC2_CH1, GPIO0), (TOUCH1, GPIO0), (ADC2_CH2, GPIO2),
784 (TOUCH2, GPIO2), (ADC2_CH0, GPIO4), (TOUCH0, GPIO4), (ADC2_CH5, GPIO12), (TOUCH5,
785 GPIO12), (ADC2_CH4, GPIO13), (TOUCH4, GPIO13), (ADC2_CH6, GPIO14), (TOUCH6,
786 GPIO14), (ADC2_CH3, GPIO15), (TOUCH3, GPIO15), (DAC1, GPIO25), (ADC2_CH8,
787 GPIO25), (DAC2, GPIO26), (ADC2_CH9, GPIO26), (ADC2_CH7, GPIO27), (TOUCH7,
788 GPIO27), (XTAL_32K_P, GPIO32), (ADC1_CH4, GPIO32), (TOUCH9, GPIO32), (XTAL_32K_N,
789 GPIO33), (ADC1_CH5, GPIO33), (TOUCH8, GPIO33), (ADC1_CH6, GPIO34), (ADC1_CH7,
790 GPIO35), (ADC_H, GPIO36), (ADC1_CH0, GPIO36), (ADC_H, GPIO37), (ADC1_CH1,
791 GPIO37), (ADC_H, GPIO38), (ADC1_CH2, GPIO38), (ADC_H, GPIO39), (ADC1_CH3,
792 GPIO39))); _for_each_inner!((all_expanded((ADC2_CH1, ADCn_CHm, 2, 1), GPIO0),
793 ((TOUCH1, TOUCHn, 1), GPIO0), ((ADC2_CH2, ADCn_CHm, 2, 2), GPIO2), ((TOUCH2,
794 TOUCHn, 2), GPIO2), ((ADC2_CH0, ADCn_CHm, 2, 0), GPIO4), ((TOUCH0, TOUCHn, 0),
795 GPIO4), ((ADC2_CH5, ADCn_CHm, 2, 5), GPIO12), ((TOUCH5, TOUCHn, 5), GPIO12),
796 ((ADC2_CH4, ADCn_CHm, 2, 4), GPIO13), ((TOUCH4, TOUCHn, 4), GPIO13), ((ADC2_CH6,
797 ADCn_CHm, 2, 6), GPIO14), ((TOUCH6, TOUCHn, 6), GPIO14), ((ADC2_CH3, ADCn_CHm, 2,
798 3), GPIO15), ((TOUCH3, TOUCHn, 3), GPIO15), ((DAC1, DACn, 1), GPIO25),
799 ((ADC2_CH8, ADCn_CHm, 2, 8), GPIO25), ((DAC2, DACn, 2), GPIO26), ((ADC2_CH9,
800 ADCn_CHm, 2, 9), GPIO26), ((ADC2_CH7, ADCn_CHm, 2, 7), GPIO27), ((TOUCH7, TOUCHn,
801 7), GPIO27), ((ADC1_CH4, ADCn_CHm, 1, 4), GPIO32), ((TOUCH9, TOUCHn, 9), GPIO32),
802 ((ADC1_CH5, ADCn_CHm, 1, 5), GPIO33), ((TOUCH8, TOUCHn, 8), GPIO33), ((ADC1_CH6,
803 ADCn_CHm, 1, 6), GPIO34), ((ADC1_CH7, ADCn_CHm, 1, 7), GPIO35), ((ADC1_CH0,
804 ADCn_CHm, 1, 0), GPIO36), ((ADC1_CH1, ADCn_CHm, 1, 1), GPIO37), ((ADC1_CH2,
805 ADCn_CHm, 1, 2), GPIO38), ((ADC1_CH3, ADCn_CHm, 1, 3), GPIO39)));
806 };
807}
808#[macro_export]
835#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
836macro_rules! for_each_lp_function {
837 ($($pattern:tt => $code:tt;)*) => {
838 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
839 _for_each_inner!((RTC_GPIO11, GPIO0)); _for_each_inner!((SAR_I2C_SDA, GPIO0));
840 _for_each_inner!((RTC_GPIO12, GPIO2)); _for_each_inner!((SAR_I2C_SCL, GPIO2));
841 _for_each_inner!((RTC_GPIO10, GPIO4)); _for_each_inner!((SAR_I2C_SCL, GPIO4));
842 _for_each_inner!((RTC_GPIO15, GPIO12)); _for_each_inner!((RTC_GPIO14, GPIO13));
843 _for_each_inner!((RTC_GPIO16, GPIO14)); _for_each_inner!((RTC_GPIO13, GPIO15));
844 _for_each_inner!((SAR_I2C_SDA, GPIO15)); _for_each_inner!((RTC_GPIO6, GPIO25));
845 _for_each_inner!((RTC_GPIO7, GPIO26)); _for_each_inner!((RTC_GPIO17, GPIO27));
846 _for_each_inner!((RTC_GPIO9, GPIO32)); _for_each_inner!((RTC_GPIO8, GPIO33));
847 _for_each_inner!((RTC_GPIO4, GPIO34)); _for_each_inner!((RTC_GPIO5, GPIO35));
848 _for_each_inner!((RTC_GPIO0, GPIO36)); _for_each_inner!((RTC_GPIO1, GPIO37));
849 _for_each_inner!((RTC_GPIO2, GPIO38)); _for_each_inner!((RTC_GPIO3, GPIO39));
850 _for_each_inner!(((RTC_GPIO11, RTC_GPIOn, 11), GPIO0));
851 _for_each_inner!(((RTC_GPIO12, RTC_GPIOn, 12), GPIO2));
852 _for_each_inner!(((RTC_GPIO10, RTC_GPIOn, 10), GPIO4));
853 _for_each_inner!(((RTC_GPIO15, RTC_GPIOn, 15), GPIO12));
854 _for_each_inner!(((RTC_GPIO14, RTC_GPIOn, 14), GPIO13));
855 _for_each_inner!(((RTC_GPIO16, RTC_GPIOn, 16), GPIO14));
856 _for_each_inner!(((RTC_GPIO13, RTC_GPIOn, 13), GPIO15));
857 _for_each_inner!(((RTC_GPIO6, RTC_GPIOn, 6), GPIO25));
858 _for_each_inner!(((RTC_GPIO7, RTC_GPIOn, 7), GPIO26));
859 _for_each_inner!(((RTC_GPIO17, RTC_GPIOn, 17), GPIO27));
860 _for_each_inner!(((RTC_GPIO9, RTC_GPIOn, 9), GPIO32));
861 _for_each_inner!(((RTC_GPIO8, RTC_GPIOn, 8), GPIO33));
862 _for_each_inner!(((RTC_GPIO4, RTC_GPIOn, 4), GPIO34));
863 _for_each_inner!(((RTC_GPIO5, RTC_GPIOn, 5), GPIO35));
864 _for_each_inner!(((RTC_GPIO0, RTC_GPIOn, 0), GPIO36));
865 _for_each_inner!(((RTC_GPIO1, RTC_GPIOn, 1), GPIO37));
866 _for_each_inner!(((RTC_GPIO2, RTC_GPIOn, 2), GPIO38));
867 _for_each_inner!(((RTC_GPIO3, RTC_GPIOn, 3), GPIO39));
868 _for_each_inner!((all(RTC_GPIO11, GPIO0), (SAR_I2C_SDA, GPIO0), (RTC_GPIO12,
869 GPIO2), (SAR_I2C_SCL, GPIO2), (RTC_GPIO10, GPIO4), (SAR_I2C_SCL, GPIO4),
870 (RTC_GPIO15, GPIO12), (RTC_GPIO14, GPIO13), (RTC_GPIO16, GPIO14), (RTC_GPIO13,
871 GPIO15), (SAR_I2C_SDA, GPIO15), (RTC_GPIO6, GPIO25), (RTC_GPIO7, GPIO26),
872 (RTC_GPIO17, GPIO27), (RTC_GPIO9, GPIO32), (RTC_GPIO8, GPIO33), (RTC_GPIO4,
873 GPIO34), (RTC_GPIO5, GPIO35), (RTC_GPIO0, GPIO36), (RTC_GPIO1, GPIO37),
874 (RTC_GPIO2, GPIO38), (RTC_GPIO3, GPIO39)));
875 _for_each_inner!((all_expanded((RTC_GPIO11, RTC_GPIOn, 11), GPIO0), ((RTC_GPIO12,
876 RTC_GPIOn, 12), GPIO2), ((RTC_GPIO10, RTC_GPIOn, 10), GPIO4), ((RTC_GPIO15,
877 RTC_GPIOn, 15), GPIO12), ((RTC_GPIO14, RTC_GPIOn, 14), GPIO13), ((RTC_GPIO16,
878 RTC_GPIOn, 16), GPIO14), ((RTC_GPIO13, RTC_GPIOn, 13), GPIO15), ((RTC_GPIO6,
879 RTC_GPIOn, 6), GPIO25), ((RTC_GPIO7, RTC_GPIOn, 7), GPIO26), ((RTC_GPIO17,
880 RTC_GPIOn, 17), GPIO27), ((RTC_GPIO9, RTC_GPIOn, 9), GPIO32), ((RTC_GPIO8,
881 RTC_GPIOn, 8), GPIO33), ((RTC_GPIO4, RTC_GPIOn, 4), GPIO34), ((RTC_GPIO5,
882 RTC_GPIOn, 5), GPIO35), ((RTC_GPIO0, RTC_GPIOn, 0), GPIO36), ((RTC_GPIO1,
883 RTC_GPIOn, 1), GPIO37), ((RTC_GPIO2, RTC_GPIOn, 2), GPIO38), ((RTC_GPIO3,
884 RTC_GPIOn, 3), GPIO39)));
885 };
886}
887#[macro_export]
891#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
892macro_rules! define_io_mux_signals {
893 () => {
894 #[allow(non_camel_case_types, clippy::upper_case_acronyms)]
895 #[derive(Debug, PartialEq, Copy, Clone)]
896 #[cfg_attr(feature = "defmt", derive(defmt::Format))]
897 #[doc(hidden)]
898 pub enum InputSignal {
899 SPICLK = 0,
900 SPIQ = 1,
901 SPID = 2,
902 SPIHD = 3,
903 SPIWP = 4,
904 SPICS0 = 5,
905 SPICS1 = 6,
906 SPICS2 = 7,
907 HSPICLK = 8,
908 HSPIQ = 9,
909 HSPID = 10,
910 HSPICS0 = 11,
911 HSPIHD = 12,
912 HSPIWP = 13,
913 U0RXD = 14,
914 U0CTS = 15,
915 U0DSR = 16,
916 U1RXD = 17,
917 U1CTS = 18,
918 I2S0O_BCK = 23,
919 I2S1O_BCK = 24,
920 I2S0O_WS = 25,
921 I2S1O_WS = 26,
922 I2S0I_BCK = 27,
923 I2S0I_WS = 28,
924 I2CEXT0_SCL = 29,
925 I2CEXT0_SDA = 30,
926 PWM0_SYNC0 = 31,
927 PWM0_SYNC1 = 32,
928 PWM0_SYNC2 = 33,
929 PWM0_F0 = 34,
930 PWM0_F1 = 35,
931 PWM0_F2 = 36,
932 PCNT0_SIG_CH0 = 39,
933 PCNT0_SIG_CH1 = 40,
934 PCNT0_CTRL_CH0 = 41,
935 PCNT0_CTRL_CH1 = 42,
936 PCNT1_SIG_CH0 = 43,
937 PCNT1_SIG_CH1 = 44,
938 PCNT1_CTRL_CH0 = 45,
939 PCNT1_CTRL_CH1 = 46,
940 PCNT2_SIG_CH0 = 47,
941 PCNT2_SIG_CH1 = 48,
942 PCNT2_CTRL_CH0 = 49,
943 PCNT2_CTRL_CH1 = 50,
944 PCNT3_SIG_CH0 = 51,
945 PCNT3_SIG_CH1 = 52,
946 PCNT3_CTRL_CH0 = 53,
947 PCNT3_CTRL_CH1 = 54,
948 PCNT4_SIG_CH0 = 55,
949 PCNT4_SIG_CH1 = 56,
950 PCNT4_CTRL_CH0 = 57,
951 PCNT4_CTRL_CH1 = 58,
952 HSPICS1 = 61,
953 HSPICS2 = 62,
954 VSPICLK = 63,
955 VSPIQ = 64,
956 VSPID = 65,
957 VSPIHD = 66,
958 VSPIWP = 67,
959 VSPICS0 = 68,
960 VSPICS1 = 69,
961 VSPICS2 = 70,
962 PCNT5_SIG_CH0 = 71,
963 PCNT5_SIG_CH1 = 72,
964 PCNT5_CTRL_CH0 = 73,
965 PCNT5_CTRL_CH1 = 74,
966 PCNT6_SIG_CH0 = 75,
967 PCNT6_SIG_CH1 = 76,
968 PCNT6_CTRL_CH0 = 77,
969 PCNT6_CTRL_CH1 = 78,
970 PCNT7_SIG_CH0 = 79,
971 PCNT7_SIG_CH1 = 80,
972 PCNT7_CTRL_CH0 = 81,
973 PCNT7_CTRL_CH1 = 82,
974 RMT_SIG_0 = 83,
975 RMT_SIG_1 = 84,
976 RMT_SIG_2 = 85,
977 RMT_SIG_3 = 86,
978 RMT_SIG_4 = 87,
979 RMT_SIG_5 = 88,
980 RMT_SIG_6 = 89,
981 RMT_SIG_7 = 90,
982 TWAI_RX = 94,
983 I2CEXT1_SCL = 95,
984 I2CEXT1_SDA = 96,
985 HOST_CARD_DETECT_N_1 = 97,
986 HOST_CARD_DETECT_N_2 = 98,
987 HOST_CARD_WRITE_PRT_1 = 99,
988 HOST_CARD_WRITE_PRT_2 = 100,
989 HOST_CARD_INT_N_1 = 101,
990 HOST_CARD_INT_N_2 = 102,
991 PWM1_SYNC0 = 103,
992 PWM1_SYNC1 = 104,
993 PWM1_SYNC2 = 105,
994 PWM1_F0 = 106,
995 PWM1_F1 = 107,
996 PWM1_F2 = 108,
997 PWM0_CAP0 = 109,
998 PWM0_CAP1 = 110,
999 PWM0_CAP2 = 111,
1000 PWM1_CAP0 = 112,
1001 PWM1_CAP1 = 113,
1002 PWM1_CAP2 = 114,
1003 I2S0I_DATA_0 = 140,
1004 I2S0I_DATA_1 = 141,
1005 I2S0I_DATA_2 = 142,
1006 I2S0I_DATA_3 = 143,
1007 I2S0I_DATA_4 = 144,
1008 I2S0I_DATA_5 = 145,
1009 I2S0I_DATA_6 = 146,
1010 I2S0I_DATA_7 = 147,
1011 I2S0I_DATA_8 = 148,
1012 I2S0I_DATA_9 = 149,
1013 I2S0I_DATA_10 = 150,
1014 I2S0I_DATA_11 = 151,
1015 I2S0I_DATA_12 = 152,
1016 I2S0I_DATA_13 = 153,
1017 I2S0I_DATA_14 = 154,
1018 I2S0I_DATA_15 = 155,
1019 I2S1I_BCK = 164,
1020 I2S1I_WS = 165,
1021 I2S1I_DATA_0 = 166,
1022 I2S1I_DATA_1 = 167,
1023 I2S1I_DATA_2 = 168,
1024 I2S1I_DATA_3 = 169,
1025 I2S1I_DATA_4 = 170,
1026 I2S1I_DATA_5 = 171,
1027 I2S1I_DATA_6 = 172,
1028 I2S1I_DATA_7 = 173,
1029 I2S1I_DATA_8 = 174,
1030 I2S1I_DATA_9 = 175,
1031 I2S1I_DATA_10 = 176,
1032 I2S1I_DATA_11 = 177,
1033 I2S1I_DATA_12 = 178,
1034 I2S1I_DATA_13 = 179,
1035 I2S1I_DATA_14 = 180,
1036 I2S1I_DATA_15 = 181,
1037 I2S0I_H_SYNC = 190,
1038 I2S0I_V_SYNC = 191,
1039 I2S0I_H_ENABLE = 192,
1040 I2S1I_H_SYNC = 193,
1041 I2S1I_V_SYNC = 194,
1042 I2S1I_H_ENABLE = 195,
1043 U2RXD = 198,
1044 U2CTS = 199,
1045 EMAC_MDC = 200,
1046 EMAC_MDI = 201,
1047 EMAC_CRS = 202,
1048 EMAC_COL = 203,
1049 PCMFSYNC = 204,
1050 PCMCLK = 205,
1051 PCMDIN = 206,
1052 SD_CMD,
1053 SD_DATA0,
1054 SD_DATA1,
1055 SD_DATA2,
1056 SD_DATA3,
1057 HS1_DATA0,
1058 HS1_DATA1,
1059 HS1_DATA2,
1060 HS1_DATA3,
1061 HS1_DATA4,
1062 HS1_DATA5,
1063 HS1_DATA6,
1064 HS1_DATA7,
1065 HS2_DATA0,
1066 HS2_DATA1,
1067 HS2_DATA2,
1068 HS2_DATA3,
1069 EMAC_TX_CLK,
1070 EMAC_RXD2,
1071 EMAC_TX_ER,
1072 EMAC_RX_CLK,
1073 EMAC_RX_ER,
1074 EMAC_RXD3,
1075 EMAC_RXD0,
1076 EMAC_RXD1,
1077 EMAC_RX_DV,
1078 MTDI,
1079 MTCK,
1080 MTMS,
1081 }
1082 #[allow(non_camel_case_types, clippy::upper_case_acronyms)]
1083 #[derive(Debug, PartialEq, Copy, Clone)]
1084 #[cfg_attr(feature = "defmt", derive(defmt::Format))]
1085 #[doc(hidden)]
1086 pub enum OutputSignal {
1087 SPICLK = 0,
1088 SPIQ = 1,
1089 SPID = 2,
1090 SPIHD = 3,
1091 SPIWP = 4,
1092 SPICS0 = 5,
1093 SPICS1 = 6,
1094 SPICS2 = 7,
1095 HSPICLK = 8,
1096 HSPIQ = 9,
1097 HSPID = 10,
1098 HSPICS0 = 11,
1099 HSPIHD = 12,
1100 HSPIWP = 13,
1101 U0TXD = 14,
1102 U0RTS = 15,
1103 U0DTR = 16,
1104 U1TXD = 17,
1105 U1RTS = 18,
1106 I2S0O_BCK = 23,
1107 I2S1O_BCK = 24,
1108 I2S0O_WS = 25,
1109 I2S1O_WS = 26,
1110 I2S0I_BCK = 27,
1111 I2S0I_WS = 28,
1112 I2CEXT0_SCL = 29,
1113 I2CEXT0_SDA = 30,
1114 SDIO_TOHOSTT = 31,
1115 PWM0_0A = 32,
1116 PWM0_0B = 33,
1117 PWM0_1A = 34,
1118 PWM0_1B = 35,
1119 PWM0_2A = 36,
1120 PWM0_2B = 37,
1121 HSPICS1 = 61,
1122 HSPICS2 = 62,
1123 VSPICLK = 63,
1124 VSPIQ = 64,
1125 VSPID = 65,
1126 VSPIHD = 66,
1127 VSPIWP = 67,
1128 VSPICS0 = 68,
1129 VSPICS1 = 69,
1130 VSPICS2 = 70,
1131 LEDC_HS_SIG0 = 71,
1132 LEDC_HS_SIG1 = 72,
1133 LEDC_HS_SIG2 = 73,
1134 LEDC_HS_SIG3 = 74,
1135 LEDC_HS_SIG4 = 75,
1136 LEDC_HS_SIG5 = 76,
1137 LEDC_HS_SIG6 = 77,
1138 LEDC_HS_SIG7 = 78,
1139 LEDC_LS_SIG0 = 79,
1140 LEDC_LS_SIG1 = 80,
1141 LEDC_LS_SIG2 = 81,
1142 LEDC_LS_SIG3 = 82,
1143 LEDC_LS_SIG4 = 83,
1144 LEDC_LS_SIG5 = 84,
1145 LEDC_LS_SIG6 = 85,
1146 LEDC_LS_SIG7 = 86,
1147 RMT_SIG_0 = 87,
1148 RMT_SIG_1 = 88,
1149 RMT_SIG_2 = 89,
1150 RMT_SIG_3 = 90,
1151 RMT_SIG_4 = 91,
1152 RMT_SIG_5 = 92,
1153 RMT_SIG_6 = 93,
1154 RMT_SIG_7 = 94,
1155 I2CEXT1_SCL = 95,
1156 I2CEXT1_SDA = 96,
1157 HOST_CCMD_OD_PULLUP_EN_N = 97,
1158 HOST_RST_N_1 = 98,
1159 HOST_RST_N_2 = 99,
1160 GPIO_SD0 = 100,
1161 GPIO_SD1 = 101,
1162 GPIO_SD2 = 102,
1163 GPIO_SD3 = 103,
1164 GPIO_SD4 = 104,
1165 GPIO_SD5 = 105,
1166 GPIO_SD6 = 106,
1167 GPIO_SD7 = 107,
1168 PWM1_0A = 108,
1169 PWM1_0B = 109,
1170 PWM1_1A = 110,
1171 PWM1_1B = 111,
1172 PWM1_2A = 112,
1173 PWM1_2B = 113,
1174 TWAI_TX = 123,
1175 TWAI_BUS_OFF_ON = 124,
1176 TWAI_CLKOUT = 125,
1177 I2S0O_DATA_0 = 140,
1178 I2S0O_DATA_1 = 141,
1179 I2S0O_DATA_2 = 142,
1180 I2S0O_DATA_3 = 143,
1181 I2S0O_DATA_4 = 144,
1182 I2S0O_DATA_5 = 145,
1183 I2S0O_DATA_6 = 146,
1184 I2S0O_DATA_7 = 147,
1185 I2S0O_DATA_8 = 148,
1186 I2S0O_DATA_9 = 149,
1187 I2S0O_DATA_10 = 150,
1188 I2S0O_DATA_11 = 151,
1189 I2S0O_DATA_12 = 152,
1190 I2S0O_DATA_13 = 153,
1191 I2S0O_DATA_14 = 154,
1192 I2S0O_DATA_15 = 155,
1193 I2S0O_DATA_16 = 156,
1194 I2S0O_DATA_17 = 157,
1195 I2S0O_DATA_18 = 158,
1196 I2S0O_DATA_19 = 159,
1197 I2S0O_DATA_20 = 160,
1198 I2S0O_DATA_21 = 161,
1199 I2S0O_DATA_22 = 162,
1200 I2S0O_DATA_23 = 163,
1201 I2S1I_BCK = 164,
1202 I2S1I_WS = 165,
1203 I2S1O_DATA_0 = 166,
1204 I2S1O_DATA_1 = 167,
1205 I2S1O_DATA_2 = 168,
1206 I2S1O_DATA_3 = 169,
1207 I2S1O_DATA_4 = 170,
1208 I2S1O_DATA_5 = 171,
1209 I2S1O_DATA_6 = 172,
1210 I2S1O_DATA_7 = 173,
1211 I2S1O_DATA_8 = 174,
1212 I2S1O_DATA_9 = 175,
1213 I2S1O_DATA_10 = 176,
1214 I2S1O_DATA_11 = 177,
1215 I2S1O_DATA_12 = 178,
1216 I2S1O_DATA_13 = 179,
1217 I2S1O_DATA_14 = 180,
1218 I2S1O_DATA_15 = 181,
1219 I2S1O_DATA_16 = 182,
1220 I2S1O_DATA_17 = 183,
1221 I2S1O_DATA_18 = 184,
1222 I2S1O_DATA_19 = 185,
1223 I2S1O_DATA_20 = 186,
1224 I2S1O_DATA_21 = 187,
1225 I2S1O_DATA_22 = 188,
1226 I2S1O_DATA_23 = 189,
1227 U2TXD = 198,
1228 U2RTS = 199,
1229 EMAC_MDC = 200,
1230 EMAC_MDO = 201,
1231 EMAC_CRS = 202,
1232 EMAC_COL = 203,
1233 BT_AUDIO0RQ = 204,
1234 BT_AUDIO1RQ = 205,
1235 BT_AUDIO2RQ = 206,
1236 BLE_AUDIO0RQ = 207,
1237 BLE_AUDIO1RQ = 208,
1238 BLE_AUDIO2RQ = 209,
1239 PCMFSYNC = 210,
1240 PCMCLK = 211,
1241 PCMDOUT = 212,
1242 BLE_AUDIO_SYNC0_P = 213,
1243 BLE_AUDIO_SYNC1_P = 214,
1244 BLE_AUDIO_SYNC2_P = 215,
1245 ANT_SEL0 = 216,
1246 ANT_SEL1 = 217,
1247 ANT_SEL2 = 218,
1248 ANT_SEL3 = 219,
1249 ANT_SEL4 = 220,
1250 ANT_SEL5 = 221,
1251 ANT_SEL6 = 222,
1252 ANT_SEL7 = 223,
1253 SIGNAL_224 = 224,
1254 SIGNAL_225 = 225,
1255 SIGNAL_226 = 226,
1256 SIGNAL_227 = 227,
1257 SIGNAL_228 = 228,
1258 GPIO = 256,
1259 CLK_OUT1,
1260 CLK_OUT2,
1261 CLK_OUT3,
1262 SD_CLK,
1263 SD_CMD,
1264 SD_DATA0,
1265 SD_DATA1,
1266 SD_DATA2,
1267 SD_DATA3,
1268 HS1_CLK,
1269 HS1_CMD,
1270 HS1_DATA0,
1271 HS1_DATA1,
1272 HS1_DATA2,
1273 HS1_DATA3,
1274 HS1_DATA4,
1275 HS1_DATA5,
1276 HS1_DATA6,
1277 HS1_DATA7,
1278 HS1_STROBE,
1279 HS2_CLK,
1280 HS2_CMD,
1281 HS2_DATA0,
1282 HS2_DATA1,
1283 HS2_DATA2,
1284 HS2_DATA3,
1285 EMAC_TX_CLK,
1286 EMAC_TX_ER,
1287 EMAC_TXD3,
1288 EMAC_RX_ER,
1289 EMAC_TXD2,
1290 EMAC_CLK_OUT,
1291 EMAC_CLK_180,
1292 EMAC_TXD0,
1293 EMAC_TX_EN,
1294 EMAC_TXD1,
1295 MTDO,
1296 }
1297 };
1298}
1299#[macro_export]
1312#[expect(clippy::crate_in_macro_def)]
1313#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1314macro_rules! define_io_mux_reg {
1315 () => {
1316 pub(crate) fn io_mux_reg(gpio_num: u8) -> &'static crate::pac::io_mux::GPIO0 {
1317 let iomux = crate::peripherals::IO_MUX::regs();
1318 match gpio_num {
1319 0 => iomux.gpio0(),
1320 1 => iomux.gpio1(),
1321 2 => iomux.gpio2(),
1322 3 => iomux.gpio3(),
1323 4 => iomux.gpio4(),
1324 5 => iomux.gpio5(),
1325 12 => iomux.gpio12(),
1326 13 => iomux.gpio13(),
1327 14 => iomux.gpio14(),
1328 15 => iomux.gpio15(),
1329 16 => iomux.gpio16(),
1330 17 => iomux.gpio17(),
1331 18 => iomux.gpio18(),
1332 19 => iomux.gpio19(),
1333 21 => iomux.gpio21(),
1334 22 => iomux.gpio22(),
1335 23 => iomux.gpio23(),
1336 25 => iomux.gpio25(),
1337 26 => iomux.gpio26(),
1338 27 => iomux.gpio27(),
1339 32 => iomux.gpio32(),
1340 33 => iomux.gpio33(),
1341 34 => iomux.gpio34(),
1342 35 => iomux.gpio35(),
1343 36 => iomux.gpio36(),
1344 37 => iomux.gpio37(),
1345 38 => iomux.gpio38(),
1346 39 => iomux.gpio39(),
1347 other => panic!("GPIO {} does not exist", other),
1348 }
1349 }
1350 };
1351}