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!
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.
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.
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.
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.
Jitterer schrieb:> Nested Vector Interrupt Controller>> ist dein Suchwort
Ah ok, danke. In anbetracht dessen waren meine Antworten wohl doch
fehlgerichtet ;)
> 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.
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
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
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
Interrupter schrieb:> "Eingebettete Systeme/Mikrocontroller" (Master,Uni).
Und kein Blockschaltbild lesen können?
Welche Uni?
Interrupter schrieb:> Besten Dank!
Auch meinerseits im Voraus :)
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
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.
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".
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.)
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
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. :)