AVR stack

Gast #114607
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
Gast #114609
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
Gast #114610
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.
Gast #114611
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
Gast #114612
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
Gast #114613
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren