CHERIoT RTOS
A compartmentalised RTOS for CHERIoT hardware
Loading...
Searching...
No Matches
SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask > Struct Template Reference

A simple driver for the Sonata's GPIO. More...

#include <platform-gpio.hh>

Inheritance diagram for SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >:
Collaboration diagram for SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >:

Public Types

enum  : uint32_t { PcIntStatus = 1U << 31 }
 Control Register Fields. More...
enum  PcIntMode : uint32_t { AnyEdge = 0 , RisingEdge = 1 , FallingEdge = 2 , LowLevel = 3 }
enum  : uint32_t { PcIntModeSelect = PcIntModeBits << 0 , PcIntInputSelect = 1U << 3 , PcIntEnable = 1U << 31 }
 Status Register Fields. More...

Public Member Functions

void set_output (uint32_t index, bool value) volatile
 Set the output bit for a given GPIO pin index to a specified value.
void set_output_enable (uint32_t index, bool enable) volatile
 Set the output enable bit for a given GPIO pin index.
void enable_interrupts (bool enable) volatile
 Enable GPIO pin-change interrupts for this instance.
void clear_interrupt_mask () volatile
 Clear the GPIO pin-change interrupt mask.
void set_interrupt (uint32_t index, bool enable) volatile
 Only GPIO pins explicitly enabled can trigger an interrupt.
void debounce_interrupt (bool debounce) volatile
 Whether to use the raw or debounced input for the GPIO pin-change interrupt.
void change_interrupt_mode (enum PcIntMode mode) volatile
 Select the pin-change interrupt mode.
void clear_interrupt_status () volatile
bool read_input (uint32_t index) volatile
 Read the input value for a given GPIO pin index.
bool read_debounced_input (uint32_t index) volatile
 Read the debounced input value for a given GPIO pin index.
bool read_interrupt_status () volatile

Static Public Member Functions

static constexpr uint32_t gpio_bit (uint32_t index, uint32_t mask)
 Returns a mask with a single bit set corresponding to the given GPIO index or 0 if that bit is not set in mask.

Public Attributes

uint32_t output
uint32_t input
uint32_t debouncedInput
uint32_t outputEnable
uint32_t control
uint32_t status
uint32_t pcintMask

Static Public Attributes

static constexpr uint32_t PcIntModeBits = 2

Detailed Description

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
struct SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >

A simple driver for the Sonata's GPIO.

This struct represents a single GPIO instance, and the methods available to interact with that GPIO. This class should usually be used via one the aliases / subclasses defined below which are specialised to the GPIO instance. e.g. see SonataGpioBoard.

Documentation source can be found at: https://github.com/lowRISC/sonata-system/blob/9f794fe3bd4eec8d1a01ee81da97a7f2cec0b452/doc/ip/gpio.md

Rendered documentation is served from: https://lowrisc.org/sonata-system/doc/ip/gpio.html

Template Parameters
OutputMaskThe mask of bits of the output register that contain meaningful GPIO output.
InputMaskThe mask of bits of the input and debouncedInput registers that contain meaningful GPIO input. This is usually the same as OutputMask if the instance has the same number of input and output pins.
OutputEnableMaskThe mask of bits for the output_enable register, again this is usually the same as OutputMask.
PcIntMaskThe mask of bits for the pcint_mask register, this is the same as the InputMask.

Definition at line 40 of file platform-gpio.hh.

Member Enumeration Documentation

◆ anonymous enum

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
anonymous enum : uint32_t

Control Register Fields.

Enumerator
PcIntStatus 

Pin-change interrupt status. Write 1 to clear.

Definition at line 51 of file platform-gpio.hh.

◆ anonymous enum

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
anonymous enum : uint32_t

Status Register Fields.

Enumerator
PcIntModeSelect 

Pin-change interrupt mode.

See PcIntMode enums.

PcIntInputSelect 

Select between the raw (0) and debounced input (1).

PcIntEnable 

Enable the pin-change interrupt instance-wide.

Definition at line 68 of file platform-gpio.hh.

◆ PcIntMode

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
enum SonataGpioBase::PcIntMode : uint32_t

Definition at line 58 of file platform-gpio.hh.

Member Function Documentation

◆ change_interrupt_mode()

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
void SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::change_interrupt_mode ( enum PcIntMode mode) volatile
inline

Select the pin-change interrupt mode.

Definition at line 185 of file platform-gpio.hh.

◆ clear_interrupt_mask()

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
void SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::clear_interrupt_mask ( ) volatile
inline

Clear the GPIO pin-change interrupt mask.

Definition at line 143 of file platform-gpio.hh.

◆ clear_interrupt_status()

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
void SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::clear_interrupt_status ( ) volatile
inline

Definition at line 190 of file platform-gpio.hh.

◆ debounce_interrupt()

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
void SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::debounce_interrupt ( bool debounce) volatile
inline

Whether to use the raw or debounced input for the GPIO pin-change interrupt.

Definition at line 170 of file platform-gpio.hh.

◆ enable_interrupts()

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
void SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::enable_interrupts ( bool enable) volatile
inline

Enable GPIO pin-change interrupts for this instance.

Definition at line 128 of file platform-gpio.hh.

◆ gpio_bit()

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
constexpr uint32_t SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::gpio_bit ( uint32_t index,
uint32_t mask )
inlinestaticconstexpr

◆ read_debounced_input()

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
bool SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::read_debounced_input ( uint32_t index) volatile
inline

Read the debounced input value for a given GPIO pin index.

For this to be meaningful, the corresponding pin must be configured to be an input first (set output enable to false for the given index). If given an invalid GPIO pin (outside the input mask), then this value will always be false.

Definition at line 214 of file platform-gpio.hh.

◆ read_input()

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
bool SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::read_input ( uint32_t index) volatile
inline

Read the input value for a given GPIO pin index.

For this to be meaningful, the corresponding pin must be configured to be an input first (set output enable to false for the given index). If given an invalid GPIO pin (outside the input mask), then this value will always be false.

Definition at line 202 of file platform-gpio.hh.

◆ read_interrupt_status()

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
bool SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::read_interrupt_status ( ) volatile
inline

Definition at line 219 of file platform-gpio.hh.

◆ set_interrupt()

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
void SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::set_interrupt ( uint32_t index,
bool enable ) volatile
inline

Only GPIO pins explicitly enabled can trigger an interrupt.

Enabling a GPIO pin for interrupts will set the corresponding bit in the pin-change interrupt mask.

Definition at line 153 of file platform-gpio.hh.

◆ set_output()

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
void SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::set_output ( uint32_t index,
bool value ) volatile
inline

Set the output bit for a given GPIO pin index to a specified value.

This will only have an effect if the corresponding bit is first set to 1 (i.e. output) in the output_enable register, and if the pin is a valid output pin.

Definition at line 94 of file platform-gpio.hh.

◆ set_output_enable()

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
void SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::set_output_enable ( uint32_t index,
bool enable ) volatile
inline

Set the output enable bit for a given GPIO pin index.

If enable is true, the GPIO pin is set to output. If false, it is instead set to input mode.

Definition at line 112 of file platform-gpio.hh.

Member Data Documentation

◆ control

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
uint32_t SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::control

Definition at line 46 of file platform-gpio.hh.

◆ debouncedInput

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
uint32_t SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::debouncedInput

Definition at line 44 of file platform-gpio.hh.

◆ input

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
uint32_t SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::input

Definition at line 43 of file platform-gpio.hh.

◆ output

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
uint32_t SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::output

Definition at line 42 of file platform-gpio.hh.

◆ outputEnable

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
uint32_t SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::outputEnable

Definition at line 45 of file platform-gpio.hh.

◆ pcintMask

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
uint32_t SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::pcintMask

Definition at line 48 of file platform-gpio.hh.

◆ PcIntModeBits

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
uint32_t SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::PcIntModeBits = 2
staticconstexpr

Definition at line 66 of file platform-gpio.hh.

◆ status

template<uint32_t OutputMask = 0xFFFF'FFFF, uint32_t InputMask = OutputMask, uint32_t OutputEnableMask = OutputMask, uint32_t PcIntMask = InputMask>
uint32_t SonataGpioBase< OutputMask, InputMask, OutputEnableMask, PcIntMask >::status

Definition at line 47 of file platform-gpio.hh.


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