avr-classes
avr-classes Documentation

The avr-classes solution contains three projects:

Project Description
core Core features of the AVR controllers, like GPIO pins, USART, etc. as well as generic components like ring buffers, an event system and more.
devices Drivers for external devices that can be attached to an AVR controller, like shift registers, I2C EEPROM or displays.
ham32a "hardware abstraction for ATmega32A", contains hardware specific implementations of the interfaces defined by core.

The main idea of this separation is to make porting to different platforms as easy as possible, maybe even to non-AVR platforms. Although keeping hardware specific things like concrete register names inside the hardware abstraction project works pretty well, there still are some specific parts in core that were too difficult to be avoided:

However, these parts are contained in a very limited set of .cpp files and accessed via generic interfaces, so the definitions from AVR specific header files like <avr/io.h> shouldn't escape into the global scope or even the user application.

The following subpages explain some of the basic ideas:

A list of changes can be found in the Version History.