Interrupts beim 80515 / 80535

 

 

 

 

 

Was ist ein Interrupt

 

 

Software - die Interrupt-Sprungtabelle

 

 

Hardware - die Interrupt-Quellen

 

 

Hardware - die Steuerung der Interrupt-Quellen

 

 

Hardware - die Interrupt Steuerregister des SFR

 

 

Hardware - der Watchdog-Timer

 

 

 

 

 7.1 Was ist ein Interrupt

Interrupts sind durch Hardwaresignale gesteuerte Unterprogrammsprünge. Man unterscheidet den


    IRQ - Interrupt with Request, den der Programmierer über Flaggen steuern kann und den

    NMI - Not maskable Interrupt, der ohne Eingriffsmöglichkeit des Programmierers nach seiner Einleitung durchgeführt wird.


Der 80515 besitzt 12 IRQ-Signale, die durch externe Pin-Signale oder interne Geräte wie den Timern aktiviert werden können. Insgesamt sind 20 Quellen möglich. Der RESET ist ein NMI und wird durch den Wechsel von einem Low- zu einem High-Signal an PIN 10 eingeleitet. (siehe: Pinout des 80515). In diesem Fall startet der MC80515 mit dem Programm, das auf Adresse 0000h im CODE-Speicher beginnt. Der Reset setzt alle SFR-Register zurück.

Wird ein Interrupt ausgelöst, findet der Prozessor das zugeordnete Unterprogramm durch feste, vom Hersteller vorgegebene Einsprungadressen. Diese sind in der rechten Grafik aufgeführt. Tritt beispielsweise an Pin 23 ein Low-Signal auf und wurde der INT0 (IRQ0) freigegeben, dann wird der MC80515 die Adresse 0003h des Programmspeichers ausgeben und dort den Einstiegspunkt für das behandelnde Unterprogramm erwarten. Will ein Anwender des diesen IRQ nutzen, so muss er an dieser Adresse sein IRQ-Treiberprogramm beginnen lassen.

 7.2 Die Interrupt-Sprungtabelle:
Wer die Abfolge der Einsprungadressen betrachtet, stellt fest, dass diese nur wenige Speicherzellen voneinander entfernt sind. Zwischen zwei Einsprungstellen lassen sich keine langen Programme unterbringen. Um dennoch längere Programme für einen IRQ schreiben zu können, platziert man auf der Einsprungadresse einen ljmp-Befehl. Dieser umfasst nur 3 Bytes und führt zu der eigentlichen IRQ-Behandlungsroutine.

Der Beginn einer programmierten IRQ Sprungtabelle könnte dann wie folgt aussehen.

 

 

          ljmp reset     ; beginnt auf 00, belegt 00,01,02
          ljmp irq0      ; beginnt auf 03, belegt 03,04,05
          nop            ; liegt auf 06
          nop            ; liegt auf 07
          nop            ; liegt auf 08
          nop            ; liegt auf 09
          nop            ; liegt auf 0A
          ljmp timer0    ; beginnt auf 0B, belegt 0B,0C,0D
          nop            ; liegt auf 0E
          nop            ; liegt auf 0F
          nop            ; liegt auf 10h ... usw. ... 

 

 

In dieser Tabelle bezeichnen reset, irq0 und timer0 Programmlabel, bei denen das eigentliche IRQ-Unterprogramm beginnt. Da es nun irgendwo im Programmspeicher liegen kann sind alle Begrenzungen seiner Länge aufgeboben.

Nicht benutzte Interrupts sollten in einem gemeinsamen Unterprogramm zusammengefasst werden. Dieses braucht nur aus dem Rücksprungbefehl reti - Return from Interrupt zu bestehen. Durch diesen Befehl werden IRQ-Unterprogramme beendet und die Programmausführung kehrt zum Hauptprogramm zurück.

Beispiel:

 

 

irq0:  
timer0:
         reti           ; die beiden IRQ's irq0 und timer0
                        ; werden hier beendet

 

 

 

 

 

 7.3 Die Interruptquellen:
Als Auslöser für IRQ-Hardwaresignale kommen beim MC80515 insgesamt 20 Quellen wie Zähler, A/D-Wandler, Signaleingänge ... in Frage. Diese belegen teilweise den gleichen IRQ, was bei insgesamt 12 IRQ-Eingängen nicht anders möglich ist. Die IRQ's 3,4,5,6 sind je dreimal belegt. Wurde bei ihnen eine Quelle gewählt, sind die zwei anderen nicht mehr möglich.

Zudem kann bei einigen IRQ's gewählt werden welche Signaleigenschaft der Quelle, den Interrupt auslöst. Denkbare Möglichkeiten sind starre Signalpegel wie 0V oder 5V, oder dynamische Signalflanken, also Übergänge von einem Signalpegel zum Anderen.
Die Auswahl der Signaleigenschaften geschieht über Steuerregister der entsprechenden Interrupt-Quelle im SFR-Registerbereich und wird bei der Darstellung der Quelle beschrieben. (siehe Timer0, Timer1, serielle Schnittstelle, usw. ... =>)

Die Auswahl welche Quelle einen Interrupt auslösen darf, geschieht dagegen in den Interrupt-Steuerregistern, die weiter unten beschrieben werden. =>

Die folgende Tabelle zählt alle Interruptquellen auf.

 

Quelle

Auslöser

IRQ wurde ausgelöst-durch Flagge
rücksetzen
durch

Einsprung- adresse

Signal an INT0

neg.Flanke/Pegel

IE0

hardware

0003h

Timer 0

Überlauf des Zählers

TF0

hardware

000Bh

Signal an INT1

neg.Flanke/Pegel

IE1

hardware

0013h

Timer 1

Überlauf des Zählers

TF1

hardware

001Bh

Ser.Schnittst.

Ende von Empfang od. Senden

RI / TI

software

0023h

Timer 2

Überlauf / externes Nachladen

TF2 / EXF2

software

002Bh

A/D-Wandler

Ende der Wandlung

IADC

software

0043h

Signal an INT2

neg.Flanke

IEX2

hardware

004Bh

Signal an INT3
Capture0   Eing.
Compare0 Ausg.
neg./pos.Flanke
neg./pos.Flanke
neg./pos.Flanke

IEX3

hardware

0053h

Signal an INT4
Capture1   Eing.
Compare1 Ausg.
pos.Flanke
pos.Flanke
neg./pos.Flanke

IEX4

hardware

005Bh

Signal an INT5
Capture2   Eing.
Compare2 Ausg.
pos.Flanke
pos.Flanke
neg./pos.Flanke

IEX5

hardware

0063h

Signal an INT6
Capture3   Eing.
Compare3 Ausg.
pos.Flanke
pos.Flanke
neg./pos.Flanke

IEX6

hardware

006Bh

 

NMI

 

 

 

Watchdog-timer
RESET bei Überlauf

SWDT/WDT

software

keine

 

 

 

 

 7.4 Die Steuerung der Interruptquellen:
Für die Steuerung von Interruptquellen und deren Interrupts sind eine ganze Reihe von SFR-Registern zuständig. Es sind folgende Schritte zu unterscheiden.

Vorbereitung eines IRQ

    IRQ-Quelle aussuchen und ihre Arbeitsweise in SFR-Registern bestimmen. Die Beschreibung hierzu befindet sich bei den Quellen.

    Für das IRQ Signal die Prioritätsebene festlegen, und die Freigabe aktivieren. Dann alle IRQ's die eingeschaltet sind zur Arbeit freigeben.

    Die Prioritätsebene regelt dabei, welcher von zwei gleichzeitig auftretenden IRQ's als erster behandelt werden soll und welcher IRQ einen anderen unterbrechen kann. Die Freigabe regelt, dass ein IRQ grundsätzlich auftreten darf. Der Start aller aktivierten IRQ's im Register IEN0, Bit 7 bewirkt, dass die IRQ's von nun ab auftreten werden.


Ablaufsteuerung eines IRQ:

    Beim Auftreten des IRQ gegebenenfalls seine Request-Flagge zurücksetzen.

    Die IRQ-Request-Flagge (IRQ wurde ausgelöst-Flagge) signalisiert, dass das Signal, das zur Auslösung eines IRQ's führt, aufgetreten ist. Sobald vorrangige Interrupts bearbeitet wurden, kommt dieser automatisch dran. Programmierer können diese Flaggen zu ihrer Information lesen. Einige dieser Flaggen werden automatisch durch die Hardware zurückgesetzt, bei anderen muss dies der Programmierer durch sein Programm (die Software) tun. Die Request-Flaggen befinden sich in unterschiedlichen SFR-Register. Teilweise sind sie der Quelle zugeordnet, teilweise der IRQ-Ablaufsteuerung und dort im Register IRCON.

 

 

 

 

 

 7.5 Die Interrupt-Steuerregister im SFR:
Für die Steuerung der IRQ-Interruptsignale unter Programmkontrolle gibt es 5 Schaltspeicher im SFR-Bereich des Mikrocontrollers. Es sind dies die Register..

 

 

 

 

Freigabe:

 

 

A8
IEN0
Interrupt-ENable-Register 0 und 1, bitadressierbar
Mit den 16 Bits dieser zwei Register, können die möglichen Interruptquellen freigegeben oder gesperrt werden. Jedes Bit steht dabei für eine Interruptquelle. Ist ein Bit 0, ist der zugeordnete Interrupt gesperrt, ist es 1 wird der Interrupt harwaremässig zugelassen. Das Bit 7 des IEN0 ist eine Art Hauptschalter. Es kann alle Interrupts sperren bzw. alle freigegeben Interrupts starten.

 

 

B8
IEN1

 

 

 
 
Prioritätsebene:

 

 

A9
IP0
Interrupt-Priority-Register 0 und 1
Der MC80515 besitzt bereits eine vorgegebene Interrupt-Vorrangbehandlung. Soll diese verändert werden, so können mit diesen 16 Bits für 6 Interruptpaare bis zu 4 Interrupt-Vorrangebenen eingestellt werden.

 

 

B9
IP1

 

 
 
Ablauf:

 

 

C0
IRCON
Interrupt-Request-Control-Register, bitadressierbar
In diesem Register befinden sich 8 Request- oder 'IRQ wurde ausgelöst Flaggen'. Weitere Flaggen dieser Art sind über die SFR-Speicher der IRQ-Quellen verstreut.

 

 

 

 

 

Sonderfall der IRQ-Behandlung

 

 


 7.6 Der Watchdog-Timer:
Dieser Zähler erhöht die Systemsicherheit. Wurde er einmal gestartet, kann er nicht mehr angehalten werden. Nun muss er vom laufenden Programm, von Zeit zu Zeit und bevor er abläuft, auf 0 zurückgesetzt werden. Sollte er dennoch ablaufen, so bewirkt er einen System-RESET. Der Mikrocontroller startet neu über die RESET-Einsprungadresse 0000h.

Freigegeben wird der Watchdog-Timer über das Bit (SWDT), das ist Bit 6 im Register IEN1. Gestartet wird er, im Moment die Freigabe aller Interrupts über Bit 7 des Registers IEN0 (EAL).
Von nun an hört er nicht mehr auf zu laufen und kann nur noch über die Bits (WDT) oder (SWDT) = 0 zurückgesetzt werden. Der Maschinenbefehl hierzu könnte lauten clr WDT

(SWDT) - ist Bit 6 im Register IEN1
(WDT)   - ist Bit 6 im Register IEN0
In Bezug auf seinen Vorrang gegenüber anderen Interrupts besitzt der Watchdog-Timer immer die höchste Priorität. Er verliert seine Wirkung nur, wenn im CMOS Mikrocontoller MC80C515 einer der Stromsparzustände Idle oder PowerDown eingeschaltet wurden.

 

www.GoBlack.de