Mikrocomputertechnik Thema: CPU Timing XC888 und Interrupt System des XC888 und Timer/Counter 0 und 1 -Im InterruptBetrieb -
CPU Timing XC888
CPU Timing XC888 Befehl Befehl Befehl Befehlszyklus Befehlszyklus Befehlszyklus Maschinenzyklus Maschinenzyklus Maschinenzyklus Taktzyklus Taktzyklus Folie 3
CPU Timing XC888 Befehlszyklus Beschreibt den Ablauf eines Maschinenbefehls. Maschinenzyklus Beschreibt die Gesamtanzahl der Taktzyklen, die notwendig sind, um bestimmte Grundfunktionen (eines Befehls) auf einem Prozessor auszuführen. Taktzyklus Um bei einem Prozessor synchrone Verarbeitungen gewährleisten zu können, benötigt dieser ein Taktsignal (engl. clock signal). Das Taktsignal wird über die sogenannte Taktfrequenz beschrieben. Taktfrequenz = 1 / Periodendauer Folie 4
Folie 5
Interrupt System XC888
Grundlagen Interrupts Auf bestimmte Ereignisse soll sofort reagiert werden können Ereignis z.b. Ablauf Wartezeit, Pegelwechsel an Portpin, Ende AD-Wandlung, etc. Bei allen µc heißt hier die Lösung Interrupts Rechner überwacht mögliche Interrupt-Ereignisse ohne das CPU hierfür Befehle ausführen muss Dem Rechner wird Eintreffen des Ereignis über Setzen von Flags signalisiert Interrupt Flags Aktueller Befehl wird vollends abgearbeitet, danach folgt Sprung zu Interrupt-Vektor/Interrupt-Adresse Verschiedene Ereignisse besitzen (teils) unterschiedliche Sprungadressen Folie 7
Interrupt Vektor Tabelle XC888 Folie 8
Interrupt Steuerung XC888 Die vorhandenen Interrupt Register werden verwendet für: Enable / Disable Interrupt Node Steuerung von externen Interrupts Sie beinhalten die Interrupt (Request) Flags Mit ihnen lassen sich die Interrupts priorisieren (nicht Teil der Vorlesung) Für uns wichtig sind folgende Interrupt Register: Interrupt Enable Register External Interrupt Control Register Interrupt Flag Register Folie 9
Verarbeitung von Interrupts XC888 In Phase 2 jedes Maschinenzyklus werden die Interrupt Flags abgefragt Ist ein Interrupt Flag gesetzt, erzeugt das Interruptsystem einen LCALL zur entsprechenden Interrupt-Vektor-Adresse Der Interrupt-Einsprung kann durch folgende Bedingungen verzögert werden: Ein Interrupt gleicher oder höherer Priorität wird gerade bearbeitet Ein (Maschinen-)Befehl wird noch ausgeführt Es wird gerade der RETI Befehl ausgeführt oder es wird schreibend auf die Register IEN0, IEN1, IEN2 oder IP0/IP1 zugegriffen Folie 10
Interrupt Response Time XC888 Die Zeit zwischen Erkennen des Interrupts und Ausführen der Interrupt-Subroutine wird als Interrupt Response Time bezeichnet Folgende Grafik zeigt die Minimum Interrupt Response Time Folie 11
Interrupt Response Time XC888 Nachfolgende Grafik zeigt ein Beispiel für eine Verzögerung der Interrupt Reponse Time Folie 12
Interrupt-Programmierung in C Anweisungen eines Interrupts werden in spezielle Funktionen ausgelagert Interrupt Service Routine (ISR) Unterscheidung zu gewöhnlichen Funktionen über Schlüsselwort interrupt sowie der (Knoten-)Nummer des Interrupts Beispiel Timer 0 ISR: void ISR_T0(void) interrupt 1 { //... } Folie 13
Interrupt-Struktur XC888 XC888 besitzt 15 Interrupt-Adressen Anzahl Interrupt-Ereignisse ist jedoch höher Daher ist Interrupt System in Knoten organisiert Einem Knoten können ein oder mehrere Ereignisse zugeordnet sein Folie 14
Interrupt-Struktur XC888 Folie 15
Interrupt-Struktur XC888 Folie 16
Interrupt-Struktur 1 XC888 Ist globales Enable-Bit EA und knotenspezifisches Enable-Bit gesetzt, so sorgt Interrupt-Status-Flag dafür, dass in ISR verzweigt wird Da es nur ein Interrupt-Flag pro Knoten gibt, kann das Bit hardwareseitig zurückgesetzt werden (ohne weiteres Eingreifen des Entwicklers) Beim Verzweigen in die ISR wird Interrupt-Flag gelöscht Folie 17
Interrupt-Struktur 2 XC888 Bei Struktur 2 liegen mehrere Ereignisse auf der selben Interrupt-Adresse Bedingungen für Interrupt sind jetzt Das global Enable-Bit EA muss gesetzt sein Enable-Bit für Interrupt-Knoten muss gesetzt sein Mindestens ein Status-Flag des Knotens muss gesetzt sein Der Sprung zur ISR löscht hier nicht ein bzw. mehrere Interrupt- Flags Manuelles Löschen innerhalb der ISR notwendig Hintergrund: Bei Sprung in die ISR ist nicht per se klar, welches Ereignis Interrupt ausgelöst hat Entwickler muss in ISR Interrupt-Flags abfragen Folie 18
Interrupt-Struktur 2 XC888 Beispiel Knoten ADC und Multi-CAN Folie 19