Forum: Mikrocontroller und Digitale Elektronik AVR stack


von Karl Heinz (Gast)


Lesenswert?

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

von crazy horse (Gast)


Lesenswert?

1. sind solche Manipulationen eigentlich immer überflüssig
2. gibts bei Hardwarestack keine solche Möglichkeit

von klaus (Gast)


Lesenswert?

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

von crazy horse (Gast)


Lesenswert?

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)

von Andi (Gast)


Lesenswert?

@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

von Karl Heinz (Gast)


Lesenswert?

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.

von Andi (Gast)


Lesenswert?

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

von Karl Heinz (Gast)


Lesenswert?

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

von ...HanneS... (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.