matrix_portal_m4/
pins.rs

1// //! matrix_portal_m4 pins
2
3// reference URL https://github.com/tinygo-org/tinygo/blob/release/src/machine/board_matrixportal-m4.go
4use super::hal;
5
6hal::bsp_pins!(
7    PA02 {
8        // STEMMA connectors
9        // ADC (A0)
10        name: a0,
11        aliases: {
12            Reset: A0Reset,
13        }
14    }
15    PA27 {
16        /// Accelerometer Interrupt
17        /// LIS3DH IRQ
18        name: accelerometer_interrupt,
19        aliases: {
20            Reset: AccelerometerInterruptReset,
21        }
22    }
23    PA07 {
24        // ADC (A4)
25        name: a4,
26        aliases: {
27            Reset: A4Reset,
28        }
29    }
30    PA04 {
31        // ADC (A2)
32        // SPI SDO
33        name: a2,
34        aliases: {
35            AlternateC: Sdo,
36            Reset: A2Reset,
37        }
38    }
39    PA05 {
40        // ADC (A1)
41        // SPI SCK
42        name: a1,
43        aliases: {
44            AlternateC: Sck,
45            Reset: A1Reset,
46        }
47    }
48    PB23 {
49        // Button "Down"
50        name: button_down,
51        aliases: {
52            PushPullOutput: Button,
53            Reset: ButtonDownReset,
54        }
55    }
56    PB22 {
57        // Button "Up"
58        name: button_up,
59        aliases: {
60            PushPullOutput: ButtonUp,
61            Reset: ButtonUpReset,
62        }
63    }
64
65    PA00 {
66        // UART TX
67        name: uart_tx,
68        aliases: {
69            AlternateC: UartTx,
70            Reset: UartTxReset,
71        }
72    }
73    PB04 {
74        // MTX G2
75        // HUB75 G2
76        name: mtx_g2,
77        aliases: {
78            Reset: MtxG2Reset,
79        }
80    }
81    PB05 {
82        // MTX B2
83        // HUB75 B2
84        name: mtx_b2,
85        aliases: {
86            Reset: MtxB2Reset,
87        }
88    }
89    PB06 {
90        // MTX CLK
91        // HUB75 CLK
92        name: mtx_clk,
93        aliases: {
94            Reset: MtxClkReset,
95        }
96    }
97    PB07 {
98        // MTX ADDRA
99        // HUB75 ADDR A
100        name: mtx_addra,
101        aliases: {
102            Reset: MtxAddraReset,
103        }
104    }
105    PB09 {
106        // MTX ADDRC
107        // HUB75 ADDR C
108        name: mtx_addrc,
109        aliases: {
110            Reset: MtxAddrcReset,
111        }
112    }
113    PB31 {
114        // Accelerometer I2C SDA
115        // I2C SDA
116        name: sda,
117        aliases: {
118            AlternateD: Sda,
119            Reset: SdaReset,
120        }
121    }
122    PA16 {
123        // SCK
124        // ESP32 SPI SCK
125        name: esp_sck,
126        aliases: {
127            PushPullOutput: EspSck,
128            Reset: EspSckReset,
129        }
130    }
131    PA17 {
132        // MIS0
133        // ESP32 SPI SDI
134        name: miso,
135        aliases: {
136            PushPullOutput: Miso,
137            Reset: MisoReset,
138        }
139    }
140    PA18 {
141        // ESP RTS
142        // ESP32 RTS
143        name: esp_rts,
144        aliases: {
145            Reset: EspRtsReset,
146        }
147    }
148    PA19 {
149        // MOSI
150        // ESP32 SPI SDO
151        name: mosi,
152        aliases: {
153            PushPullOutput: Mosi,
154            Reset: MosiReset,
155        }
156    }
157    PA20 {
158        // ESP GPIO0
159        // ESP32 GPIO0
160        name: esp_gpio0,
161        aliases: {
162            Reset: EspGpio0Reset
163        }
164    }
165    PA21 {
166        // ESP RESET
167        // ESP32 Reset
168        name: esp_reset,
169        aliases: {
170            Reset: EspResetReset,
171        }
172    }
173    PA22 {
174        // ESP BUSY
175        // ESP32 Busy
176        name: esp_busy,
177        aliases: {
178            Reset: EspBusyReset,
179        }
180    }
181    PA23 {
182        /// Neopixel status LED
183        name: neopixel,
184        aliases: {
185            Reset: NeopixelReset,
186            PushPullOutput: Neopixel,
187        }
188    }
189
190    PB00 {
191        // MTX R1
192        // HUB75 R1
193        name: mtx_r1,
194        aliases: {
195            AlternateB: MtxR1,
196            Reset: MtxR1Reset,
197        }
198    }
199    PB01 {
200        // MTX G1
201        // HUB75 G1
202        name: mtx_g1,
203        aliases: {
204            AlternateB: MtxG1,
205            Reset: MtxG1Reset,
206        }
207    }
208    PA06 {
209        // ADC (A3)
210        name: a3,
211        aliases: {
212            AlternateB: A3,
213            Reset: A3Reset,
214        }
215    }
216    PB08 {
217        // MTX ADDRB
218        // HUB75 ADDR B
219        name: mtx_addrb,
220        aliases: {
221            AlternateB: MtxAddrb,
222            Reset: MtxAddrbReset,
223        }
224    }
225
226    PB14 {
227        // MTX LAT
228        // HUB75 LAT
229        name: mtx_lat,
230        aliases: {
231            AlternateB: MtxLat,
232            Reset: MtxLatReset,
233        }
234    }
235    PB15 {
236        // MTX ADDRD
237        // HUB75 ADDR D
238        name: mtx_addrd,
239        aliases: {
240            Reset: MtxAddrdReset,
241        }
242    }
243    PB17 {
244        // ESP CS
245        // ESP32 SPI CS
246        name: esp_cs,
247        aliases: {
248            Reset: EspCsReset,
249        }
250    }
251
252    PB12 {
253        // MTX OE
254        // HUB75 OE
255        name: mtx_oe,
256        aliases: {
257            AlternateC: MtxOe,
258            Reset: MtxOeReset,
259        }
260    }
261    PB13 {
262        // MTX ADDRE
263        // HUB75 ADDR E
264        name: mtx_addre,
265        aliases: {
266            AlternateC: MtxAddre,
267            Reset: MtxAddreReset,
268        }
269    }
270
271    PA12 {
272        // ESP RX
273        // ESP32 UART RX
274        name: esp_rx,
275        aliases: {
276            AlternateC: EspUartRx,
277            Reset: EspUartRxReset,
278        }
279    }
280    PA13 {
281        // ESP TX
282        // ESP32 UART TX
283        name: esp_tx,
284        aliases: {
285            AlternateC: EspUartTx,
286            Reset: EspUartTxReset,
287        }
288    }
289    PA14 {
290        // D13 LED
291        name: led,
292        aliases: {
293            PushPullOutput: RedLed,
294            Reset: RedLedReset,
295            AlternateG: RedLedPwm,
296        }
297    }
298
299    PB02 {
300        // MTX B1
301        // HUB75 B1
302        name: mtx_b1,
303        aliases: {
304            AlternateD: MtxB1,
305            Reset: MtxB1Reset,
306        }
307    }
308    PB03 {
309        // MTX R2
310        // HUB75 R2
311        name: mtx_r2,
312        aliases: {
313            AlternateD: MtxR2,
314            Reset: MtxR2Reset,
315        }
316    }
317
318    PB30 {
319        // Accelerometer I2C SCL
320        // I2C SCL
321        name: scl,
322        aliases: {
323            AlternateD: Scl,
324            Reset: SclReset,
325        }
326    }
327    PA01 {
328        // RX
329        // UART RX
330        name: uart_rx,
331        aliases: {
332            AlternateC: UartRx,
333            Reset: UartRxReset,
334        }
335    }
336
337    PA24 {
338        /// The USB D- pad
339        name: usb_dm
340        aliases: {
341            AlternateH: UsbDm,
342            Reset: UsbDmReset,
343        }
344    }
345    PA25 {
346        /// The USB D+ pad
347        name: usb_dp
348        aliases: {
349            AlternateH: UsbDp,
350            Reset: UsbDpReset,
351        }
352    }
353);
354
355impl Pins {
356    /// Split the device pins into subsets
357    pub fn split(self) -> Sets {
358        let stemma = Stemma { a0: self.a0 };
359
360        let mtx = Matrix {
361            r1: self.mtx_r1,
362            g1: self.mtx_g1,
363            b1: self.mtx_b1,
364            r2: self.mtx_r2,
365            g2: self.mtx_g2,
366            b2: self.mtx_b2,
367            clk: self.mtx_clk,
368            lat: self.mtx_lat,
369            oe: self.mtx_oe,
370            addra: self.mtx_addra,
371            addrb: self.mtx_addrb,
372            addrc: self.mtx_addrc,
373            addrd: self.mtx_addrd,
374            addre: self.mtx_addre,
375        };
376
377        let esp = Esp {
378            cs: self.esp_cs,
379            gpio0: self.esp_gpio0,
380            busy: self.esp_busy,
381            reset: self.esp_reset,
382            rts: self.esp_rts,
383        };
384
385        let esp_uart = EspUart {
386            tx: self.esp_tx,
387            rx: self.esp_rx,
388        };
389
390        let spi = Spi {
391            mosi: self.mosi,
392            sck: self.esp_sck,
393            miso: self.miso,
394        };
395
396        let i2c = I2C {
397            sda: self.sda,
398            scl: self.scl,
399        };
400
401        let usb = Usb {
402            usb_dm: self.usb_dm,
403            usb_dp: self.usb_dp,
404        };
405
406        Sets {
407            led: self.led,
408            neopixel: self.neopixel,
409            esp,
410            i2c,
411            spi,
412            stemma,
413            esp_uart,
414            usb,
415            mtx,
416        }
417    }
418}
419
420pub struct Sets {
421    pub led: RedLedReset,
422    pub neopixel: NeopixelReset,
423    pub esp: Esp,
424    pub i2c: I2C,
425    pub spi: Spi,
426    pub stemma: Stemma,
427    pub esp_uart: EspUart,
428    pub usb: Usb,
429    pub mtx: Matrix,
430}
431
432pub struct Esp {
433    pub cs: EspCsReset,
434    pub gpio0: EspGpio0Reset,
435    pub busy: EspBusyReset,
436    pub reset: EspResetReset,
437    pub rts: EspRtsReset,
438}
439
440pub struct I2C {
441    pub sda: SdaReset,
442    pub scl: SclReset,
443}
444
445pub struct Spi {
446    pub mosi: MosiReset,
447    pub sck: EspSckReset,
448    pub miso: MisoReset,
449}
450
451pub struct Stemma {
452    pub a0: A0Reset,
453}
454
455pub struct EspUart {
456    pub tx: EspUartTxReset,
457    pub rx: EspUartRxReset,
458}
459
460pub struct Usb {
461    pub usb_dm: UsbDmReset,
462    pub usb_dp: UsbDpReset,
463}
464
465pub struct Matrix {
466    pub r1: MtxR1Reset,
467    pub g1: MtxG1Reset,
468    pub b1: MtxB1Reset,
469    pub r2: MtxR2Reset,
470    pub g2: MtxG2Reset,
471    pub b2: MtxB2Reset,
472    pub clk: MtxClkReset,
473    pub lat: MtxLatReset,
474    pub oe: MtxOeReset,
475    pub addra: MtxAddraReset,
476    pub addrb: MtxAddrbReset,
477    pub addrc: MtxAddrcReset,
478    pub addrd: MtxAddrdReset,
479    pub addre: MtxAddreReset,
480}