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
>[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.