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 Quelle: ATMEL Corp.
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 Quelle: ATMEL Corp. Quelle: AVR-Studio
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 Quelle: ATMEL Corp. Quelle: GNU C Library Documentation
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 Quelle: ATMEL Corp.
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! Quelle: ATMEL Corp.
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! Quelle: ATMEL Corp.
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! Quelle: ATMEL Corp.
3.6. STK500 und AVR-Studio Einlesen der Signatur Wichtig zur Überprüfung der Konnektivität Einstellen der Programmiergeschwindigkeit Bei Instabilität schrittweise reduzieren Quelle: AVR-Studio.
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 Quelle: AVR-Studio
3.7. Die STK600 Plattform Quelle: AVR-Praxis GmbH
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