Atmel AVR
Aus c't-Bot Wiki
Inhaltsverzeichnis |
[Bearbeiten] Einführung
Atmel AVR ist eine 8-Bit-RISC-Prozessor-Familie der Firma Atmel. Ähnlich wie der PICmicro von Microchip hat auch die AVR-Familie eine „bekennende“ Anhängerschaft. Die Typen unterteilen sich in die Gruppen
- AT90Sxxxx: die "Klassischen" AVRs, für neue Designs nicht mehr empfohlen
- ATtiny
- ATmega
[Bearbeiten] Programmierung
Die große Beliebtheit der AVRs auch bei Hobby-Anwendern ergibt sich u.a. aus der einfachen Handhabung. Fast alle Typen können über eine ISP-Schnittstelle (AVR ISP, In-System Programmer) programmiert werden, die über simple Programmieradapter Anschluss an die serielle, parallele oder USB-Schnittstelle eines PCs findet. Die Besonderheit liegt in der Möglichkeit, den Prozessor nicht aus der Zielschaltung herausnehmen zu müssen, um ihn zu programmieren.
Neuere Typen besitzen auch eine JTAG-Schnittstelle, über die man den Mikrocontroller nach dem IEEE-Standard 1149.1 debuggen kann.
Weiterhin existiert eine Vielzahl freier Entwicklungswerkzeuge, wie z.B. die für AVR-Cross-Compiling portierten GNU-Tools.
[Bearbeiten] RISC-Architektur
Ein Vorteil gegenüber anderen Mikroprozessor-Familien ist, dass sich dank der RISC-Architektur die meisten Befehle auf Register innerhalb eines Systemtakts abarbeiten lassen, ausgenommen Sprung- und Multiplikationsbefehle, sowie Zugriffe auf das Speicherinterface (u.a. RAM und I/O-Ports). Somit ist diese Architektur sehr schnell im Vergleich zu anderen.
Durch das auf Hochsprachen wie C ausgelegte Hardware-Design können auch Compiler sehr effizienten Code erzeugen, und man muss sich nicht mehr unbedingt auf Assembler-Ebene begeben.
[Bearbeiten] Befehlssatz
Im Gegensatz zu den PICmicro-Prozessoren wurde der AVR-Befehlssatz über alle Modelle, abgesehen vom AT90S1200 mit eingeschränktem und den ATmega mit erweitertem Befehlssatz kompatibel gehalten.
| Modell | Anzahl der Befehle |
| AT90S1200 | 89 |
| restliche AT90xxxx | 118 |
| ATMega128 | 133 |
| ATMega168 | 131 |
Die AVR-Prozessoren sind für die effiziente Ausführung von kompiliertem C-Code gestaltet worden. Noch vor Fertigstellung des AVR-Kerns wurde mit der Entwicklung eines C-Compilers begonnen, um dadurch Optimierungspotential zu erkennen. So wurde die Instruktion "Addition mit direktem Parameter" (add immediate) entfernt, denn anstatt dieser Instruktion kann ebenso gut der Befehl "Subtrahiere direkt" (subtract immediate) mit dem Komplement verwendet werden. Der dadurch auf dem Silizium frei werdende Platz wurde dann zum Realisieren einer "Addition mit direktem 16-Bit-Parameter" (add immediate word) frei. Ein Befehl wie "Vergleich mit Carry-Flag" (compare with carry) wurde eingeführt, um einen effizienten Vergleich von 16- und 32-Bit-Werten, wie er in Hochsprachen an der Tagesordnung ist, zu ermöglichen. Anstatt zwei Adressregistern wurden drei Adressregister vorgesehen, und auf ein anfangs geplantes segmentiertes Speicher-Layout wurde komplett verzichtet, weil dieses nur schwer von Compilern zu handhaben ist.
[Bearbeiten] Speicherarchitektur
Das Speicher-Management folgt den Richtlinien der Harvard-Architektur. Es gibt also getrennte Adressräume für den Flash-Speicher, das RAM und das EEPROM. Im Gegensatz zu einfacheren Microkontrollern besitzen die AVRs 32 Register, mit welchen direkt Operationen ausgeführt werden können. Ein umständliches Verschieben von Werten aus dem RAM, um dann mit ihnen Operationen durchführen zu können, entfällt hiermit.
[Bearbeiten] Weblinks
- Produktseite des Herstellers
- Sehr ausführliches Tutorial rund um den AVR
- AVR-Port der C-Standardbibliothek
- GNU C/C++-Cross-Compiler (Windowsversion)
- GNU C/C++-Cross-Compiler (Linuxversion)
- AVRco Embedded Pascal Compiler (Windows)
- AVR-Microcontroller and C-Compiler Co-Design (englisches PDF-Dokument, 68 KByte)