cfg(etm_driver_supported) => "The GPIO pins also provide tasks and events via the ETM interconnect system. For more information, see the [etm] module."
//! [`InterruptConfigurable::set_interrupt_handler`](crate::interrupt::InterruptConfigurable::set_interrupt_handler).
/// The low-power domain has its own numbers for these pads, and the low-power registers take such a
/// numbers. Give [`Self::lp_number`] to the low-power registers, and [`Pin::number`] to the digital
doc = "\n\nEnable the input related functionality by using [Output::into_flex] and enabling input via [Flex::set_input_enable]"
/// Configures the clock edge used in one of the two input synchronization stages to synchronize the
/// A listening pin also ends a light sleep. On most chips, sleep entry must give the trigger as
/// a level, so an edge trigger becomes the level at the end of the edge. A rising edge becomes
/// [`Flex::apply_wakeup_config`] describes the configuration, and the conditions that wake the
/// The configuration selects the hardware paths that the pin can use. The wake condition is the
/// The configuration stays after the driver is dropped, because a pad that wakes the chip from
/// deep sleep must continue to do so while no driver owns it. To remove the configuration, call
/// esp-hal reads the result while the sleep ends, so a later clear of the interrupt of the pin
/// does not change it. One case depends on the interrupt status: a pin that ends a light sleep
/// A held pad keeps its level, its function and its resistors, and it ignores its driver. Sleep
/// takes the hold of a wakeup pad, because a deep sleep powers the circuit that drives the pad
(($_signal:ident, LP_GPIOn, $lp_pin:literal), $gpio:ident, $af:ident, $_lp_in:tt $_lp_out:tt) => {
(all $( ($n:literal, $gpio:ident $in_afs:tt $out_afs:tt ($input:tt [$($is_output:ident)?]) ) ),* ) => {
(all $( ($n:literal, $gpio:ident $in_afs:tt $out_afs:tt ([$($is_input:ident)?] $output:tt) ) ),* ) => {
(all $( ($n:literal, $gpio:ident $in_afs:tt $out_afs:tt ([$($is_input:ident)?] $output:tt) ) ),* ) => {
(all $( ($n:literal, $gpio:ident $in_afs:tt $out_afs:tt ($input:tt [$($is_output:ident)?]) ) ),* ) => {
($n:literal, $gpio:ident ($( $af_input_num:ident => $af_input_signal:ident )*) ($( $af_output_num:ident => $af_output_signal:ident )*) $attrs:tt) => {
pub unsafe fn split(self) -> (interconnect::InputSignal<'d>, interconnect::OutputSignal<'d>) {
fn output_signals(&self, _: crate::private::Internal) -> &'static [(AlternateFunction, OutputSignal)] {
fn input_signals(&self, _: crate::private::Internal) -> &'static [(AlternateFunction, InputSignal)] {