modm API documentation
modm::platform::SoftwareGpioPort< Gpios > Class Template Reference

#include <modm/platform/gpio/software_port.hpp>

Inheritance diagram for modm::platform::SoftwareGpioPort< Gpios >:
modm::GpioPort modm::platform::GpioSet< Gpios... > modm::platform::Gpio

Public Typedefs

using PortType = std::conditional_t< (width > 8), std::conditional_t< (width > 16), uint32_t, uint16_t >, uint8_t >
 
using PortType = uint16_t
 may also be uint8_t, depending on port width
 

Public Types

enum  DataOrder : bool { DataOrder::Normal = false, DataOrder::Reversed = true }
 This enum can be used to reverse the bit order of the Data. More...
 
enum  InputType { InputType::Floating = 0x0, InputType::PullUp = 0x1, InputType::PullDown = 0x2 }
 
enum  OutputSpeed {
  Low = 0, Medium = 0x1, High = 0x3, MHz2 = Low,
  MHz10 = Medium, MHz50 = High
}
 
enum  OutputType { OutputType::PushPull = 0x0, OutputType::OpenDrain = 0x1 }
 
enum  Port { A = 0, B = 1, C = 2, F = 5 }
 The Port a Gpio Pin is connected to.
 

Static Public Member Functions

static constexpr DataOrder getDataOrder ()
 
static PortType isSet ()
 
static void write (PortType data)
 
static PortType read ()
 
static constexpr DataOrder getDataOrder ()
 returns the chosen data order
 
static PortType read ()
 The read data is always right-aligned regardless of physical mapping.
 
static void setInput ()
 
static void setOutput ()
 
static void toggle ()
 Toggle the output states of all pins.
 
static void write (PortType data)
 The write data is always right-aligned regardless of physical mapping.
 
static void configure (OutputType type, OutputSpeed speed=OutputSpeed::MHz50)
 
static void configure (InputType type)
 
static void disconnect ()
 
static void lock ()
 
static void reset ()
 
static void set ()
 
static void set (bool status)
 
static void setAnalogInput ()
 
static void setInput ()
 
static void setInput (InputType type)
 
static void setOutput ()
 
static void setOutput (bool status)
 
static void setOutput (OutputType type, OutputSpeed speed=OutputSpeed::MHz50)
 
static void toggle ()
 

Static Public Attributes

static constexpr uint8_t number_of_ports
 
static constexpr uint8_t width
 
static constexpr uint8_t number_of_ports
 
static constexpr uint8_t width
 

Static Protected Member Functions

static constexpr int8_t shift_mask (uint8_t id, uint8_t pos)
 
static constexpr uint16_t inverted (uint8_t id)
 
static constexpr uint16_t mask (uint8_t id)
 
static constexpr uint32_t mask2 (uint8_t id, uint8_t value=0b11)
 
static constexpr uint8_t numberOfPorts ()
 

Static Protected Attributes

static constexpr int8_t shift_masks [4][width]
 
static constexpr uint16_t inverteds [4]
 
static constexpr uint16_t masks [4]
 

Detailed Description

template<class... Gpios>
class modm::platform::SoftwareGpioPort< Gpios >

Create an up to 32-bit port from arbitrary pins.

This class optimizes the data type for the read() and write() methods. Supplying up to 8 Gpios will use uint8_t, up to 16 Gpios uint16_t and up to 32 Gpios uint32_t.

Note
Since the bit order is explicitly given by the order of template arguments, this class only supports DataOrder::Normal. If you need reverse bit order, reverse the order of Gpios!
Template Parameters
GpiosUp to 32 GpioIO classes, ordered MSB to LSB
Author
Niklas Hauser

Member Enumeration Documentation

enum modm::GpioPort::DataOrder : bool
inheritedstrong

This enum can be used to reverse the bit order of the Data.

Enum ValuesDocumentation
Normal 

bit order of data is the same as bit order of port

Reversed 

bit order of data is the reverse bit order of port

enum modm::platform::Gpio::InputType
inheritedstrong
Enum ValuesDocumentation
Floating 

floating on input

PullUp 

pull-up on input

PullDown 

pull-down on input

enum modm::platform::Gpio::OutputType
inheritedstrong
Enum ValuesDocumentation
PushPull 

push-pull on output

OpenDrain 

open-drain on output

Member Data Documentation

constexpr uint8_t modm::GpioPort::number_of_ports
inheritedstaticconstexpr

This holds the number of unique platform ports that this implementation accesses. It's always at least 1.

template<class... Gpios>
constexpr int8_t modm::platform::SoftwareGpioPort< Gpios >::shift_masks[4][width]
staticprotectedconstexpr
Initial value:
{
{(Gpios::port == Set::Port::A ? Gpios::pin : -1)...},
{(Gpios::port == Set::Port::B ? Gpios::pin : -1)...},
{(Gpios::port == Set::Port::C ? Gpios::pin : -1)...},
{(Gpios::port == Set::Port::F ? Gpios::pin : -1)...},
}
constexpr uint8_t modm::GpioPort::width
inheritedstaticconstexpr

This holds the width of the port as number of bits and can be used in drivers to assert the correct requirements


The documentation for this class was generated from the following file: