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 ("wifi.has_wifi6") => {
262 false
263 };
264 ("phy.combo_module") => {
265 false
266 };
267}
268#[macro_export]
270#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
271macro_rules! memory_range {
272 ("DRAM") => {
273 1073414144..1073741824
274 };
275}
276#[macro_export]
277#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
278macro_rules! for_each_soc_xtal_options {
279 ($($pattern:tt => $code:tt;)*) => {
280 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
281 _for_each_inner!((40)); _for_each_inner!((all(40)));
282 };
283}
284#[macro_export]
285#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
286macro_rules! for_each_aes_key_length {
287 ($($pattern:tt => $code:tt;)*) => {
288 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
289 _for_each_inner!((128)); _for_each_inner!((192)); _for_each_inner!((256));
290 _for_each_inner!((128, 0, 4)); _for_each_inner!((192, 1, 5));
291 _for_each_inner!((256, 2, 6)); _for_each_inner!((bits(128), (192), (256)));
292 _for_each_inner!((modes(128, 0, 4), (192, 1, 5), (256, 2, 6)));
293 };
294}
295#[macro_export]
317#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
318macro_rules! for_each_rmt_channel {
319 ($($pattern:tt => $code:tt;)*) => {
320 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
321 _for_each_inner!((0)); _for_each_inner!((1)); _for_each_inner!((2));
322 _for_each_inner!((3)); _for_each_inner!((0, 0)); _for_each_inner!((1, 1));
323 _for_each_inner!((2, 2)); _for_each_inner!((3, 3)); _for_each_inner!((0, 0));
324 _for_each_inner!((1, 1)); _for_each_inner!((2, 2)); _for_each_inner!((3, 3));
325 _for_each_inner!((all(0), (1), (2), (3))); _for_each_inner!((tx(0, 0), (1, 1),
326 (2, 2), (3, 3))); _for_each_inner!((rx(0, 0), (1, 1), (2, 2), (3, 3)));
327 };
328}
329#[macro_export]
330#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
331macro_rules! for_each_rmt_clock_source {
332 ($($pattern:tt => $code:tt;)*) => {
333 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
334 _for_each_inner!((RefTick, 0)); _for_each_inner!((Apb, 1));
335 _for_each_inner!((Apb)); _for_each_inner!((all(RefTick, 0), (Apb, 1)));
336 _for_each_inner!((default(Apb))); _for_each_inner!((is_boolean));
337 };
338}
339#[macro_export]
340#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
341macro_rules! for_each_rsa_exponentiation {
342 ($($pattern:tt => $code:tt;)*) => {
343 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
344 _for_each_inner!((32)); _for_each_inner!((64)); _for_each_inner!((96));
345 _for_each_inner!((128)); _for_each_inner!((160)); _for_each_inner!((192));
346 _for_each_inner!((224)); _for_each_inner!((256)); _for_each_inner!((288));
347 _for_each_inner!((320)); _for_each_inner!((352)); _for_each_inner!((384));
348 _for_each_inner!((416)); _for_each_inner!((448)); _for_each_inner!((480));
349 _for_each_inner!((512)); _for_each_inner!((544)); _for_each_inner!((576));
350 _for_each_inner!((608)); _for_each_inner!((640)); _for_each_inner!((672));
351 _for_each_inner!((704)); _for_each_inner!((736)); _for_each_inner!((768));
352 _for_each_inner!((800)); _for_each_inner!((832)); _for_each_inner!((864));
353 _for_each_inner!((896)); _for_each_inner!((928)); _for_each_inner!((960));
354 _for_each_inner!((992)); _for_each_inner!((1024)); _for_each_inner!((1056));
355 _for_each_inner!((1088)); _for_each_inner!((1120)); _for_each_inner!((1152));
356 _for_each_inner!((1184)); _for_each_inner!((1216)); _for_each_inner!((1248));
357 _for_each_inner!((1280)); _for_each_inner!((1312)); _for_each_inner!((1344));
358 _for_each_inner!((1376)); _for_each_inner!((1408)); _for_each_inner!((1440));
359 _for_each_inner!((1472)); _for_each_inner!((1504)); _for_each_inner!((1536));
360 _for_each_inner!((1568)); _for_each_inner!((1600)); _for_each_inner!((1632));
361 _for_each_inner!((1664)); _for_each_inner!((1696)); _for_each_inner!((1728));
362 _for_each_inner!((1760)); _for_each_inner!((1792)); _for_each_inner!((1824));
363 _for_each_inner!((1856)); _for_each_inner!((1888)); _for_each_inner!((1920));
364 _for_each_inner!((1952)); _for_each_inner!((1984)); _for_each_inner!((2016));
365 _for_each_inner!((2048)); _for_each_inner!((2080)); _for_each_inner!((2112));
366 _for_each_inner!((2144)); _for_each_inner!((2176)); _for_each_inner!((2208));
367 _for_each_inner!((2240)); _for_each_inner!((2272)); _for_each_inner!((2304));
368 _for_each_inner!((2336)); _for_each_inner!((2368)); _for_each_inner!((2400));
369 _for_each_inner!((2432)); _for_each_inner!((2464)); _for_each_inner!((2496));
370 _for_each_inner!((2528)); _for_each_inner!((2560)); _for_each_inner!((2592));
371 _for_each_inner!((2624)); _for_each_inner!((2656)); _for_each_inner!((2688));
372 _for_each_inner!((2720)); _for_each_inner!((2752)); _for_each_inner!((2784));
373 _for_each_inner!((2816)); _for_each_inner!((2848)); _for_each_inner!((2880));
374 _for_each_inner!((2912)); _for_each_inner!((2944)); _for_each_inner!((2976));
375 _for_each_inner!((3008)); _for_each_inner!((3040)); _for_each_inner!((3072));
376 _for_each_inner!((3104)); _for_each_inner!((3136)); _for_each_inner!((3168));
377 _for_each_inner!((3200)); _for_each_inner!((3232)); _for_each_inner!((3264));
378 _for_each_inner!((3296)); _for_each_inner!((3328)); _for_each_inner!((3360));
379 _for_each_inner!((3392)); _for_each_inner!((3424)); _for_each_inner!((3456));
380 _for_each_inner!((3488)); _for_each_inner!((3520)); _for_each_inner!((3552));
381 _for_each_inner!((3584)); _for_each_inner!((3616)); _for_each_inner!((3648));
382 _for_each_inner!((3680)); _for_each_inner!((3712)); _for_each_inner!((3744));
383 _for_each_inner!((3776)); _for_each_inner!((3808)); _for_each_inner!((3840));
384 _for_each_inner!((3872)); _for_each_inner!((3904)); _for_each_inner!((3936));
385 _for_each_inner!((3968)); _for_each_inner!((4000)); _for_each_inner!((4032));
386 _for_each_inner!((4064)); _for_each_inner!((4096)); _for_each_inner!((all(32),
387 (64), (96), (128), (160), (192), (224), (256), (288), (320), (352), (384), (416),
388 (448), (480), (512), (544), (576), (608), (640), (672), (704), (736), (768),
389 (800), (832), (864), (896), (928), (960), (992), (1024), (1056), (1088), (1120),
390 (1152), (1184), (1216), (1248), (1280), (1312), (1344), (1376), (1408), (1440),
391 (1472), (1504), (1536), (1568), (1600), (1632), (1664), (1696), (1728), (1760),
392 (1792), (1824), (1856), (1888), (1920), (1952), (1984), (2016), (2048), (2080),
393 (2112), (2144), (2176), (2208), (2240), (2272), (2304), (2336), (2368), (2400),
394 (2432), (2464), (2496), (2528), (2560), (2592), (2624), (2656), (2688), (2720),
395 (2752), (2784), (2816), (2848), (2880), (2912), (2944), (2976), (3008), (3040),
396 (3072), (3104), (3136), (3168), (3200), (3232), (3264), (3296), (3328), (3360),
397 (3392), (3424), (3456), (3488), (3520), (3552), (3584), (3616), (3648), (3680),
398 (3712), (3744), (3776), (3808), (3840), (3872), (3904), (3936), (3968), (4000),
399 (4032), (4064), (4096)));
400 };
401}
402#[macro_export]
403#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
404macro_rules! for_each_rsa_multiplication {
405 ($($pattern:tt => $code:tt;)*) => {
406 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
407 _for_each_inner!((32)); _for_each_inner!((64)); _for_each_inner!((96));
408 _for_each_inner!((128)); _for_each_inner!((160)); _for_each_inner!((192));
409 _for_each_inner!((224)); _for_each_inner!((256)); _for_each_inner!((288));
410 _for_each_inner!((320)); _for_each_inner!((352)); _for_each_inner!((384));
411 _for_each_inner!((416)); _for_each_inner!((448)); _for_each_inner!((480));
412 _for_each_inner!((512)); _for_each_inner!((544)); _for_each_inner!((576));
413 _for_each_inner!((608)); _for_each_inner!((640)); _for_each_inner!((672));
414 _for_each_inner!((704)); _for_each_inner!((736)); _for_each_inner!((768));
415 _for_each_inner!((800)); _for_each_inner!((832)); _for_each_inner!((864));
416 _for_each_inner!((896)); _for_each_inner!((928)); _for_each_inner!((960));
417 _for_each_inner!((992)); _for_each_inner!((1024)); _for_each_inner!((1056));
418 _for_each_inner!((1088)); _for_each_inner!((1120)); _for_each_inner!((1152));
419 _for_each_inner!((1184)); _for_each_inner!((1216)); _for_each_inner!((1248));
420 _for_each_inner!((1280)); _for_each_inner!((1312)); _for_each_inner!((1344));
421 _for_each_inner!((1376)); _for_each_inner!((1408)); _for_each_inner!((1440));
422 _for_each_inner!((1472)); _for_each_inner!((1504)); _for_each_inner!((1536));
423 _for_each_inner!((1568)); _for_each_inner!((1600)); _for_each_inner!((1632));
424 _for_each_inner!((1664)); _for_each_inner!((1696)); _for_each_inner!((1728));
425 _for_each_inner!((1760)); _for_each_inner!((1792)); _for_each_inner!((1824));
426 _for_each_inner!((1856)); _for_each_inner!((1888)); _for_each_inner!((1920));
427 _for_each_inner!((1952)); _for_each_inner!((1984)); _for_each_inner!((2016));
428 _for_each_inner!((2048)); _for_each_inner!((all(32), (64), (96), (128), (160),
429 (192), (224), (256), (288), (320), (352), (384), (416), (448), (480), (512),
430 (544), (576), (608), (640), (672), (704), (736), (768), (800), (832), (864),
431 (896), (928), (960), (992), (1024), (1056), (1088), (1120), (1152), (1184),
432 (1216), (1248), (1280), (1312), (1344), (1376), (1408), (1440), (1472), (1504),
433 (1536), (1568), (1600), (1632), (1664), (1696), (1728), (1760), (1792), (1824),
434 (1856), (1888), (1920), (1952), (1984), (2016), (2048)));
435 };
436}
437#[macro_export]
438#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
439macro_rules! for_each_sha_algorithm {
440 ($($pattern:tt => $code:tt;)*) => {
441 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
442 _for_each_inner!((Sha1, "SHA-1"(sizes : 64, 20, 8) (insecure_against :
443 "collision", "length extension"), 0)); _for_each_inner!((Sha224, "SHA-224"(sizes
444 : 64, 28, 8) (insecure_against : "length extension"), 1));
445 _for_each_inner!((Sha256, "SHA-256"(sizes : 64, 32, 8) (insecure_against :
446 "length extension"), 2)); _for_each_inner!((Sha384, "SHA-384"(sizes : 128, 48,
447 16) (insecure_against :), 3)); _for_each_inner!((Sha512, "SHA-512"(sizes : 128,
448 64, 16) (insecure_against : "length extension"), 4));
449 _for_each_inner!((Sha512_224, "SHA-512/224"(sizes : 128, 28, 16)
450 (insecure_against :), 5)); _for_each_inner!((Sha512_256, "SHA-512/256"(sizes :
451 128, 32, 16) (insecure_against :), 6)); _for_each_inner!((algos(Sha1,
452 "SHA-1"(sizes : 64, 20, 8) (insecure_against : "collision", "length extension"),
453 0), (Sha224, "SHA-224"(sizes : 64, 28, 8) (insecure_against :
454 "length extension"), 1), (Sha256, "SHA-256"(sizes : 64, 32, 8) (insecure_against
455 : "length extension"), 2), (Sha384, "SHA-384"(sizes : 128, 48, 16)
456 (insecure_against :), 3), (Sha512, "SHA-512"(sizes : 128, 64, 16)
457 (insecure_against : "length extension"), 4), (Sha512_224, "SHA-512/224"(sizes :
458 128, 28, 16) (insecure_against :), 5), (Sha512_256, "SHA-512/256"(sizes : 128,
459 32, 16) (insecure_against :), 6)));
460 };
461}
462#[macro_export]
479#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
480macro_rules! for_each_i2c_master {
481 ($($pattern:tt => $code:tt;)*) => {
482 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
483 _for_each_inner!((I2C0, I2cExt0, I2CEXT0_SCL, I2CEXT0_SDA));
484 _for_each_inner!((I2C1, I2cExt1, I2CEXT1_SCL, I2CEXT1_SDA));
485 _for_each_inner!((all(I2C0, I2cExt0, I2CEXT0_SCL, I2CEXT0_SDA), (I2C1, I2cExt1,
486 I2CEXT1_SCL, I2CEXT1_SDA)));
487 };
488}
489#[macro_export]
506#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
507macro_rules! for_each_uart {
508 ($($pattern:tt => $code:tt;)*) => {
509 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
510 _for_each_inner!((UART0, Uart0, U0RXD, U0TXD, U0CTS, U0RTS));
511 _for_each_inner!((UART1, Uart1, U1RXD, U1TXD, U1CTS, U1RTS));
512 _for_each_inner!((all(UART0, Uart0, U0RXD, U0TXD, U0CTS, U0RTS), (UART1, Uart1,
513 U1RXD, U1TXD, U1CTS, U1RTS)));
514 };
515}
516#[macro_export]
538#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
539macro_rules! for_each_spi_master {
540 ($($pattern:tt => $code:tt;)*) => {
541 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
542 _for_each_inner!((SPI2, Spi2, FSPICLK[FSPICS0, FSPICS1, FSPICS2, FSPICS3,
543 FSPICS4, FSPICS5] [FSPID, FSPIQ, FSPIWP, FSPIHD, FSPIIO4, FSPIIO5, FSPIIO6,
544 FSPIIO7], true)); _for_each_inner!((SPI3, Spi3, SPI3_CLK[SPI3_CS0, SPI3_CS1,
545 SPI3_CS2] [SPI3_D, SPI3_Q])); _for_each_inner!((all(SPI2, Spi2, FSPICLK[FSPICS0,
546 FSPICS1, FSPICS2, FSPICS3, FSPICS4, FSPICS5] [FSPID, FSPIQ, FSPIWP, FSPIHD,
547 FSPIIO4, FSPIIO5, FSPIIO6, FSPIIO7], true), (SPI3, Spi3, SPI3_CLK[SPI3_CS0,
548 SPI3_CS1, SPI3_CS2] [SPI3_D, SPI3_Q])));
549 };
550}
551#[macro_export]
568#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
569macro_rules! for_each_spi_slave {
570 ($($pattern:tt => $code:tt;)*) => {
571 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
572 _for_each_inner!((SPI2, Spi2, FSPICLK, FSPID, FSPIQ, FSPICS0));
573 _for_each_inner!((SPI3, Spi3, SPI3_CLK, SPI3_D, SPI3_Q, SPI3_CS0));
574 _for_each_inner!((all(SPI2, Spi2, FSPICLK, FSPID, FSPIQ, FSPICS0), (SPI3, Spi3,
575 SPI3_CLK, SPI3_D, SPI3_Q, SPI3_CS0)));
576 };
577}
578#[macro_export]
579#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
580macro_rules! for_each_peripheral {
581 ($($pattern:tt => $code:tt;)*) => {
582 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
583 _for_each_inner!((GPIO0 <= virtual())); _for_each_inner!((GPIO1 <= virtual()));
584 _for_each_inner!((GPIO2 <= virtual())); _for_each_inner!((GPIO3 <= virtual()));
585 _for_each_inner!((GPIO4 <= virtual())); _for_each_inner!((GPIO5 <= virtual()));
586 _for_each_inner!((GPIO6 <= virtual())); _for_each_inner!((GPIO7 <= virtual()));
587 _for_each_inner!((GPIO8 <= virtual())); _for_each_inner!((GPIO9 <= virtual()));
588 _for_each_inner!((GPIO10 <= virtual())); _for_each_inner!((GPIO11 <= virtual()));
589 _for_each_inner!((GPIO12 <= virtual())); _for_each_inner!((GPIO13 <= virtual()));
590 _for_each_inner!((GPIO14 <= virtual())); _for_each_inner!((GPIO15 <= virtual()));
591 _for_each_inner!((GPIO16 <= virtual())); _for_each_inner!((GPIO17 <= virtual()));
592 _for_each_inner!((GPIO18 <= virtual())); _for_each_inner!((GPIO19 <= virtual()));
593 _for_each_inner!((GPIO20 <= virtual())); _for_each_inner!((GPIO21 <= virtual()));
594 _for_each_inner!((GPIO33 <= virtual())); _for_each_inner!((GPIO34 <= virtual()));
595 _for_each_inner!((GPIO35 <= virtual())); _for_each_inner!((GPIO36 <= virtual()));
596 _for_each_inner!((GPIO37 <= virtual())); _for_each_inner!((GPIO38 <= virtual()));
597 _for_each_inner!((GPIO39 <= virtual())); _for_each_inner!((GPIO40 <= virtual()));
598 _for_each_inner!((GPIO41 <= virtual())); _for_each_inner!((GPIO42 <= virtual()));
599 _for_each_inner!((GPIO43 <= virtual())); _for_each_inner!((GPIO44 <= virtual()));
600 _for_each_inner!((GPIO45 <= virtual())); _for_each_inner!((GPIO46 <= virtual()));
601 _for_each_inner!((AES <= AES(AES : { bind_peri_interrupt, enable_peri_interrupt,
602 disable_peri_interrupt }) (unstable))); _for_each_inner!((APB_SARADC <=
603 APB_SARADC() (unstable))); _for_each_inner!((DEDICATED_GPIO <= DEDICATED_GPIO()
604 (unstable))); _for_each_inner!((DS <= DS() (unstable))); _for_each_inner!((EFUSE
605 <= EFUSE() (unstable))); _for_each_inner!((EXTMEM <= EXTMEM() (unstable)));
606 _for_each_inner!((FE <= FE() (unstable))); _for_each_inner!((FE2 <= FE2()
607 (unstable))); _for_each_inner!((GPIO <= GPIO() (unstable)));
608 _for_each_inner!((GPIO_SD <= GPIO_SD() (unstable))); _for_each_inner!((HMAC <=
609 HMAC() (unstable))); _for_each_inner!((I2C_ANA_MST <= I2C_ANA_MST() (unstable)));
610 _for_each_inner!((I2C0 <= I2C0(I2C_EXT0 : { bind_peri_interrupt,
611 enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((I2C1 <=
612 I2C1(I2C_EXT1 : { bind_peri_interrupt, enable_peri_interrupt,
613 disable_peri_interrupt }))); _for_each_inner!((I2S0 <= I2S0(I2S0 : {
614 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })
615 (unstable))); _for_each_inner!((INTERRUPT_CORE0 <= INTERRUPT_CORE0()
616 (unstable))); _for_each_inner!((IO_MUX <= IO_MUX() (unstable)));
617 _for_each_inner!((LEDC <= LEDC() (unstable))); _for_each_inner!((NRX <= NRX()
618 (unstable))); _for_each_inner!((PCNT <= PCNT() (unstable)));
619 _for_each_inner!((PMS <= PMS() (unstable))); _for_each_inner!((RMT <= RMT()
620 (unstable))); _for_each_inner!((RNG <= RNG() (unstable))); _for_each_inner!((RSA
621 <= RSA(RSA : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
622 }) (unstable))); _for_each_inner!((LPWR <= RTC_CNTL() (unstable)));
623 _for_each_inner!((RTC_I2C <= RTC_I2C() (unstable))); _for_each_inner!((RTC_IO <=
624 RTC_IO() (unstable))); _for_each_inner!((SENS <= SENS() (unstable)));
625 _for_each_inner!((SHA <= SHA(SHA : { bind_peri_interrupt, enable_peri_interrupt,
626 disable_peri_interrupt }) (unstable))); _for_each_inner!((SPI0 <= SPI0()
627 (unstable))); _for_each_inner!((SPI1 <= SPI1() (unstable)));
628 _for_each_inner!((SPI2 <= SPI2(SPI2_DMA : { bind_dma_interrupt,
629 enable_dma_interrupt, disable_dma_interrupt }, SPI2 : { bind_peri_interrupt,
630 enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((SPI3 <=
631 SPI3(SPI3_DMA : { bind_dma_interrupt, enable_dma_interrupt, disable_dma_interrupt
632 }, SPI3 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
633 }))); _for_each_inner!((SYSCON <= SYSCON() (unstable))); _for_each_inner!((SYSTEM
634 <= SYSTEM() (unstable))); _for_each_inner!((SYSTIMER <= SYSTIMER() (unstable)));
635 _for_each_inner!((TIMG0 <= TIMG0() (unstable))); _for_each_inner!((TIMG1 <=
636 TIMG1() (unstable))); _for_each_inner!((TWAI0 <= TWAI0() (unstable)));
637 _for_each_inner!((UART0 <= UART0(UART0 : { bind_peri_interrupt,
638 enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((UART1 <=
639 UART1(UART1 : { bind_peri_interrupt, enable_peri_interrupt,
640 disable_peri_interrupt }))); _for_each_inner!((UHCI0 <= UHCI0() (unstable)));
641 _for_each_inner!((USB0 <= USB0() (unstable))); _for_each_inner!((USB_WRAP <=
642 USB_WRAP() (unstable))); _for_each_inner!((XTS_AES <= XTS_AES() (unstable)));
643 _for_each_inner!((WIFI <= WIFI() (unstable))); _for_each_inner!((DMA_SPI2 <=
644 SPI2() (unstable))); _for_each_inner!((DMA_SPI3 <= SPI3() (unstable)));
645 _for_each_inner!((DMA_I2S0 <= I2S0() (unstable))); _for_each_inner!((DMA_CRYPTO
646 <= CRYPTO_DMA() (unstable))); _for_each_inner!((DMA_COPY <= COPY_DMA()
647 (unstable))); _for_each_inner!((ADC1 <= virtual() (unstable)));
648 _for_each_inner!((ADC2 <= virtual() (unstable))); _for_each_inner!((DAC1 <=
649 virtual() (unstable))); _for_each_inner!((DAC2 <= virtual() (unstable)));
650 _for_each_inner!((FLASH <= virtual() (unstable))); _for_each_inner!((PSRAM <=
651 virtual() (unstable))); _for_each_inner!((SW_INTERRUPT <= virtual() (unstable)));
652 _for_each_inner!((ULP_RISCV_CORE <= virtual() (unstable)));
653 _for_each_inner!((all(GPIO0 <= virtual()), (GPIO1 <= virtual()), (GPIO2 <=
654 virtual()), (GPIO3 <= virtual()), (GPIO4 <= virtual()), (GPIO5 <= virtual()),
655 (GPIO6 <= virtual()), (GPIO7 <= virtual()), (GPIO8 <= virtual()), (GPIO9 <=
656 virtual()), (GPIO10 <= virtual()), (GPIO11 <= virtual()), (GPIO12 <= virtual()),
657 (GPIO13 <= virtual()), (GPIO14 <= virtual()), (GPIO15 <= virtual()), (GPIO16 <=
658 virtual()), (GPIO17 <= virtual()), (GPIO18 <= virtual()), (GPIO19 <= virtual()),
659 (GPIO20 <= virtual()), (GPIO21 <= virtual()), (GPIO33 <= virtual()), (GPIO34 <=
660 virtual()), (GPIO35 <= virtual()), (GPIO36 <= virtual()), (GPIO37 <= virtual()),
661 (GPIO38 <= virtual()), (GPIO39 <= virtual()), (GPIO40 <= virtual()), (GPIO41 <=
662 virtual()), (GPIO42 <= virtual()), (GPIO43 <= virtual()), (GPIO44 <= virtual()),
663 (GPIO45 <= virtual()), (GPIO46 <= virtual()), (AES <= AES(AES : {
664 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })
665 (unstable)), (APB_SARADC <= APB_SARADC() (unstable)), (DEDICATED_GPIO <=
666 DEDICATED_GPIO() (unstable)), (DS <= DS() (unstable)), (EFUSE <= EFUSE()
667 (unstable)), (EXTMEM <= EXTMEM() (unstable)), (FE <= FE() (unstable)), (FE2 <=
668 FE2() (unstable)), (GPIO <= GPIO() (unstable)), (GPIO_SD <= GPIO_SD()
669 (unstable)), (HMAC <= HMAC() (unstable)), (I2C_ANA_MST <= I2C_ANA_MST()
670 (unstable)), (I2C0 <= I2C0(I2C_EXT0 : { bind_peri_interrupt,
671 enable_peri_interrupt, disable_peri_interrupt })), (I2C1 <= I2C1(I2C_EXT1 : {
672 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (I2S0 <=
673 I2S0(I2S0 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
674 }) (unstable)), (INTERRUPT_CORE0 <= INTERRUPT_CORE0() (unstable)), (IO_MUX <=
675 IO_MUX() (unstable)), (LEDC <= LEDC() (unstable)), (NRX <= NRX() (unstable)),
676 (PCNT <= PCNT() (unstable)), (PMS <= PMS() (unstable)), (RMT <= RMT()
677 (unstable)), (RNG <= RNG() (unstable)), (RSA <= RSA(RSA : { bind_peri_interrupt,
678 enable_peri_interrupt, disable_peri_interrupt }) (unstable)), (LPWR <= RTC_CNTL()
679 (unstable)), (RTC_I2C <= RTC_I2C() (unstable)), (RTC_IO <= RTC_IO() (unstable)),
680 (SENS <= SENS() (unstable)), (SHA <= SHA(SHA : { bind_peri_interrupt,
681 enable_peri_interrupt, disable_peri_interrupt }) (unstable)), (SPI0 <= SPI0()
682 (unstable)), (SPI1 <= SPI1() (unstable)), (SPI2 <= SPI2(SPI2_DMA : {
683 bind_dma_interrupt, enable_dma_interrupt, disable_dma_interrupt }, SPI2 : {
684 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (SPI3 <=
685 SPI3(SPI3_DMA : { bind_dma_interrupt, enable_dma_interrupt, disable_dma_interrupt
686 }, SPI3 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
687 })), (SYSCON <= SYSCON() (unstable)), (SYSTEM <= SYSTEM() (unstable)), (SYSTIMER
688 <= SYSTIMER() (unstable)), (TIMG0 <= TIMG0() (unstable)), (TIMG1 <= TIMG1()
689 (unstable)), (TWAI0 <= TWAI0() (unstable)), (UART0 <= UART0(UART0 : {
690 bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (UART1 <=
691 UART1(UART1 : { bind_peri_interrupt, enable_peri_interrupt,
692 disable_peri_interrupt })), (UHCI0 <= UHCI0() (unstable)), (USB0 <= USB0()
693 (unstable)), (USB_WRAP <= USB_WRAP() (unstable)), (XTS_AES <= XTS_AES()
694 (unstable)), (WIFI <= WIFI() (unstable)), (DMA_SPI2 <= SPI2() (unstable)),
695 (DMA_SPI3 <= SPI3() (unstable)), (DMA_I2S0 <= I2S0() (unstable)), (DMA_CRYPTO <=
696 CRYPTO_DMA() (unstable)), (DMA_COPY <= COPY_DMA() (unstable)), (ADC1 <= virtual()
697 (unstable)), (ADC2 <= virtual() (unstable)), (DAC1 <= virtual() (unstable)),
698 (DAC2 <= virtual() (unstable)), (FLASH <= virtual() (unstable)), (PSRAM <=
699 virtual() (unstable)), (SW_INTERRUPT <= virtual() (unstable)), (ULP_RISCV_CORE <=
700 virtual() (unstable))));
701 };
702}
703#[macro_export]
730#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
731macro_rules! for_each_gpio {
732 ($($pattern:tt => $code:tt;)*) => {
733 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
734 _for_each_inner!((0, GPIO0() () ([Input] [Output]))); _for_each_inner!((1,
735 GPIO1() () ([Input] [Output]))); _for_each_inner!((2, GPIO2() () ([Input]
736 [Output]))); _for_each_inner!((3, GPIO3() () ([Input] [Output])));
737 _for_each_inner!((4, GPIO4() () ([Input] [Output]))); _for_each_inner!((5,
738 GPIO5() () ([Input] [Output]))); _for_each_inner!((6, GPIO6() () ([Input]
739 [Output]))); _for_each_inner!((7, GPIO7() () ([Input] [Output])));
740 _for_each_inner!((8, GPIO8() (_3 => SUBSPICS1) ([Input] [Output])));
741 _for_each_inner!((9, GPIO9(_3 => SUBSPIHD _4 => FSPIHD) (_3 => SUBSPIHD _4 =>
742 FSPIHD) ([Input] [Output]))); _for_each_inner!((10, GPIO10(_2 => FSPIIO4 _4 =>
743 FSPICS0) (_2 => FSPIIO4 _3 => SUBSPICS0 _4 => FSPICS0) ([Input] [Output])));
744 _for_each_inner!((11, GPIO11(_2 => FSPIIO5 _3 => SUBSPID _4 => FSPID) (_2 =>
745 FSPIIO5 _3 => SUBSPID _4 => FSPID) ([Input] [Output]))); _for_each_inner!((12,
746 GPIO12(_2 => FSPIIO6 _4 => FSPICLK) (_2 => FSPIIO6 _3 => SUBSPICLK _4 => FSPICLK)
747 ([Input] [Output]))); _for_each_inner!((13, GPIO13(_2 => FSPIIO7 _3 => SUBSPIQ _4
748 => FSPIQ) (_2 => FSPIIO7 _3 => SUBSPIQ _4 => FSPIQ) ([Input] [Output])));
749 _for_each_inner!((14, GPIO14(_3 => SUBSPIWP _4 => FSPIWP) (_2 => FSPIDQS _3 =>
750 SUBSPIWP _4 => FSPIWP) ([Input] [Output]))); _for_each_inner!((15, GPIO15() (_2
751 => U0RTS) ([Input] [Output]))); _for_each_inner!((16, GPIO16(_2 => U0CTS) ()
752 ([Input] [Output]))); _for_each_inner!((17, GPIO17() (_2 => U1TXD) ([Input]
753 [Output]))); _for_each_inner!((18, GPIO18(_2 => U1RXD) (_3 => CLK_OUT3) ([Input]
754 [Output]))); _for_each_inner!((19, GPIO19() (_2 => U1RTS _3 => CLK_OUT2) ([Input]
755 [Output]))); _for_each_inner!((20, GPIO20(_2 => U1CTS) (_3 => CLK_OUT1) ([Input]
756 [Output]))); _for_each_inner!((21, GPIO21() () ([Input] [Output])));
757 _for_each_inner!((33, GPIO33(_2 => FSPIHD _3 => SUBSPIHD) (_2 => FSPIHD _3 =>
758 SUBSPIHD) ([Input] [Output]))); _for_each_inner!((34, GPIO34(_2 => FSPICS0) (_2
759 => FSPICS0 _3 => SUBSPICS0) ([Input] [Output]))); _for_each_inner!((35, GPIO35(_2
760 => FSPID _3 => SUBSPID) (_2 => FSPID _3 => SUBSPID) ([Input] [Output])));
761 _for_each_inner!((36, GPIO36(_2 => FSPICLK) (_2 => FSPICLK _3 => SUBSPICLK)
762 ([Input] [Output]))); _for_each_inner!((37, GPIO37(_2 => FSPIQ _3 => SUBSPIQ _4
763 => SPIDQS) (_2 => FSPIQ _3 => SUBSPIQ _4 => SPIDQS) ([Input] [Output])));
764 _for_each_inner!((38, GPIO38(_2 => FSPIWP _3 => SUBSPIWP) (_2 => FSPIWP _3 =>
765 SUBSPIWP) ([Input] [Output]))); _for_each_inner!((39, GPIO39(_0 => MTCK) (_2 =>
766 CLK_OUT3 _3 => SUBSPICS1) ([Input] [Output]))); _for_each_inner!((40, GPIO40()
767 (_0 => MTDO _2 => CLK_OUT2) ([Input] [Output]))); _for_each_inner!((41, GPIO41(_0
768 => MTDI) (_2 => CLK_OUT1) ([Input] [Output]))); _for_each_inner!((42, GPIO42(_0
769 => MTMS) () ([Input] [Output]))); _for_each_inner!((43, GPIO43() (_0 => U0TXD _2
770 => CLK_OUT1) ([Input] [Output]))); _for_each_inner!((44, GPIO44(_0 => U0RXD) (_2
771 => CLK_OUT2) ([Input] [Output]))); _for_each_inner!((45, GPIO45() () ([Input]
772 [Output]))); _for_each_inner!((46, GPIO46() () ([Input] [Output])));
773 _for_each_inner!((all(0, GPIO0() () ([Input] [Output])), (1, GPIO1() () ([Input]
774 [Output])), (2, GPIO2() () ([Input] [Output])), (3, GPIO3() () ([Input]
775 [Output])), (4, GPIO4() () ([Input] [Output])), (5, GPIO5() () ([Input]
776 [Output])), (6, GPIO6() () ([Input] [Output])), (7, GPIO7() () ([Input]
777 [Output])), (8, GPIO8() (_3 => SUBSPICS1) ([Input] [Output])), (9, GPIO9(_3 =>
778 SUBSPIHD _4 => FSPIHD) (_3 => SUBSPIHD _4 => FSPIHD) ([Input] [Output])), (10,
779 GPIO10(_2 => FSPIIO4 _4 => FSPICS0) (_2 => FSPIIO4 _3 => SUBSPICS0 _4 => FSPICS0)
780 ([Input] [Output])), (11, GPIO11(_2 => FSPIIO5 _3 => SUBSPID _4 => FSPID) (_2 =>
781 FSPIIO5 _3 => SUBSPID _4 => FSPID) ([Input] [Output])), (12, GPIO12(_2 => FSPIIO6
782 _4 => FSPICLK) (_2 => FSPIIO6 _3 => SUBSPICLK _4 => FSPICLK) ([Input] [Output])),
783 (13, GPIO13(_2 => FSPIIO7 _3 => SUBSPIQ _4 => FSPIQ) (_2 => FSPIIO7 _3 => SUBSPIQ
784 _4 => FSPIQ) ([Input] [Output])), (14, GPIO14(_3 => SUBSPIWP _4 => FSPIWP) (_2 =>
785 FSPIDQS _3 => SUBSPIWP _4 => FSPIWP) ([Input] [Output])), (15, GPIO15() (_2 =>
786 U0RTS) ([Input] [Output])), (16, GPIO16(_2 => U0CTS) () ([Input] [Output])), (17,
787 GPIO17() (_2 => U1TXD) ([Input] [Output])), (18, GPIO18(_2 => U1RXD) (_3 =>
788 CLK_OUT3) ([Input] [Output])), (19, GPIO19() (_2 => U1RTS _3 => CLK_OUT2)
789 ([Input] [Output])), (20, GPIO20(_2 => U1CTS) (_3 => CLK_OUT1) ([Input]
790 [Output])), (21, GPIO21() () ([Input] [Output])), (33, GPIO33(_2 => FSPIHD _3 =>
791 SUBSPIHD) (_2 => FSPIHD _3 => SUBSPIHD) ([Input] [Output])), (34, GPIO34(_2 =>
792 FSPICS0) (_2 => FSPICS0 _3 => SUBSPICS0) ([Input] [Output])), (35, GPIO35(_2 =>
793 FSPID _3 => SUBSPID) (_2 => FSPID _3 => SUBSPID) ([Input] [Output])), (36,
794 GPIO36(_2 => FSPICLK) (_2 => FSPICLK _3 => SUBSPICLK) ([Input] [Output])), (37,
795 GPIO37(_2 => FSPIQ _3 => SUBSPIQ _4 => SPIDQS) (_2 => FSPIQ _3 => SUBSPIQ _4 =>
796 SPIDQS) ([Input] [Output])), (38, GPIO38(_2 => FSPIWP _3 => SUBSPIWP) (_2 =>
797 FSPIWP _3 => SUBSPIWP) ([Input] [Output])), (39, GPIO39(_0 => MTCK) (_2 =>
798 CLK_OUT3 _3 => SUBSPICS1) ([Input] [Output])), (40, GPIO40() (_0 => MTDO _2 =>
799 CLK_OUT2) ([Input] [Output])), (41, GPIO41(_0 => MTDI) (_2 => CLK_OUT1) ([Input]
800 [Output])), (42, GPIO42(_0 => MTMS) () ([Input] [Output])), (43, GPIO43() (_0 =>
801 U0TXD _2 => CLK_OUT1) ([Input] [Output])), (44, GPIO44(_0 => U0RXD) (_2 =>
802 CLK_OUT2) ([Input] [Output])), (45, GPIO45() () ([Input] [Output])), (46,
803 GPIO46() () ([Input] [Output]))));
804 };
805}
806#[macro_export]
833#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
834macro_rules! for_each_analog_function {
835 ($($pattern:tt => $code:tt;)*) => {
836 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
837 _for_each_inner!((TOUCH1, GPIO1)); _for_each_inner!((ADC1_CH0, GPIO1));
838 _for_each_inner!((TOUCH2, GPIO2)); _for_each_inner!((ADC1_CH1, GPIO2));
839 _for_each_inner!((TOUCH3, GPIO3)); _for_each_inner!((ADC1_CH2, GPIO3));
840 _for_each_inner!((TOUCH4, GPIO4)); _for_each_inner!((ADC1_CH3, GPIO4));
841 _for_each_inner!((TOUCH5, GPIO5)); _for_each_inner!((ADC1_CH4, GPIO5));
842 _for_each_inner!((TOUCH6, GPIO6)); _for_each_inner!((ADC1_CH5, GPIO6));
843 _for_each_inner!((TOUCH7, GPIO7)); _for_each_inner!((ADC1_CH6, GPIO7));
844 _for_each_inner!((TOUCH8, GPIO8)); _for_each_inner!((ADC1_CH7, GPIO8));
845 _for_each_inner!((TOUCH9, GPIO9)); _for_each_inner!((ADC1_CH8, GPIO9));
846 _for_each_inner!((TOUCH10, GPIO10)); _for_each_inner!((ADC1_CH9, GPIO10));
847 _for_each_inner!((TOUCH11, GPIO11)); _for_each_inner!((ADC2_CH0, GPIO11));
848 _for_each_inner!((TOUCH12, GPIO12)); _for_each_inner!((ADC2_CH1, GPIO12));
849 _for_each_inner!((TOUCH13, GPIO13)); _for_each_inner!((ADC2_CH2, GPIO13));
850 _for_each_inner!((TOUCH14, GPIO14)); _for_each_inner!((ADC2_CH3, GPIO14));
851 _for_each_inner!((XTAL_32K_P, GPIO15)); _for_each_inner!((ADC2_CH4, GPIO15));
852 _for_each_inner!((XTAL_32K_N, GPIO16)); _for_each_inner!((ADC2_CH5, GPIO16));
853 _for_each_inner!((DAC_1, GPIO17)); _for_each_inner!((ADC2_CH6, GPIO17));
854 _for_each_inner!((DAC_2, GPIO18)); _for_each_inner!((ADC2_CH7, GPIO18));
855 _for_each_inner!((USB_DM, GPIO19)); _for_each_inner!((ADC2_CH8, GPIO19));
856 _for_each_inner!((USB_DP, GPIO20)); _for_each_inner!((ADC2_CH9, GPIO20));
857 _for_each_inner!(((TOUCH1, TOUCHn, 1), GPIO1)); _for_each_inner!(((ADC1_CH0,
858 ADCn_CHm, 1, 0), GPIO1)); _for_each_inner!(((TOUCH2, TOUCHn, 2), GPIO2));
859 _for_each_inner!(((ADC1_CH1, ADCn_CHm, 1, 1), GPIO2)); _for_each_inner!(((TOUCH3,
860 TOUCHn, 3), GPIO3)); _for_each_inner!(((ADC1_CH2, ADCn_CHm, 1, 2), GPIO3));
861 _for_each_inner!(((TOUCH4, TOUCHn, 4), GPIO4)); _for_each_inner!(((ADC1_CH3,
862 ADCn_CHm, 1, 3), GPIO4)); _for_each_inner!(((TOUCH5, TOUCHn, 5), GPIO5));
863 _for_each_inner!(((ADC1_CH4, ADCn_CHm, 1, 4), GPIO5)); _for_each_inner!(((TOUCH6,
864 TOUCHn, 6), GPIO6)); _for_each_inner!(((ADC1_CH5, ADCn_CHm, 1, 5), GPIO6));
865 _for_each_inner!(((TOUCH7, TOUCHn, 7), GPIO7)); _for_each_inner!(((ADC1_CH6,
866 ADCn_CHm, 1, 6), GPIO7)); _for_each_inner!(((TOUCH8, TOUCHn, 8), GPIO8));
867 _for_each_inner!(((ADC1_CH7, ADCn_CHm, 1, 7), GPIO8)); _for_each_inner!(((TOUCH9,
868 TOUCHn, 9), GPIO9)); _for_each_inner!(((ADC1_CH8, ADCn_CHm, 1, 8), GPIO9));
869 _for_each_inner!(((TOUCH10, TOUCHn, 10), GPIO10)); _for_each_inner!(((ADC1_CH9,
870 ADCn_CHm, 1, 9), GPIO10)); _for_each_inner!(((TOUCH11, TOUCHn, 11), GPIO11));
871 _for_each_inner!(((ADC2_CH0, ADCn_CHm, 2, 0), GPIO11));
872 _for_each_inner!(((TOUCH12, TOUCHn, 12), GPIO12)); _for_each_inner!(((ADC2_CH1,
873 ADCn_CHm, 2, 1), GPIO12)); _for_each_inner!(((TOUCH13, TOUCHn, 13), GPIO13));
874 _for_each_inner!(((ADC2_CH2, ADCn_CHm, 2, 2), GPIO13));
875 _for_each_inner!(((TOUCH14, TOUCHn, 14), GPIO14)); _for_each_inner!(((ADC2_CH3,
876 ADCn_CHm, 2, 3), GPIO14)); _for_each_inner!(((ADC2_CH4, ADCn_CHm, 2, 4),
877 GPIO15)); _for_each_inner!(((ADC2_CH5, ADCn_CHm, 2, 5), GPIO16));
878 _for_each_inner!(((DAC_1, DAC_n, 1), GPIO17)); _for_each_inner!(((ADC2_CH6,
879 ADCn_CHm, 2, 6), GPIO17)); _for_each_inner!(((DAC_2, DAC_n, 2), GPIO18));
880 _for_each_inner!(((ADC2_CH7, ADCn_CHm, 2, 7), GPIO18));
881 _for_each_inner!(((ADC2_CH8, ADCn_CHm, 2, 8), GPIO19));
882 _for_each_inner!(((ADC2_CH9, ADCn_CHm, 2, 9), GPIO20));
883 _for_each_inner!((all(TOUCH1, GPIO1), (ADC1_CH0, GPIO1), (TOUCH2, GPIO2),
884 (ADC1_CH1, GPIO2), (TOUCH3, GPIO3), (ADC1_CH2, GPIO3), (TOUCH4, GPIO4),
885 (ADC1_CH3, GPIO4), (TOUCH5, GPIO5), (ADC1_CH4, GPIO5), (TOUCH6, GPIO6),
886 (ADC1_CH5, GPIO6), (TOUCH7, GPIO7), (ADC1_CH6, GPIO7), (TOUCH8, GPIO8),
887 (ADC1_CH7, GPIO8), (TOUCH9, GPIO9), (ADC1_CH8, GPIO9), (TOUCH10, GPIO10),
888 (ADC1_CH9, GPIO10), (TOUCH11, GPIO11), (ADC2_CH0, GPIO11), (TOUCH12, GPIO12),
889 (ADC2_CH1, GPIO12), (TOUCH13, GPIO13), (ADC2_CH2, GPIO13), (TOUCH14, GPIO14),
890 (ADC2_CH3, GPIO14), (XTAL_32K_P, GPIO15), (ADC2_CH4, GPIO15), (XTAL_32K_N,
891 GPIO16), (ADC2_CH5, GPIO16), (DAC_1, GPIO17), (ADC2_CH6, GPIO17), (DAC_2,
892 GPIO18), (ADC2_CH7, GPIO18), (USB_DM, GPIO19), (ADC2_CH8, GPIO19), (USB_DP,
893 GPIO20), (ADC2_CH9, GPIO20))); _for_each_inner!((all_expanded((TOUCH1, TOUCHn,
894 1), GPIO1), ((ADC1_CH0, ADCn_CHm, 1, 0), GPIO1), ((TOUCH2, TOUCHn, 2), GPIO2),
895 ((ADC1_CH1, ADCn_CHm, 1, 1), GPIO2), ((TOUCH3, TOUCHn, 3), GPIO3), ((ADC1_CH2,
896 ADCn_CHm, 1, 2), GPIO3), ((TOUCH4, TOUCHn, 4), GPIO4), ((ADC1_CH3, ADCn_CHm, 1,
897 3), GPIO4), ((TOUCH5, TOUCHn, 5), GPIO5), ((ADC1_CH4, ADCn_CHm, 1, 4), GPIO5),
898 ((TOUCH6, TOUCHn, 6), GPIO6), ((ADC1_CH5, ADCn_CHm, 1, 5), GPIO6), ((TOUCH7,
899 TOUCHn, 7), GPIO7), ((ADC1_CH6, ADCn_CHm, 1, 6), GPIO7), ((TOUCH8, TOUCHn, 8),
900 GPIO8), ((ADC1_CH7, ADCn_CHm, 1, 7), GPIO8), ((TOUCH9, TOUCHn, 9), GPIO9),
901 ((ADC1_CH8, ADCn_CHm, 1, 8), GPIO9), ((TOUCH10, TOUCHn, 10), GPIO10), ((ADC1_CH9,
902 ADCn_CHm, 1, 9), GPIO10), ((TOUCH11, TOUCHn, 11), GPIO11), ((ADC2_CH0, ADCn_CHm,
903 2, 0), GPIO11), ((TOUCH12, TOUCHn, 12), GPIO12), ((ADC2_CH1, ADCn_CHm, 2, 1),
904 GPIO12), ((TOUCH13, TOUCHn, 13), GPIO13), ((ADC2_CH2, ADCn_CHm, 2, 2), GPIO13),
905 ((TOUCH14, TOUCHn, 14), GPIO14), ((ADC2_CH3, ADCn_CHm, 2, 3), GPIO14),
906 ((ADC2_CH4, ADCn_CHm, 2, 4), GPIO15), ((ADC2_CH5, ADCn_CHm, 2, 5), GPIO16),
907 ((DAC_1, DAC_n, 1), GPIO17), ((ADC2_CH6, ADCn_CHm, 2, 6), GPIO17), ((DAC_2,
908 DAC_n, 2), GPIO18), ((ADC2_CH7, ADCn_CHm, 2, 7), GPIO18), ((ADC2_CH8, ADCn_CHm,
909 2, 8), GPIO19), ((ADC2_CH9, ADCn_CHm, 2, 9), GPIO20)));
910 };
911}
912#[macro_export]
939#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
940macro_rules! for_each_lp_function {
941 ($($pattern:tt => $code:tt;)*) => {
942 macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
943 _for_each_inner!((RTC_GPIO0, GPIO0)); _for_each_inner!((RTC_GPIO1, GPIO1));
944 _for_each_inner!((RTC_GPIO2, GPIO2)); _for_each_inner!((RTC_GPIO3, GPIO3));
945 _for_each_inner!((RTC_GPIO4, GPIO4)); _for_each_inner!((RTC_GPIO5, GPIO5));
946 _for_each_inner!((RTC_GPIO6, GPIO6)); _for_each_inner!((RTC_GPIO7, GPIO7));
947 _for_each_inner!((RTC_GPIO8, GPIO8)); _for_each_inner!((RTC_GPIO9, GPIO9));
948 _for_each_inner!((RTC_GPIO10, GPIO10)); _for_each_inner!((RTC_GPIO11, GPIO11));
949 _for_each_inner!((RTC_GPIO12, GPIO12)); _for_each_inner!((RTC_GPIO13, GPIO13));
950 _for_each_inner!((RTC_GPIO14, GPIO14)); _for_each_inner!((RTC_GPIO15, GPIO15));
951 _for_each_inner!((RTC_GPIO16, GPIO16)); _for_each_inner!((RTC_GPIO17, GPIO17));
952 _for_each_inner!((RTC_GPIO18, GPIO18)); _for_each_inner!((RTC_GPIO19, GPIO19));
953 _for_each_inner!((RTC_GPIO20, GPIO20)); _for_each_inner!((RTC_GPIO21, GPIO21));
954 _for_each_inner!(((RTC_GPIO0, RTC_GPIOn, 0), GPIO0));
955 _for_each_inner!(((RTC_GPIO1, RTC_GPIOn, 1), GPIO1));
956 _for_each_inner!(((RTC_GPIO2, RTC_GPIOn, 2), GPIO2));
957 _for_each_inner!(((RTC_GPIO3, RTC_GPIOn, 3), GPIO3));
958 _for_each_inner!(((RTC_GPIO4, RTC_GPIOn, 4), GPIO4));
959 _for_each_inner!(((RTC_GPIO5, RTC_GPIOn, 5), GPIO5));
960 _for_each_inner!(((RTC_GPIO6, RTC_GPIOn, 6), GPIO6));
961 _for_each_inner!(((RTC_GPIO7, RTC_GPIOn, 7), GPIO7));
962 _for_each_inner!(((RTC_GPIO8, RTC_GPIOn, 8), GPIO8));
963 _for_each_inner!(((RTC_GPIO9, RTC_GPIOn, 9), GPIO9));
964 _for_each_inner!(((RTC_GPIO10, RTC_GPIOn, 10), GPIO10));
965 _for_each_inner!(((RTC_GPIO11, RTC_GPIOn, 11), GPIO11));
966 _for_each_inner!(((RTC_GPIO12, RTC_GPIOn, 12), GPIO12));
967 _for_each_inner!(((RTC_GPIO13, RTC_GPIOn, 13), GPIO13));
968 _for_each_inner!(((RTC_GPIO14, RTC_GPIOn, 14), GPIO14));
969 _for_each_inner!(((RTC_GPIO15, RTC_GPIOn, 15), GPIO15));
970 _for_each_inner!(((RTC_GPIO16, RTC_GPIOn, 16), GPIO16));
971 _for_each_inner!(((RTC_GPIO17, RTC_GPIOn, 17), GPIO17));
972 _for_each_inner!(((RTC_GPIO18, RTC_GPIOn, 18), GPIO18));
973 _for_each_inner!(((RTC_GPIO19, RTC_GPIOn, 19), GPIO19));
974 _for_each_inner!(((RTC_GPIO20, RTC_GPIOn, 20), GPIO20));
975 _for_each_inner!(((RTC_GPIO21, RTC_GPIOn, 21), GPIO21));
976 _for_each_inner!((all(RTC_GPIO0, GPIO0), (RTC_GPIO1, GPIO1), (RTC_GPIO2, GPIO2),
977 (RTC_GPIO3, GPIO3), (RTC_GPIO4, GPIO4), (RTC_GPIO5, GPIO5), (RTC_GPIO6, GPIO6),
978 (RTC_GPIO7, GPIO7), (RTC_GPIO8, GPIO8), (RTC_GPIO9, GPIO9), (RTC_GPIO10, GPIO10),
979 (RTC_GPIO11, GPIO11), (RTC_GPIO12, GPIO12), (RTC_GPIO13, GPIO13), (RTC_GPIO14,
980 GPIO14), (RTC_GPIO15, GPIO15), (RTC_GPIO16, GPIO16), (RTC_GPIO17, GPIO17),
981 (RTC_GPIO18, GPIO18), (RTC_GPIO19, GPIO19), (RTC_GPIO20, GPIO20), (RTC_GPIO21,
982 GPIO21))); _for_each_inner!((all_expanded((RTC_GPIO0, RTC_GPIOn, 0), GPIO0),
983 ((RTC_GPIO1, RTC_GPIOn, 1), GPIO1), ((RTC_GPIO2, RTC_GPIOn, 2), GPIO2),
984 ((RTC_GPIO3, RTC_GPIOn, 3), GPIO3), ((RTC_GPIO4, RTC_GPIOn, 4), GPIO4),
985 ((RTC_GPIO5, RTC_GPIOn, 5), GPIO5), ((RTC_GPIO6, RTC_GPIOn, 6), GPIO6),
986 ((RTC_GPIO7, RTC_GPIOn, 7), GPIO7), ((RTC_GPIO8, RTC_GPIOn, 8), GPIO8),
987 ((RTC_GPIO9, RTC_GPIOn, 9), GPIO9), ((RTC_GPIO10, RTC_GPIOn, 10), GPIO10),
988 ((RTC_GPIO11, RTC_GPIOn, 11), GPIO11), ((RTC_GPIO12, RTC_GPIOn, 12), GPIO12),
989 ((RTC_GPIO13, RTC_GPIOn, 13), GPIO13), ((RTC_GPIO14, RTC_GPIOn, 14), GPIO14),
990 ((RTC_GPIO15, RTC_GPIOn, 15), GPIO15), ((RTC_GPIO16, RTC_GPIOn, 16), GPIO16),
991 ((RTC_GPIO17, RTC_GPIOn, 17), GPIO17), ((RTC_GPIO18, RTC_GPIOn, 18), GPIO18),
992 ((RTC_GPIO19, RTC_GPIOn, 19), GPIO19), ((RTC_GPIO20, RTC_GPIOn, 20), GPIO20),
993 ((RTC_GPIO21, RTC_GPIOn, 21), GPIO21)));
994 };
995}
996#[macro_export]
1000#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1001macro_rules! define_io_mux_signals {
1002 () => {
1003 #[allow(non_camel_case_types, clippy::upper_case_acronyms)]
1004 #[derive(Debug, PartialEq, Copy, Clone)]
1005 #[cfg_attr(feature = "defmt", derive(defmt::Format))]
1006 #[doc(hidden)]
1007 pub enum InputSignal {
1008 SPIQ = 0,
1009 SPID = 1,
1010 SPIHD = 2,
1011 SPIWP = 3,
1012 SPID4 = 7,
1013 SPID5 = 8,
1014 SPID6 = 9,
1015 SPID7 = 10,
1016 SPIDQS = 11,
1017 U0RXD = 14,
1018 U0CTS = 15,
1019 U0DSR = 16,
1020 U1RXD = 17,
1021 U1CTS = 18,
1022 U1DSR = 21,
1023 I2S0O_BCK = 23,
1024 I2S0O_WS = 25,
1025 I2S0I_BCK = 27,
1026 I2S0I_WS = 28,
1027 I2CEXT0_SCL = 29,
1028 I2CEXT0_SDA = 30,
1029 PCNT0_SIG_CH0 = 39,
1030 PCNT0_SIG_CH1 = 40,
1031 PCNT0_CTRL_CH0 = 41,
1032 PCNT0_CTRL_CH1 = 42,
1033 PCNT1_SIG_CH0 = 43,
1034 PCNT1_SIG_CH1 = 44,
1035 PCNT1_CTRL_CH0 = 45,
1036 PCNT1_CTRL_CH1 = 46,
1037 PCNT2_SIG_CH0 = 47,
1038 PCNT2_SIG_CH1 = 48,
1039 PCNT2_CTRL_CH0 = 49,
1040 PCNT2_CTRL_CH1 = 50,
1041 PCNT3_SIG_CH0 = 51,
1042 PCNT3_SIG_CH1 = 52,
1043 PCNT3_CTRL_CH0 = 53,
1044 PCNT3_CTRL_CH1 = 54,
1045 USB_EXTPHY_VP = 61,
1046 USB_EXTPHY_VM = 62,
1047 USB_EXTPHY_RCV = 63,
1048 USB_OTG_IDDIG = 64,
1049 USB_OTG_AVALID = 65,
1050 USB_SRP_BVALID = 66,
1051 USB_OTG_VBUSVALID = 67,
1052 USB_SRP_SESSEND = 68,
1053 SPI3_CLK = 72,
1054 SPI3_Q = 73,
1055 SPI3_D = 74,
1056 SPI3_HD = 75,
1057 SPI3_CS0 = 76,
1058 RMT_SIG_0 = 83,
1059 RMT_SIG_1 = 84,
1060 RMT_SIG_2 = 85,
1061 RMT_SIG_3 = 86,
1062 I2CEXT1_SCL = 95,
1063 I2CEXT1_SDA = 96,
1064 FSPICLK = 108,
1065 FSPIQ = 109,
1066 FSPID = 110,
1067 FSPIHD = 111,
1068 FSPIWP = 112,
1069 FSPIIO4 = 113,
1070 FSPIIO5 = 114,
1071 FSPIIO6 = 115,
1072 FSPIIO7 = 116,
1073 FSPICS0 = 117,
1074 TWAI_RX = 123,
1075 SUBSPIQ = 127,
1076 SUBSPID = 128,
1077 SUBSPIHD = 129,
1078 SUBSPIWP = 130,
1079 I2S0I_DATA_IN15 = 158,
1080 SUBSPID4 = 167,
1081 SUBSPID5 = 168,
1082 SUBSPID6 = 169,
1083 SUBSPID7 = 170,
1084 SUBSPIDQS = 171,
1085 PCMFSYNC = 203,
1086 PCMCLK = 204,
1087 PRO_ALONEGPIO_IN0 = 235,
1088 PRO_ALONEGPIO_IN1 = 236,
1089 PRO_ALONEGPIO_IN2 = 237,
1090 PRO_ALONEGPIO_IN3 = 238,
1091 PRO_ALONEGPIO_IN4 = 239,
1092 PRO_ALONEGPIO_IN5 = 240,
1093 PRO_ALONEGPIO_IN6 = 241,
1094 PRO_ALONEGPIO_IN7 = 242,
1095 MTDI,
1096 MTCK,
1097 MTMS,
1098 }
1099 #[allow(non_camel_case_types, clippy::upper_case_acronyms)]
1100 #[derive(Debug, PartialEq, Copy, Clone)]
1101 #[cfg_attr(feature = "defmt", derive(defmt::Format))]
1102 #[doc(hidden)]
1103 pub enum OutputSignal {
1104 SPIQ = 0,
1105 SPID = 1,
1106 SPIHD = 2,
1107 SPIWP = 3,
1108 SPICLK = 4,
1109 SPICS0 = 5,
1110 SPICS1 = 6,
1111 SPID4 = 7,
1112 SPID5 = 8,
1113 SPID6 = 9,
1114 SPID7 = 10,
1115 SPIDQS = 11,
1116 U0TXD = 14,
1117 U0RTS = 15,
1118 U0DTR = 16,
1119 U1TXD = 17,
1120 U1RTS = 18,
1121 U1DTR = 21,
1122 I2S0O_BCK = 23,
1123 I2S0O_WS = 25,
1124 I2S0I_BCK = 27,
1125 I2S0I_WS = 28,
1126 I2CEXT0_SCL = 29,
1127 I2CEXT0_SDA = 30,
1128 SDIO_TOHOST_INT = 31,
1129 USB_EXTPHY_OEN = 61,
1130 USB_EXTPHY_VPO = 63,
1131 USB_EXTPHY_VMO = 64,
1132 SPI3_CLK = 72,
1133 SPI3_Q = 73,
1134 SPI3_D = 74,
1135 SPI3_HD = 75,
1136 SPI3_CS0 = 76,
1137 SPI3_CS1 = 77,
1138 SPI3_CS2 = 78,
1139 LEDC_LS_SIG0 = 79,
1140 LEDC_LS_SIG1 = 80,
1141 LEDC_LS_SIG2 = 81,
1142 LEDC_LS_SIG3 = 82,
1143 LEDC_LS_SIG4 = 83,
1144 LEDC_LS_SIG5 = 84,
1145 LEDC_LS_SIG6 = 85,
1146 LEDC_LS_SIG7 = 86,
1147 RMT_SIG_0 = 87,
1148 RMT_SIG_1 = 88,
1149 RMT_SIG_2 = 89,
1150 RMT_SIG_3 = 90,
1151 I2CEXT1_SCL = 95,
1152 I2CEXT1_SDA = 96,
1153 GPIO_SD0 = 100,
1154 GPIO_SD1 = 101,
1155 GPIO_SD2 = 102,
1156 GPIO_SD3 = 103,
1157 GPIO_SD4 = 104,
1158 GPIO_SD5 = 105,
1159 GPIO_SD6 = 106,
1160 GPIO_SD7 = 107,
1161 FSPICLK = 108,
1162 FSPIQ = 109,
1163 FSPID = 110,
1164 FSPIHD = 111,
1165 FSPIWP = 112,
1166 FSPIIO4 = 113,
1167 FSPIIO5 = 114,
1168 FSPIIO6 = 115,
1169 FSPIIO7 = 116,
1170 FSPICS0 = 117,
1171 FSPICS1 = 118,
1172 FSPICS2 = 119,
1173 FSPICS3 = 120,
1174 FSPICS4 = 121,
1175 FSPICS5 = 122,
1176 TWAI_TX = 123,
1177 SUBSPICLK = 126,
1178 SUBSPIQ = 127,
1179 SUBSPID = 128,
1180 SUBSPIHD = 129,
1181 SUBSPIWP = 130,
1182 SUBSPICS0 = 131,
1183 SUBSPICS1 = 132,
1184 FSPIDQS = 133,
1185 FSPI_HSYNC = 134,
1186 FSPI_VSYNC = 135,
1187 FSPI_DE = 136,
1188 FSPICD = 137,
1189 SPI3_CD = 139,
1190 SPI3_DQS = 140,
1191 I2S0O_DATA_OUT23 = 166,
1192 SUBSPID4 = 167,
1193 SUBSPID5 = 168,
1194 SUBSPID6 = 169,
1195 SUBSPID7 = 170,
1196 SUBSPIDQS = 171,
1197 PCMFSYNC = 209,
1198 PCMCLK = 210,
1199 PRO_ALONEGPIO_OUT0 = 235,
1200 PRO_ALONEGPIO_OUT1 = 236,
1201 PRO_ALONEGPIO_OUT2 = 237,
1202 PRO_ALONEGPIO_OUT3 = 238,
1203 PRO_ALONEGPIO_OUT4 = 239,
1204 PRO_ALONEGPIO_OUT5 = 240,
1205 PRO_ALONEGPIO_OUT6 = 241,
1206 PRO_ALONEGPIO_OUT7 = 242,
1207 CLK_I2S = 251,
1208 GPIO = 256,
1209 CLK_OUT1,
1210 CLK_OUT2,
1211 CLK_OUT3,
1212 MTDO,
1213 }
1214 };
1215}
1216#[macro_export]
1229#[expect(clippy::crate_in_macro_def)]
1230#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1231macro_rules! define_io_mux_reg {
1232 () => {
1233 pub(crate) fn io_mux_reg(gpio_num: u8) -> &'static crate::pac::io_mux::GPIO {
1234 crate::peripherals::IO_MUX::regs().gpio(gpio_num as usize)
1235 }
1236 };
1237}