2022-08-08 21:03:52 -04:00
2022-08-09 22:06:06 -04:00
2022-08-06 21:50:29 -04:00
2022-08-09 22:06:06 -04:00

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).
Description
Functional memory-mapped register I/O using modern C++.
Readme 122 KiB
Languages
C++ 97.6%
Assembly 2.3%