waveshare_rp2040_zero/
lib.rs

1#![no_std]
2
3pub extern crate rp2040_hal as hal;
4
5#[cfg(feature = "rt")]
6extern crate cortex_m_rt;
7#[cfg(feature = "rt")]
8pub use hal::entry;
9
10/// The linker will place this boot block at the start of our program image. We
11/// need this to help the ROM bootloader get our code up and running.
12#[cfg(feature = "boot2")]
13#[link_section = ".boot2"]
14#[no_mangle]
15#[used]
16pub static BOOT2_FIRMWARE: [u8; 256] = rp2040_boot2::BOOT_LOADER_W25Q080;
17
18pub use hal::pac;
19
20hal::bsp_pins!(
21    /// GPIO 0 supports following functions:
22    ///
23    /// | Function     | Alias with applied function |
24    /// |--------------|-----------------------------|
25    /// | `SPI0 RX`    | [crate::Gp0Spi0Rx]          |
26    /// | `UART0 TX`   | [crate::Gp0Uart0Tx]         |
27    /// | `I2C0 SDA`   | [crate::Gp0I2C0Sda]         |
28    /// | `PWM0 A`     | [crate::Gp0Pwm0A]           |
29    /// | `PIO0`       | [crate::Gp0Pio0]            |
30    /// | `PIO1`       | [crate::Gp0Pio1]            |
31    Gpio0 {
32        name: gp0,
33        aliases: {
34            /// UART Function alias for pin [crate::Pins::gpio0].
35            FunctionUart, PullNone: Gp0Uart0Tx,
36            /// SPI Function alias for pin [crate::Pins::gpio0].
37            FunctionSpi, PullNone: Gp0Spi0Rx,
38            /// I2C Function alias for pin [crate::Pins::gpio0].
39            FunctionI2C, PullUp: Gp0I2C0Sda,
40            /// PWM Function alias for pin [crate::Pins::gpio0].
41            FunctionPwm, PullNone: Gp0Pwm0A,
42            /// PIO0 Function alias for pin [crate::Pins::gpio0].
43            FunctionPio0, PullNone: Gp0Pio0,
44            /// PIO1 Function alias for pin [crate::Pins::gpio0].
45            FunctionPio1, PullNone: Gp0Pio1
46        }
47    },
48
49    /// GPIO 1 supports following functions:
50    ///
51    /// | Function     | Alias with applied function |
52    /// |--------------|-----------------------------|
53    /// | `SPI0 CSn`   | [crate::Gp1Spi0Csn]         |
54    /// | `UART0 RX`   | [crate::Gp1Uart0Rx]         |
55    /// | `I2C0 SCL`   | [crate::Gp1I2C0Scl]         |
56    /// | `PWM0 B`     | [crate::Gp1Pwm0B]           |
57    /// | `PIO0`       | [crate::Gp1Pio0]            |
58    /// | `PIO1`       | [crate::Gp1Pio1]            |
59    Gpio1 {
60        name: gp1,
61        aliases: {
62            /// UART Function alias for pin [crate::Pins::gpio1].
63            FunctionUart, PullNone: Gp1Uart0Rx,
64            /// SPI Function alias for pin [crate::Pins::gpio1].
65            FunctionSpi, PullNone: Gp1Spi0Csn,
66            /// I2C Function alias for pin [crate::Pins::gpio1].
67            FunctionI2C, PullUp: Gp1I2C0Scl,
68            /// PWM Function alias for pin [crate::Pins::gpio1].
69            FunctionPwm, PullNone: Gp1Pwm0B,
70            /// PIO0 Function alias for pin [crate::Pins::gpio1].
71            FunctionPio0, PullNone: Gp1Pio0,
72            /// PIO1 Function alias for pin [crate::Pins::gpio1].
73            FunctionPio1, PullNone: Gp1Pio1
74        }
75    },
76
77    /// GPIO 2 supports following functions:
78    ///
79    /// | Function     | Alias with applied function |
80    /// |--------------|-----------------------------|
81    /// | `SPI0 SCK`   | [crate::Gp2Spi0Sck]         |
82    /// | `UART0 CTS`  | [crate::Gp2Uart0Cts]        |
83    /// | `I2C1 SDA`   | [crate::Gp2I2C1Sda]         |
84    /// | `PWM1 A`     | [crate::Gp2Pwm1A]           |
85    /// | `PIO0`       | [crate::Gp2Pio0]            |
86    /// | `PIO1`       | [crate::Gp2Pio1]            |
87    Gpio2 {
88        name: gp2,
89        aliases: {
90            /// UART Function alias for pin [crate::Pins::gpio2].
91            FunctionUart, PullNone: Gp2Uart0Cts,
92            /// SPI Function alias for pin [crate::Pins::gpio2].
93            FunctionSpi, PullNone: Gp2Spi0Sck,
94            /// I2C Function alias for pin [crate::Pins::gpio2].
95            FunctionI2C, PullUp: Gp2I2C1Sda,
96            /// PWM Function alias for pin [crate::Pins::gpio2].
97            FunctionPwm, PullNone: Gp2Pwm1A,
98            /// PIO0 Function alias for pin [crate::Pins::gpio2].
99            FunctionPio0, PullNone: Gp2Pio0,
100            /// PIO1 Function alias for pin [crate::Pins::gpio2].
101            FunctionPio1, PullNone: Gp2Pio1
102        }
103    },
104
105    /// GPIO 3 supports following functions:
106    ///
107    /// | Function     | Alias with applied function |
108    /// |--------------|-----------------------------|
109    /// | `SPI0 TX`    | [crate::Gp3Spi0Tx]          |
110    /// | `UART0 RTS`  | [crate::Gp3Uart0Rts]        |
111    /// | `I2C1 SCL`   | [crate::Gp3I2C1Scl]         |
112    /// | `PWM1 B`     | [crate::Gp3Pwm1B]           |
113    /// | `PIO0`       | [crate::Gp3Pio0]            |
114    /// | `PIO1`       | [crate::Gp3Pio1]            |
115    Gpio3 {
116        name: gp3,
117        aliases: {
118            /// UART Function alias for pin [crate::Pins::gpio3].
119            FunctionUart, PullNone: Gp3Uart0Rts,
120            /// SPI Function alias for pin [crate::Pins::gpio3].
121            FunctionSpi, PullNone: Gp3Spi0Tx,
122            /// I2C Function alias for pin [crate::Pins::gpio3].
123            FunctionI2C, PullUp: Gp3I2C1Scl,
124            /// PWM Function alias for pin [crate::Pins::gpio3].
125            FunctionPwm, PullNone: Gp3Pwm1B,
126            /// PIO0 Function alias for pin [crate::Pins::gpio3].
127            FunctionPio0, PullNone: Gp3Pio0,
128            /// PIO1 Function alias for pin [crate::Pins::gpio3].
129            FunctionPio1, PullNone: Gp3Pio1
130        }
131    },
132
133    /// GPIO 4 supports following functions:
134    ///
135    /// | Function     | Alias with applied function |
136    /// |--------------|-----------------------------|
137    /// | `SPI0 RX`    | [crate::Gp4Spi0Rx]          |
138    /// | `UART1 TX`   | [crate::Gp4Uart1Tx]         |
139    /// | `I2C0 SDA`   | [crate::Gp4I2C0Sda]         |
140    /// | `PWM2 A`     | [crate::Gp4Pwm2A]           |
141    /// | `PIO0`       | [crate::Gp4Pio0]            |
142    /// | `PIO1`       | [crate::Gp4Pio1]            |
143    Gpio4 {
144        name: gp4,
145        aliases: {
146            /// UART Function alias for pin [crate::Pins::gpio4].
147            FunctionUart, PullNone: Gp4Uart1Tx,
148            /// SPI Function alias for pin [crate::Pins::gpio4].
149            FunctionSpi, PullNone: Gp4Spi0Rx,
150            /// I2C Function alias for pin [crate::Pins::gpio4].
151            FunctionI2C, PullUp: Gp4I2C0Sda,
152            /// PWM Function alias for pin [crate::Pins::gpio4].
153            FunctionPwm, PullNone: Gp4Pwm2A,
154            /// PIO0 Function alias for pin [crate::Pins::gpio4].
155            FunctionPio0, PullNone: Gp4Pio0,
156            /// PIO1 Function alias for pin [crate::Pins::gpio4].
157            FunctionPio1, PullNone: Gp4Pio1
158        }
159    },
160
161    /// GPIO 5 supports following functions:
162    ///
163    /// | Function     | Alias with applied function |
164    /// |--------------|-----------------------------|
165    /// | `SPI0 CSn`   | [crate::Gp5Spi0Csn]         |
166    /// | `UART1 RX`   | [crate::Gp5Uart1Rx]         |
167    /// | `I2C0 SCL`   | [crate::Gp5I2C0Scl]         |
168    /// | `PWM2 B`     | [crate::Gp5Pwm2B]           |
169    /// | `PIO0`       | [crate::Gp5Pio0]            |
170    /// | `PIO1`       | [crate::Gp5Pio1]            |
171    Gpio5 {
172        name: gp5,
173        aliases: {
174            /// UART Function alias for pin [crate::Pins::gpio5].
175            FunctionUart, PullNone: Gp5Uart1Rx,
176            /// SPI Function alias for pin [crate::Pins::gpio5].
177            FunctionSpi, PullNone: Gp5Spi0Csn,
178            /// I2C Function alias for pin [crate::Pins::gpio5].
179            FunctionI2C, PullUp: Gp5I2C0Scl,
180            /// PWM Function alias for pin [crate::Pins::gpio5].
181            FunctionPwm, PullNone: Gp5Pwm2B,
182            /// PIO0 Function alias for pin [crate::Pins::gpio5].
183            FunctionPio0, PullNone: Gp5Pio0,
184            /// PIO1 Function alias for pin [crate::Pins::gpio5].
185            FunctionPio1, PullNone: Gp5Pio1
186        }
187    },
188
189    /// GPIO 6 supports following functions:
190    ///
191    /// | Function     | Alias with applied function |
192    /// |--------------|-----------------------------|
193    /// | `SPI0 SCK`   | [crate::Gp6Spi0Sck]         |
194    /// | `UART1 CTS`  | [crate::Gp6Uart1Cts]        |
195    /// | `I2C1 SDA`   | [crate::Gp6I2C1Sda]         |
196    /// | `PWM3 A`     | [crate::Gp6Pwm3A]           |
197    /// | `PIO0`       | [crate::Gp6Pio0]            |
198    /// | `PIO1`       | [crate::Gp6Pio1]            |
199    Gpio6 {
200        name: gp6,
201        aliases: {
202            /// UART Function alias for pin [crate::Pins::gpio6].
203            FunctionUart, PullNone: Gp6Uart1Cts,
204            /// SPI Function alias for pin [crate::Pins::gpio6].
205            FunctionSpi, PullNone: Gp6Spi0Sck,
206            /// I2C Function alias for pin [crate::Pins::gpio6].
207            FunctionI2C, PullUp: Gp6I2C1Sda,
208            /// PWM Function alias for pin [crate::Pins::gpio6].
209            FunctionPwm, PullNone: Gp6Pwm3A,
210            /// PIO0 Function alias for pin [crate::Pins::gpio6].
211            FunctionPio0, PullNone: Gp6Pio0,
212            /// PIO1 Function alias for pin [crate::Pins::gpio6].
213            FunctionPio1, PullNone: Gp6Pio1
214        }
215    },
216
217    /// GPIO 7 supports following functions:
218    ///
219    /// | Function     | Alias with applied function |
220    /// |--------------|-----------------------------|
221    /// | `SPI0 TX`    | [crate::Gp7Spi0Tx]          |
222    /// | `UART1 RTS`  | [crate::Gp7Uart1Rts]        |
223    /// | `I2C1 SCL`   | [crate::Gp7I2C1Scl]         |
224    /// | `PWM3 B`     | [crate::Gp7Pwm3B]           |
225    /// | `PIO0`       | [crate::Gp7Pio0]            |
226    /// | `PIO1`       | [crate::Gp7Pio1]            |
227    Gpio7 {
228        name: gp7,
229        aliases: {
230            /// UART Function alias for pin [crate::Pins::gpio7].
231            FunctionUart, PullNone: Gp7Uart1Rts,
232            /// SPI Function alias for pin [crate::Pins::gpio7].
233            FunctionSpi, PullNone: Gp7Spi0Tx,
234            /// I2C Function alias for pin [crate::Pins::gpio7].
235            FunctionI2C, PullUp: Gp7I2C1Scl,
236            /// PWM Function alias for pin [crate::Pins::gpio7].
237            FunctionPwm, PullNone: Gp7Pwm3B,
238            /// PIO0 Function alias for pin [crate::Pins::gpio7].
239            FunctionPio0, PullNone: Gp7Pio0,
240            /// PIO1 Function alias for pin [crate::Pins::gpio7].
241            FunctionPio1, PullNone: Gp7Pio1
242        }
243    },
244
245    /// GPIO 8 supports following functions:
246    ///
247    /// | Function     | Alias with applied function |
248    /// |--------------|-----------------------------|
249    /// | `SPI1 RX`    | [crate::Gp8Spi1Rx]          |
250    /// | `UART1 TX`   | [crate::Gp8Uart1Tx]         |
251    /// | `I2C0 SDA`   | [crate::Gp8I2C0Sda]         |
252    /// | `PWM4 A`     | [crate::Gp8Pwm4A]           |
253    /// | `PIO0`       | [crate::Gp8Pio0]            |
254    /// | `PIO1`       | [crate::Gp8Pio1]            |
255    Gpio8 {
256        name: gp8,
257        aliases: {
258            /// UART Function alias for pin [crate::Pins::gpio8].
259            FunctionUart, PullNone: Gp8Uart1Tx,
260            /// SPI Function alias for pin [crate::Pins::gpio8].
261            FunctionSpi, PullNone: Gp8Spi1Rx,
262            /// I2C Function alias for pin [crate::Pins::gpio8].
263            FunctionI2C, PullUp: Gp8I2C0Sda,
264            /// PWM Function alias for pin [crate::Pins::gpio8].
265            FunctionPwm, PullNone: Gp8Pwm4A,
266            /// PIO0 Function alias for pin [crate::Pins::gpio8].
267            FunctionPio0, PullNone: Gp8Pio0,
268            /// PIO1 Function alias for pin [crate::Pins::gpio8].
269            FunctionPio1, PullNone: Gp8Pio1
270        }
271    },
272
273    /// GPIO 9 supports following functions:
274    ///
275    /// | Function     | Alias with applied function |
276    /// |--------------|-----------------------------|
277    /// | `SPI1 CSn`   | [crate::Gp9Spi1Csn]         |
278    /// | `UART1 RX`   | [crate::Gp9Uart1Rx]         |
279    /// | `I2C0 SCL`   | [crate::Gp9I2C0Scl]         |
280    /// | `PWM4 B`     | [crate::Gp9Pwm4B]           |
281    /// | `PIO0`       | [crate::Gp9Pio0]            |
282    /// | `PIO1`       | [crate::Gp9Pio1]            |
283    Gpio9 {
284        name: gp9,
285        aliases: {
286            /// UART Function alias for pin [crate::Pins::gpio9].
287            FunctionUart, PullNone: Gp9Uart1Rx,
288            /// SPI Function alias for pin [crate::Pins::gpio9].
289            FunctionSpi, PullNone: Gp9Spi1Csn,
290            /// I2C Function alias for pin [crate::Pins::gpio9].
291            FunctionI2C, PullUp: Gp9I2C0Scl,
292            /// PWM Function alias for pin [crate::Pins::gpio9].
293            FunctionPwm, PullNone: Gp9Pwm4B,
294            /// PIO0 Function alias for pin [crate::Pins::gpio9].
295            FunctionPio0, PullNone: Gp9Pio0,
296            /// PIO1 Function alias for pin [crate::Pins::gpio9].
297            FunctionPio1, PullNone: Gp9Pio1
298        }
299    },
300
301    /// GPIO 10 supports following functions:
302    ///
303    /// | Function     | Alias with applied function |
304    /// |--------------|-----------------------------|
305    /// | `SPI1 SCK`   | [crate::Gp10Spi1Sck]        |
306    /// | `UART1 CTS`  | [crate::Gp10Uart1Cts]       |
307    /// | `I2C1 SDA`   | [crate::Gp10I2C1Sda]        |
308    /// | `PWM5 A`     | [crate::Gp10Pwm5A]          |
309    /// | `PIO0`       | [crate::Gp10Pio0]           |
310    /// | `PIO1`       | [crate::Gp10Pio1]           |
311    Gpio10 {
312        name: gp10,
313        aliases: {
314            /// UART Function alias for pin [crate::Pins::gpio10].
315            FunctionUart, PullNone: Gp10Uart1Cts,
316            /// SPI Function alias for pin [crate::Pins::gpio10].
317            FunctionSpi, PullNone: Gp10Spi1Sck,
318            /// I2C Function alias for pin [crate::Pins::gpio10].
319            FunctionI2C, PullUp: Gp10I2C1Sda,
320            /// PWM Function alias for pin [crate::Pins::gpio10].
321            FunctionPwm, PullNone: Gp10Pwm5A,
322            /// PIO0 Function alias for pin [crate::Pins::gpio10].
323            FunctionPio0, PullNone: Gp10Pio0,
324            /// PIO1 Function alias for pin [crate::Pins::gpio10].
325            FunctionPio1, PullNone: Gp10Pio1
326        }
327    },
328
329    /// GPIO 11 supports following functions:
330    ///
331    /// | Function     | Alias with applied function |
332    /// |--------------|-----------------------------|
333    /// | `SPI1 TX`    | [crate::Gp11Spi1Tx]         |
334    /// | `UART1 RTS`  | [crate::Gp11Uart1Rts]       |
335    /// | `I2C1 SCL`   | [crate::Gp11I2C1Scl]        |
336    /// | `PWM5 B`     | [crate::Gp11Pwm5B]          |
337    /// | `PIO0`       | [crate::Gp11Pio0]           |
338    /// | `PIO1`       | [crate::Gp11Pio1]           |
339    Gpio11 {
340        name: gp11,
341        aliases: {
342            /// UART Function alias for pin [crate::Pins::gpio11].
343            FunctionUart, PullNone: Gp11Uart1Rts,
344            /// SPI Function alias for pin [crate::Pins::gpio11].
345            FunctionSpi, PullNone: Gp11Spi1Tx,
346            /// I2C Function alias for pin [crate::Pins::gpio11].
347            FunctionI2C, PullUp: Gp11I2C1Scl,
348            /// PWM Function alias for pin [crate::Pins::gpio11].
349            FunctionPwm, PullNone: Gp11Pwm5B,
350            /// PIO0 Function alias for pin [crate::Pins::gpio11].
351            FunctionPio0, PullNone: Gp11Pio0,
352            /// PIO1 Function alias for pin [crate::Pins::gpio11].
353            FunctionPio1, PullNone: Gp11Pio1
354        }
355    },
356
357    /// GPIO 12 supports following functions:
358    ///
359    /// | Function     | Alias with applied function |
360    /// |--------------|-----------------------------|
361    /// | `SPI1 RX`    | [crate::Gp12Spi1Rx]         |
362    /// | `UART0 TX`   | [crate::Gp12Uart0Tx]        |
363    /// | `I2C0 SDA`   | [crate::Gp12I2C0Sda]        |
364    /// | `PWM6 A`     | [crate::Gp12Pwm6A]          |
365    /// | `PIO0`       | [crate::Gp12Pio0]           |
366    /// | `PIO1`       | [crate::Gp12Pio1]           |
367    Gpio12 {
368        name: gp12,
369        aliases: {
370            /// UART Function alias for pin [crate::Pins::gpio12].
371            FunctionUart, PullNone: Gp12Uart0Tx,
372            /// SPI Function alias for pin [crate::Pins::gpio12].
373            FunctionSpi, PullNone: Gp12Spi1Rx,
374            /// I2C Function alias for pin [crate::Pins::gpio12].
375            FunctionI2C, PullUp: Gp12I2C0Sda,
376            /// PWM Function alias for pin [crate::Pins::gpio12].
377            FunctionPwm, PullNone: Gp12Pwm6A,
378            /// PIO0 Function alias for pin [crate::Pins::gpio12].
379            FunctionPio0, PullNone: Gp12Pio0,
380            /// PIO1 Function alias for pin [crate::Pins::gpio12].
381            FunctionPio1, PullNone: Gp12Pio1
382        }
383    },
384
385    /// GPIO 13 supports following functions:
386    ///
387    /// | Function     | Alias with applied function |
388    /// |--------------|-----------------------------|
389    /// | `SPI1 CSn`   | [crate::Gp13Spi1Csn]        |
390    /// | `UART0 RX`   | [crate::Gp13Uart0Rx]        |
391    /// | `I2C0 SCL`   | [crate::Gp13I2C0Scl]        |
392    /// | `PWM6 B`     | [crate::Gp13Pwm6B]          |
393    /// | `PIO0`       | [crate::Gp13Pio0]           |
394    /// | `PIO1`       | [crate::Gp13Pio1]           |
395    Gpio13 {
396        name: gp13,
397        aliases: {
398            /// UART Function alias for pin [crate::Pins::gpio13].
399            FunctionUart, PullNone: Gp13Uart0Rx,
400            /// SPI Function alias for pin [crate::Pins::gpio13].
401            FunctionSpi, PullNone: Gp13Spi1Csn,
402            /// I2C Function alias for pin [crate::Pins::gpio13].
403            FunctionI2C, PullUp: Gp13I2C0Scl,
404            /// PWM Function alias for pin [crate::Pins::gpio13].
405            FunctionPwm, PullNone: Gp13Pwm6B,
406            /// PIO0 Function alias for pin [crate::Pins::gpio13].
407            FunctionPio0, PullNone: Gp13Pio0,
408            /// PIO1 Function alias for pin [crate::Pins::gpio13].
409            FunctionPio1, PullNone: Gp13Pio1
410        }
411    },
412
413    /// GPIO 14 supports following functions:
414    ///
415    /// | Function     | Alias with applied function |
416    /// |--------------|-----------------------------|
417    /// | `SPI1 SCK`   | [crate::Gp14Spi1Sck]        |
418    /// | `UART0 CTS`  | [crate::Gp14Uart0Cts]       |
419    /// | `I2C1 SDA`   | [crate::Gp14I2C1Sda]        |
420    /// | `PWM7 A`     | [crate::Gp14Pwm7A]          |
421    /// | `PIO0`       | [crate::Gp14Pio0]           |
422    /// | `PIO1`       | [crate::Gp14Pio1]           |
423    Gpio14 {
424        name: gp14,
425        aliases: {
426            /// UART Function alias for pin [crate::Pins::gpio14].
427            FunctionUart, PullNone: Gp14Uart0Cts,
428            /// SPI Function alias for pin [crate::Pins::gpio14].
429            FunctionSpi, PullNone: Gp14Spi1Sck,
430            /// I2C Function alias for pin [crate::Pins::gpio14].
431            FunctionI2C, PullUp: Gp14I2C1Sda,
432            /// PWM Function alias for pin [crate::Pins::gpio14].
433            FunctionPwm, PullNone: Gp14Pwm7A,
434            /// PIO0 Function alias for pin [crate::Pins::gpio14].
435            FunctionPio0, PullNone: Gp14Pio0,
436            /// PIO1 Function alias for pin [crate::Pins::gpio14].
437            FunctionPio1, PullNone: Gp14Pio1
438        }
439    },
440
441    /// GPIO 15 supports following functions:
442    ///
443    /// | Function     | Alias with applied function |
444    /// |--------------|-----------------------------|
445    /// | `SPI1 TX`    | [crate::Gp15Spi1Tx]         |
446    /// | `UART0 RTS`  | [crate::Gp15Uart0Rts]       |
447    /// | `I2C1 SCL`   | [crate::Gp15I2C1Scl]        |
448    /// | `PWM7 B`     | [crate::Gp15Pwm7B]          |
449    /// | `PIO0`       | [crate::Gp15Pio0]           |
450    /// | `PIO1`       | [crate::Gp15Pio1]           |
451    Gpio15 {
452        name: gp15,
453        aliases: {
454            /// UART Function alias for pin [crate::Pins::gpio15].
455            FunctionUart, PullNone: Gp15Uart0Rts,
456            /// SPI Function alias for pin [crate::Pins::gpio15].
457            FunctionSpi, PullNone: Gp15Spi1Tx,
458            /// I2C Function alias for pin [crate::Pins::gpio15].
459            FunctionI2C, PullUp: Gp15I2C1Scl,
460            /// PWM Function alias for pin [crate::Pins::gpio15].
461            FunctionPwm, PullNone: Gp15Pwm7B,
462            /// PIO0 Function alias for pin [crate::Pins::gpio15].
463            FunctionPio0, PullNone: Gp15Pio0,
464            /// PIO1 Function alias for pin [crate::Pins::gpio15].
465            FunctionPio1, PullNone: Gp15Pio1
466        }
467    },
468
469    /// GPIO 16 is connected internally to a single Neopixel RGB LED
470    Gpio16 { name: neopixel },
471
472    /// GPIO 17 supports following functions:
473    ///
474    /// | Function     | Alias with applied function |
475    /// |--------------|-----------------------------|
476    /// | `SPI0 CSn`   | [crate::Gp17Spi0Csn]        |
477    /// | `UART0 RX`   | [crate::Gp17Uart0Rx]        |
478    /// | `I2C0 SCL`   | [crate::Gp17I2C0Scl]        |
479    /// | `PWM0 B`     | [crate::Gp17Pwm0B]          |
480    /// | `PIO0`       | [crate::Gp17Pio0]           |
481    /// | `PIO1`       | [crate::Gp17Pio1]           |
482    Gpio17 {
483        name: gpio17,
484        aliases: {
485            /// UART Function alias for pin [crate::Pins::gpio17].
486            FunctionUart, PullNone: Gp17Uart0Rx,
487            /// SPI Function alias for pin [crate::Pins::gpio17].
488            FunctionSpi, PullNone: Gp17Spi0Csn,
489            /// I2C Function alias for pin [crate::Pins::gpio17].
490            FunctionI2C, PullUp: Gp17I2C0Scl,
491            /// PWM Function alias for pin [crate::Pins::gpio17].
492            FunctionPwm, PullNone: Gp17Pwm0B,
493            /// PIO0 Function alias for pin [crate::Pins::gpio17].
494            FunctionPio0, PullNone: Gp17Pio0,
495            /// PIO1 Function alias for pin [crate::Pins::gpio17].
496            FunctionPio1, PullNone: Gp17Pio1
497        }
498    },
499
500    /// GPIO 18 supports following functions:
501    ///
502    /// | Function     | Alias with applied function |
503    /// |--------------|-----------------------------|
504    /// | `SPI0 SCK`   | [crate::Gp18Spi0Sck]        |
505    /// | `UART0 CTS`  | [crate::Gp18Uart0Cts]       |
506    /// | `I2C1 SDA`   | [crate::Gp18I2C1Sda]        |
507    /// | `PWM1 A`     | [crate::Gp18Pwm1A]          |
508    /// | `PIO0`       | [crate::Gp18Pio0]           |
509    /// | `PIO1`       | [crate::Gp18Pio1]           |
510    Gpio18 {
511        name: gpio18,
512        aliases: {
513            /// UART Function alias for pin [crate::Pins::gpio18].
514            FunctionUart, PullNone: Gp18Uart0Cts,
515            /// SPI Function alias for pin [crate::Pins::gpio18].
516            FunctionSpi, PullNone: Gp18Spi0Sck,
517            /// I2C Function alias for pin [crate::Pins::gpio18].
518            FunctionI2C, PullUp: Gp18I2C1Sda,
519            /// PWM Function alias for pin [crate::Pins::gpio18].
520            FunctionPwm, PullNone: Gp18Pwm1A,
521            /// PIO0 Function alias for pin [crate::Pins::gpio18].
522            FunctionPio0, PullNone: Gp18Pio0,
523            /// PIO1 Function alias for pin [crate::Pins::gpio18].
524            FunctionPio1, PullNone: Gp18Pio1
525        }
526    },
527
528    /// GPIO 19 supports following functions:
529    ///
530    /// | Function     | Alias with applied function |
531    /// |--------------|-----------------------------|
532    /// | `SPI0 TX`    | [crate::Gp19Spi0Tx]         |
533    /// | `UART0 RTS`  | [crate::Gp19Uart0Rts]       |
534    /// | `I2C1 SCL`   | [crate::Gp19I2C1Scl]        |
535    /// | `PWM1 B`     | [crate::Gp19Pwm1B]          |
536    /// | `PIO0`       | [crate::Gp19Pio0]           |
537    /// | `PIO1`       | [crate::Gp19Pio1]           |
538    Gpio19 {
539        name: gpio19,
540        aliases: {
541            /// UART Function alias for pin [crate::Pins::gpio19].
542            FunctionUart, PullNone: Gp19Uart0Rts,
543            /// SPI Function alias for pin [crate::Pins::gpio19].
544            FunctionSpi, PullNone: Gp19Spi0Tx,
545            /// I2C Function alias for pin [crate::Pins::gpio19].
546            FunctionI2C, PullUp: Gp19I2C1Scl,
547            /// PWM Function alias for pin [crate::Pins::gpio19].
548            FunctionPwm, PullNone: Gp19Pwm1B,
549            /// PIO0 Function alias for pin [crate::Pins::gpio19].
550            FunctionPio0, PullNone: Gp19Pio0,
551            /// PIO1 Function alias for pin [crate::Pins::gpio19].
552            FunctionPio1, PullNone: Gp19Pio1
553        }
554    },
555
556    /// GPIO 20 supports following functions:
557    ///
558    /// | Function     | Alias with applied function |
559    /// |--------------|-----------------------------|
560    /// | `SPI0 RX`    | [crate::Gp20Spi0Rx]         |
561    /// | `UART1 TX`   | [crate::Gp20Uart1Tx]        |
562    /// | `I2C0 SDA`   | [crate::Gp20I2C0Sda]        |
563    /// | `PWM2 A`     | [crate::Gp20Pwm2A]          |
564    /// | `PIO0`       | [crate::Gp20Pio0]           |
565    /// | `PIO1`       | [crate::Gp20Pio1]           |
566    Gpio20 {
567        name: gpio20,
568        aliases: {
569            /// UART Function alias for pin [crate::Pins::gpio20].
570            FunctionUart, PullNone: Gp20Uart1Tx,
571            /// SPI Function alias for pin [crate::Pins::gpio20].
572            FunctionSpi, PullNone: Gp20Spi0Rx,
573            /// I2C Function alias for pin [crate::Pins::gpio20].
574            FunctionI2C, PullUp: Gp20I2C0Sda,
575            /// PWM Function alias for pin [crate::Pins::gpio20].
576            FunctionPwm, PullNone: Gp20Pwm2A,
577            /// PIO0 Function alias for pin [crate::Pins::gpio20].
578            FunctionPio0, PullNone: Gp20Pio0,
579            /// PIO1 Function alias for pin [crate::Pins::gpio20].
580            FunctionPio1, PullNone: Gp20Pio1
581        }
582    },
583
584    /// GPIO 21 supports following functions:
585    ///
586    /// | Function     | Alias with applied function |
587    /// |--------------|-----------------------------|
588    /// | `SPI0 CSn`   | [crate::Gp21Spi0Csn]        |
589    /// | `UART1 RX`   | [crate::Gp21Uart1Rx]        |
590    /// | `I2C0 SCL`   | [crate::Gp21I2C0Scl]        |
591    /// | `PWM2 B`     | [crate::Gp21Pwm2B]          |
592    /// | `PIO0`       | [crate::Gp21Pio0]           |
593    /// | `PIO1`       | [crate::Gp21Pio1]           |
594    Gpio21 {
595        name: gpio21,
596        aliases: {
597            /// UART Function alias for pin [crate::Pins::gpio21].
598            FunctionUart, PullNone: Gp21Uart1Rx,
599            /// SPI Function alias for pin [crate::Pins::gpio21].
600            FunctionSpi, PullNone: Gp21Spi0Csn,
601            /// I2C Function alias for pin [crate::Pins::gpio21].
602            FunctionI2C, PullUp: Gp21I2C0Scl,
603            /// PWM Function alias for pin [crate::Pins::gpio21].
604            FunctionPwm, PullNone: Gp21Pwm2B,
605            /// PIO0 Function alias for pin [crate::Pins::gpio21].
606            FunctionPio0, PullNone: Gp21Pio0,
607            /// PIO1 Function alias for pin [crate::Pins::gpio21].
608            FunctionPio1, PullNone: Gp21Pio1
609        }
610    },
611
612    /// GPIO 22 supports following functions:
613    ///
614    /// | Function     | Alias with applied function |
615    /// |--------------|-----------------------------|
616    /// | `SPI0 SCK`   | [crate::Gp22Spi0Sck]        |
617    /// | `UART1 CTS`  | [crate::Gp22Uart1Cts]       |
618    /// | `I2C1 SDA`   | [crate::Gp22I2C1Sda]        |
619    /// | `PWM3 A`     | [crate::Gp22Pwm3A]          |
620    /// | `PIO0`       | [crate::Gp22Pio0]           |
621    /// | `PIO1`       | [crate::Gp22Pio1]           |
622    Gpio22 {
623        name: gpio22,
624        aliases: {
625            /// UART Function alias for pin [crate::Pins::gpio22].
626            FunctionUart, PullNone: Gp22Uart1Cts,
627            /// SPI Function alias for pin [crate::Pins::gpio22].
628            FunctionSpi, PullNone: Gp22Spi0Sck,
629            /// I2C Function alias for pin [crate::Pins::gpio22].
630            FunctionI2C, PullUp: Gp22I2C1Sda,
631            /// PWM Function alias for pin [crate::Pins::gpio22].
632            FunctionPwm, PullNone: Gp22Pwm3A,
633            /// PIO0 Function alias for pin [crate::Pins::gpio22].
634            FunctionPio0, PullNone: Gp22Pio0,
635            /// PIO1 Function alias for pin [crate::Pins::gpio22].
636            FunctionPio1, PullNone: Gp22Pio1
637        }
638    },
639
640    /// GPIO 23
641    Gpio23 {
642        name: gp23,
643        aliases: {
644            FunctionUart, PullNone: Gp23Uart1Rts,
645            FunctionSpi, PullNone: Gp23Spi0Tx,
646            FunctionI2C, PullUp: Gp23I2C1Scl,
647            FunctionPwm, PullNone: Gp23Pwm3B,
648            FunctionPio0, PullNone: Gp23Pio0,
649            FunctionPio1, PullNone: Gp23Pio1
650        }
651    },
652
653    /// GPIO 24
654    Gpio24 {
655        name: gp24,
656        aliases: {
657            FunctionUart, PullNone: Gp24Uart1Tx,
658            FunctionSpi, PullNone: Gp24Spi1Rx,
659            FunctionI2C, PullUp: Gp24I2C0Sda,
660            FunctionPwm, PullNone: Gp24Pwm4A,
661            FunctionPio0, PullNone: Gp24Pio0,
662            FunctionPio1, PullNone: Gp24Pio1
663        }
664    },
665
666    /// GPIO 25
667    Gpio25 {
668        name: gp25,
669        aliases: {
670            FunctionUart, PullNone: Gp25Uart1Rx,
671            FunctionSpi, PullNone: Gp25Spi1Csn,
672            FunctionI2C, PullUp: Gp25I2C0Scl,
673            FunctionPwm, PullNone: Gp25Pwm4B,
674            FunctionPio0, PullNone: Gp25Pio0,
675            FunctionPio1, PullNone: Gp25Pio1
676        }
677    },
678
679    /// GPIO 26 supports following functions:
680    ///
681    /// | Function     | Alias with applied function |
682    /// |--------------|-----------------------------|
683    /// | `SPI1 SCK`   | [crate::Gp26Spi1Sck]        |
684    /// | `UART1 CTS`  | [crate::Gp26Uart1Cts]       |
685    /// | `I2C1 SDA`   | [crate::Gp26I2C1Sda]        |
686    /// | `PWM5 A`     | [crate::Gp26Pwm5A]          |
687    /// | `PIO0`       | [crate::Gp26Pio0]           |
688    /// | `PIO1`       | [crate::Gp26Pio1]           |
689    ///
690    /// ADC0
691    Gpio26 {
692        name: gp26,
693        aliases: {
694            /// UART Function alias for pin [crate::Pins::gpio26].
695            FunctionUart, PullNone: Gp26Uart1Cts,
696            /// SPI Function alias for pin [crate::Pins::gpio26].
697            FunctionSpi, PullNone: Gp26Spi1Sck,
698            /// I2C Function alias for pin [crate::Pins::gpio26].
699            FunctionI2C, PullUp: Gp26I2C1Sda,
700            /// PWM Function alias for pin [crate::Pins::gpio26].
701            FunctionPwm, PullNone: Gp26Pwm5A,
702            /// PIO0 Function alias for pin [crate::Pins::gpio26].
703            FunctionPio0, PullNone: Gp26Pio0,
704            /// PIO1 Function alias for pin [crate::Pins::gpio26].
705            FunctionPio1, PullNone: Gp26Pio1
706        }
707    },
708
709    /// GPIO 27 supports following functions:
710    ///
711    /// | Function     | Alias with applied function |
712    /// |--------------|-----------------------------|
713    /// | `SPI1 TX`    | [crate::Gp27Spi1Tx]         |
714    /// | `UART1 RTS`  | [crate::Gp27Uart1Rts]       |
715    /// | `I2C1 SCL`   | [crate::Gp27I2C1Scl]        |
716    /// | `PWM5 B`     | [crate::Gp27Pwm5B]          |
717    /// | `PIO0`       | [crate::Gp27Pio0]           |
718    /// | `PIO1`       | [crate::Gp27Pio1]           |
719    ///
720    /// ADC1
721    Gpio27 {
722        name: gp27,
723        aliases: {
724            /// UART Function alias for pin [crate::Pins::gpio27].
725            FunctionUart, PullNone: Gp27Uart1Rts,
726            /// SPI Function alias for pin [crate::Pins::gpio27].
727            FunctionSpi, PullNone: Gp27Spi1Tx,
728            /// I2C Function alias for pin [crate::Pins::gpio27].
729            FunctionI2C, PullUp: Gp27I2C1Scl,
730            /// PWM Function alias for pin [crate::Pins::gpio27].
731            FunctionPwm, PullNone: Gp27Pwm5B,
732            /// PIO0 Function alias for pin [crate::Pins::gpio27].
733            FunctionPio0, PullNone: Gp27Pio0,
734            /// PIO1 Function alias for pin [crate::Pins::gpio27].
735            FunctionPio1, PullNone: Gp27Pio1
736        }
737    },
738
739    /// GPIO 28 supports following functions:
740    ///
741    /// | Function     | Alias with applied function |
742    /// |--------------|-----------------------------|
743    /// | `SPI1 RX`    | [crate::Gp28Spi1Rx]         |
744    /// | `UART0 TX`   | [crate::Gp28Uart0Tx]        |
745    /// | `I2C0 SDA`   | [crate::Gp28I2C0Sda]        |
746    /// | `PWM6 A`     | [crate::Gp28Pwm6A]          |
747    /// | `PIO0`       | [crate::Gp28Pio0]           |
748    /// | `PIO1`       | [crate::Gp28Pio1]           |
749    ///
750    /// ADC2
751    Gpio28 {
752        name: gp28,
753        aliases: {
754            /// UART Function alias for pin [crate::Pins::gpio28].
755            FunctionUart, PullNone: Gp28Uart0Tx,
756            /// SPI Function alias for pin [crate::Pins::gpio28].
757            FunctionSpi, PullNone: Gp28Spi1Rx,
758            /// I2C Function alias for pin [crate::Pins::gpio28].
759            FunctionI2C, PullUp: Gp28I2C0Sda,
760            /// PWM Function alias for pin [crate::Pins::gpio28].
761            FunctionPwm, PullNone: Gp28Pwm6A,
762            /// PIO0 Function alias for pin [crate::Pins::gpio28].
763            FunctionPio0, PullNone: Gp28Pio0,
764            /// PIO1 Function alias for pin [crate::Pins::gpio28].
765            FunctionPio1, PullNone: Gp28Pio1
766        }
767    },
768
769    /// GPIO 29
770    ///
771    /// ADC3
772    Gpio29 {
773        name: gp29,
774        aliases: {
775            FunctionUart, PullNone: Gp29Uart0Rx,
776            FunctionSpi, PullNone: Gp29Spi1Csn,
777            FunctionI2C, PullUp: Gp29I2C0Scl,
778            FunctionPwm, PullNone: Gp29Pwm6B,
779            FunctionPio0, PullNone: Gp29Pio0,
780            FunctionPio1, PullNone: Gp29Pio1
781        }
782    },
783);
784
785pub const XOSC_CRYSTAL_FREQ: u32 = 12_000_000;