Hallo Marco
Wie verhält sich das nun mit IRQ? Was GENAU macht er im
Prozessor?
Im Allgemeinen besizt eine CPU zwei verschiedene Interrupt-Eingänge:
NMI = Non Mascable Interrupt (Nicht Maskierbarer Interrupt)
IRQ = Interrupt ReQuest (Interrupt Anfrage)
Wenn eine NMI-Anfrage ansteht, beendet die CPU zuerst den Befehl welcher gerade abgearbeitet wird,
danach werden der PC (Programm-Zeiger) und das Status-Register auf dem Stack gesichert, und das IRQ-Mask-Bit gesetzt (dazu später etwas mehr),
anschliessend wird von einer bestimmten Speicherstelle die Adresse der Interrupt-Routine gehohlt und diese Ausgeführt.
Die Interrupt-Routine „bedient“ nun die entsprechende Peripherie, „löscht“ die Inturrupt-Anfrage und wird mit einem RTI-Befehl (ReTurn from Interrupt) beendet, welcher das Status-Register und der PC wieder hergestellt.
Somit „merkt“ das unterbrochene Programm gar nicht, dass es unterbrochen wurde.
Nun zum IRQ und dem IRQ-Mask-Bit.
- IRQ-Mask-Bit ist im Status-Register abgelegt. Deshalb hat es nach dem RTI auch wieder seinen Ursprungszustand.
- Ein IRQ wird nur Ausgeführt wenn das IRQ-Mask-Bit gelöscht ist. Damit wird verhindert, dass der gleiche Interrupt mehrmals erkannt wird, bevor die Interrupt-Routine gelegenheit hatte die Inturrupt-Anfrage zu „löschen“. Zudem kann durch setzten des IRQ-Mask-Bit verhindert werden, dass ein zeitkritischer Programm-Teil durch einen Interrupt unterbrochen wird.
Nun noch etwas zum Interrupt-Controller:
Da die CPU nur einen IRQ-Eingang besitzt, müsste die Interrupt-Routine jede mögliche Interrupt-Quelle abfragen um herauszufinden, wer ihn ausgelöst hat. Deshalb wird zwischen Peripherie und IRQ meist ein Interrupt-Controller dazwischengeschaltet. Dieser hat zwei Aufgaben:
- Wenn gleichzeitig mehr als eine Interrupt-Anforderung gestellt wird, enscheidet er welche als erste bedient wird (ist meist Harwaremässig realisiert; IRQ0 hat die höchste Priorität, IRQ7 hat am wenigsten zu melden).
- Er teilt der CPU mit von welcher Speicherstelle die Adresse der Interrupt-Routine geholt werden soll.
Um das ganze noch etwas komplizierter zu machen, gibt es noch zwei verschiedene Mechanismen um einen Interrupt auszulösen:
-
Der Interrupt dadurch wird ausgelöst, dass der Zustandwechsel (Also z.B. der Wechsel von logisch „1“ nach „0“) der Interrupt-Leitung ausgewertet wird. Dies ist technisch etwas einfacher, hat aber den Nachteil, dass Interrupts verloren gehen können und sich verschiedene Bausteine nicht einen Interrupt teilen können.
-
Der interrupt wird ausgelöst solange der IRQ-Eingang auf logisch „0“ liegt. Erst wenn der Eingang wieder auf „1“ wechselt steht kein Interrupt mehr an. Dadurch können sich auch mehrere Bausteine einen Interrupt 2teilen". Solange wir eine „0“ and der Interrupt-Leitung anliegt muss die Interrupt-Routine einfach alle in Frage kommenden Bausteine abfragen um den „Schuldigen“ zu finden.
Ist der DMA-Kanal wirklich ein Abzählmechanismus
im Prozessor?
Die DMA ist nicht Teil der CPU sondern ein Peripherie-Baustein.
Die DMA besteht, im Prinzip, aus 3 Zählern und einem BUS-Interface.
Der 1. Zähler enthält die Speicher-Adresse von welcher die Daten gelesen werden. Er kann nach jedem Zyklus unverädert bleiben, um eine Adresse höhergezählt oder runtergezählt werden.
Der 2. Zähler enthält die Speicher-Adresse in welche geschrieben werden soll. Nach jedem Zyklus kann er wie Zähler 1 verändert werden.
Der 3. Zähler zählt die Zyklen und stoppt die DMA wenn er auf 0 runtergezählt hat. Meist wird dann ein Interrupt ausgelöst.
Zudem gehört noch ein Konfigurations-Register dazu in welchem eigestellt wird ob nun Zähler 1 und 2 rauf-, runterzählen oder nicht verändert werden sollen und die anderen Optionen eingetsellt werden können.
Das BUS-Interface dient dazu
zuerst von der CPU die Steuerung des Buses zu übernehmen,
anschliessend wird ein Lesebefehl von der Adresse welche in Zähler 1 abgelegt ist duchgeführt,
gefolgt von einen Schreibbefehl an derjenigen welche in Zähler 2 hinterlegt ist,
und abschliessend wird die BUS-Steuerung wieder an die CPU zurückgegeben.
Der Vorteil dieser Methode, gegenüber einem IRQ, ist, dass die CPU nur für 2 Speicher-Zugriffe angehalten werden muss.
Die DMA Zyklen werden meist von einem Peripherie-Baustein, anstelle eines IRQ, ausgelöst („Single“ oder „Cycle-Steal“ Modus gennant).
Daneben gibt es noch den „Burst“-Modus, welcher benutzt wird um Blöcke innerhalb des Hauptspeichers zu kopieren. Dabei wird die CPU angehalten bis der ganze Block kopiert worden ist.
Der DMA-Mechanismus ist zwar sehr schnell, aber es bedarf doch einiges an Laufzeit den DMA-Controller aufzustzten. Deshalb ist die DMA nur Sinnvoll wenn eine grössere Menge an Daten bewegt werden soll (z.B. Soundausgabe) oder wenn ein Datenblock sehr schnell bewegt werden kann.
Warum laufen Drucker ohne IRQ, sondern auch nur mit
DMA-Kanälen?
Sollte jetzt klar sein. Oder ??
MfG Peter(TOO)