pimoroni_tiny2040/
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: gpio0,
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: gpio1,
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: gpio2,
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: gpio3,
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: gpio4,
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: gpio5,
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: gpio6,
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: gpio7,
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 18 is red LED, active low
246    Gpio18 {
247        name: led_red
248    },
249
250    /// GPIO 19 is green LED, active low
251    Gpio19 {
252        name: led_green
253    },
254
255    /// GPIO 20 is blue LED, active low
256    Gpio20 {
257        name: led_blue
258    },
259
260    /// GPIO 23 is connected to bootsel button, active low
261    Gpio23 {
262        name: bootsel
263    },
264
265    /// GPIO 26 supports following functions:
266    ///
267    /// | Function     | Alias with applied function |
268    /// |--------------|-----------------------------|
269    /// | `SPI1 SCK`   | [crate::Gp26Spi1Sck]        |
270    /// | `UART1 CTS`  | [crate::Gp26Uart1Cts]       |
271    /// | `I2C1 SDA`   | [crate::Gp26I2C1Sda]        |
272    /// | `PWM5 A`     | [crate::Gp26Pwm5A]          |
273    /// | `PIO0`       | [crate::Gp26Pio0]           |
274    /// | `PIO1`       | [crate::Gp26Pio1]           |
275    Gpio26 {
276        name: gpio26,
277        aliases: {
278            /// UART Function alias for pin [crate::Pins::gpio26].
279            FunctionUart, PullNone: Gp26Uart1Cts,
280            /// SPI Function alias for pin [crate::Pins::gpio26].
281            FunctionSpi, PullNone: Gp26Spi1Sck,
282            /// I2C Function alias for pin [crate::Pins::gpio26].
283            FunctionI2C, PullUp: Gp26I2C1Sda,
284            /// PWM Function alias for pin [crate::Pins::gpio26].
285            FunctionPwm, PullNone: Gp26Pwm5A,
286            /// PIO0 Function alias for pin [crate::Pins::gpio26].
287            FunctionPio0, PullNone: Gp26Pio0,
288            /// PIO1 Function alias for pin [crate::Pins::gpio26].
289            FunctionPio1, PullNone: Gp26Pio1
290        }
291    },
292
293    /// GPIO 27 supports following functions:
294    ///
295    /// | Function     | Alias with applied function |
296    /// |--------------|-----------------------------|
297    /// | `SPI1 TX`    | [crate::Gp27Spi1Tx]         |
298    /// | `UART1 RTS`  | [crate::Gp27Uart1Rts]       |
299    /// | `I2C1 SCL`   | [crate::Gp27I2C1Scl]        |
300    /// | `PWM5 B`     | [crate::Gp27Pwm5B]          |
301    /// | `PIO0`       | [crate::Gp27Pio0]           |
302    /// | `PIO1`       | [crate::Gp27Pio1]           |
303    Gpio27 {
304        name: gpio27,
305        aliases: {
306            /// UART Function alias for pin [crate::Pins::gpio27].
307            FunctionUart, PullNone: Gp27Uart1Rts,
308            /// SPI Function alias for pin [crate::Pins::gpio27].
309            FunctionSpi, PullNone: Gp27Spi1Tx,
310            /// I2C Function alias for pin [crate::Pins::gpio27].
311            FunctionI2C, PullUp: Gp27I2C1Scl,
312            /// PWM Function alias for pin [crate::Pins::gpio27].
313            FunctionPwm, PullNone: Gp27Pwm5B,
314            /// PIO0 Function alias for pin [crate::Pins::gpio27].
315            FunctionPio0, PullNone: Gp27Pio0,
316            /// PIO1 Function alias for pin [crate::Pins::gpio27].
317            FunctionPio1, PullNone: Gp27Pio1
318        }
319    },
320
321    /// GPIO 28 supports following functions:
322    ///
323    /// | Function     | Alias with applied function |
324    /// |--------------|-----------------------------|
325    /// | `SPI1 RX`    | [crate::Gp28Spi1Rx]         |
326    /// | `UART0 TX`   | [crate::Gp28Uart0Tx]        |
327    /// | `I2C0 SDA`   | [crate::Gp28I2C0Sda]        |
328    /// | `PWM6 A`     | [crate::Gp28Pwm6A]          |
329    /// | `PIO0`       | [crate::Gp28Pio0]           |
330    /// | `PIO1`       | [crate::Gp28Pio1]           |
331    Gpio28 {
332        name: gpio28,
333        aliases: {
334            /// UART Function alias for pin [crate::Pins::gpio28].
335            FunctionUart, PullNone: Gp28Uart0Tx,
336            /// SPI Function alias for pin [crate::Pins::gpio28].
337            FunctionSpi, PullNone: Gp28Spi1Rx,
338            /// I2C Function alias for pin [crate::Pins::gpio28].
339            FunctionI2C, PullUp: Gp28I2C0Sda,
340            /// PWM Function alias for pin [crate::Pins::gpio28].
341            FunctionPwm, PullNone: Gp28Pwm6A,
342            /// PIO0 Function alias for pin [crate::Pins::gpio28].
343            FunctionPio0, PullNone: Gp28Pio0,
344            /// PIO1 Function alias for pin [crate::Pins::gpio28].
345            FunctionPio1, PullNone: Gp28Pio1
346        }
347    },
348
349    /// GPIO 29 supports following functions:
350    ///
351    /// | Function     | Alias with applied function |
352    /// |--------------|-----------------------------|
353    /// | `SPI1 CSn`   | [crate::Gp29Spi1Csn]        |
354    /// | `UART0 RX`   | [crate::Gp29Uart0Rx]        |
355    /// | `I2C0 SCL`   | [crate::Gp29I2C0Scl]        |
356    /// | `PWM6 B`     | [crate::Gp29Pwm6B]          |
357    /// | `PIO0`       | [crate::Gp29Pio0]           |
358    /// | `PIO1`       | [crate::Gp29Pio1]           |
359    Gpio29 {
360        name: gpio29,
361        aliases: {
362            /// UART Function alias for pin [crate::Pins::gpio28].
363            FunctionUart, PullNone: Gp29Uart0Rx,
364            /// SPI Function alias for pin [crate::Pins::gpio28].
365            FunctionSpi, PullNone: Gp29Spi1Csn,
366            /// I2C Function alias for pin [crate::Pins::gpio28].
367            FunctionI2C, PullUp: Gp29I2C0Scl,
368            /// PWM Function alias for pin [crate::Pins::gpio28].
369            FunctionPwm, PullNone: Gp29Pwm6B,
370            /// PIO0 Function alias for pin [crate::Pins::gpio28].
371            FunctionPio0, PullNone: Gp29Pio0,
372            /// PIO1 Function alias for pin [crate::Pins::gpio28].
373            FunctionPio1, PullNone: Gp29Pio1
374        }
375    },
376);
377
378pub const XOSC_CRYSTAL_FREQ: u32 = 12_000_000;