Hallo, gibt es bei einem AVR mit Hardware Stack die Möglichkeit die Rückspungadresse, die z.Bsp. bei einem Interupt abgelegt wurde, zu manipulieren, so dass es nach einem reti an einem definierten Programmpunkt weitergeht?! Grüße, KarlHeinz
1. sind solche Manipulationen eigentlich immer überflüssig 2. gibts bei Hardwarestack keine solche Möglichkeit
mit pop Register pop Register 2* die alte Rücksprungadresse vom Stack holen dann mit rjmp oder ajmp zur neuen adresse oder mit 2* push Register die neue Rücksprungadresse laden und dann reti auf die gesetzte Adresse Nicht gerade die feine englische Art, funktioniert aber HTH, Klaus
blöd nur, dass es pop und push und auch einen per Software manipulierbaren SP bei Hardware-stack gar nicht gibt...:-) Das betrifft alle Typen ohne RAM (1200, Tiny11, 12, 15)
@Karl Heinz: Wenn Du einen kleinen Tiny mit 8 Pins benötigts und unbedingt ne Rückspringadresse ändern willst, nimm den Tiny13. Der hat als einziger Mini-AVR SRAM mit normalem Stack im SRAM. Gruß Andi
ok, ich sehe schon, mein tiny15 gibt das wohl nicht her... die Anwendung ist halt ziemlich zeitkritisch, d.h. ich habe in der Anwendung keine Zeit noch ein Bit auszuwerten, welches in der ISR gesetz werden würde. dann halt doch ein 12er. der läuft etwas schneller und verschafft mir Luft um besagtes Bit zu checken... Danke.
Was heißt hier keine Zeit? Bei 2, 4 oder mehr MHz hat man alle Zeit der Welt sofern ein IRQ-Programm nicht 100.000 mal je Sekunde ausgeführt werden soll. Und wenn es mal etwas länger dauert, da Variabel, wird nach dem RETI aus dem IRQ-Prog das IRQ-Prog durch das Interrupt-Flag sofort wieder aufgerufen. Was hast Du genau vor? Gruß Andi
das ist alles ein bißchen kompliziert: mein tiny15 pollt unentwegt einen Pin, überwacht damit einen seriellen Datenstrom und checked ob das Protokoll passt. Die Bitzeit liegt bei 4us, d.h bei den 1,6MHz des Tiny15 kann ich mit SBIC nur einmal checken ob sich am Pin was getan hat (worst case). Den timer nutze ich zum testen des data timings(ich will nur einen nutzen, um später auch andere tinys verwenden zu können. der t15 lag halt rum und bei reichelt gibts noch keine t13). Jetzt gibt es zwei Fälle: 1. es kommen keine daten an der timer läuft über und generiert einen INT 2. es kommem Daten an, haben aber das falsche Protokoll, d.h. es gibt keinen timer überlauf, da ich immer wieder das timing prüfe und dazu den zähler rücksetze aber ich merke schon, ohne zweiten timer gehts nicht. habs gerade mal mit dem WDR probiert und schalte nach jedem WDR auf ein anderes Protokoll um, das ich testen will; das läuft soweit. Grundsätzlich nochmal: wenn ich in der ISR folgendes mache: pop rxxx pop rxxx ldi r16,low(zielmarke) ldi r17,high(zielmarke) push r17 push r16 reti müßte ich doch nach reti zu 'Zielmarke' springen, oder? Grüße, KH
Hi... Tiny15 hat kein SRAM, daher auch kein pop und push!!! Tiny15 muss kalibriert werden, sonst läuft er nicht mit 1,6MHz. Tiny15 hat doch 2 Timer, einer ist sogar sehr schnell. Tiny15 hat Ext. Int, da brauch man nicht pollen... ...HanneS...
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.