Expand description
Type-level tools to configure SERCOM pads
This module helps configure Pins as SERCOM pads. It provides type-level
tools to convert Pins to the correct PinMode and to enforce type-level
constraints at compile-time.
§Overview
A SERCOM pad is defined by two types, its corresponding Sercom instance
and its PadNum, from Pad0 to Pad3. However, a given SERCOM pad
can usually be mapped to several possible PinIds.
There are two primary traits defined in this module:
- The
IsPadtrait is implemented onPintypes that are properly configured as SERCOM pads, withPinModeAlternateCorAlternateD. It acts as both a type class for SERCOM pads and as a type-level function to recover the correspondingSercomandPadNumtypes from thePin. - The
GetPadtrait maps eachPinIdto its corresponding, pad-related types. ThePadModealias usesGetPadto recover the correspondingPinModefor a given SERCOM pad, while thePadalias recovers the configuredPintype.
§IOSET (SAMD51/SAME5x only)
SAMx5x chips do not allow arbitrary combinations of PinId for a given
SERCOM. Instead, all PinIds must belong to the same IOSET. This module
defines a [type-level enum], IoSet, to enforce this restriction, and the
InIoSet type class is responsible for labeling each IsPad type with
its corresponding, valid IoSet(s).
Enums§
- Pad0
- Type-level variant of
PadNumrepresenting SERCOM pad 0 - Pad1
- Type-level variant of
PadNumrepresenting SERCOM pad 1 - Pad2
- Type-level variant of
PadNumrepresenting SERCOM pad 2 - Pad3
- Type-level variant of
PadNumrepresenting SERCOM pad 3 - Undoc
IoSet1 - This type is not present with the selected feature set, defined for documentation only
- Undoc
IoSet2 - This type is not present with the selected feature set, defined for documentation only
Traits§
- GetPad
- Type-level function mapping
PinIds to SERCOM-pad-related types - InIoSet
- This trait is not present with the selected feature set, defined for documentation only
- IoSet
- This trait is not present with the selected feature set, defined for documentation only
- IsI2c
Pad - Type class for
Pins which can be used as I2C pads - IsPad
- Type class for
Pins configured as SERCOM pads - Optional
Pad - Type-level equivalent of
Option<Pad> - Optional
PadNum - Type-level equivalent of
Option<PadNum> - PadNum
- Type-level enum representing a SERCOM pad number
- SomePad
- Type-level equivalent of
Some(Pad)