yazoalfa/README.md
2020-02-21 21:55:04 +01:00

3.2 KiB

yazoalfa

Yet Another Zero Overhead Abstraction Library For AVR.

Specification

This document will outline the capabilities of this library and what features will be implemented. The library is grouped into modules that each implement a zero overhead template-based abstraction for the underlying hardware of the AVR chip.

IO

The IO module provides an abstraction for configuring the mode of a pin, or port, or virtual port. It provides an easy way of writing to, or reading from the underlying hardware.

Virtual port

Sometimes it is not possible to use a hardware port, because some pins are needed for their alternative functions. In this case it would be very convenient to group arbitrary pins into a virtual port that can then be used just like a regular port. This will obviously incur some overhead compared to a hardware port, but not more than manually setting each pin.

ADC

The ADC module provides an easy way to configure the mode of operation and will check that only pins with ADC can be used.

UART

The UART module provides a general interface for serial communication which is decoupled from the actual backend driver. The backend driver might be UART0 (or UART1 if available), or it might be a user provided software UART driver on chips (pins) that don't have hardware UART support.

The backend might also be interrupt driven and use some configurable receive/transmit buffer, or be blocking and not need any buffers. The buffers should only be allocated in interrupt driven mode and also be compile-time allocated.

SPI

The SPI module, similar to UART, is decoupled from the backend. This allows a software backend to be used where no hardware SPI is supported.

I2C

The I2C module is basically identical to SPI, just with a different protocol.

Goals

  • IO
    • Interface for io-pins
    • Interface for io-ports
    • Interface for mapping io-pins onto virtual io-ports, where the pins do not have to be located on the same hardware port
    • Provide an example showcasing the usage and possibilities
  • ADC
    • Support common usage with easy extendability
    • Compile-time check for correct hardware configuration
    • Provide an example showcasing the usage and possibilities
  • UART
    • Separation of interface and backend-driver
    • Support common usage with easy extendability
    • Compile-time check for correct hardware configuration
    • Blocking hardware backend
    • Interrupt driven hardware backend
    • Type-safe convenience functions for writing basic data types
    • Provide an example showcasing the usage and possibilities
  • SPI
    • Separation of interface and backend-driver
    • Support all hardware provided configuration options
    • Compile-time check for correct hardware configuration
    • Provide an example showcasing the usage and possibilities
  • I2C
    • Separation of interface and backend-driver
    • Support common usage with easy extendability
    • Compile-time check for correct hardware configuration
    • Provide an example showcasing the usage and possibilities
  • General
    • Support for most common AVR chips (ATmega8, ATmega328, ATtiny85, ...)