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;