aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md38
1 files changed, 28 insertions, 10 deletions
diff --git a/README.md b/README.md
index c46b295..7ca829c 100644
--- a/README.md
+++ b/README.md
@@ -1,16 +1,34 @@
-# funreg: Functional Memory-mapped Register I/O
+# funreg: Functional Register I/O using modern C++
-*funreg* provides a functional approach to operating on memory-mapped registers
-with zero overhead. This library primarily targets embedded firmware, where
-these types of operations are frequently encountered.
+*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.
-What makes this library unique is its ability to carry out multiple register
-operations with a single function call, reducing this to a single register read
-and write. Further, registers can be organized into "groups": these groups can
-receive a list of operations for any of the contained registers, and will
-optimize down to a single read and write for each register.
+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.
-A tutorial or guide will be added soon.
+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
## Requirements