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 ("uart.peripheral_controls_mem_clk") => {
253 false
254 };
255 ("wifi.has_wifi6") => {
256 false
257 };
258 ("bt.controller") => {
259 "btdm"
260 };
261 ("phy.combo_module") => {
262 true
263 };
264}
265#[macro_export]
266#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
267macro_rules! for_each_soc_xtal_options {
268 ($($pattern:tt => $code:tt;)*) => {
269 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
270 _for_each_inner!((26)); _for_each_inner!((40)); _for_each_inner!((all(26),
271 (40)));
272 };
273}
274#[macro_export]
278#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
279macro_rules! implement_peripheral_clocks {
280 () => {
281 #[doc(hidden)]
282 #[derive(Debug, Clone, Copy, PartialEq, Eq)]
283 #[repr(u8)]
284 #[cfg_attr(feature = "defmt", derive(defmt::Format))]
285 pub enum Peripheral {
286 #[doc = "AES peripheral clock signal"]
287 Aes,
288 #[doc = "I2C_EXT0 peripheral clock signal"]
289 I2cExt0,
290 #[doc = "I2C_EXT1 peripheral clock signal"]
291 I2cExt1,
292 #[doc = "I2S0 peripheral clock signal"]
293 I2s0,
294 #[doc = "I2S1 peripheral clock signal"]
295 I2s1,
296 #[doc = "LEDC peripheral clock signal"]
297 Ledc,
298 #[doc = "MCPWM0 peripheral clock signal"]
299 Mcpwm0,
300 #[doc = "MCPWM1 peripheral clock signal"]
301 Mcpwm1,
302 #[doc = "PCNT peripheral clock signal"]
303 Pcnt,
304 #[doc = "RMT peripheral clock signal"]
305 Rmt,
306 #[doc = "RSA peripheral clock signal"]
307 Rsa,
308 #[doc = "SHA peripheral clock signal"]
309 Sha,
310 #[doc = "SPI2 peripheral clock signal"]
311 Spi2,
312 #[doc = "SPI3 peripheral clock signal"]
313 Spi3,
314 #[doc = "SPI_DMA peripheral clock signal"]
315 SpiDma,
316 #[doc = "TIMG0 peripheral clock signal"]
317 Timg0,
318 #[doc = "TIMG1 peripheral clock signal"]
319 Timg1,
320 #[doc = "TWAI0 peripheral clock signal"]
321 Twai0,
322 #[doc = "UART0 peripheral clock signal"]
323 Uart0,
324 #[doc = "UART1 peripheral clock signal"]
325 Uart1,
326 #[doc = "UART2 peripheral clock signal"]
327 Uart2,
328 #[doc = "UART_MEM peripheral clock signal"]
329 UartMem,
330 #[doc = "UHCI0 peripheral clock signal"]
331 Uhci0,
332 #[doc = "UHCI1 peripheral clock signal"]
333 Uhci1,
334 }
335 impl Peripheral {
336 const KEEP_ENABLED: &[Peripheral] = &[Self::Timg0, Self::Uart0, Self::UartMem];
337 const COUNT: usize = Self::ALL.len();
338 const ALL: &[Self] = &[
339 Self::Aes,
340 Self::I2cExt0,
341 Self::I2cExt1,
342 Self::I2s0,
343 Self::I2s1,
344 Self::Ledc,
345 Self::Mcpwm0,
346 Self::Mcpwm1,
347 Self::Pcnt,
348 Self::Rmt,
349 Self::Rsa,
350 Self::Sha,
351 Self::Spi2,
352 Self::Spi3,
353 Self::SpiDma,
354 Self::Timg0,
355 Self::Timg1,
356 Self::Twai0,
357 Self::Uart0,
358 Self::Uart1,
359 Self::Uart2,
360 Self::UartMem,
361 Self::Uhci0,
362 Self::Uhci1,
363 ];
364 }
365 unsafe fn enable_internal_racey(peripheral: Peripheral, enable: bool) {
366 match peripheral {
367 Peripheral::Aes => {
368 crate::peripherals::SYSTEM::regs()
369 .peri_clk_en()
370 .modify(|_, w| w.crypto_aes_clk_en().bit(enable));
371 }
372 Peripheral::I2cExt0 => {
373 crate::peripherals::SYSTEM::regs()
374 .perip_clk_en()
375 .modify(|_, w| w.i2c_ext0_clk_en().bit(enable));
376 }
377 Peripheral::I2cExt1 => {
378 crate::peripherals::SYSTEM::regs()
379 .perip_clk_en()
380 .modify(|_, w| w.i2c_ext1_clk_en().bit(enable));
381 }
382 Peripheral::I2s0 => {
383 crate::peripherals::SYSTEM::regs()
384 .perip_clk_en()
385 .modify(|_, w| w.i2s0_clk_en().bit(enable));
386 }
387 Peripheral::I2s1 => {
388 crate::peripherals::SYSTEM::regs()
389 .perip_clk_en()
390 .modify(|_, w| w.i2s1_clk_en().bit(enable));
391 }
392 Peripheral::Ledc => {
393 crate::peripherals::SYSTEM::regs()
394 .perip_clk_en()
395 .modify(|_, w| w.ledc_clk_en().bit(enable));
396 }
397 Peripheral::Mcpwm0 => {
398 crate::peripherals::SYSTEM::regs()
399 .perip_clk_en()
400 .modify(|_, w| w.pwm0_clk_en().bit(enable));
401 }
402 Peripheral::Mcpwm1 => {
403 crate::peripherals::SYSTEM::regs()
404 .perip_clk_en()
405 .modify(|_, w| w.pwm1_clk_en().bit(enable));
406 }
407 Peripheral::Pcnt => {
408 crate::peripherals::SYSTEM::regs()
409 .perip_clk_en()
410 .modify(|_, w| w.pcnt_clk_en().bit(enable));
411 }
412 Peripheral::Rmt => {
413 crate::peripherals::SYSTEM::regs()
414 .perip_clk_en()
415 .modify(|_, w| w.rmt_clk_en().bit(enable));
416 }
417 Peripheral::Rsa => {
418 crate::peripherals::SYSTEM::regs()
419 .peri_clk_en()
420 .modify(|_, w| w.crypto_rsa_clk_en().bit(enable));
421 }
422 Peripheral::Sha => {
423 crate::peripherals::SYSTEM::regs()
424 .peri_clk_en()
425 .modify(|_, w| w.crypto_sha_clk_en().bit(enable));
426 }
427 Peripheral::Spi2 => {
428 crate::peripherals::SYSTEM::regs()
429 .perip_clk_en()
430 .modify(|_, w| w.spi2_clk_en().bit(enable));
431 }
432 Peripheral::Spi3 => {
433 crate::peripherals::SYSTEM::regs()
434 .perip_clk_en()
435 .modify(|_, w| w.spi3_clk_en().bit(enable));
436 }
437 Peripheral::SpiDma => {
438 crate::peripherals::SYSTEM::regs()
439 .perip_clk_en()
440 .modify(|_, w| w.spi_dma_clk_en().bit(enable));
441 }
442 Peripheral::Timg0 => {
443 crate::peripherals::SYSTEM::regs()
444 .perip_clk_en()
445 .modify(|_, w| w.timergroup_clk_en().bit(enable));
446 }
447 Peripheral::Timg1 => {
448 crate::peripherals::SYSTEM::regs()
449 .perip_clk_en()
450 .modify(|_, w| w.timergroup1_clk_en().bit(enable));
451 }
452 Peripheral::Twai0 => {
453 crate::peripherals::SYSTEM::regs()
454 .perip_clk_en()
455 .modify(|_, w| w.twai_clk_en().bit(enable));
456 }
457 Peripheral::Uart0 => {
458 crate::peripherals::SYSTEM::regs()
459 .perip_clk_en()
460 .modify(|_, w| w.uart_clk_en().bit(enable));
461 }
462 Peripheral::Uart1 => {
463 crate::peripherals::SYSTEM::regs()
464 .perip_clk_en()
465 .modify(|_, w| w.uart1_clk_en().bit(enable));
466 }
467 Peripheral::Uart2 => {
468 crate::peripherals::SYSTEM::regs()
469 .perip_clk_en()
470 .modify(|_, w| w.uart2_clk_en().bit(enable));
471 }
472 Peripheral::UartMem => {
473 crate::peripherals::SYSTEM::regs()
474 .perip_clk_en()
475 .modify(|_, w| w.uart_mem_clk_en().bit(enable));
476 }
477 Peripheral::Uhci0 => {
478 crate::peripherals::SYSTEM::regs()
479 .perip_clk_en()
480 .modify(|_, w| w.uhci0_clk_en().bit(enable));
481 }
482 Peripheral::Uhci1 => {
483 crate::peripherals::SYSTEM::regs()
484 .perip_clk_en()
485 .modify(|_, w| w.uhci1_clk_en().bit(enable));
486 }
487 }
488 }
489 unsafe fn assert_peri_reset_racey(peripheral: Peripheral, reset: bool) {
490 match peripheral {
491 Peripheral::Aes => {
492 crate::peripherals::SYSTEM::regs()
493 .peri_rst_en()
494 .modify(|_, w| w.crypto_aes_rst().bit(reset));
495 }
496 Peripheral::I2cExt0 => {
497 crate::peripherals::SYSTEM::regs()
498 .perip_rst_en()
499 .modify(|_, w| w.i2c_ext0_rst().bit(reset));
500 }
501 Peripheral::I2cExt1 => {
502 crate::peripherals::SYSTEM::regs()
503 .perip_rst_en()
504 .modify(|_, w| w.i2c_ext1_rst().bit(reset));
505 }
506 Peripheral::I2s0 => {
507 crate::peripherals::SYSTEM::regs()
508 .perip_rst_en()
509 .modify(|_, w| w.i2s0_rst().bit(reset));
510 }
511 Peripheral::I2s1 => {
512 crate::peripherals::SYSTEM::regs()
513 .perip_rst_en()
514 .modify(|_, w| w.i2s1_rst().bit(reset));
515 }
516 Peripheral::Ledc => {
517 crate::peripherals::SYSTEM::regs()
518 .perip_rst_en()
519 .modify(|_, w| w.ledc_rst().bit(reset));
520 }
521 Peripheral::Mcpwm0 => {
522 crate::peripherals::SYSTEM::regs()
523 .perip_rst_en()
524 .modify(|_, w| w.pwm0_rst().bit(reset));
525 }
526 Peripheral::Mcpwm1 => {
527 crate::peripherals::SYSTEM::regs()
528 .perip_rst_en()
529 .modify(|_, w| w.pwm1_rst().bit(reset));
530 }
531 Peripheral::Pcnt => {
532 crate::peripherals::SYSTEM::regs()
533 .perip_rst_en()
534 .modify(|_, w| w.pcnt_rst().bit(reset));
535 }
536 Peripheral::Rmt => {
537 crate::peripherals::SYSTEM::regs()
538 .perip_rst_en()
539 .modify(|_, w| w.rmt_rst().bit(reset));
540 }
541 Peripheral::Rsa => {
542 crate::peripherals::SYSTEM::regs()
543 .peri_rst_en()
544 .modify(|_, w| w.crypto_rsa_rst().bit(reset));
545 }
546 Peripheral::Sha => {
547 crate::peripherals::SYSTEM::regs()
548 .peri_rst_en()
549 .modify(|_, w| w.crypto_sha_rst().bit(reset));
550 }
551 Peripheral::Spi2 => {
552 crate::peripherals::SYSTEM::regs()
553 .perip_rst_en()
554 .modify(|_, w| w.spi2_rst().bit(reset));
555 }
556 Peripheral::Spi3 => {
557 crate::peripherals::SYSTEM::regs()
558 .perip_rst_en()
559 .modify(|_, w| w.spi3_rst().bit(reset));
560 }
561 Peripheral::SpiDma => {
562 crate::peripherals::SYSTEM::regs()
563 .perip_rst_en()
564 .modify(|_, w| w.spi_dma_rst().bit(reset));
565 }
566 Peripheral::Timg0 => {
567 crate::peripherals::SYSTEM::regs()
568 .perip_rst_en()
569 .modify(|_, w| w.timergroup_rst().bit(reset));
570 }
571 Peripheral::Timg1 => {
572 crate::peripherals::SYSTEM::regs()
573 .perip_rst_en()
574 .modify(|_, w| w.timergroup1_rst().bit(reset));
575 }
576 Peripheral::Twai0 => {
577 crate::peripherals::SYSTEM::regs()
578 .perip_rst_en()
579 .modify(|_, w| w.twai_rst().bit(reset));
580 }
581 Peripheral::Uart0 => {
582 crate::peripherals::SYSTEM::regs()
583 .perip_rst_en()
584 .modify(|_, w| w.uart_rst().bit(reset));
585 }
586 Peripheral::Uart1 => {
587 crate::peripherals::SYSTEM::regs()
588 .perip_rst_en()
589 .modify(|_, w| w.uart1_rst().bit(reset));
590 }
591 Peripheral::Uart2 => {
592 crate::peripherals::SYSTEM::regs()
593 .perip_rst_en()
594 .modify(|_, w| w.uart2_rst().bit(reset));
595 }
596 Peripheral::UartMem => {
597 crate::peripherals::SYSTEM::regs()
598 .perip_rst_en()
599 .modify(|_, w| w.uart_mem_rst().bit(reset));
600 }
601 Peripheral::Uhci0 => {
602 crate::peripherals::SYSTEM::regs()
603 .perip_rst_en()
604 .modify(|_, w| w.uhci0_rst().bit(reset));
605 }
606 Peripheral::Uhci1 => {
607 crate::peripherals::SYSTEM::regs()
608 .perip_rst_en()
609 .modify(|_, w| w.uhci1_rst().bit(reset));
610 }
611 }
612 }
613 };
614}
615#[macro_export]
623#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
624macro_rules! memory_range {
625 ("DRAM") => {
626 1073405952..1073741824
627 };
628 (size as str, "DRAM") => {
629 "335872"
630 };
631 ("DRAM2_UNINIT") => {
632 1073643056..1073741824
633 };
634 (size as str, "DRAM2_UNINIT") => {
635 "98768"
636 };
637}
638#[macro_export]
639#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
640macro_rules! for_each_aes_key_length {
641 ($($pattern:tt => $code:tt;)*) => {
642 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
643 _for_each_inner!((128)); _for_each_inner!((192)); _for_each_inner!((256));
644 _for_each_inner!((128, 0, 4)); _for_each_inner!((192, 1, 5));
645 _for_each_inner!((256, 2, 6)); _for_each_inner!((bits(128), (192), (256)));
646 _for_each_inner!((modes(128, 0, 4), (192, 1, 5), (256, 2, 6)));
647 };
648}
649#[macro_export]
671#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
672macro_rules! for_each_rmt_channel {
673 ($($pattern:tt => $code:tt;)*) => {
674 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
675 _for_each_inner!((0)); _for_each_inner!((1)); _for_each_inner!((2));
676 _for_each_inner!((3)); _for_each_inner!((4)); _for_each_inner!((5));
677 _for_each_inner!((6)); _for_each_inner!((7)); _for_each_inner!((0, 0));
678 _for_each_inner!((1, 1)); _for_each_inner!((2, 2)); _for_each_inner!((3, 3));
679 _for_each_inner!((4, 4)); _for_each_inner!((5, 5)); _for_each_inner!((6, 6));
680 _for_each_inner!((7, 7)); _for_each_inner!((0, 0)); _for_each_inner!((1, 1));
681 _for_each_inner!((2, 2)); _for_each_inner!((3, 3)); _for_each_inner!((4, 4));
682 _for_each_inner!((5, 5)); _for_each_inner!((6, 6)); _for_each_inner!((7, 7));
683 _for_each_inner!((all(0), (1), (2), (3), (4), (5), (6), (7)));
684 _for_each_inner!((tx(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7,
685 7))); _for_each_inner!((rx(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6),
686 (7, 7)));
687 };
688}
689#[macro_export]
690#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
691macro_rules! for_each_rmt_clock_source {
692 ($($pattern:tt => $code:tt;)*) => {
693 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
694 _for_each_inner!((RefTick, 0)); _for_each_inner!((Apb, 1));
695 _for_each_inner!((Apb)); _for_each_inner!((all(RefTick, 0), (Apb, 1)));
696 _for_each_inner!((default(Apb))); _for_each_inner!((is_boolean));
697 };
698}
699#[macro_export]
700#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
701macro_rules! for_each_rsa_exponentiation {
702 ($($pattern:tt => $code:tt;)*) => {
703 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
704 _for_each_inner!((512)); _for_each_inner!((1024)); _for_each_inner!((1536));
705 _for_each_inner!((2048)); _for_each_inner!((2560)); _for_each_inner!((3072));
706 _for_each_inner!((3584)); _for_each_inner!((4096)); _for_each_inner!((all(512),
707 (1024), (1536), (2048), (2560), (3072), (3584), (4096)));
708 };
709}
710#[macro_export]
711#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
712macro_rules! for_each_rsa_multiplication {
713 ($($pattern:tt => $code:tt;)*) => {
714 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
715 _for_each_inner!((512)); _for_each_inner!((1024)); _for_each_inner!((1536));
716 _for_each_inner!((2048)); _for_each_inner!((all(512), (1024), (1536), (2048)));
717 };
718}
719#[macro_export]
720#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
721macro_rules! for_each_sha_algorithm {
722 ($($pattern:tt => $code:tt;)*) => {
723 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
724 _for_each_inner!((Sha1, "SHA-1"(sizes : 64, 20, 8) (insecure_against :
725 "collision", "length extension"), 0)); _for_each_inner!((Sha256, "SHA-256"(sizes
726 : 64, 32, 8) (insecure_against : "length extension"), 0));
727 _for_each_inner!((Sha384, "SHA-384"(sizes : 128, 48, 16) (insecure_against :),
728 0)); _for_each_inner!((Sha512, "SHA-512"(sizes : 128, 64, 16) (insecure_against :
729 "length extension"), 0)); _for_each_inner!((algos(Sha1, "SHA-1"(sizes : 64, 20,
730 8) (insecure_against : "collision", "length extension"), 0), (Sha256,
731 "SHA-256"(sizes : 64, 32, 8) (insecure_against : "length extension"), 0),
732 (Sha384, "SHA-384"(sizes : 128, 48, 16) (insecure_against :), 0), (Sha512,
733 "SHA-512"(sizes : 128, 64, 16) (insecure_against : "length extension"), 0)));
734 };
735}
736#[macro_export]
753#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
754macro_rules! for_each_i2c_master {
755 ($($pattern:tt => $code:tt;)*) => {
756 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
757 _for_each_inner!((I2C0, I2cExt0, I2CEXT0_SCL, I2CEXT0_SDA));
758 _for_each_inner!((I2C1, I2cExt1, I2CEXT1_SCL, I2CEXT1_SDA));
759 _for_each_inner!((all(I2C0, I2cExt0, I2CEXT0_SCL, I2CEXT0_SDA), (I2C1, I2cExt1,
760 I2CEXT1_SCL, I2CEXT1_SDA)));
761 };
762}
763#[macro_export]
780#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
781macro_rules! for_each_uart {
782 ($($pattern:tt => $code:tt;)*) => {
783 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
784 _for_each_inner!((UART0, Uart0, U0RXD, U0TXD, U0CTS, U0RTS));
785 _for_each_inner!((UART1, Uart1, U1RXD, U1TXD, U1CTS, U1RTS));
786 _for_each_inner!((UART2, Uart2, U2RXD, U2TXD, U2CTS, U2RTS));
787 _for_each_inner!((all(UART0, Uart0, U0RXD, U0TXD, U0CTS, U0RTS), (UART1, Uart1,
788 U1RXD, U1TXD, U1CTS, U1RTS), (UART2, Uart2, U2RXD, U2TXD, U2CTS, U2RTS)));
789 };
790}
791#[macro_export]
813#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
814macro_rules! for_each_spi_master {
815 ($($pattern:tt => $code:tt;)*) => {
816 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
817 _for_each_inner!((SPI2, Spi2, HSPICLK[HSPICS0, HSPICS1, HSPICS2] [HSPID, HSPIQ,
818 HSPIWP, HSPIHD], true)); _for_each_inner!((SPI3, Spi3, VSPICLK[VSPICS0, VSPICS1,
819 VSPICS2] [VSPID, VSPIQ, VSPIWP, VSPIHD], true)); _for_each_inner!((all(SPI2,
820 Spi2, HSPICLK[HSPICS0, HSPICS1, HSPICS2] [HSPID, HSPIQ, HSPIWP, HSPIHD], true),
821 (SPI3, Spi3, VSPICLK[VSPICS0, VSPICS1, VSPICS2] [VSPID, VSPIQ, VSPIWP, VSPIHD],
822 true)));
823 };
824}
825#[macro_export]
842#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
843macro_rules! for_each_spi_slave {
844 ($($pattern:tt => $code:tt;)*) => {
845 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
846 _for_each_inner!((SPI2, Spi2, HSPICLK, HSPID, HSPIQ, HSPICS0));
847 _for_each_inner!((SPI3, Spi3, VSPICLK, VSPID, VSPIQ, VSPICS0));
848 _for_each_inner!((all(SPI2, Spi2, HSPICLK, HSPID, HSPIQ, HSPICS0), (SPI3, Spi3,
849 VSPICLK, VSPID, VSPIQ, VSPICS0)));
850 };
851}
852#[macro_export]
853#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
854macro_rules! for_each_peripheral {
855 ($($pattern:tt => $code:tt;)*) => {
856 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
857 _for_each_inner!((GPIO0 <= virtual())); _for_each_inner!((GPIO1 <= virtual()));
858 _for_each_inner!((GPIO2 <= virtual())); _for_each_inner!((GPIO3 <= virtual()));
859 _for_each_inner!((GPIO4 <= virtual())); _for_each_inner!((GPIO5 <= virtual()));
860 _for_each_inner!((GPIO12 <= virtual())); _for_each_inner!((GPIO13 <= virtual()));
861 _for_each_inner!((GPIO14 <= virtual())); _for_each_inner!((GPIO15 <= virtual()));
862 _for_each_inner!((GPIO16 <= virtual())); _for_each_inner!((GPIO17 <= virtual()));
863 _for_each_inner!((GPIO18 <= virtual())); _for_each_inner!((GPIO19 <= virtual()));
864 _for_each_inner!((GPIO21 <= virtual())); _for_each_inner!((GPIO22 <= virtual()));
865 _for_each_inner!((GPIO23 <= virtual())); _for_each_inner!((GPIO25 <= virtual()));
866 _for_each_inner!((GPIO26 <= virtual())); _for_each_inner!((GPIO27 <= virtual()));
867 _for_each_inner!((GPIO32 <= virtual())); _for_each_inner!((GPIO33 <= virtual()));
868 _for_each_inner!((GPIO34 <= virtual())); _for_each_inner!((GPIO35 <= virtual()));
869 _for_each_inner!((GPIO36 <= virtual())); _for_each_inner!((GPIO37 <= virtual()));
870 _for_each_inner!((GPIO38 <= virtual())); _for_each_inner!((GPIO39 <= virtual()));
871 _for_each_inner!((AES <= AES() (unstable))); _for_each_inner!((APB_CTRL <=
872 APB_CTRL() (unstable))); _for_each_inner!((BB <= BB() (unstable)));
873 _for_each_inner!((DPORT <= DPORT() (unstable))); _for_each_inner!((SYSTEM <=
874 DPORT() (unstable))); _for_each_inner!((EFUSE <= EFUSE() (unstable)));
875 _for_each_inner!((EMAC_DMA <= EMAC_DMA() (unstable))); _for_each_inner!((EMAC_EXT
876 <= EMAC_EXT() (unstable))); _for_each_inner!((EMAC_MAC <= EMAC_MAC()
877 (unstable))); _for_each_inner!((FLASH_ENCRYPTION <= FLASH_ENCRYPTION()
878 (unstable))); _for_each_inner!((FRC_TIMER <= FRC_TIMER() (unstable)));
879 _for_each_inner!((GPIO <= GPIO() (unstable))); _for_each_inner!((GPIO_SD <=
880 GPIO_SD() (unstable))); _for_each_inner!((HINF <= HINF() (unstable)));
881 _for_each_inner!((I2C0 <= I2C0(I2C_EXT0 : { bind_peri_interrupt,
882 enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((I2C1 <=
883 I2C1(I2C_EXT1 : { bind_peri_interrupt, enable_peri_interrupt,
884 disable_peri_interrupt }))); _for_each_inner!((I2S0 <= I2S0(I2S0 : {
885 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })
886 (unstable))); _for_each_inner!((I2S1 <= I2S1(I2S1 : { bind_peri_interrupt,
887 enable_peri_interrupt, disable_peri_interrupt }) (unstable)));
888 _for_each_inner!((IO_MUX <= IO_MUX() (unstable))); _for_each_inner!((LEDC <=
889 LEDC() (unstable))); _for_each_inner!((MCPWM0 <= MCPWM0() (unstable)));
890 _for_each_inner!((MCPWM1 <= MCPWM1() (unstable))); _for_each_inner!((NRX <= NRX()
891 (unstable))); _for_each_inner!((PCNT <= PCNT() (unstable)));
892 _for_each_inner!((RMT <= RMT() (unstable))); _for_each_inner!((RNG <= RNG()
893 (unstable))); _for_each_inner!((RSA <= RSA(RSA : { bind_peri_interrupt,
894 enable_peri_interrupt, disable_peri_interrupt }) (unstable)));
895 _for_each_inner!((LPWR <= RTC_CNTL() (unstable))); _for_each_inner!((RTC_I2C <=
896 RTC_I2C() (unstable))); _for_each_inner!((RTC_IO <= RTC_IO() (unstable)));
897 _for_each_inner!((SDHOST <= SDHOST() (unstable))); _for_each_inner!((SENS <=
898 SENS() (unstable))); _for_each_inner!((SHA <= SHA() (unstable)));
899 _for_each_inner!((SLC <= SLC() (unstable))); _for_each_inner!((SLCHOST <=
900 SLCHOST() (unstable))); _for_each_inner!((SPI0 <= SPI0() (unstable)));
901 _for_each_inner!((SPI1 <= SPI1() (unstable))); _for_each_inner!((SPI2 <=
902 SPI2(SPI2_DMA : { bind_dma_interrupt, enable_dma_interrupt, disable_dma_interrupt
903 }, SPI2 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
904 }))); _for_each_inner!((SPI3 <= SPI3(SPI3_DMA : { bind_dma_interrupt,
905 enable_dma_interrupt, disable_dma_interrupt }, SPI3 : { bind_peri_interrupt,
906 enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((TIMG0 <=
907 TIMG0() (unstable))); _for_each_inner!((TIMG1 <= TIMG1() (unstable)));
908 _for_each_inner!((TWAI0 <= TWAI0() (unstable))); _for_each_inner!((UART0 <=
909 UART0(UART0 : { bind_peri_interrupt, enable_peri_interrupt,
910 disable_peri_interrupt }))); _for_each_inner!((UART1 <= UART1(UART1 : {
911 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })));
912 _for_each_inner!((UART2 <= UART2(UART2 : { bind_peri_interrupt,
913 enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((UHCI0 <=
914 UHCI0() (unstable))); _for_each_inner!((UHCI1 <= UHCI1() (unstable)));
915 _for_each_inner!((WIFI <= WIFI() (unstable))); _for_each_inner!((DMA_SPI2 <=
916 SPI2() (unstable))); _for_each_inner!((DMA_SPI3 <= SPI3() (unstable)));
917 _for_each_inner!((DMA_I2S0 <= I2S0() (unstable))); _for_each_inner!((DMA_I2S1 <=
918 I2S1() (unstable))); _for_each_inner!((ADC1 <= virtual() (unstable)));
919 _for_each_inner!((ADC2 <= virtual() (unstable))); _for_each_inner!((BT <=
920 virtual() (unstable))); _for_each_inner!((CPU_CTRL <= virtual() (unstable)));
921 _for_each_inner!((DAC1 <= virtual() (unstable))); _for_each_inner!((DAC2 <=
922 virtual() (unstable))); _for_each_inner!((FLASH <= virtual() (unstable)));
923 _for_each_inner!((PSRAM <= virtual() (unstable))); _for_each_inner!((SW_INTERRUPT
924 <= virtual() (unstable))); _for_each_inner!((TOUCH <= virtual() (unstable)));
925 _for_each_inner!((all(GPIO0 <= virtual()), (GPIO1 <= virtual()), (GPIO2 <=
926 virtual()), (GPIO3 <= virtual()), (GPIO4 <= virtual()), (GPIO5 <= virtual()),
927 (GPIO12 <= virtual()), (GPIO13 <= virtual()), (GPIO14 <= virtual()), (GPIO15 <=
928 virtual()), (GPIO16 <= virtual()), (GPIO17 <= virtual()), (GPIO18 <= virtual()),
929 (GPIO19 <= virtual()), (GPIO21 <= virtual()), (GPIO22 <= virtual()), (GPIO23 <=
930 virtual()), (GPIO25 <= virtual()), (GPIO26 <= virtual()), (GPIO27 <= virtual()),
931 (GPIO32 <= virtual()), (GPIO33 <= virtual()), (GPIO34 <= virtual()), (GPIO35 <=
932 virtual()), (GPIO36 <= virtual()), (GPIO37 <= virtual()), (GPIO38 <= virtual()),
933 (GPIO39 <= virtual()), (AES <= AES() (unstable)), (APB_CTRL <= APB_CTRL()
934 (unstable)), (BB <= BB() (unstable)), (DPORT <= DPORT() (unstable)), (SYSTEM <=
935 DPORT() (unstable)), (EFUSE <= EFUSE() (unstable)), (EMAC_DMA <= EMAC_DMA()
936 (unstable)), (EMAC_EXT <= EMAC_EXT() (unstable)), (EMAC_MAC <= EMAC_MAC()
937 (unstable)), (FLASH_ENCRYPTION <= FLASH_ENCRYPTION() (unstable)), (FRC_TIMER <=
938 FRC_TIMER() (unstable)), (GPIO <= GPIO() (unstable)), (GPIO_SD <= GPIO_SD()
939 (unstable)), (HINF <= HINF() (unstable)), (I2C0 <= I2C0(I2C_EXT0 : {
940 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (I2C1 <=
941 I2C1(I2C_EXT1 : { bind_peri_interrupt, enable_peri_interrupt,
942 disable_peri_interrupt })), (I2S0 <= I2S0(I2S0 : { bind_peri_interrupt,
943 enable_peri_interrupt, disable_peri_interrupt }) (unstable)), (I2S1 <= I2S1(I2S1
944 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })
945 (unstable)), (IO_MUX <= IO_MUX() (unstable)), (LEDC <= LEDC() (unstable)),
946 (MCPWM0 <= MCPWM0() (unstable)), (MCPWM1 <= MCPWM1() (unstable)), (NRX <= NRX()
947 (unstable)), (PCNT <= PCNT() (unstable)), (RMT <= RMT() (unstable)), (RNG <=
948 RNG() (unstable)), (RSA <= RSA(RSA : { bind_peri_interrupt,
949 enable_peri_interrupt, disable_peri_interrupt }) (unstable)), (LPWR <= RTC_CNTL()
950 (unstable)), (RTC_I2C <= RTC_I2C() (unstable)), (RTC_IO <= RTC_IO() (unstable)),
951 (SDHOST <= SDHOST() (unstable)), (SENS <= SENS() (unstable)), (SHA <= SHA()
952 (unstable)), (SLC <= SLC() (unstable)), (SLCHOST <= SLCHOST() (unstable)), (SPI0
953 <= SPI0() (unstable)), (SPI1 <= SPI1() (unstable)), (SPI2 <= SPI2(SPI2_DMA : {
954 bind_dma_interrupt, enable_dma_interrupt, disable_dma_interrupt }, SPI2 : {
955 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (SPI3 <=
956 SPI3(SPI3_DMA : { bind_dma_interrupt, enable_dma_interrupt, disable_dma_interrupt
957 }, SPI3 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
958 })), (TIMG0 <= TIMG0() (unstable)), (TIMG1 <= TIMG1() (unstable)), (TWAI0 <=
959 TWAI0() (unstable)), (UART0 <= UART0(UART0 : { bind_peri_interrupt,
960 enable_peri_interrupt, disable_peri_interrupt })), (UART1 <= UART1(UART1 : {
961 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (UART2 <=
962 UART2(UART2 : { bind_peri_interrupt, enable_peri_interrupt,
963 disable_peri_interrupt })), (UHCI0 <= UHCI0() (unstable)), (UHCI1 <= UHCI1()
964 (unstable)), (WIFI <= WIFI() (unstable)), (DMA_SPI2 <= SPI2() (unstable)),
965 (DMA_SPI3 <= SPI3() (unstable)), (DMA_I2S0 <= I2S0() (unstable)), (DMA_I2S1 <=
966 I2S1() (unstable)), (ADC1 <= virtual() (unstable)), (ADC2 <= virtual()
967 (unstable)), (BT <= virtual() (unstable)), (CPU_CTRL <= virtual() (unstable)),
968 (DAC1 <= virtual() (unstable)), (DAC2 <= virtual() (unstable)), (FLASH <=
969 virtual() (unstable)), (PSRAM <= virtual() (unstable)), (SW_INTERRUPT <=
970 virtual() (unstable)), (TOUCH <= virtual() (unstable))));
971 };
972}
973#[macro_export]
1000#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1001macro_rules! for_each_gpio {
1002 ($($pattern:tt => $code:tt;)*) => {
1003 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
1004 _for_each_inner!((0, GPIO0(_5 => EMAC_TX_CLK) (_1 => CLK_OUT1 _5 => EMAC_TX_CLK)
1005 ([Input] [Output]))); _for_each_inner!((1, GPIO1(_5 => EMAC_RXD2) (_0 => U0TXD _1
1006 => CLK_OUT3) ([Input] [Output]))); _for_each_inner!((2, GPIO2(_1 => HSPIWP _3 =>
1007 HS2_DATA0 _4 => SD_DATA0) (_1 => HSPIWP _3 => HS2_DATA0 _4 => SD_DATA0) ([Input]
1008 [Output]))); _for_each_inner!((3, GPIO3(_0 => U0RXD) (_1 => CLK_OUT2) ([Input]
1009 [Output]))); _for_each_inner!((4, GPIO4(_1 => HSPIHD _3 => HS2_DATA1 _4 =>
1010 SD_DATA1 _5 => EMAC_TX_ER) (_1 => HSPIHD _3 => HS2_DATA1 _4 => SD_DATA1 _5 =>
1011 EMAC_TX_ER) ([Input] [Output]))); _for_each_inner!((5, GPIO5(_1 => VSPICS0 _3 =>
1012 HS1_DATA6 _5 => EMAC_RX_CLK) (_1 => VSPICS0 _3 => HS1_DATA6) ([Input]
1013 [Output]))); _for_each_inner!((12, GPIO12(_0 => MTDI _1 => HSPIQ _3 => HS2_DATA2
1014 _4 => SD_DATA2) (_1 => HSPIQ _3 => HS2_DATA2 _4 => SD_DATA2 _5 => EMAC_TXD3)
1015 ([Input] [Output]))); _for_each_inner!((13, GPIO13(_0 => MTCK _1 => HSPID _3 =>
1016 HS2_DATA3 _4 => SD_DATA3 _5 => EMAC_RX_ER) (_1 => HSPID _3 => HS2_DATA3 _4 =>
1017 SD_DATA3 _5 => EMAC_RX_ER) ([Input] [Output]))); _for_each_inner!((14, GPIO14(_0
1018 => MTMS _1 => HSPICLK) (_1 => HSPICLK _3 => HS2_CLK _4 => SD_CLK _5 => EMAC_TXD2)
1019 ([Input] [Output]))); _for_each_inner!((15, GPIO15(_1 => HSPICS0 _4 => SD_CMD _5
1020 => EMAC_RXD3) (_0 => MTDO _1 => HSPICS0 _3 => HS2_CMD _4 => SD_CMD) ([Input]
1021 [Output]))); _for_each_inner!((16, GPIO16(_3 => HS1_DATA4 _4 => U2RXD) (_3 =>
1022 HS1_DATA4 _5 => EMAC_CLK_OUT) ([Input] [Output]))); _for_each_inner!((17,
1023 GPIO17(_3 => HS1_DATA5) (_3 => HS1_DATA5 _4 => U2TXD _5 => EMAC_CLK_180) ([Input]
1024 [Output]))); _for_each_inner!((18, GPIO18(_1 => VSPICLK _3 => HS1_DATA7) (_1 =>
1025 VSPICLK _3 => HS1_DATA7) ([Input] [Output]))); _for_each_inner!((19, GPIO19(_1 =>
1026 VSPIQ _3 => U0CTS) (_1 => VSPIQ _5 => EMAC_TXD0) ([Input] [Output])));
1027 _for_each_inner!((21, GPIO21(_1 => VSPIHD) (_1 => VSPIHD _5 => EMAC_TX_EN)
1028 ([Input] [Output]))); _for_each_inner!((22, GPIO22(_1 => VSPIWP) (_1 => VSPIWP _3
1029 => U0RTS _5 => EMAC_TXD1) ([Input] [Output]))); _for_each_inner!((23, GPIO23(_1
1030 => VSPID) (_1 => VSPID _3 => HS1_STROBE) ([Input] [Output])));
1031 _for_each_inner!((25, GPIO25(_5 => EMAC_RXD0) () ([Input] [Output])));
1032 _for_each_inner!((26, GPIO26(_5 => EMAC_RXD1) () ([Input] [Output])));
1033 _for_each_inner!((27, GPIO27(_5 => EMAC_RX_DV) () ([Input] [Output])));
1034 _for_each_inner!((32, GPIO32() () ([Input] [Output]))); _for_each_inner!((33,
1035 GPIO33() () ([Input] [Output]))); _for_each_inner!((34, GPIO34() () ([Input]
1036 []))); _for_each_inner!((35, GPIO35() () ([Input] []))); _for_each_inner!((36,
1037 GPIO36() () ([Input] []))); _for_each_inner!((37, GPIO37() () ([Input] [])));
1038 _for_each_inner!((38, GPIO38() () ([Input] []))); _for_each_inner!((39, GPIO39()
1039 () ([Input] []))); _for_each_inner!((all(0, GPIO0(_5 => EMAC_TX_CLK) (_1 =>
1040 CLK_OUT1 _5 => EMAC_TX_CLK) ([Input] [Output])), (1, GPIO1(_5 => EMAC_RXD2) (_0
1041 => U0TXD _1 => CLK_OUT3) ([Input] [Output])), (2, GPIO2(_1 => HSPIWP _3 =>
1042 HS2_DATA0 _4 => SD_DATA0) (_1 => HSPIWP _3 => HS2_DATA0 _4 => SD_DATA0) ([Input]
1043 [Output])), (3, GPIO3(_0 => U0RXD) (_1 => CLK_OUT2) ([Input] [Output])), (4,
1044 GPIO4(_1 => HSPIHD _3 => HS2_DATA1 _4 => SD_DATA1 _5 => EMAC_TX_ER) (_1 => HSPIHD
1045 _3 => HS2_DATA1 _4 => SD_DATA1 _5 => EMAC_TX_ER) ([Input] [Output])), (5,
1046 GPIO5(_1 => VSPICS0 _3 => HS1_DATA6 _5 => EMAC_RX_CLK) (_1 => VSPICS0 _3 =>
1047 HS1_DATA6) ([Input] [Output])), (12, GPIO12(_0 => MTDI _1 => HSPIQ _3 =>
1048 HS2_DATA2 _4 => SD_DATA2) (_1 => HSPIQ _3 => HS2_DATA2 _4 => SD_DATA2 _5 =>
1049 EMAC_TXD3) ([Input] [Output])), (13, GPIO13(_0 => MTCK _1 => HSPID _3 =>
1050 HS2_DATA3 _4 => SD_DATA3 _5 => EMAC_RX_ER) (_1 => HSPID _3 => HS2_DATA3 _4 =>
1051 SD_DATA3 _5 => EMAC_RX_ER) ([Input] [Output])), (14, GPIO14(_0 => MTMS _1 =>
1052 HSPICLK) (_1 => HSPICLK _3 => HS2_CLK _4 => SD_CLK _5 => EMAC_TXD2) ([Input]
1053 [Output])), (15, GPIO15(_1 => HSPICS0 _4 => SD_CMD _5 => EMAC_RXD3) (_0 => MTDO
1054 _1 => HSPICS0 _3 => HS2_CMD _4 => SD_CMD) ([Input] [Output])), (16, GPIO16(_3 =>
1055 HS1_DATA4 _4 => U2RXD) (_3 => HS1_DATA4 _5 => EMAC_CLK_OUT) ([Input] [Output])),
1056 (17, GPIO17(_3 => HS1_DATA5) (_3 => HS1_DATA5 _4 => U2TXD _5 => EMAC_CLK_180)
1057 ([Input] [Output])), (18, GPIO18(_1 => VSPICLK _3 => HS1_DATA7) (_1 => VSPICLK _3
1058 => HS1_DATA7) ([Input] [Output])), (19, GPIO19(_1 => VSPIQ _3 => U0CTS) (_1 =>
1059 VSPIQ _5 => EMAC_TXD0) ([Input] [Output])), (21, GPIO21(_1 => VSPIHD) (_1 =>
1060 VSPIHD _5 => EMAC_TX_EN) ([Input] [Output])), (22, GPIO22(_1 => VSPIWP) (_1 =>
1061 VSPIWP _3 => U0RTS _5 => EMAC_TXD1) ([Input] [Output])), (23, GPIO23(_1 => VSPID)
1062 (_1 => VSPID _3 => HS1_STROBE) ([Input] [Output])), (25, GPIO25(_5 => EMAC_RXD0)
1063 () ([Input] [Output])), (26, GPIO26(_5 => EMAC_RXD1) () ([Input] [Output])), (27,
1064 GPIO27(_5 => EMAC_RX_DV) () ([Input] [Output])), (32, GPIO32() () ([Input]
1065 [Output])), (33, GPIO33() () ([Input] [Output])), (34, GPIO34() () ([Input] [])),
1066 (35, GPIO35() () ([Input] [])), (36, GPIO36() () ([Input] [])), (37, GPIO37() ()
1067 ([Input] [])), (38, GPIO38() () ([Input] [])), (39, GPIO39() () ([Input] []))));
1068 };
1069}
1070#[macro_export]
1097#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1098macro_rules! for_each_analog_function {
1099 ($($pattern:tt => $code:tt;)*) => {
1100 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
1101 _for_each_inner!((ADC2_CH1, GPIO0)); _for_each_inner!((TOUCH1, GPIO0));
1102 _for_each_inner!((ADC2_CH2, GPIO2)); _for_each_inner!((TOUCH2, GPIO2));
1103 _for_each_inner!((ADC2_CH0, GPIO4)); _for_each_inner!((TOUCH0, GPIO4));
1104 _for_each_inner!((ADC2_CH5, GPIO12)); _for_each_inner!((TOUCH5, GPIO12));
1105 _for_each_inner!((ADC2_CH4, GPIO13)); _for_each_inner!((TOUCH4, GPIO13));
1106 _for_each_inner!((ADC2_CH6, GPIO14)); _for_each_inner!((TOUCH6, GPIO14));
1107 _for_each_inner!((ADC2_CH3, GPIO15)); _for_each_inner!((TOUCH3, GPIO15));
1108 _for_each_inner!((DAC1, GPIO25)); _for_each_inner!((ADC2_CH8, GPIO25));
1109 _for_each_inner!((DAC2, GPIO26)); _for_each_inner!((ADC2_CH9, GPIO26));
1110 _for_each_inner!((ADC2_CH7, GPIO27)); _for_each_inner!((TOUCH7, GPIO27));
1111 _for_each_inner!((XTAL_32K_P, GPIO32)); _for_each_inner!((ADC1_CH4, GPIO32));
1112 _for_each_inner!((TOUCH9, GPIO32)); _for_each_inner!((XTAL_32K_N, GPIO33));
1113 _for_each_inner!((ADC1_CH5, GPIO33)); _for_each_inner!((TOUCH8, GPIO33));
1114 _for_each_inner!((ADC1_CH6, GPIO34)); _for_each_inner!((ADC1_CH7, GPIO35));
1115 _for_each_inner!((ADC_H, GPIO36)); _for_each_inner!((ADC1_CH0, GPIO36));
1116 _for_each_inner!((ADC_H, GPIO37)); _for_each_inner!((ADC1_CH1, GPIO37));
1117 _for_each_inner!((ADC_H, GPIO38)); _for_each_inner!((ADC1_CH2, GPIO38));
1118 _for_each_inner!((ADC_H, GPIO39)); _for_each_inner!((ADC1_CH3, GPIO39));
1119 _for_each_inner!(((ADC2_CH1, ADCn_CHm, 2, 1), GPIO0)); _for_each_inner!(((TOUCH1,
1120 TOUCHn, 1), GPIO0)); _for_each_inner!(((ADC2_CH2, ADCn_CHm, 2, 2), GPIO2));
1121 _for_each_inner!(((TOUCH2, TOUCHn, 2), GPIO2)); _for_each_inner!(((ADC2_CH0,
1122 ADCn_CHm, 2, 0), GPIO4)); _for_each_inner!(((TOUCH0, TOUCHn, 0), GPIO4));
1123 _for_each_inner!(((ADC2_CH5, ADCn_CHm, 2, 5), GPIO12));
1124 _for_each_inner!(((TOUCH5, TOUCHn, 5), GPIO12)); _for_each_inner!(((ADC2_CH4,
1125 ADCn_CHm, 2, 4), GPIO13)); _for_each_inner!(((TOUCH4, TOUCHn, 4), GPIO13));
1126 _for_each_inner!(((ADC2_CH6, ADCn_CHm, 2, 6), GPIO14));
1127 _for_each_inner!(((TOUCH6, TOUCHn, 6), GPIO14)); _for_each_inner!(((ADC2_CH3,
1128 ADCn_CHm, 2, 3), GPIO15)); _for_each_inner!(((TOUCH3, TOUCHn, 3), GPIO15));
1129 _for_each_inner!(((DAC1, DACn, 1), GPIO25)); _for_each_inner!(((ADC2_CH8,
1130 ADCn_CHm, 2, 8), GPIO25)); _for_each_inner!(((DAC2, DACn, 2), GPIO26));
1131 _for_each_inner!(((ADC2_CH9, ADCn_CHm, 2, 9), GPIO26));
1132 _for_each_inner!(((ADC2_CH7, ADCn_CHm, 2, 7), GPIO27));
1133 _for_each_inner!(((TOUCH7, TOUCHn, 7), GPIO27)); _for_each_inner!(((ADC1_CH4,
1134 ADCn_CHm, 1, 4), GPIO32)); _for_each_inner!(((TOUCH9, TOUCHn, 9), GPIO32));
1135 _for_each_inner!(((ADC1_CH5, ADCn_CHm, 1, 5), GPIO33));
1136 _for_each_inner!(((TOUCH8, TOUCHn, 8), GPIO33)); _for_each_inner!(((ADC1_CH6,
1137 ADCn_CHm, 1, 6), GPIO34)); _for_each_inner!(((ADC1_CH7, ADCn_CHm, 1, 7),
1138 GPIO35)); _for_each_inner!(((ADC1_CH0, ADCn_CHm, 1, 0), GPIO36));
1139 _for_each_inner!(((ADC1_CH1, ADCn_CHm, 1, 1), GPIO37));
1140 _for_each_inner!(((ADC1_CH2, ADCn_CHm, 1, 2), GPIO38));
1141 _for_each_inner!(((ADC1_CH3, ADCn_CHm, 1, 3), GPIO39));
1142 _for_each_inner!((all(ADC2_CH1, GPIO0), (TOUCH1, GPIO0), (ADC2_CH2, GPIO2),
1143 (TOUCH2, GPIO2), (ADC2_CH0, GPIO4), (TOUCH0, GPIO4), (ADC2_CH5, GPIO12), (TOUCH5,
1144 GPIO12), (ADC2_CH4, GPIO13), (TOUCH4, GPIO13), (ADC2_CH6, GPIO14), (TOUCH6,
1145 GPIO14), (ADC2_CH3, GPIO15), (TOUCH3, GPIO15), (DAC1, GPIO25), (ADC2_CH8,
1146 GPIO25), (DAC2, GPIO26), (ADC2_CH9, GPIO26), (ADC2_CH7, GPIO27), (TOUCH7,
1147 GPIO27), (XTAL_32K_P, GPIO32), (ADC1_CH4, GPIO32), (TOUCH9, GPIO32), (XTAL_32K_N,
1148 GPIO33), (ADC1_CH5, GPIO33), (TOUCH8, GPIO33), (ADC1_CH6, GPIO34), (ADC1_CH7,
1149 GPIO35), (ADC_H, GPIO36), (ADC1_CH0, GPIO36), (ADC_H, GPIO37), (ADC1_CH1,
1150 GPIO37), (ADC_H, GPIO38), (ADC1_CH2, GPIO38), (ADC_H, GPIO39), (ADC1_CH3,
1151 GPIO39))); _for_each_inner!((all_expanded((ADC2_CH1, ADCn_CHm, 2, 1), GPIO0),
1152 ((TOUCH1, TOUCHn, 1), GPIO0), ((ADC2_CH2, ADCn_CHm, 2, 2), GPIO2), ((TOUCH2,
1153 TOUCHn, 2), GPIO2), ((ADC2_CH0, ADCn_CHm, 2, 0), GPIO4), ((TOUCH0, TOUCHn, 0),
1154 GPIO4), ((ADC2_CH5, ADCn_CHm, 2, 5), GPIO12), ((TOUCH5, TOUCHn, 5), GPIO12),
1155 ((ADC2_CH4, ADCn_CHm, 2, 4), GPIO13), ((TOUCH4, TOUCHn, 4), GPIO13), ((ADC2_CH6,
1156 ADCn_CHm, 2, 6), GPIO14), ((TOUCH6, TOUCHn, 6), GPIO14), ((ADC2_CH3, ADCn_CHm, 2,
1157 3), GPIO15), ((TOUCH3, TOUCHn, 3), GPIO15), ((DAC1, DACn, 1), GPIO25),
1158 ((ADC2_CH8, ADCn_CHm, 2, 8), GPIO25), ((DAC2, DACn, 2), GPIO26), ((ADC2_CH9,
1159 ADCn_CHm, 2, 9), GPIO26), ((ADC2_CH7, ADCn_CHm, 2, 7), GPIO27), ((TOUCH7, TOUCHn,
1160 7), GPIO27), ((ADC1_CH4, ADCn_CHm, 1, 4), GPIO32), ((TOUCH9, TOUCHn, 9), GPIO32),
1161 ((ADC1_CH5, ADCn_CHm, 1, 5), GPIO33), ((TOUCH8, TOUCHn, 8), GPIO33), ((ADC1_CH6,
1162 ADCn_CHm, 1, 6), GPIO34), ((ADC1_CH7, ADCn_CHm, 1, 7), GPIO35), ((ADC1_CH0,
1163 ADCn_CHm, 1, 0), GPIO36), ((ADC1_CH1, ADCn_CHm, 1, 1), GPIO37), ((ADC1_CH2,
1164 ADCn_CHm, 1, 2), GPIO38), ((ADC1_CH3, ADCn_CHm, 1, 3), GPIO39)));
1165 };
1166}
1167#[macro_export]
1194#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1195macro_rules! for_each_lp_function {
1196 ($($pattern:tt => $code:tt;)*) => {
1197 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
1198 _for_each_inner!((RTC_GPIO11, GPIO0)); _for_each_inner!((SAR_I2C_SDA, GPIO0));
1199 _for_each_inner!((RTC_GPIO12, GPIO2)); _for_each_inner!((SAR_I2C_SCL, GPIO2));
1200 _for_each_inner!((RTC_GPIO10, GPIO4)); _for_each_inner!((SAR_I2C_SCL, GPIO4));
1201 _for_each_inner!((RTC_GPIO15, GPIO12)); _for_each_inner!((RTC_GPIO14, GPIO13));
1202 _for_each_inner!((RTC_GPIO16, GPIO14)); _for_each_inner!((RTC_GPIO13, GPIO15));
1203 _for_each_inner!((SAR_I2C_SDA, GPIO15)); _for_each_inner!((RTC_GPIO6, GPIO25));
1204 _for_each_inner!((RTC_GPIO7, GPIO26)); _for_each_inner!((RTC_GPIO17, GPIO27));
1205 _for_each_inner!((RTC_GPIO9, GPIO32)); _for_each_inner!((RTC_GPIO8, GPIO33));
1206 _for_each_inner!((RTC_GPIO4, GPIO34)); _for_each_inner!((RTC_GPIO5, GPIO35));
1207 _for_each_inner!((RTC_GPIO0, GPIO36)); _for_each_inner!((RTC_GPIO1, GPIO37));
1208 _for_each_inner!((RTC_GPIO2, GPIO38)); _for_each_inner!((RTC_GPIO3, GPIO39));
1209 _for_each_inner!(((RTC_GPIO11, RTC_GPIOn, 11), GPIO0));
1210 _for_each_inner!(((RTC_GPIO12, RTC_GPIOn, 12), GPIO2));
1211 _for_each_inner!(((RTC_GPIO10, RTC_GPIOn, 10), GPIO4));
1212 _for_each_inner!(((RTC_GPIO15, RTC_GPIOn, 15), GPIO12));
1213 _for_each_inner!(((RTC_GPIO14, RTC_GPIOn, 14), GPIO13));
1214 _for_each_inner!(((RTC_GPIO16, RTC_GPIOn, 16), GPIO14));
1215 _for_each_inner!(((RTC_GPIO13, RTC_GPIOn, 13), GPIO15));
1216 _for_each_inner!(((RTC_GPIO6, RTC_GPIOn, 6), GPIO25));
1217 _for_each_inner!(((RTC_GPIO7, RTC_GPIOn, 7), GPIO26));
1218 _for_each_inner!(((RTC_GPIO17, RTC_GPIOn, 17), GPIO27));
1219 _for_each_inner!(((RTC_GPIO9, RTC_GPIOn, 9), GPIO32));
1220 _for_each_inner!(((RTC_GPIO8, RTC_GPIOn, 8), GPIO33));
1221 _for_each_inner!(((RTC_GPIO4, RTC_GPIOn, 4), GPIO34));
1222 _for_each_inner!(((RTC_GPIO5, RTC_GPIOn, 5), GPIO35));
1223 _for_each_inner!(((RTC_GPIO0, RTC_GPIOn, 0), GPIO36));
1224 _for_each_inner!(((RTC_GPIO1, RTC_GPIOn, 1), GPIO37));
1225 _for_each_inner!(((RTC_GPIO2, RTC_GPIOn, 2), GPIO38));
1226 _for_each_inner!(((RTC_GPIO3, RTC_GPIOn, 3), GPIO39));
1227 _for_each_inner!((all(RTC_GPIO11, GPIO0), (SAR_I2C_SDA, GPIO0), (RTC_GPIO12,
1228 GPIO2), (SAR_I2C_SCL, GPIO2), (RTC_GPIO10, GPIO4), (SAR_I2C_SCL, GPIO4),
1229 (RTC_GPIO15, GPIO12), (RTC_GPIO14, GPIO13), (RTC_GPIO16, GPIO14), (RTC_GPIO13,
1230 GPIO15), (SAR_I2C_SDA, GPIO15), (RTC_GPIO6, GPIO25), (RTC_GPIO7, GPIO26),
1231 (RTC_GPIO17, GPIO27), (RTC_GPIO9, GPIO32), (RTC_GPIO8, GPIO33), (RTC_GPIO4,
1232 GPIO34), (RTC_GPIO5, GPIO35), (RTC_GPIO0, GPIO36), (RTC_GPIO1, GPIO37),
1233 (RTC_GPIO2, GPIO38), (RTC_GPIO3, GPIO39)));
1234 _for_each_inner!((all_expanded((RTC_GPIO11, RTC_GPIOn, 11), GPIO0), ((RTC_GPIO12,
1235 RTC_GPIOn, 12), GPIO2), ((RTC_GPIO10, RTC_GPIOn, 10), GPIO4), ((RTC_GPIO15,
1236 RTC_GPIOn, 15), GPIO12), ((RTC_GPIO14, RTC_GPIOn, 14), GPIO13), ((RTC_GPIO16,
1237 RTC_GPIOn, 16), GPIO14), ((RTC_GPIO13, RTC_GPIOn, 13), GPIO15), ((RTC_GPIO6,
1238 RTC_GPIOn, 6), GPIO25), ((RTC_GPIO7, RTC_GPIOn, 7), GPIO26), ((RTC_GPIO17,
1239 RTC_GPIOn, 17), GPIO27), ((RTC_GPIO9, RTC_GPIOn, 9), GPIO32), ((RTC_GPIO8,
1240 RTC_GPIOn, 8), GPIO33), ((RTC_GPIO4, RTC_GPIOn, 4), GPIO34), ((RTC_GPIO5,
1241 RTC_GPIOn, 5), GPIO35), ((RTC_GPIO0, RTC_GPIOn, 0), GPIO36), ((RTC_GPIO1,
1242 RTC_GPIOn, 1), GPIO37), ((RTC_GPIO2, RTC_GPIOn, 2), GPIO38), ((RTC_GPIO3,
1243 RTC_GPIOn, 3), GPIO39)));
1244 };
1245}
1246#[macro_export]
1250#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1251macro_rules! define_io_mux_signals {
1252 () => {
1253 #[allow(non_camel_case_types, clippy::upper_case_acronyms)]
1254 #[derive(Debug, PartialEq, Copy, Clone)]
1255 #[cfg_attr(feature = "defmt", derive(defmt::Format))]
1256 #[doc(hidden)]
1257 pub enum InputSignal {
1258 SPICLK = 0,
1259 SPIQ = 1,
1260 SPID = 2,
1261 SPIHD = 3,
1262 SPIWP = 4,
1263 SPICS0 = 5,
1264 SPICS1 = 6,
1265 SPICS2 = 7,
1266 HSPICLK = 8,
1267 HSPIQ = 9,
1268 HSPID = 10,
1269 HSPICS0 = 11,
1270 HSPIHD = 12,
1271 HSPIWP = 13,
1272 U0RXD = 14,
1273 U0CTS = 15,
1274 U0DSR = 16,
1275 U1RXD = 17,
1276 U1CTS = 18,
1277 I2S0O_BCK = 23,
1278 I2S1O_BCK = 24,
1279 I2S0O_WS = 25,
1280 I2S1O_WS = 26,
1281 I2S0I_BCK = 27,
1282 I2S0I_WS = 28,
1283 I2CEXT0_SCL = 29,
1284 I2CEXT0_SDA = 30,
1285 PWM0_SYNC0 = 31,
1286 PWM0_SYNC1 = 32,
1287 PWM0_SYNC2 = 33,
1288 PWM0_F0 = 34,
1289 PWM0_F1 = 35,
1290 PWM0_F2 = 36,
1291 PCNT0_SIG_CH0 = 39,
1292 PCNT0_SIG_CH1 = 40,
1293 PCNT0_CTRL_CH0 = 41,
1294 PCNT0_CTRL_CH1 = 42,
1295 PCNT1_SIG_CH0 = 43,
1296 PCNT1_SIG_CH1 = 44,
1297 PCNT1_CTRL_CH0 = 45,
1298 PCNT1_CTRL_CH1 = 46,
1299 PCNT2_SIG_CH0 = 47,
1300 PCNT2_SIG_CH1 = 48,
1301 PCNT2_CTRL_CH0 = 49,
1302 PCNT2_CTRL_CH1 = 50,
1303 PCNT3_SIG_CH0 = 51,
1304 PCNT3_SIG_CH1 = 52,
1305 PCNT3_CTRL_CH0 = 53,
1306 PCNT3_CTRL_CH1 = 54,
1307 PCNT4_SIG_CH0 = 55,
1308 PCNT4_SIG_CH1 = 56,
1309 PCNT4_CTRL_CH0 = 57,
1310 PCNT4_CTRL_CH1 = 58,
1311 HSPICS1 = 61,
1312 HSPICS2 = 62,
1313 VSPICLK = 63,
1314 VSPIQ = 64,
1315 VSPID = 65,
1316 VSPIHD = 66,
1317 VSPIWP = 67,
1318 VSPICS0 = 68,
1319 VSPICS1 = 69,
1320 VSPICS2 = 70,
1321 PCNT5_SIG_CH0 = 71,
1322 PCNT5_SIG_CH1 = 72,
1323 PCNT5_CTRL_CH0 = 73,
1324 PCNT5_CTRL_CH1 = 74,
1325 PCNT6_SIG_CH0 = 75,
1326 PCNT6_SIG_CH1 = 76,
1327 PCNT6_CTRL_CH0 = 77,
1328 PCNT6_CTRL_CH1 = 78,
1329 PCNT7_SIG_CH0 = 79,
1330 PCNT7_SIG_CH1 = 80,
1331 PCNT7_CTRL_CH0 = 81,
1332 PCNT7_CTRL_CH1 = 82,
1333 RMT_SIG_0 = 83,
1334 RMT_SIG_1 = 84,
1335 RMT_SIG_2 = 85,
1336 RMT_SIG_3 = 86,
1337 RMT_SIG_4 = 87,
1338 RMT_SIG_5 = 88,
1339 RMT_SIG_6 = 89,
1340 RMT_SIG_7 = 90,
1341 TWAI_RX = 94,
1342 I2CEXT1_SCL = 95,
1343 I2CEXT1_SDA = 96,
1344 HOST_CARD_DETECT_N_1 = 97,
1345 HOST_CARD_DETECT_N_2 = 98,
1346 HOST_CARD_WRITE_PRT_1 = 99,
1347 HOST_CARD_WRITE_PRT_2 = 100,
1348 HOST_CARD_INT_N_1 = 101,
1349 HOST_CARD_INT_N_2 = 102,
1350 PWM1_SYNC0 = 103,
1351 PWM1_SYNC1 = 104,
1352 PWM1_SYNC2 = 105,
1353 PWM1_F0 = 106,
1354 PWM1_F1 = 107,
1355 PWM1_F2 = 108,
1356 PWM0_CAP0 = 109,
1357 PWM0_CAP1 = 110,
1358 PWM0_CAP2 = 111,
1359 PWM1_CAP0 = 112,
1360 PWM1_CAP1 = 113,
1361 PWM1_CAP2 = 114,
1362 I2S0I_DATA_0 = 140,
1363 I2S0I_DATA_1 = 141,
1364 I2S0I_DATA_2 = 142,
1365 I2S0I_DATA_3 = 143,
1366 I2S0I_DATA_4 = 144,
1367 I2S0I_DATA_5 = 145,
1368 I2S0I_DATA_6 = 146,
1369 I2S0I_DATA_7 = 147,
1370 I2S0I_DATA_8 = 148,
1371 I2S0I_DATA_9 = 149,
1372 I2S0I_DATA_10 = 150,
1373 I2S0I_DATA_11 = 151,
1374 I2S0I_DATA_12 = 152,
1375 I2S0I_DATA_13 = 153,
1376 I2S0I_DATA_14 = 154,
1377 I2S0I_DATA_15 = 155,
1378 I2S1I_BCK = 164,
1379 I2S1I_WS = 165,
1380 I2S1I_DATA_0 = 166,
1381 I2S1I_DATA_1 = 167,
1382 I2S1I_DATA_2 = 168,
1383 I2S1I_DATA_3 = 169,
1384 I2S1I_DATA_4 = 170,
1385 I2S1I_DATA_5 = 171,
1386 I2S1I_DATA_6 = 172,
1387 I2S1I_DATA_7 = 173,
1388 I2S1I_DATA_8 = 174,
1389 I2S1I_DATA_9 = 175,
1390 I2S1I_DATA_10 = 176,
1391 I2S1I_DATA_11 = 177,
1392 I2S1I_DATA_12 = 178,
1393 I2S1I_DATA_13 = 179,
1394 I2S1I_DATA_14 = 180,
1395 I2S1I_DATA_15 = 181,
1396 I2S0I_H_SYNC = 190,
1397 I2S0I_V_SYNC = 191,
1398 I2S0I_H_ENABLE = 192,
1399 I2S1I_H_SYNC = 193,
1400 I2S1I_V_SYNC = 194,
1401 I2S1I_H_ENABLE = 195,
1402 U2RXD = 198,
1403 U2CTS = 199,
1404 EMAC_MDC = 200,
1405 EMAC_MDI = 201,
1406 EMAC_CRS = 202,
1407 EMAC_COL = 203,
1408 PCMFSYNC = 204,
1409 PCMCLK = 205,
1410 PCMDIN = 206,
1411 SD_CMD,
1412 SD_DATA0,
1413 SD_DATA1,
1414 SD_DATA2,
1415 SD_DATA3,
1416 HS1_DATA0,
1417 HS1_DATA1,
1418 HS1_DATA2,
1419 HS1_DATA3,
1420 HS1_DATA4,
1421 HS1_DATA5,
1422 HS1_DATA6,
1423 HS1_DATA7,
1424 HS2_DATA0,
1425 HS2_DATA1,
1426 HS2_DATA2,
1427 HS2_DATA3,
1428 EMAC_TX_CLK,
1429 EMAC_RXD2,
1430 EMAC_TX_ER,
1431 EMAC_RX_CLK,
1432 EMAC_RX_ER,
1433 EMAC_RXD3,
1434 EMAC_RXD0,
1435 EMAC_RXD1,
1436 EMAC_RX_DV,
1437 MTDI,
1438 MTCK,
1439 MTMS,
1440 }
1441 #[allow(non_camel_case_types, clippy::upper_case_acronyms)]
1442 #[derive(Debug, PartialEq, Copy, Clone)]
1443 #[cfg_attr(feature = "defmt", derive(defmt::Format))]
1444 #[doc(hidden)]
1445 pub enum OutputSignal {
1446 SPICLK = 0,
1447 SPIQ = 1,
1448 SPID = 2,
1449 SPIHD = 3,
1450 SPIWP = 4,
1451 SPICS0 = 5,
1452 SPICS1 = 6,
1453 SPICS2 = 7,
1454 HSPICLK = 8,
1455 HSPIQ = 9,
1456 HSPID = 10,
1457 HSPICS0 = 11,
1458 HSPIHD = 12,
1459 HSPIWP = 13,
1460 U0TXD = 14,
1461 U0RTS = 15,
1462 U0DTR = 16,
1463 U1TXD = 17,
1464 U1RTS = 18,
1465 I2S0O_BCK = 23,
1466 I2S1O_BCK = 24,
1467 I2S0O_WS = 25,
1468 I2S1O_WS = 26,
1469 I2S0I_BCK = 27,
1470 I2S0I_WS = 28,
1471 I2CEXT0_SCL = 29,
1472 I2CEXT0_SDA = 30,
1473 SDIO_TOHOSTT = 31,
1474 PWM0_0A = 32,
1475 PWM0_0B = 33,
1476 PWM0_1A = 34,
1477 PWM0_1B = 35,
1478 PWM0_2A = 36,
1479 PWM0_2B = 37,
1480 HSPICS1 = 61,
1481 HSPICS2 = 62,
1482 VSPICLK = 63,
1483 VSPIQ = 64,
1484 VSPID = 65,
1485 VSPIHD = 66,
1486 VSPIWP = 67,
1487 VSPICS0 = 68,
1488 VSPICS1 = 69,
1489 VSPICS2 = 70,
1490 LEDC_HS_SIG0 = 71,
1491 LEDC_HS_SIG1 = 72,
1492 LEDC_HS_SIG2 = 73,
1493 LEDC_HS_SIG3 = 74,
1494 LEDC_HS_SIG4 = 75,
1495 LEDC_HS_SIG5 = 76,
1496 LEDC_HS_SIG6 = 77,
1497 LEDC_HS_SIG7 = 78,
1498 LEDC_LS_SIG0 = 79,
1499 LEDC_LS_SIG1 = 80,
1500 LEDC_LS_SIG2 = 81,
1501 LEDC_LS_SIG3 = 82,
1502 LEDC_LS_SIG4 = 83,
1503 LEDC_LS_SIG5 = 84,
1504 LEDC_LS_SIG6 = 85,
1505 LEDC_LS_SIG7 = 86,
1506 RMT_SIG_0 = 87,
1507 RMT_SIG_1 = 88,
1508 RMT_SIG_2 = 89,
1509 RMT_SIG_3 = 90,
1510 RMT_SIG_4 = 91,
1511 RMT_SIG_5 = 92,
1512 RMT_SIG_6 = 93,
1513 RMT_SIG_7 = 94,
1514 I2CEXT1_SCL = 95,
1515 I2CEXT1_SDA = 96,
1516 HOST_CCMD_OD_PULLUP_EN_N = 97,
1517 HOST_RST_N_1 = 98,
1518 HOST_RST_N_2 = 99,
1519 GPIO_SD0 = 100,
1520 GPIO_SD1 = 101,
1521 GPIO_SD2 = 102,
1522 GPIO_SD3 = 103,
1523 GPIO_SD4 = 104,
1524 GPIO_SD5 = 105,
1525 GPIO_SD6 = 106,
1526 GPIO_SD7 = 107,
1527 PWM1_0A = 108,
1528 PWM1_0B = 109,
1529 PWM1_1A = 110,
1530 PWM1_1B = 111,
1531 PWM1_2A = 112,
1532 PWM1_2B = 113,
1533 TWAI_TX = 123,
1534 TWAI_BUS_OFF_ON = 124,
1535 TWAI_CLKOUT = 125,
1536 I2S0O_DATA_0 = 140,
1537 I2S0O_DATA_1 = 141,
1538 I2S0O_DATA_2 = 142,
1539 I2S0O_DATA_3 = 143,
1540 I2S0O_DATA_4 = 144,
1541 I2S0O_DATA_5 = 145,
1542 I2S0O_DATA_6 = 146,
1543 I2S0O_DATA_7 = 147,
1544 I2S0O_DATA_8 = 148,
1545 I2S0O_DATA_9 = 149,
1546 I2S0O_DATA_10 = 150,
1547 I2S0O_DATA_11 = 151,
1548 I2S0O_DATA_12 = 152,
1549 I2S0O_DATA_13 = 153,
1550 I2S0O_DATA_14 = 154,
1551 I2S0O_DATA_15 = 155,
1552 I2S0O_DATA_16 = 156,
1553 I2S0O_DATA_17 = 157,
1554 I2S0O_DATA_18 = 158,
1555 I2S0O_DATA_19 = 159,
1556 I2S0O_DATA_20 = 160,
1557 I2S0O_DATA_21 = 161,
1558 I2S0O_DATA_22 = 162,
1559 I2S0O_DATA_23 = 163,
1560 I2S1I_BCK = 164,
1561 I2S1I_WS = 165,
1562 I2S1O_DATA_0 = 166,
1563 I2S1O_DATA_1 = 167,
1564 I2S1O_DATA_2 = 168,
1565 I2S1O_DATA_3 = 169,
1566 I2S1O_DATA_4 = 170,
1567 I2S1O_DATA_5 = 171,
1568 I2S1O_DATA_6 = 172,
1569 I2S1O_DATA_7 = 173,
1570 I2S1O_DATA_8 = 174,
1571 I2S1O_DATA_9 = 175,
1572 I2S1O_DATA_10 = 176,
1573 I2S1O_DATA_11 = 177,
1574 I2S1O_DATA_12 = 178,
1575 I2S1O_DATA_13 = 179,
1576 I2S1O_DATA_14 = 180,
1577 I2S1O_DATA_15 = 181,
1578 I2S1O_DATA_16 = 182,
1579 I2S1O_DATA_17 = 183,
1580 I2S1O_DATA_18 = 184,
1581 I2S1O_DATA_19 = 185,
1582 I2S1O_DATA_20 = 186,
1583 I2S1O_DATA_21 = 187,
1584 I2S1O_DATA_22 = 188,
1585 I2S1O_DATA_23 = 189,
1586 U2TXD = 198,
1587 U2RTS = 199,
1588 EMAC_MDC = 200,
1589 EMAC_MDO = 201,
1590 EMAC_CRS = 202,
1591 EMAC_COL = 203,
1592 BT_AUDIO0RQ = 204,
1593 BT_AUDIO1RQ = 205,
1594 BT_AUDIO2RQ = 206,
1595 BLE_AUDIO0RQ = 207,
1596 BLE_AUDIO1RQ = 208,
1597 BLE_AUDIO2RQ = 209,
1598 PCMFSYNC = 210,
1599 PCMCLK = 211,
1600 PCMDOUT = 212,
1601 BLE_AUDIO_SYNC0_P = 213,
1602 BLE_AUDIO_SYNC1_P = 214,
1603 BLE_AUDIO_SYNC2_P = 215,
1604 ANT_SEL0 = 216,
1605 ANT_SEL1 = 217,
1606 ANT_SEL2 = 218,
1607 ANT_SEL3 = 219,
1608 ANT_SEL4 = 220,
1609 ANT_SEL5 = 221,
1610 ANT_SEL6 = 222,
1611 ANT_SEL7 = 223,
1612 SIGNAL_224 = 224,
1613 SIGNAL_225 = 225,
1614 SIGNAL_226 = 226,
1615 SIGNAL_227 = 227,
1616 SIGNAL_228 = 228,
1617 GPIO = 256,
1618 CLK_OUT1,
1619 CLK_OUT2,
1620 CLK_OUT3,
1621 SD_CLK,
1622 SD_CMD,
1623 SD_DATA0,
1624 SD_DATA1,
1625 SD_DATA2,
1626 SD_DATA3,
1627 HS1_CLK,
1628 HS1_CMD,
1629 HS1_DATA0,
1630 HS1_DATA1,
1631 HS1_DATA2,
1632 HS1_DATA3,
1633 HS1_DATA4,
1634 HS1_DATA5,
1635 HS1_DATA6,
1636 HS1_DATA7,
1637 HS1_STROBE,
1638 HS2_CLK,
1639 HS2_CMD,
1640 HS2_DATA0,
1641 HS2_DATA1,
1642 HS2_DATA2,
1643 HS2_DATA3,
1644 EMAC_TX_CLK,
1645 EMAC_TX_ER,
1646 EMAC_TXD3,
1647 EMAC_RX_ER,
1648 EMAC_TXD2,
1649 EMAC_CLK_OUT,
1650 EMAC_CLK_180,
1651 EMAC_TXD0,
1652 EMAC_TX_EN,
1653 EMAC_TXD1,
1654 MTDO,
1655 }
1656 };
1657}
1658#[macro_export]
1671#[expect(clippy::crate_in_macro_def)]
1672#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1673macro_rules! define_io_mux_reg {
1674 () => {
1675 pub(crate) fn io_mux_reg(gpio_num: u8) -> &'static crate::pac::io_mux::GPIO0 {
1676 let iomux = crate::peripherals::IO_MUX::regs();
1677 match gpio_num {
1678 0 => iomux.gpio0(),
1679 1 => iomux.gpio1(),
1680 2 => iomux.gpio2(),
1681 3 => iomux.gpio3(),
1682 4 => iomux.gpio4(),
1683 5 => iomux.gpio5(),
1684 12 => iomux.gpio12(),
1685 13 => iomux.gpio13(),
1686 14 => iomux.gpio14(),
1687 15 => iomux.gpio15(),
1688 16 => iomux.gpio16(),
1689 17 => iomux.gpio17(),
1690 18 => iomux.gpio18(),
1691 19 => iomux.gpio19(),
1692 21 => iomux.gpio21(),
1693 22 => iomux.gpio22(),
1694 23 => iomux.gpio23(),
1695 25 => iomux.gpio25(),
1696 26 => iomux.gpio26(),
1697 27 => iomux.gpio27(),
1698 32 => iomux.gpio32(),
1699 33 => iomux.gpio33(),
1700 34 => iomux.gpio34(),
1701 35 => iomux.gpio35(),
1702 36 => iomux.gpio36(),
1703 37 => iomux.gpio37(),
1704 38 => iomux.gpio38(),
1705 39 => iomux.gpio39(),
1706 other => panic!("GPIO {} does not exist", other),
1707 }
1708 }
1709 };
1710}