picoboy_color/
lib.rs

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