Hey an alle. Ich benutze einen ATMEGA8515 Ich stehe vor folgendem Problem. Ich lade immer 256 Werte hintereinander aus dem externen SRAM.Der untere Teil der Adresse beginnt immer bei 0 und endet bei FF.Der höhere Teil spielt in dem Fall keine Rolle. ld rd,Z+ ld rd,Z+ ld rd,Z+ ... ... ... ... Ich möchte jetzt aber einen gewissen OFFSET angeben. Der Wert der durch den OFFSET angegeben wird soll zuerst geladen werden und die anderen sollen darauf folgen. Ein Überlauf ist gewünscht da die restlichen Werte vor dem OFFSET zum Schluss folgen sollen. Bsp: OFFSET = 250 250,251,252,253,254,255,0,1,2,....,248,249 Die Werte werden wirklich hintereinander geladen und an dem ist auch nicht zu rütteln. Deswegen entsteht auch mein Problem. Nun habe ich mir die Befehle angesehn. Es gibt keinen Befehl der gleichzeitig aus dem SRAM ladet und den OFFSET erhöht. Es gäbe höchstens ld rd,Z+q. Nur dieser erhöht den OFFSET nicht automatisch.(Außerdem kann ich nicht mit beliebig hohen OFFSET laden. Bis 63?) Nun habe ich an eine Lösung per Hardware gedacht. Anstatt des Latch könnte man doch auch einen ladbaren Zähler verwenden. Der OFFSET wird zu beginn ganz normal in den Zähler geladen und per Umschalter in den Zählmodus geschalten. ALE wird dann verwendet um den Zähler hochzählen zu lassen. Wenn ich mir das Timig des externen Interfaces so anschaue müsste das ganze doch theoretisch funktionieren. Der 74HC193(zwei für 8Bit) zählt bei positiver Flanke. Wird ALE gesetzt(bei ATMEGA8515 High) so zählt der Zähler.Und das nächste mal erst wieder bei der nächsten High Flanke. Wenn ich mir das Ganze so vorstelle müsste es doch funktionieren ABER..es wird wohl zu langsam sein. Meine eig. Frage ist nun, könnte die Überlegung funktionieren? Wenn nicht, gibt es Alternativen? Wie würdet ihr das Problem lösen? MfG Georg
1 | ld rd,Z |
2 | inc zl |
3 | ld rd,Z |
4 | inc zl |
5 | ld rd,Z |
6 | inc zl |
7 | ld rd,Z |
8 | inc zl |
9 | ld rd,Z |
10 | inc zl |
11 | ... |
Peter
Wenns so einfach wäre. Es kommt aufs Timing dauernd. Das ganze darf nicht länger als der Befehl ld rd,z+ (2 Takte und 3 Takte bei externem RAM). Deine Lösung würde 4 Takte brauchen. MfG Georg
Hups der Fehlerteufel war da: Wenns so einfach wäre. Es kommt aufs Timing an. Das ganze darf nicht länger als der Befehl ld rd,z+ (2 Takte und 3 Takte bei externem RAM) dauern. Deine Lösung würde 4 Takte brauchen. MfG Georg
Georg J. schrieb: > Der OFFSET wird zu beginn ganz normal in den Zähler geladen und per > Umschalter in den Zählmodus geschalten. ALE wird dann verwendet um den > Zähler hochzählen zu lassen. Yep, das sollte dem Prinzip nach funktionieren. Nur muss man das Timing genau nachrechnen, wenn man mit ALE 0=>1 zählt. Allerdings wird normalerweise ein transparentes Latch verwendet, kein flankengetriggertes Register, daher wird das vmtl. nur mit gezähltem Zugriff funktionieren, nicht jedoch alternativ mit direktem Zugriff. > Wenn ich mir das Ganze so vorstelle müsste es doch funktionieren > ABER..es wird wohl zu langsam sein. Daher wäre es evtl. sinnvoller, am Ende vom Zyklus hochzuzählen, nicht am Anfang. RD als Taktsignal.
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.