PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RAM gößer 64K am MEGA128 mit unterstüzung durch bascom ??



torsten1268
25.09.2005, 12:31
Hallo
Giebt es eine möglichkeit in bascom mehr als 64K ram zu verwalten ?
für variabeln,arrys usw.
ich dachte an eine art ram-bank wie es schon die alten ataries,c64,ibm-pc verwendeten vor vielen jahren nutzten.ich muss ständig die adressleitungen der rams(128K*8Bit) totlegen weil die mega128 (mega256) nur 64kram unterstüzen.portleitungen für weitere adressen zu opfern ist bei meinen schaltungen kein problem.nur kan bascom sowas untertüzen??oder wird mehr ram auch in zukunft von bascom nicht unterstützt.

gruß torsten

PicNick
25.09.2005, 12:53
Schau nach unter "XRAM" , da steht einiges

oe9vfj
26.09.2005, 08:51
Die Unterstützung von mehr als 64KB RAM ist zwar im Konzept der AVR-Prozesor Familie vorgesehen, bei den bisherigen Prozessoren aber noch nicht umgesetzt worden.
Dafür vorgesehen sind die I/O Register RAMPX, RAMPY und RAMPZ (RAM-Pointer) als zusätzliche Addresspointer-Ergänzung (Adressleitungen A16, A17 ...) zu den Zeiger-Register X, Y und Z sowie RAMPD für die direkten Speicherzugriff-Befehle lds und sts. (Siehe bei den Instruction Set
http://www.atmel.com/dyn/resources/prod_documents/DOC0856.PDF auf Seite 2 bzw bei den Speicherbefehlen ld, st und lds, sts).
Ich nehme an, dass es dann I/O Pins geben wird, welche als Zusatzfunktion die zusätzlichen Adressleitungen A16, A17 ... übernehmen werden und die Werte aus dem entsprechenden RAMP I/O Register bekommen.
Beim ATMega128 steht unter RAMPZ
The RAMPZ Register is normally used to select which 64K RAM Page is accessed by
the Z-pointer. As the ATmega128 does not support more than 64K of SRAM memory,
this register is used only to select which page in the program memory is accessed when
the ELPM/SPM instruction is used.
Auch beim ATMega256 konnte ich im Datenblatt keine Hinweise auf eine Unterstützung von mehr als 64kB RAM finden.
Die vom AVR adressierbaren 64KB RAM werden von BASCOM unterstützt. Variable, welche nicht im internen SRAM liegen, müssen mit dem Zusatz XRAM im DIM Befehl dimensioniert werden. Natürlich muss dann an den AVR ein entsprechendes externes RAM angeschaltet sein.

Zusätzliches RAM kann natürlich, wie in der Fragestellung erwähnt, über eine sogenannt Bank-Umschaltung über Output-Pins genutzt werden.
Das notwendige Handling muss aber explizit im Anwenderprogramm vorgenommen werden. D. h vor dem Zugriff auf eine Speichervariable in einer anderen RAM-Bank müssen die Banking-Pins entsprechend gesetzt werden.
Die Namensvergabe für Variable in den zusätzlichen RAM-Banken kann man mit den Dim Befehl wie in dem Beispiel:
Dim Variable1Bank1 as Byte at &H100 OVERLAY
vornehmen.
Dabei wird BASCOM vorgegaukelt, dass die Variablen im normalen 64kB Bereich liegen. Adressen, welche im normalen Adressbereich im XRAM liegen würden, müssen dann auch mit dem Zusatz XRAM gedimmt werden. Die Zuweisung dieser Variablen auf die richtige Adressen muss vom Programmierer selbst erfolgen und kann nicht von BASCOM durchgeführt werden.
Im Programm selbst ist zu beachten, dass in einem BASCOM-Befehl dann natürlich nicht Variable aus 2 verschiedenen RAM-Banken verarbeitet werden können, da die bei Aufruf des BASCOM-Befehl eingestellte RAM-Bank ja für alle Variablen gilt.
Will man Speicherwerte von einer Bank in eine andere transferieren, müsste dies mit einer selbst programmierten ASM-Routine erfolgen. Die Erstellung einer generellen SUB, an welche die beiden Adressen und die Bank-Nummer übergeben wird ist denkbar.

Resumee: Die Verwendung von zusätzlichen 64KB RAM Banks ist möglich, erfordert aber doch je nach Applikation einen nicht zu vernachlässigenden zusätzlichen Programmieraufwand.

PicNick
26.09.2005, 09:39
Danke, wieder was gelernt