Functional memory-mapped register I/O using modern C++.
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Clyne 922489447f Add some concepts to verify types 2 years ago
GUIDE.md update documentation 2 years ago
LICENSE Initial commit 2 years ago
README.md update documentation 2 years ago
funreg.hpp Add some concepts to verify types 2 years ago

README.md

funreg: Functional Register I/O using modern C++

funreg provides a functional approach to interacting with registers. The library includes support for memory-mapped registers; however, other types of registers can be supported through creating a simple access interface.

A unique feature of this library is its ability to handle multiple register operations with a single function call; these operations will be merged together so that the register is only read and written once.

Registers may also be organized into groups. These groups can similarly receive a list of operations, which will be directed the to the appropriate registers for the same single-read-single-write process.

For example, LEDs can be controlled by a microcontroller with a single call:

LEDS::modify<LED1::set, LED2::clear, LED3::set>();

...no matter if the LEDs use different registers, or if any of them are controlled by an external circuit rather than a built-in IO peripheral.

See GUIDE.md for a walk-through of the available functionality.

Feature overview

  • Define registers of any size, at any address, with optional custom access interface
  • Define register masks to name the bits of registers
  • Define register groups so ease programming (e.g. define an RTC group to work with all real-time clock registers at once)
  • Make modifications through groups, masks, or the registers directly

Requirements

  • C++20
  • GCC or Clang with some optimization enabled (O1, O2, O3, Os).