Prüfungsfrage - 1 Interrupt Pin mehrere Startadressen für ISR

Gast #5787313
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!
Angehängte Dateien:
Gast #5787331
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.
Gast #5787353
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.
Gast #5787370
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.
Gast #5787380
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.
#5787388
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
Gast #5787402
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 ;)
#5787513
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
Gast #5787523
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.
#5787831
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
Gast #5787863
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.
#5787952
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
#5787974
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. :)
Gast #5788124
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.
Gast #5788126
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".
Gast #5788150
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.)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren