A. Interrupt-Technik
Für den Mikrocontroller existieren die zwei Betriebszustände RUN oder STOP.
Im RUN befindet sich die CPU fortwährend in einer Programmschlaufe, um den gegebenen Befehlscode auszuführen.
Diese Schlaufe beinhaltet neben dem eigentlichen Hauptprogramm (Main) auch allfällige Unterprogramme (Subroutine).Veränderungen an I/O-Ports werden durch sog. Polling erfasst, worunter eine permanent-zyklische Statusabfrage der Register durch die CPU zu verstehen ist.
Um den Controller von dieser an sich monotonen und zeitraubenden Tätigkeit zu entlasten, bedient man sich der Interrupt-Request-Methode. Darunter wird die prozessgesteuerte Programmbearbeitung verstanden, welche hardwareseitig durch ein Ereignis (Signalwechsel) oder ein Zeitintervall (Timerüberlauf) ausgelöst wird.
Die controllerspezifisch vorhandenen Interrupt-Quellen können dabei sowohl interner als auch externer Natur sein.
Damit die CPU beim Auftreten einer Unterbrechungs-Anforderung (Interrupt-Request) die betreffende Interrupt-Routine handeln kann, muss in einer Tabelle ein Verweis (Vector) auf die durchzuführende Prozedur vorliegen.
Diese Interrupt-Vektoren werden im Flash-Memory (Programm- Speicher) durch Adressierung eindeutig zugeordnet. Wird keine derartige Tabelle installiert, kann an den Anfangsadressen im Flash auch normaler Programmcode stehen.
Beim AT90S1200 befinden sich die Interrupt-Vektoren in den untersten Speicherzellen mit den Adressen $000 bis $003.
Vector
Adresse
Source
Definition
1
$000
RESET Hardware- oder Watchdog- Reset (Pin1) 2
$001
INT0 Externe Interrupt-Anforderung (Pin6) 4
$002
TIMER0, OVF0 Timer/Counter Overflow 5
$003
ANA_COMP Analog Comparator (Pin 12 und Pin 13) Die korrekte Installation einer Interrupt-Vektor-Tabelle mit nachfolgendem Programmcode für einen Timer-IRQ wird durch folgendes Beispiel veranschaulicht:
.device AT90S1200 ;AVR-MCU
.include "1200def.asm" ;Registerdeklaration
.def .......................... ;
.def .......................... ;
rjmp INIT ;Reset Handler
reti ;INT0 (ext.)
rjmp blink ;Timer0 Overflow Handler
reti ;Analog Comparator
INIT: ......................... ;
.................................. ;
.................................. ;
.................................. ;
ldi ligth, .......... ;
ldi timer, ......... ;
out TIMSK, timer ;T0_Interrupt-MaskRegister
ldi timer, ......... ;
out TCNT0, timer ;lösche Timerwert
ldi timer, ......... ;
out TCCR0, timer ;T0_Prescaler
NOP ;(CK/1024 = 65.536 ms)
SEI ;Setze I-Flag im SREG
main: ................................. ;
comp: ................................ ;
.......................................... ;
.......................................... ;
LED: .................................. ;
out PortB, ligth ;
rjmp main ;
blink: ................................ ;
RETI ;Rücksprung aus Interrupt
Der zur Verfügung stehende Timer/Counter T0 ist als freilaufender 8-Bit-Up-Counter gefertigt. Nach dem durch die Initialisierungs-Routine vorgenommenen Start des Timers erfolgt beim Überlauf von $FF nach $00 eine Interrupt- Anforderung (Bit TOV0 im TIFR =[1]).
Danach wird der zugehörige Interrupt-Vektor ($002) in der Reset- Vector-Table im Flash ausgelesen, welcher im Beispiel mit rjmp "blink" auf die entsprechende Interrupt-Serviceroutine verweist.
Der ProgramCounter wird dabei auf die Adresse des betreffenden Labels gesetzt, wo dann die weitere Programmbearbeitung erfolgt.
Die Interrupt-Serviceroutine wird mit RETI abgeschlossen. Dieser Befehl bewirkt einen Rücksprung in das Hauptprogramm, um dort die zuvor unterbrochene Programmbearbeitung fortzusetzen.Die Rücksprungadresse, mit welcher der ProgramCounter geladen werden muss, befindet sich auf dem 3-Level-Hardwarestack.
Aufgabe 1
Realisiere durch einen Timer-Interrupt einen Wechselblinker, bestehend aus 2 x 4 LED (0,1,2,3 und 4,5,6,7), welche im Sekundentakt ein/aus geschaltet werden. In einer Initialisierungsphase sind zuerst die massgebenden Register zu beschalten.
Aufgabe 2
Löse mit einem Microswitch auf dem Starterboard einen Interrupt-Request (IRQ) aus. Durch den Interrupt soll der Lautsprecher auf dem Digital-Simulator für 5 s eingeschaltet werden. Auch hier sind zunächst die entsprechenden Register zu initialisieren.
Aufgabe 3
Mit einem NTC-Widerstand soll bei erhöhter Temperatur (>100 °C) ein Blinklicht eingeschaltet werden, das nur mittels Hardware-Reset zurückgesetzt werden kann.