Fakultät Elektrotechnik und Informationstechnik, Professur für Prozessleittechnik Prozessinformationsverarbeitung (PIV) Programmierung von Mikrocontrollern am Beispiel des ATMEL ATmega32 Professur für Prozessleittechnik Wintersemester 2008/2009 1. Architektur 1.1. Überblick 1.2. Allgemeine Merkmale • 8-Bit-RISC-Prozessor • Harvard-Architektur • 32 Universal-Register • Befehlssatz mit 131 Assembler-Befehlen • Integrierte Multipliziereinheit • Ausführungszeit zwischen 1 und 4 Takten • Taktfrequenz bis 16 Mhz • Umfangreiche Peripherie 1.3. Kernarchitektur • 32K Byte Flash-Programmspeicher • 1K Byte EEPROM Datenspeicher • 2K Byte SRAM Speicher • Interner und externer Taktgeber • 21 Interne und externe Interrupt-Quellen • 6 verschiedene Energiesparzustände • JTAG-Schnittstelle mit Online-Debugging • Bootloader-Unterstützung 1.4. Peripherie • 32 Tri-Stated GPIO in vier Registern • 8-Bit und 16-Bit Timer/Counter mit PWM • 10-Bit ADC (Single-Ended/Differential) • Analog-Komparator • Programmierbare USART-Schnittstelle • TWI-Schnittstelle (I²C-kompatibel) • SPI-Schnittstelle (Master/Slave) • Watchdog-Timer und Spannungsausfallerkennung 2. Grundlagen der Programmierung von AVRMikrocontrollern in C 2.1. Prinzipielle Vorgehensweise 1. Auswahl und Konfiguration von µC und Peripherie (Datenblatt) 2. Entwurf und Implementierung von Algorithmus und Kontrollstrukturen (beliebiger ANSI-C Compiler) 3. Portierung des Entwurfs auf den µC (Simulator) 4. Implementierung auf dem Zielsystem (JTAG) Dabei zunächst Recherche nach vorhandenen Quellen, danach Entwurf eigener Lösungen! 2.2. Besonderheiten der Konfiguration von µC • Steuer- und Statusregister – Konfiguration sämtlicher Laufzeitfunktionen – Anzeige des aktuellen Systemstatus • Fuse-Bits – Konfiguration der Betriebsparameter vor Inbetriebnahme (abgelegt im EEPROM) – z.B.: Taktgeber, JTAG-/Bootloader-Aktivierung • Lock-Bits – Schreib- und Leserestriktionen auf den Speicher 2.2. Besonderheiten der Konfiguration von µC 2.3. Interrupts • 21 Interrupts für ATmega32 • Interrupt-Behandlung ist Compiler-abhängig • Aktivierung über Steuer-Register • Behandlung durch Service-Routinen Aktivierte Interrupts müssen behandelt werden! „Global Interrupt Enable Bit“ muss gesetzt werden! (Befehl: sei()) 2.3. Interrupts 2.4. Zugriffe auf IO-Ports • GPIO-Pins sind Tri-Stated (High/Low/High-Res) und besitzen interne Pull-Up-Widerstände • Steuerregister: DDRx (Data Direction Register) – DDn = 1 ~ Ausgang, DDn = 0 ~ Eingang • Steuerregister: PORTx (Data Register) – DDn = 1: PORTxn = 0 ~ Low, PORTxn = 1 ~ High – DDn = 0: PORTxn = 1 ~ Pull-Up aktiviert, PORTxn = 0 ~ Ausgang tri-stated • Statusregister: PINx (Port Input Register) – Aktuelle Pinbelegung (Register ist Read-Only) 2.5. Der JTAG-Standard • „Joint Test Action Group“ → IEEE 1149.1 • Verfahren zum Programmieren und Testen von Programmen direkt in der Schaltung – „Boundary Scan Test“ – Debugger hat Zugang zu sämtlichen Speichern, allen Registern, der Peripherie und dem Programmzähler – Ermöglicht Einzelschritt-, Brakepoint-, On-Change-Debugging • Benötigt JTAG-Schnittstelle (Test Access Port TAP) – 4 Pins zzgl. Spannungsversorgung, aktivierbar via Fuse-Bit • Benötigt ein separates JTAG-Programmiergerät 2.6. Der AVR-Bootloader • Fähigkeit des Systems, sich über jede beliebige Datenschnittstelle selbst zu programmieren – Spezielles Programm, dass Daten aus einer beliebigen Quelle lesen und parallel in den Flash-Speicher schreiben kann – Residiert in einem separaten, konfigurierbaren Bereich des FlashSpeichers (der ebenfalls beschrieben werden kann!) – Konfigurierbar über Fuse-Bits – Schutz durch Lock-Bits möglich • Ermöglicht Updates, Rekonfigurationen und Versionierung der Systeme Entwicklungswerkzeuge 3.1. Die avr-gcc Toolchain • AVR-GCC: Frontend der GCC (GNU-CompilerCollection) für die AVR-Plattform – Treiber-Programm für andere Teilprogramme • GNU Binutils: Binary Utilities – Assembler (as), Linker (ld) und andere Programme • avr-libc – Standard-C-Bibliothek für AVR-Prozessoren – Teile der ANSI-C sowie AVR-spezifische Funktionen 3.1. Die avr-gcc Toolchain • AVR-DUDE: In-System-Programmer • AVR-GDB: Kommandozeilen-Debugger • AVaRICE: Backend-Programm für GDB zur Verwendung der JTAG-Schnittstelle • SimulAVR: Backend-Programm für GDB zur Simulation von AVR-Prozessoren • Make: Interpreter für Makefile-Skripte zahlreiche Alternativen verfügbar 3.2. AVR-Studio und WinAVR • WinAVR: – Werkzeugsammlung für MS Windows • AVR-Studio: Graphische IDE von ATMEL – – – – Assembler, Programmer, Simulator, Terminal C-Compiler unter Nutzung von WinAVR Graphische Projektkonfiguration Voll kompatibel zu allen ATMEL-Entwicklungswerkzeugen 3.3. Weitere Entwicklungsumgebungen • Eclipse-AVR-Plugin – Kostenfrei, plattformunabhängig – nutzt avr-gcc Toolchain • CodeVision-AVR – Kostenpflichtige IDE – Nutzt eigene C-Bibliothek, aber AVR-Studio-Simulator • IAR-Workbench – Professionelle, kostenpflichtige IDE 3.4. Die STK500 Plattform 3.4. Die STK500 Plattform • Entwicklungsplatform für AVR-Prozessoren – – – – – – – – – Sockel für DIP8, DIP20, DIP28 und DIP40 Gehäuse Einstellbare Board- und Referenzspannung von 0-6 Volt Einstellbarer Boardtakt von 0-3,686 MHz Parallele und serielle Programmierung RS232-Schnittstelle zur Konfiguration und Programmierung RS232-Schnittstelle zur Kommunikation mit dem Prozessor Je acht Taster und acht LEDs zur Benutzerinteraktion Verschiedene Takt- und Resetquellen verfügbar Keine JTAG-Unterstützung 3.5.Hinweise zur Verwendung der STK500Plattform • 12-15 Volt Betriebsspannung, verpolungstolerant • Anschluss des Boards an PC mittels RS232 • Auswahl des Zielsockels mittels 6-pol. Flachbandkabel • Anschluss der Peripherie über Flachbandkabel • Auswahl der Takt-, Spannungs- und Resetquelle über Jumper • Konfiguration von Spannung und Takt über AVR-Studio Beschriftung auf der Unterseite des Boards beachten 3.5.Hinweise zur Verwendung der STK500Plattform • Auswahl des Sockels: – Anschluss über Flachbandkabel – Bei internem Sockel Farbcodierung beachten Bei externem Sockel Polung beachten! 3.5.Hinweise zur Verwendung der STK500Plattform • Auswahl der Spannungsquellen: – VTARGET verbindet interne Spannungsversorgung Niemals interne und externe Spannung gleichzeitig! – AREF verbindet interne Referenzspannungsquelle Referenzspannung muss immer kleiner Versorgungsspannung sein! 3.5.Hinweise zur Verwendung der STK500Plattform • Einstellung der Taktquelle: – XTAL1 aktiviert interne Quelle – OSCSEL wählt zwischen einstellbarer Quelle und Quarzsockel Konfiguration des Controllers beachten! 3.6. STK500 und AVR-Studio • Einlesen der Signatur – Wichtig zur Überprüfung der Konnektivität • Einstellen der Programmiergeschwindigkeit – Bei Instabilität schrittweise reduzieren 3.6. STK500 und AVR-Studio • Einstellen der Spannungen – ARef ist immer kleiner VTarget • Einstellen der Taktfrequenz – Nur bei Auswahl der einstellbaren Taktquelle von Belang 3.7. Die STK600 Plattform 3.7. Die STK600 Plattform • Nachfolger des STK500 – Kompatibel zu allen Controllern der Reihen ATmega, Atmega32 und Xmega – Anschluss über die USB-Schnittstelle – ISP- und JTAG-Programmierung interner und externer Ziele – RS232-, USB-, CAN- und LIN-Schnittstelle – Je acht Taster und acht LEDs zur Benutzerinteraktion – Einstellbare Spannung und Taktfrequenz • Konfiguration des Boards über (separat erhältliche) Aufsätze – Separate Sockel- und Routingaufsätze ermöglichen die Verwendung der Sockel auch für nicht pinkompatible Controller