XMC4500

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Dieser Artikel nimmt am Artikelwettbewerb 2012/2013 teil.

Die Controller XMC4500 von Infeneon basieren auf einem ARM Cortex M4 Kern und verfügt über eine große Auswahl an On-Chip Perepherie. Die Controller laufen entweder auf einem internen Systemtakt oder auf einer von einer PLL generierten Frequenz, normalerweise 120MHz. In diesem Artikel soll dieser Controllertyp mit Hilfe des "XMC4500 Relaxed Kit/ Lite Kit", welches beide Developmentboards von Infineon sind, vorgestellt werden. Auch die von Infineon dazu angebotene Entwicklungsumgebung DAVE3 wird kurz vorgestellt.

Technische Daten im Überblick

"Relaxed Kit" (oben) und "Relaxed Lite Kit" (unten)

Ein kurzer Überblick über die On-Chip Pherepherie mit den wichtigsten Merkmalen

  • 3.3V Operating Voltage
  • 32-Bit Architektur ARM Cortex M4 CPU
  • FPU
  • 120MHz Systemtakt
  • 512kB-1024kB Flashmemory, je nach Typ
    • Auf den "XMC4500 Relaxed (Lite) Kits" ist die Variante mit 1MB Flash verbaut.
  • 128kB oder 160kB RAM
    • Auf den "XMC4500 Relaxed (Lite) Kits" ist die Variante mit 160KB RAM verbaut.
  • Maximal 1GB RAM über natives externes RAM-Interface adressierbar
  • Zwei Programmstacks
    • Verwendung umschaltbar, Verwendung eines OS einfacher.
  • JTAG
  • Interrupt-Level Controller mit 64 Leveln
  • Interne RTC
  • Ethernet MAC On-Chip
    • PHY nicht integriert, Anbindung über RMII-Interface
    • Der komplette Frame wird von der Hardware generiert
  • USB2.0, sowohl als Host, als auch als Slave
  • 5 USIC: Universeller Serieller Interface Kanal für SPI, I²C,UART, etc.
    • Einstellbare Framelänge von bis zu 64-Bit
    • Flexibles CRC-Modul, Prüfsummen können von der Hardware generiert werden
  • multiCAN On-Chip
    • 11-Bit oder 29-Bit Objekt Indentifier
    • maximal 64 Objekt Indentifier definierbar
    • 3 eigenständige CAN Module
  • SD/MMC-Card Interface mit internem 512Byte FIFO
    • 4-Bit Interface
  • Bis zu 12 DMA Kanäle
  • 4 12-Bit 8 Kanal ADCs
    • OVP durch Komperatoren an den Eingängen
    • Programmierbarer Gain
    • Verbindung mit dem DMA möglich
  • 12-Bit DAC mit FIFO
  • Delta-Sigma Demodulator
  • 2 Timer-Module mit jeweils 4 Modulen mit jeweils 4 Timern
    • Intsgesamt 32 Timer
    • Diverse verschiedene Modi, unter anderem Compare-und Capture Mode, kopplung an externe Signale möglich
    • Bis zu 64-Bit PWM (HRPWM)
    • Eigener Prescaller für jeden Kanal
    • Deadtime Modus für Brückensteuerungen
  • POSIF: Position Interface Unit für Drehencoder
    • Kopplung an Timer-Module möglich
  • GPIOs mit anpassbarem Schaltverhalten, bzw Flankencharakteristik
    • Push-Pull oder Open Collector
    • Pull Up oder Pull Down Widerstand zuschaltbar
    • Tri-State Modus

Dies sind die wesentlichen Merkmale des XMC4500 Controllertypes, weiter sollen diese hier nicht aufgelistet werden, da allein das für einen ausführlichen Artikel reicht. Das Datenblatt hat nicht ohne Grund über 2000 Seiten. Zudem gibt es eine zusätzliche Dokumentation über die allgemeinen Eigenschaften der XMC4500 Controllerserie und die unterschiedlichen Varianten.

Das XMC4500 Relaxed Kit/Relaxed Lite Kit

Allgemeines

Die wesentlichen Elemtente auf dem XMC4500 "Relaxed (Lite) Kit"

Beide Boards verfügen über zwei rote Low-Current LEDs, zwei Taster und einen RESET-Button. Zudem kann über Micro-USB eine Verbindung zum PC aufgebaut werden, die dafür notwendige Hardware ist auf beiden Boards vorhanden. Praktischerweise kann das jeweilige Board über den USB-Port mit Strom versorgt werden, dafür befindet sich auf dem Abschnitt des Programmers/Debuggers ein LDO, der die 3.3V für die Controller bereitstellt. Der sich auf der linken Seite befindliche Debugger/Programmer kann, wenn wenig Platz zur Verfügung steht, auch von der restlichen Platine getrennt werden, dafür ist eine Sollbruchstelle vorgesehen. Über einen 2*5 poligen Header kann die Verbindung zum Programmieren oder Debuggen wiederhergestellt werden.

Das Abtrennen empfiehlt sich jedoch nicht, da sonst auch der LDO mit abgetrennt wird und das Board dann extern mit 3.3V versorgt werden muss.

Alle GPIOs sind auf zwei zweireihige Stift-oder Buchsenleisten herrausgeführt, die jedoch selbst bestückt werden müssen. An diesen Headern sind auch die analogen Eingänge zu finden, genau so wie AREF für den DAC/ADC.

Bezugsquellen und Kosten

Die beiden Developmentboadrs sind leider schwer erhältlich, nur wenige der großen Distributoren haben welche auf Lager. Folgende Distributoren haben die Boads zu den normalen Preisen von etwa 10€+MwSt. für das "Relaxed Lite Kit" und etwa 30€+MwSt. für das "Relaxed Kit" bei diesen Distributoren:

Hat man die Möglichkeit, als Firma und/oder mit Gewerbeschein zu bestellen, so kann man bei dem von Infieon vorgeschlagenen Distributor hitex bestellen:

Aus urheberrechtlichen Gründen können die Schaltpläne und das Layout hier nur verlinkt werden:

Unterschiede zwischen dem "Relaxed Kit" und dem "Relaxed Lite Kit"

Die Unterschiede zwischen dem "Relaxed Kit" und dem "Relaxed Lite Kit" kurz zusammen gefasst:

Unterschiede zwischen dem "Relaxed Kit" und dem "Relaxed Lite Kit"
Hardware "Relaxed Kit" "Relaxed Lite Kit" Nachbestückbar?
Ethernet Ja Nein Schwer bis unmöglich, da der Ethernetcontroller im QFN24 Gehäuse verbaut ist.
Micro-SD Ja Nein Gut möglich, jedoch müssen Bauteile in Baugröße 0603 und 0402 verlötet werden.
RTC-Quarz Ja Nein Der Quarz ist leicht zu verlöten, es müssen jedoch zwei 0402 Kondensatoren verlötet werden.
32-Mbit SPI-Flash Ja Nein Der Flash selber ist bei Farnell erhältlich und ist leicht zu verlöten, da SOIC8 Gehäuse, jedoch sind auch 0402 und 0603 Bauteile zu verlöten.

Nachbestückung

Wenn man gerne das native SD-Card Interface oder die RTC nutzen will, aber für das Ethernet überhaupt keine Verwendung hat, so sind mehr als 30€ für ein vollbestücktes "Relaxed Kit" ziemlich viel, da die Bauteile für das was verwenden will nur etwa 5€ kosten. Selbiges gilt für den 32Mbit SPI-Flash. Mit etwas Lötgeschick ist es ohne weiteres möglich ein "Relaxed Lite Kit" aufzurüsten. Die dafür notwendigen Bauteile beschränken sich im wesentlichen auf Standartbauteile:

  • micro-SD Card:
    Der alternative SD-Card Halter und der SPI-Flash sind nachbestückt worden.
    • microSD Halter: Der originale Molex-Halter, welcher auf dem Board vorgesehen ist, ist entweder nicht erhältlich oder kostet 6€+MwSt. Ein anderer Halter von Digikey passt fast genau so gut und kostet weniger als die Hälfte: Alternativer Slot, siehe Bild.
    • Hühnerfutter: Des weiteren werden für die SD-Card noch 5 0402 10K Widerstände benötigt. Diese liegen alle sehr nah nebeneinander und sind deshalb etwas frickelig zu löten.
  • RTC-Quarz:
    • Der Quarz ist bei Digikey erhältlich, allerdings nicht immer auf Lager: Quarz
    • Die üblichen Anschwingkondensatoren sind auch hier vorhanden, zwei 0402 15pF Kondensatoren.
  • SPI-Flash:
    • Der Flash ist unter anderem bei Farnell erhältlich:SPI-Flash. Dabei handelt es sich um einen NOR-Flash von Spansion "S25FL032P0XMFI011". Datenblatt
    • Dazu kommt das übliche Hühnerfutter, in diesem Fall ein 0402 100nF Kondensator und 3 0402 10K Widerstände.

Diese drei Funktionsgruppen sind mit wenig Aufwand nachträglich bestückbar, was für die Ethernet-Baugruppe leider nicht gilt. Verfügt man über professionels Equiepment und lässt sich von Würth eine Ethernetbuchse schenken, so ist eine Nachbestückung möglich. Der Vollständigkeit halber wird diese Baugruppe trotzdem behandelt.

  • Bauteile:
    Gehäusevergleich ziwschen dem QFN24 Gehäuse des Ethernetkontrollers und einem normalen 0402 Gehäuse
    • Ethernetcontroller: KSZ8031RNL von Mircel, erhältlich bei allen großen Distributoren, aber sehr schwer zu verlöten, da 0.5mm Pin-Pitch (QFN24).
    • Ethernetbuchse: Würth 7499010211A, nicht käuflich oder nur sehr schwer erwerbbar. Jedoch scheint Würth auf Sampleanfragen sehr kullant zu sein, sofern man ehrlich schreibt, wofür man die Bauteile benötigt.
    • Quarz: 25MHz Quarz, es passt zum Beispiel der Quarz von Reichelt
    • Widerstände:
      • 2* 0603 120 Ohm (R201,R207)
      • 2* 0402 1K (R200, R203)
      • 1* 0603 6,49K (RBIAS=R204)
    • Kondensatoren:
      • 5 0402 100nF (C201,C203,C205,C208,C209)
      • 2 0402 22pF (C206,C207)
      • 3 0805 22µF/10V (C200,C202,C204)
      • 1 0805 10µF/10V (C210)
    • Sonstiges:
      • 2 BLM18PG600 (L200,L201)
      • 2 BAT54-02V (D200,D201)

An die Standartbauteile werden keine speziellen Anforderungen gestellt, lediglich R204 sollte eine möglichst kleine Toleranz haben (<=1%).

DAVE3

Allgemeines

DAVE3 ist die von Ifineon bereitgestellte IDE unter anderem für die XMC4500 Controller und basiert auf Eclipse. Neben den Standartfunktionen bietet DAVE3 auch die Verwendung von so genannten Apps an. Grob gesagt handelt sich dabei um visuell konfigurierbare Codegeneratoren mit denen schnell und effizient die Hardware des XMC4500 konfiguriert werden kann.
Die IDE kann auf der Seite von Infineon herruntergeladen werden, zudem gibt es ein Video von Ifineon über die Installation, die Erklärungen fallen jedoch recht dürftig aus. Die Größe des Installerpaktes beträgt in etwa 246MB. Im Großen und Ganzen macht DAVE3 einen recht aufgeräumten Eindruck, ist aber relativ recourcenaufwändig, da die IDE JAVA benutzt.

  • RAM-Auslastung: (Windows 7) 229MB.

Es handelt sich hierbei um ein komplettes Paket, es müssen für die Funktionalität der IDE keine Plugins mehr nachinstalliert werden.

Syntax Highlighting:
  • Das Syntax Highlighting in der DAVE 3 IDE ist eindeutig, jedoch nicht so aufdringlich wie im aktuellen AVR Studio (Version 6).
    • Die Farben sind standartmäßig nicht so grell eingestellt, wie im AVR Studio und sind dementsprechend besser lesbar.
    • Zueinander gehörige Klammern werden markiert
    • Schleifen und Abfragen werden hervorgehoben
    • Klammern werden automatisch bei diversen Strukturen eingefügt
    • Eine Autovervollständigung für Variablen und Konstanten gibt es nicht

Sehr praktisch die vollständige Liste aller Konstanten, Funktionen und globale Varibalen, die von DAVE 3 angezeigt wird. Aus der Liste können Schnellzugriffe auf alle aufgeführten Objekte ausgeführt werden, was besonders für größere Programme sehr praktisch ist. Lokale Varibalen werden nicht in der Liste angezeigt. Zudem verfügt die IDE über die Möglichkeit Updates automatisch zu laden und zu installieren. Dasselbe gilt für das Updaten von Include-Bibliothelen und Apps. Zu dieser Funktionalität kommt noch der interne Dateimanager hinzu, der eine gute Übersicht über alle verwendeten Datein bietet.
Etwas unschön fällt auf, das die IDE bei manchen Aufgaben, besonders beim Starten, sehr langsam ist.

DAVE Apps

Die UART02-App, alle Einstellungen können in diesem Fenster gemacht werden.

Die sogenannten Apps sind ein wesentliches Merkmal der DAVE 3 IDE. Die Apps ermöglchen es dem Bediener, Teile der Hardware oder komplette Funktionen graphisch und nach Parametern zu konfgurieren. Der dazu gehörige Code wird dann automatich generiert, zudem erfolgt eine Prüfung, ob mehr Hardwaremodule benansprucht werden, als wirklich vorhanden sind. Der wesentliche Vorteil dieser Programmierung ist, dass sie sehr schnell und effizient ist, da die Apps im wesentlichen gut dokumentiert und das Konfigurationsmenü übersichtlich und intuitiv ist.
Eigene Apps können anscheinend nicht erstellt werden. Dies ist aber auch nicht unbedingt notwendig, da das Angebot von Apps sowohl im Bereich der Hardwarekonfiguration, zum Beispiel für die GPIOs, als auch im Bereich von fertigen Softwarelösungen, zum Beispiel für einen Webserver oder einen BLDC-Motorcontroller, gut ausgebaut ist. Auf Beispiele wird in diesem Artikel verzichtet, da das Quickstart-Tutorial von Infineon bereits alle Fragen klärt und Ansätze bietet.
Ein Quick-Start-Tutorial für die Verwendung gibt es von Infineon hier.

Programmieren und Debuggen des "XMC4500 Relaxed (Lite) Kit"

Der On-Board Programmer und Debugger bietet für den Schnellstart und für die ersten Anwendungen alle notwendigen Funktionen, wie das Setzen von Breakpoints und das Beobachten der Variablen und Register während das Programm auf dem Controller ausgeführt wird. Auch biete der Debugger alle normalen JTAG-Funktionen, wie das zeilenweise Ausführen des Codes oder den Code bis zu einer bestimmten Stelle auszuführen und dann zu stoppen, etc..
Programmiert wird der Controller über JTAG.

Nachteile des On-Board Programmers und Debuggers

Die Abload-Rate zum Controller ist gering, was bei kleineren Programmen noch nicht so tragisch ist, aber bei größeren Quellcodes wird dies schon zu einer suboptimalen Situation. Hier empfiehlt sich dann der Kauf eines besseren JTAG-Programmers/Debuggers. Da die DAVE 3 IDE den J-Link Treiber für die Programmierung verwendet, sollte eine große Bandbreite an möglichen Geräten zur Verfügung stehen. Der Debugger muss dann nur im Konfigurationsmenü passend eingestellt werden.
Für den On-Board-Debugger wird das hier ab Minute 5.50 beschrieben. Ähnlich wird dies bei anderen Geräten ablaufen.

Vorwort zur On-Chip Perepherie

Die On-Chip Perepherie der XMC4500 Controllerserie ist sehr stark auf eine allgemeine Flexibilität getrimmt. So können die Ein- und Ausgänge der Hardwaremodule auf verschiedene Pins gemapped werden, was auch während der Laufzeit wieder geändert werden kann. Zudem ist es möglich, mehrere Module mit einem Pin zu verbinden. Eine komplette Liste mit allen Möglichkeitden der GPIOs ist im Datenblatt auf Seite 2585 zu finden. Neben den besonderen Merkmalen, wie den USIC-Module und den Timer-Modulen, speziell die High Resolution PWM und weitere (SD/MMC-Interface, etc), sind noch mehrere andere Perepherie-Einheiten vorhanden, wie USB, CAN, ADCs und den DAC. Diese werden in diesem Artikel bis auf den ADC nicht behandelt, da diese Module auch in vielen anderen ARM-basierten Controllern vorhanden sind. Im Abschnitt über die Perepherie werden also nur einige besondere Module behandelt, da dies den Rahmen dieses Artikel sprengen würde. Auch werden nicht alle Möglichkeiten der einzelnen Module erläutert, die wichtigen Informationen sollen aber nicht unterschlagen werden.

Die bereits angesprochene Möglichkeit die Eingangs- und Ausgangspins variabel zu wählen, ist im Prinzip bei allen Hardwaremodulen gleich. Die Prozedur wird aber in allen drei Kapiteln über die Hardwaremodule (USIC, ADC, Timer) angesprochen, da die Funktionsweise Unterschiede aufweist.

GPIOs

Allgemeines

Die GeneralPurposeInputs/Outputs der XMC4500 Controllerfamilie bieten diverse Möglichkeiten und Funktionen. So gibt es verschiede Ausgangstreiber mit unterschiedlichen Schaltcharacteristika, auf die auch besonderes Augenmerk gelegt werden soll. Man spricht in diesem Zusammenhang von unterschiedlichen PAD-Klassen. Die wesentlichen Merkmale im Überblick:

  • GPIOs mit anpassbarem Schaltverhalten, bzw Flankencharakteristik
    • Push-Pull oder Open Collector
    • Pull Up- oder Pull Down-Widerstand zuschaltbar
    • Tri-State Modus

Alle Konfigurationen, ob Eingang oder Ausgang und welche Zusatzfunktionen genutzt werden, werden über ein Bitfeld konfiguriert.
Zuerst aber die Registerübersicht:

Registerübersicht
Registername Aufbau Funktion
IOCR (0,4,8,12)
Input/Output Control Register
Es gibt vier dieser Register, wobei jeweils vier Pins pro Register konfiguriert werden können. Um dabei Rechenzeit zu spraren, befindet sich das Bitfeld für die Konfiguration in jeweils einem Byte.
Bit-Nummer 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Bitfeld Pin 15/11/7/3 DC Pin 14/10/6/2 DC
Bit-Nummer 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Bitfeld Pin 13/9/5/1 DC Pin 12/8/4/0 DC
DC: Don't care


Ein Port hat maximal 16 Pins, wobei diese nicht immer alle vorhanden sein müssen. Intsgesamt gibt es 7 normale Ports (Port0-6) und zwei analoge Ports, welche nur als digitale oder analoge Eingänge genutzt werden können. Je nach Gehäuse Variante sind die Ports mehr oder weniger vollständig. In der BGA und in der LQFP-Gehäuse Variante stehen die meisten PortPins zur Verfügung. Auf dem XMC4500 "Relaxed (Lite) Kit" ist die LQFP100-Gehäuse Variante verbaut, es sind also deutlich weniger IOs verfügbar. Eine Übersicht, wie viele IOs an welchem Port zur Verfügung stehen gibt es im Datenblatt auf Seite 2549.

In den jeweiligen Bitfeldern für die einzelnen Pins wird das Verhalten des GPIOs konfiguriert. Es stehen dabei mehrere Möglichkeiten zur Auswahl:
  • Direkter Input
    • Pull Up-und Pull Down Widerstand können dazu geschatet werden
  • Invertierter Input
    • Pull Up-und Pull Down Widerstand können dazu geschatet werden
  • Open Drain Ausgang
    • Je nach Pad-Klasse unterschiedliche Flanken und Treiber selektierbar
  • Push-Pull Ausgang
    • Je nach Pad-Klasse unterschiedliche Flanken und Treiber selektierbar

Die einzelnen Bitmuster sind im Datenblatt auf Seite 2565 und 2566 zu finden. Auf die Unterschiedlichen Pad-Klassen wird bei der Beschreibung des PD Registers eingegangen.

PDR (1,0)
Pad Driver Mode Register
Bit-Nummer 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Bitfeld NC Pin 15/7 NC Pin 14/6 NC Pin 13/6 NC Pin 12/5
Bit-Nummer 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Bitfeld NC Pin 11/4 NC Pin 10/3 NC Pin 9/2 NC Pin 8/0
DC: Don't care

Es gibt intsgesamt drei verschiedene Pad-Klassen: ( A1, A1+, A2), wobei die Klasse A2 die Beste ist. Zu den elektrischen Parametern gibt es von Infineon eine extra Dokumentation auf Seite 39-42.
Eine Übersicht, welcher Pin welcher Pad-Klasse zugeordnet ist, findet man im Datenblatt auf Seite 2579 bis 2581.

Die verschiedenen Pad-Klassen im Überblick:
  • A1:
    • Rise Time/ Fall Time:
      • Schwacher Treiber: 150ns
      • Mittlerer Treiber: 50ns
    • Ausgangskapazität max.: 10pF
  • A1+:
    • Rise Time/ Fall Time:
      • Schwacher Treiber: 150ns
      • Mittlerer Treiber: 50ns
      • Starker Treiber, langsame Flanke: 28ns
      • Starker Treiber, weiche Flanke: 16ns
    • Ausgangskapazität max.: 10pF
  • A2:
    • Rise Time /Fall Time:
      • Schwacher Treiber: 150ns
      • Mittlerer Treiber: 50ns
      • Starker Treiber, weiche Flanke: 16ns
      • Starker Treiber, mittlerere Flanke: 7ns
      • Starker Treiber, scharfe Flanke: 3.7ns
    • Ausgangskapazität max.: 10pF

Für alle Anstiegs- und Abfallzeiten gilt, dass es sich hierbei um Maximalwerte handelt.
Die Bitmuster für die jeweilige Kofiguration findet man im Datenblatt auf Seite 2567.

PDISC
Pin Function Decision Control Register
Dieses Register ist nur für die Input-Only Ports, Port14 und Port15 relevant.
Bit-Nummer 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Bitfeld NC
Bit-Nummer 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Bitfeld P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0
DC: Don't care

Datenblatt Seite 2570

Die jeweiligen Bits aktivieren (0) oder deaktivieren (1) den digitalen Eingangsteil der Pins. Ist der digitale Teil deaktiviert, so kann der Pin für den ADC genutzt werden.
OUT
Bit-Nummer 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Bitfeld NC
Bit-Nummer 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Bitfeld P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0
DC: Don't care

Datenblatt Seite 2572

In diesem Register werden die Ausgangpegel für die einzelnen Pins bestimmt. Durch das setzen des Bits das zu dem jeweiligen Pin gehört, wird dieser auf HIGH gesetzt. Das löschen dieses Bits setzt den Pin wieder auf LOW.

Eine deutlich elegantere Varinate ist es jedoch, das OMR zu nutzen.
Im Deep Sleep Mode bestimmt das OUT-Register welcher definierter Pegel von der Hardware bei der Abfrage eines Pins eingelesen wird. Dies soll den Controller vor falschen Signalen im Deep Sleep Mode schützen.

IN
Bit-Nummer 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Bitfeld NC
Bit-Nummer 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Bitfeld P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0
DC: Don't care

Datenblatt Seite 2574

Über dieses Register wird der aktuelle Pegel an dem jeweiligen Pin abgefragt. Diese Möglichkeit bleibt auch bestehen, wenn der Pin als Ausgang konfiguriert ist. So ist es möglich, über die Software nachzurpüfen ob der Pin den gewünschten Pegel auch angenommen hat.
OMR
Output ModificationRegister
Bit-Nummer 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Bitfeld P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0
Bit-Nummer 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Bitfeld P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0

Die oberen 16 Bits setzen den jeweiligen Pin auf HIGH, während die unteren 16 Bits den jeweiligen Pin auf LOW setzen.
Datenblatt Seite 2573.

Der Effekt dieses Register ist der selbe, wie wenn das OUT-Register verwendet wird, jedoch kann so ohne Ausmaskierung der anderen Bits ein Pin im Pegel geändert werden. Wird sowohl das Bit zum LOW setzen, als auch das Bit zum HIGH setzen gesetzt, so wird der Pin getoggelt. Sollen andere Pins nicht beeinflusst werden, wenn ein anderer Pin geändert wird, so ist der Zugriff über das OMR schneller als über das OUT-Register.
PPS
Pin Power Save Register
Bit-Nummer 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Bitfeld NC
Bit-Nummer 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Bitfeld P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0
DC: Don't care
Wenn sich der Controller im Deep Sleep Mode befindet und das zum jeweiligen Pin gehörende Bit gesetzt ist, so liegt der Pin auf dem Pegel welcher im OUT Register steht. Dies gilt ebenfalls für Eingänge.

ACHTUNG: Diese Regelung gilt nur, wenn keine Pull Up-oder Pull Down Widerstände am jeweiligen Pin aktiv sind. Im Deep Sleep Mode werden diese deaktiviert, für Pins mit aktiviertem Pull-Up wird dann immer 1 aus dem IN Register gelesen. Für Pins mit aktiviertem Pull-Down wird immer 0 ausgelsesen.
Die genaue Beschreibung ist im Datenblatt auf Seite 2575 zu finden.

HWSEL
Hardware Select Register
Bit-Nummer 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Bitfeld P15 P14 P13 P12 P11 P10 P9 P8
Bit-Nummer 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Bitfeld P7 P6 P5 P4 P3 P2 P1 P0
Für jeden einzelen Pin kann bestimmt werden, ob On-Chip Perepherie die Eigentschaften des Pins verändern kann. Die Werte für das entsprechende Bitfeld:
  • 0b00: Software access only
  • 0b01: HW0 kann den Pin überschreiben
  • 0b01: HW1 kann den Pin überschreiben

Dieses Register wird erst dann relevant, wenn eine On-Chip Perepherie auf an einen bestimmten Pin gemappt werden soll. Hierrauf wird im weiteren Verlauf des Artikels noch Bezug genommen.
Datenblatt Seite 2576.

Verknüpfung mit anderer Hardware

Diverse GPIOs haben alternative Funktionen, wobei die jeweiligen Pins dann mit der On-Chip Perepherie verbunden werden. Die Verknüpfung findet aber bei der Konfiguration der On-Chip Perepherie und nur zum Teil bei der Konfiguration der GPIOs statt. Jedoch hat der gewählte Ausgang oder Eingang dann die Eigenschaften, die im PD-Register eingestellt wurden. Dies kann umgangen werden, wenn die Kontrolle über den jeweiligen GPIO auch an die Hardware weiter gegeben wird. Dies wird über die Konfiguration im HWSEL eingestellt. Ist dies für die jeweilige On-Chip Perepherie notwendig, so kann diese kann die Eigenschaften des jeweiligen Pins verändern.

Verschiedene Schaltverhalten

In diesem Abschnitt sollen die verschiedene Flanken und Treiber noch einmal thematisiert werden. Dafür wurden die jeweiligen Flanken mittels eines Oszilloskpes vermessen. Es wurde eine Single-Shot Messung durchgeführt.

Messaufbau
  • PORT1.3 direkt ans Oszilloskop angeschlossen
    • Pad Klasse A2
  • Single Shot

Die Ergebnisse:

Da die Bilder nicht optimal sind, habe ich die dazu gehörigen .WFM-Datein mit hochgeladen: Datei:Schaltverhalten Messungen.zip

Erstellt wurden die Bilder mit WFM Viewer

Input-Only GPIs

Die Ports 14 und 15 sind speziell auf die Bedürfnisse von analogen Signalen angepasst. Aus diesem Grund verfügen sie über keine Ausgangstreiber. Sie können also nur als Eingang für digitale Signale oder für ADC-Kanäle genutzt werden. Das Register OUT ist an diesen Ports nur für den Deep Sleep Mode vorhanden. Auf die besondere Funktion des PDISC ist bereits in der Registerzusammenfassung eingegangen worden.

USIC

Überblick über den Aufbau

Jeder Controller der XMC4500 Controllerfamilie verfügt über vier USIC (Universal Serial Interface Channel) Module, die jeweils aus zwei unabhängigen Kanälen bestehen, die jeweils in verschiedenen Modi arbeiten können. Intsgesamt sind fünf verschiedene Modi möglich:

  • ASC (asynchronous serial channel) besser bekannt als UART
  • LIN-Bus
  • SSC/SPI
    • bis zu 4 parallele Datenleitungen möglich
  • IIC oder auch I²C
  • IIS-Bus

Innerhalb eines Modules können die verschiedenen Modi beliebig kombiniert werden, da jeder Kanal seine eigene Clock-Generation und Controll-Logik hat. Wird der Baudratengenerator nicht für das gewählte Protokoll gebraucht, so kann das Ausgangssignal als ein weiterer Timer genutzt werden, und/oder auf einen Ausgang gemappt werden um damit eine Taktquelle bereit zu stellen.

Neben diesen Funktionen bietet jeder Kanal noch weitere Funktionen, die eine hohe Datenrate ermöglichen:

  • 64 Byte FIFO, jedoch nur für das komplette Modul
  • Maximal sechs Interruptsignale, die je nach Anforderung gewählt werden können
  • Variable Framelänge, maximal jedoch 63 Datenbits
  • Eine Datenübertragung kann durch ein externes Event getriggert werden
  • Loop Back-Modus zum simulieren einer Datenübertragung innherhalb des Chips

Die USIC Module vereinigen schnelle Datenübertragung mit einer sehr großen Flexibilität, weshalb auch die Dukomentation umfangreich ausfällt. Aus diesem Grund werden in diesem Artikel nur zwei Beispiele gegeben, wie USIC-Module verwendet werden können. Auch wird auf eine Registerbeschreibung verzichtet, da diese schlicht zu umfassend sein würde und eine Kürzung ohne den Verlust von Informationen nur schwer möglich ist. Die komplette Dukomentation zu den USIC-Modulen findet man im Datenblatt auf den Seiten 1563-1808. Nur zum Vergleich, im Datenblatt des ATMega32 nimmt die Beschreibung aller Schnittstellen nur 66 Seiten in Anspruch.

Besondere Funktionen

Neben den allgemeinen Möglichkeiten, wie die Auswahl verschiedener Protokolle und die vielen möglichen Pins gibt es noch einige Sonderfunktionen.
In diesem Abschnitt werden diese Funktionen genauer beschrieben:

  • FIFO
  • Clock-Generierung für externe Hardware
  • Besonderes Debugging Verhalten

FIFO

First In First Out Buffer
Jedes USIC-Modul verfügt, wie schon beschrieben, über 64 Speicherstellen, die jeweils 32 Bit breit sind. Eine weitere Teilung der Speicherstellen ist nicht möglich, jedoch kann der komplette FIFO variabel partioniert werden. Eine Abbildung und eine Beschreibung der kompletten Details des FIFOs findet man im Datenblatt auf Seite 1602.
Der FIFO kann unabhängig von einer möglichen Verbindung mit einem DMA betrieben werden. Jedoch kann der DMA über einen vom FIFO aufgerufenen Interrupt getriggert werden. Dabei sind mehere Quellen möglich. Dazu gehören:

  • FIFO leer
  • FIFO voll
  • FIFO Füllstand unter einem bestimmten Level
  • FIFO Füllstand über einem bestimmen Level

Die Schaltschwellen für die Triggerung können für jeden Kanal und für Senden und Empfangen einzeln konfiguriert werden.
Ist es notwendig eine Datenübertragung aus dem FIFO für eine wichtigeres Pakekt zu unterbrechen, so kann ein Bypass aktiviert werden. Dabei bleiben die Daten im FIFO gültig. Ist das Paket fertig gesendet, so kann der FIFO wieder hinzugeschaltet werden, ohne das Daten verloren gehen.

Clock-Generation für externe Hardware

Sowohl die Masterclock des jeweiligen Kanals, als auch die Clock die als Taktquelle für das Shift-Register kann auf einen Pin gemappt werden. In Protokollen, wo die Shift-Clock benötigt wird, zum Beispiel SPI(->SCK) oder I²C (->SCL), kann die Shift-Clock nicht extern genutzt werden. Die Master-Clock kann nach wie vor zur Taktung von externer Hardware genutzt werden.
Benötigt das gewählte Übertragungsprotokoll keine eigene Clock, wie SPI als Slave oder I²C als Slave, so können die beiden Clock-Signale für beliebige Anwendungen genutzt werden. Dabei kann auch die Frequenz von beiden Clocks frei gewählt werden.
Die Taktquelle für den Baudratengenator selber kann ebenfalls variabel gewählt werden. Es sind zwei Optionen möglich:

  • Interne Clock
  • Takt, der an einem PortPin anliegt. Dieser darf aber maximal 60MHz betragen (F_CPU/2)


Der Baudratengenerator verfügt über zwei Prescaller-Modi für die Shift-Clock. Bei dem einen handelt es sich um einen ganzzahligen Teiler, welcher die Eingangsfrequenz durch einen ganzzahligen Faktor. Im zweiten Modus wird ein fraktioneller Teiler verwendet. So können auch Kommazahlen als Teiler angegeben werden. Dieser Modus wird verwendet, wenn eine Frequenz sehr genau im Vergleich zu einem berechneten Wert erreicht werden muss. Die genaue Beschreibung ist im Datenblatt auf Seite 1587 zu finden.

Besonderes Debugging Verhalten

Um beim In-Circut-Debugging die Funktion der USIC-Module nicht zu beeinträchtigen, wird der Inhalt des FIFO-Buffers in einen extra Buffer gespiegelt, welcher nur für das Debugging verwendet wird. Dadurch können die Daten im FIFO gelesen werden, ohne die Funktion zu beeinträchtigen.
Dies ist besonders dann sehr hilfreich, wenn ein Loop-Back Test innerhalb des Chips durchgeführt wird. Mit Hilfe des extra Buffers können die empfangenen Daten besser analysiert und Fehler leichter identifiziert werden.
Das komplette Verhalten im Debug-Modus ist im Datenblatt auf Seite 1714 beschrieben.

Timer-Module

Die XMC4500 Controller Familie verfügt über jeweils vier Timer-Module vom Typ CCU4 und CCU8. Jedes dieser Module besteht aus 4 sogenannten Timer-Slices, wobei diese wieder jeweils 4 eigenständige Kanäle besitzen. Jeder Kanal besteht aus einem 16-Bit Timer mit der dazugehörigen Logik. Jeder Kanal hat seine eigenen Interrupts und mögliche Port Pins, auf die die Ausgänge gemappt werden können. Die einzelnen Kanäle innerhalb eines Timer-Slices können verbunden werden, um eine höhere Auflösung zu erreichen. Werden alle vier Kanäle verbunden, so sind 64-Bit Auflösung möglich, die auch für die PWM genutzt werden können.
Als Taktquellen können verwendet werden:

  • Interner Takt, jedes Timer-Slice hat seinen eigenen Prescaller
  • Externer Takt, für jeden Kanal einzeln wählbar

Die jeweiligen Kanäle können in verschiedenen Modi arbeiten:

  • Capture Modus
    • Es stehen bis zu vier Capture-Register zum Zeitmessen zur Verfügung
  • Compare Modus
    • Jeweils zwei Compare-Register pro Kanal (Periodendauer und Tastverhätnis)

Es stehen auch bei den Timer-Modulen für jedes Slice zwei Prescaller-Modi zur Verfügung. Neben einem ganzzahligen Teiler gibt es alternativ auch einen fraktionellen Teiler.
Interrupts können auf dieverse Events getriggert werden, unter anderem auf den Compare-Match und auf verschiedene Events im Capture-Modus.
Eine PWM kann nur im Compare-Mode generiert werden. Die diversen Möglichkeiten der verschiedenen Modi werden in diesem Artikel nicht näher erläutert, jedoch wird auf die PWM genauer eingegangen. Die Beschreibung der Timer-Module startet im Datenblatt auf Seite 2143.
Neben den bereits angesprochenen Funktionen können die Timer-Kanäle noch weitere Aufgaben übernehmen:

  • Modus für H-Brücken-Ansteuerung
  • Totzeitüberwachung zum Beispiel für IGBTs
  • Kopplung mit dem POSIF-Interface möglich
    • Das POSIF Interface dekodiert die Signale von externen Drehgebern. Eine Kopplung macht dementsprechend eine verbesserte Motoransteuerung möglich.

PWM

Die XMC4500 Controller-Familie bietet eine sehr breite Pallette an PWM-Modi und eine maximale Auflösung von 64-Bit(High Resolution PWM). Dafür wird dann jedoch ein komplettes Timer-Slice benötigt. Es sind jedoch auch die Auflösungen von 16-,32- und 48-Bit möglich. Diese benötigen dann einen, zwei oder drei Timerkanäle. Der so erstellte Timer kann in verschiedenen Modi arbeiten.

  • Edge Aligend
    • In diesem Modus zählt der Timer bis zum eingestellten Compare-Wert und wird dann resetet. Über dieses Parameter wird die Periodendauer eingestellt. Über ein weiteres Register wird der Compare-Wert eingestellt, an dem der jeweilige PortPin geändert wird.
      Datenblatt Seite 2161.
  • Center Aligned Mode
    • In diesem Modus zählt der Timer erst bis zum Compare-Wert für die Periodendauer, wird danach aber nicht wieder resettet, sondern zählt nun abwärts. Der jeweilige PortPin wird in aufsteigende Zählrichtung bei dem Compare-Wert für das Tastverhältnis gesetzt und beim selben Wert bei absteigender Zählrichtung wieder gelöscht.
      Datenblatt Seite 2162.

Beide Modi können entweder in Dauerschleife laufen und so ein dauerhaftes PWM-Signal generieren oder im Single-Shot Modus laufen. Im Single-Shot Modus wird nur ein Puls generiert, danach stoppt der Timer von selbst.

ADC

Die XMC4500 Controllerfamilie hat nicht wie bei anderen Controllertypen, nur einen ADC der dann auf mehrere Eingänge gemultiplexed werden, sondern vier ADCs, die jeweils auf maximal acht Kanäle gemappt werden. Jedoch hängt die maximale Anzahl der möglichen Kanäle wieder von der Gehäusevariante ab. Die maximale Anzahl an Kanälen hängt von der Verfügbarkeit von PortPins an den Ports 14 und 15 ab. Die genauen Verfügbarkeiten stehen im Datenblatt auf Seite 2579 bis 2581.

Features des ADCs

  • Pro ADC sind jeweils zwei Referenzen möglich
    • AREF oder Channel0
  • Varibale Auflösung
    • 8-,10- oder 12-Bit
  • Verbindung an einen DMA-Kanal möglich
  • Wandlungen können durch Software und/oder durch Hardwareevents getriggert werden.
  • Kleiner FIFO für Wandlungsergebnisse
  • Mehrere Wandlungsmodi:
    • Ein Kanal wird immer wieder gemmessen
    • Abfolge von Kanälen die gemessen werden
    • Parallele Messungen von allen vier ADCs
    • Wandlungszeiten <1µs möglich
  • Broken Wire Detection
  • Selbst-Kallibrierung
  • Modus, ob Quelle noch am Pin angeschlossen ist

Datenblatt Seite 1934.

Interrupts durch den ADC

Die einzelnen ADC-Module können jeweils mehrere Interrupts generieren. Dabei sind unter anderem diese Events möglich:

  • Wandlung gestartet
  • Wandlung beendet
  • Wandlung beendet und Wert über/unter einem bestimmten Wert

Datenblatt Seite 1937

Weblinks und Quellenverzeichnis

Es gibt ein Forum von Infineon, wo sowohl die IDEs von Infineon diskutiert werden, als auch die Controller:

Alle Bilder in diese, Artikel sind selbst gemacht und können beliebig für andere Dukomentationen oder Projektbeschreibungen genutzt werden.

Zugehörige Artikel oder Treads