pimoroni_servo2040/
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 const NUM_SERVOS: u8 = 18;
19pub const NUM_SENSORS: u8 = 6;
20pub const NUM_LEDS: u8 = 6;
21
22pub const SENSOR_1_ADDR: u8 = 0b_0000;
23pub const SENSOR_2_ADDR: u8 = 0b_0001;
24pub const SENSOR_3_ADDR: u8 = 0b_0010;
25pub const SENSOR_4_ADDR: u8 = 0b_0011;
26pub const SENSOR_5_ADDR: u8 = 0b_0100;
27pub const SENSOR_6_ADDR: u8 = 0b_0101;
28pub const VOLTAGE_SENSE_ADDR: u8 = 0b_0110;
29pub const CURRENT_SENSE_ADDR: u8 = 0b_0111;
30
31pub const VOLTAGE_GAIN: f32 = 0.28058;
32pub const SHUNT_RESISTOR: f32 = 0.003;
33pub const CURRENT_GAIN: u8 = 69;
34pub const CURRENT_OFFSET: f32 = -0.02;
35
36pub use hal::pac;
37
38hal::bsp_pins!(
39    /// GPIO 0 supports following functions:
40    ///
41    /// | Function     | Alias with applied function |
42    /// |--------------|-----------------------------|
43    /// | `PWM0 A`     | [crate::Servo1Pwm0A]           |
44    /// | `PIO0`       | [crate::Servo1Pio0]            |
45    /// | `PIO1`       | [crate::Servo1Pio1]            |
46    Gpio0 {
47        name: servo1,
48        aliases: {
49            /// PWM Function alias for pin [crate::Pins::servo1].
50            FunctionPwm, PullNone: Servo1Pwm0A,
51            /// PIO0 Function alias for pin [crate::Pins::servo1].
52            FunctionPio0, PullNone: Servo1Pio0,
53            /// PIO1 Function alias for pin [crate::Pins::servo1].
54            FunctionPio1, PullNone: Servo1Pio1
55        }
56    },
57
58    /// GPIO 1 supports following functions:
59    ///
60    /// | Function     | Alias with applied function |
61    /// |--------------|-----------------------------|
62    /// | `PWM0 B`     | [crate::Servo2Pwm0B]           |
63    /// | `PIO0`       | [crate::Servo2Pio0]            |
64    /// | `PIO1`       | [crate::Servo2Pio1]            |
65    Gpio1 {
66        name: servo2,
67        aliases: {
68            /// PWM Function alias for pin [crate::Pins::servo2].
69            FunctionPwm, PullNone: Servo2Pwm0B,
70            /// PIO0 Function alias for pin [crate::Pins::servo2].
71            FunctionPio0, PullNone: Servo2Pio0,
72            /// PIO1 Function alias for pin [crate::Pins::servo2].
73            FunctionPio1, PullNone: Servo2Pio1
74        }
75    },
76
77    /// GPIO 2 supports following functions:
78    ///
79    /// | Function     | Alias with applied function |
80    /// |--------------|-----------------------------|
81    /// | `PWM1 A`     | [crate::Servo3Pwm1A]           |
82    /// | `PIO0`       | [crate::Servo3Pio0]            |
83    /// | `PIO1`       | [crate::Servo3Pio1]            |
84    Gpio2 {
85        name: servo3,
86        aliases: {
87            /// PWM Function alias for pin [crate::Pins::servo3].
88            FunctionPwm, PullNone: Servo3Pwm1A,
89            /// PIO0 Function alias for pin [crate::Pins::servo3].
90            FunctionPio0, PullNone: Servo3Pio0,
91            /// PIO1 Function alias for pin [crate::Pins::servo3].
92            FunctionPio1, PullNone: Servo3Pio1
93        }
94    },
95
96    /// GPIO 3 supports following functions:
97    ///
98    /// | Function     | Alias with applied function |
99    /// |--------------|-----------------------------|
100    /// | `PWM1 B`     | [crate::Servo4Pwm1B]           |
101    /// | `PIO0`       | [crate::Servo4Pio0]            |
102    /// | `PIO1`       | [crate::Servo4Pio1]            |
103    Gpio3 {
104        name: servo4,
105        aliases: {
106            /// PWM Function alias for pin [crate::Pins::servo4].
107            FunctionPwm, PullNone: Servo4Pwm1B,
108            /// PIO0 Function alias for pin [crate::Pins::servo4].
109            FunctionPio0, PullNone: Servo4Pio0,
110            /// PIO1 Function alias for pin [crate::Pins::servo4].
111            FunctionPio1, PullNone: Servo4Pio1
112        }
113    },
114
115    /// GPIO 4 supports following functions:
116    ///
117    /// | Function     | Alias with applied function |
118    /// |--------------|-----------------------------|
119    /// | `PWM2 A`     | [crate::Servo5Pwm2A]           |
120    /// | `PIO0`       | [crate::Servo5Pio0]            |
121    /// | `PIO1`       | [crate::Servo5Pio1]            |
122    Gpio4 {
123        name: servo5,
124        aliases: {
125            /// PWM Function alias for pin [crate::Pins::servo5].
126            FunctionPwm, PullNone: Servo5Pwm2A,
127            /// PIO0 Function alias for pin [crate::Pins::servo5].
128            FunctionPio0, PullNone: Servo5Pio0,
129            /// PIO1 Function alias for pin [crate::Pins::servo5].
130            FunctionPio1, PullNone: Servo5Pio1
131        }
132    },
133
134    /// GPIO 5 supports following functions:
135    ///
136    /// | Function     | Alias with applied function |
137    /// |--------------|-----------------------------|
138    /// | `PWM2 B`     | [crate::Servo6Pwm2B]           |
139    /// | `PIO0`       | [crate::Servo6Pio0]            |
140    /// | `PIO1`       | [crate::Servo6Pio1]            |
141    Gpio5 {
142        name: servo6,
143        aliases: {
144            /// PWM Function alias for pin [crate::Pins::servo6].
145            FunctionPwm, PullNone: Servo6Pwm2B,
146            /// PIO0 Function alias for pin [crate::Pins::servo6].
147            FunctionPio0, PullNone: Servo6Pio0,
148            /// PIO1 Function alias for pin [crate::Pins::servo6].
149            FunctionPio1, PullNone: Servo6Pio1
150        }
151    },
152
153    /// GPIO 6 supports following functions:
154    ///
155    /// | Function     | Alias with applied function |
156    /// |--------------|-----------------------------|
157    /// | `PWM3 A`     | [crate::Servo7Pwm3A]           |
158    /// | `PIO0`       | [crate::Servo7Pio0]            |
159    /// | `PIO1`      | [crate::Servo7Pio1]            |
160    Gpio6 {
161        name: servo7,
162        aliases: {
163            /// PWM Function alias for pin [crate::Pins::servo7].
164            FunctionPwm, PullNone: Servo7Pwm3A,
165            /// PIO0 Function alias for pin [crate::Pins::servo7].
166            FunctionPio0, PullNone: Servo7Pio0,
167            /// PIO1 Function alias for pin [crate::Pins::servo7].
168            FunctionPio1, PullNone: Servo7Pio1
169        }
170    },
171
172    /// GPIO 7 supports following functions:
173    ///
174    /// | Function     | Alias with applied function |
175    /// |--------------|-----------------------------|
176    /// | `PWM3 B`     | [crate::Servo8Pwm3B]           |
177    /// | `PIO0`       | [crate::Servo8Pio0]            |
178    /// | `PIO1`       | [crate::Servo8Pio1]            |
179    Gpio7 {
180        name: servo8,
181        aliases: {
182            /// PWM Function alias for pin [crate::Pins::servo8].
183            FunctionPwm, PullNone: Servo8Pwm3B,
184            /// PIO0 Function alias for pin [crate::Pins::servo8].
185            FunctionPio0, PullNone: Servo8Pio0,
186            /// PIO1 Function alias for pin [crate::Pins::servo8].
187            FunctionPio1, PullNone: Servo8Pio1
188        }
189    },
190
191    /// GPIO 8 supports following functions:
192    ///
193    /// | Function     | Alias with applied function |
194    /// |--------------|-----------------------------|
195    /// | `PWM4 A`     | [crate::Servo9Pwm4A]           |
196    /// | `PIO0`       | [crate::Servo9Pio0]            |
197    /// | `PIO1`       | [crate::Servo9Pio1]            |
198    Gpio8 {
199        name: servo9,
200        aliases: {
201            /// PWM Function alias for pin [crate::Pins::servo9].
202            FunctionPwm, PullNone: Servo9Pwm4A,
203            /// PIO0 Function alias for pin [crate::Pins::servo9].
204            FunctionPio0, PullNone: Servo9Pio0,
205            /// PIO1 Function alias for pin [crate::Pins::servo9].
206            FunctionPio1, PullNone: Servo9Pio1
207        }
208    },
209
210    /// GPIO 9 supports following functions:
211    ///
212    /// | Function     | Alias with applied function |
213    /// |--------------|-----------------------------|
214    /// | `PWM4 B`     | [crate::Servo10Pwm4B]           |
215    /// | `PIO0`       | [crate::Servo10Pio0]            |
216    /// | `PIO1`       | [crate::Servo10Pio1]            |
217    Gpio9 {
218        name: servo10,
219        aliases: {
220            /// PWM Function alias for pin [crate::Pins::servo10].
221            FunctionPwm, PullNone: Servo10Pwm4B,
222            /// PIO0 Function alias for pin [crate::Pins::servo10].
223            FunctionPio0, PullNone: Servo10Pio0,
224            /// PIO1 Function alias for pin [crate::Pins::servo10].
225            FunctionPio1, PullNone: Servo10Pio1
226        }
227    },
228
229    /// GPIO 10 supports following functions:
230    ///
231    /// | Function     | Alias with applied function |
232    /// |--------------|-----------------------------|
233    /// | `PWM5 A`     | [crate::Servo11Pwm5A]          |
234    /// | `PIO0`       | [crate::Servo11Pio0]           |
235    /// | `PIO1`       | [crate::Servo11Pio1]           |
236    Gpio10 {
237        name: servo11,
238        aliases: {
239            /// PWM Function alias for pin [crate::Pins::servo11].
240            FunctionPwm, PullNone: Servo11Pwm5A,
241            /// PIO0 Function alias for pin [crate::Pins::servo11].
242            FunctionPio0, PullNone: Servo11Pio0,
243            /// PIO1 Function alias for pin [crate::Pins::servo11].
244            FunctionPio1, PullNone: Servo11Pio1
245        }
246    },
247
248    /// GPIO 11 supports following functions:
249    ///
250    /// | Function     | Alias with applied function |
251    /// |--------------|-----------------------------|
252    /// | `PWM5 B`     | [crate::Servo12Pwm5B]          |
253    /// | `PIO0`       | [crate::Servo12Pio0]           |
254    /// | `PIO1`       | [crate::Servo12Pio1]           |
255    Gpio11 {
256        name: servo12,
257        aliases: {
258            /// PWM Function alias for pin [crate::Pins::servo12].
259            FunctionPwm, PullNone: Servo12Pwm5B,
260            /// PIO0 Function alias for pin [crate::Pins::servo12].
261            FunctionPio0, PullNone: Servo12Pio0,
262            /// PIO1 Function alias for pin [crate::Pins::servo12].
263            FunctionPio1, PullNone: Servo12Pio1
264        }
265    },
266
267    /// GPIO 12 supports following functions:
268    ///
269    /// | Function     | Alias with applied function |
270    /// |--------------|-----------------------------|
271    /// | `PWM6 A`     | [crate::Servo13Pwm6A]          |
272    /// | `PIO0`       | [crate::Servo13Pio0]           |
273    /// | `PIO1`       | [crate::Servo13Pio1]           |
274    Gpio12 {
275        name: servo13,
276        aliases: {
277            /// PWM Function alias for pin [crate::Pins::servo13].
278            FunctionPwm, PullNone: Servo13Pwm6A,
279            /// PIO0 Function alias for pin [crate::Pins::servo13].
280            FunctionPio0, PullNone: Servo13Pio0,
281            /// PIO1 Function alias for pin [crate::Pins::servo13].
282            FunctionPio1, PullNone: Servo13Pio1
283        }
284    },
285
286    /// GPIO 13 supports following functions:
287    ///
288    /// | Function     | Alias with applied function |
289    /// |--------------|-----------------------------|
290    /// | `PWM6 B`     | [crate::Servo14Pwm6B]          |
291    /// | `PIO0`       | [crate::Servo14Pio0]           |
292    /// | `PIO1`       | [crate::Servo14Pio1]           |
293    Gpio13 {
294        name: servo14,
295        aliases: {
296            /// PWM Function alias for pin [crate::Pins::servo14].
297            FunctionPwm, PullNone: Servo14Pwm6B,
298            /// PIO0 Function alias for pin [crate::Pins::servo14].
299            FunctionPio0, PullNone: Servo14Pio0,
300            /// PIO1 Function alias for pin [crate::Pins::servo14].
301            FunctionPio1, PullNone: Servo14Pio1
302        }
303    },
304
305    /// GPIO 14 supports following functions:
306    ///
307    /// | Function     | Alias with applied function |
308    /// |--------------|-----------------------------|
309    /// | `PWM7 A`     | [crate::Servo15Pwm7A]          |
310    /// | `PIO0`       | [crate::Servo15Pio0]           |
311    /// | `PIO1`       | [crate::Servo15Pio1]           |
312    Gpio14 {
313        name: servo15,
314        aliases: {
315            /// PWM Function alias for pin [crate::Pins::servo15].
316            FunctionPwm, PullNone: Servo15Pwm7A,
317            /// PIO0 Function alias for pin [crate::Pins::servo15].
318            FunctionPio0, PullNone: Servo15Pio0,
319            /// PIO1 Function alias for pin [crate::Pins::servo15].
320            FunctionPio1, PullNone: Servo15Pio1
321        }
322    },
323
324    /// GPIO 15 supports following functions:
325    ///
326    /// | Function     | Alias with applied function |
327    /// |--------------|-----------------------------|
328    /// | `PWM7 B`     | [crate::Servo16Pwm7B]          |
329    /// | `PIO0`       | [crate::Servo16Pio0]           |
330    /// | `PIO1`       | [crate::Servo16Pio1]           |
331    Gpio15 {
332        name: servo16,
333        aliases: {
334            /// PWM Function alias for pin [crate::Pins::servo16].
335            FunctionPwm, PullNone: Servo16Pwm7B,
336            /// PIO0 Function alias for pin [crate::Pins::servo16].
337            FunctionPio0, PullNone: Servo16Pio0,
338            /// PIO1 Function alias for pin [crate::Pins::servo16].
339            FunctionPio1, PullNone: Servo16Pio1
340        }
341    },
342
343    /// GPIO 16 supports following functions:
344    ///
345    /// | Function     | Alias with applied function |
346    /// |--------------|-----------------------------|
347    /// | `PWM0 A`     | [crate::Servo17Pwm0A]          |
348    /// | `PIO0`       | [crate::Servo17Pio0]           |
349    /// | `PIO1`       | [crate::Servo17Pio1]           |
350    Gpio16 {
351        name: servo17,
352        aliases: {
353            /// PWM Function alias for pin [crate::Pins::servo17].
354            FunctionPwm, PullNone: Servo17Pwm0A,
355            /// PIO0 Function alias for pin [crate::Pins::servo17].
356            FunctionPio0, PullNone: Servo17Pio0,
357            /// PIO1 Function alias for pin [crate::Pins::servo17].
358            FunctionPio1, PullNone: Servo17Pio1
359        }
360    },
361
362    /// GPIO 17 supports following functions:
363    ///
364    /// | Function     | Alias with applied function |
365    /// |--------------|-----------------------------|
366    /// | `PWM0 B`     | [crate::Servo18Pwm0B]          |
367    /// | `PIO0`       | [crate::Servo18Pio0]           |
368    /// | `PIO1`       | [crate::Servo18Pio1]           |
369    Gpio17 {
370        name: servo18,
371        aliases: {
372            /// PWM Function alias for pin [crate::Pins::servo18].
373            FunctionPwm, PullNone: Servo18Pwm0B,
374            /// PIO0 Function alias for pin [crate::Pins::servo18].
375            FunctionPio0, PullNone: Servo18Pio0,
376            /// PIO1 Function alias for pin [crate::Pins::servo18].
377            FunctionPio1, PullNone: Servo18Pio1
378        }
379    },
380
381    /// GPIO 18 is connected to the leds of the Servo 2040 board.
382    Gpio18 {
383        name: led_data
384    },
385
386    /// GPIO 19 supports following functions:
387    ///
388    /// | Function     | Alias with applied function |
389    /// |--------------|-----------------------------|
390    /// | `SPI0 TX`    | [crate::Gp19Spi0Tx]         |
391    /// | `UART0 RTS`  | [crate::Gp19Uart0Rts]       |
392    /// | `I2C1 SCL`   | [crate::Gp19I2C1Scl]        |
393    /// | `PWM1 B`     | [crate::Gp19Pwm1B]          |
394    /// | `PIO0`       | [crate::Gp19Pio0]           |
395    /// | `PIO1`       | [crate::Gp19Pio1]           |
396    Gpio19 {
397        name: int_,
398        aliases: {
399            /// UART Function alias for pin [crate::Pins::int_].
400            FunctionUart, PullNone: Gp19Uart0Rts,
401            /// SPI Function alias for pin [crate::Pins::int_].
402            FunctionSpi, PullNone: Gp19Spi0Tx,
403            /// I2C Function alias for pin [crate::Pins::int_].
404            FunctionI2C, PullUp: Gp19I2C1Scl,
405            /// PWM Function alias for pin [crate::Pins::int_].
406            FunctionPwm, PullNone: Gp19Pwm1B,
407            /// PIO0 Function alias for pin [crate::Pins::int_].
408            FunctionPio0, PullNone: Gp19Pio0,
409            /// PIO1 Function alias for pin [crate::Pins::int_].
410            FunctionPio1, PullNone: Gp19Pio1
411        }
412    },
413
414    /// GPIO 20 supports following functions:
415    ///
416    /// | Function     | Alias with applied function |
417    /// |--------------|-----------------------------|
418    /// | `SPI0 RX`    | [crate::Gp20Spi0Rx]         |
419    /// | `UART1 TX`   | [crate::Gp20Uart1Tx]        |
420    /// | `I2C0 SDA`   | [crate::Gp20I2C0Sda]        |
421    /// | `PWM2 A`     | [crate::Gp20Pwm2A]          |
422    /// | `PIO0`       | [crate::Gp20Pio0]           |
423    /// | `PIO1`       | [crate::Gp20Pio1]           |
424    Gpio20 {
425        name: sda,
426        aliases: {
427            /// UART Function alias for pin [crate::Pins::sda].
428            FunctionUart, PullNone: Gp20Uart1Tx,
429            /// SPI Function alias for pin [crate::Pins::sda].
430            FunctionSpi, PullNone: Gp20Spi0Rx,
431            /// I2C Function alias for pin [crate::Pins::sda].
432            FunctionI2C, PullUp: Gp20I2C0Sda,
433            /// PWM Function alias for pin [crate::Pins::sda].
434            FunctionPwm, PullNone: Gp20Pwm2A,
435            /// PIO0 Function alias for pin [crate::Pins::sda].
436            FunctionPio0, PullNone: Gp20Pio0,
437            /// PIO1 Function alias for pin [crate::Pins::sda].
438            FunctionPio1, PullNone: Gp20Pio1
439        }
440    },
441
442    /// GPIO 21 supports following functions:
443    ///
444    /// | Function     | Alias with applied function |
445    /// |--------------|-----------------------------|
446    /// | `SPI0 CSn`   | [crate::Gp21Spi0Csn]        |
447    /// | `UART1 RX`   | [crate::Gp21Uart1Rx]        |
448    /// | `I2C0 SCL`   | [crate::Gp21I2C0Scl]        |
449    /// | `PWM2 B`     | [crate::Gp21Pwm2B]          |
450    /// | `PIO0`       | [crate::Gp21Pio0]           |
451    /// | `PIO1`       | [crate::Gp21Pio1]           |
452    Gpio21 {
453        name: scl,
454        aliases: {
455            /// UART Function alias for pin [crate::Pins::scl].
456            FunctionUart, PullNone: Gp21Uart1Rx,
457            /// SPI Function alias for pin [crate::Pins::scl].
458            FunctionSpi, PullNone: Gp21Spi0Csn,
459            /// I2C Function alias for pin [crate::Pins::scl].
460            FunctionI2C, PullUp: Gp21I2C0Scl,
461            /// PWM Function alias for pin [crate::Pins::scl].
462            FunctionPwm, PullNone: Gp21Pwm2B,
463            /// PIO0 Function alias for pin [crate::Pins::scl].
464            FunctionPio0, PullNone: Gp21Pio0,
465            /// PIO1 Function alias for pin [crate::Pins::scl].
466            FunctionPio1, PullNone: Gp21Pio1
467        }
468    },
469
470    /// GPIO 22 is connected to adc_addr_0 of the Servo 2040 board.
471    Gpio22 {
472        name: adc_addr_0,
473    },
474
475    /// GPIO 23 supports following functions:
476    ///
477    /// | Function     | Alias with applied function |
478    /// |--------------|-----------------------------|
479    /// | `SPI0 TX`    | [crate::Gp23Spi0Tx]         |
480    /// | `UART1 RTS`  | [crate::Gp23Uart1Rts]       |
481    /// | `I2C1 SCL`   | [crate::Gp23I2C1Scl]        |
482    /// | `PWM3 B`     | [crate::Gp23Pwm3B]          |
483    /// | `PIO0`       | [crate::Gp23Pio0]           |
484    /// | `PIO1`       | [crate::Gp23Pio1]           |
485    Gpio23 {
486        name: user_sw,
487        aliases: {
488            /// UART Function alias for pin [crate::Pins::user_sw].
489            FunctionUart, PullNone: Gp23Uart1Rts,
490            /// SPI Function alias for pin [crate::Pins::user_sw].
491            FunctionSpi, PullNone: Gp23Spi0Tx,
492            /// I2C Function alias for pin [crate::Pins::user_sw].
493            FunctionI2C, PullUp: Gp23I2C1Scl,
494            /// PWM Function alias for pin [crate::Pins::user_sw].
495            FunctionPwm, PullNone: Gp23Pwm3B,
496            /// PIO0 Function alias for pin [crate::Pins::user_sw].
497            FunctionPio0, PullNone: Gp23Pio0,
498            /// PIO1 Function alias for pin [crate::Pins::user_sw].
499            FunctionPio1, PullNone: Gp23Pio1
500        }
501    },
502
503    /// GPIO 24 is connected to adc_addr_1 of the Servo 2040 board.
504    Gpio24 {
505        name: adc_addr_1,
506    },
507
508    /// GPIO 25 is connected to adc_addr_2 of the Servo 2040 board.
509    Gpio25 {
510        name: adc_addr_2,
511    },
512
513    /// GPIO 26 supports following functions:
514    ///
515    /// | Function     | Alias with applied function |
516    /// |--------------|-----------------------------|
517    /// | `SPI1 SCK`   | [crate::Gp26Spi1Sck]        |
518    /// | `UART1 CTS`  | [crate::Gp26Uart1Cts]       |
519    /// | `I2C1 SDA`   | [crate::Gp26I2C1Sda]        |
520    /// | `PWM5 A`     | [crate::Gp26Pwm5A]          |
521    /// | `PIO0`       | [crate::Gp26Pio0]           |
522    /// | `PIO1`       | [crate::Gp26Pio1]           |
523    Gpio26 {
524        name: adc0,
525        aliases: {
526            /// UART Function alias for pin [crate::Pins::gpio26].
527            FunctionUart, PullNone: Gp26Uart1Cts,
528            /// SPI Function alias for pin [crate::Pins::gpio26].
529            FunctionSpi, PullNone: Gp26Spi1Sck,
530            /// I2C Function alias for pin [crate::Pins::gpio26].
531            FunctionI2C, PullUp: Gp26I2C1Sda,
532            /// PWM Function alias for pin [crate::Pins::gpio26].
533            FunctionPwm, PullNone: Gp26Pwm5A,
534            /// PIO0 Function alias for pin [crate::Pins::gpio26].
535            FunctionPio0, PullNone: Gp26Pio0,
536            /// PIO1 Function alias for pin [crate::Pins::gpio26].
537            FunctionPio1, PullNone: Gp26Pio1
538        }
539    },
540
541    /// GPIO 27 supports following functions:
542    ///
543    /// | Function     | Alias with applied function |
544    /// |--------------|-----------------------------|
545    /// | `SPI1 TX`    | [crate::Gp27Spi1Tx]         |
546    /// | `UART1 RTS`  | [crate::Gp27Uart1Rts]       |
547    /// | `I2C1 SCL`   | [crate::Gp27I2C1Scl]        |
548    /// | `PWM5 B`     | [crate::Gp27Pwm5B]          |
549    /// | `PIO0`       | [crate::Gp27Pio0]           |
550    /// | `PIO1`       | [crate::Gp27Pio1]           |
551    Gpio27 {
552        name: adc1,
553        aliases: {
554            /// UART Function alias for pin [crate::Pins::gpio27].
555            FunctionUart, PullNone: Gp27Uart1Rts,
556            /// SPI Function alias for pin [crate::Pins::gpio27].
557            FunctionSpi, PullNone: Gp27Spi1Tx,
558            /// I2C Function alias for pin [crate::Pins::gpio27].
559            FunctionI2C, PullUp: Gp27I2C1Scl,
560            /// PWM Function alias for pin [crate::Pins::gpio27].
561            FunctionPwm, PullNone: Gp27Pwm5B,
562            /// PIO0 Function alias for pin [crate::Pins::gpio27].
563            FunctionPio0, PullNone: Gp27Pio0,
564            /// PIO1 Function alias for pin [crate::Pins::gpio27].
565            FunctionPio1, PullNone: Gp27Pio1
566        }
567    },
568
569    /// GPIO 28 supports following functions:
570    ///
571    /// | Function     | Alias with applied function |
572    /// |--------------|-----------------------------|
573    /// | `SPI1 RX`    | [crate::Gp28Spi1Rx]         |
574    /// | `UART0 TX`   | [crate::Gp28Uart0Tx]        |
575    /// | `I2C0 SDA`   | [crate::Gp28I2C0Sda]        |
576    /// | `PWM6 A`     | [crate::Gp28Pwm6A]          |
577    /// | `PIO0`       | [crate::Gp28Pio0]           |
578    /// | `PIO1`       | [crate::Gp28Pio1]           |
579    Gpio28 {
580        name: adc2,
581        aliases: {
582            /// UART Function alias for pin [crate::Pins::gpio28].
583            FunctionUart, PullNone: Gp28Uart0Tx,
584            /// SPI Function alias for pin [crate::Pins::gpio28].
585            FunctionSpi, PullNone: Gp28Spi1Rx,
586            /// I2C Function alias for pin [crate::Pins::gpio28].
587            FunctionI2C, PullUp: Gp28I2C0Sda,
588            /// PWM Function alias for pin [crate::Pins::gpio28].
589            FunctionPwm, PullNone: Gp28Pwm6A,
590            /// PIO0 Function alias for pin [crate::Pins::gpio28].
591            FunctionPio0, PullNone: Gp28Pio0,
592            /// PIO1 Function alias for pin [crate::Pins::gpio28].
593            FunctionPio1, PullNone: Gp28Pio1
594        }
595    },
596
597    /// GPIO 29 is connected to shared adc of the Servo2040 board.
598    Gpio29 {
599        name: shared_adc,
600    },
601);
602
603pub const XOSC_CRYSTAL_FREQ: u32 = 12_000_000;