1use crate::{
2 peripherals::{
3 gpio::Gpio,
4 iocon::Iocon,
5 flexcomm,
6 },
7 typestates::{
8 init_state,
9 pin::{
10 function,
11 state::{
12 self,
13 Special,
14 },
15 flexcomm as fc,
17 flexcomm::ChipSelect,
18 },
19 },
20};
21
22pub use crate::typestates::pin::gpio::{
23 direction,
24 Level,
25};
26
27pub mod gpio;
29
30pub use crate::typestates::pin::{
31 PinId,
32 PinType,
33};
34
35use crate::typestates::reg_proxy::RegClusterProxy;
36
37
38pub struct Pin<T: PinId, S: state::PinState> {
40 pub(crate) id: T,
41 #[allow(dead_code)]
42 pub(crate) state: S,
43}
44
45impl Pin<Pio0_22, state::Unused> {
46 pub fn into_usb0_vbus_pin(
47 self,
48 iocon: &mut Iocon<init_state::Enabled>,
49 ) -> Pin<Pio0_22, state::Special<function::USB0_VBUS>> {
50 iocon.raw.pio0_22.modify(|_, w|
51 w
52 .func().alt7() .mode().inactive() .slew().standard() .invert().disabled() .digimode().digital() .od().normal() );
59
60 Pin {
61 id: self.id,
62 state: state::Special {
63 _function: function::USB0_VBUS,
64 },
65 }
66 }
67}
68
69
70static mut PIN_TAKEN: [[bool; 32]; 2] = [[false; 32]; 2];
73
74macro_rules! pins {
75 ($(
76 $field:ident,
77 $pin:ident,
78 $port:expr,
79 $number:expr,
80 $type:expr,
81 $default_state_ty:ty,
82 $default_state_val:expr;
83 )*) => {
84 #[allow(missing_docs)]
86 pub struct Pins {
87 $(pub $field: Pin<$pin, $default_state_ty>,)*
88 }
89
90 impl Pins {
91
92 fn any_taken() -> bool {
93 unsafe {
94 let any_port_0 = PIN_TAKEN[0].iter().any(|x| *x);
95 let any_port_1 = PIN_TAKEN[1].iter().any(|x| *x);
96 any_port_0 || any_port_1
97 }
98 }
99
100 fn set_all_taken() {
101 unsafe {
102 for entry in PIN_TAKEN[0].iter_mut() { *entry = true; }
103 for entry in PIN_TAKEN[1].iter_mut() { *entry = true; }
104 }
105 }
106
107 fn set_all_released() {
108 unsafe {
109 for entry in PIN_TAKEN[0].iter_mut() { *entry = false; }
110 for entry in PIN_TAKEN[1].iter_mut() { *entry = false; }
111 }
112 }
113
114 pub fn take() -> Option<Self> {
115 if Self::any_taken() {
116 None
117 } else {
118 Some(unsafe {
119 Self::set_all_taken();
120 Self::steal()
121 } )
122 }
123 }
124
125 pub fn release(self) {
126 Self::set_all_released();
127 }
128
129 pub unsafe fn steal() -> Self {
130 Self {
131 $(
132 $field: $pin::steal(),
133 )*
134 }
135 }
136 }
137
138
139 $(
140 #[allow(non_camel_case_types)]
144 pub struct $pin(());
145
146 impl Pin<$pin, state::Unused> {
147 pub fn into_gpio_pin(
149 self,
150 iocon: &mut Iocon<init_state::Enabled>,
151 _: &mut Gpio<init_state::Enabled>,
152 ) -> Pin<$pin, state::Gpio<direction::Unknown>> {
153 iocon.raw.$field.modify(|_, w| w
155 .func().alt0() .mode().inactive() .slew().standard() .invert().disabled() .digimode().digital() .od().normal() );
162 Pin {
163 id: self.id,
164 state: state::Gpio {
165 dirset: RegClusterProxy::new(),
166 pin: RegClusterProxy::new(),
167 set: RegClusterProxy::new(),
168 clr: RegClusterProxy::new(),
169
170 _direction: direction::Unknown,
171 },
172 }
173 }
174 }
175
176 impl $pin {
177 pub fn take() -> Option<Pin<Self, $default_state_ty>> {
178 if unsafe { PIN_TAKEN[$port][$number] } {
179 None
180 } else {
181 Some(unsafe {
182 Self::steal()
183 } )
184 }
185 }
186
187 pub fn release(self) {
188 unsafe { PIN_TAKEN[$port][$number] = false; }
189 }
190
191 pub unsafe fn steal() -> Pin<Self, $default_state_ty> {
192 PIN_TAKEN[$port][$number] = true;
193 Pin {
194 id: Self(()),
195 state: $default_state_val,
196 }
197 }
198 }
199
200 impl PinId for $pin {
201 const PORT: usize = $port;
202 const NUMBER: u8 = $number;
203 const MASK: u32 = 0x1 << $number;
204 const TYPE: PinType = $type;
205 }
206 )*
207 }
208}
209
210pins!(
211 pio0_0 , Pio0_0 , 0, 0, PinType::A, state::Unused, state::Unused;
212 pio0_1 , Pio0_1 , 0, 1, PinType::D, state::Unused, state::Unused;
213 pio0_2 , Pio0_2 , 0, 2, PinType::D, state::Unused, state::Unused;
214 pio0_3 , Pio0_3 , 0, 3, PinType::D, state::Unused, state::Unused;
215 pio0_4 , Pio0_4 , 0, 4, PinType::D, state::Unused, state::Unused;
216 pio0_5 , Pio0_5 , 0, 5, PinType::D, state::Unused, state::Unused;
217 pio0_6 , Pio0_6 , 0, 6, PinType::D, state::Unused, state::Unused;
218 pio0_7 , Pio0_7 , 0, 7, PinType::D, state::Unused, state::Unused;
219 pio0_8 , Pio0_8 , 0, 8, PinType::D, state::Unused, state::Unused;
220 pio0_9 , Pio0_9 , 0, 9, PinType::A, state::Unused, state::Unused;
221 pio0_10, Pio0_10, 0, 10, PinType::A, state::Unused, state::Unused;
222 pio0_11, Pio0_11, 0, 11, PinType::A, state::Special<function::SWCLK>,
223 state::Special{ _function: function::SWCLK {} };
224 pio0_12, Pio0_12, 0, 12, PinType::A, state::Special<function::SWDIO>,
225 state::Special{ _function: function::SWDIO {} };
226 pio0_13, Pio0_13, 0, 13, PinType::I, state::Unused, state::Unused;
227 pio0_14, Pio0_14, 0, 14, PinType::I, state::Unused, state::Unused;
228 pio0_15, Pio0_15, 0, 15, PinType::A, state::Unused, state::Unused;
229 pio0_16, Pio0_16, 0, 16, PinType::A, state::Unused, state::Unused;
230 pio0_17, Pio0_17, 0, 17, PinType::D, state::Unused, state::Unused;
231 pio0_18, Pio0_18, 0, 18, PinType::A, state::Unused, state::Unused;
232 pio0_19, Pio0_19, 0, 19, PinType::D, state::Unused, state::Unused;
233 pio0_20, Pio0_20, 0, 20, PinType::D, state::Unused, state::Unused;
234 pio0_21, Pio0_21, 0, 21, PinType::D, state::Unused, state::Unused;
235 pio0_22, Pio0_22, 0, 22, PinType::D, state::Unused, state::Unused;
236 pio0_23, Pio0_23, 0, 23, PinType::A, state::Unused, state::Unused;
237 pio0_24, Pio0_24, 0, 24, PinType::D, state::Unused, state::Unused;
238 pio0_25, Pio0_25, 0, 25, PinType::D, state::Unused, state::Unused;
239 pio0_26, Pio0_26, 0, 26, PinType::D, state::Unused, state::Unused;
240 pio0_27, Pio0_27, 0, 27, PinType::D, state::Unused, state::Unused;
241 pio0_28, Pio0_28, 0, 28, PinType::D, state::Unused, state::Unused;
242 pio0_29, Pio0_29, 0, 29, PinType::D, state::Unused, state::Unused;
243 pio0_30, Pio0_30, 0, 30, PinType::D, state::Unused, state::Unused;
244 pio0_31, Pio0_31, 0, 31, PinType::A, state::Unused, state::Unused;
245
246 pio1_0 , Pio1_0 , 1, 0, PinType::A, state::Unused, state::Unused;
247 pio1_1 , Pio1_1 , 1, 1, PinType::D, state::Unused, state::Unused;
248 pio1_2 , Pio1_2 , 1, 2, PinType::D, state::Unused, state::Unused;
249 pio1_3 , Pio1_3 , 1, 3, PinType::D, state::Unused, state::Unused;
250 pio1_4 , Pio1_4 , 1, 4, PinType::D, state::Unused, state::Unused;
251 pio1_5 , Pio1_5 , 1, 5, PinType::D, state::Unused, state::Unused;
252 pio1_6 , Pio1_6 , 1, 6, PinType::D, state::Unused, state::Unused;
253 pio1_7 , Pio1_7 , 1, 7, PinType::D, state::Unused, state::Unused;
254 pio1_8 , Pio1_8 , 1, 8, PinType::A, state::Unused, state::Unused;
255 pio1_9 , Pio1_9 , 1, 9, PinType::A, state::Unused, state::Unused;
256 pio1_10, Pio1_10, 1, 10, PinType::D, state::Unused, state::Unused;
257 pio1_11, Pio1_11, 1, 11, PinType::D, state::Unused, state::Unused;
258 pio1_12, Pio1_12, 1, 12, PinType::D, state::Unused, state::Unused;
259 pio1_13, Pio1_13, 1, 13, PinType::D, state::Unused, state::Unused;
260 pio1_14, Pio1_14, 1, 14, PinType::A, state::Unused, state::Unused;
261 pio1_15, Pio1_15, 1, 15, PinType::D, state::Unused, state::Unused;
262 pio1_16, Pio1_16, 1, 16, PinType::D, state::Unused, state::Unused;
263 pio1_17, Pio1_17, 1, 17, PinType::D, state::Unused, state::Unused;
264 pio1_18, Pio1_18, 1, 18, PinType::D, state::Unused, state::Unused;
265 pio1_19, Pio1_19, 1, 19, PinType::A, state::Unused, state::Unused;
266 pio1_20, Pio1_20, 1, 20, PinType::D, state::Unused, state::Unused;
267 pio1_21, Pio1_21, 1, 21, PinType::D, state::Unused, state::Unused;
268 pio1_22, Pio1_22, 1, 22, PinType::D, state::Unused, state::Unused;
269 pio1_23, Pio1_23, 1, 23, PinType::D, state::Unused, state::Unused;
270 pio1_24, Pio1_24, 1, 24, PinType::D, state::Unused, state::Unused;
271 pio1_25, Pio1_25, 1, 25, PinType::D, state::Unused, state::Unused;
272 pio1_26, Pio1_26, 1, 26, PinType::D, state::Unused, state::Unused;
273 pio1_27, Pio1_27, 1, 27, PinType::D, state::Unused, state::Unused;
274 pio1_28, Pio1_28, 1, 28, PinType::D, state::Unused, state::Unused;
275 pio1_29, Pio1_29, 1, 29, PinType::D, state::Unused, state::Unused;
276 pio1_30, Pio1_30, 1, 30, PinType::D, state::Unused, state::Unused;
277 pio1_31, Pio1_31, 1, 31, PinType::D, state::Unused, state::Unused;
278);
279
280
281macro_rules! special_pins {
282 ($(
283 ($Pin:ty,$pin:ident): {
284 $(
285 ($alt_func:expr, $SPECIAL_FUNCTION:ident): [
286 $(
287 ($method:ident,$Peripheral:ty,$Marker:ident),
288 )*
289 ]
290 )+
291 })*) => {
292
293 $($($(
294 impl Pin<$Pin, state::Unused> {
295 pub fn $method(
296 self,
297 iocon: &mut Iocon<init_state::Enabled>,
298 ) ->Pin<$Pin, state::Special<function::$SPECIAL_FUNCTION>> {
299 iocon.raw.$pin.modify(|_, w| unsafe {
302 w
303 .func().bits($alt_func) .mode().inactive() .slew().standard() .invert().disabled() .digimode().digital() .od().normal() });
310
311 Pin {
312 id: self.id,
313 state: Special {
314 _function: function::$SPECIAL_FUNCTION {},
315
316 },
317 }
318 }
319 }
320 )*)+)*
321 }
322}
323
324special_pins! {
333 (Pio0_0, pio0_0): {
334 (2, FC3_SCK): [
335 (into_usart3_sclk_pin, Usart3, UsartSclkPin),
336 ]
337 }
338 (Pio0_1, pio0_1): {
339 (2, FC3_CTS_SDA_SSEL0): [
340 (into_usart3_cts_pin, Usart3, UsartCtsPin),
341 (into_i2c3_sda_pin, I2c3, I2cSdaPin),
342 (into_spi3_cs_pin, Spi3, SpiCsPin),
343 ]
344 }
345 (Pio0_2, pio0_2): {
346 (1, FC3_TXD_SCL_MISO_WS): [
347 (into_usart3_tx_pin, Usart3, UsartTxPin),
348 (into_i2c3_scl_pin, I2c3, I2cSclPin),
349 (into_spi3_miso_pin, Spi3, SpiMisoPin),
350 (into_i2s3_ws_pin, I2s3, I2sWsPin),
351 ]
352 }
353 (Pio0_3, pio0_3): {
354 (1, FC3_RXD_SDA_MOSI_DATA): [
355 (into_usart3_rx_pin, Usart3, UsartRxPin),
356 (into_i2c3_sda_pin, I2c3, I2cSdaPin),
357 (into_spi3_mosi_pin, Spi3, SpiMosiPin),
358 (into_i2s3_sda_pin, I2s3, I2sSdaPin),
359 ]
360 }
361 (Pio0_4, pio0_4): {
362 (2, FC4_SCK): [
363 (into_usart4_sclk_pin, Usart4, UsartSclkPin),
364 ]
365 }
366 (Pio0_5, pio0_5): {
367 (2, FC4_RXD_SDA_MOSI_DATA): [
368 (into_usart4_rx_pin, Usart4, UsartRxPin),
369 (into_i2c4_sda_pin, I2c4, I2cSdaPin),
370 (into_spi4_mosi_pin, Spi4, SpiMosiPin),
371 (into_i2s4_sda_pin, I2s4, I2sSdaPin),
372 ]
373 }
374 (Pio0_5, pio0_5): {
375 (8, FC3_RTS_SCL_SSEL1): [
376 (into_usart3_rts_pin, Usart3, UsartRtsPin),
377 (into_i2c3_scl_pin, I2c3, I2cSclPin),
378 (into_spi3_cs_pin, Spi3, SpiCsPin),
379 ]
380 }
381 (Pio0_6, pio0_6): {
382 (1, FC3_SCK): [
383 (into_usart3_sclk_pin, Usart3, UsartSclkPin),
384 ]
385 }
386 (Pio0_7, pio0_7): {
387 (1, FC3_RTS_SCL_SSEL1): [
388 (into_usart3_rts_pin, Usart3, UsartRtsPin),
389 (into_i2c3_scl_pin, I2c3, I2cSclPin),
390 (into_spi3_cs_pin, Spi3, SpiCsPin),
391 ]
392 }
393 (Pio0_7, pio0_7): {
394 (3, FC5_SCK): [
395 (into_usart5_sclk_pin, Usart5, UsartSclkPin),
396 ]
397 }
398 (Pio0_7, pio0_7): {
399 (4, FC1_SCK): [
400 (into_usart1_sclk_pin, Usart1, UsartSclkPin),
401 ]
402 }
403 (Pio0_8, pio0_8): {
404 (1, FC3_SSEL3): [
405 (into_spi3_cs_pin, Spi3, SpiCsPin),
406 ]
407 }
408 (Pio0_8, pio0_8): {
409 (3, FC5_RXD_SDA_MOSI_DATA): [
410 (into_usart5_rx_pin, Usart5, UsartRxPin),
411 (into_i2c5_sda_pin, I2c5, I2cSdaPin),
412 (into_spi5_mosi_pin, Spi5, SpiMosiPin),
413 (into_i2s5_sda_pin, I2s5, I2sSdaPin),
414 ]
415 }
416 (Pio0_9, pio0_9): {
417 (1, FC3_SSEL2): [
418 (into_spi3_cs_pin, Spi3, SpiCsPin),
419 ]
420 }
421 (Pio0_9, pio0_9): {
422 (3, FC5_TXD_SCL_MISO_WS): [
423 (into_usart5_tx_pin, Usart5, UsartTxPin),
424 (into_i2c5_scl_pin, I2c5, I2cSclPin),
425 (into_spi5_miso_pin, Spi5, SpiMisoPin),
426 (into_i2s5_ws_pin, I2s5, I2sWsPin),
427 ]
428 }
429 (Pio0_10, pio0_10): {
430 (1, FC6_SCK): [
431 (into_usart6_sclk_pin, Usart6, UsartSclkPin),
432 ]
433 }
434 (Pio0_10, pio0_10): {
435 (4, FC1_TXD_SCL_MISO_WS): [
436 (into_usart1_tx_pin, Usart1, UsartTxPin),
437 (into_i2c1_scl_pin, I2c1, I2cSclPin),
438 (into_spi1_miso_pin, Spi1, SpiMisoPin),
439 (into_i2s1_ws_pin, I2s1, I2sWsPin),
440 ]
441 }
442 (Pio0_11, pio0_11): {
443 (1, FC6_RXD_SDA_MOSI_DATA): [
444 (into_usart6_rx_pin, Usart6, UsartRxPin),
445 (into_i2c6_sda_pin, I2c6, I2cSdaPin),
446 (into_spi6_mosi_pin, Spi6, SpiMosiPin),
447 (into_i2s6_sda_pin, I2s6, I2sSdaPin),
448 ]
449 }
450 (Pio0_12, pio0_12): {
451 (1, FC3_TXD_SCL_MISO_WS): [
452 (into_usart3_tx_pin, Usart3, UsartTxPin),
453 (into_i2c3_scl_pin, I2c3, I2cSclPin),
454 (into_spi3_miso_pin, Spi3, SpiMisoPin),
455 (into_i2s3_ws_pin, I2s3, I2sWsPin),
456 ]
457 }
458 (Pio0_12, pio0_12): {
459 (7, FC6_TXD_SCL_MISO_WS): [
460 (into_usart6_tx_pin, Usart6, UsartTxPin),
461 (into_i2c6_scl_pin, I2c6, I2cSclPin),
462 (into_spi6_miso_pin, Spi6, SpiMisoPin),
463 (into_i2s6_ws_pin, I2s6, I2sWsPin),
464 ]
465 }
466 (Pio0_13, pio0_13): {
467 (1, FC1_CTS_SDA_SSEL0): [
468 (into_usart1_cts_pin, Usart1, UsartCtsPin),
469 (into_i2c1_sda_pin, I2c1, I2cSdaPin),
470 (into_spi1_cs_pin, Spi1, SpiCsPin),
471 ]
472 }
473 (Pio0_13, pio0_13): {
474 (5, FC1_RXD_SDA_MOSI_DATA): [
475 (into_usart1_rx_pin, Usart1, UsartRxPin),
476 (into_spi1_mosi_pin, Spi1, SpiMosiPin),
478 (into_i2s1_sda_pin, I2s1, I2sSdaPin),
479 ]
480 }
481 (Pio0_14, pio0_14): {
482 (1, FC1_RTS_SCL_SSEL1): [
483 (into_usart1_rts_pin, Usart1, UsartRtsPin),
484 (into_i2c1_scl_pin, I2c1, I2cSclPin),
485 (into_spi1_cs_pin, Spi1, SpiCsPin),
486 ]
487 }
488 (Pio0_14, pio0_14): {
489 (6, FC1_TXD_SCL_MISO_WS): [
490 (into_usart1_tx_pin, Usart1, UsartTxPin),
491 (into_spi1_miso_pin, Spi1, SpiMisoPin),
493 (into_i2s1_ws_pin, I2s1, I2sWsPin),
494 ]
495 }
496 (Pio0_15, pio0_15): {
497 (1, FC6_CTS_SDA_SSEL0): [
498 (into_usart6_cts_pin, Usart6, UsartCtsPin),
499 (into_i2c6_sda_pin, I2c6, I2cSdaPin),
500 (into_spi6_cs_pin, Spi6, SpiCsPin),
501 ]
502 }
503 (Pio0_16, pio0_16): {
504 (1, FC4_TXD_SCL_MISO_WS): [
505 (into_usart4_tx_pin, Usart4, UsartTxPin),
506 (into_i2c4_scl_pin, I2c4, I2cSclPin),
507 (into_spi4_miso_pin, Spi4, SpiMisoPin),
508 (into_i2s4_ws_pin, I2s4, I2sWsPin),
509 ]
510 }
511 (Pio0_17, pio0_17): {
512 (1, FC4_SSEL2): [
513 (into_spi4_cs_pin, Spi4, SpiCsPin),
514 ]
515 }
516 (Pio0_18, pio0_18): {
517 (1, FC4_CTS_SDA_SSEL0): [
518 (into_usart4_cts_pin, Usart4, UsartCtsPin),
519 (into_i2c4_sda_pin, I2c4, I2cSdaPin),
520 (into_spi4_cs_pin, Spi4, SpiCsPin),
521 ]
522 }
523 (Pio0_19, pio0_19): {
524 (1, FC4_RTS_SCL_SSEL1): [
525 (into_usart4_rts_pin, Usart4, UsartRtsPin),
526 (into_i2c4_scl_pin, I2c4, I2cSclPin),
527 (into_spi4_cs_pin, Spi4, SpiCsPin),
528 ]
529 }
530 (Pio0_19, pio0_19): {
531 (7, FC7_TXD_SCL_MISO_WS): [
532 (into_usart7_tx_pin, Usart7, UsartTxPin),
533 (into_i2c7_scl_pin, I2c7, I2cSclPin),
534 (into_spi7_miso_pin, Spi7, SpiMisoPin),
535 (into_i2s7_ws_pin, I2s7, I2sWsPin),
536 ]
537 }
538 (Pio0_20, pio0_20): {
539 (1, FC3_CTS_SDA_SSEL0): [
540 (into_usart3_cts_pin, Usart3, UsartCtsPin),
541 (into_i2c3_sda_pin, I2c3, I2cSdaPin),
542 (into_spi3_cs_pin, Spi3, SpiCsPin),
543 ]
544 }
545 (Pio0_20, pio0_20): {
546 (7, FC7_RXD_SDA_MOSI_DATA): [
547 (into_usart7_rx_pin, Usart7, UsartRxPin),
548 (into_i2c7_sda_pin, I2c7, I2cSdaPin),
549 (into_spi7_mosi_pin, Spi7, SpiMosiPin),
550 (into_i2s7_sda_pin, I2s7, I2sSdaPin),
551 ]
552 }
553 (Pio0_20, pio0_20): {
554 (8, HS_SPI_SSEL0): [
555 (into_spi8_cs_pin, Spi8, SpiCsPin),
556 ]
557 }
558 (Pio0_21, pio0_21): {
559 (1, FC3_RTS_SCL_SSEL1): [
560 (into_usart3_rts_pin, Usart3, UsartRtsPin),
561 (into_i2c3_scl_pin, I2c3, I2cSclPin),
562 (into_spi3_cs_pin, Spi3, SpiCsPin),
563 ]
564 }
565 (Pio0_21, pio0_21): {
566 (7, FC7_SCK): [
567 (into_usart7_sclk_pin, Usart7, UsartSclkPin),
568 ]
569 }
570 (Pio0_22, pio0_22): {
571 (1, FC6_TXD_SCL_MISO_WS): [
572 (into_usart6_tx_pin, Usart6, UsartTxPin),
573 (into_i2c6_scl_pin, I2c6, I2cSclPin),
574 (into_spi6_miso_pin, Spi6, SpiMisoPin),
575 (into_i2s6_ws_pin, I2s6, I2sWsPin),
576 ]
577 }
578 (Pio0_23, pio0_23): {
579 (5, FC0_CTS_SDA_SSEL0): [
580 (into_usart0_cts_pin, Usart0, UsartCtsPin),
581 (into_i2c0_sda_pin, I2c0, I2cSdaPin),
582 (into_spi0_cs_pin, Spi0, SpiCsPin),
583 ]
584 }
585 (Pio0_24, pio0_24): {
586 (1, FC0_RXD_SDA_MOSI_DATA): [
587 (into_usart0_rx_pin, Usart0, UsartRxPin),
588 (into_i2c0_sda_pin, I2c0, I2cSdaPin),
589 (into_spi0_mosi_pin, Spi0, SpiMosiPin),
590 (into_i2s0_sda_pin, I2s0, I2sSdaPin),
591 ]
592 }
593 (Pio0_25, pio0_25): {
594 (1, FC0_TXD_SCL_MISO_WS): [
595 (into_usart0_tx_pin, Usart0, UsartTxPin),
596 (into_i2c0_scl_pin, I2c0, I2cSclPin),
597 (into_spi0_miso_pin, Spi0, SpiMisoPin),
598 (into_i2s0_ws_pin, I2s0, I2sWsPin),
599 ]
600 }
601 (Pio0_26, pio0_26): {
602 (1, FC2_RXD_SDA_MOSI_DATA): [
603 (into_usart2_rx_pin, Usart2, UsartRxPin),
604 (into_i2c2_sda_pin, I2c2, I2cSdaPin),
605 (into_spi2_mosi_pin, Spi2, SpiMosiPin),
606 (into_i2s2_sda_pin, I2s2, I2sSdaPin),
607 ]
608 }
609 (Pio0_26, pio0_26): {
610 (8, FC0_SCK): [
611 (into_usart0_sclk_pin, Usart0, UsartSclkPin),
612 ]
613 }
614 (Pio0_26, pio0_26): {
615 (9, HS_SPI_MOSI): [
616 (into_spi8_mosi_pin, Spi8, SpiMosiPin),
617 ]
618 }
619 (Pio0_27, pio0_27): {
620 (1, FC2_TXD_SCL_MISO_WS): [
621 (into_usart2_tx_pin, Usart2, UsartTxPin),
622 (into_i2c2_scl_pin, I2c2, I2cSclPin),
623 (into_spi2_miso_pin, Spi2, SpiMisoPin),
624 (into_i2s2_ws_pin, I2s2, I2sWsPin),
625 ]
626 }
627 (Pio0_27, pio0_27): {
628 (7, FC7_RXD_SDA_MOSI_DATA): [
629 (into_usart7_rx_pin, Usart7, UsartRxPin),
630 (into_i2c7_sda_pin, I2c7, I2cSdaPin),
631 (into_spi7_mosi_pin, Spi7, SpiMosiPin),
632 (into_i2s7_sda_pin, I2s7, I2sSdaPin),
633 ]
634 }
635 (Pio0_28, pio0_28): {
636 (1, FC0_SCK): [
637 (into_usart0_sclk_pin, Usart0, UsartSclkPin),
638 ]
639 }
640 (Pio0_29, pio0_29): {
641 (1, FC0_RXD_SDA_MOSI_DATA): [
642 (into_usart0_rx_pin, Usart0, UsartRxPin),
643 (into_i2c0_sda_pin, I2c0, I2cSdaPin),
644 (into_spi0_mosi_pin, Spi0, SpiMosiPin),
645 (into_i2s0_sda_pin, I2s0, I2sSdaPin),
646 ]
647 }
648 (Pio0_30, pio0_30): {
649 (1, FC0_TXD_SCL_MISO_WS): [
650 (into_usart0_tx_pin, Usart0, UsartTxPin),
651 (into_i2c0_scl_pin, I2c0, I2cSclPin),
652 (into_spi0_miso_pin, Spi0, SpiMisoPin),
653 (into_i2s0_ws_pin, I2s0, I2sWsPin),
654 ]
655 }
656 (Pio0_31, pio0_31): {
657 (1, FC0_CTS_SDA_SSEL0): [
658 (into_usart0_cts_pin, Usart0, UsartCtsPin),
659 (into_i2c0_sda_pin, I2c0, I2cSdaPin),
660 (into_spi0_cs_pin, Spi0, SpiCsPin),
661 ]
662 }
663 (Pio1_0, pio1_0): {
664 (1, FC0_RTS_SCL_SSEL1): [
665 (into_usart0_rts_pin, Usart0, UsartRtsPin),
666 (into_i2c0_scl_pin, I2c0, I2cSclPin),
667 (into_spi0_cs_pin, Spi0, SpiCsPin),
668 ]
669 }
670 (Pio1_1, pio1_1): {
671 (1, FC3_RXD_SDA_MOSI_DATA): [
672 (into_usart3_rx_pin, Usart3, UsartRxPin),
673 (into_i2c3_sda_pin, I2c3, I2cSdaPin),
674 (into_spi3_mosi_pin, Spi3, SpiMosiPin),
675 (into_i2s3_sda_pin, I2s3, I2sSdaPin),
676 ]
677 }
678 (Pio1_1, pio1_1): {
679 (5, HS_SPI_SSEL1): [
680 (into_spi8_cs_pin, Spi8, SpiCsPin),
681 ]
682 }
683 (Pio1_2, pio1_2): {
684 (6, HS_SPI_SCK): [
685 (into_spi8_sck_pin, Spi8, SpiSckPin),
686 ]
687 }
688 (Pio1_3, pio1_3): {
689 (6, HS_SPI_MISO): [
690 (into_spi8_miso_pin, Spi8, SpiMisoPin),
691 ]
692 }
693 (Pio1_4, pio1_4): {
694 (1, FC0_SCK): [
695 (into_usart0_sclk_pin, Usart0, UsartSclkPin),
696 ]
697 }
698 (Pio1_5, pio1_5): {
699 (1, FC0_RXD_SDA_MOSI_DATA): [
700 (into_usart0_rx_pin, Usart0, UsartRxPin),
701 (into_i2c0_sda_pin, I2c0, I2cSdaPin),
702 (into_spi0_mosi_pin, Spi0, SpiMosiPin),
703 (into_i2s0_sda_pin, I2s0, I2sSdaPin),
704 ]
705 }
706 (Pio1_6, pio1_6): {
707 (1, FC0_TXD_SCL_MISO_WS): [
708 (into_usart0_tx_pin, Usart0, UsartTxPin),
709 (into_i2c0_scl_pin, I2c0, I2cSclPin),
710 (into_spi0_miso_pin, Spi0, SpiMisoPin),
711 (into_i2s0_ws_pin, I2s0, I2sWsPin),
712 ]
713 }
714 (Pio1_7, pio1_7): {
715 (1, FC0_RTS_SCL_SSEL1): [
716 (into_usart0_rts_pin, Usart0, UsartRtsPin),
717 (into_i2c0_scl_pin, I2c0, I2cSclPin),
718 (into_spi0_cs_pin, Spi0, SpiCsPin),
719 ]
720 }
721 (Pio1_8, pio1_8): {
722 (1, FC0_CTS_SDA_SSEL0): [
723 (into_usart0_cts_pin, Usart0, UsartCtsPin),
724 (into_i2c0_sda_pin, I2c0, I2cSdaPin),
725 (into_spi0_cs_pin, Spi0, SpiCsPin),
726 ]
727 }
728 (Pio1_8, pio1_8): {
729 (5, FC4_SSEL2): [
730 (into_spi4_cs_pin, Spi4, SpiCsPin),
731 ]
732 }
733 (Pio1_9, pio1_9): {
734 (2, FC1_SCK): [
735 (into_usart1_sclk_pin, Usart1, UsartSclkPin),
736 ]
737 }
738 (Pio1_9, pio1_9): {
739 (5, FC4_CTS_SDA_SSEL0): [
740 (into_usart4_cts_pin, Usart4, UsartCtsPin),
741 (into_i2c4_sda_pin, I2c4, I2cSdaPin),
742 (into_spi4_cs_pin, Spi4, SpiCsPin),
743 ]
744 }
745 (Pio1_10, pio1_10): {
746 (2, FC1_RXD_SDA_MOSI_DATA): [
747 (into_usart1_rx_pin, Usart1, UsartRxPin),
748 (into_i2c1_sda_pin, I2c1, I2cSdaPin),
749 (into_spi1_mosi_pin, Spi1, SpiMosiPin),
750 (into_i2s1_sda_pin, I2s1, I2sSdaPin),
751 ]
752 }
753 (Pio1_11, pio1_11): {
754 (2, FC1_TXD_SCL_MISO_WS): [
755 (into_usart1_tx_pin, Usart1, UsartTxPin),
756 (into_i2c1_scl_pin, I2c1, I2cSclPin),
757 (into_spi1_miso_pin, Spi1, SpiMisoPin),
758 (into_i2s1_ws_pin, I2s1, I2sWsPin),
759 ]
760 }
761 (Pio1_12, pio1_12): {
762 (2, FC6_SCK): [
763 (into_usart6_sclk_pin, Usart6, UsartSclkPin),
764 ]
765 }
766 (Pio1_12, pio1_12): {
767 (5, HS_SPI_SSEL2): [
768 (into_spi8_cs_pin, Spi8, SpiCsPin),
769 ]
770 }
771 (Pio1_13, pio1_13): {
772 (2, FC6_RXD_SDA_MOSI_DATA): [
773 (into_usart6_rx_pin, Usart6, UsartRxPin),
774 (into_i2c6_sda_pin, I2c6, I2cSdaPin),
775 (into_spi6_mosi_pin, Spi6, SpiMosiPin),
776 (into_i2s6_sda_pin, I2s6, I2sSdaPin),
777 ]
778 }
779 (Pio1_14, pio1_14): {
780 (4, FC5_CTS_SDA_SSEL0): [
781 (into_usart5_cts_pin, Usart5, UsartCtsPin),
782 (into_i2c5_sda_pin, I2c5, I2cSdaPin),
783 (into_spi5_cs_pin, Spi5, SpiCsPin),
784 ]
785 }
786 (Pio1_15, pio1_15): {
787 (4, FC5_RTS_SCL_SSEL1): [
788 (into_usart5_rts_pin, Usart5, UsartRtsPin),
789 (into_i2c5_scl_pin, I2c5, I2cSclPin),
790 (into_spi5_cs_pin, Spi5, SpiCsPin),
791 ]
792 }
793 (Pio1_15, pio1_15): {
794 (5, FC4_RTS_SCL_SSEL1): [
795 (into_usart4_rts_pin, Usart4, UsartRtsPin),
796 (into_i2c4_scl_pin, I2c4, I2cSclPin),
797 (into_spi4_cs_pin, Spi4, SpiCsPin),
798 ]
799 }
800 (Pio1_16, pio1_16): {
801 (2, FC6_TXD_SCL_MISO_WS): [
802 (into_usart6_tx_pin, Usart6, UsartTxPin),
803 (into_i2c6_scl_pin, I2c6, I2cSclPin),
804 (into_spi6_miso_pin, Spi6, SpiMisoPin),
805 (into_i2s6_ws_pin, I2s6, I2sWsPin),
806 ]
807 }
808 (Pio1_17, pio1_17): {
809 (3, FC6_RTS_SCL_SSEL1): [
810 (into_usart6_rts_pin, Usart6, UsartRtsPin),
811 (into_i2c6_scl_pin, I2c6, I2cSclPin),
812 (into_spi6_cs_pin, Spi6, SpiCsPin),
813 ]
814 }
815 (Pio1_19, pio1_19): {
816 (5, FC4_SCK): [
817 (into_usart4_sclk_pin, Usart4, UsartSclkPin),
818 ]
819 }
820 (Pio1_20, pio1_20): {
821 (1, FC7_RTS_SCL_SSEL1): [
822 (into_usart7_rts_pin, Usart7, UsartRtsPin),
823 (into_i2c7_scl_pin, I2c7, I2cSclPin),
824 (into_spi7_cs_pin, Spi7, SpiCsPin),
825 ]
826 }
827 (Pio1_20, pio1_20): {
828 (5, FC4_TXD_SCL_MISO_WS): [
829 (into_usart4_tx_pin, Usart4, UsartTxPin),
830 (into_i2c4_scl_pin, I2c4, I2cSclPin),
831 (into_spi4_miso_pin, Spi4, SpiMisoPin),
832 (into_i2s4_ws_pin, I2s4, I2sWsPin),
833 ]
834 }
835 (Pio1_21, pio1_21): {
836 (1, FC7_CTS_SDA_SSEL0): [
837 (into_usart7_cts_pin, Usart7, UsartCtsPin),
838 (into_i2c7_sda_pin, I2c7, I2cSdaPin),
839 (into_spi7_cs_pin, Spi7, SpiCsPin),
840 ]
841 }
842 (Pio1_21, pio1_21): {
843 (5, FC4_RXD_SDA_MOSI_DATA): [
844 (into_usart4_rx_pin, Usart4, UsartRxPin),
845 (into_i2c4_sda_pin, I2c4, I2cSdaPin),
846 (into_spi4_mosi_pin, Spi4, SpiMosiPin),
847 (into_i2s4_sda_pin, I2s4, I2sSdaPin),
848 ]
849 }
850 (Pio1_22, pio1_22): {
851 (5, FC4_SSEL3): [
852 (into_spi4_cs_pin, Spi4, SpiCsPin),
853 ]
854 }
855 (Pio1_23, pio1_23): {
856 (1, FC2_SCK): [
857 (into_usart2_sclk_pin, Usart2, UsartSclkPin),
858 ]
859 }
860 (Pio1_23, pio1_23): {
861 (5, FC3_SSEL2): [
862 (into_spi3_cs_pin, Spi3, SpiCsPin),
863 ]
864 }
865 (Pio1_24, pio1_24): {
866 (1, FC2_RXD_SDA_MOSI_DATA): [
867 (into_usart2_rx_pin, Usart2, UsartRxPin),
868 (into_i2c2_sda_pin, I2c2, I2cSdaPin),
869 (into_spi2_mosi_pin, Spi2, SpiMosiPin),
870 (into_i2s2_sda_pin, I2s2, I2sSdaPin),
871 ]
872 }
873 (Pio1_24, pio1_24): {
874 (5, FC3_SSEL3): [
875 (into_spi3_cs_pin, Spi3, SpiCsPin),
876 ]
877 }
878 (Pio1_25, pio1_25): {
879 (1, FC2_TXD_SCL_MISO_WS): [
880 (into_usart2_tx_pin, Usart2, UsartTxPin),
881 (into_i2c2_scl_pin, I2c2, I2cSclPin),
882 (into_spi2_miso_pin, Spi2, SpiMisoPin),
883 (into_i2s2_ws_pin, I2s2, I2sWsPin),
884 ]
885 }
886 (Pio1_26, pio1_26): {
887 (1, FC2_CTS_SDA_SSEL0): [
888 (into_usart2_cts_pin, Usart2, UsartCtsPin),
889 (into_i2c2_sda_pin, I2c2, I2cSdaPin),
890 (into_spi2_cs_pin, Spi2, SpiCsPin),
891 ]
892 }
893 (Pio1_26, pio1_26): {
894 (5, HS_SPI_SSEL3): [
895 (into_spi8_cs_pin, Spi8, SpiCsPin),
896 ]
897 }
898 (Pio1_27, pio1_27): {
899 (1, FC2_RTS_SCL_SSEL1): [
900 (into_usart2_rts_pin, Usart2, UsartRtsPin),
901 (into_i2c2_scl_pin, I2c2, I2cSclPin),
902 (into_spi2_cs_pin, Spi2, SpiCsPin),
903 ]
904 }
905 (Pio1_28, pio1_28): {
906 (1, FC7_SCK): [
907 (into_usart7_sclk_pin, Usart7, UsartSclkPin),
908 ]
909 }
910 (Pio1_29, pio1_29): {
911 (1, FC7_RXD_SDA_MOSI_DATA): [
912 (into_usart7_rx_pin, Usart7, UsartRxPin),
913 (into_i2c7_sda_pin, I2c7, I2cSdaPin),
914 (into_spi7_mosi_pin, Spi7, SpiMosiPin),
915 (into_i2s7_sda_pin, I2s7, I2sSdaPin),
916 ]
917 }
918 (Pio1_30, pio1_30): {
919 (1, FC7_TXD_SCL_MISO_WS): [
920 (into_usart7_tx_pin, Usart7, UsartTxPin),
921 (into_i2c7_scl_pin, I2c7, I2cSclPin),
922 (into_spi7_miso_pin, Spi7, SpiMisoPin),
923 (into_i2s7_ws_pin, I2s7, I2sWsPin),
924 ]
925 }
926}
927
928impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c0> for Pin<PIO, Special<function::FC0_RTS_SCL_SSEL1>> {}
929impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c0> for Pin<PIO, Special<function::FC0_TXD_SCL_MISO_WS>> {}
930impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c1> for Pin<PIO, Special<function::FC1_RTS_SCL_SSEL1>> {}
931impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c1> for Pin<PIO, Special<function::FC1_TXD_SCL_MISO_WS>> {}
932impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c2> for Pin<PIO, Special<function::FC2_RTS_SCL_SSEL1>> {}
933impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c2> for Pin<PIO, Special<function::FC2_TXD_SCL_MISO_WS>> {}
934impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c3> for Pin<PIO, Special<function::FC3_RTS_SCL_SSEL1>> {}
935impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c3> for Pin<PIO, Special<function::FC3_TXD_SCL_MISO_WS>> {}
936impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c4> for Pin<PIO, Special<function::FC4_RTS_SCL_SSEL1>> {}
937impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c4> for Pin<PIO, Special<function::FC4_TXD_SCL_MISO_WS>> {}
938impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c5> for Pin<PIO, Special<function::FC5_RTS_SCL_SSEL1>> {}
939impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c5> for Pin<PIO, Special<function::FC5_TXD_SCL_MISO_WS>> {}
940impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c6> for Pin<PIO, Special<function::FC6_RTS_SCL_SSEL1>> {}
941impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c6> for Pin<PIO, Special<function::FC6_TXD_SCL_MISO_WS>> {}
942impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c7> for Pin<PIO, Special<function::FC7_RTS_SCL_SSEL1>> {}
943impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c7> for Pin<PIO, Special<function::FC7_TXD_SCL_MISO_WS>> {}
944impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c0> for Pin<PIO, Special<function::FC0_CTS_SDA_SSEL0>> {}
945impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c0> for Pin<PIO, Special<function::FC0_RXD_SDA_MOSI_DATA>> {}
946impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c1> for Pin<PIO, Special<function::FC1_CTS_SDA_SSEL0>> {}
947impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c1> for Pin<PIO, Special<function::FC1_RXD_SDA_MOSI_DATA>> {}
948impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c2> for Pin<PIO, Special<function::FC2_CTS_SDA_SSEL0>> {}
949impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c2> for Pin<PIO, Special<function::FC2_RXD_SDA_MOSI_DATA>> {}
950impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c3> for Pin<PIO, Special<function::FC3_CTS_SDA_SSEL0>> {}
951impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c3> for Pin<PIO, Special<function::FC3_RXD_SDA_MOSI_DATA>> {}
952impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c4> for Pin<PIO, Special<function::FC4_CTS_SDA_SSEL0>> {}
953impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c4> for Pin<PIO, Special<function::FC4_RXD_SDA_MOSI_DATA>> {}
954impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c5> for Pin<PIO, Special<function::FC5_CTS_SDA_SSEL0>> {}
955impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c5> for Pin<PIO, Special<function::FC5_RXD_SDA_MOSI_DATA>> {}
956impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c6> for Pin<PIO, Special<function::FC6_CTS_SDA_SSEL0>> {}
957impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c6> for Pin<PIO, Special<function::FC6_RXD_SDA_MOSI_DATA>> {}
958impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c7> for Pin<PIO, Special<function::FC7_CTS_SDA_SSEL0>> {}
959impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c7> for Pin<PIO, Special<function::FC7_RXD_SDA_MOSI_DATA>> {}
960impl<PIO: PinId> fc::I2sSdaPin<PIO, flexcomm::I2s0> for Pin<PIO, Special<function::FC0_RXD_SDA_MOSI_DATA>> {}
961impl<PIO: PinId> fc::I2sSdaPin<PIO, flexcomm::I2s1> for Pin<PIO, Special<function::FC1_RXD_SDA_MOSI_DATA>> {}
962impl<PIO: PinId> fc::I2sSdaPin<PIO, flexcomm::I2s2> for Pin<PIO, Special<function::FC2_RXD_SDA_MOSI_DATA>> {}
963impl<PIO: PinId> fc::I2sSdaPin<PIO, flexcomm::I2s3> for Pin<PIO, Special<function::FC3_RXD_SDA_MOSI_DATA>> {}
964impl<PIO: PinId> fc::I2sSdaPin<PIO, flexcomm::I2s4> for Pin<PIO, Special<function::FC4_RXD_SDA_MOSI_DATA>> {}
965impl<PIO: PinId> fc::I2sSdaPin<PIO, flexcomm::I2s5> for Pin<PIO, Special<function::FC5_RXD_SDA_MOSI_DATA>> {}
966impl<PIO: PinId> fc::I2sSdaPin<PIO, flexcomm::I2s6> for Pin<PIO, Special<function::FC6_RXD_SDA_MOSI_DATA>> {}
967impl<PIO: PinId> fc::I2sSdaPin<PIO, flexcomm::I2s7> for Pin<PIO, Special<function::FC7_RXD_SDA_MOSI_DATA>> {}
968impl<PIO: PinId> fc::I2sWsPin<PIO, flexcomm::I2s0> for Pin<PIO, Special<function::FC0_TXD_SCL_MISO_WS>> {}
969impl<PIO: PinId> fc::I2sWsPin<PIO, flexcomm::I2s1> for Pin<PIO, Special<function::FC1_TXD_SCL_MISO_WS>> {}
970impl<PIO: PinId> fc::I2sWsPin<PIO, flexcomm::I2s2> for Pin<PIO, Special<function::FC2_TXD_SCL_MISO_WS>> {}
971impl<PIO: PinId> fc::I2sWsPin<PIO, flexcomm::I2s3> for Pin<PIO, Special<function::FC3_TXD_SCL_MISO_WS>> {}
972impl<PIO: PinId> fc::I2sWsPin<PIO, flexcomm::I2s4> for Pin<PIO, Special<function::FC4_TXD_SCL_MISO_WS>> {}
973impl<PIO: PinId> fc::I2sWsPin<PIO, flexcomm::I2s5> for Pin<PIO, Special<function::FC5_TXD_SCL_MISO_WS>> {}
974impl<PIO: PinId> fc::I2sWsPin<PIO, flexcomm::I2s6> for Pin<PIO, Special<function::FC6_TXD_SCL_MISO_WS>> {}
975impl<PIO: PinId> fc::I2sWsPin<PIO, flexcomm::I2s7> for Pin<PIO, Special<function::FC7_TXD_SCL_MISO_WS>> {}
976impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi0> for Pin<PIO, Special<function::FC0_TXD_SCL_MISO_WS>> {}
977impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi1> for Pin<PIO, Special<function::FC1_TXD_SCL_MISO_WS>> {}
978impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi2> for Pin<PIO, Special<function::FC2_TXD_SCL_MISO_WS>> {}
979impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi3> for Pin<PIO, Special<function::FC3_TXD_SCL_MISO_WS>> {}
980impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi4> for Pin<PIO, Special<function::FC4_TXD_SCL_MISO_WS>> {}
981impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi5> for Pin<PIO, Special<function::FC5_TXD_SCL_MISO_WS>> {}
982impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi6> for Pin<PIO, Special<function::FC6_TXD_SCL_MISO_WS>> {}
983impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi7> for Pin<PIO, Special<function::FC7_TXD_SCL_MISO_WS>> {}
984impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi8> for Pin<PIO, Special<function::HS_SPI_MISO>> {}
985impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi0> for Pin<PIO, Special<function::FC0_RXD_SDA_MOSI_DATA>> {}
986impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi1> for Pin<PIO, Special<function::FC1_RXD_SDA_MOSI_DATA>> {}
987impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi2> for Pin<PIO, Special<function::FC2_RXD_SDA_MOSI_DATA>> {}
988impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi3> for Pin<PIO, Special<function::FC3_RXD_SDA_MOSI_DATA>> {}
989impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi4> for Pin<PIO, Special<function::FC4_RXD_SDA_MOSI_DATA>> {}
990impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi5> for Pin<PIO, Special<function::FC5_RXD_SDA_MOSI_DATA>> {}
991impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi6> for Pin<PIO, Special<function::FC6_RXD_SDA_MOSI_DATA>> {}
992impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi7> for Pin<PIO, Special<function::FC7_RXD_SDA_MOSI_DATA>> {}
993impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi8> for Pin<PIO, Special<function::HS_SPI_MOSI>> {}
994impl<PIO: PinId> fc::SpiSckPin<PIO, flexcomm::Spi8> for Pin<PIO, Special<function::HS_SPI_SCK>> {}
995impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi0> for Pin<PIO, Special<function::FC0_CTS_SDA_SSEL0>> {
996 const CS: ChipSelect = ChipSelect::Chip0;
997}
998impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi0> for Pin<PIO, Special<function::FC0_RTS_SCL_SSEL1>> {
999 const CS: ChipSelect = ChipSelect::Chip1;
1000}
1001impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi1> for Pin<PIO, Special<function::FC1_CTS_SDA_SSEL0>> {
1002 const CS: ChipSelect = ChipSelect::Chip0;
1003}
1004impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi1> for Pin<PIO, Special<function::FC1_RTS_SCL_SSEL1>> {
1005 const CS: ChipSelect = ChipSelect::Chip1;
1006}
1007impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi2> for Pin<PIO, Special<function::FC2_CTS_SDA_SSEL0>> {
1008 const CS: ChipSelect = ChipSelect::Chip0;
1009}
1010impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi2> for Pin<PIO, Special<function::FC2_RTS_SCL_SSEL1>> {
1011 const CS: ChipSelect = ChipSelect::Chip1;
1012}
1013impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi3> for Pin<PIO, Special<function::FC3_CTS_SDA_SSEL0>> {
1014 const CS: ChipSelect = ChipSelect::Chip0;
1015}
1016impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi3> for Pin<PIO, Special<function::FC3_RTS_SCL_SSEL1>> {
1017 const CS: ChipSelect = ChipSelect::Chip1;
1018}
1019impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi3> for Pin<PIO, Special<function::FC3_SSEL2>> {
1020 const CS: ChipSelect = ChipSelect::Chip2;
1021}
1022impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi3> for Pin<PIO, Special<function::FC3_SSEL3>> {
1023 const CS: ChipSelect = ChipSelect::Chip3;
1024}
1025impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi4> for Pin<PIO, Special<function::FC4_CTS_SDA_SSEL0>> {
1026 const CS: ChipSelect = ChipSelect::Chip0;
1027}
1028impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi4> for Pin<PIO, Special<function::FC4_RTS_SCL_SSEL1>> {
1029 const CS: ChipSelect = ChipSelect::Chip1;
1030}
1031impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi4> for Pin<PIO, Special<function::FC4_SSEL2>> {
1032 const CS: ChipSelect = ChipSelect::Chip2;
1033}
1034impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi4> for Pin<PIO, Special<function::FC4_SSEL3>> {
1035 const CS: ChipSelect = ChipSelect::Chip3;
1036}
1037impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi5> for Pin<PIO, Special<function::FC5_CTS_SDA_SSEL0>> {
1038 const CS: ChipSelect = ChipSelect::Chip0;
1039}
1040impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi5> for Pin<PIO, Special<function::FC5_RTS_SCL_SSEL1>> {
1041 const CS: ChipSelect = ChipSelect::Chip1;
1042}
1043impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi6> for Pin<PIO, Special<function::FC6_CTS_SDA_SSEL0>> {
1044 const CS: ChipSelect = ChipSelect::Chip0;
1045}
1046impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi6> for Pin<PIO, Special<function::FC6_RTS_SCL_SSEL1>> {
1047 const CS: ChipSelect = ChipSelect::Chip1;
1048}
1049impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi7> for Pin<PIO, Special<function::FC7_CTS_SDA_SSEL0>> {
1050 const CS: ChipSelect = ChipSelect::Chip0;
1051}
1052impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi7> for Pin<PIO, Special<function::FC7_RTS_SCL_SSEL1>> {
1053 const CS: ChipSelect = ChipSelect::Chip1;
1054}
1055impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi8> for Pin<PIO, Special<function::HS_SPI_SSEL0>> {
1056 const CS: ChipSelect = ChipSelect::Chip0;
1057}
1058impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi8> for Pin<PIO, Special<function::HS_SPI_SSEL1>> {
1059 const CS: ChipSelect = ChipSelect::Chip1;
1060}
1061impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi8> for Pin<PIO, Special<function::HS_SPI_SSEL2>> {
1062 const CS: ChipSelect = ChipSelect::Chip2;
1063}
1064impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi8> for Pin<PIO, Special<function::HS_SPI_SSEL3>> {
1065 const CS: ChipSelect = ChipSelect::Chip3;
1066}
1067impl<PIO: PinId> fc::UsartCtsPin<PIO, flexcomm::Usart0> for Pin<PIO, Special<function::FC0_CTS_SDA_SSEL0>> {}
1068impl<PIO: PinId> fc::UsartCtsPin<PIO, flexcomm::Usart1> for Pin<PIO, Special<function::FC1_CTS_SDA_SSEL0>> {}
1069impl<PIO: PinId> fc::UsartCtsPin<PIO, flexcomm::Usart2> for Pin<PIO, Special<function::FC2_CTS_SDA_SSEL0>> {}
1070impl<PIO: PinId> fc::UsartCtsPin<PIO, flexcomm::Usart3> for Pin<PIO, Special<function::FC3_CTS_SDA_SSEL0>> {}
1071impl<PIO: PinId> fc::UsartCtsPin<PIO, flexcomm::Usart4> for Pin<PIO, Special<function::FC4_CTS_SDA_SSEL0>> {}
1072impl<PIO: PinId> fc::UsartCtsPin<PIO, flexcomm::Usart5> for Pin<PIO, Special<function::FC5_CTS_SDA_SSEL0>> {}
1073impl<PIO: PinId> fc::UsartCtsPin<PIO, flexcomm::Usart6> for Pin<PIO, Special<function::FC6_CTS_SDA_SSEL0>> {}
1074impl<PIO: PinId> fc::UsartCtsPin<PIO, flexcomm::Usart7> for Pin<PIO, Special<function::FC7_CTS_SDA_SSEL0>> {}
1075impl<PIO: PinId> fc::UsartRtsPin<PIO, flexcomm::Usart0> for Pin<PIO, Special<function::FC0_RTS_SCL_SSEL1>> {}
1076impl<PIO: PinId> fc::UsartRtsPin<PIO, flexcomm::Usart1> for Pin<PIO, Special<function::FC1_RTS_SCL_SSEL1>> {}
1077impl<PIO: PinId> fc::UsartRtsPin<PIO, flexcomm::Usart2> for Pin<PIO, Special<function::FC2_RTS_SCL_SSEL1>> {}
1078impl<PIO: PinId> fc::UsartRtsPin<PIO, flexcomm::Usart3> for Pin<PIO, Special<function::FC3_RTS_SCL_SSEL1>> {}
1079impl<PIO: PinId> fc::UsartRtsPin<PIO, flexcomm::Usart4> for Pin<PIO, Special<function::FC4_RTS_SCL_SSEL1>> {}
1080impl<PIO: PinId> fc::UsartRtsPin<PIO, flexcomm::Usart5> for Pin<PIO, Special<function::FC5_RTS_SCL_SSEL1>> {}
1081impl<PIO: PinId> fc::UsartRtsPin<PIO, flexcomm::Usart6> for Pin<PIO, Special<function::FC6_RTS_SCL_SSEL1>> {}
1082impl<PIO: PinId> fc::UsartRtsPin<PIO, flexcomm::Usart7> for Pin<PIO, Special<function::FC7_RTS_SCL_SSEL1>> {}
1083impl<PIO: PinId> fc::UsartRxPin<PIO, flexcomm::Usart0> for Pin<PIO, Special<function::FC0_RXD_SDA_MOSI_DATA>> {}
1084impl<PIO: PinId> fc::UsartRxPin<PIO, flexcomm::Usart1> for Pin<PIO, Special<function::FC1_RXD_SDA_MOSI_DATA>> {}
1085impl<PIO: PinId> fc::UsartRxPin<PIO, flexcomm::Usart2> for Pin<PIO, Special<function::FC2_RXD_SDA_MOSI_DATA>> {}
1086impl<PIO: PinId> fc::UsartRxPin<PIO, flexcomm::Usart3> for Pin<PIO, Special<function::FC3_RXD_SDA_MOSI_DATA>> {}
1087impl<PIO: PinId> fc::UsartRxPin<PIO, flexcomm::Usart4> for Pin<PIO, Special<function::FC4_RXD_SDA_MOSI_DATA>> {}
1088impl<PIO: PinId> fc::UsartRxPin<PIO, flexcomm::Usart5> for Pin<PIO, Special<function::FC5_RXD_SDA_MOSI_DATA>> {}
1089impl<PIO: PinId> fc::UsartRxPin<PIO, flexcomm::Usart6> for Pin<PIO, Special<function::FC6_RXD_SDA_MOSI_DATA>> {}
1090impl<PIO: PinId> fc::UsartRxPin<PIO, flexcomm::Usart7> for Pin<PIO, Special<function::FC7_RXD_SDA_MOSI_DATA>> {}
1091impl<PIO: PinId> fc::UsartSclkPin<PIO, flexcomm::Usart0> for Pin<PIO, Special<function::FC0_SCK>> {}
1092impl<PIO: PinId> fc::UsartSclkPin<PIO, flexcomm::Usart1> for Pin<PIO, Special<function::FC1_SCK>> {}
1093impl<PIO: PinId> fc::UsartSclkPin<PIO, flexcomm::Usart2> for Pin<PIO, Special<function::FC2_SCK>> {}
1094impl<PIO: PinId> fc::UsartSclkPin<PIO, flexcomm::Usart3> for Pin<PIO, Special<function::FC3_SCK>> {}
1095impl<PIO: PinId> fc::UsartSclkPin<PIO, flexcomm::Usart4> for Pin<PIO, Special<function::FC4_SCK>> {}
1096impl<PIO: PinId> fc::UsartSclkPin<PIO, flexcomm::Usart5> for Pin<PIO, Special<function::FC5_SCK>> {}
1097impl<PIO: PinId> fc::UsartSclkPin<PIO, flexcomm::Usart6> for Pin<PIO, Special<function::FC6_SCK>> {}
1098impl<PIO: PinId> fc::UsartSclkPin<PIO, flexcomm::Usart7> for Pin<PIO, Special<function::FC7_SCK>> {}
1099impl<PIO: PinId> fc::UsartTxPin<PIO, flexcomm::Usart0> for Pin<PIO, Special<function::FC0_TXD_SCL_MISO_WS>> {}
1100impl<PIO: PinId> fc::UsartTxPin<PIO, flexcomm::Usart1> for Pin<PIO, Special<function::FC1_TXD_SCL_MISO_WS>> {}
1101impl<PIO: PinId> fc::UsartTxPin<PIO, flexcomm::Usart2> for Pin<PIO, Special<function::FC2_TXD_SCL_MISO_WS>> {}
1102impl<PIO: PinId> fc::UsartTxPin<PIO, flexcomm::Usart3> for Pin<PIO, Special<function::FC3_TXD_SCL_MISO_WS>> {}
1103impl<PIO: PinId> fc::UsartTxPin<PIO, flexcomm::Usart4> for Pin<PIO, Special<function::FC4_TXD_SCL_MISO_WS>> {}
1104impl<PIO: PinId> fc::UsartTxPin<PIO, flexcomm::Usart5> for Pin<PIO, Special<function::FC5_TXD_SCL_MISO_WS>> {}
1105impl<PIO: PinId> fc::UsartTxPin<PIO, flexcomm::Usart6> for Pin<PIO, Special<function::FC6_TXD_SCL_MISO_WS>> {}
1106impl<PIO: PinId> fc::UsartTxPin<PIO, flexcomm::Usart7> for Pin<PIO, Special<function::FC7_TXD_SCL_MISO_WS>> {}