Programmiermodell des AVR ATXMEGA128A1 - acmc … · Registerbeschreibung - ADC ... Das XMEGA Takt...

65
Application Center Microcontroller Hochschule Mittweida Programmiermodell der AVR ATXMEGA-Serie Programmiermodell des AVR ATXMEGA128A1 Inhaltsübersicht Speichermodell Registersatz und die Flags Befehlsausführungszeiten Befehlssatz Adressierungsarten Stackfunktion Interruptsystem Ausgewählte On-Chip Peripheriekomponenten Blockdiagramm und Pinout XMEGA128A1 Literaturhinweise Befehlsliste

Transcript of Programmiermodell des AVR ATXMEGA128A1 - acmc … · Registerbeschreibung - ADC ... Das XMEGA Takt...

Application Center Microcontroller Hochschule Mittweida

Programmiermodell der AVR ATXMEGA-Serie

Programmiermodell

des AVR ATXMEGA128A1

Inhaltsübersicht Speichermodell Registersatz und die Flags Befehlsausführungszeiten Befehlssatz Adressierungsarten Stackfunktion Interruptsystem Ausgewählte On-Chip Peripheriekomponenten Blockdiagramm und Pinout XMEGA128A1 Literaturhinweise Befehlsliste

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 2

Impressum Herausgeber: Application Center Microcontroller (ACMC) Hochschule Mittweida Redaktion: Prof. Dr.-Ing. O. Hagenbruch Dipl.-Ing. (FH) H. Polster Dipl.-Ing. (FH) M. Jahn Redaktionsstand: 01/2011 Urheberrecht: Der Inhalt dieses Dokuments ist urheberrechtlich geschützt. Alle Rechte, auch Übersetzun-gen, vorbehalten. Reproduktion, gleich welcher Art, ob Fotokopie, Mikrofilm oder Erfassung in Datenverarbeitungsanlagen nur mit schriftlicher Genehmigung des Herausgebers. Haftungsbeschränkung: Die Nutzung der in diesem Dokument zur Verfügung gestellten Inhalte erfolgt auf alleinige Gefahr des Nutzers. Für mögliche Schäden (insbesondere entgangener Gewinn, Datenverlust bzw. Produktionsausfälle) übernimmt das ACMC, seine Lieferanten bzw. Dritte, die in dem Dokument erwähnt werden, keinerlei Haftung. Dies gilt nicht im Falle des Vorsatzes und für den Fall, dass eine Haftung gesetzlich zwingend vorgeschrieben ist. Falls die Nutzung des Dokuments bzw. der angebotenen Inhalte dazu führt, dass Sie Ihre Geräte oder Ihre Daten warten, reparieren, austauschen oder sonst wie korrigieren müssen, übernimmt das ACMC hierfür keinerlei Kosten. Anschrift des Herausgebers: Application Center Microcontroller Hochschule Mittweida Technikumplatz 17 09648 Mittweida Telefon: +49-(0)3727-62 38 26 Fax: +49-(0)3727-62 38 25 Email: [email protected] Web: www.acmc.hs-mittweida.de Anregungen, Wünsche und Hinweise zur Verbesserung des Handbuches sind jederzeit will-kommen.

© 2010 Application Center Microcontroller

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 3

Inhaltsverzeichnis

1. AVR-CPU-Architektur des ATXMEGA ....................................................................... 5

2. Das Speichermodell ........................................................................................................ 6 2.1.1. Flash-Speicher ........................................................................................................ 6 2.1.2. Programmspeicher (Flash) ..................................................................................... 6 2.1.3. Production Signature Row Speicher für Produktionsdaten (Flash) ....................... 7 2.1.4. User Signature Row (Flash) ................................................................................... 7

2.2. Datenspeicher ............................................................................................................. 7 2.2.1. I/O Register-Bereich .............................................................................................. 7 2.2.2. EEPROM ................................................................................................................ 7 2.2.3. Internal SRAM ....................................................................................................... 8 2.2.4. External Memory .................................................................................................... 8

2.3. Fuse- und Lock-Bits ................................................................................................... 8

3. Registersatz und Flags .................................................................................................... 9

4. Taktsystem der XMEGA-Serie .................................................................................... 11

5. Befehlsausführungszeiten ............................................................................................. 12

6. Befehlssatz ................................................................................................................... 13

6.1. Befehlsgruppen der AVR XMEGA-Serie ................................................................ 13

6.2. Befehlsliste ............................................................................................................... 13

7. Adressierungsarten ....................................................................................................... 14

8. Stackfunktion ............................................................................................................... 17

9. Interruptsystem ............................................................................................................. 19

9.1. Einführung ................................................................................................................ 19

9.2. Registerbeschreibung ............................................................................................... 20 9.2.1. SREG .................................................................................................................... 20 9.2.2. PMIC Control Register ......................................................................................... 20 9.2.3. PMIC Priority Register ......................................................................................... 21 9.2.4. PMIC Status Register ........................................................................................... 21 9.2.5. XX_INTCTRL ..................................................................................................... 22

9.3. Beispiel zur Installation eines Interruptvektors in die Interruptvektortabelle .......... 23

10. Eventsystem ................................................................................................................. 24

10.1. Eigenschaften ........................................................................................................... 24

10.2. Event Timing und Filterung ..................................................................................... 24

10.3. Event-Register .......................................................................................................... 25 10.3.1. CHnMUX – Event Channel n Multiplexer Register ........................................ 25

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 4

10.3.2. CHnCTRL – Event Channel n Control Register .............................................. 26

11. Ausgewählte On- Chip Peripherie ................................................................................ 27

11.1. I/O Ports ................................................................................................................... 27 11.1.1. Eigenschaften ................................................................................................... 27 11.1.2. Registerbeschreibung ....................................................................................... 28

11.2. Timer/Counter .......................................................................................................... 32 11.2.1. Überblick .......................................................................................................... 32 11.2.2. Registerbeschreibung ....................................................................................... 33

11.3. Two-Wire Serial Interface ........................................................................................ 40 11.3.1. Eigenschaften ................................................................................................... 40 11.3.2. Registerbeschreibung ....................................................................................... 40

11.4. Analog Digital Wandler ........................................................................................... 44 11.4.1. Eigenschaften ................................................................................................... 44 11.4.2. Registerbeschreibung - ADC ........................................................................... 45 11.4.3. Registerbeschreibung - ADC-Channel ............................................................. 48

11.5. Serial Peripheral Interface - SPI ............................................................................... 52 11.5.1. Eigenschaften ................................................................................................... 52 11.5.2. Registerbeschreibung ....................................................................................... 53

12. Blockdiagramm und Pinout des ATXMEGA128A1 ................................................... 55

13. Literaturhinweise .......................................................................................................... 57

14. Befehlsreferenz der XMEGA-Serie ............................................................................. 58

15. Befehlssliste ................................................................................................................. 59

15.1. Arithmetic and Logic Instructions ............................................................................ 59

15.2. Branch Instructions .................................................................................................. 60

15.3. Data Transfer Instructions ........................................................................................ 62

15.4. Bit and Bit-test Instructions ...................................................................................... 64

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 5

Das Programmiermodell des ATXMEGA128A1 Zur hardwarenahen Programmentwicklung benötigt der Programmierer eine Vielzahl von Informationen zum Core des Mikrocontrollers und zu den On-Chip Peripheriekomponenten. Dazu gehören u.a. Kenntnisse zum Registersatz, zum Speichermodell, zum Befehlssatz und zu den möglichen Adressierungsarten. Mit Hilfe der Programmierung in prozessorspezifi-scher Assemblersprache können sehr kompakte und schnelle Programme mit Hilfe eines As-semblers erzeugt werden. Zum Teil erlauben auch höhere Programmiersprachen, wie z.B. C, eine hardwarenahe Programmierung. Unabhängig davon, ob in Assemblersprache oder in einer Hochsprache programmiert wird, sind Kenntnisse zum Programmiermodell eine wichti-ge Voraussetzung für eine erfolgreiche Fehlersuche während der Programmentwicklung. Nachstehend werden in kompakter Form wesentliche Fakten zu den Teilbereichen Register-satz, Flags, Speichermodell, Timings der Befehlsausführung, Befehlssatz, Adressierungsarten, Stackfunktion, Interruptsystem und Betriebsarten der AVR ATXMEGA128A1 dargestellt. Weiterführende Details können den aufgeführten Quellen entnommen werden. 1. AVR-CPU-Architektur des ATXMEGA 8/16-Bit High Performance AVR RISC CPU mit 138 Befehlen und Hardware Multiplier 32x8-Bit Register, direkt gekoppelt mit der ALU Stack in RAM mit Stackpointer im I/O-Speicherbereich Direkte Adressierung von bis zu 16 MB Programmspeicher und 16 MB Datenspeicher Echter 16/24-bit Zugriff auf 16/24-bit I/O Register Effiziente Unterstützung von 8-, 16- und 32-bit Arithmetik

Abbildung 1: Blockdiagramm der AVR-Architektur

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 6

Die XMEGA-Serie beinhaltet eine 8/16-bit AVR CPU. Die Hauptfunktion der CPU ist die Abarbeitung von Programmcode, der Zugriff auf Speicher, die Abarbeitung von Berechnun-gen und die Kontrolle von On-Chip-Peripherie. Zur Maximierung der Leistung verwendet die CPU eine Architektur mit getrennten Bussys-temen und Speicherbereichen für Code und Daten. Befehle werden über eine single level Pipeline ausgeführt, d.h. wenn ein Befehl in Bearbeitung ist, wird der nächste vorgeladen. Weitere Informationen sind im Abschnitt Befehlsausführungszeiten enthalten. 2. Das Speichermodell Die XMEGA-Serie hat getrennte Speicherbereiche für Programm (FLASH), Daten (SRAM und EEPROM) und zusätzliche Chip bzw. Produktionsinformationen. Alle Speicherbereiche sind linear aufgebaut.

2.1.1. Flash-Speicher

2.1.2. Programmspeicher (Flash) Der Programmspeicherbereich unterteilt sich in die Application Section mit 128 kByte, die Application Table Section mit 8kByte und die Boot Loader Section mit 8 kByte Größe.

Abbildung 2: Einteilung des Programmspeichers zum ATXMEGA128A1

Der Programmspeicher ist In-System programmierbar. In der Application Table Section kön-nen Programmcode oder auch Festwertdaten in Form von Tabellen dauerhaft enthalten sein. Die Boot Loader Section ist für den Code des Bootloaders oder auch für Programmcode ver-wendbar. Die Programmspeicherbereiche können mit Lock Bits gegen Überschreiben und / oder Auslesen geschützt werden.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 7

2.1.3. Production Signature Row Speicher für Produktionsdaten (Flash) Dieser Speicherbereich enthält eine Device ID und eine Serial Number für jedes Mikrocon-trollerdevice, Oscillator-Kalibrationsbytes sowie ADC-, DAC- und Temperatursensor-Kalibrationsdaten. Dieser Speicher kann nur gelesen werden.

2.1.4. User Signature Row (Flash) Der Speicherbereich umfasst die Größe einer Flash Page. Er kann über die Anwendersoft-ware gelesen und beschrieben werden, wobei der Inhalt während eines Chip-Erase nicht ge-löscht wird.

2.2. Datenspeicher Der lineare Datenspeicherbereich unterteilt sich in den Bereich der I/O-Register (4 kB), den EEPROM Bereich (2 kB) und den internen SRAM (8 kB). Zusätzlich kann externer Speicher bis zu 16 MB adressiert werden.

Abbildung 3: Einteilung des Datenspeichers zum ATXMEGA128A1

Für I/O-Register-, SRAM-, EEPROM- und externen Speicherzugriff sind jeweils einzelne Bussysteme implementiert.

2.2.1. I/O Register-Bereich Die Status und Konfigurationsregister für Peripherie und CPU sind adressierbar über I/O-Speicherbereiche des Datenspeichers. Der Datenaustausch zwischen I/O-Registern und den 32 General Purpose Registern des Registerfiles können mittels Load- (LD/LDS/LDD) und Store-Befehlen (ST/STS/STD) vorgenommen werden. Der I/O-Registerbereich der Adressen 0x00 bis 0x3F kann mit den Befehlen IN und OUT direkt angesprochen werden. Der I/O-Adressbereich 0x00 bis 0x1F ist Bit-adressierbar. Die unteren 16 I/O-Register sind General Purpose I/O Register, die typischerweise zum Speichern von globalen Variablen und Flags genutzt werden. Mit diesen Registern ist die Verwendung der Bitmanipulationsbefehle SBI, CBI, SBIS, und SBIC möglich.

2.2.2. EEPROM Die XMEGA-Serie besitzt einen EEPROM-Speicherbereich zum Sichern von Festwertdaten. Der EEPROM ist ab Adresse 0x1000 im Datenspeicher lokalisiert.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 8

2.2.3. Internal SRAM Der interne SRAM ist im Datenspeicherbereich ab Adresse 0x2000 lokalisiet. Er kann über die Befehle LD/LDS/LDD (load) und ST/STS/STD (store) angesprochen werden.

2.2.4. External Memory Der XMEGA unterstützt an bis zu 4 Ports die Ankopplung von externem Speicher. Dies kön-nen externer SRAM, SDRAM, memory mapped Peripherie, z.B. LCD-Displays sein. Der externe Speicherbereich beginnt am Ende des internen SRAM-Bereichs.

2.3. Fuse- und Lock-Bits Über Fuse-Bits können wichtige Systemfunktionen des Mikrocontrollers eingestellt werden. Sie können nur mit Hilfe eines externen Programmier-Interfaces beschrieben werden. Sie die-nen u.a. dazu, die RESET-Quellen, den Brown-Out-Detector, den Watchdog-Timer, die Start-Up-Konfiguration und das JTAG-Interface des MC zu konfigurieren. So ist z.B. für die hD2 im FUSEBYTE2 das Fuse-Bit BOOTRST auf 0 eingestellt. Damit ist der Reset-Vektor für den Start des MC auf Boot Loader Reset konfiguriert. Lock-Bits werden zur Einstellung des Schutzgrades (Protection Level) für die verschiedenen Flash-Sektoren verwendet. Mit bestimmten Konfigurationen können Lese- und Schreibzugrif-fe auf den Codebereich verhindert werden. Die Programmierung der Lock-Bits kann über ein externes Programmier-Tool bzw. auch über MC-Applikationssoftware erfolgen. Einzelheiten zu den Fuse- und Lockbits können bei Bedarf dem Manual des XMEGA ent-nommen werden.

Eine Veränderung der vordefinierten Fuse- und Lock-Bit-Einstellungen wird nicht empfohlen!

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 9

3. Registersatz und Flags Die XMEGA-Serie verfügt über 32 Arbeitsregister. Sie sind gleichberechtigt und direkt mit der Arithmetic Logic Unit (ALU) verbunden. Der Registersatz ist in einem eigenen Speicher-bereich lokalisiert.

Abbildung 4: Arbeitsregister R0 bis R31

Mit diesen Arbeitsregistern können arithmetische bzw. logische Operationen ausgeführt wer-den. Die Register R26/R27 X , R28/R29 Y sowie R30/R31 Z sind zusätzlich als 16-Bit Adresszeiger zur indirekten Adressierung des Datenspeichers einsetzbar.

Abbildung 5: Die Bildung der X-, Y-, Z-Register

Das Z-Register kann als Adesspointer zum Lesen und Schreiben des Flash Program Memory, des Signature Rows, der Fuses und der Lock Bits verwendet werden. Statusregister Das Statusregister (SREG) enthält Informationen über den Zustand von Interrupt Enable, Bit Copy Storage sowie von Half Carry-, Sign-, Two’s Complement Overflow-, Zero-, und Car-ry-Flag.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 10

Abbildung 6: Statusregister SREG

Funktionen der Flags Die Flags werden in Abhängigkeit vom Ergebnis einer Operation durch bestimmte Befehle wie folgt beeinflußt: Bit0 – C Carry Flag zeigt Übertrag bzw. Borgen nach arithmetischer oder logischer Operation an Bit1 – Z Zero Flag 1: Ergebnis einer arithmetischen oder logischen Operation gleich Null 0: Ergebnis einer arithmetischen oder logischen Operation ungleich Null Bit2 – N Negative Flag zeigt negatives Ergebnis einer arithmetischen oder logischen Operation an Bit3 – V Two’s Complement Overflow Flag 1: bei Zweierkomlement-Überlauf 0: kein Zweierkomlement-Überlauf Bit4 – S Sign-Bit S = N, EXOR-Verknüpfung von N und V tatsächliches Vorzeichen des Ergebnisses einer arithmetischen oder logischen Operation Bit5 – H Half Carry Flag zeigt den Überlauf aus niederwertigem Nibble des Datenbyte an 1: Übertrag 0: kein Übertrag Bit6 – T Bit Copy Storage Die Bit Copy Befehle Bit Load (BLD) and Bit Store (BST) nutzen das T-Bit als Quelle oder Ziel für ein verwendetes Bit. Bit7 – I Global Interrupt Enable 1: alle Interrupt ein 0: alle Interrupt aus

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 11

4. Taktsystem der XMEGA-Serie Das XMEGA Takt System ermöglicht hochflexible Einstellungen für die Taktung der CPU und der On-Chip-Peripherie. Die Abbildung stellt die verschiedenen Taktquellen schematisch dar.

Abbildung 7: Schema des XMEGA-Taktsystems

Die Clock Control Unit kann den Takt mittels PLL und Vorteilern für CPU, Peripherie, Real Time Clock (RTC) und Watchdog aus verschiedenen internen oder externen Quellen generie-ren. Interne Taktquellen sind ein Ultra Low-power 32 kHz RC Oscillator, ein Calibrated 32 kHz RC Oscillator, Calibrated 2 MHz RC Oscillator, ein Calibrated 2 MHz RC Oscillator und ein Calibrated 32 MHz Ring Oscillator. Als externe Taktquellen können Crystals und Resona-toren sowie ein externer Takt verwendet werden. Prinzipiell startet der XMEGA mit dem internen 2 MHz Takt. Zu Beginn der Applikation sind die gewünschten Takteinstellungen vorzunehmen. Weitere Informationen sind dem Atmel-Manual AVR1003: Using the XMEGA™ Clock System und den zugehörigen Softwarebeispie-len zu entnehmen. Für den Betrieb der hD2 sind vorgefertigte Bibliotheken mit entsprechen-den Funktionen verfügbar.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 12

5. Befehlsausführungszeiten Der AVR-Core arbeitet mit dem gewählten internen bzw. einem externen Takt. Nachfolgende Abbildung zeigt das durch das Pipelining ermöglichte parallele Laden und Ausführen von Befehlen.

Abbildung 8: Timing der Befehlsabarbeitung

Durch dieses Pipelining-Konzept können bis zu 1 MIPS pro MHz erreicht werden.

Abbildung 9: Timing einer Instruktion

Im voran gezeigten Bild ist eine Operation der ALU unter Nutzung zweier Arbeitsregister in einem Taktzyklus dargestellt. Dabei unterteilt sich die gesamte Ausführungszeit in die Zeiten zum Laden der Operanden der jeweiligen Register, die Bearbeitungszeit innerhalb der ALU sowie die Zeit zum Speichern des Ergebnisses im Zielregister.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 13

6. Befehlssatz

6.1. Befehlsgruppen der AVR XMEGA-Serie Der Befehlssatz lässt sich in folgende Gruppen einteilen: ARITHMETIC und LOGIC Befehle BRANCH Befehle (Verzweigung) DATA TRANSFER Befehle BIT und BIT-TEST Befehle MCU CONTROL Befehle

6.2. Befehlsliste Zur Übersicht und schnellen Auswahl eines Befehls ist die beigefügte Befehlsliste ausrei-chend. Die Spalten der Befehlsliste enthalten folgende Angaben zu jedem einzelnen Befehl: Mnemonic - die Assemblersyntax des Befehls Operands - die beteiligten Operanden (Register, Konstanten) Description - eine kompakte Befehlsbeschreibung Operation - die kompakte Beschreibung des Ablaufs der Befehlsausführung Flags - die Befehlswirkung auf die Flags Z, C, N, V, H und S Clocks - die Anzahl der erforderlichen Taktzyklen zur Ausführung des Befehls

Eine ausführliche Befehlsreferenz mit Beispielen ist in der Onlinehilfe des AVR Studio inte-griert. In den Befehlsbeschreibungen werden folgende Abkürzungen verwendet: Rd Ziel- (und Quell-) Register Rr Quell-Register K konstante Werte k konstante Adresse b Bit im Register File oder I/O Register (3 bit) s Bit im Status Register (3 bit) X,Y,Z indirektes Adressregister (X=R27:R26, Y=R29:R28 and Z=R31:R30)

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 14

7. Adressierungsarten Für den Zugriff auf Operanden im Speicher stehen verschiedene Adressierungsarten zur Ver-fügung. Direkte Adressierung eines Registers Das verwendete Register enthält den Operanden, auf den der Befehl angewandt wird. Beispiel: inc r15

Direkte Adressierung zweier Register Die Register Rd und Rr enthalten die Operanden, auf die der Befehl angewandt wird. Das Ergebnis steht in Rd. Beispiele: add Rd,Rr cp Rd,Rr

Direkte Adressierung des I/O – Bereichs Beispiele: lds r15,PORTA_IN ; Porteingabelatch von Port A nach r15 einlesen sts PORTB_OUT,r9 ; Inhalt r9 auf Port B (Ausgabelatch) ausgeben Direkte Adressierung der Datenspeichers (SRAM) Beispiele: lds r2,0x2000 ; r2 mit Inhalt der Speicherstelle 0x2000 laden sts 0x3000,r3 ; r3 auf Speicherstelle 0x3000 ablegen

Indirekte Adressierung eine Speicherstelle im SRAM Beispiele: ld r1,X ; lade r1 mit dem Inhalt einer durch X adressierten

; Speicherstelle st X,r1 ; Speichern des Inhalts von r1 auf einer durch X ; adressierten Speicherstelle Indirekte Adressierung des Datenspeichers (SRAM) mit Post-Increment Beispiele: ld r16,Y+ ; lade r16 mit dem Inhalt des durch Y adressierten Speicherbereichs, danach Y um 1 erhöhen St X+,r15 ; Speichern des Inhalts von r15 auf dem von X adressierten Speicherbereichs, danach X um 1erhöhen

Indirekte Adressierung des Datenspeichers (SRAM) mit Pre-Decrement Beispiele: ld r15,-Z ; Z um 1 verringern, danach Inhalt der von Z adressierten Speicherstelle nach r15 kopieren st -Y,r16 ; Y decrementieren, danach Inhalt von r16 auf der von Y

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 15

adressierten Speicherstelle speichern

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 16

Indirekte Adressierung des Datenspeichers (SRAM) mit Displacement Beispiele: ldd r4,Y+2 ; lade r4 mit dem Inhalt der durch (Y+2) adressierten Speicherstelle std Z+7,r2 ; Inhalt von r16 auf der von (Z+7) adressierten Speicherstelle speichern Adressierung von Konstanten im Programmspeicher (FLASH) Beispiele: lpm ; lade r0 mit dem Inhalt der durch den Z-Pointer adressierten Speicherstelle lpm r1,Z ; lade r1 mit der durch den Z-Pointer adressierten Kostanten aus dem Programmspeicher Direkte Adressierung des Programmspeichers (FLASH) Beispiel: jmp label ; Sprung zu Label Indirekte Adressierung des Programmspeichers (FLASH) Beispiele: ijmp ; indirekter Sprung zur durch den Z-Pointer adressierten Speicherstelle im FLASH icall ; indirekter Aufruf einer Subroutine, die durch den Z-Pointer adressiert ist, SP = SP – 2 !!

Relative Adressierung des Programmspeichers (FLASH) Beispiel: rjmp m0 ; relativer Sprung zur angegebenen Zieladresse

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 17

8. Stackfunktion Der Stack wird für das temporäre Zwischenspeichern von Daten, lokalen Variablen und Rücksprungadressen nach einem Unterprogrammaufruf bzw. der Bearbeitung einer Interrupt-serviceroutine eingesetzt. Der Stackbereich befindet sich im SRAM und wird über den 16-bit Stackpointer (SP SPH + SPL) verwaltet.

Abbildung 10: Register des Stackpointers

Der SP wird nach einem RESET automatisch auf das SRAM-Ende des eingesetzten Mikro-controllers gesetzt. Auf dem Stack kann der Inhalt der 8-bit Arbeitsregister über PUSH-Befehle abgelegt und über POP-Befehle wieder abgeholt werden. Nach Ablage eines Bytes wird der SP dekremen-tiert (SP = SP – 1). Bei der Verwendung dieser Befehle durch den Programmierer ist zu be-achten, dass der Stack der XMEGA-Serie nach dem LIFO-Prinzip arbeitet. Beispiel für Stackverwendung beim XMEGA128A1 ; Hauptprogramm .org 0x0014 main: ldi r16,0x2F ; SP initialisieren sts SPH,r16 ; event. alternativer SFR-Bezeichner! ldi r16,0xFF sts SPL,r16 ; event. alternativer SFR-Bezeichner! ; …………………………………………………………………………. ldi r17,0x01 ; Arbeitsregister belegen ldi r18,0x02 ; ………………………………………………………………………….

rcall routine ; Subroutine aufrufen, SP=SP - 2 m0: rjmp m0 ; Endlosschleife ; Unterprogramm routine: push r18 ; r18 auf Stack sichern, SP=SP - 1 push r17 ; r17 auf Stack sichern, SP=SP - 1 ; hier Aktionen mit Nutzung von r17 und r18 ; …. pop r17 ; r17 wiederherstellen, SP=SP + 1 pop r18 ; r18 wiederherstellen, SP=SP + 1 ret ; Rückkehr von Subroutine, SP=SP + 2

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 18

Im Zusammenhang mit Unterprogrammen und Interruptbehandlungen wird die jeweilige 16-Bit Adresse des Programmcounters auf dem Stack temporär gespeichert (SP = SP – 2) und mit dem Rückkehrbefehl ret wieder auf den Programmcounter gelegt (SP = SP + 2). Der SP wird zu Beginn des vorstehenden Programmbeispiels auf Adresse 0x2FFF initialisiert.

01

02

00

1B PCLT

interner SRAM

0x2FFF

Auf

stei

gend

eA

dres

sric

htun

g

Stac

k-A

blag

e-ric

htun

g

Registerinhalt von r18über “push r18”

0x2FFE

0x2FFD

PCHT

Registerinhalt von r17über “push r17”0x2FFC

AdresseSRAM

InhaltSRAM

Rückkehradresse“rcall routine”

Abbildung 11: Stacksituation bei Ausführung des Beispiels

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 19

9. Interruptsystem

9.1. Einführung Der ATXMEGA128A1 besitzt einen programmierbaren Multi-Level Interrupt Controller (PMIC). Jede Interruptquelle kann in eine von drei Prioritätsebenen eingeordnet werden (high, medium oder low). High-Level-Interrupts können Medium- und Low-Level-Interrupts, Medium-Level Interrupts können Low-Level-Interrupts unterbrechen. Low-Level-Interrupts arbeiten nach einem optionalen Round Robin Schema, um die Bearbeitung aller Interruptser-viceroutinen innerhalb einer bestimmten Zeit sicherzustellen. Werden mehrere Interrupts in einem gleichen Prioritätslevel eingeordnet, gilt, dass die Interruptquelle mit der niedrigsten Adresse in der Interruptvektortabelle die höhere Priorität besitzt und zuerst abgearbeitet wird. Der Oscillator Failure Detection Mechanismus kann einen Non-Maskable Interrupt (NMI) generieren. Auf einen internen oder externen Interrupt hin, wird der momentane Stand des Programm-counter (Rückkehradresse) auf dem Stack gerettet und der Befehlscode ab der 16-bit Adresse ausgeführt, die vom Controllerhersteller für die jeweilige Interruptquelle fest definiert ist (s. Interruptvektortabelle). Nachfolgend ist die Interruptvektortabelle des ATXMEGA128A1 dargestellt. Da sich die On-Chip Peripherie der einzelnen Controller der XMEGA-Serie unterscheidet, muss die Inter-ruptvektortabelle bei der Programmerstellung des jeweiligen Zielcontrollers berücksichtigt werden.

Nummer des Interruptvek-

tors

Programm-adresse

Quelle Beschreibung

1 0x000 RESET 2 0x002 OSCF_INT_vect Crystal Oscillator Failure Interrupt vector (NMI) 3 0x004 PORTC_INT_base Port C Interrupt base 4 0x008 PORTR_INT_base Port R Interrupt base 5 0x00C DMA_INT_base DMA Controller Interrupt base 6 0x014 RTC_INT_base Real Time Counter Interrupt base 7 0x018 TWIC_INT_base Two-Wire Interface on Port C Interrupt base 8 0x01C TCC0_INT_base Timer/Counter 0 on port C Interrupt base 9 0x028 TCC1_INT_base Timer/Counter 1 on port C Interrupt base

10 0x030 SPIC_INT_vect SPI on port C Interrupt vector 11 0x032 USARTC0_INT_base USART 0 on port C Interrupt base 12 0x038 USARTC1_INT_base USART 1 on port C Interrupt base 13 0x03E AES_INT_vect AES Interrupt vector 14 0x040 NVM_INT_base Non-Volatile Memory Interrupt base 15 0x044 PORTB_INT_base Port B Interrupt base 16 0x048 ACB_INT_base Analog Comparator on Port B Interrupt base 17 0x04E ADCB_INT_base Analog to Digital Converter on Port B Interrupt

base 18 0x056 PORTE_INT_base Port E Interrupt base 19 0x05A TWIE_INT_base Two-Wire Interface on Port E Interrupt base 20 0x05E TCE0_INT_base Timer/Counter 0 on port E Interrupt base 21 0x06A TCE1_INT_base Timer/Counter 1 on port E Interrupt base 22 0x072 SPIE_INT_vect SPI on port E Interrupt vector 23 0x074 USARTE0_INT_base USART 0 on port E Interrupt base

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 20

24 0x07A USARTE1_INT_base USART 1 on port E Interrupt base 25 0x080 PORTD_INT_base Port D Interrupt base 26 0x084 PORTA_INT_base Port A Interrupt base 27 0x088 ACA_INT_base Analog Comparator on Port A Interrupt base 28 0x08E ADCA_INT_base Analog to Digital Converter on Port A Interrupt

base 29 0x096 TWID_INT_base Two-Wire Interface on Port D Interrupt base 30 0x09A TCD0_INT_base Timer/Counter 0 on port D Interrupt base 31 0x0A6 TCD1_INT_base Timer/Counter 1 on port D Interrupt base 32 0x0AE SPID_INT_vector SPI on port D Interrupt vector 33 0x0B0 USARTD0_INT_base USART 0 on port D Interrupt base 34 0x0B6 USARTD1_INT_base USART 1 on port D Interrupt base 35 0x0BC PORTQ_INT_base Port Q INT base 36 0x0C0 PORTH_INT_base Port H INT base 37 0x0C4 PORTJ_INT_base Port J INT base 38 0x0C8 PORTK_INT_base Port K INT base 39 0x0D0 PORTF_INT_base Port F INT base 40 0x0D4 TWIF_INT_base Two-Wire Interface on Port F INT base 41 0x0D8 TCF0_INT_base Timer/Counter 0 on port F Interrupt base 42 0x0E4 TCF1_INT_base Timer/Counter 1 on port F Interrupt base 43 0x0EC SPIF_INT_vector SPI ion port F Interrupt base 44 0x0EE USARTF0_INT_base USART 0 on port F Interrupt base 45 0x0F4 USARTF1_INT_base USART 1 on port F Interrupt base

Tabelle 1: Struktur der Interruptvektortabelle für den ATXMEGA128A1

Mit dieser Tabelle sind gleichzeitig die Prioritäten der einzelnen Interrupts festgelegt. Dabei bedeutet eine niedrigere Adresse eine höhere Priorität.

9.2. Registerbeschreibung

9.2.1. SREG Im Statusregister SREG wird mit Bit7 ( I ) die Interruptannahme global durch den Core zugelassen („sei“) oder gesperrt („cli“).

Abbildung 12: Struktur des Statusregisters SREG

9.2.2. PMIC Control Register

Abbildung 13: Struktur des PMIC Control Registers

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 21

Bit 7 - RREN: Round-robin Scheduling Enable 0: Statische Priorität der Interruptvektortabelle ( IVT) 1: Round-Robin Scheduling Schema ist für Low Level Interrupts enabled. Bit 6 - IVSEL: Interrupt Vector Select 0: IVT ist am Beginn des Application Flash lokalisiert 1: IVT ist am Beginn der Boot Section lokalisiert Bit 5:3 - Res: Reserved Bit 2 - HILVLEN: High Level Interrupt Enable 0: High Level Interrupt Enable 1: High Level Interrupt Disable Bit 1 - MEDLVLEN: Medium Level Interrupt Enable 0: Medium Level Interrupt Enable 1: Medium Level Interrupt Disable Bit 0 - LOLVLEN: Low Level Interrupt Enable 0: Low Level Interrupt Enable 1: Low Level Interrupt Disable

9.2.3. PMIC Priority Register

Abbildung 14: PMIC Priority Register

Wenn das Round-Robin Scheduling aktiviert ist, wird in dem Register der Interruptvektor des zuletzt akzeptierten Low Level Interrupts gespeichert. Der gespeicherte Interruptvektor besitzt die niedrigste Priorität im nachfolgenden Round-Robin Scheduling, wenn mehrere Low Level Interrupts zugelassen sind. Der Inhalt des Registers kann per Software manipuliert werden. Wenn die statische Priorität verwendet warden soll, muss dass Register mit Null beschrieben werden.

9.2.4. PMIC Status Register Im PMIC Statusregister sind Flags des NMI, High Level Interrpupts, Medium Level Interrpts und des Low Level Interrupts lokalisiert.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 22

Abbildung 15: Struktur des PMIC Status Registers

Bit 7 - NMIEX: Non-Maskable Interrupt Executing Das Flag ist gesetzt, wenn ein Non-Maskable Interrupt ausgeführt wird. Das Flag wird durch den RETI - Befehl der NMI - ISR zurück gesetzt. Bit 6:3 - Res: Reserved Bit 2 - HILVLEX: High Level Interrupt Executing Das Flag ist gesetzt, wenn ein High Level Interrupt ausgeführt wird oder die ISR des High Level Interrupts von einem NMI unterbrochen ist. Das Flag wird durch den RETI - Befehl der High Level - ISR zurück gesetzt. Bit 1 - MEDLVLEX: Medium Level Interrupt Executing Das Flag ist gesetzt, wenn ein Medium Level Interrupt ausgeführt wird oder die ISR des Me-dium Level Interrupts von einem höher priorisierten Interrupt unterbrochen ist. Das Flag wird durch den RETI - Befehl der Medium Level - ISR zurück gesetzt. Bit 0 - LOLVLEX: Low Level Interrupt Executing Das Flag ist gesetzt, wenn ein Low Level Interrupt ausgeführt wird oder die ISR des Low Level Interrupts von einem höher priorisierten Interrupt unterbrochen ist. Das Flag wird durch den RETI - Befehl der Low Level - ISR zurück gesetzt.

9.2.5. XX_INTCTRL Jeder interruptfähigen On-Chip-Komponente ist ein XX_INTCTRL-Register zugeordnet, in dem das Interrptlevel nach folgendem Schema konfigurierbar ist.

Interrupt Level Konfiguration

Interrupt Level Gruppe Beschreibung

00 Off Interrupt disabled 01 LO Low Level Interrupt 10 MED Medium Level Interrupt 11 HI High Level Interrupt

Tabelle 2: Interrupt-Level-Konfiguration

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 23

9.3. Beispiel zur Installation eines Interruptvektors in die Interruptvektortabelle Syntax: ; --------------------------------------------------------------------------------------------------------------- .cseg ; Codesegment im Flash .org 0x0000 ; Position des RESET-Vektors rjmp MAIN ; Interruptvektor für RESET Sprung zu MAIN ; --------------------------------------------------------------------------------------------------------------- .cseg ; Codesegment (Flash) .org 0x004 ; Position des Interruptvektors für PORTC_INT_base rjmp PORTC_INT_base ; Interruptvektor für PortC Sprung zur ISR ... ; --------------------------------------------------------------------------------------------------------------- .cseg .org 0x0050 ; Adresse des Hauptprogramms im Codesegment MAIN: ; Hauptprogramm ... rjmp MAIN ; --------------------------------------------------------------------------------------------------------------- PORTC_INT_base: ; ISR für PORTC_INT_base … sbi Portb,1 ; Interruptbehandlung ... reti ; Rückkehr aus Interrupt ; ---------------------------------------------------------------------------------------------------------------

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 24

10. Eventsystem

10.1. Eigenschaften Inter Peripheral Communication und Signalling CPU und DMA unabhängig über ein Event Routing Network 8 Event Channels für bis zu 8 gleichzeitige Signale Events können generiert werden von:

– Timer/Counter (TCxn) – Real Time Counter (RTC) – Analog Digital Converter (ADCx) – Analog Comparator (ACx) – Ports (PORTx) – System Clock (ClkSYS)

Events können verwendet werden durch: – Timer/Counters (TCxn) – Analog to Digital Converters (ADCx) – Digital to Analog Converters (DACx) – DMA (DMA) Controller – Ports

Abbildung 16: Beispiel einer Eventquelle mit Generator und Nutzer

Das Event Routing Network leitet Events von einer Eventquelle zu einem Eventziel. Es be-steht aus 8 Multiplexern (CHnMUX), wobei Events von allen Quellen zu allen Multiplexern geleitet werden. Die Multiplexer wählen aus, welches Event zu welchen Zielen weitergeleitet werden. Der Ausgang eines Multiplexers wird als Event-Kanal bezeichnet. Für jede Periphe-rie kann ausgewählt werden, ob und wie eintreffende Events behandelt werden.

10.2. Event Timing und Filterung Die minimale Zeit zwischen Generierung und Erkennung eines Events beträgt 2 Taktzyklen. Ein Takt benötigt das Event Routing Network, um das Event einzulesen. Ein weiterer Takt ist für die Weiterleitung durch das Event Routing Network notwendig. Jeder Event-Kanal bein-haltet einen digitalen Filter. Wenn dieser Filtermechanismus eingeschaltet ist, muss ein Event

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 25

über eine konfigurierbare Anzahl von Taktzyklen den gleichen Wert besitzen, damit es akzep-tiert wird.

10.3. Event-Register

10.3.1. CHnMUX – Event Channel n Multiplexer Register

Abbildung 17: Event Channel n Multiplexer Register

Bit 7:0 - CHnMUX[7:0]: Channel Multiplexer

CHnMUX[7:4] CHnMUX[3:0] Eventquelle 0000 0 0 0 0 Keine 0000 0 0 0 1 Reserviert 0000 0 0 1 X Reserviert 0000 0 1 X X Reserviert 0000 1 0 0 0 RTC Overflow 0000 1 0 0 1 RTC Compare Match 0000 1 0 1 X Reserviert 0000 1 1 X X Reserviert 0001 0 0 0 0 ACA Channel 0 0001 0 0 0 1 ACA Channel 1 0001 0 0 1 0 ACA Window 0001 0 0 1 1 ACB Channel 0 0001 0 1 0 0 ACB Channel 1 0001 0 1 0 1 ACB Window 0001 0 1 1 X Reserviert 0001 1 X X X Reserviert 0010 0 0 n ADCA Channel n (n=1,2,3) 0010 0 1 n ADCB Channel n (n=1,2,3) 0010 1 X X X Reserviert 0011 X X X X Reserviert 0100 X X X X Reserviert 0101 0 n PORTA Pin n (n=1 .. 7) 0101 1 n PORTB Pin n (n=1 .. 7) 0110 0 n PORTC Pin n (n=1 .. 7) 0110 1 n PORTD Pin n (n=1 .. 7) 0111 0 n PORTE Pin n (n=1 .. 7) 0111 1 n PORTF Pin n (n=1 .. 7) 1000 M ClkPER / M (M=1 .. 32768) 1001 X X X X Reserviert 1010 X X X X Reserviert 1011 X X X X Reserviert 1100 0 E Timer/Counter C0 event type E 1100 1 E Timer/Counter C1 event type E 1101 0 E Timer/Counter D0 event type E 1101 1 E Timer/Counter D1 event type E 1110 0 E Timer/Counter E0 event type E 1110 1 E Timer/Counter E1 event type E

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 26

1111 0 E Timer/Counter F0 event type E 1111 1 E Timer/Counter F1 event type E

Tabelle 3: Channel Multiplexer Eventauswahl

T/C Event E Event Typ 0 0 0 Over-/Underflow 0 0 1 Error 0 1 X Reserviert 1 0 0 Capture oder Compare A 1 0 1 Capture oder Compare B 1 1 0 Capture oder Compare C 1 1 1 Capture oder Compare D

Tabelle 4: Timer-Event-Konfiguration

10.3.2. CHnCTRL – Event Channel n Control Register

Abbildung 18: Event Channel n Control Register

Bit 7 - Res: Reserved Bit 6:5 - QDIRM[1:0]: Quadrature Decode Index Recognition Mode Diese Bits stellen den Quadraturstaus für die Signale QDPH0 und QDPH90 fest, in denen ein gültiges Indexsignal erkannt wird und sind nur für CH0CTRL, CH2CTRL and CH4CTRL verfügbar.

Bit 4 - QDIEN: Quadrature Decode Index Enable Wenn das Bit gesetzt ist, wird der Event Channel als QDEC Indexquelle verwendet und das Indexdaten-Event eingeschaltet. Dieses Bit ist nur für CH0CTRL, CH2CTRL and CH4CTRL verfügbar. Bit 3 - QDEN: Quadrature Decode Enable Wenn das Bit gesetzt ist, wird die QDEC-Operation aktiviert. Dieses Bit ist nur für CH0CTRL, CH2CTRL and CH4CTRL verfügbar. Bit 2:0 - DIGFILT[2:0]: Digital Filter Coefficient Die Bits definieren die Anzahl der Samples zur digitalen Filterung eines Events.

DIGIFILT[2:0] Beschreibung 000 1 Sample 001 2 Samples 010 3 Samples 011 4 Samples 100 5 Samples 101 6 Samples 110 7 Samples 111 8 Samples

Tabelle 5: Digital Filter Koeffizient Konfiguration

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 27

11. Ausgewählte On- Chip Peripherie

11.1. I/O Ports

11.1.1. Eigenschaften Individuelle In- oder Output-Funktion für jedes Portpin über Portregister konfigurierbar Synchrones und/oder asynchrones Input-Sensing mit Port Interrupts und Events Umfangreiche Konfigurationsmöglichkeiten der Output-Driver als:

– Totem-pole (Gegentakt) – Pull-up/-down – Wired-AND – Wired-OR – Bus keeper – Inverted I/O

Slew rate control (Anstiegsgeschwindigkeitssteuerung) Flexible Pin Maskierung Konfiguration von mehreren Pins in einer Operation Read-Modify-Write (RMW) Unterstützung Toggle/Clear/Set Register für OUT und DIR Register Clock-Output am Portpin Event Channel 0 Output am Portpin 7 Mapping der Portregister (Virtual Ports) in den bitadressierbaren I/O-Speichebereich

Abbildung 19: Portpin Pxn als digitaler Ein- und Ausgang

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 28

Jedem Port ist ein Satz von Konfigurationsregistern zugeordnet. DIR - Data Direction Register

o DIRSET - Data Direction Set Register o DIRCLR - Data Direction Clear Register o DIRTGL - Data Direction Toggle Register

OUT - Data Output Value o OUTSET - Data Output Value Set Register o OUTCLR - Data Output Value Clear Register o OUTTGL - Data Output Value Toggle Register

IN - Data Input Value Register INTCTRL - Interrupt Control Register INT0MASK - Interrupt 0 Mask Register INT1MASK - Interrupt 1 Mask Register INTFLAGS - Interrupt Flag Register PINnCTRL - Pin n Configuration Register

11.1.2. Registerbeschreibung

11.1.2.1. DIR - Data Direction Register

Abbildung 20: Data Direction Register

Bit 7:0 - DIR[7:0]: Data Direction Das Register beinhaltet die Einstellungen der Datenrichtung für die Portpins. 0: Pin[7:0] ist Input 1: Pin[7:0] ist Output

11.1.2.2. OUT - Data Output Value

Abbildung 21: Data Output Value

Bit 7:0 - OUT[7:0]: Port Data Output value Das Register enthält die Ausgangsdaten, die an PORTx ausgegeben werden. 0: OUTn = low 1: OUTn = high. Die verwendeten Pins müssen als Output in DIR konfiguriert werden.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 29

11.1.2.3. IN - Data Input Value Register

Abbildung 22: Data Input Value Register

Bit 7:0 - IN[7:0]: Data Input Value This register shows the value present on the pins if the digital input driver is enabled. INn shows the value of pin n on the port.

11.1.2.4. INTCTRL - Interrupt Control Register (Einschalten + Priorität definieren) Jedem Port sind 2 Interruptquellen zugeordnet. Mit dem INTCTRL-Register kann der jeweili-ge Portinterrupt 0 oder Portinterrupt 1 in die Interrupt Level Low, Medium oder High einge-ordnet werden.

Abbildung 23: Interrupt Control Register

Bit 7:4 - Res: reserved Bit 3:2/1:0 - INTnLVL[1:0]: Interrupt n Level Mit den Bits 3:2 und 1:0 wird der Portinterrupt 1 bzw. Portinterrupt 0 eingeschaltet. Die Ein-ordnung in ein Level ist im Abschnitt Interruptsystem beschrieben.

11.1.2.5. INT0MASK - Interrupt 0 Mask Register (Zuordnung Portpins zu INT0)

Abbildung 24: Interrupt 0 Mask Register

Bit 7:0 - INT0MSK[7:0]: Interrupt 0 Mask Register Diese Bits werden verwendet, um Portpins auszuwählen, die als Interruptquellen des Portin-terrupts 0 genutzt werden sollen. Wenn INT0MASKn mit einer logischen 1 beschrieben wird, ist Pin n als Interruptquelle für den Portinterrupt 0 definiert. Die Eingangskonfiguration des Pin n ist über das PINnCTRL-Register vorzunehmen.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 30

11.1.2.6. INT1MASK - Interrupt 1 Mask Register (Zuordnung Portpins zu INT1)

Abbildung 25: Interrupt 1 Mask Register

Bit 7:0 - INT1MASK[7:0]: Interrupt 1 Mask Register Diese Bits werden verwendet, um Portpins auszuwählen, die als Interruptquellen des Portin-terrupts 1 genutzt werden sollen. Wenn INT0MASKn mit einer logischen 1 beschrieben wird, ist Pin n als Interruptquelle für den Portinterrupt 1 definiert. Die Eingangskonfiguration des Pin n ist über das PINnCTRL-Register vorzunehmen.

11.1.2.7. INTFLAGS - Interrupt Flag Register

Abbildung 26: Interrupt Flag Register

Bit 7:2 - Res: reserved Bit 1:0 - INTnIF: Interrupt n Flag Das INTnIF-Flag ist gesetzt, wenn sich der Zustand eines Portpins entsprechend Input Sense Configuration im Register PINnCTRL geändert hat, und der Portinterrupt 0 oder 1 einge-schaltet ist.

11.1.2.8. PINnCTRL - Pin n Configuration Register (Flankenauswahl u.a.)

Abbildung 27: Pin n Configuration Register

Bit 7 - SRLEN: Slew Rate Limit Enable Setting this bit will enable slew-rate limiting on pin n. Bit 6 - INVEN: Inverted I/O Enable Setting this bit will enable inverting output and input data on pin n.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 31

Bit 5:3 - OPC: Output und Pull Configuration Diese Bits setzen die Output/Pull-Konfiguration an Pin n laut nachfolgender Tabelle:

OPC[2:0]

Konfiguration

Beschreibung Output Konfigura-tion

Pull Konfiguration

000 TOTEM Totempole not applicable 001 BUSKEEPER Totempole Bus keeper 010 PULLDOWN Totempole Pull-down (on input) 011 PULLUP Totempole Pull-up (on input 100 WIREDOR Wired OR not applicable 101 WIREDAND Wired AND not applicable 110 WIREDORPULL Wired OR Pull-down 111 WIREDANDPULL Wired AND Pull-up

Tabelle 6: Output und Pull Configuration

Bit 2:0 - ISC[2:0]: Input/Sense Configuration Mit den Bits ISC[2:0] ist die Eingangsetektion für jedes Portpin im Interruptmodus konfigu-rierbar.

ISC[2:0] Beschreibung 000 Sense both edges 001 Sense rising edge 010 Sense falling edge 011 Sense low level 100 Reserved 101 Reserved 110 Reserved 111 Input buffer disabled

Tabelle 7: Input/Sense Configuration

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 32

11.2. Timer/Counter

11.2.1. Überblick Im ATXMEGA128A1 sind acht 16 Bit breite Timer/Counter integriert. Neben den Grund-funktionalitäten als Zeitgeber und Zähler können weitere Betriebsarten, wie PWM, Output-Compare und Input-Compare realisiert werden. Prinzipiell beinhalten die jeweiligen Timer ein Zählregister TCXX_CNT und eine Control Logic mit Prescaler zum vorteilen der Takt-quelle. Der Takt kann dabei von einem Event, z.B. von einem externen Portpin (Zähler) oder auch vom internen Peripherietakt (Zeitgeber) abgeleitet werden.

Abbildung 28: Prinzipielle Struktur eines Timer/Counter-Moduls des ATXMEGA128A1

Im Normalmodus wird der Zählerstand des TCXX_CNT-Registers nach jedem Zählschritt mit 0 und dem Inhalt des Timer-Period-Registers verglichen, um festzustellen, ob TOP oder BOTTOM erreicht ist. Zusätzlich wird der Zählerstand mit den CCx-Registern verglichen. Diese Vergleiche können zur Generierung von Interrupts, DMA-Operationen oder Events verwendet werden.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 33

11.2.2. Registerbeschreibung

11.2.2.1. CNTH - Counter Register H und CNTL - Counter Register L

Abbildung 29: CNTH - Counter Register H und CNTL - Counter Register L

Die beiden Register enthalten den 16-Bit Zählerstand des Timer/Counter.

11.2.2.2. PERH - Period Register H und PERL - Period Register L

Abbildung 30: PERH - Period Register H und PERL - Period Register L

Das PERH- und das PERL-Register beinhaltet den 16-Bit-Wert PER. PER ist der konfigu-rierbare 16-Bit TOP-Wert des Timer/Counter.

11.2.2.3. CTRLA - Control Register A

Abbildung 31: CTRLA - Control Register A

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 34

Bit 7:4 - Res: Reserved bits Bit 3:0 - CLKSEL[3:0]: Clock Select Die Bits ermöglichen die Auswahl der Taktquelle für den Timer/Counter laut nachfolgender Tabelle:

CLKSEL[3:0] Beschreibung 0000 Timer/Counter off 0001 clk/1 0010 clk/2 0011 clk/4 0100 clk/8 0101 clk/64 0110 clk/256 0111 clk/1024 1xxx Event channel n (n=0 .. 7)

Tabelle 8: T/C Clock Select

11.2.2.4. CTRLB - Control Register B

Abbildung 32: CTRLB - Control Register B

Bit 7:4 – CCxEN: Compare or Capture Enable Wenn die Bits im FRQ-oder PWM-Waveform Generation Mode gesetzt werden, werden die Portausgaberegister des zugehörigen OCn-Pins angesteuert. Wenn die Input Capture Operati-on ausgewählt ist, kann der zugehörige CC-Kanal über die CCxEN-Bits aktiviert werden. Bit 3 – Res: Reserved Bit 2:0 – WGMODE[2:0]: Waveform Generation Mode Die Bits selektieren die Betriebsart des T/C und kontrollieren die Zählsequenz des Counters, den TOP-Wert, die UPDATE Condition, die Interrupt/Event Condition und den Typ der gene-rierten Signalform. Im Normalmodus wird keine Signalform generiert. In allen anderen Be-triebsarten wird das entsprechende Portpin angesteuert, wenn das zugehörige CCxEB-Bit ge-setzt ist. Die verwendeten Portpins müssen als Output definiert werden. WGMODE[2:0] Betriebsart TOP UPDATE OVFIF/Event

000 Normal PER TOP TOP 001 FRQ CCA TOP TOP 010 Reserviert - - - 011 Single Slope PWM PER BOTTOM BOTTOM 100 Reserviert - - - 101 Dual Slope PWM PER BOTTOM TOP

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 35

110 Dual Slope PWM PER BOTTOM TOP & BOTTOM 111 Dual Slope PWM PER BOTTOM BOTTOM

Tabelle 9: Betriebsarteinstellung des T/C

11.2.2.5. CTRLC - Control Register C

Abbildung 33: CTRLC - Control Register C

Bit 7:4 – Res: Reserved Bit 3:0 – CMPx: Compare Output Value n Die Bits ermöglichen den direkten Zugriff auf den Signalformausgangswert, wenn der Ti-mer/Counter gestoppt ist. Das Feature kann zum Löschen des Signalformausgangswerts ver-wendet werden, wenn det T/C nicht läuuft.

11.2.2.6. CTRLD - Control Register D

Abbildung 34:CTRLD - Control Register D

Bit 7:5 – EVACT[2:0]: Event Action Die Bits definieren die Aktion, die ein Event auslösen können. EVACT[2:0] Event-Aktion

000 Keine 001 Input Capture 010 Extern kontrollierter UP/DOWN-Zähler 011 Quadratur Decodierung 100 Restart Signalform Periode 101 Frequency Capture 110 Pulse Width Capture 111 reserviert

Tabelle 10: Event Action Einstellungen

Bit 4 – EVDLY: Timer Delay Event Wenn das Bit gesetzt ist, wird die ausgewählte Eventquelle für einen Peripherietakt blockiert. Verwendet wird das Feature im Zusammenhang mit der 32-Bit Input Capture Operation.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 36

Bit 3:0 – EVSEL[3:0]:Timer Event Source Select Die Bits werden zur Auswahl der Eventkanalquelle verwendet. EVSEL[3:0] Eventquelle

0000 Keine 0001 .. 0111 reserviert

1xxx Eventkanal n (n=0 .. 7) Tabelle 11: Timer Event Source Select

11.2.2.7. CTRLE - Control Register E

Abbildung 35: CTRLE - Control Register E

Bit 7:1 – Res: Reserved Bit 0 - BYTEM: Byte Mode: Das Setzen des Bits schaltet den Timer/Counter in den 8-Bit-Modus. Zusätzlich wird das obe-re Byte des 16-Bit-T/C auf Null gesetzt.

11.2.2.8. INTCTRLA - Interrupt Enable Register A

Abbildung 36: INTCTRLA - Interrupt Enable Register A

Bit 7:4 - Res: Reserved Bit 3:2 - ERRINTLVL[1:0]:Timer Error Interrupt Level Die Bits aktivieren den Timer Error Interrupt und weisen das Interrupt-Level zu. Bit 1:0 - OVFINTLVL[1:0]:Timer Overflow/Underflow Interrupt Level Die Bits aktivieren den Timer Overflow/Underflow Interrupt und weisen das Interrupt-Level zu.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 37

11.2.2.9. INTCTRLB - Interrupt Enable Register B

Abbildung 37: INTCTRLB - Interrupt Enable Register B

Bit 7:0 - CCxINTLVL[1:0]: Compare or Capture x Interrupt Level Mit den Bits kann der Timer Compare oder Capture Interrupt aktiviert und das Interruptlevel gewählt werden.

11.2.2.10. CTRLFCLR/CTRLFSET - Control Register F Clear/Set

Abbildung 38:CTRLFCLR/CTRLFSET - Control Register F Clear/Set

Bit 7:4 - Res: Reserved Bit 3:2 - CMD[1:0]: Timer/Counter Command Diese Kommando-Bits können zur softwareseitigen Kontrolle des Updates, Restarts und des Resets des Timer/Counters verwendet werden.

CMD Command Action 00 Keine 01 Force Update 10 Force Restart 11 Force Hard Reset (Ignored if T/C is not in OFF state)

Tabelle 12: Timer/Counter Command

Bit 1 - LUPD: Lock Update: Wenn das Bit gesetzt ist, erfolgt keine Aktualisierung in den buffered Registern, wenn eine UPDATE-Bedingung eingetreten ist.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 38

Bit 0 - DIR: Counter Direction: 0: Counter zählt aufwärts 1: Counter zählt abwärts Das Bit wird vom Signalgenerationmodus oder von Eventaktionen hardwaregesteuert, kann aber auch per Software beeinflusst werden.

11.2.2.11. CTRLGCLR/CTRLGSET - Control Register G Clear/Set

Abbildung 39: CTRLGCLR/CTRLGSET - Control Register G Clear/Set

Bit 7:5 - Res: Reserved Bit 4:1 - CCxBV: Compare or Capture x Buffer Valid Die Bits werden gesetzt, wenn neue Werte in das zugehörige CCxBUF-Register geschrieben werden und automatisch bei einer UPDATE-Bedingung gelöscht. Bit 0 - PERBV: Period Buffer Valid Das Bit wird gesetzt, wenn ein neuer Wert in das zugehörige PERBUF-Register geschrieben wird und automatisch bei einer UPDATE-Bedingung gelöscht.

11.2.2.12. INTFLAGS - Interrupt Flag Register

Abbildung 40: INTFLAGS - Interrupt Flag Register

Bit 7:4 - CCxIF: Compare or Capture Channel x Interrupt Flag Das Compare oder Capture Interrupt Flag (CCxIF) wird gesetzt, wenn ein Compare-Match-oder ein Input-Capture-Event am zugehörigen CC-Kanal eingetreten ist. CCxIF wird automa-tisch gelöscht, wenn der Interruptvektor angesprungen wurde. Bit 3:2 - Res: Reserved Bit 1 - ERRIF: Error Interrupt Flag Das ERRIF wird bei verschiedenen Ereignissen in Abhängigkeit der Betriebart gesetzt. Wei-tere Informationen sind dem XMEGA-Manual zu entnehemen.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 39

Bit 0 - OVFIF: Overflow/Underflow Interrupt Flag Das OVFIF wird bei Überschreitung des TOP- (overflow) oder BOTTOM-Wertes (under-flow) in Abhängigkeit der eingestellten Betriebsart gesetzt. OVFIF wird automatisch gelöscht, wenn der Interruptvektor angesprungen wurde. Es kann durch Beschreiben mit einer logi-schen 1 zurückgesetzt werden.

11.2.2.13. CCxH - Compare or Capture Register n H und CCxL - Compare or Capture Register n L

Abbildung 41: Compare or Capture Register n - CCxH und CCxL

Das CCxH- und CCxL-Registerpaar enthält den 16-Bit-Wert CCx. Die 16-Bit-Register haben zwei Funktionen in Abhängigkeit der Betriebsart. Bei der Capture-Operation bilden die Re-gister das zweite Buffer-Level und den Access Point für CPU und DMA. Im Comparemodus wird der Inhalt der Register fortlaufend mit dem Zählerstand der CNT-Register verglichen.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 40

11.3. Two-Wire Serial Interface

11.3.1. Eigenschaften 4 identische TWI an PORTC, PORTD, PORTE und PORTF Unterstützung von Master- und Slavemodus Multi-Master, Single Master, oder Slave Only Operation Phillips I2C kompatibel SMBus kompatibel 100 kHz und 400 kHz Support Slew-Rate Limited Output Drivers 7-bit und General Call Address Recognition in Hardware Unterstützung der 10-bit Adressierung

Abbildung 42: TWI – Bus - Topologie

In der folgenden Registerbeschreibung wird nur der TWI-Master-Modus betrachtet. Weitere Informationen sind dem Manual des ATXMEGA128A1 zu entnehmen.

11.3.2. Registerbeschreibung

11.3.2.1. CTRLA - TWI Master Control Register A

Abbildung 43: CTRLA - TWI Master Control Register A

Bit 7:6 - INTLVL[1:0]: Interrupt Level Die Bits konfigurieren das Interrupt-Level für die TWI-Master-Interruptquellen. Bit 5 - RIEN: Read Interrupt Enable 0: Read-Interrupt deaktiviert 1: Read-Interrupt aktiviert bei INTLVL != 0

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 41

Bit 4 - WIEN: Write Interrupt Enable 0: Write-Interrupt deaktiviert 1: Write-Interrupt aktiviert bei INTLVL != 0 Bit 3 - ENABLE: Enable TWI Master 0: TWI-Master deaktiviert 1: TWI-Master aktiviert Bit 2:0 - Res: Reserved

11.3.2.2. CTRLC - TWI Master Control Register C

Abbildung 44: CTRLC - TWI Master Control Register C

Bits 7:3 - Res: Reserved Bit 2 - ACKACT: Acknowledge Action 0: ACK senden 1: NACK senden Bit 1:0 - CMD[1:0]: Command Das Schreiben der Command (CMD) Bits löst eine Masteraktion aus, die in folgender Tabelle dargestellt ist: CMD[1:0] Mode Operation

00 X Reserviert 01 X Execute Acknowledge Action succeeded by START condition 10 /W No operation

R Execute Acknowledge Action succeeded by a byte receive 11 Execute Acknowledge Action succeeded by issuing a STOP con-

dition Tabelle 13: Command

11.3.2.3. STATUS - Master Status Register

Abbildung 45: STATUS - Master Status Register

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 42

Bit 7 - RIF: Read Interrupt Flag Das Read Interrupt Flag (RIF) ist gesetzt, wenn ein Byte im Master-Read-Modus erfolgreich empfangen wurde. Es wird automatisch durch folgende Aktionen gelöscht: Schreiben des ADDR-Registers, Schreiben des DATA-Registers, Lesen des ADDR-Registers, Schreiben eines gültigen Kommandos im CTRLC-Register.

Bit 6 - WIF: Write Interrupt Flag Das Write Interrupt Flag (WIF) ist gesetzt, wenn ein Byte im Master-Write-Modus übertragen wurde. Das Flag wird analog zu den Aktionen, die für WIF und RIF gelten, gelöscht. Bit 5 - CLKHOLD: Clock Hold Das Master Clock Hold (CLKHOLD) Flag ist gesetzt, wenn der Master die SCL-Leitung auf low halt. Das Flag wird analog zu den Aktionen, die für WIF und RIF gelten, gelöscht. Bit 4 - RXACK: Received Acknowledge 0: ACK vom Slave empfangen 1: NACK vom Slave empfangen Bit 3 - ARBLOST: Arbitration Lost 0: kein Arbitration Lost während einer Datenübertragung 1: Arbitration Lost während einer Datenübertragung Bit 2 - BUSERR: Bus Error Das Bus Error (BUSERR) Flag ist nach einer illegalen Bus Condition gesetzt. Es wird durch das Schreiben des ADDR-Registwers gelöscht. Bit 1:0 - BUSSTATE[1:0]: Bus State

BUSSTATE[1:0] Beschreibung 00 Unknown Bus State 01 Idle 10 Owner 11 Busy

Tabelle 14: Bus State

11.3.2.4. BAUD - TWI Baud Rate Register

Abbildung 46: BAUD - TWI Baud Rate Register

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 43

Im BAUD – Register wird die TWI-Frequenz konfiguriert. Zur Berechnung des BAUD-Wertes ist folgende Formel zu verwenden:

52

−=TWI

SYS

ff

TWMBR

Das BAUD-Register sollte beschrieben werden, wenn der TWI-Master deaktiviert ist.

11.3.2.5. ADDR - TWI Master Address Register

Abbildung 47: ADDR - TWI Master Address Register

Wird das ADDR-Register mit einer 7-Bit TWI-Slave-Adresse + dem R/W-Bit beschrieben, generiert die Hardware eine Start-Condition und überträgt die Slaveadresse. Nach erfolgrei-chem ACK des Slaves wird die SCL-Leitung auf low gehalten, sodass weitere Daten übertra-gen werden können.

11.3.2.6. DATA -TWI Master Data Register

Abbildung 48: DATA -TWI Master Data Register

Das DATA-Register wird zum Senden und Empfangen von TWI-Daten verwendet. Im Mas-ter-Write-Modus wird durch das Beschreiben des Registers der Datentransfer gestartet. Im Master-Read-Modus kann das DATA-Register gelesen werden, wenn der Datentransfer abge-schlossen ist. Dies wird durch die gesetzten RIF und CLKHOLD-Flags signalisiert.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 44

11.4. Analog Digital Wandler

11.4.1. Eigenschaften 12-bit Auflösung Bis zu 2 Msps Sample- und Wandlungsrate Single-ended oder Differential Messung Signed und Unsigned Messmodus 4 Result-Register mit individueller Eingangskontrolle 8 - 16 single-ended Inputs 8x4 differentielle Eingänge ohne Verstärkung 8x4 differentielle Eingänge mit Verstärkung 4 interne Eingänge Temperatur Sensor DAC Ausgang VCC voltage divided by 10 Bandgap voltage 1x, 2x, 4x, 8x, 16x, 32x or 64x Verstärkung 4 Inputs können mit 1,5 µs gesampled werden Wählbare 8-, oder 12-Bit Auflösung Built-in Referenz Optionale externe Referenz Optionale eventgetriggerte Wandlung für genaues Timing Optionaler DMA-Transfer der Wandlungsergebnisse Optionale Interrupt-/Event-Generierung

Abbildung 49: Blockdiagramm des ADU

Im Folgenden wird eine Auswahl von wichtigen ADC-Registern beschrieben. Weitergehende Informationen zur Konfiguration des ADCs sind dem Manual zu entnehmen.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 45

11.4.2. Registerbeschreibung - ADC

11.4.2.1. CTRLA - ADC Control Register A

Abbildung 50: CTRLA - ADC Control Register A

Bits 7:6 – DMASEL[1:0]: DMA Request Selection Zusätzlich zum einzelnen DMA-Transfer-Request können kombinierte DMA-Tranfer-Requests für mehrere ADC-Kanäle angefordert werden. DMASEL[1:0] Beschreibung

00 Kein kombinierter DMA Request 01 ADC Kanal 0 oder 1 10 ADC Kanal 0 oder 1 oder 2 11 ADC Kanal 0 oder 1 oder 2 oder 3

Tabelle 15: DMA Request Selection

Bits 5:2 – CH[3:0]START: ADC Channel Start single conversion Das Setzen eines der Bits startet die AD-Wandlung am zugehörigen ADC-Kanal. Die Bits werden von derHardware gelöscht, wenn die Wandlung gestartet wurde. Bit 1 – FLUSH: ADC Pipeline Flush: Nach dem Setzen des Bits wird die ADC-Pipeline geleert und alle AD-Wandlungen gestoppt. Bit 0 – ENABLE: ADC Enable 0: ADC deaktiviert 1: ADC aktiviert

11.4.2.2. CTRLB - ADC Control Register B

Abbildung 51: CTRLB - ADC Control Register B

Bits 7:5 - Res: Reserved

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 46

Bit 4 - CONVMODE: ADC Conversion Mode 0: unsigned Mode 1: signed Mode Bit 3 - FREERUN: ADC Free Running Mode 0: Single Mode 1: Free Running Mode Bits 2:1 - RESOLUTION[1:0]: ADC Conversion Result Resolution Die Bits definieren die Auflösung des ADC und die Ablage des Ergebnisses in den CHnRES-Registern. RESOLUTION[1:0] Beschreibung

00 12-Bit, right adjusted 01 Reserviert 10 8-Bit, right adjusted 11 12-Bit, left adjusted

Tabelle 16: ADC Conversion Result Resolution

Bit 0 - Res: Reserved This bit is unused and reserved for future use. For compatibility with future devices, always write this bit to zero when this register is written.

11.4.2.3. REFCTRL - ADC Reference Control register

Abbildung 52: REFCTRL - ADC Reference Control register

Bit 7:6 – Res: Reserved Bits 6:4 – REFSEL[1:0]: ADC Reference Selection Die Bits wählen die Referenz und den Wandlungsbereich des ADC aus.

REFSEL[1:0 Beschreibung 00 Intern 1.00 V 01 Intern Vcc/1.6 10 Externe Referenz am AREF-Pin PORTA 11 Externe Referenz am AREF-Pin PORTB

Tabelle 17: ADC Reference Selection

Bit 3:2 – Res: Reserved

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 47

Bit 1 – BANDGAP: Bandgap enable 0: Referenzspannungsquelle aktiviert 1: Referenzspannungsquelle deaktiviert Bit 0 – TEMPREF: Temperature Reference enable Das Setzen des Bits aktiviert die Temperaturreferenz für die ADC-Messung.

11.4.2.4. PRESCALER - ADC Clock Prescaler register

Abbildung 53: PRESCALER - ADC Clock Prescaler register

Bits 7:3 - Res: Reserved Bits 2:0 - PRESCALER[2:0]: ADC Prescaler configuration Die Bits stellen in Abhängigkeit zum Peripherietakt den ADC-Takt ein.

PRESCALER[2:0] CLKPER Teiler 000 4 001 8 010 16 011 32 100 64 101 128 110 256 111 512

Tabelle 18: ADC Prescaler configuration

11.4.2.5. CHnRESH - ADC Channel n Result register High und CHnRESL - ADC Channel n Result register Low

Die CHnRESL- und CHnRESH-Register beinhalten das ADC-Wandlungsergebnis. In Ab-hängigkeit der gewählten Konfiguration und Auflösung des ADCs wird das ADC-Ergebnis nach Beendigung der Wandlung unterschiedlich in das Registerpaar eingeordnet.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 48

Abbildung 54: CHnRESH und CHnRESL

11.4.3. Registerbeschreibung - ADC-Channel

11.4.3.1. CTRL - ADC Channel Control Register

Abbildung 55: CTRL - ADC Channel Control Register

Bits 7 – START: START Conversion on Channel Das Setzen dieses Bits startet eine Wandlung über den Kanal. Das Bit wird von der Hardware rückgesetzt, wenn die Wandlung startet. Schreiben oder Lesen dieses Bits ist äquivalent zum Schreiben der CH[3:0]START Bits im ADC Control Register A CTRLA. Bits 6:5 – Res: Reserved Bits 4:2 – GAIN[2:0]: ADC Gain Factor Diese Bits definieren den Verstärkungsfaktor, um die Eingangssignale vor der ADC Wand-lung zu verstärken. Der Verstärker ist nur bei bestimmten MUX Einstellungen im MUXCTRL Register verwendbar.

GAIN[2:0] Verstärkungsfaktor 000 1x 001 2x 010 4x 011 8x 100 16x 101 32x 110 64x 111 reserviert

Tabelle 19: ADC Gain Factor

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 49

Bits 1:0 – INPUTMODE[1:0]: Channel Input Mode Diese Bits definieren den Eingangsmodus für den Kanal. Diese Einstellungen sind abhängig von der ADC CONVMODE Einstellung im Register CTRLB, die differentiellen Eingangs-modi können nur im ADC signed Modus verwendet werden.

INPUTMODE[1:0] Eingangsmodus 00 Internes positives Eingangssignal 01 single-ended positives Einganssignal 10 differentielles Eingangssignal 11 differentielles Eingangssignal mit Verstärkung

Tabelle 20: Channel Input Modes

11.4.3.2. MUXCTRL – ADC Channel MUX Control Register

Abbildung 56: MUXCTRL – ADC Channel MUX Control Register

Bit 7 – Res: Reserved Bits 6:3 – MUXPOS[3:0]: MUX selection on Positive ADC input Diese Bits definieren die Multiplexerauswahl für den positiven ADC Eingang.

Analog input MUXPOS[2:0] bei INPUTMODE:

Internal bei INPUTMODE: Single-ended oder Differential

000 Temperature Reference ADC0 Pin 001 Bandgap Voltage ADC1 Pin 010 1/10 scaled VCC ADC2 Pin 011 DAC output ADC3 Pin 100 reserviert ADC4 Pin 101 reserviert ADC5 Pin 110 reserviert ADC6 Pin 111 reserviert ADC7 Pin

Tabelle 21: MUXPOS Configuration

Bit2 – Res: Reserved Bits1:0 – MUXNEG[1:0]. MUX selection on Negative ADC input Diese Bits definieren die Multiplexerauswahl für den negativen ADC Eingang bei differenti-ellen Messungen. Bei internen oder single-ended Messungen werden diese Bits nicht verwen-det.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 50

Analog input MUXNEG[1:0] bei INPUTMODE:

Differential without Gain bei INPUTMODE: Differential with Gain

00 ADC0 Pin ADC4 Pin 01 ADC1 Pin ADC5 Pin 10 ADC2 Pin ADC6 Pin 11 ADC3 Pin ADC7 Pin

Tabelle 22: MUXNEG Configuration

11.4.3.3. INTCTRL – ADC Channel Interrupt Control Register

Abbildung 57: INTCTRL –ADC Channel Interrupt Control Register

Bits7:4 – Res: Reserved Bits3:2 – INTMODE[1:0]: ADC Interrupt Mode Diese Bit dienen zur Auswahl des Interruptmodus für den Kanal.

INTMODE[1:0] Interruptmodus 00 Conversion Complete 01 Compare Result Below Threshold 10 reserviert 11 Compare Result Above Threshold

Tabelle 23: ADC interrupt mode

Bits1:0 – INTLVL[1:0]: ADC Interrupt Priority Level and Enable Diese Bits aktivieren den Interrupt für den ADC Kanal und definieren das Interrupt Level.

11.4.3.4. RESH – ADC Channel n Result Register High und RESL – ADC Channel n Result Register Low

Die RESL- und RESH-Register beinhalten das ADC-Wandlungsergebnis. In Abhängigkeit der gewählten Konfiguration und Auflösung des ADCs wird das ADC-Ergebnis nach Beendi-gung der Wandlung unterschiedlich in das Registerpaar eingeordnet.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 51

Abbildung 58: RESH (oben) und RESL (unten)

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 52

11.5. Serial Peripheral Interface - SPI

11.5.1. Eigenschaften Das Serial Peripheral Interface, kurz SPI oder auch Microwire genannt, ist ein Bus-System bestehend aus drei Leitungen für eine serielle synchrone Datenübertragung zwischen ver-schiedenen ICs. Der Bus besteht aus folgenden Leitungen

• Master Out / Slave In (MOSI) • Master In / Slave Out (MISO) • Serial Clock (SCK)

Zusätzlich zu diesen drei Leitungen wird für jeden Slave eine Slave Select (/SS) bzw. Chip Select (/CS) genannte Leitung benötigt, durch die der Master den Slave zur aktuellen Kom-munikation selektiert. Dies geschieht dadurch, dass der Master die SS/CS-Leitung von High nach Low zieht. Für den SPI-Bus gibt es kein festgelegtes Protokoll. Die Clock-Polarität (CPOL) und Phase (CPHA) können ebenfalls von Slave zu Slave unterschiedlich sein. Der ATXMEGA128A1 besitzt 4 identische SPI-Interfaces an PORTC, PORTD, PORTE und PORTF. Das SPI besitzt folgende Eigenschaften:

• Full-duplex, Three-wire Synchronous Data Transfer • Master oder Slave Operation • LSB First oder MSB First Data Transfer • 8 programmierbare Bit Rates • Interruptanforderung bei Beendigung des Datentransfers • DMA-Unterstützung

Abbildung 59: SPI-Master-Slave Kopplung

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 53

11.5.2. Registerbeschreibung

11.5.2.1. CTRL - SPI Control Register

Abbildung 60: CTRL - SPI Control Register

Bit 7 - CLK2X: SPI Clock Double 0: SPI SCK laut Tabelle SPI-Clock-Prescaler 1: doppelte SPI SCK laut Tabelle SPI-Clock-Prescaler Bit 6 - ENABLE: SPI Enable 0: SPI aktiviert 1: SPI deaktiviert Bit 5 - DORD: Data Order 0: MSB wird zuerst übertragen 1: LSB wird zuerst übertragen Bit 4 - MASTER: Master/Slave Select 0: Slave-Modus 1: Master-Modus Bit 3:2 - MODE[1:0]: SPI Mode

MODE[1:0] Group Configura-tion

Leading Edge Trailing Edge

00 0 Rising, Sample Falling, Setup 01 1 Rising, Setup Falling, Sample 10 2 Falling, Sample Rising, Setup 11 3 Falling, Setup Rising, Sample

Tabelle 24: SPI Mode

Bits 1:0 - PRESCALER[1:0]: SPI Clock Prescaler CLK2X Prescaler SCK Frequency

0 00 clkPER/4 0 01 clkPER/16 0 10 clkPER/64 0 11 clkPER/128 1 00 clkPER/2 1 01 clkPER/8 1 10 clkPER/32 1 11 clkPER/64

Tabelle 25: SPI Clock Prescaler

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 54

11.5.2.2. INTCTRL - SPI Interrupt Control Register

Abbildung 61: INTCTRL - SPI Interrupt Control Register

Bits 7:2 - Res: Reserved Bits 1:0 - INTLVL[1:0]: SPI Interrupt Level Die Bits ermöglichen die Aktivierung und die Einordnung des SPI-Interrupts in ein Interrupt-Level.

11.5.2.3. STATUS - SPI Status Register

Abbildung 62: STATUS - SPI Status Register

Bit 7 - IF: SPI Interrupt Flag Das IF-Bit wird nach Abschluss eines SPI-Transfers gesetzt und bei Ausführung des zugehö-rigen Interruprvektors gelöscht. Bit 6 - WRCOL: Write Collision Flag Das Bit ist während eines Datentransfers in das DATA-Register gesetzt. Es kann durch das Lesen des STATUS-Registers und anschließendem Lesen des DATA-Registers gelöscht wer-den. Bit 5:0 - Res: Reserved

11.5.2.4. DATA - SPI Data Register

Abbildung 63: DATA - SPI Data Register

Das DATA-Register wird zum Senden und Empfanfen von Daten verwendet. Der Schreibvorgang in das Register startet den Datentransfer über die SPI-Schnittstelle.

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 55

12. Blockdiagramm und Pinout des ATXMEGA128A1

Abbildung 64: Blockschaltbild des ATXMEGA128A1

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 56

Abbildung 65: Pinout des ATXMEGA128A1

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 57

13. Literaturhinweise

Kompaktinformation zur Programmierung in Embedded C, Application Center Microcontroller, Hochschule Mittweida, 03/2010

Atmel Corporation: doc8077, XMEGA Manual, 04/2009 Atmel Corporation: doc8067, 8/16-bit XMEGA A1 Microcontroller Manual , 04/2009 Atmel Corporation: doc0856.pdf, 8 Bit AVR Instruction Set, 07/2009 Online-Hilfe im AVR Studio 4.1x Schmitt, G.: Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie,

Oldenbourg Verlag München Wien, 3. Auflage 2007 www.atmel.com

Application Center Microcontroller Hochschule Mittweida

Programmiermodell ATXMEGA128A1 58

14. Befehlsreferenz der XMEGA-Serie Abkürzungsverzeichnis Rd : Destination (and source) register in the register file

Rr : Source register in the register file

R : Result after instruction is executed

K : Constant data

k : Constant address

b : Bit in the register file or I/O register (3 bit)

s: Bit in the status register (3 bit)

X,Y,Z : Indirect address register (X=R27:R26, Y=R29:R28 and Z=R31:R30)

A : I/O location address

q : Displacement for direct addressing (6 bit)

!! Hinweis: !! Folgende Befehle sind nur mit den Arbeitsregistern 16 bis 31 verwendbar: ANDI Rd,k 16 < d < 31 / 0 < k < 255 Logical AND with Immediate CBR Rd,k 16 < d < 31 / 0 < k < 255 Clear Bits in Register CPI Rd,k 16 < d < 31 / 0 < k < 255 Compare with Immediate LDI Rd,k 16 < d < 31 / 0 < k < 255 Load Immediate MULS Rd,Rr 16 ≤ d ≤ 31, 16 ≤ r ≤ 31 Multiply Signed MULSU Rd,Rr 16 ≤ d ≤ 23, 16 ≤ r ≤ 23 Multiply Signed with Unsigned ORI Rd,k 16 < d < 31 / 0 < k < 255 Logical OR with Immediate SBCI Rd,k 16 < d < 31 / 0 < k < 255 Subtract Immediate with Carry SER Rd 16 < d < 31 Set all bits in Register SUBI Rd,k 16 < d < 31 / 0 < k < 255 Subtract Immediate Weitere Erläuterungen und Beispiele zu den nachfolgend angegebenen Assemblerbefeh-len sind der On-Line-Hilfe des AVR Studios zu entnehmen!

Application Center Microcontroller Hochschule Mittweida

Seite 59

ACMC

15. Befehlssliste

15.1. Arithmetic and Logic Instructions Mnemonic Operands Description Operation Flags Cycles ADD Rd,Rr Add without Carry Rd = Rd + Rr Z,C,N,V,H,S 1 ADC Rd,Rr Add with Carry Rd = Rd + Rr + C Z,C,N,V,H,S 1 ADIW Rd, K Add Immediate To Word Rd+1:Rd,K Z,C,N,V,S 2 SUB Rd,Rr Subtract without Carry Rd = Rd - Rr Z,C,N,V,H,S 1 SUBI Rd,K8 Subtract Immediate Rd = Rd - K8 Z,C,N,V,H,S 1 SBC Rd,Rr Subtract with Carry Rd = Rd - Rr - C Z,C,N,V,H,S 1 SBCI Rd,K8 Subtract with Carry Immedtiate Rd = Rd - K8 - C Z,C,N,V,H,S 1 AND Rd,Rr Logical AND Rd = Rd · Rr Z,N,V,S 1 ANDI Rd,K8 Logical AND with Immediate Rd = Rd · K8 Z,N,V,S 1 OR Rd,Rr Logical OR Rd = Rd V Rr Z,N,V,S 1 ORI Rd,K8 Logical OR with Immediate Rd = Rd V K8 Z,N,V,S 1 EOR Rd,Rr Logical Exclusive OR Rd = Rd EOR Rr Z,N,V,S 1 COM Rd One's Complement Rd = $FF - Rd Z,C,N,V,S 1 NEG Rd Two's Complement Rd = $00 - Rd Z,C,N,V,H,S 1 SBR Rd,K8 Set Bit(s) in Register Rd = Rd V K8 Z,C,N,V,S 1 CBR Rd,K8 Clear Bit(s) in Register Rd = Rd · ($FF - K8) Z,C,N,V,S 1 INC Rd Increment Register Rd = Rd + 1 Z,N,V,S 1 DEC Rd Decrement Register Rd = Rd -1 Z,N,V,S 1 TST Rd Test for Zero or Negative Rd = Rd · Rd Z,C,N,V,S 1

Application Center Microcontroller Hochschule Mittweida

Seite 60

ACMC

CLR Rd Clear Register Rd = 0 Z,C,N,V,S 1 SER Rd Set Register Rd = $FF None 1 SBIW Rdl,K6 Subtract Immediate from Word Rdh:Rdl = Rdh:Rdl - K 6 Z,C,N,V,S 2 MUL Rd,Rr Multiply Unsigned R1:R0 = Rd * Rr Z,C 2 MULS Rd,Rr Multiply Signed R1:R0 = Rd * Rr Z,C 2 MULSU Rd,Rr Multiply Signed with Unsigned R1:R0 = Rd * Rr Z,C 2 FMUL Rd,Rr Fractional Multiply Unsigned R1:R0 = (Rd * Rr) << 1 Z,C 2 FMULS Rd,Rr Fractional Multiply Signed R1:R0 = (Rd *Rr) << 1 Z,C 2 FMULSU Rd,Rr Fractional Multiply Signed with Unsigned R1:R0 = (Rd * Rr) << 1 Z,C 2

15.2. Branch Instructions Mnemonic Operands Description Operation Flags Cycles RJMP k Relative Jump PC = PC + k +1 None 2 IJMP None Indirect Jump to (Z) PC = Z None 2 JMP k Jump PC = k None 3 RCALL k Relative Call Subroutine STACK = PC+1, PC = PC + k + 1 None 3/4* ICALL None Indirect Call to (Z) STACK = PC+1, PC = Z None 3/4* CALL k Call Subroutine STACK = PC+2, PC = k None 4/5* RET None Subroutine Return PC = STACK None 4/5* RETI None Interrupt Return PC = STACK I 4/5* CPSE Rd,Rr Compare, Skip if equal if (Rd ==Rr) PC = PC 2 or 3 None 1/2/3 CP Rd,Rr Compare Rd -Rr Z,C,N,V,H,S 1

Application Center Microcontroller Hochschule Mittweida

Seite 61

ACMC

CPC Rd,Rr Compare with Carry Rd - Rr - C Z,C,N,V,H,S 1 CPI Rd,K8 Compare with Immediate Rd - K Z,C,N,V,H,S 1 SBRC Rr,b Skip if bit in register cleared if(Rr(b)==0) PC = PC + 2 or 3 None 1/2/3 SBRS Rr,b Skip if bit in register set if(Rr(b)==1) PC = PC + 2 or 3 None 1/2/3 SBIC P,b Skip if bit in I/O register cleared if(I/O(P,b)==0) PC = PC + 2 or 3 None 1/2/3 SBIS P,b Skip if bit in I/O register set if(I/O(P,b)==1) PC = PC + 2 or 3 None 1/2/3 BRBC s,k Branch if Status flag cleared if(SREG(s)==0) PC = PC + k + 1 None 1/2 BRBS s,k Branch if Status flag set if(SREG(s)==1) PC = PC + k + 1 None 1/2 BREQ k Branch if equal if(Z==1) PC = PC + k + 1 None 1/2 BRNE k Branch if not equal if(Z==0) PC = PC + k + 1 None 1/2 BRCS k Branch if carry set if(C==1) PC = PC + k + 1 None 1/2 BRCC k Branch if carry cleared if(C==0) PC = PC + k + 1 None 1/2 BRSH k Branch if same or higher if(C==0) PC = PC + k + 1 None 1/2 BRLO k Branch if lower if(C==1) PC = PC + k + 1 None 1/2 BRMI k Branch if minus if(N==1) PC = PC + k + 1 None 1/2 BRPL k Branch if plus if(N==0) PC = PC + k + 1 None 1/2 BRGE k Branch if greater than or equal (signed) if(S==0) PC = PC + k + 1 None 1/2 BRLT k Branch if less than (signed) if(S==1) PC = PC + k + 1 None 1/2 BRHS k Branch if half carry flag set if(H==1) PC = PC + k + 1 None 1/2 BRHC k Branch if half carry flag cleared if(H==0) PC = PC + k + 1 None 1/2 BRTS k Branch if T flag set if(T==1) PC = PC + k + 1 None 1/2 BRTC k Branch if T flag cleared if(T==0) PC = PC + k + 1 None 1/2 BRVS k Branch if overflow flag set if(V==1) PC = PC + k + 1 None 1/2 BRVC k Branch if overflow flag cleared if(V==0) PC = PC + k + 1 None 1/2

Application Center Microcontroller Hochschule Mittweida

Seite 62

ACMC

BRIE k Branch if interrupt enabled if(I==1) PC = PC + k + 1 None 1/2 BRID k Branch if interrupt disabled if(I==0) PC = PC + k + 1 None 1/2

15.3. Data Transfer Instructions Mnemonic Operands Description Operation Flags Cycles MOV Rd,Rr Copy register Rd = Rr None 1 MOVW Rd,Rr Copy register pair Rd+1:Rd = Rr+1:Rr, r,d even None 1 LDI Rd,K8 Load Immediate Rd = K None 1 LDS Rd,k Load Direct Rd = (k) None 2* LD Rd,X Load Indirect Rd = (X) None 2* LD Rd,X+ Load Indirect and Post-Increment Rd = (X), X=X+1 None 2* LD Rd,-X Load Indirect and Pre-Decrement X=X-1, Rd = (X) None 2* LD Rd,Y Load Indirect Rd = (Y) None 2* LD Rd,Y+ Load Indirect and Post-Increment Rd = (Y), Y=Y+1 None 2* LD Rd,-Y Load Indirect and Pre-Decrement Y=Y-1, Rd = (Y) None 2* LDD Rd,Y+q Load Indirect with displacement Rd = (Y+q) None 2* LD Rd,Z Load Indirect Rd = (Z) None 2* LD Rd,Z+ Load Indirect and Post-Increment Rd = (Z), Z=Z+1 None 2* LD Rd,-Z Load Indirect and Pre-Decrement Z=Z-1, Rd = (Z) None 2* LDD Rd,Z+q Load Indirect with displacement Rd = (Z+q) None 2* STS k,Rr Store Direct (k) = Rr None 2* ST X,Rr Store Indirect (X) = Rr None 2*

Application Center Microcontroller Hochschule Mittweida

Seite 63

ACMC

ST X+,Rr Store Indirect and Post-Increment (X) = Rr, X=X+1 None 2* ST -X,Rr Store Indirect and Pre-Decrement X=X-1, (X)=Rr None 2* ST Y,Rr Store Indirect (Y) = Rr None 2* ST Y+,Rr Store Indirect and Post-Increment (Y) = Rr, Y=Y+1 None 2 ST -Y,Rr Store Indirect and Pre-Decrement Y=Y-1, (Y) = Rr None 2 STD Y+q,Rr Store Indirect with displacement (Y+q) = Rr None 2 ST Z,Rr Store Indirect (Z) = Rr None 2 ST Z+,Rr Store Indirect and Post-Increment (Z) = Rr, Z=Z+1 None 2 ST -Z,Rr Store Indirect and Pre-Decrement Z=Z-1, (Z) = Rr None 2 STD Z+q,Rr Store Indirect with displacement (Z+q) = Rr None 2 LPM None Load Program Memory R0 = (Z) None 3 LPM Rd,Z Load Program Memory Rd = (Z) None 3 LPM Rd,Z+ Load Program Memory and Post-Increment Rd = (Z), Z=Z+1 None 3 SPM None Store Program Memory (Z) = R1:R0 None - IN Rd,P In Port Rd = P None 1 OUT P,Rr Out Port P = Rr None 1 PUSH Rr Push register on Stack STACK = Rr None 2 POP Rd Pop register from Stack Rd = STACK None 2

Application Center Microcontroller Hochschule Mittweida

Seite 64

ACMC

15.4. Bit and Bit-test Instructions Mnemonic Operands Description Operation Flags Cycles LSL Rd Logical shift left Rd(n+1)=Rd(n), Rd(0)=0, C=Rd(7) Z,C,N,V,H,S 1 LSR Rd Logical shift right Rd(n)=Rd(n+1), Rd(7)=0, C=Rd(0) Z,C,N,V,S 1 ROL Rd Rotate left through carry Rd(0)=C, Rd(n+1)=Rd(n), C=Rd(7) Z,C,N,V,H,S 1 ROR Rd Rotate right through carry Rd(7)=C, Rd(n)=Rd(n+1), C=Rd(0) Z,C,N,V,S 1 ASR Rd Arithmetic shift right Rd(n)=Rd(n+1), n=0,...,6 Z,C,N,V,S 1 SWAP Rd Swap nibbles Rd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0) None 1 BSET s Set flag SREG(s) = 1 SREG(s) 1 BCLR s Clear flag SREG(s) = 0 SREG(s) 1 SBI P,b Set bit in I/O register I/O(P,b) = 1 None 2 CBI P,b Clear bit in I/O register I/O(P,b) = 0 None 2 BST Rr,b Bit store from register to T T = Rr(b) T 1 BLD Rd,b Bit load from register to T Rd(b) = T None 1 SEC None Set carry flag C =1 C 1 CLC None Clear carry flag C = 0 C 1 SEN None Set negative flag N = 1 N 1 CLN None Clear negative flag N = 0 N 1 SEZ None Set zero flag Z = 1 Z 1 CLZ None Clear zero flag Z = 0 Z 1 SEI None Set interrupt flag I = 1 I 1 CLI None Clear interrupt flag I = 0 I 1

Application Center Microcontroller Hochschule Mittweida

Seite 65

ACMC

SES None Set signed flag S = 1 S 1CLN None Clear signed flag S = 0 S 1SEV None Set overflow flag V = 1 V 1CLV None Clear overflow flag V = 0 V 1SET None Set T-flag T = 1 T 1CLT None Clear T-flag T = 0 T 1SEH None Set half carry flag H = 1 H 1CLH None Clear half carry flag H = 0 H 1NOP None No operation None None 1SLEEP None Sleep See instruction manual None 1WDR None Watchdog Reset See instruction manual None 1