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 "esp32s2"
18 };
19}
20#[macro_export]
22#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
23macro_rules! property {
24 ("chip") => {
25 "esp32s2"
26 };
27 ("arch") => {
28 "xtensa"
29 };
30 ("cores") => {
31 1
32 };
33 ("cores", str) => {
34 stringify!(1)
35 };
36 ("trm") => {
37 "https://www.espressif.com/sites/default/files/documentation/esp32-s2_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 90000
59 };
60 ("soc.rc_slow_clock", str) => {
61 stringify!(90000)
62 };
63 ("soc.xtal_frequency") => {
64 40
65 };
66 ("soc.xtal_frequency", str) => {
67 stringify!(40)
68 };
69 ("aes.dma") => {
70 true
71 };
72 ("aes.has_split_text_registers") => {
73 true
74 };
75 ("aes.endianness_configurable") => {
76 true
77 };
78 ("gpio.has_bank_1") => {
79 true
80 };
81 ("gpio.gpio_function") => {
82 1
83 };
84 ("gpio.gpio_function", str) => {
85 stringify!(1)
86 };
87 ("gpio.constant_0_input") => {
88 60
89 };
90 ("gpio.constant_0_input", str) => {
91 stringify!(60)
92 };
93 ("gpio.constant_1_input") => {
94 56
95 };
96 ("gpio.constant_1_input", str) => {
97 stringify!(56)
98 };
99 ("gpio.remap_iomux_pin_registers") => {
100 false
101 };
102 ("gpio.func_in_sel_offset") => {
103 0
104 };
105 ("gpio.func_in_sel_offset", str) => {
106 stringify!(0)
107 };
108 ("gpio.input_signal_max") => {
109 242
110 };
111 ("gpio.input_signal_max", str) => {
112 stringify!(242)
113 };
114 ("gpio.output_signal_max") => {
115 256
116 };
117 ("gpio.output_signal_max", str) => {
118 stringify!(256)
119 };
120 ("i2c_master.has_fsm_timeouts") => {
121 false
122 };
123 ("i2c_master.has_hw_bus_clear") => {
124 false
125 };
126 ("i2c_master.has_bus_timeout_enable") => {
127 true
128 };
129 ("i2c_master.separate_filter_config_registers") => {
130 true
131 };
132 ("i2c_master.can_estimate_nack_reason") => {
133 false
134 };
135 ("i2c_master.has_conf_update") => {
136 false
137 };
138 ("i2c_master.has_reliable_fsm_reset") => {
139 false
140 };
141 ("i2c_master.has_arbitration_en") => {
142 true
143 };
144 ("i2c_master.has_tx_fifo_watermark") => {
145 false
146 };
147 ("i2c_master.bus_timeout_is_exponential") => {
148 false
149 };
150 ("i2c_master.i2c0_data_register_ahb_address") => {
151 1610690588
152 };
153 ("i2c_master.i2c0_data_register_ahb_address", str) => {
154 stringify!(1610690588)
155 };
156 ("i2c_master.max_bus_timeout") => {
157 16777215
158 };
159 ("i2c_master.max_bus_timeout", str) => {
160 stringify!(16777215)
161 };
162 ("i2c_master.ll_intr_mask") => {
163 131071
164 };
165 ("i2c_master.ll_intr_mask", str) => {
166 stringify!(131071)
167 };
168 ("i2c_master.fifo_size") => {
169 32
170 };
171 ("i2c_master.fifo_size", str) => {
172 stringify!(32)
173 };
174 ("interrupts.status_registers") => {
175 3
176 };
177 ("interrupts.status_registers", str) => {
178 stringify!(3)
179 };
180 ("rmt.ram_start") => {
181 1061250048
182 };
183 ("rmt.ram_start", str) => {
184 stringify!(1061250048)
185 };
186 ("rmt.channel_ram_size") => {
187 64
188 };
189 ("rmt.channel_ram_size", str) => {
190 stringify!(64)
191 };
192 ("rmt.has_tx_immediate_stop") => {
193 true
194 };
195 ("rmt.has_tx_loop_count") => {
196 true
197 };
198 ("rmt.has_tx_loop_auto_stop") => {
199 false
200 };
201 ("rmt.has_tx_carrier_data_only") => {
202 true
203 };
204 ("rmt.has_tx_sync") => {
205 true
206 };
207 ("rmt.has_rx_wrap") => {
208 false
209 };
210 ("rmt.has_rx_demodulation") => {
211 true
212 };
213 ("rmt.has_dma") => {
214 false
215 };
216 ("rmt.has_per_channel_clock") => {
217 true
218 };
219 ("rng.apb_cycle_wait_num") => {
220 16
221 };
222 ("rng.apb_cycle_wait_num", str) => {
223 stringify!(16)
224 };
225 ("rsa.size_increment") => {
226 32
227 };
228 ("rsa.size_increment", str) => {
229 stringify!(32)
230 };
231 ("rsa.memory_size_bytes") => {
232 512
233 };
234 ("rsa.memory_size_bytes", str) => {
235 stringify!(512)
236 };
237 ("sha.dma") => {
238 true
239 };
240 ("spi_master.has_octal") => {
241 true
242 };
243 ("timergroup.timg_has_timer1") => {
244 true
245 };
246 ("timergroup.timg_has_divcnt_rst") => {
247 false
248 };
249 ("timergroup.default_clock_source") => {
250 0
251 };
252 ("timergroup.default_clock_source", str) => {
253 stringify!(0)
254 };
255 ("uart.ram_size") => {
256 128
257 };
258 ("uart.ram_size", str) => {
259 stringify!(128)
260 };
261 ("uart.peripheral_controls_mem_clk") => {
262 false
263 };
264 ("wifi.has_wifi6") => {
265 false
266 };
267 ("phy.combo_module") => {
268 false
269 };
270}
271#[macro_export]
272#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
273macro_rules! for_each_soc_xtal_options {
274 ($($pattern:tt => $code:tt;)*) => {
275 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
276 _for_each_inner!((40)); _for_each_inner!((all(40)));
277 };
278}
279#[macro_export]
283#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
284macro_rules! implement_peripheral_clocks {
285 () => {
286 #[doc(hidden)]
287 #[derive(Debug, Clone, Copy, PartialEq, Eq)]
288 #[repr(u8)]
289 #[cfg_attr(feature = "defmt", derive(defmt::Format))]
290 pub enum Peripheral {
291 #[doc = "AES peripheral clock signal"]
292 Aes,
293 #[doc = "APB_SAR_ADC peripheral clock signal"]
294 ApbSarAdc,
295 #[doc = "COPY_DMA peripheral clock signal"]
296 CopyDma,
297 #[doc = "CRYPTO_DMA peripheral clock signal"]
298 CryptoDma,
299 #[doc = "DS peripheral clock signal"]
300 Ds,
301 #[doc = "HMAC peripheral clock signal"]
302 Hmac,
303 #[doc = "I2C_EXT0 peripheral clock signal"]
304 I2cExt0,
305 #[doc = "I2C_EXT1 peripheral clock signal"]
306 I2cExt1,
307 #[doc = "I2S0 peripheral clock signal"]
308 I2s0,
309 #[doc = "LEDC peripheral clock signal"]
310 Ledc,
311 #[doc = "MCPWM0 peripheral clock signal"]
312 Mcpwm0,
313 #[doc = "MCPWM1 peripheral clock signal"]
314 Mcpwm1,
315 #[doc = "PCNT peripheral clock signal"]
316 Pcnt,
317 #[doc = "RMT peripheral clock signal"]
318 Rmt,
319 #[doc = "RSA peripheral clock signal"]
320 Rsa,
321 #[doc = "SHA peripheral clock signal"]
322 Sha,
323 #[doc = "SPI2 peripheral clock signal"]
324 Spi2,
325 #[doc = "SPI2_DMA peripheral clock signal"]
326 Spi2Dma,
327 #[doc = "SPI3 peripheral clock signal"]
328 Spi3,
329 #[doc = "SPI3_DMA peripheral clock signal"]
330 Spi3Dma,
331 #[doc = "SYSTIMER peripheral clock signal"]
332 Systimer,
333 #[doc = "TIMG0 peripheral clock signal"]
334 Timg0,
335 #[doc = "TIMG1 peripheral clock signal"]
336 Timg1,
337 #[doc = "TWAI0 peripheral clock signal"]
338 Twai0,
339 #[doc = "UART0 peripheral clock signal"]
340 Uart0,
341 #[doc = "UART1 peripheral clock signal"]
342 Uart1,
343 #[doc = "UART_MEM peripheral clock signal"]
344 UartMem,
345 #[doc = "UHCI0 peripheral clock signal"]
346 Uhci0,
347 #[doc = "UHCI1 peripheral clock signal"]
348 Uhci1,
349 #[doc = "USB peripheral clock signal"]
350 Usb,
351 #[doc = "WDG peripheral clock signal"]
352 Wdg,
353 }
354 impl Peripheral {
355 const KEEP_ENABLED: &[Peripheral] =
356 &[Self::Systimer, Self::Timg0, Self::Uart0, Self::UartMem];
357 const COUNT: usize = Self::ALL.len();
358 const ALL: &[Self] = &[
359 Self::Aes,
360 Self::ApbSarAdc,
361 Self::CopyDma,
362 Self::CryptoDma,
363 Self::Ds,
364 Self::Hmac,
365 Self::I2cExt0,
366 Self::I2cExt1,
367 Self::I2s0,
368 Self::Ledc,
369 Self::Mcpwm0,
370 Self::Mcpwm1,
371 Self::Pcnt,
372 Self::Rmt,
373 Self::Rsa,
374 Self::Sha,
375 Self::Spi2,
376 Self::Spi2Dma,
377 Self::Spi3,
378 Self::Spi3Dma,
379 Self::Systimer,
380 Self::Timg0,
381 Self::Timg1,
382 Self::Twai0,
383 Self::Uart0,
384 Self::Uart1,
385 Self::UartMem,
386 Self::Uhci0,
387 Self::Uhci1,
388 Self::Usb,
389 Self::Wdg,
390 ];
391 }
392 unsafe fn enable_internal_racey(peripheral: Peripheral, enable: bool) {
393 match peripheral {
394 Peripheral::Aes => {
395 crate::peripherals::SYSTEM::regs()
396 .perip_clk_en1()
397 .modify(|_, w| w.crypto_aes_clk_en().bit(enable));
398 }
399 Peripheral::ApbSarAdc => {
400 crate::peripherals::SYSTEM::regs()
401 .perip_clk_en0()
402 .modify(|_, w| w.apb_saradc_clk_en().bit(enable));
403 }
404 Peripheral::CopyDma => {
405 crate::peripherals::DMA_COPY::regs()
406 .conf()
407 .modify(|_, w| w.clk_en().bit(enable));
408 }
409 Peripheral::CryptoDma => {
410 crate::peripherals::SYSTEM::regs()
411 .perip_clk_en1()
412 .modify(|_, w| w.crypto_dma_clk_en().bit(enable));
413 }
414 Peripheral::Ds => {
415 crate::peripherals::SYSTEM::regs()
416 .perip_clk_en1()
417 .modify(|_, w| w.crypto_ds_clk_en().bit(enable));
418 }
419 Peripheral::Hmac => {
420 crate::peripherals::SYSTEM::regs()
421 .perip_clk_en1()
422 .modify(|_, w| w.crypto_hmac_clk_en().bit(enable));
423 }
424 Peripheral::I2cExt0 => {
425 crate::peripherals::SYSTEM::regs()
426 .perip_clk_en0()
427 .modify(|_, w| w.i2c_ext0_clk_en().bit(enable));
428 }
429 Peripheral::I2cExt1 => {
430 crate::peripherals::SYSTEM::regs()
431 .perip_clk_en0()
432 .modify(|_, w| w.i2c_ext1_clk_en().bit(enable));
433 }
434 Peripheral::I2s0 => {
435 crate::peripherals::SYSTEM::regs()
436 .perip_clk_en0()
437 .modify(|_, w| w.i2s0_clk_en().bit(enable));
438 }
439 Peripheral::Ledc => {
440 crate::peripherals::SYSTEM::regs()
441 .perip_clk_en0()
442 .modify(|_, w| w.ledc_clk_en().bit(enable));
443 }
444 Peripheral::Mcpwm0 => {
445 crate::peripherals::SYSTEM::regs()
446 .perip_clk_en0()
447 .modify(|_, w| w.pwm0_clk_en().bit(enable));
448 }
449 Peripheral::Mcpwm1 => {
450 crate::peripherals::SYSTEM::regs()
451 .perip_clk_en0()
452 .modify(|_, w| w.pwm1_clk_en().bit(enable));
453 }
454 Peripheral::Pcnt => {
455 crate::peripherals::SYSTEM::regs()
456 .perip_clk_en0()
457 .modify(|_, w| w.pcnt_clk_en().bit(enable));
458 }
459 Peripheral::Rmt => {
460 crate::peripherals::SYSTEM::regs()
461 .perip_clk_en0()
462 .modify(|_, w| w.rmt_clk_en().bit(enable));
463 }
464 Peripheral::Rsa => {
465 crate::peripherals::SYSTEM::regs()
466 .perip_clk_en1()
467 .modify(|_, w| w.crypto_rsa_clk_en().bit(enable));
468 }
469 Peripheral::Sha => {
470 crate::peripherals::SYSTEM::regs()
471 .perip_clk_en1()
472 .modify(|_, w| w.crypto_sha_clk_en().bit(enable));
473 }
474 Peripheral::Spi2 => {
475 crate::peripherals::SYSTEM::regs()
476 .perip_clk_en0()
477 .modify(|_, w| w.spi2_clk_en().bit(enable));
478 }
479 Peripheral::Spi2Dma => {
480 crate::peripherals::SYSTEM::regs()
481 .perip_clk_en0()
482 .modify(|_, w| w.spi2_dma_clk_en().bit(enable));
483 }
484 Peripheral::Spi3 => {
485 crate::peripherals::SYSTEM::regs()
486 .perip_clk_en0()
487 .modify(|_, w| w.spi3_clk_en().bit(enable));
488 }
489 Peripheral::Spi3Dma => {
490 crate::peripherals::SYSTEM::regs()
491 .perip_clk_en0()
492 .modify(|_, w| w.spi3_dma_clk_en().bit(enable));
493 }
494 Peripheral::Systimer => {
495 crate::peripherals::SYSTEM::regs()
496 .perip_clk_en0()
497 .modify(|_, w| w.systimer_clk_en().bit(enable));
498 }
499 Peripheral::Timg0 => {
500 crate::peripherals::SYSTEM::regs()
501 .perip_clk_en0()
502 .modify(|_, w| w.timergroup_clk_en().bit(enable));
503 }
504 Peripheral::Timg1 => {
505 crate::peripherals::SYSTEM::regs()
506 .perip_clk_en0()
507 .modify(|_, w| w.timergroup1_clk_en().bit(enable));
508 }
509 Peripheral::Twai0 => {
510 crate::peripherals::SYSTEM::regs()
511 .perip_clk_en0()
512 .modify(|_, w| w.twai_clk_en().bit(enable));
513 }
514 Peripheral::Uart0 => {
515 crate::peripherals::SYSTEM::regs()
516 .perip_clk_en0()
517 .modify(|_, w| w.uart_clk_en().bit(enable));
518 }
519 Peripheral::Uart1 => {
520 crate::peripherals::SYSTEM::regs()
521 .perip_clk_en0()
522 .modify(|_, w| w.uart1_clk_en().bit(enable));
523 }
524 Peripheral::UartMem => {
525 crate::peripherals::SYSTEM::regs()
526 .perip_clk_en0()
527 .modify(|_, w| w.uart_mem_clk_en().bit(enable));
528 }
529 Peripheral::Uhci0 => {
530 crate::peripherals::SYSTEM::regs()
531 .perip_clk_en0()
532 .modify(|_, w| w.uhci0_clk_en().bit(enable));
533 }
534 Peripheral::Uhci1 => {
535 crate::peripherals::SYSTEM::regs()
536 .perip_clk_en0()
537 .modify(|_, w| w.uhci1_clk_en().bit(enable));
538 }
539 Peripheral::Usb => {
540 crate::peripherals::SYSTEM::regs()
541 .perip_clk_en0()
542 .modify(|_, w| w.usb_clk_en().bit(enable));
543 }
544 Peripheral::Wdg => {
545 crate::peripherals::SYSTEM::regs()
546 .perip_clk_en0()
547 .modify(|_, w| w.wdg_clk_en().bit(enable));
548 }
549 }
550 }
551 unsafe fn assert_peri_reset_racey(peripheral: Peripheral, reset: bool) {
552 match peripheral {
553 Peripheral::Aes => {
554 crate::peripherals::SYSTEM::regs()
555 .perip_rst_en1()
556 .modify(|_, w| w.crypto_aes_rst().bit(reset));
557 }
558 Peripheral::ApbSarAdc => {
559 crate::peripherals::SYSTEM::regs()
560 .perip_rst_en0()
561 .modify(|_, w| w.apb_saradc_rst().bit(reset));
562 }
563 Peripheral::CopyDma => {
564 crate::peripherals::DMA_COPY::regs().conf().modify(|_, w| {
565 w.in_rst()
566 .bit(reset)
567 .out_rst()
568 .bit(reset)
569 .cmdfifo_rst()
570 .bit(reset)
571 .fifo_rst()
572 .bit(reset)
573 });
574 }
575 Peripheral::CryptoDma => {
576 crate::peripherals::SYSTEM::regs()
577 .perip_rst_en1()
578 .modify(|_, w| w.crypto_dma_rst().bit(reset));
579 }
580 Peripheral::Ds => {
581 crate::peripherals::SYSTEM::regs()
582 .perip_rst_en1()
583 .modify(|_, w| w.crypto_ds_rst().bit(reset));
584 }
585 Peripheral::Hmac => {
586 crate::peripherals::SYSTEM::regs()
587 .perip_rst_en1()
588 .modify(|_, w| w.crypto_hmac_rst().bit(reset));
589 }
590 Peripheral::I2cExt0 => {
591 crate::peripherals::SYSTEM::regs()
592 .perip_rst_en0()
593 .modify(|_, w| w.i2c_ext0_rst().bit(reset));
594 }
595 Peripheral::I2cExt1 => {
596 crate::peripherals::SYSTEM::regs()
597 .perip_rst_en0()
598 .modify(|_, w| w.i2c_ext1_rst().bit(reset));
599 }
600 Peripheral::I2s0 => {
601 crate::peripherals::SYSTEM::regs()
602 .perip_rst_en0()
603 .modify(|_, w| w.i2s0_rst().bit(reset));
604 }
605 Peripheral::Ledc => {
606 crate::peripherals::SYSTEM::regs()
607 .perip_rst_en0()
608 .modify(|_, w| w.ledc_rst().bit(reset));
609 }
610 Peripheral::Mcpwm0 => {
611 crate::peripherals::SYSTEM::regs()
612 .perip_rst_en0()
613 .modify(|_, w| w.pwm0_rst().bit(reset));
614 }
615 Peripheral::Mcpwm1 => {
616 crate::peripherals::SYSTEM::regs()
617 .perip_rst_en0()
618 .modify(|_, w| w.pwm1_rst().bit(reset));
619 }
620 Peripheral::Pcnt => {
621 crate::peripherals::SYSTEM::regs()
622 .perip_rst_en0()
623 .modify(|_, w| w.pcnt_rst().bit(reset));
624 }
625 Peripheral::Rmt => {
626 crate::peripherals::SYSTEM::regs()
627 .perip_rst_en0()
628 .modify(|_, w| w.rmt_rst().bit(reset));
629 }
630 Peripheral::Rsa => {
631 crate::peripherals::SYSTEM::regs()
632 .perip_rst_en1()
633 .modify(|_, w| w.crypto_rsa_rst().bit(reset));
634 }
635 Peripheral::Sha => {
636 crate::peripherals::SYSTEM::regs()
637 .perip_rst_en1()
638 .modify(|_, w| w.crypto_sha_rst().bit(reset));
639 }
640 Peripheral::Spi2 => {
641 crate::peripherals::SYSTEM::regs()
642 .perip_rst_en0()
643 .modify(|_, w| w.spi2_rst().bit(reset));
644 }
645 Peripheral::Spi2Dma => {
646 crate::peripherals::SYSTEM::regs()
647 .perip_rst_en0()
648 .modify(|_, w| w.spi2_dma_rst().bit(reset));
649 }
650 Peripheral::Spi3 => {
651 crate::peripherals::SYSTEM::regs()
652 .perip_rst_en0()
653 .modify(|_, w| w.spi3_rst().bit(reset));
654 }
655 Peripheral::Spi3Dma => {
656 crate::peripherals::SYSTEM::regs()
657 .perip_rst_en0()
658 .modify(|_, w| w.spi3_dma_rst().bit(reset));
659 }
660 Peripheral::Systimer => {
661 crate::peripherals::SYSTEM::regs()
662 .perip_rst_en0()
663 .modify(|_, w| w.systimer_rst().bit(reset));
664 }
665 Peripheral::Timg0 => {
666 crate::peripherals::SYSTEM::regs()
667 .perip_rst_en0()
668 .modify(|_, w| w.timergroup_rst().bit(reset));
669 }
670 Peripheral::Timg1 => {
671 crate::peripherals::SYSTEM::regs()
672 .perip_rst_en0()
673 .modify(|_, w| w.timergroup1_rst().bit(reset));
674 }
675 Peripheral::Twai0 => {
676 crate::peripherals::SYSTEM::regs()
677 .perip_rst_en0()
678 .modify(|_, w| w.twai_rst().bit(reset));
679 }
680 Peripheral::Uart0 => {
681 crate::peripherals::SYSTEM::regs()
682 .perip_rst_en0()
683 .modify(|_, w| w.uart_rst().bit(reset));
684 }
685 Peripheral::Uart1 => {
686 crate::peripherals::SYSTEM::regs()
687 .perip_rst_en0()
688 .modify(|_, w| w.uart1_rst().bit(reset));
689 }
690 Peripheral::UartMem => {
691 crate::peripherals::SYSTEM::regs()
692 .perip_rst_en0()
693 .modify(|_, w| w.uart_mem_rst().bit(reset));
694 }
695 Peripheral::Uhci0 => {
696 crate::peripherals::SYSTEM::regs()
697 .perip_rst_en0()
698 .modify(|_, w| w.uhci0_rst().bit(reset));
699 }
700 Peripheral::Uhci1 => {
701 crate::peripherals::SYSTEM::regs()
702 .perip_rst_en0()
703 .modify(|_, w| w.uhci1_rst().bit(reset));
704 }
705 Peripheral::Usb => {
706 crate::peripherals::SYSTEM::regs()
707 .perip_rst_en0()
708 .modify(|_, w| w.usb_rst().bit(reset));
709 }
710 Peripheral::Wdg => {
711 crate::peripherals::SYSTEM::regs()
712 .perip_rst_en0()
713 .modify(|_, w| w.wdg_rst().bit(reset));
714 }
715 }
716 }
717 };
718}
719#[macro_export]
727#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
728macro_rules! memory_range {
729 ("DRAM") => {
730 1073414144..1073741824
731 };
732 (size as str, "DRAM") => {
733 "327680"
734 };
735 ("DRAM2_UNINIT") => {
736 1073602560..1073741824
737 };
738 (size as str, "DRAM2_UNINIT") => {
739 "139264"
740 };
741}
742#[macro_export]
743#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
744macro_rules! for_each_aes_key_length {
745 ($($pattern:tt => $code:tt;)*) => {
746 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
747 _for_each_inner!((128)); _for_each_inner!((192)); _for_each_inner!((256));
748 _for_each_inner!((128, 0, 4)); _for_each_inner!((192, 1, 5));
749 _for_each_inner!((256, 2, 6)); _for_each_inner!((bits(128), (192), (256)));
750 _for_each_inner!((modes(128, 0, 4), (192, 1, 5), (256, 2, 6)));
751 };
752}
753#[macro_export]
775#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
776macro_rules! for_each_rmt_channel {
777 ($($pattern:tt => $code:tt;)*) => {
778 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
779 _for_each_inner!((0)); _for_each_inner!((1)); _for_each_inner!((2));
780 _for_each_inner!((3)); _for_each_inner!((0, 0)); _for_each_inner!((1, 1));
781 _for_each_inner!((2, 2)); _for_each_inner!((3, 3)); _for_each_inner!((0, 0));
782 _for_each_inner!((1, 1)); _for_each_inner!((2, 2)); _for_each_inner!((3, 3));
783 _for_each_inner!((all(0), (1), (2), (3))); _for_each_inner!((tx(0, 0), (1, 1),
784 (2, 2), (3, 3))); _for_each_inner!((rx(0, 0), (1, 1), (2, 2), (3, 3)));
785 };
786}
787#[macro_export]
788#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
789macro_rules! for_each_rmt_clock_source {
790 ($($pattern:tt => $code:tt;)*) => {
791 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
792 _for_each_inner!((RefTick, 0)); _for_each_inner!((Apb, 1));
793 _for_each_inner!((Apb)); _for_each_inner!((all(RefTick, 0), (Apb, 1)));
794 _for_each_inner!((default(Apb))); _for_each_inner!((is_boolean));
795 };
796}
797#[macro_export]
798#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
799macro_rules! for_each_rsa_exponentiation {
800 ($($pattern:tt => $code:tt;)*) => {
801 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
802 _for_each_inner!((32)); _for_each_inner!((64)); _for_each_inner!((96));
803 _for_each_inner!((128)); _for_each_inner!((160)); _for_each_inner!((192));
804 _for_each_inner!((224)); _for_each_inner!((256)); _for_each_inner!((288));
805 _for_each_inner!((320)); _for_each_inner!((352)); _for_each_inner!((384));
806 _for_each_inner!((416)); _for_each_inner!((448)); _for_each_inner!((480));
807 _for_each_inner!((512)); _for_each_inner!((544)); _for_each_inner!((576));
808 _for_each_inner!((608)); _for_each_inner!((640)); _for_each_inner!((672));
809 _for_each_inner!((704)); _for_each_inner!((736)); _for_each_inner!((768));
810 _for_each_inner!((800)); _for_each_inner!((832)); _for_each_inner!((864));
811 _for_each_inner!((896)); _for_each_inner!((928)); _for_each_inner!((960));
812 _for_each_inner!((992)); _for_each_inner!((1024)); _for_each_inner!((1056));
813 _for_each_inner!((1088)); _for_each_inner!((1120)); _for_each_inner!((1152));
814 _for_each_inner!((1184)); _for_each_inner!((1216)); _for_each_inner!((1248));
815 _for_each_inner!((1280)); _for_each_inner!((1312)); _for_each_inner!((1344));
816 _for_each_inner!((1376)); _for_each_inner!((1408)); _for_each_inner!((1440));
817 _for_each_inner!((1472)); _for_each_inner!((1504)); _for_each_inner!((1536));
818 _for_each_inner!((1568)); _for_each_inner!((1600)); _for_each_inner!((1632));
819 _for_each_inner!((1664)); _for_each_inner!((1696)); _for_each_inner!((1728));
820 _for_each_inner!((1760)); _for_each_inner!((1792)); _for_each_inner!((1824));
821 _for_each_inner!((1856)); _for_each_inner!((1888)); _for_each_inner!((1920));
822 _for_each_inner!((1952)); _for_each_inner!((1984)); _for_each_inner!((2016));
823 _for_each_inner!((2048)); _for_each_inner!((2080)); _for_each_inner!((2112));
824 _for_each_inner!((2144)); _for_each_inner!((2176)); _for_each_inner!((2208));
825 _for_each_inner!((2240)); _for_each_inner!((2272)); _for_each_inner!((2304));
826 _for_each_inner!((2336)); _for_each_inner!((2368)); _for_each_inner!((2400));
827 _for_each_inner!((2432)); _for_each_inner!((2464)); _for_each_inner!((2496));
828 _for_each_inner!((2528)); _for_each_inner!((2560)); _for_each_inner!((2592));
829 _for_each_inner!((2624)); _for_each_inner!((2656)); _for_each_inner!((2688));
830 _for_each_inner!((2720)); _for_each_inner!((2752)); _for_each_inner!((2784));
831 _for_each_inner!((2816)); _for_each_inner!((2848)); _for_each_inner!((2880));
832 _for_each_inner!((2912)); _for_each_inner!((2944)); _for_each_inner!((2976));
833 _for_each_inner!((3008)); _for_each_inner!((3040)); _for_each_inner!((3072));
834 _for_each_inner!((3104)); _for_each_inner!((3136)); _for_each_inner!((3168));
835 _for_each_inner!((3200)); _for_each_inner!((3232)); _for_each_inner!((3264));
836 _for_each_inner!((3296)); _for_each_inner!((3328)); _for_each_inner!((3360));
837 _for_each_inner!((3392)); _for_each_inner!((3424)); _for_each_inner!((3456));
838 _for_each_inner!((3488)); _for_each_inner!((3520)); _for_each_inner!((3552));
839 _for_each_inner!((3584)); _for_each_inner!((3616)); _for_each_inner!((3648));
840 _for_each_inner!((3680)); _for_each_inner!((3712)); _for_each_inner!((3744));
841 _for_each_inner!((3776)); _for_each_inner!((3808)); _for_each_inner!((3840));
842 _for_each_inner!((3872)); _for_each_inner!((3904)); _for_each_inner!((3936));
843 _for_each_inner!((3968)); _for_each_inner!((4000)); _for_each_inner!((4032));
844 _for_each_inner!((4064)); _for_each_inner!((4096)); _for_each_inner!((all(32),
845 (64), (96), (128), (160), (192), (224), (256), (288), (320), (352), (384), (416),
846 (448), (480), (512), (544), (576), (608), (640), (672), (704), (736), (768),
847 (800), (832), (864), (896), (928), (960), (992), (1024), (1056), (1088), (1120),
848 (1152), (1184), (1216), (1248), (1280), (1312), (1344), (1376), (1408), (1440),
849 (1472), (1504), (1536), (1568), (1600), (1632), (1664), (1696), (1728), (1760),
850 (1792), (1824), (1856), (1888), (1920), (1952), (1984), (2016), (2048), (2080),
851 (2112), (2144), (2176), (2208), (2240), (2272), (2304), (2336), (2368), (2400),
852 (2432), (2464), (2496), (2528), (2560), (2592), (2624), (2656), (2688), (2720),
853 (2752), (2784), (2816), (2848), (2880), (2912), (2944), (2976), (3008), (3040),
854 (3072), (3104), (3136), (3168), (3200), (3232), (3264), (3296), (3328), (3360),
855 (3392), (3424), (3456), (3488), (3520), (3552), (3584), (3616), (3648), (3680),
856 (3712), (3744), (3776), (3808), (3840), (3872), (3904), (3936), (3968), (4000),
857 (4032), (4064), (4096)));
858 };
859}
860#[macro_export]
861#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
862macro_rules! for_each_rsa_multiplication {
863 ($($pattern:tt => $code:tt;)*) => {
864 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
865 _for_each_inner!((32)); _for_each_inner!((64)); _for_each_inner!((96));
866 _for_each_inner!((128)); _for_each_inner!((160)); _for_each_inner!((192));
867 _for_each_inner!((224)); _for_each_inner!((256)); _for_each_inner!((288));
868 _for_each_inner!((320)); _for_each_inner!((352)); _for_each_inner!((384));
869 _for_each_inner!((416)); _for_each_inner!((448)); _for_each_inner!((480));
870 _for_each_inner!((512)); _for_each_inner!((544)); _for_each_inner!((576));
871 _for_each_inner!((608)); _for_each_inner!((640)); _for_each_inner!((672));
872 _for_each_inner!((704)); _for_each_inner!((736)); _for_each_inner!((768));
873 _for_each_inner!((800)); _for_each_inner!((832)); _for_each_inner!((864));
874 _for_each_inner!((896)); _for_each_inner!((928)); _for_each_inner!((960));
875 _for_each_inner!((992)); _for_each_inner!((1024)); _for_each_inner!((1056));
876 _for_each_inner!((1088)); _for_each_inner!((1120)); _for_each_inner!((1152));
877 _for_each_inner!((1184)); _for_each_inner!((1216)); _for_each_inner!((1248));
878 _for_each_inner!((1280)); _for_each_inner!((1312)); _for_each_inner!((1344));
879 _for_each_inner!((1376)); _for_each_inner!((1408)); _for_each_inner!((1440));
880 _for_each_inner!((1472)); _for_each_inner!((1504)); _for_each_inner!((1536));
881 _for_each_inner!((1568)); _for_each_inner!((1600)); _for_each_inner!((1632));
882 _for_each_inner!((1664)); _for_each_inner!((1696)); _for_each_inner!((1728));
883 _for_each_inner!((1760)); _for_each_inner!((1792)); _for_each_inner!((1824));
884 _for_each_inner!((1856)); _for_each_inner!((1888)); _for_each_inner!((1920));
885 _for_each_inner!((1952)); _for_each_inner!((1984)); _for_each_inner!((2016));
886 _for_each_inner!((2048)); _for_each_inner!((all(32), (64), (96), (128), (160),
887 (192), (224), (256), (288), (320), (352), (384), (416), (448), (480), (512),
888 (544), (576), (608), (640), (672), (704), (736), (768), (800), (832), (864),
889 (896), (928), (960), (992), (1024), (1056), (1088), (1120), (1152), (1184),
890 (1216), (1248), (1280), (1312), (1344), (1376), (1408), (1440), (1472), (1504),
891 (1536), (1568), (1600), (1632), (1664), (1696), (1728), (1760), (1792), (1824),
892 (1856), (1888), (1920), (1952), (1984), (2016), (2048)));
893 };
894}
895#[macro_export]
896#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
897macro_rules! for_each_sha_algorithm {
898 ($($pattern:tt => $code:tt;)*) => {
899 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
900 _for_each_inner!((Sha1, "SHA-1"(sizes : 64, 20, 8) (insecure_against :
901 "collision", "length extension"), 0)); _for_each_inner!((Sha224, "SHA-224"(sizes
902 : 64, 28, 8) (insecure_against : "length extension"), 1));
903 _for_each_inner!((Sha256, "SHA-256"(sizes : 64, 32, 8) (insecure_against :
904 "length extension"), 2)); _for_each_inner!((Sha384, "SHA-384"(sizes : 128, 48,
905 16) (insecure_against :), 3)); _for_each_inner!((Sha512, "SHA-512"(sizes : 128,
906 64, 16) (insecure_against : "length extension"), 4));
907 _for_each_inner!((Sha512_224, "SHA-512/224"(sizes : 128, 28, 16)
908 (insecure_against :), 5)); _for_each_inner!((Sha512_256, "SHA-512/256"(sizes :
909 128, 32, 16) (insecure_against :), 6)); _for_each_inner!((algos(Sha1,
910 "SHA-1"(sizes : 64, 20, 8) (insecure_against : "collision", "length extension"),
911 0), (Sha224, "SHA-224"(sizes : 64, 28, 8) (insecure_against :
912 "length extension"), 1), (Sha256, "SHA-256"(sizes : 64, 32, 8) (insecure_against
913 : "length extension"), 2), (Sha384, "SHA-384"(sizes : 128, 48, 16)
914 (insecure_against :), 3), (Sha512, "SHA-512"(sizes : 128, 64, 16)
915 (insecure_against : "length extension"), 4), (Sha512_224, "SHA-512/224"(sizes :
916 128, 28, 16) (insecure_against :), 5), (Sha512_256, "SHA-512/256"(sizes : 128,
917 32, 16) (insecure_against :), 6)));
918 };
919}
920#[macro_export]
937#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
938macro_rules! for_each_i2c_master {
939 ($($pattern:tt => $code:tt;)*) => {
940 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
941 _for_each_inner!((I2C0, I2cExt0, I2CEXT0_SCL, I2CEXT0_SDA));
942 _for_each_inner!((I2C1, I2cExt1, I2CEXT1_SCL, I2CEXT1_SDA));
943 _for_each_inner!((all(I2C0, I2cExt0, I2CEXT0_SCL, I2CEXT0_SDA), (I2C1, I2cExt1,
944 I2CEXT1_SCL, I2CEXT1_SDA)));
945 };
946}
947#[macro_export]
964#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
965macro_rules! for_each_uart {
966 ($($pattern:tt => $code:tt;)*) => {
967 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
968 _for_each_inner!((UART0, Uart0, U0RXD, U0TXD, U0CTS, U0RTS));
969 _for_each_inner!((UART1, Uart1, U1RXD, U1TXD, U1CTS, U1RTS));
970 _for_each_inner!((all(UART0, Uart0, U0RXD, U0TXD, U0CTS, U0RTS), (UART1, Uart1,
971 U1RXD, U1TXD, U1CTS, U1RTS)));
972 };
973}
974#[macro_export]
996#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
997macro_rules! for_each_spi_master {
998 ($($pattern:tt => $code:tt;)*) => {
999 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
1000 _for_each_inner!((SPI2, Spi2, FSPICLK[FSPICS0, FSPICS1, FSPICS2, FSPICS3,
1001 FSPICS4, FSPICS5] [FSPID, FSPIQ, FSPIWP, FSPIHD, FSPIIO4, FSPIIO5, FSPIIO6,
1002 FSPIIO7], true)); _for_each_inner!((SPI3, Spi3, SPI3_CLK[SPI3_CS0, SPI3_CS1,
1003 SPI3_CS2] [SPI3_D, SPI3_Q])); _for_each_inner!((all(SPI2, Spi2, FSPICLK[FSPICS0,
1004 FSPICS1, FSPICS2, FSPICS3, FSPICS4, FSPICS5] [FSPID, FSPIQ, FSPIWP, FSPIHD,
1005 FSPIIO4, FSPIIO5, FSPIIO6, FSPIIO7], true), (SPI3, Spi3, SPI3_CLK[SPI3_CS0,
1006 SPI3_CS1, SPI3_CS2] [SPI3_D, SPI3_Q])));
1007 };
1008}
1009#[macro_export]
1026#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1027macro_rules! for_each_spi_slave {
1028 ($($pattern:tt => $code:tt;)*) => {
1029 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
1030 _for_each_inner!((SPI2, Spi2, FSPICLK, FSPID, FSPIQ, FSPICS0));
1031 _for_each_inner!((SPI3, Spi3, SPI3_CLK, SPI3_D, SPI3_Q, SPI3_CS0));
1032 _for_each_inner!((all(SPI2, Spi2, FSPICLK, FSPID, FSPIQ, FSPICS0), (SPI3, Spi3,
1033 SPI3_CLK, SPI3_D, SPI3_Q, SPI3_CS0)));
1034 };
1035}
1036#[macro_export]
1037#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1038macro_rules! for_each_peripheral {
1039 ($($pattern:tt => $code:tt;)*) => {
1040 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
1041 _for_each_inner!((GPIO0 <= virtual())); _for_each_inner!((GPIO1 <= virtual()));
1042 _for_each_inner!((GPIO2 <= virtual())); _for_each_inner!((GPIO3 <= virtual()));
1043 _for_each_inner!((GPIO4 <= virtual())); _for_each_inner!((GPIO5 <= virtual()));
1044 _for_each_inner!((GPIO6 <= virtual())); _for_each_inner!((GPIO7 <= virtual()));
1045 _for_each_inner!((GPIO8 <= virtual())); _for_each_inner!((GPIO9 <= virtual()));
1046 _for_each_inner!((GPIO10 <= virtual())); _for_each_inner!((GPIO11 <= virtual()));
1047 _for_each_inner!((GPIO12 <= virtual())); _for_each_inner!((GPIO13 <= virtual()));
1048 _for_each_inner!((GPIO14 <= virtual())); _for_each_inner!((GPIO15 <= virtual()));
1049 _for_each_inner!((GPIO16 <= virtual())); _for_each_inner!((GPIO17 <= virtual()));
1050 _for_each_inner!((GPIO18 <= virtual())); _for_each_inner!((GPIO19 <= virtual()));
1051 _for_each_inner!((GPIO20 <= virtual())); _for_each_inner!((GPIO21 <= virtual()));
1052 _for_each_inner!((GPIO33 <= virtual())); _for_each_inner!((GPIO34 <= virtual()));
1053 _for_each_inner!((GPIO35 <= virtual())); _for_each_inner!((GPIO36 <= virtual()));
1054 _for_each_inner!((GPIO37 <= virtual())); _for_each_inner!((GPIO38 <= virtual()));
1055 _for_each_inner!((GPIO39 <= virtual())); _for_each_inner!((GPIO40 <= virtual()));
1056 _for_each_inner!((GPIO41 <= virtual())); _for_each_inner!((GPIO42 <= virtual()));
1057 _for_each_inner!((GPIO43 <= virtual())); _for_each_inner!((GPIO44 <= virtual()));
1058 _for_each_inner!((GPIO45 <= virtual())); _for_each_inner!((GPIO46 <= virtual()));
1059 _for_each_inner!((AES <= AES(AES : { bind_peri_interrupt, enable_peri_interrupt,
1060 disable_peri_interrupt }) (unstable))); _for_each_inner!((APB_SARADC <=
1061 APB_SARADC() (unstable))); _for_each_inner!((DEDICATED_GPIO <= DEDICATED_GPIO()
1062 (unstable))); _for_each_inner!((DS <= DS() (unstable))); _for_each_inner!((EFUSE
1063 <= EFUSE() (unstable))); _for_each_inner!((EXTMEM <= EXTMEM() (unstable)));
1064 _for_each_inner!((FE <= FE() (unstable))); _for_each_inner!((FE2 <= FE2()
1065 (unstable))); _for_each_inner!((GPIO <= GPIO() (unstable)));
1066 _for_each_inner!((GPIO_SD <= GPIO_SD() (unstable))); _for_each_inner!((HMAC <=
1067 HMAC() (unstable))); _for_each_inner!((I2C_ANA_MST <= I2C_ANA_MST() (unstable)));
1068 _for_each_inner!((I2C0 <= I2C0(I2C_EXT0 : { bind_peri_interrupt,
1069 enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((I2C1 <=
1070 I2C1(I2C_EXT1 : { bind_peri_interrupt, enable_peri_interrupt,
1071 disable_peri_interrupt }))); _for_each_inner!((I2S0 <= I2S0(I2S0 : {
1072 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })
1073 (unstable))); _for_each_inner!((INTERRUPT_CORE0 <= INTERRUPT_CORE0()
1074 (unstable))); _for_each_inner!((IO_MUX <= IO_MUX() (unstable)));
1075 _for_each_inner!((LEDC <= LEDC() (unstable))); _for_each_inner!((NRX <= NRX()
1076 (unstable))); _for_each_inner!((PCNT <= PCNT() (unstable)));
1077 _for_each_inner!((PMS <= PMS() (unstable))); _for_each_inner!((RMT <= RMT()
1078 (unstable))); _for_each_inner!((RNG <= RNG() (unstable))); _for_each_inner!((RSA
1079 <= RSA(RSA : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
1080 }) (unstable))); _for_each_inner!((LPWR <= RTC_CNTL() (unstable)));
1081 _for_each_inner!((RTC_I2C <= RTC_I2C() (unstable))); _for_each_inner!((RTC_IO <=
1082 RTC_IO() (unstable))); _for_each_inner!((SENS <= SENS() (unstable)));
1083 _for_each_inner!((SHA <= SHA(SHA : { bind_peri_interrupt, enable_peri_interrupt,
1084 disable_peri_interrupt }) (unstable))); _for_each_inner!((SPI0 <= SPI0()
1085 (unstable))); _for_each_inner!((SPI1 <= SPI1() (unstable)));
1086 _for_each_inner!((SPI2 <= SPI2(SPI2_DMA : { bind_dma_interrupt,
1087 enable_dma_interrupt, disable_dma_interrupt }, SPI2 : { bind_peri_interrupt,
1088 enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((SPI3 <=
1089 SPI3(SPI3_DMA : { bind_dma_interrupt, enable_dma_interrupt, disable_dma_interrupt
1090 }, SPI3 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
1091 }))); _for_each_inner!((SYSCON <= SYSCON() (unstable))); _for_each_inner!((SYSTEM
1092 <= SYSTEM() (unstable))); _for_each_inner!((SYSTIMER <= SYSTIMER() (unstable)));
1093 _for_each_inner!((TIMG0 <= TIMG0() (unstable))); _for_each_inner!((TIMG1 <=
1094 TIMG1() (unstable))); _for_each_inner!((TWAI0 <= TWAI0() (unstable)));
1095 _for_each_inner!((UART0 <= UART0(UART0 : { bind_peri_interrupt,
1096 enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((UART1 <=
1097 UART1(UART1 : { bind_peri_interrupt, enable_peri_interrupt,
1098 disable_peri_interrupt }))); _for_each_inner!((UHCI0 <= UHCI0() (unstable)));
1099 _for_each_inner!((USB0 <= USB0() (unstable))); _for_each_inner!((USB_WRAP <=
1100 USB_WRAP() (unstable))); _for_each_inner!((XTS_AES <= XTS_AES() (unstable)));
1101 _for_each_inner!((WIFI <= WIFI() (unstable))); _for_each_inner!((DMA_SPI2 <=
1102 SPI2() (unstable))); _for_each_inner!((DMA_SPI3 <= SPI3() (unstable)));
1103 _for_each_inner!((DMA_I2S0 <= I2S0() (unstable))); _for_each_inner!((DMA_CRYPTO
1104 <= CRYPTO_DMA() (unstable))); _for_each_inner!((DMA_COPY <= COPY_DMA()
1105 (unstable))); _for_each_inner!((ADC1 <= virtual() (unstable)));
1106 _for_each_inner!((ADC2 <= virtual() (unstable))); _for_each_inner!((DAC1 <=
1107 virtual() (unstable))); _for_each_inner!((DAC2 <= virtual() (unstable)));
1108 _for_each_inner!((FLASH <= virtual() (unstable))); _for_each_inner!((PSRAM <=
1109 virtual() (unstable))); _for_each_inner!((SW_INTERRUPT <= virtual() (unstable)));
1110 _for_each_inner!((ULP_RISCV_CORE <= virtual() (unstable)));
1111 _for_each_inner!((all(GPIO0 <= virtual()), (GPIO1 <= virtual()), (GPIO2 <=
1112 virtual()), (GPIO3 <= virtual()), (GPIO4 <= virtual()), (GPIO5 <= virtual()),
1113 (GPIO6 <= virtual()), (GPIO7 <= virtual()), (GPIO8 <= virtual()), (GPIO9 <=
1114 virtual()), (GPIO10 <= virtual()), (GPIO11 <= virtual()), (GPIO12 <= virtual()),
1115 (GPIO13 <= virtual()), (GPIO14 <= virtual()), (GPIO15 <= virtual()), (GPIO16 <=
1116 virtual()), (GPIO17 <= virtual()), (GPIO18 <= virtual()), (GPIO19 <= virtual()),
1117 (GPIO20 <= virtual()), (GPIO21 <= virtual()), (GPIO33 <= virtual()), (GPIO34 <=
1118 virtual()), (GPIO35 <= virtual()), (GPIO36 <= virtual()), (GPIO37 <= virtual()),
1119 (GPIO38 <= virtual()), (GPIO39 <= virtual()), (GPIO40 <= virtual()), (GPIO41 <=
1120 virtual()), (GPIO42 <= virtual()), (GPIO43 <= virtual()), (GPIO44 <= virtual()),
1121 (GPIO45 <= virtual()), (GPIO46 <= virtual()), (AES <= AES(AES : {
1122 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })
1123 (unstable)), (APB_SARADC <= APB_SARADC() (unstable)), (DEDICATED_GPIO <=
1124 DEDICATED_GPIO() (unstable)), (DS <= DS() (unstable)), (EFUSE <= EFUSE()
1125 (unstable)), (EXTMEM <= EXTMEM() (unstable)), (FE <= FE() (unstable)), (FE2 <=
1126 FE2() (unstable)), (GPIO <= GPIO() (unstable)), (GPIO_SD <= GPIO_SD()
1127 (unstable)), (HMAC <= HMAC() (unstable)), (I2C_ANA_MST <= I2C_ANA_MST()
1128 (unstable)), (I2C0 <= I2C0(I2C_EXT0 : { bind_peri_interrupt,
1129 enable_peri_interrupt, disable_peri_interrupt })), (I2C1 <= I2C1(I2C_EXT1 : {
1130 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (I2S0 <=
1131 I2S0(I2S0 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
1132 }) (unstable)), (INTERRUPT_CORE0 <= INTERRUPT_CORE0() (unstable)), (IO_MUX <=
1133 IO_MUX() (unstable)), (LEDC <= LEDC() (unstable)), (NRX <= NRX() (unstable)),
1134 (PCNT <= PCNT() (unstable)), (PMS <= PMS() (unstable)), (RMT <= RMT()
1135 (unstable)), (RNG <= RNG() (unstable)), (RSA <= RSA(RSA : { bind_peri_interrupt,
1136 enable_peri_interrupt, disable_peri_interrupt }) (unstable)), (LPWR <= RTC_CNTL()
1137 (unstable)), (RTC_I2C <= RTC_I2C() (unstable)), (RTC_IO <= RTC_IO() (unstable)),
1138 (SENS <= SENS() (unstable)), (SHA <= SHA(SHA : { bind_peri_interrupt,
1139 enable_peri_interrupt, disable_peri_interrupt }) (unstable)), (SPI0 <= SPI0()
1140 (unstable)), (SPI1 <= SPI1() (unstable)), (SPI2 <= SPI2(SPI2_DMA : {
1141 bind_dma_interrupt, enable_dma_interrupt, disable_dma_interrupt }, SPI2 : {
1142 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (SPI3 <=
1143 SPI3(SPI3_DMA : { bind_dma_interrupt, enable_dma_interrupt, disable_dma_interrupt
1144 }, SPI3 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
1145 })), (SYSCON <= SYSCON() (unstable)), (SYSTEM <= SYSTEM() (unstable)), (SYSTIMER
1146 <= SYSTIMER() (unstable)), (TIMG0 <= TIMG0() (unstable)), (TIMG1 <= TIMG1()
1147 (unstable)), (TWAI0 <= TWAI0() (unstable)), (UART0 <= UART0(UART0 : {
1148 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (UART1 <=
1149 UART1(UART1 : { bind_peri_interrupt, enable_peri_interrupt,
1150 disable_peri_interrupt })), (UHCI0 <= UHCI0() (unstable)), (USB0 <= USB0()
1151 (unstable)), (USB_WRAP <= USB_WRAP() (unstable)), (XTS_AES <= XTS_AES()
1152 (unstable)), (WIFI <= WIFI() (unstable)), (DMA_SPI2 <= SPI2() (unstable)),
1153 (DMA_SPI3 <= SPI3() (unstable)), (DMA_I2S0 <= I2S0() (unstable)), (DMA_CRYPTO <=
1154 CRYPTO_DMA() (unstable)), (DMA_COPY <= COPY_DMA() (unstable)), (ADC1 <= virtual()
1155 (unstable)), (ADC2 <= virtual() (unstable)), (DAC1 <= virtual() (unstable)),
1156 (DAC2 <= virtual() (unstable)), (FLASH <= virtual() (unstable)), (PSRAM <=
1157 virtual() (unstable)), (SW_INTERRUPT <= virtual() (unstable)), (ULP_RISCV_CORE <=
1158 virtual() (unstable))));
1159 };
1160}
1161#[macro_export]
1188#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1189macro_rules! for_each_gpio {
1190 ($($pattern:tt => $code:tt;)*) => {
1191 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
1192 _for_each_inner!((0, GPIO0() () ([Input] [Output]))); _for_each_inner!((1,
1193 GPIO1() () ([Input] [Output]))); _for_each_inner!((2, GPIO2() () ([Input]
1194 [Output]))); _for_each_inner!((3, GPIO3() () ([Input] [Output])));
1195 _for_each_inner!((4, GPIO4() () ([Input] [Output]))); _for_each_inner!((5,
1196 GPIO5() () ([Input] [Output]))); _for_each_inner!((6, GPIO6() () ([Input]
1197 [Output]))); _for_each_inner!((7, GPIO7() () ([Input] [Output])));
1198 _for_each_inner!((8, GPIO8() (_3 => SUBSPICS1) ([Input] [Output])));
1199 _for_each_inner!((9, GPIO9(_3 => SUBSPIHD _4 => FSPIHD) (_3 => SUBSPIHD _4 =>
1200 FSPIHD) ([Input] [Output]))); _for_each_inner!((10, GPIO10(_2 => FSPIIO4 _4 =>
1201 FSPICS0) (_2 => FSPIIO4 _3 => SUBSPICS0 _4 => FSPICS0) ([Input] [Output])));
1202 _for_each_inner!((11, GPIO11(_2 => FSPIIO5 _3 => SUBSPID _4 => FSPID) (_2 =>
1203 FSPIIO5 _3 => SUBSPID _4 => FSPID) ([Input] [Output]))); _for_each_inner!((12,
1204 GPIO12(_2 => FSPIIO6 _4 => FSPICLK) (_2 => FSPIIO6 _3 => SUBSPICLK _4 => FSPICLK)
1205 ([Input] [Output]))); _for_each_inner!((13, GPIO13(_2 => FSPIIO7 _3 => SUBSPIQ _4
1206 => FSPIQ) (_2 => FSPIIO7 _3 => SUBSPIQ _4 => FSPIQ) ([Input] [Output])));
1207 _for_each_inner!((14, GPIO14(_3 => SUBSPIWP _4 => FSPIWP) (_2 => FSPIDQS _3 =>
1208 SUBSPIWP _4 => FSPIWP) ([Input] [Output]))); _for_each_inner!((15, GPIO15() (_2
1209 => U0RTS) ([Input] [Output]))); _for_each_inner!((16, GPIO16(_2 => U0CTS) ()
1210 ([Input] [Output]))); _for_each_inner!((17, GPIO17() (_2 => U1TXD) ([Input]
1211 [Output]))); _for_each_inner!((18, GPIO18(_2 => U1RXD) (_3 => CLK_OUT3) ([Input]
1212 [Output]))); _for_each_inner!((19, GPIO19() (_2 => U1RTS _3 => CLK_OUT2) ([Input]
1213 [Output]))); _for_each_inner!((20, GPIO20(_2 => U1CTS) (_3 => CLK_OUT1) ([Input]
1214 [Output]))); _for_each_inner!((21, GPIO21() () ([Input] [Output])));
1215 _for_each_inner!((33, GPIO33(_2 => FSPIHD _3 => SUBSPIHD) (_2 => FSPIHD _3 =>
1216 SUBSPIHD) ([Input] [Output]))); _for_each_inner!((34, GPIO34(_2 => FSPICS0) (_2
1217 => FSPICS0 _3 => SUBSPICS0) ([Input] [Output]))); _for_each_inner!((35, GPIO35(_2
1218 => FSPID _3 => SUBSPID) (_2 => FSPID _3 => SUBSPID) ([Input] [Output])));
1219 _for_each_inner!((36, GPIO36(_2 => FSPICLK) (_2 => FSPICLK _3 => SUBSPICLK)
1220 ([Input] [Output]))); _for_each_inner!((37, GPIO37(_2 => FSPIQ _3 => SUBSPIQ _4
1221 => SPIDQS) (_2 => FSPIQ _3 => SUBSPIQ _4 => SPIDQS) ([Input] [Output])));
1222 _for_each_inner!((38, GPIO38(_2 => FSPIWP _3 => SUBSPIWP) (_2 => FSPIWP _3 =>
1223 SUBSPIWP) ([Input] [Output]))); _for_each_inner!((39, GPIO39(_0 => MTCK) (_2 =>
1224 CLK_OUT3 _3 => SUBSPICS1) ([Input] [Output]))); _for_each_inner!((40, GPIO40()
1225 (_0 => MTDO _2 => CLK_OUT2) ([Input] [Output]))); _for_each_inner!((41, GPIO41(_0
1226 => MTDI) (_2 => CLK_OUT1) ([Input] [Output]))); _for_each_inner!((42, GPIO42(_0
1227 => MTMS) () ([Input] [Output]))); _for_each_inner!((43, GPIO43() (_0 => U0TXD _2
1228 => CLK_OUT1) ([Input] [Output]))); _for_each_inner!((44, GPIO44(_0 => U0RXD) (_2
1229 => CLK_OUT2) ([Input] [Output]))); _for_each_inner!((45, GPIO45() () ([Input]
1230 [Output]))); _for_each_inner!((46, GPIO46() () ([Input] [Output])));
1231 _for_each_inner!((all(0, GPIO0() () ([Input] [Output])), (1, GPIO1() () ([Input]
1232 [Output])), (2, GPIO2() () ([Input] [Output])), (3, GPIO3() () ([Input]
1233 [Output])), (4, GPIO4() () ([Input] [Output])), (5, GPIO5() () ([Input]
1234 [Output])), (6, GPIO6() () ([Input] [Output])), (7, GPIO7() () ([Input]
1235 [Output])), (8, GPIO8() (_3 => SUBSPICS1) ([Input] [Output])), (9, GPIO9(_3 =>
1236 SUBSPIHD _4 => FSPIHD) (_3 => SUBSPIHD _4 => FSPIHD) ([Input] [Output])), (10,
1237 GPIO10(_2 => FSPIIO4 _4 => FSPICS0) (_2 => FSPIIO4 _3 => SUBSPICS0 _4 => FSPICS0)
1238 ([Input] [Output])), (11, GPIO11(_2 => FSPIIO5 _3 => SUBSPID _4 => FSPID) (_2 =>
1239 FSPIIO5 _3 => SUBSPID _4 => FSPID) ([Input] [Output])), (12, GPIO12(_2 => FSPIIO6
1240 _4 => FSPICLK) (_2 => FSPIIO6 _3 => SUBSPICLK _4 => FSPICLK) ([Input] [Output])),
1241 (13, GPIO13(_2 => FSPIIO7 _3 => SUBSPIQ _4 => FSPIQ) (_2 => FSPIIO7 _3 => SUBSPIQ
1242 _4 => FSPIQ) ([Input] [Output])), (14, GPIO14(_3 => SUBSPIWP _4 => FSPIWP) (_2 =>
1243 FSPIDQS _3 => SUBSPIWP _4 => FSPIWP) ([Input] [Output])), (15, GPIO15() (_2 =>
1244 U0RTS) ([Input] [Output])), (16, GPIO16(_2 => U0CTS) () ([Input] [Output])), (17,
1245 GPIO17() (_2 => U1TXD) ([Input] [Output])), (18, GPIO18(_2 => U1RXD) (_3 =>
1246 CLK_OUT3) ([Input] [Output])), (19, GPIO19() (_2 => U1RTS _3 => CLK_OUT2)
1247 ([Input] [Output])), (20, GPIO20(_2 => U1CTS) (_3 => CLK_OUT1) ([Input]
1248 [Output])), (21, GPIO21() () ([Input] [Output])), (33, GPIO33(_2 => FSPIHD _3 =>
1249 SUBSPIHD) (_2 => FSPIHD _3 => SUBSPIHD) ([Input] [Output])), (34, GPIO34(_2 =>
1250 FSPICS0) (_2 => FSPICS0 _3 => SUBSPICS0) ([Input] [Output])), (35, GPIO35(_2 =>
1251 FSPID _3 => SUBSPID) (_2 => FSPID _3 => SUBSPID) ([Input] [Output])), (36,
1252 GPIO36(_2 => FSPICLK) (_2 => FSPICLK _3 => SUBSPICLK) ([Input] [Output])), (37,
1253 GPIO37(_2 => FSPIQ _3 => SUBSPIQ _4 => SPIDQS) (_2 => FSPIQ _3 => SUBSPIQ _4 =>
1254 SPIDQS) ([Input] [Output])), (38, GPIO38(_2 => FSPIWP _3 => SUBSPIWP) (_2 =>
1255 FSPIWP _3 => SUBSPIWP) ([Input] [Output])), (39, GPIO39(_0 => MTCK) (_2 =>
1256 CLK_OUT3 _3 => SUBSPICS1) ([Input] [Output])), (40, GPIO40() (_0 => MTDO _2 =>
1257 CLK_OUT2) ([Input] [Output])), (41, GPIO41(_0 => MTDI) (_2 => CLK_OUT1) ([Input]
1258 [Output])), (42, GPIO42(_0 => MTMS) () ([Input] [Output])), (43, GPIO43() (_0 =>
1259 U0TXD _2 => CLK_OUT1) ([Input] [Output])), (44, GPIO44(_0 => U0RXD) (_2 =>
1260 CLK_OUT2) ([Input] [Output])), (45, GPIO45() () ([Input] [Output])), (46,
1261 GPIO46() () ([Input] [Output]))));
1262 };
1263}
1264#[macro_export]
1291#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1292macro_rules! for_each_analog_function {
1293 ($($pattern:tt => $code:tt;)*) => {
1294 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
1295 _for_each_inner!((TOUCH1, GPIO1)); _for_each_inner!((ADC1_CH0, GPIO1));
1296 _for_each_inner!((TOUCH2, GPIO2)); _for_each_inner!((ADC1_CH1, GPIO2));
1297 _for_each_inner!((TOUCH3, GPIO3)); _for_each_inner!((ADC1_CH2, GPIO3));
1298 _for_each_inner!((TOUCH4, GPIO4)); _for_each_inner!((ADC1_CH3, GPIO4));
1299 _for_each_inner!((TOUCH5, GPIO5)); _for_each_inner!((ADC1_CH4, GPIO5));
1300 _for_each_inner!((TOUCH6, GPIO6)); _for_each_inner!((ADC1_CH5, GPIO6));
1301 _for_each_inner!((TOUCH7, GPIO7)); _for_each_inner!((ADC1_CH6, GPIO7));
1302 _for_each_inner!((TOUCH8, GPIO8)); _for_each_inner!((ADC1_CH7, GPIO8));
1303 _for_each_inner!((TOUCH9, GPIO9)); _for_each_inner!((ADC1_CH8, GPIO9));
1304 _for_each_inner!((TOUCH10, GPIO10)); _for_each_inner!((ADC1_CH9, GPIO10));
1305 _for_each_inner!((TOUCH11, GPIO11)); _for_each_inner!((ADC2_CH0, GPIO11));
1306 _for_each_inner!((TOUCH12, GPIO12)); _for_each_inner!((ADC2_CH1, GPIO12));
1307 _for_each_inner!((TOUCH13, GPIO13)); _for_each_inner!((ADC2_CH2, GPIO13));
1308 _for_each_inner!((TOUCH14, GPIO14)); _for_each_inner!((ADC2_CH3, GPIO14));
1309 _for_each_inner!((XTAL_32K_P, GPIO15)); _for_each_inner!((ADC2_CH4, GPIO15));
1310 _for_each_inner!((XTAL_32K_N, GPIO16)); _for_each_inner!((ADC2_CH5, GPIO16));
1311 _for_each_inner!((DAC_1, GPIO17)); _for_each_inner!((ADC2_CH6, GPIO17));
1312 _for_each_inner!((DAC_2, GPIO18)); _for_each_inner!((ADC2_CH7, GPIO18));
1313 _for_each_inner!((USB_DM, GPIO19)); _for_each_inner!((ADC2_CH8, GPIO19));
1314 _for_each_inner!((USB_DP, GPIO20)); _for_each_inner!((ADC2_CH9, GPIO20));
1315 _for_each_inner!(((TOUCH1, TOUCHn, 1), GPIO1)); _for_each_inner!(((ADC1_CH0,
1316 ADCn_CHm, 1, 0), GPIO1)); _for_each_inner!(((TOUCH2, TOUCHn, 2), GPIO2));
1317 _for_each_inner!(((ADC1_CH1, ADCn_CHm, 1, 1), GPIO2)); _for_each_inner!(((TOUCH3,
1318 TOUCHn, 3), GPIO3)); _for_each_inner!(((ADC1_CH2, ADCn_CHm, 1, 2), GPIO3));
1319 _for_each_inner!(((TOUCH4, TOUCHn, 4), GPIO4)); _for_each_inner!(((ADC1_CH3,
1320 ADCn_CHm, 1, 3), GPIO4)); _for_each_inner!(((TOUCH5, TOUCHn, 5), GPIO5));
1321 _for_each_inner!(((ADC1_CH4, ADCn_CHm, 1, 4), GPIO5)); _for_each_inner!(((TOUCH6,
1322 TOUCHn, 6), GPIO6)); _for_each_inner!(((ADC1_CH5, ADCn_CHm, 1, 5), GPIO6));
1323 _for_each_inner!(((TOUCH7, TOUCHn, 7), GPIO7)); _for_each_inner!(((ADC1_CH6,
1324 ADCn_CHm, 1, 6), GPIO7)); _for_each_inner!(((TOUCH8, TOUCHn, 8), GPIO8));
1325 _for_each_inner!(((ADC1_CH7, ADCn_CHm, 1, 7), GPIO8)); _for_each_inner!(((TOUCH9,
1326 TOUCHn, 9), GPIO9)); _for_each_inner!(((ADC1_CH8, ADCn_CHm, 1, 8), GPIO9));
1327 _for_each_inner!(((TOUCH10, TOUCHn, 10), GPIO10)); _for_each_inner!(((ADC1_CH9,
1328 ADCn_CHm, 1, 9), GPIO10)); _for_each_inner!(((TOUCH11, TOUCHn, 11), GPIO11));
1329 _for_each_inner!(((ADC2_CH0, ADCn_CHm, 2, 0), GPIO11));
1330 _for_each_inner!(((TOUCH12, TOUCHn, 12), GPIO12)); _for_each_inner!(((ADC2_CH1,
1331 ADCn_CHm, 2, 1), GPIO12)); _for_each_inner!(((TOUCH13, TOUCHn, 13), GPIO13));
1332 _for_each_inner!(((ADC2_CH2, ADCn_CHm, 2, 2), GPIO13));
1333 _for_each_inner!(((TOUCH14, TOUCHn, 14), GPIO14)); _for_each_inner!(((ADC2_CH3,
1334 ADCn_CHm, 2, 3), GPIO14)); _for_each_inner!(((ADC2_CH4, ADCn_CHm, 2, 4),
1335 GPIO15)); _for_each_inner!(((ADC2_CH5, ADCn_CHm, 2, 5), GPIO16));
1336 _for_each_inner!(((DAC_1, DAC_n, 1), GPIO17)); _for_each_inner!(((ADC2_CH6,
1337 ADCn_CHm, 2, 6), GPIO17)); _for_each_inner!(((DAC_2, DAC_n, 2), GPIO18));
1338 _for_each_inner!(((ADC2_CH7, ADCn_CHm, 2, 7), GPIO18));
1339 _for_each_inner!(((ADC2_CH8, ADCn_CHm, 2, 8), GPIO19));
1340 _for_each_inner!(((ADC2_CH9, ADCn_CHm, 2, 9), GPIO20));
1341 _for_each_inner!((all(TOUCH1, GPIO1), (ADC1_CH0, GPIO1), (TOUCH2, GPIO2),
1342 (ADC1_CH1, GPIO2), (TOUCH3, GPIO3), (ADC1_CH2, GPIO3), (TOUCH4, GPIO4),
1343 (ADC1_CH3, GPIO4), (TOUCH5, GPIO5), (ADC1_CH4, GPIO5), (TOUCH6, GPIO6),
1344 (ADC1_CH5, GPIO6), (TOUCH7, GPIO7), (ADC1_CH6, GPIO7), (TOUCH8, GPIO8),
1345 (ADC1_CH7, GPIO8), (TOUCH9, GPIO9), (ADC1_CH8, GPIO9), (TOUCH10, GPIO10),
1346 (ADC1_CH9, GPIO10), (TOUCH11, GPIO11), (ADC2_CH0, GPIO11), (TOUCH12, GPIO12),
1347 (ADC2_CH1, GPIO12), (TOUCH13, GPIO13), (ADC2_CH2, GPIO13), (TOUCH14, GPIO14),
1348 (ADC2_CH3, GPIO14), (XTAL_32K_P, GPIO15), (ADC2_CH4, GPIO15), (XTAL_32K_N,
1349 GPIO16), (ADC2_CH5, GPIO16), (DAC_1, GPIO17), (ADC2_CH6, GPIO17), (DAC_2,
1350 GPIO18), (ADC2_CH7, GPIO18), (USB_DM, GPIO19), (ADC2_CH8, GPIO19), (USB_DP,
1351 GPIO20), (ADC2_CH9, GPIO20))); _for_each_inner!((all_expanded((TOUCH1, TOUCHn,
1352 1), GPIO1), ((ADC1_CH0, ADCn_CHm, 1, 0), GPIO1), ((TOUCH2, TOUCHn, 2), GPIO2),
1353 ((ADC1_CH1, ADCn_CHm, 1, 1), GPIO2), ((TOUCH3, TOUCHn, 3), GPIO3), ((ADC1_CH2,
1354 ADCn_CHm, 1, 2), GPIO3), ((TOUCH4, TOUCHn, 4), GPIO4), ((ADC1_CH3, ADCn_CHm, 1,
1355 3), GPIO4), ((TOUCH5, TOUCHn, 5), GPIO5), ((ADC1_CH4, ADCn_CHm, 1, 4), GPIO5),
1356 ((TOUCH6, TOUCHn, 6), GPIO6), ((ADC1_CH5, ADCn_CHm, 1, 5), GPIO6), ((TOUCH7,
1357 TOUCHn, 7), GPIO7), ((ADC1_CH6, ADCn_CHm, 1, 6), GPIO7), ((TOUCH8, TOUCHn, 8),
1358 GPIO8), ((ADC1_CH7, ADCn_CHm, 1, 7), GPIO8), ((TOUCH9, TOUCHn, 9), GPIO9),
1359 ((ADC1_CH8, ADCn_CHm, 1, 8), GPIO9), ((TOUCH10, TOUCHn, 10), GPIO10), ((ADC1_CH9,
1360 ADCn_CHm, 1, 9), GPIO10), ((TOUCH11, TOUCHn, 11), GPIO11), ((ADC2_CH0, ADCn_CHm,
1361 2, 0), GPIO11), ((TOUCH12, TOUCHn, 12), GPIO12), ((ADC2_CH1, ADCn_CHm, 2, 1),
1362 GPIO12), ((TOUCH13, TOUCHn, 13), GPIO13), ((ADC2_CH2, ADCn_CHm, 2, 2), GPIO13),
1363 ((TOUCH14, TOUCHn, 14), GPIO14), ((ADC2_CH3, ADCn_CHm, 2, 3), GPIO14),
1364 ((ADC2_CH4, ADCn_CHm, 2, 4), GPIO15), ((ADC2_CH5, ADCn_CHm, 2, 5), GPIO16),
1365 ((DAC_1, DAC_n, 1), GPIO17), ((ADC2_CH6, ADCn_CHm, 2, 6), GPIO17), ((DAC_2,
1366 DAC_n, 2), GPIO18), ((ADC2_CH7, ADCn_CHm, 2, 7), GPIO18), ((ADC2_CH8, ADCn_CHm,
1367 2, 8), GPIO19), ((ADC2_CH9, ADCn_CHm, 2, 9), GPIO20)));
1368 };
1369}
1370#[macro_export]
1397#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1398macro_rules! for_each_lp_function {
1399 ($($pattern:tt => $code:tt;)*) => {
1400 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
1401 _for_each_inner!((RTC_GPIO0, GPIO0)); _for_each_inner!((RTC_GPIO1, GPIO1));
1402 _for_each_inner!((RTC_GPIO2, GPIO2)); _for_each_inner!((RTC_GPIO3, GPIO3));
1403 _for_each_inner!((RTC_GPIO4, GPIO4)); _for_each_inner!((RTC_GPIO5, GPIO5));
1404 _for_each_inner!((RTC_GPIO6, GPIO6)); _for_each_inner!((RTC_GPIO7, GPIO7));
1405 _for_each_inner!((RTC_GPIO8, GPIO8)); _for_each_inner!((RTC_GPIO9, GPIO9));
1406 _for_each_inner!((RTC_GPIO10, GPIO10)); _for_each_inner!((RTC_GPIO11, GPIO11));
1407 _for_each_inner!((RTC_GPIO12, GPIO12)); _for_each_inner!((RTC_GPIO13, GPIO13));
1408 _for_each_inner!((RTC_GPIO14, GPIO14)); _for_each_inner!((RTC_GPIO15, GPIO15));
1409 _for_each_inner!((RTC_GPIO16, GPIO16)); _for_each_inner!((RTC_GPIO17, GPIO17));
1410 _for_each_inner!((RTC_GPIO18, GPIO18)); _for_each_inner!((RTC_GPIO19, GPIO19));
1411 _for_each_inner!((RTC_GPIO20, GPIO20)); _for_each_inner!((RTC_GPIO21, GPIO21));
1412 _for_each_inner!(((RTC_GPIO0, RTC_GPIOn, 0), GPIO0));
1413 _for_each_inner!(((RTC_GPIO1, RTC_GPIOn, 1), GPIO1));
1414 _for_each_inner!(((RTC_GPIO2, RTC_GPIOn, 2), GPIO2));
1415 _for_each_inner!(((RTC_GPIO3, RTC_GPIOn, 3), GPIO3));
1416 _for_each_inner!(((RTC_GPIO4, RTC_GPIOn, 4), GPIO4));
1417 _for_each_inner!(((RTC_GPIO5, RTC_GPIOn, 5), GPIO5));
1418 _for_each_inner!(((RTC_GPIO6, RTC_GPIOn, 6), GPIO6));
1419 _for_each_inner!(((RTC_GPIO7, RTC_GPIOn, 7), GPIO7));
1420 _for_each_inner!(((RTC_GPIO8, RTC_GPIOn, 8), GPIO8));
1421 _for_each_inner!(((RTC_GPIO9, RTC_GPIOn, 9), GPIO9));
1422 _for_each_inner!(((RTC_GPIO10, RTC_GPIOn, 10), GPIO10));
1423 _for_each_inner!(((RTC_GPIO11, RTC_GPIOn, 11), GPIO11));
1424 _for_each_inner!(((RTC_GPIO12, RTC_GPIOn, 12), GPIO12));
1425 _for_each_inner!(((RTC_GPIO13, RTC_GPIOn, 13), GPIO13));
1426 _for_each_inner!(((RTC_GPIO14, RTC_GPIOn, 14), GPIO14));
1427 _for_each_inner!(((RTC_GPIO15, RTC_GPIOn, 15), GPIO15));
1428 _for_each_inner!(((RTC_GPIO16, RTC_GPIOn, 16), GPIO16));
1429 _for_each_inner!(((RTC_GPIO17, RTC_GPIOn, 17), GPIO17));
1430 _for_each_inner!(((RTC_GPIO18, RTC_GPIOn, 18), GPIO18));
1431 _for_each_inner!(((RTC_GPIO19, RTC_GPIOn, 19), GPIO19));
1432 _for_each_inner!(((RTC_GPIO20, RTC_GPIOn, 20), GPIO20));
1433 _for_each_inner!(((RTC_GPIO21, RTC_GPIOn, 21), GPIO21));
1434 _for_each_inner!((all(RTC_GPIO0, GPIO0), (RTC_GPIO1, GPIO1), (RTC_GPIO2, GPIO2),
1435 (RTC_GPIO3, GPIO3), (RTC_GPIO4, GPIO4), (RTC_GPIO5, GPIO5), (RTC_GPIO6, GPIO6),
1436 (RTC_GPIO7, GPIO7), (RTC_GPIO8, GPIO8), (RTC_GPIO9, GPIO9), (RTC_GPIO10, GPIO10),
1437 (RTC_GPIO11, GPIO11), (RTC_GPIO12, GPIO12), (RTC_GPIO13, GPIO13), (RTC_GPIO14,
1438 GPIO14), (RTC_GPIO15, GPIO15), (RTC_GPIO16, GPIO16), (RTC_GPIO17, GPIO17),
1439 (RTC_GPIO18, GPIO18), (RTC_GPIO19, GPIO19), (RTC_GPIO20, GPIO20), (RTC_GPIO21,
1440 GPIO21))); _for_each_inner!((all_expanded((RTC_GPIO0, RTC_GPIOn, 0), GPIO0),
1441 ((RTC_GPIO1, RTC_GPIOn, 1), GPIO1), ((RTC_GPIO2, RTC_GPIOn, 2), GPIO2),
1442 ((RTC_GPIO3, RTC_GPIOn, 3), GPIO3), ((RTC_GPIO4, RTC_GPIOn, 4), GPIO4),
1443 ((RTC_GPIO5, RTC_GPIOn, 5), GPIO5), ((RTC_GPIO6, RTC_GPIOn, 6), GPIO6),
1444 ((RTC_GPIO7, RTC_GPIOn, 7), GPIO7), ((RTC_GPIO8, RTC_GPIOn, 8), GPIO8),
1445 ((RTC_GPIO9, RTC_GPIOn, 9), GPIO9), ((RTC_GPIO10, RTC_GPIOn, 10), GPIO10),
1446 ((RTC_GPIO11, RTC_GPIOn, 11), GPIO11), ((RTC_GPIO12, RTC_GPIOn, 12), GPIO12),
1447 ((RTC_GPIO13, RTC_GPIOn, 13), GPIO13), ((RTC_GPIO14, RTC_GPIOn, 14), GPIO14),
1448 ((RTC_GPIO15, RTC_GPIOn, 15), GPIO15), ((RTC_GPIO16, RTC_GPIOn, 16), GPIO16),
1449 ((RTC_GPIO17, RTC_GPIOn, 17), GPIO17), ((RTC_GPIO18, RTC_GPIOn, 18), GPIO18),
1450 ((RTC_GPIO19, RTC_GPIOn, 19), GPIO19), ((RTC_GPIO20, RTC_GPIOn, 20), GPIO20),
1451 ((RTC_GPIO21, RTC_GPIOn, 21), GPIO21)));
1452 };
1453}
1454#[macro_export]
1458#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1459macro_rules! define_io_mux_signals {
1460 () => {
1461 #[allow(non_camel_case_types, clippy::upper_case_acronyms)]
1462 #[derive(Debug, PartialEq, Copy, Clone)]
1463 #[cfg_attr(feature = "defmt", derive(defmt::Format))]
1464 #[doc(hidden)]
1465 pub enum InputSignal {
1466 SPIQ = 0,
1467 SPID = 1,
1468 SPIHD = 2,
1469 SPIWP = 3,
1470 SPID4 = 7,
1471 SPID5 = 8,
1472 SPID6 = 9,
1473 SPID7 = 10,
1474 SPIDQS = 11,
1475 U0RXD = 14,
1476 U0CTS = 15,
1477 U0DSR = 16,
1478 U1RXD = 17,
1479 U1CTS = 18,
1480 U1DSR = 21,
1481 I2S0O_BCK = 23,
1482 I2S0O_WS = 25,
1483 I2S0I_BCK = 27,
1484 I2S0I_WS = 28,
1485 I2CEXT0_SCL = 29,
1486 I2CEXT0_SDA = 30,
1487 PCNT0_SIG_CH0 = 39,
1488 PCNT0_SIG_CH1 = 40,
1489 PCNT0_CTRL_CH0 = 41,
1490 PCNT0_CTRL_CH1 = 42,
1491 PCNT1_SIG_CH0 = 43,
1492 PCNT1_SIG_CH1 = 44,
1493 PCNT1_CTRL_CH0 = 45,
1494 PCNT1_CTRL_CH1 = 46,
1495 PCNT2_SIG_CH0 = 47,
1496 PCNT2_SIG_CH1 = 48,
1497 PCNT2_CTRL_CH0 = 49,
1498 PCNT2_CTRL_CH1 = 50,
1499 PCNT3_SIG_CH0 = 51,
1500 PCNT3_SIG_CH1 = 52,
1501 PCNT3_CTRL_CH0 = 53,
1502 PCNT3_CTRL_CH1 = 54,
1503 USB_EXTPHY_VP = 61,
1504 USB_EXTPHY_VM = 62,
1505 USB_EXTPHY_RCV = 63,
1506 USB_OTG_IDDIG = 64,
1507 USB_OTG_AVALID = 65,
1508 USB_SRP_BVALID = 66,
1509 USB_OTG_VBUSVALID = 67,
1510 USB_SRP_SESSEND = 68,
1511 SPI3_CLK = 72,
1512 SPI3_Q = 73,
1513 SPI3_D = 74,
1514 SPI3_HD = 75,
1515 SPI3_CS0 = 76,
1516 RMT_SIG_0 = 83,
1517 RMT_SIG_1 = 84,
1518 RMT_SIG_2 = 85,
1519 RMT_SIG_3 = 86,
1520 I2CEXT1_SCL = 95,
1521 I2CEXT1_SDA = 96,
1522 FSPICLK = 108,
1523 FSPIQ = 109,
1524 FSPID = 110,
1525 FSPIHD = 111,
1526 FSPIWP = 112,
1527 FSPIIO4 = 113,
1528 FSPIIO5 = 114,
1529 FSPIIO6 = 115,
1530 FSPIIO7 = 116,
1531 FSPICS0 = 117,
1532 TWAI_RX = 123,
1533 SUBSPIQ = 127,
1534 SUBSPID = 128,
1535 SUBSPIHD = 129,
1536 SUBSPIWP = 130,
1537 I2S0I_DATA_IN15 = 158,
1538 SUBSPID4 = 167,
1539 SUBSPID5 = 168,
1540 SUBSPID6 = 169,
1541 SUBSPID7 = 170,
1542 SUBSPIDQS = 171,
1543 PCMFSYNC = 203,
1544 PCMCLK = 204,
1545 PRO_ALONEGPIO_IN0 = 235,
1546 PRO_ALONEGPIO_IN1 = 236,
1547 PRO_ALONEGPIO_IN2 = 237,
1548 PRO_ALONEGPIO_IN3 = 238,
1549 PRO_ALONEGPIO_IN4 = 239,
1550 PRO_ALONEGPIO_IN5 = 240,
1551 PRO_ALONEGPIO_IN6 = 241,
1552 PRO_ALONEGPIO_IN7 = 242,
1553 MTDI,
1554 MTCK,
1555 MTMS,
1556 }
1557 #[allow(non_camel_case_types, clippy::upper_case_acronyms)]
1558 #[derive(Debug, PartialEq, Copy, Clone)]
1559 #[cfg_attr(feature = "defmt", derive(defmt::Format))]
1560 #[doc(hidden)]
1561 pub enum OutputSignal {
1562 SPIQ = 0,
1563 SPID = 1,
1564 SPIHD = 2,
1565 SPIWP = 3,
1566 SPICLK = 4,
1567 SPICS0 = 5,
1568 SPICS1 = 6,
1569 SPID4 = 7,
1570 SPID5 = 8,
1571 SPID6 = 9,
1572 SPID7 = 10,
1573 SPIDQS = 11,
1574 U0TXD = 14,
1575 U0RTS = 15,
1576 U0DTR = 16,
1577 U1TXD = 17,
1578 U1RTS = 18,
1579 U1DTR = 21,
1580 I2S0O_BCK = 23,
1581 I2S0O_WS = 25,
1582 I2S0I_BCK = 27,
1583 I2S0I_WS = 28,
1584 I2CEXT0_SCL = 29,
1585 I2CEXT0_SDA = 30,
1586 SDIO_TOHOST_INT = 31,
1587 USB_EXTPHY_OEN = 61,
1588 USB_EXTPHY_VPO = 63,
1589 USB_EXTPHY_VMO = 64,
1590 SPI3_CLK = 72,
1591 SPI3_Q = 73,
1592 SPI3_D = 74,
1593 SPI3_HD = 75,
1594 SPI3_CS0 = 76,
1595 SPI3_CS1 = 77,
1596 SPI3_CS2 = 78,
1597 LEDC_LS_SIG0 = 79,
1598 LEDC_LS_SIG1 = 80,
1599 LEDC_LS_SIG2 = 81,
1600 LEDC_LS_SIG3 = 82,
1601 LEDC_LS_SIG4 = 83,
1602 LEDC_LS_SIG5 = 84,
1603 LEDC_LS_SIG6 = 85,
1604 LEDC_LS_SIG7 = 86,
1605 RMT_SIG_0 = 87,
1606 RMT_SIG_1 = 88,
1607 RMT_SIG_2 = 89,
1608 RMT_SIG_3 = 90,
1609 I2CEXT1_SCL = 95,
1610 I2CEXT1_SDA = 96,
1611 GPIO_SD0 = 100,
1612 GPIO_SD1 = 101,
1613 GPIO_SD2 = 102,
1614 GPIO_SD3 = 103,
1615 GPIO_SD4 = 104,
1616 GPIO_SD5 = 105,
1617 GPIO_SD6 = 106,
1618 GPIO_SD7 = 107,
1619 FSPICLK = 108,
1620 FSPIQ = 109,
1621 FSPID = 110,
1622 FSPIHD = 111,
1623 FSPIWP = 112,
1624 FSPIIO4 = 113,
1625 FSPIIO5 = 114,
1626 FSPIIO6 = 115,
1627 FSPIIO7 = 116,
1628 FSPICS0 = 117,
1629 FSPICS1 = 118,
1630 FSPICS2 = 119,
1631 FSPICS3 = 120,
1632 FSPICS4 = 121,
1633 FSPICS5 = 122,
1634 TWAI_TX = 123,
1635 SUBSPICLK = 126,
1636 SUBSPIQ = 127,
1637 SUBSPID = 128,
1638 SUBSPIHD = 129,
1639 SUBSPIWP = 130,
1640 SUBSPICS0 = 131,
1641 SUBSPICS1 = 132,
1642 FSPIDQS = 133,
1643 FSPI_HSYNC = 134,
1644 FSPI_VSYNC = 135,
1645 FSPI_DE = 136,
1646 FSPICD = 137,
1647 SPI3_CD = 139,
1648 SPI3_DQS = 140,
1649 I2S0O_DATA_OUT23 = 166,
1650 SUBSPID4 = 167,
1651 SUBSPID5 = 168,
1652 SUBSPID6 = 169,
1653 SUBSPID7 = 170,
1654 SUBSPIDQS = 171,
1655 PCMFSYNC = 209,
1656 PCMCLK = 210,
1657 PRO_ALONEGPIO_OUT0 = 235,
1658 PRO_ALONEGPIO_OUT1 = 236,
1659 PRO_ALONEGPIO_OUT2 = 237,
1660 PRO_ALONEGPIO_OUT3 = 238,
1661 PRO_ALONEGPIO_OUT4 = 239,
1662 PRO_ALONEGPIO_OUT5 = 240,
1663 PRO_ALONEGPIO_OUT6 = 241,
1664 PRO_ALONEGPIO_OUT7 = 242,
1665 CLK_I2S = 251,
1666 GPIO = 256,
1667 CLK_OUT1,
1668 CLK_OUT2,
1669 CLK_OUT3,
1670 MTDO,
1671 }
1672 };
1673}
1674#[macro_export]
1687#[expect(clippy::crate_in_macro_def)]
1688#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1689macro_rules! define_io_mux_reg {
1690 () => {
1691 pub(crate) fn io_mux_reg(gpio_num: u8) -> &'static crate::pac::io_mux::GPIO {
1692 crate::peripherals::IO_MUX::regs().gpio(gpio_num as usize)
1693 }
1694 };
1695}