This repository contains drivers and sample projects to program micro-controllers with the Ada and SPARK languages. The library also provides some middleware services and drivers for external devices such as sensors. We intend this to be a location for both AdaCore and the community in general to contribute support for additional processors, platforms, and vendors.
Ada_Drivers_Library provides support for various devices in the ARM Cortex-M and RISC-V architectures. Some devices are only partially supported. Go to the boards directory for a list of supported hardware.
Arch | Board |
---|---|
ARM | STM32F407_Discovery |
ARM | STM32F429_Discovery |
ARM | STM32F469_Discovery |
ARM | STM32F4XX_M |
ARM | STM32_F4VE |
ARM | STM32F746_Discovery |
ARM | STM32F769_Discovery |
ARM | STM32_H405 |
ARM | NUCLEO_F446ZE |
ARM | Crazyflie |
ARM | Feather_STM32F405 |
ARM | OpenMV2 |
ARM | MicroBit |
ARM | NRF52_DK |
RISC-V | HiFive1 |
RISC-V | HiFive1_rev_B |
RISC-V | Unleashed |
Native |
To start using the Ada_Drivers_Library, please go to the examples directory where you will find instructions to run your first project.
All files are provided under a 3-clause Berkeley Software Distribution (BSD) license. As such, and within the conditions required by the license, the files are available both for proprietary ("commercial") and non-proprietary use.
For details, see the LICENSE
file in the root directory.
The software is written in Ada 2012 and uses, for example, preconditions, postconditions, and the high-level iterator form of for-loops.
In addition, a GNAT implementation-defined pragma is used extensively. This
pragma makes it possible to avoid explicit temporary copies when assigning
components of types representing hardware registers requiring full word or full
half-word accesses. The pragma is named Volatile_Full_Access
. Those persons
wishing to submit additions to the library should see the GNAT Reference Manual
for details.
Therefore, building with the sources requires a compiler supporting both Ada
2012 and the GNAT-defined pragma Volatile_Full_Access
. For instance a recent
GNAT Pro compiler or GNAT FSF 12 for ARM ELF or RISC-V ELF (Download
here).
Here is a list of projects that we are either dreaming about or already working on. If you are interested by one of those, please contact us on the project's GitHub page.
- ARM
- STM32F4/7 USB drivers
- Components
- BlueNRG-MS (Bluetooth Low Energy Network Processor)
- Services
- Bluetooth Low Energy stack
- USB stack
- Certyflie: Ada/SPARK flight controller for the Crazyflie 2.0
- ACNC: A Gcode interpreter and CNC controller
- AMCQ: Multiple Choice Questions candy dispenser
- Giza: Giza is trying to be a simple widget tool kit for embedded platforms
- solenoid-engine-controller: Software controller for solenoid engines
- un_pola: DIY instant camera with OpenMV
- bare metal demos: Various Ada Demos on STM32*-Disco boards using this library
- SPARK Railway Demo: Simulated railway network in SPARK/Ada
- NXT Lego Robotics: Ada drivers and demos for Lego NXT sensors and motors
- Bosch 9DOF IMU demo: Bosch 9DOF IMU driving a 3-D model of a lunar lander
- Bare metal sudoku solver
- Demo of an Ada physics engine
- High Integrity Sumobot: A fully functional sumobot written in Ada/SPARK
- RC Car: A remotely-controlled car built without the NXT Brick, written completely in Ada and SPARK
(Add yours to the list!)