2016-05-21 4 views
0

Auf Atmega 128 wie externe SRAM zu aktivieren, und wie ein Text in externen SRAM kopieren? Zum Beispiel habe ich einige Daten SomeData: .db 0x01,0x02,0x03, ....., 0x.25 in .dseg, wie kann ich diesen Text in externe SRAM beginnt bei Adresse 2100h?AVR-Baugruppe externe SRAM-Nutzung

Vielen Dank im Voraus.

+0

Sind Sie sicher, dass Sie einen AtMega128 haben? weil ich bin mir ziemlich sicher, dass es keine externe RAM-Schnittstelle hat (aber ich habe kein Datenblatt herumliegen - nahm nur einen kurzen Blick in die atmega1284 (ein Nachfolger) DS) –

+0

Sie können das in Software - finden Sie ein Datenblatt des SRAM, das Sie verbinden möchten, sollte es eine Beschreibung des Protokolls enthalten, das verwendet wird, um von dem Chip zu lesen/zu schreiben. Dann implementieren Sie es auf atmega. Es wäre weder einfach noch effizient, aber machbar. –

Antwort

2

Zuerst lesen Sie die manual

Auf Seite 19 gibt es eine Figur ist, die zeigt, wie der externe Speicher-Karten in den Speicherraum.

Die Beschreibung der externen Speicherschnittstelle beginnt auf Seite 25.

das Gedächtnis wie ein interner Speicher verhält tun würde.

Der folgende Assembler-Code zeigt, wie Bytes aus dem internen SRAM gelesen und in den externen SRAM-Speicher kopiert werden.

.cseg 
copy: 
     ldi r17, 4 ; counter for how many bytes to copy 
     ldi YL, low(data) ; load pointer to data into Y pointer 
     ldi YH, high(data) 
     ldi ZL, low(0x2100) ; load pointer to external memory into Z 
     ldi ZH, high(0x2100) 
copy_loop: 
     ld r16, Y+ ; r16 <- [Y], Y++ 
     st Z+, r16 ; [Z] <- r16, Z++ 

     dec r17 
     brne copy_loop 
     <other code> 

data: .byte 4 

haben Sie auch einen Blick auf die st, ld, M. und lds Anweisungen, die Speicher zugegriffen wird.

Die Zeiger X, Y und Z des AVR sind 16 Bit breit.

Vorsicht!

schrieb Sie so etwas wie:

.dseg 
data: .db 0x1, 0x2 

Dies funktioniert nicht. Sie können keine Daten mit .db in den internen SRAM schreiben, da dieser flüchtig ist und mit Programmcode initialisiert werden muss!

kann

schreiben
.cseg 
<CODE> 
data_const: .db 0x1,0x2,0x3,0x4 

.dseg 
data: .byte 4 

dies wird einen Vier-Byte-initialisierte Datenarray in FLASH und Reserve 4 Bytes von Raum in dem internen SRAM erstellen. Sie können jetzt die Daten von data_const in Daten in Ihrem Code kopieren.

Übrigens: Vorinitialisierte Variablen in C-Code befinden sich ebenfalls im Flash und werden vor dem Start von main() vom Startup-Code in den SRAM kopiert.