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

Gast #5787313
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
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
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.
Gast
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
> 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
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.
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
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 ;)
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
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.
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
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.
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
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. :)
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
Gast
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
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
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

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.