Expand description
Type-level tools to configure SERCOM pads
This module helps configure Pin
s as SERCOM pads. It provides type-level
tools to convert Pin
s 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 PinId
s.
There are two primary traits defined in this module:
- The
IsPad
trait is implemented onPin
types that are properly configured as SERCOM pads, withPinMode
AlternateC
orAlternateD
. It acts as both a type class for SERCOM pads and as a type-level function to recover the correspondingSercom
andPadNum
types from thePin
. - The
GetPad
trait maps eachPinId
to its corresponding, pad-related types. ThePadMode
alias usesGetPad
to recover the correspondingPinMode
for a given SERCOM pad, while thePad
alias recovers the configuredPin
type.
IOSET
SAMx5x chips do not allow arbitrary combinations of PinId
for a given
SERCOM. Instead, all PinId
s 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
Type-level variant of IoSet
representing an undocumented SERCOM
IOSET
Traits
Type-level function mapping OptionalPinId
s to their corresponding
OptionalPad
s
Type-level enum representing a SERCOM IOSET
Type-level equivalent of Option<Pad>
Type-level equivalent of Option<PadNum>
Type-level enum representing a SERCOM pad number
Type-level equivalent of Some(Pad)