AVR microcontrollers

This is an old revision of this page, as edited by Chungyan5 (talk | contribs) at 12:13, 21 June 2005 (adding development tools for linux debian box). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

The Atmel AVR is a family of RISC microcontrollers from Atmel. The AVR architecture was conceived by two students at the Norwegian Institute of Technology (NTH) and further refined and developed at Atmel Norway, the Atmel daughter company founded by the two chip architects.

The AVR is a Harvard architecture CPU. It has 32 8-bit registers. Some instructions only operate on a subset of these registers. The concatenated register file, input/output file and data memory make up a unified address space accessed through load/store operations. Unlike the PIC, the stack is located in this unified memory space and isn't strictly limited to a fixed size.

The AVR was designed at the outset for efficient execution of compiled C code. Thus some instructions, such as 'add immediate', are strangely missing (you have to 'subtract immediate' the complement instead), while others, such as 'compare with carry', are included.

The AVR instruction set is physically implemented and sold on the market as a number of different controllers, sharing the same AVR core but differing on peripheral / RAM / ROM capabilities: from the Tiny AVR controllers with 1KB flash ROM, no RAM, and 8 pins, up to Mega AVR controllers with 128KB flash ROM, 4KB RAM, 4KB EEPROM, 10 bit ADC with 8 channels, timers, comparators, JTAG, etc. Compatibility across models is preserved to a reasonable degree.

Atmel's AVR controllers have a pipeline with 2 stages (fetch and execute) that allows them to execute most instructions in 1 clock, which makes them relatively fast among the 8-bit controllers on the market.

The AVR instruction set is more regular than that of many other 8-bit microcontrollers (PIC for example). However, it is not orthogonal:

  • Pointer registers X, Y, and Z have addressing capabilities that are different from each other.
  • Register file locations 0...15 have different addressing capabilities than register file locations 16...31.
  • IO locations 0 to 31 have different addressing capabilities than IO locations 32 to 63.
  • CLR affects flags, while SER does not, even though they seem to be complementary intructions (set all bits to 0 and respectively to 1).
  • opcodes 0x95C8 and 0x9004 do exactly the same thing (LPM).


Like the PIC, it has a dedicated hobbyist following (exemplified by the AVRFreaks Internet forum), largely due to the existence of inexpensive/free development tools, for instance a port of the GNU GCC tools.

The acronym AVR has been reported/rumoured to stand for Advanced Virtual RISC and/or the initials of the two company founders—Alf Egil Bogen and Vegard Wollan—who for their part have chosen to let the matter rest unresolved, giving mostly shadowy answers when asked directly.

Development

  • Setup tools in Linux Debian box
    • using apt to get by this command "apt-get install binutils-avr gcc-avr avr-libc uisp"
  • References
Chungyan5 12:13, 21 Jun 2005 (UTC)