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.
funreg/README.md

38 lines
1.5 KiB
Markdown

# funreg: Functional Register I/O using modern C++
2 years ago
*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.
2 years ago
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.
2 years ago
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:
```cpp
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
2 years ago
## Requirements
* C++20
* GCC or Clang with some optimization enabled (O1, O2, O3, Os).
2 years ago