Skip to main content

lpc55_hal/drivers/
pins.rs

1use crate::{
2    peripherals::{ctimer, flexcomm, gpio::Gpio, iocon::Iocon},
3    typestates::{
4        init_state,
5        pin::{
6            // All the I2cSclPin etc. are here
7            flexcomm as fc,
8            flexcomm::ChipSelect,
9            function,
10            state::{self, Special},
11        },
12    },
13};
14
15pub use crate::typestates::pin::gpio::{direction, Level};
16
17// Implements GPIO pins
18pub mod gpio;
19
20pub use crate::typestates::pin::{PinId, PinType};
21
22use crate::typestates::reg_proxy::RegClusterProxy;
23
24/// Main API to control for controlling pins:w
25pub struct Pin<T: PinId, S: state::PinState> {
26    pub(crate) id: T,
27    #[allow(dead_code)]
28    pub(crate) state: S,
29}
30
31impl Pin<Pio0_22, state::Unused> {
32    pub fn into_usb0_vbus_pin(
33        self,
34        iocon: &mut Iocon<init_state::Enabled>,
35    ) -> Pin<Pio0_22, state::Special<function::USB0_VBUS>> {
36        iocon.raw.pio0_22.modify(
37            |_, w| {
38                w.func()
39                    .alt7() // FUNC7, pin configured as USB0_VBUS
40                    .mode()
41                    .inactive() // MODE_INACT, no additional pin function
42                    .slew()
43                    .standard() // SLEW_STANDARD, standard mode, slew rate control is enabled
44                    .invert()
45                    .disabled() // INV_DI, input function is not inverted
46                    .digimode()
47                    .digital() // DIGITAL_EN, enable digital fucntion
48                    .od()
49                    .normal()
50            }, // OPENDRAIN_DI, open drain is disabled
51        );
52
53        Pin {
54            id: self.id,
55            state: state::Special {
56                _function: function::USB0_VBUS,
57            },
58        }
59    }
60}
61
62// seems a bit inefficient, but want to be able to safely
63// take individual pins instead of the whole bunch
64static mut PIN_TAKEN: [[bool; 32]; 2] = [[false; 32]; 2];
65
66macro_rules! pins {
67    ($(
68        $field:ident,
69        $pin:ident,
70        $port:expr,
71        $number:expr,
72        $type:expr,
73        $default_state_ty:ty,
74        $default_state_val:expr;
75    )*) => {
76        /// Provides access to all pins
77        #[allow(missing_docs)]
78        pub struct Pins {
79            $(pub $field: Pin<$pin, $default_state_ty>,)*
80        }
81
82        impl Pins {
83
84            fn any_taken() -> bool {
85                unsafe {
86                    let any_port_0 = PIN_TAKEN[0].iter().any(|x| *x);
87                    let any_port_1 = PIN_TAKEN[1].iter().any(|x| *x);
88                    any_port_0 || any_port_1
89                }
90            }
91
92            fn set_all_taken() {
93                unsafe {
94                    for entry in PIN_TAKEN[0].iter_mut() { *entry = true; }
95                    for entry in PIN_TAKEN[1].iter_mut() { *entry = true; }
96                }
97            }
98
99            fn set_all_released() {
100                unsafe {
101                    for entry in PIN_TAKEN[0].iter_mut() { *entry = false; }
102                    for entry in PIN_TAKEN[1].iter_mut() { *entry = false; }
103                }
104            }
105
106            pub fn take() -> Option<Self> {
107                if Self::any_taken() {
108                    None
109                } else {
110                    Some(unsafe {
111                        Self::set_all_taken();
112                        Self::steal()
113                    } )
114                }
115            }
116
117            pub fn release(self) {
118                Self::set_all_released();
119            }
120
121            /// # Safety
122            ///
123            /// Steals the PIN, must not be called if the PIN is already owned
124            pub unsafe fn steal() -> Self {
125                Self {
126                    $(
127                        $field: $pin::steal(),
128                    )*
129                }
130            }
131        }
132
133
134        $(
135            /// Identifies a specific pin
136            ///
137            /// Pins can be `take`n individually, or en bloc via `Pins`.
138            #[allow(non_camel_case_types)]
139            pub struct $pin(());
140
141            impl Pin<$pin, state::Unused>  {
142                /// Transition pin to GPIO state
143                pub fn into_gpio_pin(
144                    self,
145                    iocon: &mut Iocon<init_state::Enabled>,
146                    _: &mut Gpio<init_state::Enabled>,
147                ) -> Pin<$pin, state::Gpio<direction::Unknown>> {
148                    // TODO: need to set FUNC to 0 at minimum
149                    iocon.raw.$field.modify(|_, w| w
150                        .func().alt0() // FUNC $i, pin configured as $FUNCTION
151                        .mode().inactive() // MODE_INACT, no additional pin function
152                        .slew().standard() // SLEW_STANDARD, standard mode, slew rate control is enabled
153                        .invert().disabled() // INV_DI, input function is not inverted
154                        .digimode().digital() // DIGITAL_EN, enable digital fucntion
155                        .od().normal() // OPENDRAIN_DI, open drain is disabled
156                    );
157                    Pin {
158                        id: self.id,
159                        state: state::Gpio {
160                            // b: RegClusterProxy::new(),
161                            // w: RegClusterProxy::new(),
162                            dirset: RegClusterProxy::new(),
163                            dirclr: RegClusterProxy::new(),
164                            pin: RegClusterProxy::new(),
165                            set: RegClusterProxy::new(),
166                            clr: RegClusterProxy::new(),
167
168                            _direction: direction::Unknown,
169                        },
170                    }
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                /// # Safety
192                ///
193                /// Steals the PIN, must not be called if the PIN is already owned
194                pub unsafe fn steal() -> Pin<Self, $default_state_ty> {
195                    PIN_TAKEN[$port][$number] = true;
196                    Pin {
197                        id: Self(()),
198                        state: $default_state_val,
199                    }
200                }
201            }
202
203            impl PinId for $pin {
204                const PORT: usize = $port;
205                const NUMBER: u8 = $number;
206                const MASK: u32 = 0x1 << $number;
207                const OFFSET: usize = (0x20 << $port) + (0x1 << $number);
208                const TYPE: PinType = $type;
209            }
210        )*
211    }
212}
213
214macro_rules! analog_pins {
215    ($(
216        $field:ident,
217        $pin:ident,
218        $port:expr,
219        $number:expr,
220        $type:expr,
221        $default_state_ty:ty,
222        $default_state_val:expr,
223        $channel:expr;
224    )*) => {
225        /// Transition pin to Analog input
226        $(
227            impl Pin<$pin, state::Unused>  {
228                pub fn into_analog_input(
229                    self,
230                    iocon: &mut Iocon<init_state::Enabled>,
231                    _: &mut Gpio<init_state::Enabled>,
232                ) -> Pin<$pin, state::Analog<direction::Input>> {
233
234                    // TODO: need to set FUNC to 0 at minimum
235                    iocon.raw.$field.modify(|_, w| w
236                        .func().alt0() // FUNC $i, pin configured as $FUNCTION
237                        .mode().inactive() // MODE_INACT, no additional pin function
238                        .slew().standard() // SLEW_STANDARD, standard mode, slew rate control is enabled
239                        .invert().disabled() // INV_DI, input function is not inverted
240                        .digimode().analog() // DIGITAL_EN, enable digital fucntion
241                        .od().normal() // OPENDRAIN_DI, open drain is disabled
242                        .asw().set_bit() // ASW, analog input enabled
243                    );
244
245                    // self.state.dirclr[T::PORT].write(|w| unsafe { w.dirclrp().bits(T::MASK) });
246                    let pin = Pin {
247                        id: self.id,
248                        state: state::Analog{
249                            channel: $channel,
250                            dirclr: RegClusterProxy::new(),
251                            _direction: direction::Unknown,
252                        },
253                    };
254                    return pin.into_input();
255                }
256            }
257        )*
258    }
259}
260
261macro_rules! ctimer_match_output_pins {
262    ($(
263        $ctimer:ty,
264        $method:ident,
265        $field:ident,
266        $pin:ident,
267        $func:expr,
268        $channel_type:ident,
269        $channel_number:expr;
270    )*) => {
271        /// Transition pin to CTIMER/PWM output
272        $(
273            impl Pin<$pin, state::Unused>  {
274                pub fn $method (
275                    self,
276                    iocon: &mut Iocon<init_state::Enabled>,
277                ) -> Pin<$pin, state::Special<function::$channel_type<$ctimer>>> {
278
279                    // TODO: need to set FUNC to 0 at minimum
280                    iocon.raw.$field.modify(|_, w| unsafe { w
281                        .func().bits($func) // CMAT function
282                        .mode().inactive() // MODE_INACT, no additional pin function
283                        .slew().standard() // SLEW_STANDARD, standard mode, slew rate control is enabled
284                        .invert().disabled() // INV_DI, input function is not inverted
285                        .digimode().digital() // DIGITAL_EN, enable digital function
286                        .od().normal() // OPENDRAIN_DI, open drain is disabled
287                    });
288
289                    Pin {
290                        id: self.id,
291                        state: state::Special{
292                            _function: function::$channel_type {_marker: core::marker::PhantomData}
293                        }
294                    }
295                }
296            }
297
298            impl Pin<$pin, state::Special<function::$channel_type<$ctimer>>> {
299                pub const CHANNEL: u8 = $channel_number;
300                pub fn get_channel(&self) -> u8 {
301                    Self::CHANNEL
302                }
303            }
304        )*
305    }
306}
307
308pins!(
309    pio0_0 , Pio0_0 , 0,  0, PinType::A, state::Unused, state::Unused;
310    pio0_1 , Pio0_1 , 0,  1, PinType::D, state::Unused, state::Unused;
311    pio0_2 , Pio0_2 , 0,  2, PinType::D, state::Unused, state::Unused;
312    pio0_3 , Pio0_3 , 0,  3, PinType::D, state::Unused, state::Unused;
313    pio0_4 , Pio0_4 , 0,  4, PinType::D, state::Unused, state::Unused;
314    pio0_5 , Pio0_5 , 0,  5, PinType::D, state::Unused, state::Unused;
315    pio0_6 , Pio0_6 , 0,  6, PinType::D, state::Unused, state::Unused;
316    pio0_7 , Pio0_7 , 0,  7, PinType::D, state::Unused, state::Unused;
317    pio0_8 , Pio0_8 , 0,  8, PinType::D, state::Unused, state::Unused;
318    pio0_9 , Pio0_9 , 0,  9, PinType::A, state::Unused, state::Unused;
319    pio0_10, Pio0_10, 0, 10, PinType::A, state::Unused, state::Unused;
320    pio0_11, Pio0_11, 0, 11, PinType::A, state::Special<function::SWCLK>,
321        state::Special{ _function: function::SWCLK {} };
322    pio0_12, Pio0_12, 0, 12, PinType::A, state::Special<function::SWDIO>,
323        state::Special{ _function: function::SWDIO {} };
324    pio0_13, Pio0_13, 0, 13, PinType::I, state::Unused, state::Unused;
325    pio0_14, Pio0_14, 0, 14, PinType::I, state::Unused, state::Unused;
326    pio0_15, Pio0_15, 0, 15, PinType::A, state::Unused, state::Unused;
327    pio0_16, Pio0_16, 0, 16, PinType::A, state::Unused, state::Unused;
328    pio0_17, Pio0_17, 0, 17, PinType::D, state::Unused, state::Unused;
329    pio0_18, Pio0_18, 0, 18, PinType::A, state::Unused, state::Unused;
330    pio0_19, Pio0_19, 0, 19, PinType::D, state::Unused, state::Unused;
331    pio0_20, Pio0_20, 0, 20, PinType::D, state::Unused, state::Unused;
332    pio0_21, Pio0_21, 0, 21, PinType::D, state::Unused, state::Unused;
333    pio0_22, Pio0_22, 0, 22, PinType::D, state::Unused, state::Unused;
334    pio0_23, Pio0_23, 0, 23, PinType::A, state::Unused, state::Unused;
335    pio0_24, Pio0_24, 0, 24, PinType::D, state::Unused, state::Unused;
336    pio0_25, Pio0_25, 0, 25, PinType::D, state::Unused, state::Unused;
337    pio0_26, Pio0_26, 0, 26, PinType::D, state::Unused, state::Unused;
338    pio0_27, Pio0_27, 0, 27, PinType::D, state::Unused, state::Unused;
339    pio0_28, Pio0_28, 0, 28, PinType::D, state::Unused, state::Unused;
340    pio0_29, Pio0_29, 0, 29, PinType::D, state::Unused, state::Unused;
341    pio0_30, Pio0_30, 0, 30, PinType::D, state::Unused, state::Unused;
342    pio0_31, Pio0_31, 0, 31, PinType::A, state::Unused, state::Unused;
343
344    pio1_0 , Pio1_0 , 1,  0, PinType::A, state::Unused, state::Unused;
345    pio1_1 , Pio1_1 , 1,  1, PinType::D, state::Unused, state::Unused;
346    pio1_2 , Pio1_2 , 1,  2, PinType::D, state::Unused, state::Unused;
347    pio1_3 , Pio1_3 , 1,  3, PinType::D, state::Unused, state::Unused;
348    pio1_4 , Pio1_4 , 1,  4, PinType::D, state::Unused, state::Unused;
349    pio1_5 , Pio1_5 , 1,  5, PinType::D, state::Unused, state::Unused;
350    pio1_6 , Pio1_6 , 1,  6, PinType::D, state::Unused, state::Unused;
351    pio1_7 , Pio1_7 , 1,  7, PinType::D, state::Unused, state::Unused;
352    pio1_8 , Pio1_8 , 1,  8, PinType::A, state::Unused, state::Unused;
353    pio1_9 , Pio1_9 , 1,  9, PinType::A, state::Unused, state::Unused;
354    pio1_10, Pio1_10, 1, 10, PinType::D, state::Unused, state::Unused;
355    pio1_11, Pio1_11, 1, 11, PinType::D, state::Unused, state::Unused;
356    pio1_12, Pio1_12, 1, 12, PinType::D, state::Unused, state::Unused;
357    pio1_13, Pio1_13, 1, 13, PinType::D, state::Unused, state::Unused;
358    pio1_14, Pio1_14, 1, 14, PinType::A, state::Unused, state::Unused;
359    pio1_15, Pio1_15, 1, 15, PinType::D, state::Unused, state::Unused;
360    pio1_16, Pio1_16, 1, 16, PinType::D, state::Unused, state::Unused;
361    pio1_17, Pio1_17, 1, 17, PinType::D, state::Unused, state::Unused;
362    pio1_18, Pio1_18, 1, 18, PinType::D, state::Unused, state::Unused;
363    pio1_19, Pio1_19, 1, 19, PinType::A, state::Unused, state::Unused;
364    pio1_20, Pio1_20, 1, 20, PinType::D, state::Unused, state::Unused;
365    pio1_21, Pio1_21, 1, 21, PinType::D, state::Unused, state::Unused;
366    pio1_22, Pio1_22, 1, 22, PinType::D, state::Unused, state::Unused;
367    pio1_23, Pio1_23, 1, 23, PinType::D, state::Unused, state::Unused;
368    pio1_24, Pio1_24, 1, 24, PinType::D, state::Unused, state::Unused;
369    pio1_25, Pio1_25, 1, 25, PinType::D, state::Unused, state::Unused;
370    pio1_26, Pio1_26, 1, 26, PinType::D, state::Unused, state::Unused;
371    pio1_27, Pio1_27, 1, 27, PinType::D, state::Unused, state::Unused;
372    pio1_28, Pio1_28, 1, 28, PinType::D, state::Unused, state::Unused;
373    pio1_29, Pio1_29, 1, 29, PinType::D, state::Unused, state::Unused;
374    pio1_30, Pio1_30, 1, 30, PinType::D, state::Unused, state::Unused;
375    pio1_31, Pio1_31, 1, 31, PinType::D, state::Unused, state::Unused;
376);
377
378analog_pins!(
379    pio0_0 , Pio0_0 , 0,  0, PinType::A, state::Unused, state::Unused, 0u8;     // A = 0, B = 1, ...
380    pio0_9 , Pio0_9 , 0,  9, PinType::A, state::Unused, state::Unused, 1u8;
381    pio0_10, Pio0_10, 0, 10, PinType::A, state::Unused, state::Unused, 1u8;
382    pio0_11, Pio0_11, 0, 11, PinType::A, state::Special<function::SWCLK>,
383        state::Special{ _function: function::SWCLK {} }, 9u8;
384    pio0_12, Pio0_12, 0, 12, PinType::A, state::Special<function::SWDIO>,
385        state::Special{ _function: function::SWDIO {} }, 10u8;
386    pio0_15, Pio0_15, 0, 15, PinType::A, state::Unused, state::Unused, 2u8;
387    pio0_16, Pio0_16, 0, 16, PinType::A, state::Unused, state::Unused, 8u8;
388    pio0_18, Pio0_18, 0, 18, PinType::A, state::Unused, state::Unused, 2u8;
389    pio0_23, Pio0_23, 0, 23, PinType::A, state::Unused, state::Unused, 0u8;
390    pio0_31, Pio0_31, 0, 31, PinType::A, state::Unused, state::Unused, 3u8;
391
392    pio1_0 , Pio1_0 , 1,  0, PinType::A, state::Unused, state::Unused, 11u8;
393    pio1_8 , Pio1_8 , 1,  8, PinType::A, state::Unused, state::Unused, 4u8;
394    pio1_9 , Pio1_9 , 1,  9, PinType::A, state::Unused, state::Unused, 12u8;
395    pio1_14, Pio1_14, 1, 14, PinType::A, state::Unused, state::Unused, 3u8;
396    pio1_19, Pio1_19, 1, 19, PinType::A, state::Unused, state::Unused, 0xffu8;   // ACMP_ref
397);
398
399ctimer_match_output_pins!(
400    ctimer::Ctimer1<init_state::Enabled>, into_match_output, pio1_16 , Pio1_16, 3, MATCH_OUTPUT3, 3;
401    ctimer::Ctimer3<init_state::Enabled>, into_match_output, pio0_5 , Pio0_5, 3, MATCH_OUTPUT0, 0;
402    ctimer::Ctimer3<init_state::Enabled>, into_match_output, pio1_21 , Pio1_21, 3, MATCH_OUTPUT2, 2;
403    ctimer::Ctimer3<init_state::Enabled>, into_match_output, pio1_19 , Pio1_19, 3, MATCH_OUTPUT1, 1;
404
405    ctimer::Ctimer2<init_state::Enabled>, into_match_output, pio1_7, Pio1_7, 3, MATCH_OUTPUT2, 2;
406    ctimer::Ctimer2<init_state::Enabled>, into_match_output, pio1_6, Pio1_6, 3, MATCH_OUTPUT1, 1;
407    ctimer::Ctimer2<init_state::Enabled>, into_match_output, pio1_4, Pio1_4, 3, MATCH_OUTPUT1, 1;
408);
409
410macro_rules! special_pins {
411    ($(
412        ($Pin:ty,$pin:ident): {
413            $(
414                ($alt_func:expr, $SPECIAL_FUNCTION:ident): [
415                    $(
416                        ($method:ident,$Peripheral:ty,$Marker:ident),
417                    )*
418                ]
419            )+
420    })*) => {
421
422    $($($(
423        impl Pin<$Pin, state::Unused> {
424            pub fn $method(
425                self,
426                iocon: &mut Iocon<init_state::Enabled>,
427            ) ->Pin<$Pin, state::Special<function::$SPECIAL_FUNCTION>> {
428                // unfortunately, data sheet has more FUNCs than SVD has alts
429                // otherwise, it would be safe
430                iocon.raw.$pin.modify(|_, w| unsafe {
431                    w
432                    .func().bits($alt_func) // FUNC $i, pin configured as $FUNCTION
433                    .mode().inactive() // MODE_INACT, no additional pin function
434                    .slew().standard() // SLEW_STANDARD, standard mode, slew rate control is enabled
435                    .invert().disabled() // INV_DI, input function is not inverted
436                    .digimode().digital() // DIGITAL_EN, enable digital function
437                    .od().normal() // OPENDRAIN_DI, open drain is disabled
438                });
439
440                Pin {
441                    id: self.id,
442                    state: Special {
443                        _function: function::$SPECIAL_FUNCTION {},
444
445                    },
446                }
447            }
448        }
449    )*)+)*
450    }
451}
452
453///////////////////////////////////////////////////////////////////////////////
454// all that follows is generated with `scripts/extract-flexcomm-data.py`
455// NB: Pio0_13 and Pio0_14 have a repetition of methods, manually commented out
456// Note also that these two are precisely the specialized I2C pins.
457///////////////////////////////////////////////////////////////////////////////
458
459// TODO: remove the $Marker argument
460special_pins! {
461    (Pio0_0, pio0_0): {
462        (2, FC3_SCK): [
463            (into_usart3_sclk_pin, Usart3, UsartSclkPin),
464            (into_spi3_sck_pin, Spi3, SpiSckPin),
465        ]
466    }
467    (Pio0_1, pio0_1): {
468        (2, FC3_CTS_SDA_SSEL0): [
469            (into_usart3_cts_pin, Usart3, UsartCtsPin),
470            (into_i2c3_sda_pin, I2c3, I2cSdaPin),
471            (into_spi3_cs_pin, Spi3, SpiCsPin),
472        ]
473    }
474    (Pio0_2, pio0_2): {
475        (1, FC3_TXD_SCL_MISO_WS): [
476            (into_usart3_tx_pin, Usart3, UsartTxPin),
477            (into_i2c3_scl_pin, I2c3, I2cSclPin),
478            (into_spi3_miso_pin, Spi3, SpiMisoPin),
479            (into_i2s3_ws_pin, I2s3, I2sWsPin),
480        ]
481    }
482    (Pio0_3, pio0_3): {
483        (1, FC3_RXD_SDA_MOSI_DATA): [
484            (into_usart3_rx_pin, Usart3, UsartRxPin),
485            (into_i2c3_sda_pin, I2c3, I2cSdaPin),
486            (into_spi3_mosi_pin, Spi3, SpiMosiPin),
487            (into_i2s3_sda_pin, I2s3, I2sSdaPin),
488        ]
489    }
490    (Pio0_4, pio0_4): {
491        (2, FC4_SCK): [
492            (into_usart4_sclk_pin, Usart4, UsartSclkPin),
493            (into_spi4_sck_pin, Spi4, SpiSckPin),
494        ]
495    }
496    (Pio0_5, pio0_5): {
497        (2, FC4_RXD_SDA_MOSI_DATA): [
498            (into_usart4_rx_pin, Usart4, UsartRxPin),
499            (into_i2c4_sda_pin, I2c4, I2cSdaPin),
500            (into_spi4_mosi_pin, Spi4, SpiMosiPin),
501            (into_i2s4_sda_pin, I2s4, I2sSdaPin),
502        ]
503    }
504    (Pio0_5, pio0_5): {
505        (8, FC3_RTS_SCL_SSEL1): [
506            (into_usart3_rts_pin, Usart3, UsartRtsPin),
507            (into_i2c3_scl_pin, I2c3, I2cSclPin),
508            (into_spi3_cs_pin, Spi3, SpiCsPin),
509        ]
510    }
511    (Pio0_6, pio0_6): {
512        (1, FC3_SCK): [
513            (into_usart3_sclk_pin, Usart3, UsartSclkPin),
514            (into_spi3_sck_pin, Spi3, SpiSckPin),
515        ]
516    }
517    (Pio0_7, pio0_7): {
518        (1, FC3_RTS_SCL_SSEL1): [
519            (into_usart3_rts_pin, Usart3, UsartRtsPin),
520            (into_i2c3_scl_pin, I2c3, I2cSclPin),
521            (into_spi3_cs_pin, Spi3, SpiCsPin),
522        ]
523    }
524    (Pio0_7, pio0_7): {
525        (3, FC5_SCK): [
526            (into_usart5_sclk_pin, Usart5, UsartSclkPin),
527            (into_spi5_sck_pin, Spi5, SpiSckPin),
528        ]
529    }
530    (Pio0_7, pio0_7): {
531        (4, FC1_SCK): [
532            (into_usart1_sclk_pin, Usart1, UsartSclkPin),
533            (into_spi1_sck_pin, Spi1, SpiSckPin),
534        ]
535    }
536    (Pio0_8, pio0_8): {
537        (1, FC3_SSEL3): [
538            (into_spi3_cs_pin, Spi3, SpiCsPin),
539        ]
540    }
541    (Pio0_8, pio0_8): {
542        (3, FC5_RXD_SDA_MOSI_DATA): [
543            (into_usart5_rx_pin, Usart5, UsartRxPin),
544            (into_i2c5_sda_pin, I2c5, I2cSdaPin),
545            (into_spi5_mosi_pin, Spi5, SpiMosiPin),
546            (into_i2s5_sda_pin, I2s5, I2sSdaPin),
547        ]
548    }
549    (Pio0_9, pio0_9): {
550        (1, FC3_SSEL2): [
551            (into_spi3_cs_pin, Spi3, SpiCsPin),
552        ]
553    }
554    (Pio0_9, pio0_9): {
555        (3, FC5_TXD_SCL_MISO_WS): [
556            (into_usart5_tx_pin, Usart5, UsartTxPin),
557            (into_i2c5_scl_pin, I2c5, I2cSclPin),
558            (into_spi5_miso_pin, Spi5, SpiMisoPin),
559            (into_i2s5_ws_pin, I2s5, I2sWsPin),
560        ]
561    }
562    (Pio0_10, pio0_10): {
563        (1, FC6_SCK): [
564            (into_usart6_sclk_pin, Usart6, UsartSclkPin),
565            (into_spi6_sck_pin, Spi6, SpiSckPin),
566        ]
567    }
568    (Pio0_10, pio0_10): {
569        (4, FC1_TXD_SCL_MISO_WS): [
570            (into_usart1_tx_pin, Usart1, UsartTxPin),
571            (into_i2c1_scl_pin, I2c1, I2cSclPin),
572            (into_spi1_miso_pin, Spi1, SpiMisoPin),
573            (into_i2s1_ws_pin, I2s1, I2sWsPin),
574        ]
575    }
576    (Pio0_11, pio0_11): {
577        (1, FC6_RXD_SDA_MOSI_DATA): [
578            (into_usart6_rx_pin, Usart6, UsartRxPin),
579            (into_i2c6_sda_pin, I2c6, I2cSdaPin),
580            (into_spi6_mosi_pin, Spi6, SpiMosiPin),
581            (into_i2s6_sda_pin, I2s6, I2sSdaPin),
582        ]
583    }
584    (Pio0_12, pio0_12): {
585        (1, FC3_TXD_SCL_MISO_WS): [
586            (into_usart3_tx_pin, Usart3, UsartTxPin),
587            (into_i2c3_scl_pin, I2c3, I2cSclPin),
588            (into_spi3_miso_pin, Spi3, SpiMisoPin),
589            (into_i2s3_ws_pin, I2s3, I2sWsPin),
590        ]
591    }
592    (Pio0_12, pio0_12): {
593        (7, FC6_TXD_SCL_MISO_WS): [
594            (into_usart6_tx_pin, Usart6, UsartTxPin),
595            (into_i2c6_scl_pin, I2c6, I2cSclPin),
596            (into_spi6_miso_pin, Spi6, SpiMisoPin),
597            (into_i2s6_ws_pin, I2s6, I2sWsPin),
598        ]
599    }
600    (Pio0_13, pio0_13): {
601        (1, FC1_CTS_SDA_SSEL0): [
602            (into_usart1_cts_pin, Usart1, UsartCtsPin),
603            (into_i2c1_sda_pin, I2c1, I2cSdaPin),
604            (into_spi1_cs_pin, Spi1, SpiCsPin),
605        ]
606    }
607    (Pio0_13, pio0_13): {
608        (5, FC1_RXD_SDA_MOSI_DATA): [
609            (into_usart1_rx_pin, Usart1, UsartRxPin),
610            // (into_i2c1_sda_pin, I2c1, I2cSdaPin),
611            (into_spi1_mosi_pin, Spi1, SpiMosiPin),
612            (into_i2s1_sda_pin, I2s1, I2sSdaPin),
613        ]
614    }
615    (Pio0_14, pio0_14): {
616        (1, FC1_RTS_SCL_SSEL1): [
617            (into_usart1_rts_pin, Usart1, UsartRtsPin),
618            (into_i2c1_scl_pin, I2c1, I2cSclPin),
619            (into_spi1_cs_pin, Spi1, SpiCsPin),
620        ]
621    }
622    (Pio0_14, pio0_14): {
623        (6, FC1_TXD_SCL_MISO_WS): [
624            (into_usart1_tx_pin, Usart1, UsartTxPin),
625            // (into_i2c1_scl_pin, I2c1, I2cSclPin),
626            (into_spi1_miso_pin, Spi1, SpiMisoPin),
627            (into_i2s1_ws_pin, I2s1, I2sWsPin),
628        ]
629    }
630    (Pio0_15, pio0_15): {
631        (1, FC6_CTS_SDA_SSEL0): [
632            (into_usart6_cts_pin, Usart6, UsartCtsPin),
633            (into_i2c6_sda_pin, I2c6, I2cSdaPin),
634            (into_spi6_cs_pin, Spi6, SpiCsPin),
635        ]
636    }
637    (Pio0_16, pio0_16): {
638        (1, FC4_TXD_SCL_MISO_WS): [
639            (into_usart4_tx_pin, Usart4, UsartTxPin),
640            (into_i2c4_scl_pin, I2c4, I2cSclPin),
641            (into_spi4_miso_pin, Spi4, SpiMisoPin),
642            (into_i2s4_ws_pin, I2s4, I2sWsPin),
643        ]
644    }
645    (Pio0_17, pio0_17): {
646        (1, FC4_SSEL2): [
647            (into_spi4_cs_pin, Spi4, SpiCsPin),
648        ]
649    }
650    (Pio0_18, pio0_18): {
651        (1, FC4_CTS_SDA_SSEL0): [
652            (into_usart4_cts_pin, Usart4, UsartCtsPin),
653            (into_i2c4_sda_pin, I2c4, I2cSdaPin),
654            (into_spi4_cs_pin, Spi4, SpiCsPin),
655        ]
656    }
657    (Pio0_19, pio0_19): {
658        (1, FC4_RTS_SCL_SSEL1): [
659            (into_usart4_rts_pin, Usart4, UsartRtsPin),
660            (into_i2c4_scl_pin, I2c4, I2cSclPin),
661            (into_spi4_cs_pin, Spi4, SpiCsPin),
662        ]
663    }
664    (Pio0_19, pio0_19): {
665        (7, FC7_TXD_SCL_MISO_WS): [
666            (into_usart7_tx_pin, Usart7, UsartTxPin),
667            (into_i2c7_scl_pin, I2c7, I2cSclPin),
668            (into_spi7_miso_pin, Spi7, SpiMisoPin),
669            (into_i2s7_ws_pin, I2s7, I2sWsPin),
670        ]
671    }
672    (Pio0_20, pio0_20): {
673        (1, FC3_CTS_SDA_SSEL0): [
674            (into_usart3_cts_pin, Usart3, UsartCtsPin),
675            (into_i2c3_sda_pin, I2c3, I2cSdaPin),
676            (into_spi3_cs_pin, Spi3, SpiCsPin),
677        ]
678    }
679    (Pio0_20, pio0_20): {
680        (7, FC7_RXD_SDA_MOSI_DATA): [
681            (into_usart7_rx_pin, Usart7, UsartRxPin),
682            (into_i2c7_sda_pin, I2c7, I2cSdaPin),
683            (into_spi7_mosi_pin, Spi7, SpiMosiPin),
684            (into_i2s7_sda_pin, I2s7, I2sSdaPin),
685        ]
686    }
687    (Pio0_20, pio0_20): {
688        (8, HS_SPI_SSEL0): [
689            (into_spi8_cs_pin, Spi8, SpiCsPin),
690        ]
691    }
692    (Pio0_21, pio0_21): {
693        (1, FC3_RTS_SCL_SSEL1): [
694            (into_usart3_rts_pin, Usart3, UsartRtsPin),
695            (into_i2c3_scl_pin, I2c3, I2cSclPin),
696            (into_spi3_cs_pin, Spi3, SpiCsPin),
697        ]
698    }
699    (Pio0_21, pio0_21): {
700        (7, FC7_SCK): [
701            (into_usart7_sclk_pin, Usart7, UsartSclkPin),
702            (into_spi7_sck_pin, Spi7, SpiSckPin),
703        ]
704    }
705    (Pio0_22, pio0_22): {
706        (1, FC6_TXD_SCL_MISO_WS): [
707            (into_usart6_tx_pin, Usart6, UsartTxPin),
708            (into_i2c6_scl_pin, I2c6, I2cSclPin),
709            (into_spi6_miso_pin, Spi6, SpiMisoPin),
710            (into_i2s6_ws_pin, I2s6, I2sWsPin),
711        ]
712    }
713    (Pio0_23, pio0_23): {
714        (5, FC0_CTS_SDA_SSEL0): [
715            (into_usart0_cts_pin, Usart0, UsartCtsPin),
716            (into_i2c0_sda_pin, I2c0, I2cSdaPin),
717            (into_spi0_cs_pin, Spi0, SpiCsPin),
718        ]
719    }
720    (Pio0_24, pio0_24): {
721        (1, FC0_RXD_SDA_MOSI_DATA): [
722            (into_usart0_rx_pin, Usart0, UsartRxPin),
723            (into_i2c0_sda_pin, I2c0, I2cSdaPin),
724            (into_spi0_mosi_pin, Spi0, SpiMosiPin),
725            (into_i2s0_sda_pin, I2s0, I2sSdaPin),
726        ]
727    }
728    (Pio0_25, pio0_25): {
729        (1, FC0_TXD_SCL_MISO_WS): [
730            (into_usart0_tx_pin, Usart0, UsartTxPin),
731            (into_i2c0_scl_pin, I2c0, I2cSclPin),
732            (into_spi0_miso_pin, Spi0, SpiMisoPin),
733            (into_i2s0_ws_pin, I2s0, I2sWsPin),
734        ]
735    }
736    (Pio0_26, pio0_26): {
737        (1, FC2_RXD_SDA_MOSI_DATA): [
738            (into_usart2_rx_pin, Usart2, UsartRxPin),
739            (into_i2c2_sda_pin, I2c2, I2cSdaPin),
740            (into_spi2_mosi_pin, Spi2, SpiMosiPin),
741            (into_i2s2_sda_pin, I2s2, I2sSdaPin),
742        ]
743    }
744    (Pio0_26, pio0_26): {
745        (8, FC0_SCK): [
746            (into_usart0_sclk_pin, Usart0, UsartSclkPin),
747            (into_spi0_sck_pin, Spi0, SpiSckPin),
748        ]
749    }
750    (Pio0_26, pio0_26): {
751        (9, HS_SPI_MOSI): [
752            (into_spi8_mosi_pin, Spi8, SpiMosiPin),
753        ]
754    }
755    (Pio0_27, pio0_27): {
756        (1, FC2_TXD_SCL_MISO_WS): [
757            (into_usart2_tx_pin, Usart2, UsartTxPin),
758            (into_i2c2_scl_pin, I2c2, I2cSclPin),
759            (into_spi2_miso_pin, Spi2, SpiMisoPin),
760            (into_i2s2_ws_pin, I2s2, I2sWsPin),
761        ]
762    }
763    (Pio0_27, pio0_27): {
764        (7, FC7_RXD_SDA_MOSI_DATA): [
765            (into_usart7_rx_pin, Usart7, UsartRxPin),
766            (into_i2c7_sda_pin, I2c7, I2cSdaPin),
767            (into_spi7_mosi_pin, Spi7, SpiMosiPin),
768            (into_i2s7_sda_pin, I2s7, I2sSdaPin),
769        ]
770    }
771    (Pio0_28, pio0_28): {
772        (1, FC0_SCK): [
773            (into_usart0_sclk_pin, Usart0, UsartSclkPin),
774            (into_spi0_sck_pin, Spi0, SpiSckPin),
775        ]
776    }
777    (Pio0_29, pio0_29): {
778        (1, FC0_RXD_SDA_MOSI_DATA): [
779            (into_usart0_rx_pin, Usart0, UsartRxPin),
780            (into_i2c0_sda_pin, I2c0, I2cSdaPin),
781            (into_spi0_mosi_pin, Spi0, SpiMosiPin),
782            (into_i2s0_sda_pin, I2s0, I2sSdaPin),
783        ]
784    }
785    (Pio0_30, pio0_30): {
786        (1, FC0_TXD_SCL_MISO_WS): [
787            (into_usart0_tx_pin, Usart0, UsartTxPin),
788            (into_i2c0_scl_pin, I2c0, I2cSclPin),
789            (into_spi0_miso_pin, Spi0, SpiMisoPin),
790            (into_i2s0_ws_pin, I2s0, I2sWsPin),
791        ]
792    }
793    (Pio0_31, pio0_31): {
794        (1, FC0_CTS_SDA_SSEL0): [
795            (into_usart0_cts_pin, Usart0, UsartCtsPin),
796            (into_i2c0_sda_pin, I2c0, I2cSdaPin),
797            (into_spi0_cs_pin, Spi0, SpiCsPin),
798        ]
799    }
800    (Pio1_0, pio1_0): {
801        (1, FC0_RTS_SCL_SSEL1): [
802            (into_usart0_rts_pin, Usart0, UsartRtsPin),
803            (into_i2c0_scl_pin, I2c0, I2cSclPin),
804            (into_spi0_cs_pin, Spi0, SpiCsPin),
805        ]
806    }
807    (Pio1_1, pio1_1): {
808        (1, FC3_RXD_SDA_MOSI_DATA): [
809            (into_usart3_rx_pin, Usart3, UsartRxPin),
810            (into_i2c3_sda_pin, I2c3, I2cSdaPin),
811            (into_spi3_mosi_pin, Spi3, SpiMosiPin),
812            (into_i2s3_sda_pin, I2s3, I2sSdaPin),
813        ]
814    }
815    (Pio1_1, pio1_1): {
816        (5, HS_SPI_SSEL1): [
817            (into_spi8_cs_pin, Spi8, SpiCsPin),
818        ]
819    }
820    (Pio1_2, pio1_2): {
821        (6, HS_SPI_SCK): [
822            (into_spi8_sck_pin, Spi8, SpiSckPin),
823        ]
824    }
825    (Pio1_3, pio1_3): {
826        (6, HS_SPI_MISO): [
827            (into_spi8_miso_pin, Spi8, SpiMisoPin),
828        ]
829    }
830    (Pio1_4, pio1_4): {
831        (1, FC0_SCK): [
832            (into_usart0_sclk_pin, Usart0, UsartSclkPin),
833            (into_spi0_sck_pin, Spi0, SpiSckPin),
834        ]
835    }
836    (Pio1_5, pio1_5): {
837        (1, FC0_RXD_SDA_MOSI_DATA): [
838            (into_usart0_rx_pin, Usart0, UsartRxPin),
839            (into_i2c0_sda_pin, I2c0, I2cSdaPin),
840            (into_spi0_mosi_pin, Spi0, SpiMosiPin),
841            (into_i2s0_sda_pin, I2s0, I2sSdaPin),
842        ]
843    }
844    (Pio1_6, pio1_6): {
845        (1, FC0_TXD_SCL_MISO_WS): [
846            (into_usart0_tx_pin, Usart0, UsartTxPin),
847            (into_i2c0_scl_pin, I2c0, I2cSclPin),
848            (into_spi0_miso_pin, Spi0, SpiMisoPin),
849            (into_i2s0_ws_pin, I2s0, I2sWsPin),
850        ]
851    }
852    (Pio1_7, pio1_7): {
853        (1, FC0_RTS_SCL_SSEL1): [
854            (into_usart0_rts_pin, Usart0, UsartRtsPin),
855            (into_i2c0_scl_pin, I2c0, I2cSclPin),
856            (into_spi0_cs_pin, Spi0, SpiCsPin),
857        ]
858    }
859    (Pio1_8, pio1_8): {
860        (1, FC0_CTS_SDA_SSEL0): [
861            (into_usart0_cts_pin, Usart0, UsartCtsPin),
862            (into_i2c0_sda_pin, I2c0, I2cSdaPin),
863            (into_spi0_cs_pin, Spi0, SpiCsPin),
864        ]
865    }
866    (Pio1_8, pio1_8): {
867        (5, FC4_SSEL2): [
868            (into_spi4_cs_pin, Spi4, SpiCsPin),
869        ]
870    }
871    (Pio1_9, pio1_9): {
872        (2, FC1_SCK): [
873            (into_usart1_sclk_pin, Usart1, UsartSclkPin),
874            (into_spi1_sck_pin, Spi1, SpiSckPin),
875        ]
876    }
877    (Pio1_9, pio1_9): {
878        (5, FC4_CTS_SDA_SSEL0): [
879            (into_usart4_cts_pin, Usart4, UsartCtsPin),
880            (into_i2c4_sda_pin, I2c4, I2cSdaPin),
881            (into_spi4_cs_pin, Spi4, SpiCsPin),
882        ]
883    }
884    (Pio1_10, pio1_10): {
885        (2, FC1_RXD_SDA_MOSI_DATA): [
886            (into_usart1_rx_pin, Usart1, UsartRxPin),
887            (into_i2c1_sda_pin, I2c1, I2cSdaPin),
888            (into_spi1_mosi_pin, Spi1, SpiMosiPin),
889            (into_i2s1_sda_pin, I2s1, I2sSdaPin),
890        ]
891    }
892    (Pio1_11, pio1_11): {
893        (2, FC1_TXD_SCL_MISO_WS): [
894            (into_usart1_tx_pin, Usart1, UsartTxPin),
895            (into_i2c1_scl_pin, I2c1, I2cSclPin),
896            (into_spi1_miso_pin, Spi1, SpiMisoPin),
897            (into_i2s1_ws_pin, I2s1, I2sWsPin),
898        ]
899    }
900    (Pio1_12, pio1_12): {
901        (2, FC6_SCK): [
902            (into_usart6_sclk_pin, Usart6, UsartSclkPin),
903            (into_spi6_sck_pin, Spi6, SpiSckPin),
904        ]
905    }
906    (Pio1_12, pio1_12): {
907        (5, HS_SPI_SSEL2): [
908            (into_spi8_cs_pin, Spi8, SpiCsPin),
909        ]
910    }
911    (Pio1_13, pio1_13): {
912        (2, FC6_RXD_SDA_MOSI_DATA): [
913            (into_usart6_rx_pin, Usart6, UsartRxPin),
914            (into_i2c6_sda_pin, I2c6, I2cSdaPin),
915            (into_spi6_mosi_pin, Spi6, SpiMosiPin),
916            (into_i2s6_sda_pin, I2s6, I2sSdaPin),
917        ]
918    }
919    (Pio1_14, pio1_14): {
920        (4, FC5_CTS_SDA_SSEL0): [
921            (into_usart5_cts_pin, Usart5, UsartCtsPin),
922            (into_i2c5_sda_pin, I2c5, I2cSdaPin),
923            (into_spi5_cs_pin, Spi5, SpiCsPin),
924        ]
925    }
926    (Pio1_15, pio1_15): {
927        (4, FC5_RTS_SCL_SSEL1): [
928            (into_usart5_rts_pin, Usart5, UsartRtsPin),
929            (into_i2c5_scl_pin, I2c5, I2cSclPin),
930            (into_spi5_cs_pin, Spi5, SpiCsPin),
931        ]
932    }
933    (Pio1_15, pio1_15): {
934        (5, FC4_RTS_SCL_SSEL1): [
935            (into_usart4_rts_pin, Usart4, UsartRtsPin),
936            (into_i2c4_scl_pin, I2c4, I2cSclPin),
937            (into_spi4_cs_pin, Spi4, SpiCsPin),
938        ]
939    }
940    (Pio1_16, pio1_16): {
941        (2, FC6_TXD_SCL_MISO_WS): [
942            (into_usart6_tx_pin, Usart6, UsartTxPin),
943            (into_i2c6_scl_pin, I2c6, I2cSclPin),
944            (into_spi6_miso_pin, Spi6, SpiMisoPin),
945            (into_i2s6_ws_pin, I2s6, I2sWsPin),
946        ]
947    }
948    (Pio1_17, pio1_17): {
949        (3, FC6_RTS_SCL_SSEL1): [
950            (into_usart6_rts_pin, Usart6, UsartRtsPin),
951            (into_i2c6_scl_pin, I2c6, I2cSclPin),
952            (into_spi6_cs_pin, Spi6, SpiCsPin),
953        ]
954    }
955    (Pio1_19, pio1_19): {
956        (5, FC4_SCK): [
957            (into_usart4_sclk_pin, Usart4, UsartSclkPin),
958            (into_spi4_sck_pin, Spi4, SpiSckPin),
959        ]
960    }
961    (Pio1_20, pio1_20): {
962        (1, FC7_RTS_SCL_SSEL1): [
963            (into_usart7_rts_pin, Usart7, UsartRtsPin),
964            (into_i2c7_scl_pin, I2c7, I2cSclPin),
965            (into_spi7_cs_pin, Spi7, SpiCsPin),
966        ]
967    }
968    (Pio1_20, pio1_20): {
969        (5, FC4_TXD_SCL_MISO_WS): [
970            (into_usart4_tx_pin, Usart4, UsartTxPin),
971            (into_i2c4_scl_pin, I2c4, I2cSclPin),
972            (into_spi4_miso_pin, Spi4, SpiMisoPin),
973            (into_i2s4_ws_pin, I2s4, I2sWsPin),
974        ]
975    }
976    (Pio1_21, pio1_21): {
977        (1, FC7_CTS_SDA_SSEL0): [
978            (into_usart7_cts_pin, Usart7, UsartCtsPin),
979            (into_i2c7_sda_pin, I2c7, I2cSdaPin),
980            (into_spi7_cs_pin, Spi7, SpiCsPin),
981        ]
982    }
983    (Pio1_21, pio1_21): {
984        (5, FC4_RXD_SDA_MOSI_DATA): [
985            (into_usart4_rx_pin, Usart4, UsartRxPin),
986            (into_i2c4_sda_pin, I2c4, I2cSdaPin),
987            (into_spi4_mosi_pin, Spi4, SpiMosiPin),
988            (into_i2s4_sda_pin, I2s4, I2sSdaPin),
989        ]
990    }
991    (Pio1_22, pio1_22): {
992        (5, FC4_SSEL3): [
993            (into_spi4_cs_pin, Spi4, SpiCsPin),
994        ]
995    }
996    (Pio1_23, pio1_23): {
997        (1, FC2_SCK): [
998            (into_usart2_sclk_pin, Usart2, UsartSclkPin),
999            (into_spi2_sck_pin, Spi2, SpiSckPin),
1000        ]
1001    }
1002    (Pio1_23, pio1_23): {
1003        (5, FC3_SSEL2): [
1004            (into_spi3_cs_pin, Spi3, SpiCsPin),
1005        ]
1006    }
1007    (Pio1_24, pio1_24): {
1008        (1, FC2_RXD_SDA_MOSI_DATA): [
1009            (into_usart2_rx_pin, Usart2, UsartRxPin),
1010            (into_i2c2_sda_pin, I2c2, I2cSdaPin),
1011            (into_spi2_mosi_pin, Spi2, SpiMosiPin),
1012            (into_i2s2_sda_pin, I2s2, I2sSdaPin),
1013        ]
1014    }
1015    (Pio1_24, pio1_24): {
1016        (5, FC3_SSEL3): [
1017            (into_spi3_cs_pin, Spi3, SpiCsPin),
1018        ]
1019    }
1020    (Pio1_25, pio1_25): {
1021        (1, FC2_TXD_SCL_MISO_WS): [
1022            (into_usart2_tx_pin, Usart2, UsartTxPin),
1023            (into_i2c2_scl_pin, I2c2, I2cSclPin),
1024            (into_spi2_miso_pin, Spi2, SpiMisoPin),
1025            (into_i2s2_ws_pin, I2s2, I2sWsPin),
1026        ]
1027    }
1028    (Pio1_26, pio1_26): {
1029        (1, FC2_CTS_SDA_SSEL0): [
1030            (into_usart2_cts_pin, Usart2, UsartCtsPin),
1031            (into_i2c2_sda_pin, I2c2, I2cSdaPin),
1032            (into_spi2_cs_pin, Spi2, SpiCsPin),
1033        ]
1034    }
1035    (Pio1_26, pio1_26): {
1036        (5, HS_SPI_SSEL3): [
1037            (into_spi8_cs_pin, Spi8, SpiCsPin),
1038        ]
1039    }
1040    (Pio1_27, pio1_27): {
1041        (1, FC2_RTS_SCL_SSEL1): [
1042            (into_usart2_rts_pin, Usart2, UsartRtsPin),
1043            (into_i2c2_scl_pin, I2c2, I2cSclPin),
1044            (into_spi2_cs_pin, Spi2, SpiCsPin),
1045        ]
1046    }
1047    (Pio1_28, pio1_28): {
1048        (1, FC7_SCK): [
1049            (into_usart7_sclk_pin, Usart7, UsartSclkPin),
1050            (into_spi7_sck_pin, Spi7, SpiSckPin),
1051        ]
1052    }
1053    (Pio1_29, pio1_29): {
1054        (1, FC7_RXD_SDA_MOSI_DATA): [
1055            (into_usart7_rx_pin, Usart7, UsartRxPin),
1056            (into_i2c7_sda_pin, I2c7, I2cSdaPin),
1057            (into_spi7_mosi_pin, Spi7, SpiMosiPin),
1058            (into_i2s7_sda_pin, I2s7, I2sSdaPin),
1059        ]
1060    }
1061    (Pio1_30, pio1_30): {
1062        (1, FC7_TXD_SCL_MISO_WS): [
1063            (into_usart7_tx_pin, Usart7, UsartTxPin),
1064            (into_i2c7_scl_pin, I2c7, I2cSclPin),
1065            (into_spi7_miso_pin, Spi7, SpiMisoPin),
1066            (into_i2s7_ws_pin, I2s7, I2sWsPin),
1067        ]
1068    }
1069}
1070
1071impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c0>
1072    for Pin<PIO, Special<function::FC0_RTS_SCL_SSEL1>>
1073{
1074}
1075impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c0>
1076    for Pin<PIO, Special<function::FC0_TXD_SCL_MISO_WS>>
1077{
1078}
1079impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c1>
1080    for Pin<PIO, Special<function::FC1_RTS_SCL_SSEL1>>
1081{
1082}
1083impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c1>
1084    for Pin<PIO, Special<function::FC1_TXD_SCL_MISO_WS>>
1085{
1086}
1087impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c2>
1088    for Pin<PIO, Special<function::FC2_RTS_SCL_SSEL1>>
1089{
1090}
1091impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c2>
1092    for Pin<PIO, Special<function::FC2_TXD_SCL_MISO_WS>>
1093{
1094}
1095impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c3>
1096    for Pin<PIO, Special<function::FC3_RTS_SCL_SSEL1>>
1097{
1098}
1099impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c3>
1100    for Pin<PIO, Special<function::FC3_TXD_SCL_MISO_WS>>
1101{
1102}
1103impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c4>
1104    for Pin<PIO, Special<function::FC4_RTS_SCL_SSEL1>>
1105{
1106}
1107impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c4>
1108    for Pin<PIO, Special<function::FC4_TXD_SCL_MISO_WS>>
1109{
1110}
1111impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c5>
1112    for Pin<PIO, Special<function::FC5_RTS_SCL_SSEL1>>
1113{
1114}
1115impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c5>
1116    for Pin<PIO, Special<function::FC5_TXD_SCL_MISO_WS>>
1117{
1118}
1119impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c6>
1120    for Pin<PIO, Special<function::FC6_RTS_SCL_SSEL1>>
1121{
1122}
1123impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c6>
1124    for Pin<PIO, Special<function::FC6_TXD_SCL_MISO_WS>>
1125{
1126}
1127impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c7>
1128    for Pin<PIO, Special<function::FC7_RTS_SCL_SSEL1>>
1129{
1130}
1131impl<PIO: PinId> fc::I2cSclPin<PIO, flexcomm::I2c7>
1132    for Pin<PIO, Special<function::FC7_TXD_SCL_MISO_WS>>
1133{
1134}
1135impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c0>
1136    for Pin<PIO, Special<function::FC0_CTS_SDA_SSEL0>>
1137{
1138}
1139impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c0>
1140    for Pin<PIO, Special<function::FC0_RXD_SDA_MOSI_DATA>>
1141{
1142}
1143impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c1>
1144    for Pin<PIO, Special<function::FC1_CTS_SDA_SSEL0>>
1145{
1146}
1147impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c1>
1148    for Pin<PIO, Special<function::FC1_RXD_SDA_MOSI_DATA>>
1149{
1150}
1151impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c2>
1152    for Pin<PIO, Special<function::FC2_CTS_SDA_SSEL0>>
1153{
1154}
1155impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c2>
1156    for Pin<PIO, Special<function::FC2_RXD_SDA_MOSI_DATA>>
1157{
1158}
1159impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c3>
1160    for Pin<PIO, Special<function::FC3_CTS_SDA_SSEL0>>
1161{
1162}
1163impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c3>
1164    for Pin<PIO, Special<function::FC3_RXD_SDA_MOSI_DATA>>
1165{
1166}
1167impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c4>
1168    for Pin<PIO, Special<function::FC4_CTS_SDA_SSEL0>>
1169{
1170}
1171impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c4>
1172    for Pin<PIO, Special<function::FC4_RXD_SDA_MOSI_DATA>>
1173{
1174}
1175impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c5>
1176    for Pin<PIO, Special<function::FC5_CTS_SDA_SSEL0>>
1177{
1178}
1179impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c5>
1180    for Pin<PIO, Special<function::FC5_RXD_SDA_MOSI_DATA>>
1181{
1182}
1183impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c6>
1184    for Pin<PIO, Special<function::FC6_CTS_SDA_SSEL0>>
1185{
1186}
1187impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c6>
1188    for Pin<PIO, Special<function::FC6_RXD_SDA_MOSI_DATA>>
1189{
1190}
1191impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c7>
1192    for Pin<PIO, Special<function::FC7_CTS_SDA_SSEL0>>
1193{
1194}
1195impl<PIO: PinId> fc::I2cSdaPin<PIO, flexcomm::I2c7>
1196    for Pin<PIO, Special<function::FC7_RXD_SDA_MOSI_DATA>>
1197{
1198}
1199impl<PIO: PinId> fc::I2sSdaPin<PIO, flexcomm::I2s0>
1200    for Pin<PIO, Special<function::FC0_RXD_SDA_MOSI_DATA>>
1201{
1202}
1203impl<PIO: PinId> fc::I2sSdaPin<PIO, flexcomm::I2s1>
1204    for Pin<PIO, Special<function::FC1_RXD_SDA_MOSI_DATA>>
1205{
1206}
1207impl<PIO: PinId> fc::I2sSdaPin<PIO, flexcomm::I2s2>
1208    for Pin<PIO, Special<function::FC2_RXD_SDA_MOSI_DATA>>
1209{
1210}
1211impl<PIO: PinId> fc::I2sSdaPin<PIO, flexcomm::I2s3>
1212    for Pin<PIO, Special<function::FC3_RXD_SDA_MOSI_DATA>>
1213{
1214}
1215impl<PIO: PinId> fc::I2sSdaPin<PIO, flexcomm::I2s4>
1216    for Pin<PIO, Special<function::FC4_RXD_SDA_MOSI_DATA>>
1217{
1218}
1219impl<PIO: PinId> fc::I2sSdaPin<PIO, flexcomm::I2s5>
1220    for Pin<PIO, Special<function::FC5_RXD_SDA_MOSI_DATA>>
1221{
1222}
1223impl<PIO: PinId> fc::I2sSdaPin<PIO, flexcomm::I2s6>
1224    for Pin<PIO, Special<function::FC6_RXD_SDA_MOSI_DATA>>
1225{
1226}
1227impl<PIO: PinId> fc::I2sSdaPin<PIO, flexcomm::I2s7>
1228    for Pin<PIO, Special<function::FC7_RXD_SDA_MOSI_DATA>>
1229{
1230}
1231impl<PIO: PinId> fc::I2sWsPin<PIO, flexcomm::I2s0>
1232    for Pin<PIO, Special<function::FC0_TXD_SCL_MISO_WS>>
1233{
1234}
1235impl<PIO: PinId> fc::I2sWsPin<PIO, flexcomm::I2s1>
1236    for Pin<PIO, Special<function::FC1_TXD_SCL_MISO_WS>>
1237{
1238}
1239impl<PIO: PinId> fc::I2sWsPin<PIO, flexcomm::I2s2>
1240    for Pin<PIO, Special<function::FC2_TXD_SCL_MISO_WS>>
1241{
1242}
1243impl<PIO: PinId> fc::I2sWsPin<PIO, flexcomm::I2s3>
1244    for Pin<PIO, Special<function::FC3_TXD_SCL_MISO_WS>>
1245{
1246}
1247impl<PIO: PinId> fc::I2sWsPin<PIO, flexcomm::I2s4>
1248    for Pin<PIO, Special<function::FC4_TXD_SCL_MISO_WS>>
1249{
1250}
1251impl<PIO: PinId> fc::I2sWsPin<PIO, flexcomm::I2s5>
1252    for Pin<PIO, Special<function::FC5_TXD_SCL_MISO_WS>>
1253{
1254}
1255impl<PIO: PinId> fc::I2sWsPin<PIO, flexcomm::I2s6>
1256    for Pin<PIO, Special<function::FC6_TXD_SCL_MISO_WS>>
1257{
1258}
1259impl<PIO: PinId> fc::I2sWsPin<PIO, flexcomm::I2s7>
1260    for Pin<PIO, Special<function::FC7_TXD_SCL_MISO_WS>>
1261{
1262}
1263impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi0>
1264    for Pin<PIO, Special<function::FC0_CTS_SDA_SSEL0>>
1265{
1266    const CS: ChipSelect = ChipSelect::Chip0;
1267}
1268impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi0>
1269    for Pin<PIO, Special<function::FC0_RTS_SCL_SSEL1>>
1270{
1271    const CS: ChipSelect = ChipSelect::Chip1;
1272}
1273impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi1>
1274    for Pin<PIO, Special<function::FC1_CTS_SDA_SSEL0>>
1275{
1276    const CS: ChipSelect = ChipSelect::Chip0;
1277}
1278impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi1>
1279    for Pin<PIO, Special<function::FC1_RTS_SCL_SSEL1>>
1280{
1281    const CS: ChipSelect = ChipSelect::Chip1;
1282}
1283impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi2>
1284    for Pin<PIO, Special<function::FC2_CTS_SDA_SSEL0>>
1285{
1286    const CS: ChipSelect = ChipSelect::Chip0;
1287}
1288impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi2>
1289    for Pin<PIO, Special<function::FC2_RTS_SCL_SSEL1>>
1290{
1291    const CS: ChipSelect = ChipSelect::Chip1;
1292}
1293impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi3>
1294    for Pin<PIO, Special<function::FC3_CTS_SDA_SSEL0>>
1295{
1296    const CS: ChipSelect = ChipSelect::Chip0;
1297}
1298impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi3>
1299    for Pin<PIO, Special<function::FC3_RTS_SCL_SSEL1>>
1300{
1301    const CS: ChipSelect = ChipSelect::Chip1;
1302}
1303impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi3> for Pin<PIO, Special<function::FC3_SSEL2>> {
1304    const CS: ChipSelect = ChipSelect::Chip2;
1305}
1306impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi3> for Pin<PIO, Special<function::FC3_SSEL3>> {
1307    const CS: ChipSelect = ChipSelect::Chip3;
1308}
1309impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi4>
1310    for Pin<PIO, Special<function::FC4_CTS_SDA_SSEL0>>
1311{
1312    const CS: ChipSelect = ChipSelect::Chip0;
1313}
1314impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi4>
1315    for Pin<PIO, Special<function::FC4_RTS_SCL_SSEL1>>
1316{
1317    const CS: ChipSelect = ChipSelect::Chip1;
1318}
1319impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi4> for Pin<PIO, Special<function::FC4_SSEL2>> {
1320    const CS: ChipSelect = ChipSelect::Chip2;
1321}
1322impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi4> for Pin<PIO, Special<function::FC4_SSEL3>> {
1323    const CS: ChipSelect = ChipSelect::Chip3;
1324}
1325impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi5>
1326    for Pin<PIO, Special<function::FC5_CTS_SDA_SSEL0>>
1327{
1328    const CS: ChipSelect = ChipSelect::Chip0;
1329}
1330impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi5>
1331    for Pin<PIO, Special<function::FC5_RTS_SCL_SSEL1>>
1332{
1333    const CS: ChipSelect = ChipSelect::Chip1;
1334}
1335impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi6>
1336    for Pin<PIO, Special<function::FC6_CTS_SDA_SSEL0>>
1337{
1338    const CS: ChipSelect = ChipSelect::Chip0;
1339}
1340impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi6>
1341    for Pin<PIO, Special<function::FC6_RTS_SCL_SSEL1>>
1342{
1343    const CS: ChipSelect = ChipSelect::Chip1;
1344}
1345impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi7>
1346    for Pin<PIO, Special<function::FC7_CTS_SDA_SSEL0>>
1347{
1348    const CS: ChipSelect = ChipSelect::Chip0;
1349}
1350impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi7>
1351    for Pin<PIO, Special<function::FC7_RTS_SCL_SSEL1>>
1352{
1353    const CS: ChipSelect = ChipSelect::Chip1;
1354}
1355impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi8> for Pin<PIO, Special<function::HS_SPI_SSEL0>> {
1356    const CS: ChipSelect = ChipSelect::Chip0;
1357}
1358impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi8> for Pin<PIO, Special<function::HS_SPI_SSEL1>> {
1359    const CS: ChipSelect = ChipSelect::Chip1;
1360}
1361impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi8> for Pin<PIO, Special<function::HS_SPI_SSEL2>> {
1362    const CS: ChipSelect = ChipSelect::Chip2;
1363}
1364impl<PIO: PinId> fc::SpiCsPin<PIO, flexcomm::Spi8> for Pin<PIO, Special<function::HS_SPI_SSEL3>> {
1365    const CS: ChipSelect = ChipSelect::Chip3;
1366}
1367impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi0>
1368    for Pin<PIO, Special<function::FC0_TXD_SCL_MISO_WS>>
1369{
1370}
1371impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi1>
1372    for Pin<PIO, Special<function::FC1_TXD_SCL_MISO_WS>>
1373{
1374}
1375impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi2>
1376    for Pin<PIO, Special<function::FC2_TXD_SCL_MISO_WS>>
1377{
1378}
1379impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi3>
1380    for Pin<PIO, Special<function::FC3_TXD_SCL_MISO_WS>>
1381{
1382}
1383impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi4>
1384    for Pin<PIO, Special<function::FC4_TXD_SCL_MISO_WS>>
1385{
1386}
1387impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi5>
1388    for Pin<PIO, Special<function::FC5_TXD_SCL_MISO_WS>>
1389{
1390}
1391impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi6>
1392    for Pin<PIO, Special<function::FC6_TXD_SCL_MISO_WS>>
1393{
1394}
1395impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi7>
1396    for Pin<PIO, Special<function::FC7_TXD_SCL_MISO_WS>>
1397{
1398}
1399impl<PIO: PinId> fc::SpiMisoPin<PIO, flexcomm::Spi8> for Pin<PIO, Special<function::HS_SPI_MISO>> {}
1400impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi0>
1401    for Pin<PIO, Special<function::FC0_RXD_SDA_MOSI_DATA>>
1402{
1403}
1404impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi1>
1405    for Pin<PIO, Special<function::FC1_RXD_SDA_MOSI_DATA>>
1406{
1407}
1408impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi2>
1409    for Pin<PIO, Special<function::FC2_RXD_SDA_MOSI_DATA>>
1410{
1411}
1412impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi3>
1413    for Pin<PIO, Special<function::FC3_RXD_SDA_MOSI_DATA>>
1414{
1415}
1416impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi4>
1417    for Pin<PIO, Special<function::FC4_RXD_SDA_MOSI_DATA>>
1418{
1419}
1420impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi5>
1421    for Pin<PIO, Special<function::FC5_RXD_SDA_MOSI_DATA>>
1422{
1423}
1424impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi6>
1425    for Pin<PIO, Special<function::FC6_RXD_SDA_MOSI_DATA>>
1426{
1427}
1428impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi7>
1429    for Pin<PIO, Special<function::FC7_RXD_SDA_MOSI_DATA>>
1430{
1431}
1432impl<PIO: PinId> fc::SpiMosiPin<PIO, flexcomm::Spi8> for Pin<PIO, Special<function::HS_SPI_MOSI>> {}
1433impl<PIO: PinId> fc::SpiSckPin<PIO, flexcomm::Spi0> for Pin<PIO, Special<function::FC0_SCK>> {}
1434impl<PIO: PinId> fc::SpiSckPin<PIO, flexcomm::Spi1> for Pin<PIO, Special<function::FC1_SCK>> {}
1435impl<PIO: PinId> fc::SpiSckPin<PIO, flexcomm::Spi2> for Pin<PIO, Special<function::FC2_SCK>> {}
1436impl<PIO: PinId> fc::SpiSckPin<PIO, flexcomm::Spi3> for Pin<PIO, Special<function::FC3_SCK>> {}
1437impl<PIO: PinId> fc::SpiSckPin<PIO, flexcomm::Spi4> for Pin<PIO, Special<function::FC4_SCK>> {}
1438impl<PIO: PinId> fc::SpiSckPin<PIO, flexcomm::Spi5> for Pin<PIO, Special<function::FC5_SCK>> {}
1439impl<PIO: PinId> fc::SpiSckPin<PIO, flexcomm::Spi6> for Pin<PIO, Special<function::FC6_SCK>> {}
1440impl<PIO: PinId> fc::SpiSckPin<PIO, flexcomm::Spi7> for Pin<PIO, Special<function::FC7_SCK>> {}
1441impl<PIO: PinId> fc::SpiSckPin<PIO, flexcomm::Spi8> for Pin<PIO, Special<function::HS_SPI_SCK>> {}
1442impl<PIO: PinId> fc::UsartCtsPin<PIO, flexcomm::Usart0>
1443    for Pin<PIO, Special<function::FC0_CTS_SDA_SSEL0>>
1444{
1445}
1446impl<PIO: PinId> fc::UsartCtsPin<PIO, flexcomm::Usart1>
1447    for Pin<PIO, Special<function::FC1_CTS_SDA_SSEL0>>
1448{
1449}
1450impl<PIO: PinId> fc::UsartCtsPin<PIO, flexcomm::Usart2>
1451    for Pin<PIO, Special<function::FC2_CTS_SDA_SSEL0>>
1452{
1453}
1454impl<PIO: PinId> fc::UsartCtsPin<PIO, flexcomm::Usart3>
1455    for Pin<PIO, Special<function::FC3_CTS_SDA_SSEL0>>
1456{
1457}
1458impl<PIO: PinId> fc::UsartCtsPin<PIO, flexcomm::Usart4>
1459    for Pin<PIO, Special<function::FC4_CTS_SDA_SSEL0>>
1460{
1461}
1462impl<PIO: PinId> fc::UsartCtsPin<PIO, flexcomm::Usart5>
1463    for Pin<PIO, Special<function::FC5_CTS_SDA_SSEL0>>
1464{
1465}
1466impl<PIO: PinId> fc::UsartCtsPin<PIO, flexcomm::Usart6>
1467    for Pin<PIO, Special<function::FC6_CTS_SDA_SSEL0>>
1468{
1469}
1470impl<PIO: PinId> fc::UsartCtsPin<PIO, flexcomm::Usart7>
1471    for Pin<PIO, Special<function::FC7_CTS_SDA_SSEL0>>
1472{
1473}
1474impl<PIO: PinId> fc::UsartRtsPin<PIO, flexcomm::Usart0>
1475    for Pin<PIO, Special<function::FC0_RTS_SCL_SSEL1>>
1476{
1477}
1478impl<PIO: PinId> fc::UsartRtsPin<PIO, flexcomm::Usart1>
1479    for Pin<PIO, Special<function::FC1_RTS_SCL_SSEL1>>
1480{
1481}
1482impl<PIO: PinId> fc::UsartRtsPin<PIO, flexcomm::Usart2>
1483    for Pin<PIO, Special<function::FC2_RTS_SCL_SSEL1>>
1484{
1485}
1486impl<PIO: PinId> fc::UsartRtsPin<PIO, flexcomm::Usart3>
1487    for Pin<PIO, Special<function::FC3_RTS_SCL_SSEL1>>
1488{
1489}
1490impl<PIO: PinId> fc::UsartRtsPin<PIO, flexcomm::Usart4>
1491    for Pin<PIO, Special<function::FC4_RTS_SCL_SSEL1>>
1492{
1493}
1494impl<PIO: PinId> fc::UsartRtsPin<PIO, flexcomm::Usart5>
1495    for Pin<PIO, Special<function::FC5_RTS_SCL_SSEL1>>
1496{
1497}
1498impl<PIO: PinId> fc::UsartRtsPin<PIO, flexcomm::Usart6>
1499    for Pin<PIO, Special<function::FC6_RTS_SCL_SSEL1>>
1500{
1501}
1502impl<PIO: PinId> fc::UsartRtsPin<PIO, flexcomm::Usart7>
1503    for Pin<PIO, Special<function::FC7_RTS_SCL_SSEL1>>
1504{
1505}
1506impl<PIO: PinId> fc::UsartRxPin<PIO, flexcomm::Usart0>
1507    for Pin<PIO, Special<function::FC0_RXD_SDA_MOSI_DATA>>
1508{
1509}
1510impl<PIO: PinId> fc::UsartRxPin<PIO, flexcomm::Usart1>
1511    for Pin<PIO, Special<function::FC1_RXD_SDA_MOSI_DATA>>
1512{
1513}
1514impl<PIO: PinId> fc::UsartRxPin<PIO, flexcomm::Usart2>
1515    for Pin<PIO, Special<function::FC2_RXD_SDA_MOSI_DATA>>
1516{
1517}
1518impl<PIO: PinId> fc::UsartRxPin<PIO, flexcomm::Usart3>
1519    for Pin<PIO, Special<function::FC3_RXD_SDA_MOSI_DATA>>
1520{
1521}
1522impl<PIO: PinId> fc::UsartRxPin<PIO, flexcomm::Usart4>
1523    for Pin<PIO, Special<function::FC4_RXD_SDA_MOSI_DATA>>
1524{
1525}
1526impl<PIO: PinId> fc::UsartRxPin<PIO, flexcomm::Usart5>
1527    for Pin<PIO, Special<function::FC5_RXD_SDA_MOSI_DATA>>
1528{
1529}
1530impl<PIO: PinId> fc::UsartRxPin<PIO, flexcomm::Usart6>
1531    for Pin<PIO, Special<function::FC6_RXD_SDA_MOSI_DATA>>
1532{
1533}
1534impl<PIO: PinId> fc::UsartRxPin<PIO, flexcomm::Usart7>
1535    for Pin<PIO, Special<function::FC7_RXD_SDA_MOSI_DATA>>
1536{
1537}
1538impl<PIO: PinId> fc::UsartSclkPin<PIO, flexcomm::Usart0> for Pin<PIO, Special<function::FC0_SCK>> {}
1539impl<PIO: PinId> fc::UsartSclkPin<PIO, flexcomm::Usart1> for Pin<PIO, Special<function::FC1_SCK>> {}
1540impl<PIO: PinId> fc::UsartSclkPin<PIO, flexcomm::Usart2> for Pin<PIO, Special<function::FC2_SCK>> {}
1541impl<PIO: PinId> fc::UsartSclkPin<PIO, flexcomm::Usart3> for Pin<PIO, Special<function::FC3_SCK>> {}
1542impl<PIO: PinId> fc::UsartSclkPin<PIO, flexcomm::Usart4> for Pin<PIO, Special<function::FC4_SCK>> {}
1543impl<PIO: PinId> fc::UsartSclkPin<PIO, flexcomm::Usart5> for Pin<PIO, Special<function::FC5_SCK>> {}
1544impl<PIO: PinId> fc::UsartSclkPin<PIO, flexcomm::Usart6> for Pin<PIO, Special<function::FC6_SCK>> {}
1545impl<PIO: PinId> fc::UsartSclkPin<PIO, flexcomm::Usart7> for Pin<PIO, Special<function::FC7_SCK>> {}
1546impl<PIO: PinId> fc::UsartTxPin<PIO, flexcomm::Usart0>
1547    for Pin<PIO, Special<function::FC0_TXD_SCL_MISO_WS>>
1548{
1549}
1550impl<PIO: PinId> fc::UsartTxPin<PIO, flexcomm::Usart1>
1551    for Pin<PIO, Special<function::FC1_TXD_SCL_MISO_WS>>
1552{
1553}
1554impl<PIO: PinId> fc::UsartTxPin<PIO, flexcomm::Usart2>
1555    for Pin<PIO, Special<function::FC2_TXD_SCL_MISO_WS>>
1556{
1557}
1558impl<PIO: PinId> fc::UsartTxPin<PIO, flexcomm::Usart3>
1559    for Pin<PIO, Special<function::FC3_TXD_SCL_MISO_WS>>
1560{
1561}
1562impl<PIO: PinId> fc::UsartTxPin<PIO, flexcomm::Usart4>
1563    for Pin<PIO, Special<function::FC4_TXD_SCL_MISO_WS>>
1564{
1565}
1566impl<PIO: PinId> fc::UsartTxPin<PIO, flexcomm::Usart5>
1567    for Pin<PIO, Special<function::FC5_TXD_SCL_MISO_WS>>
1568{
1569}
1570impl<PIO: PinId> fc::UsartTxPin<PIO, flexcomm::Usart6>
1571    for Pin<PIO, Special<function::FC6_TXD_SCL_MISO_WS>>
1572{
1573}
1574impl<PIO: PinId> fc::UsartTxPin<PIO, flexcomm::Usart7>
1575    for Pin<PIO, Special<function::FC7_TXD_SCL_MISO_WS>>
1576{
1577}