// pub mod gpioa {
// use core::marker::PhantomData;
// use core::convert::Infallible;
// use cortex_m::interrupt::CriticalSection;
// use super::{
// FUNSEL1, FUNSEL2, FUNSEL3, Floating, Funsel, GpioExt, Input, OpenDrain,
// PullUp, Output, FilterType, FilterClkSel, Pin, GpioRegExt, PushPull
// };
// use crate::{pac::PORTA, pac::SYSCONFIG, pac::IOCONFIG};
// use embedded_hal::digital::v2::{InputPin, OutputPin, StatefulOutputPin, toggleable};
// pub struct Parts {
// pub pa0: PA0>
// }
// impl GpioExt for PORTA {
// type Parts = Parts;
// fn split(self, syscfg: &mut SYSCONFIG) -> Parts {
// syscfg.peripheral_clk_enable.modify(|_, w| {
// w.porta().set_bit();
// w.gpio().set_bit();
// w.ioconfig().set_bit();
// w
// });
// Parts {
// pa0: PA0 { _mode: PhantomData }
// }
// }
// }
// fn _set_alternate_mode(index: usize, mode: u8) {
// unsafe {
// let reg = &(*IOCONFIG::ptr());
// reg.porta[index].modify(|_, w| {
// w.funsel().bits(mode)
// })
// }
// }
// pub struct PA0 {
// _mode: PhantomData,
// }
// impl PA0 {
// pub fn into_funsel_1(self, _cs: &CriticalSection) -> PA0> {
// _set_alternate_mode(0, 1);
// PA0 { _mode: PhantomData }
// }
// pub fn into_funsel_2(self, _cs: &CriticalSection) -> PA0> {
// _set_alternate_mode(0, 2);
// PA0 { _mode: PhantomData }
// }
// pub fn into_funsel_3(self, _cs: &CriticalSection) -> PA0> {
// _set_alternate_mode(0, 3);
// PA0 { _mode: PhantomData }
// }
// pub fn into_floating_input(self, _cs: &CriticalSection) -> PA0> {
// unsafe {
// let reg = &(*IOCONFIG::ptr());
// reg.porta[0].modify(|_, w| {
// w.funsel().bits(0);
// w.pen().clear_bit();
// w.opendrn().clear_bit()
// });
// let port_reg = &(*PORTA::ptr());
// port_reg.dir().modify(|r,w| w.bits(r.bits() & !(1 << 0)));
// }
// PA0 { _mode: PhantomData }
// }
// pub fn into_pull_up_input(self, _cs: &CriticalSection) -> PA0> {
// unsafe {
// let reg = &(*IOCONFIG::ptr());
// reg.porta[0].modify(|_, w| {
// w.funsel().bits(0);
// w.pen().set_bit();
// w.plevel().set_bit();
// w.opendrn().clear_bit()
// });
// let port_reg = &(*PORTA::ptr());
// port_reg.dir().modify(|r,w| w.bits(r.bits() & !(1 << 0)));
// }
// PA0 { _mode: PhantomData }
// }
// pub fn into_pull_down_input(self, _cs: &CriticalSection) -> PA0> {
// unsafe {
// let reg = &(*IOCONFIG::ptr());
// reg.porta[0].modify(|_, w| {
// w.funsel().bits(0);
// w.pen().set_bit();
// w.plevel().clear_bit();
// w.opendrn().clear_bit()
// });
// let port_reg = &(*PORTA::ptr());
// port_reg.dir().modify(|r,w| w.bits(r.bits() & !(1 << 0)));
// }
// PA0 { _mode: PhantomData }
// }
// pub fn into_open_drain_output(self, _cs: &CriticalSection) -> PA0