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.
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.
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.
Nested Vector Interrupt Controller ist dein Suchwort
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
:
Bearbeitet durch User
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 ;)
Tja, hinterher ist man immer schlauer ;) Oliver
Hatte sich Khashoggi wohl auch gesagt.
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.)
Warum sehe ich das immer direkt nach dem Abschicken? HildeK schrieb: > Wird eine der PDx-Pins auf Null gezogen, ^ Natürlich PCx-Pins!
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. :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.