SYNOPSIS
________

avrilx is a collection of peripheral drivers and utility routines for the AVR
XMega family. Contrary to many libraries out there, it is based on C++
templates and policy-based design (vs run-time parameter
passing to general purpose drivers ; and callbacks). The benefits are smaller
and faster code - which is specialized and inlined at compile time  ; and a much
smaller overhead when layering or glueing together layers of drivers.

Supported peripherals:
- GPIO, bit-level and parallel
- SPI, slave and master
- USART
- USART in SPI mode, master
- TWI master
- ADC
- DAC, single and dual channel
- Timers, PWM
- Various delay and timing functions (using RTC, timers, timed busy loops)

Drivers and utility routines for:
- DMA setups for background data reception into a FIFO, and background data
writes from a FIFO (eg: waveform generation, audio playback)
- ADC multichannel scanning and filtering
- Input (165) and output (595) shift registers
- LEDs arrays
- HD44780 compatible LCDs
- Rotary encoder decoder
- Switch debouncing
- TWI eeprom
- MMC/SD/SDHC card on SPI port, FAT/FAT32 formated, 8.3 filenames,
through two different drivers:
  + A simple, read-only driver suitable for bootloaders (< 2kb of code).
  + A complete interface based on ChaN's FatFS.

Bells and whistles:
- makefile template
- Bootloader allowing firmware updates by MIDI ; and utilities for converting .hex files into .syx files
- Resources system for generating string and lookup tables with python scripts
- A collection of assembly-optimized code for arithmetic operations on fixed
point numbers or unusually-sized integers (4 bit, 24 bits...)


LICENCING
_________

This library is released under a GPL3.0 license. Developed by Emilie Gillet (emilie.o.gillet@gmail.com) for Mutable Instruments.

Credits:

* third_party/sp_driver contains the self-programming code provided by Atmel.
* third_party/ff contains a slightly modified version of ChaN's FatFS library
and MMC drivers.


SETUP
_____

This code has been tested with Boston Android EVAL-USB-128
(http://www.bostonandroid.com/EVAL-USB-128.html) and EVAL-04
(http://www.bostonandroid.com/EVAL-04.html) boards. See the examples/README file
for more information about the hardware setup used for some of the examples.

The build system is configured for the following setup:
- MCU: XMega 128a3
- Programmer: AVR ISP mkII from Atmel.
- Toolchain: avr-gcc 4.3.3 on Mac OS X (CrossPack-AVR).

The toolchain and avrdude paths, along with the port/type of AVR programmer can
be modified in avrlibx/config.mk.

The MCU and crystal frequency can be modified on a per-project basis in the
makefile.

You can use examples/blink as a code and makefile skeleton for new projects!
