Forum: Mikrocontroller und Digitale Elektronik Prüfungsfrage - 1 Interrupt Pin mehrere Startadressen für ISR


von Interrupter (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

hatte heute mündliche Prüfung "Eingebettete Systeme/Mikrocontroller" 
(Master,Uni).

Hat leider "nur" zum Bestehen gereicht, da ich zu lange an einer 
Fragestellung war, die nicht übersprungen wurde und ich danach zu 
verunsichert war :D ...

Frage war, wie ein Interrupt im µC weiß von wo er kommt und wo er in der 
Interruptvektortabelle hin muss.

Im Bild sieht man, was der Prof. dazugezeichnet hat. Quasi EINE Leitung 
mit mehreren möglichen "Interruptauslösern".
Habe auch explizit noch nachgefragt, dass es ja nur "High" oder "Low" 
sein kann, alle sind an der gleichen Leitung.

Wie zum Geier kann ich mit einer Leitung auf der nur einmal "1 oder 0" 
kommen kann ohne ne codierung etc. unterscheiden, von welchem Auslöser 
der Interrupt kommt?

Hatte wie auf dem Bild zu sehen eine Lösung gezeichnet, wie ich sie seit 
jeher verwende, wenn zu wenig Interrupt PINs verfügbar sind.

Jeder Taster löst den gleichen Interrupt aus, in der ISR werte ich dann 
aus, an welchem PIN er kam.


Das nicht selbst gezeichnete Bild bezieht sich auf das, was er hören 
wollte. Aber da schicke ich doch nicht nur "an" oder "aus" sondern einen 
definierten Wert pro "externem Auslöser",oder?

Würde mich echt interessieren, dann spar ich mir das nächste mal die 
Ports, Dioden und extra Leitungen ^^

Besten Dank!

von foobar (Gast)


Lesenswert?

Das linke Bild (und auch das untere handschriftliche) ist kein 
Schaltplan - es zeigt abstrakte Verarbeitungsschritte. Deine "LEITUNG" 
ist keine, es zeigt, welche Informationen von wo nach wo weitergeleitet 
werden.  Wie das genau implementiert ist (dafür gibt es zig Varianten), 
ist nicht weiter ausgeführt und hier auch nicht von Interesse.

von Peter D. (peda)


Lesenswert?

Für solche Fragen ist es immer wichtig, den genauen MC-Typ zu nennen. 
Jeder MC-Hersteller kocht da sein eigenes Süppchen. Eine generelle 
Antwort gibt es daher nicht.

von Stefan F. (Gast)


Lesenswert?

Ich vermute, dass er da auf den uralten Z80 anspielt.
https://de.wikipedia.org/wiki/Z80_Interrupt-Logik

Das war schon ein ganz spezielles Ding, macht heute meines Wissens nach 
niemand mehr so.

von foobar (Gast)


Lesenswert?

Antwort wäre etwa so: jeder Interrupt hat eine ihm zugewiesene Nummer 
(Vektornummer).  Diese wird mit 4 multipliziert, zum Vektorbasisregister 
addiert, aus der sich daraus ergebenden Vektroradresse die Startadresse 
der Interrupt-Service-Routine gelesen und diese dann ausgeführt.

von Interrupter (Gast)


Lesenswert?

foobar schrieb:
> Antwort wäre etwa so: jeder Interrupt hat eine ihm zugewiesene Nummer
> (Vektornummer).  Diese wird mit 4 multipliziert, zum Vektorbasisregister
> addiert, aus der sich daraus ergebenden Vektroradresse die Startadresse
> der Interrupt-Service-Routine gelesen und diese dann ausgeführt.

So verstehe ich die Grafik auch. Aber dadurch muss ja trozdem über die 
Leitung pro Anforderer eine "Zahl" kommen. Nur mit "High" kann ich die 
ja nicht unterscheiden.



Stefanus F. schrieb:
> Ich vermute, dass er da auf den uralten Z80 anspielt.
> https://de.wikipedia.org/wiki/Z80_Interrupt-Logik
>
> Das war schon ein ganz spezielles Ding, macht heute meines Wissens nach
> niemand mehr so.

Ja, die Vorlesungsunterlagen sind in der Tat schon etwas in die Jahre 
gekommen. Ist aber leider nicht nur in diesem Fach so.

von Jitterer (Gast)


Lesenswert?

Nested Vector Interrupt Controller

ist dein Suchwort

von Interrupter (Gast)


Lesenswert?

Jitterer schrieb:
> Nested Vector Interrupt Controller
>
> ist dein Suchwort

Ah ok, danke. In anbetracht dessen waren meine Antworten wohl doch 
fehlgerichtet ;)

von foobar (Gast)


Lesenswert?

> So verstehe ich die Grafik auch. Aber dadurch muss ja trozdem über die
> Leitung pro Anforderer eine "Zahl" kommen. Nur mit "High" kann ich die
> ja nicht unterscheiden.

Wie gesagt, das sind keine Leitungen. Es zeigt, dass Interruptanfragen 
von außen oder innen ankommen und wie sie verarbeitet werden.  Es sagt 
nichts darüber aus, wie viele externe oder interne Quellen vorhanden 
sind, noch wie die Informationen (z.B. Vektornummer) übermittelt werden. 
In modernen System z.B. werden solche Interrupts als Pakete über einen 
dedizierten (parallelen und/oder seriellen) Bus übermittelt.

von Interrupter (Gast)


Lesenswert?

foobar schrieb:
> Wie gesagt, das sind keine Leitungen. Es zeigt, dass Interruptanfragen
> von außen oder innen ankommen und wie sie verarbeitet werden.  Es sagt
> nichts darüber aus, wie viele externe oder interne Quellen vorhanden
> sind, noch wie die Informationen (z.B. Vektornummer) übermittelt werden.
> In modernen System z.B. werden solche Interrupts als Pakete über einen
> dedizierten (parallelen und/oder seriellen) Bus übermittelt.

Ok, macht Sinn :) ! Danke.

von Oliver S. (oliverso)


Lesenswert?

Interrupter schrieb:
> Im Bild sieht man, was der Prof. dazugezeichnet hat. Quasi EINE Leitung
> mit mehreren möglichen "Interruptauslösern".

Das steht ja nun schon das Wort "Vektor" dran.
Das Bildchen ist nichts anders als eine grafische Darstellung der 
profanen Formel

Vektoradresse = externe Vektor(-nummer)*4 + Vektorbasisregister

Das wäre die Lösung und der Weg zu deinem Preis gewesen.

Es heisst zwar, ein Bild sagt mehr als tausend Worte, aber wie man hier 
sieht, gilt das nicht immer.

Oliver

: Bearbeitet durch User
von Interrupter (Gast)


Lesenswert?

Oliver S. schrieb:
> Das steht ja nun schon das Wort "Vektor" dran.
> Das Bildchen ist nichts anders als eine grafische Darstellung der
> profanen Formel

Ich weiß, dass da "Vektor" dransteht und das eben auch meine 
Anfangsfrage begründet.

> Vektoradresse = externe Vektor(-nummer)*4 + Vektorbasisregister
> Das wäre die Lösung und der Weg zu deinem Preis gewesen.
>
> Es heisst zwar, ein Bild sagt mehr als tausend Worte, aber wie man hier
> sieht, gilt das nicht immer.

Das Bild hatte ich logischerweise nicht in der Prüfung :D ...

Aber ja, mir ist jetzt klar was er eigentlich hören wollte ;)

von Oliver S. (oliverso)


Lesenswert?

Tja, hinterher ist man immer schlauer ;)

Oliver

von S. Landolt (Gast)


Lesenswert?

Hatte sich Khashoggi wohl auch gesagt.

von Rainer V. (a_zip)


Lesenswert?

Interrupter schrieb:
> Hatte wie auf dem Bild zu sehen eine Lösung gezeichnet, wie ich sie seit
> jeher verwende, wenn zu wenig Interrupt PINs verfügbar sind.
>
> Jeder Taster löst den gleichen Interrupt aus, in der ISR werte ich dann
> aus, an welchem PIN er kam.

Also, für mich ist das eine der typischen Prüfungsfragen, die den 
Probanden völlig unnötig verwirren! Und der TO war/ist verwirrt...dabei 
hat er doch die richtige Lösung in seiner Skizze. Er hat 3 
Interrupt-Pins, die über Schalter/Taster aktiviert werden...schreibt 
dann aber "wenn zu wenig Pins verfügbar sind"...d.h. also, er wertet die 
7 möglichen Zustände in seinen Interrupt-Routinen aus - sofern der 
Prozessor das zuläßt und diese Routinen erreicht man natürlich über eine 
Sprungtabelle. Nicht einverstanden bin ich mit der Aussage, dass jeder 
Taster den gleichen Interrupt auslöst. Wie soll das bei 3 Pins gehen?? 
Und wenn alle Taster auf einen Pin arbeiten, dann kann auch nicht 
entschieden werden, welcher Taster nun der Auslöser war :-)
Daß der Prof. das hier ganz anders hören wollte, ist doch Pillepalle! 
Und daß der Prozessor auch noch interne Interrupts bietet, ist dem TO 
sicher auch bekannt. Die schlichte Antwort wäre gewesen, dass die 
Interruptanforderung ausgewertet wird und dann über eine Sprungtabelle 
seine Routine findet. Punkt.
Gruß Rainer

von Siggy Silberrücken (Gast)


Lesenswert?

Stefanus F. schrieb:
> Ich vermute, dass er da auf den uralten Z80 anspielt.

> Das war schon ein ganz spezielles Ding, macht heute meines Wissens nach
> niemand mehr so.

Ne das klingt eher nach VME-Bus:
http://www.ni.com/product-documentation/4461/en/
https://de.wikipedia.org/wiki/VMEbus

VME-Bus findet man auch heute noch gelegentlich in Racks. Bei dem wird 
der IRQ über eine leitung nach oben durchgereicht und der Host fragt 
dann über drei adressleitungen alle potentielen Quellen ab welche denn 
ge-serviced werden möchte.

von Rainer V. (a_zip)


Lesenswert?

Siggy Silberrücken schrieb:
> VME-Bus findet man auch heute noch gelegentlich in Racks. Bei dem wird
> der IRQ über eine leitung nach oben durchgereicht und der Host fragt
> dann über drei adressleitungen alle potentielen Quellen ab welche denn
> ge-serviced werden möchte.

Ja, ja, das geht halt in die Richtung, dem Prof. zu unterstellen, dass 
er über Z-80 auch heute noch nicht heraus gekommen ist :-) N.m.M hat er 
einfach das Problem völlig abstrakt formuliert und hat es möglicherweise 
in seinen Skripten auch so beschrieben und der TO hat sich eben 
verwirren lassen...
Prüfungen sind halt Prüfungen und da muß jeder durch!
Gruß Rainer

von Bachelor FH (Gast)


Lesenswert?

Interrupter schrieb:
> "Eingebettete Systeme/Mikrocontroller" (Master,Uni).

Und kein Blockschaltbild lesen können?
Welche Uni?

Interrupter schrieb:
> Besten Dank!

Auch meinerseits im Voraus :)

von HildeK (Gast)


Lesenswert?

Rainer V. schrieb:
> Nicht einverstanden bin ich mit der Aussage, dass jeder
> Taster den gleichen Interrupt auslöst. Wie soll das bei 3 Pins gehen??
> Und wenn alle Taster auf einen Pin arbeiten, dann kann auch nicht
> entschieden werden, welcher Taster nun der Auslöser war :-)

Da hast du was falsch verstanden.
Der TO hat drei normale Inputs, die vierte Leitung, gekoppelt über die 
Dioden, löst den Interrupt aus - immer den selben, hier den INT0 (AVR).
In der SR fragt er dann einfach die drei Inputs ab und weiß, welche 
Taste gedrückt wurde.
Abgesehen davon gibt es auch beim AVR die PCINT- Interrupts, die von 
verschiedenen Pins ausgelöst werden können, aber es gibt auch nur einen 
PCINT-Interrupt und damit eine SR.

von Rainer V. (a_zip)


Lesenswert?

HildeK schrieb:
> Da hast du was falsch verstanden.
> Der TO hat drei normale Inputs, die vierte Leitung, gekoppelt über die
> Dioden, löst den Interrupt aus - immer den selben, hier den INT0 (AVR).
> In der SR fragt er dann einfach die drei Inputs ab und weiß, welche
> Taste gedrückt wurde.

Hallo, ja, da kann ich was wirklich nicht verstehen. Woher soll denn die 
Software wissen, welcher Taster gedrückt war, wenn das immer nur auf den 
gleichen INT geht??? Soll ich mich einsargen lassen :-)
Gruß Rainer

von Teo D. (teoderix)


Lesenswert?

Rainer V. schrieb:
> Hallo, ja, da kann ich was wirklich nicht verstehen. Woher soll denn die
> Software wissen, welcher Taster gedrückt war, wenn das immer nur auf den
> gleichen INT geht??? Soll ich mich einsargen lassen :-)

Du hast Schuppen!
Das läuft wie jede andre Pinabfrage (Polling), nur das diese halt vom 
INT ausgelöst wird.
Das mit dem Sarg, heben wir uns dann für später auf. :)

von Rainer V. (a_zip)


Lesenswert?

Teo D. schrieb:
> Du hast Schuppen!
> Das läuft wie jede andre Pinabfrage (Polling), nur das diese halt vom
> INT ausgelöst wird.
> Das mit dem Sarg, heben wir uns dann für später auf. :)

Ja, mag sein :-) aber ich verstehe einfach nicht, wie das mit e i n e m 
Pin gehen soll! Bin bereit für die Beerdigung...
Rainer

von sch0bo (Gast)


Lesenswert?

Interrupter schrieb:
> ...
> Besten Dank!

Und - zurück gefragt "Wen?" ?

von C. A. Rotwang (Gast)


Lesenswert?

Rainer V. schrieb:
> Siggy Silberrücken schrieb:
>> VME-Bus findet man auch heute noch gelegentlich in Racks. Bei dem wird
>> der IRQ über eine leitung nach oben durchgereicht und der Host fragt
>> dann über drei adressleitungen alle potentielen Quellen ab welche denn
>> ge-serviced werden möchte.
>
> Ja, ja, das geht halt in die Richtung, dem Prof. zu unterstellen, dass
> er über Z-80 auch heute noch nicht heraus gekommen ist :-)

Nein VME und Z80 ist nicht dasselbe und das Prinzip das eine leitung 
nur die Anforderung signalisiert, aber alles weitere wie herausfinden 
wer die Anforderung gesendet hat und was der Anforderer überhaupt will 
über ein ebenfalls vorhandenes Bussystem läuft ist heute noch Stand der 
Technik.

Das Problem ist wohl, das der Prof ein gnzes Bussystem mit Core und 
verschiedenen Peripherymodulen (beispiel Uart-Interface, GPI, counter) 
im Kopf hat, während der TO anfänglich nur dumme Knöpfe sieht, die 
einzig über die IRQ-Leitungen mit dem Master verbunden sind.

von C. A. Rotwang (Gast)


Lesenswert?

Rainer V. schrieb:
>> Da hast du was falsch verstanden.
>> Der TO hat drei normale Inputs, die vierte Leitung, gekoppelt über die
>> Dioden, löst den Interrupt aus - immer den selben, hier den INT0 (AVR).
>> In der SR fragt er dann einfach die drei Inputs ab und weiß, welche
>> Taste gedrückt wurde.
>
> Hallo, ja, da kann ich was wirklich nicht verstehen. Woher soll denn die
> Software wissen, welcher Taster gedrückt war, wenn das immer nur auf den
> gleichen INT geht???

lies bitte den Satz "In der SR ..." mehrmals hintereinander - vielleicht 
wird es dann klar.

Die Software fragt in der iSR eben alle ihr bekannten IRQ-Quellen ab, ob 
sie den IRQ gesendet hat. Und dieses Abfragen geschieht eben nicht über 
die IRQ-Leitungen, sondern über ein bussystem über den die periohery 
ohnehin ihrenen datenverkehr abwickelt.
So wie in der Gastwirtschaft, da ruft einer in den Raum hinein "Kellner 
bitte kommen" und dann kommt der Kellner und fragt "Wer hat gerufen? wie 
kann ich helfen".

von HildeK (Gast)


Lesenswert?

Rainer V. schrieb:
> Ja, mag sein :-) aber ich verstehe einfach nicht, wie das mit e i n e m
> Pin gehen soll! Bin bereit für die Beerdigung...

Noch ist es zu früh für die Beerdigung :-).
Ich hab das kürzlich so gelöst:
1
ISR (INT0_vect)  
2
{
3
  Tastenflag |= (~PINC) & ((1<<PC0) | (1<<PC1) | (1<<PC2) | (1<<PC3));  // Tasten lesen und speichern
4
}
Wird eine der PDx-Pins auf Null gezogen, so erfolgt über die 
Diodenverknüpfung (wie die "eigne Lösung" auf dem Bild des TO, nur noch 
mit PUs) ein INT0-Interrupt. In der ISR wird dann der Tastenzustand 
gespeichert.
Das Prinzip hatte der TO gemeint.

(Für diejenigen, die eine Entprellung vermissen: Da die Aufgaben, die 
der µC nach einem Tastendruck zu bearbeiten hat, einige Sekunden dauern, 
war eine Entprellung nicht notwendig, das entsprechende Bit im 
Tastenflag wird nach der Abarbeitung der Aufgabe wieder gelöscht.)

von HildeK (Gast)


Lesenswert?

Warum sehe ich das immer direkt nach dem Abschicken?

HildeK schrieb:
> Wird eine der PDx-Pins auf Null gezogen,
                 ^
Natürlich PCx-Pins!

von Rainer V. (a_zip)


Lesenswert?

HildeK schrieb:
> Das Prinzip hatte der TO gemeint.

Ja, das sehe ich ja auch so...habe mich halt in die Version mit nur 
einem Pin verbissen, was natürlich Blödsinn ist!
Gruß Rainer

von Teo D. (teoderix)


Lesenswert?

Rainer V. schrieb:
> Ja, das sehe ich ja auch so...habe mich halt in die Version mit nur
> einem Pin verbissen,

Ein Pin der unterschiedliche INTs (sagen wir Funktionen) auslöst.... Da 
hatte ich mich auch beerdigen lassen. :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.