D-RAL - Device Register Access Layer
What is it?
D-RAL is a register access code generator for any device, chip or embedded system. The goal is to provide a simple and consistent way to access the internal registers of the device. Every embedded project requires the programmer to manipulate registers. D-RAL is trying to address this and provide an easy way to access registers. The main motivation for creating this project was to design a register access layer for modern C++ programming language.
Main functionality
Main functionality is to generate a register access layer based on the device register description input for the C++ programming language. Currently, D-RAL only supports the SVD format as an input file with a description of the registers. SVD is an ARM-created format that formalizes the description of the system inside microcontrollers based on Arm Cortex-M processors, specifically the memory mapped registers of peripherals. It is a widely used format by many companies. It is also possible to use your own register description format in D-RAL by writing an adapter that translates it to know for the D-RAL form. More about this on the wiki page. D-RAL generates a set of header files that you can simply copy and paste into your existing project.
Example
Let's take the STM32F411 microcontroller and its general-purpose timers as an example. We want to configure the TIM2 timer as a countdown timer. To do this, we need to set the direction bit in one of the timer's control registers.
We can accomplish this in C++ by utilizing raw pointers:
constexpr uint32_t Tim2Cr1Address = 0x4000'0000;
constexpr uint32_t Tim2Cr1DirPos = 4;
constexpr uint32_t Tim2Cr1DirMask = 0x1;
volatile uint32_t* Tim2Cr1Reg = reinterpret_cast<volatile uint32_t*>(Tim2Cr1Address);
*Tim2Cr1Reg = (*Tim2Cr1Reg & ~(Tim2Cr1DirMask << Tim2Cr1DirPos)) | ((1 & Tim2Cr1DirMask) << Tim2Cr1DirPos);
Or we can use D-RAL:
dral::stm32f411::tim2::cr1::dir::write(1);
This is a brief example to demonstrate D-RAL's purpose. More information can be found on the Wiki page.
Main benefits of using D-RAL:
- Simple and clean syntax,
- Less code,
- No need to warry about bit shifting and masking,
- No run-time overhead
Installing
The easiest way to install D-RAL is with pipx.
pipx install dral
You can also install D-RAL with pip
:
pip install dral
Whichever method you use, you should have a dral
command on your path.
Usage
D-RAL is a CLI tool that takes two positional arguments
dral [OPTIONS] INPUT OUTPUT
- INPUT - path to external device description file
- OUTPUT - a path where D-RAL files will be generated.
Extra functionality
The D-RAL generator is flexible enough to be easily adapted to generate register access layers for other programming languages or for other use cases. More about it on the Wiki page.