Liebes Forum, Ohne besondere Softwarekonstrukte kann ja ein AVR zunächst mal keine kaskadierten Interupts. Mir geht es um zwei Ints, die ich nutzen will 1) Timer-Overflow 2) Pinchange-Int (Flanke) Ich möchte nur gerne wissen, ob ich ABSOLUT SICHER(!) sein kann, dass, wenn gerade der EINE Interupt bearbeitet wird, der jeweils andere zuverlässig vorgemerkt wird und dann danach dessen ISR angesprungen wird. Kann es Situationen geben, wo das nicht zutrifft? Gruss Anne
>Ich möchte nur gerne wissen, ob ich ABSOLUT SICHER(!) sein kann, dass, >wenn gerade der EINE Interupt bearbeitet wird, der jeweils andere >zuverlässig vorgemerkt wird und dann danach dessen ISR angesprungen wird. Kannst du. Es steht sogar im Datenblatt, dass dabei der bereits bearbeitete ISR zuende bearbeitet wird. Danach wird EIN (asm) Befehl vom Hauptprogramm ausgeführt, bevor der nächste (priorität) anstehende Interrupt bedient wird. >Kann es Situationen geben, wo das nicht zutrifft? Ja, wenn du vorher das "Merkerflag" des Interrupts durch Schreiben einer EINS löschst.
Matthias Lipinsky wrote: >>Kann es Situationen geben, wo das nicht zutrifft? > > Ja, wenn du vorher das "Merkerflag" des Interrupts durch Schreiben einer > EINS löschst. Und wenn während der Bearbeitung des ersten Interrupts ein anderes Interrupt-Ereignis mehrfach auftritt. Da es für jeden Interrupt nur ein Flag gibt, kann natürlich jeweils immer nur ein Ereignis festgehalten werden.
> Interrupt
Richtig, aber in den 50er Jahren habe ich mal gelernt, dass man im
ganzen Satz antworten sollte anstatt einfach nur ein Wort (auch wenn es
sachlich richtig ist) hinzurülpsen, wenn man ernstgenommen werden
möchte. Soviel Zeit muss sein.
KH
annemarie wrote: > Liebes Forum, > > Ohne besondere Softwarekonstrukte kann ja ein AVR zunächst mal keine > kaskadierten Interupts. Mir geht es um zwei Ints, die ich nutzen will > > 1) Timer-Overflow > 2) Pinchange-Int (Flanke) > > Ich möchte nur gerne wissen, ob ich ABSOLUT SICHER(!) sein kann, dass, > wenn gerade der EINE Interupt bearbeitet wird, der jeweils andere > zuverlässig vorgemerkt wird und dann danach dessen ISR angesprungen > wird. Kann es Situationen geben, wo das nicht zutrifft? Es ist wie folgt: Es gibt beim AVR eine Vektor-Tabelle, hierbei ist die Prioritaet absteigend, das heisst Interrupts mit einer kleineren Vektornummer sind hoeher in ihrer Prioritaet. Vorgemerkt wird immer nur ein Interrupt. Werden nun waehrend der Ausfuehrung Deines ISR zwei unterschiedliche Interrupts vorgemerkt, wird zunaechst ein Befehl des Hauptprogramms ausgefuehrt (um Aushungern zu vermeiden) und dann wird erst der Interrupt mit der niedrigeren Vektornummer bearbeitet, da kannst Du Dir sicher sein. Das steht aber auch alles im Datenblatt. Gruss, Michael
@ Kachel-Heinz (Gast) >Richtig, aber in den 50er Jahren habe ich mal gelernt, dass man im >ganzen Satz antworten sollte anstatt einfach nur ein Wort (auch wenn es Dann solltest du mal 50 Jahre technische Entwicklung und 20 Jahre Netzkultur aufholen um festzustellen, dass das ein Link auf einen Artikel ist. >sachlich richtig ist) hinzurülpsen, wenn man ernstgenommen werden >möchte. Soviel Zeit muss sein. Ich hab mir sogar die Zeit genommen, den verlinkten Artikel weitläufig zu üerarbeiten und zu erweitern. Soviel dazu. MFG Falk
>>20 Jahre Netzkultur...
Netz und Kultur in einem Wort, das ist ja grausig.
Ist das nicht ein Widerspruch in sich...?
;-)
Anne
>[zwischen zwei Interrupts] >ein Befehl des Hauptprogramms ausgefuehrt (um Aushungern zu vermeiden) Für das "eine Hauptprogramm-Instruktion nach jedem Interrupt, bevor ein weiterer vorgemerkter Interrupt angesprungen wird" gibt es einen sehr speziellen Grund: Es ermöglicht einen Single-Step-Betrieb des Controllers, z. B. für Debuggingzwecke. Das funktioniert so: Man benötigt einen freien externen Interrupt, z. B. INT0, der auf Pegeltriggerung konfiguriert wird. Ans Ende des Interrupthandlers schreibt man zwei Schleifen, mit denen ein /zweifacher Pegelwechsel/ abgewartet wird. Der Handler wird also erst verlassen, wenn der Pegel am Ext-Int-Pin von "Ativ" nach "Ruhe" und wieder zurück nach "Aktiv" gewechselt hat. Dann passiert das Gewünschte: genau eine Instruktion des Hauptprogramms wird abgearbeitet und danach sofort wieder der Ext-Interrupthandler angesprungen. An den Anfang dieses Handlers können beliebige Testroutinen geschrieben werden, z. B. zur Ausgabe von Registerinhalten etc.
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.