SRAM beim Mega 128

Gast #3155078
Lesenswert?

Hallo, guten Tag.

Kann ich diese Regel unten für das SRAM beim Mega128 anwenden um die 
Funktion  zu lernen oder hat der Mega128 eine andere Vorgehensweise 
,weil
er ja bestimte PINS für ein SRAM vorgesehen  hat ?

Der Ablauf zum Beschreiben:
1. OE/ und WR/ inaktiv
2. Adresse anlegen ( und einmal den Latch High - Low für die unteren 
Adressbits )
3. Daten anlegen
4. WR/ aktiv
5. WR/ inaktiv

Der Ablauf zum Lesen:
1. OE/ und WR/ inaktiv
2. Adresse anlegen ( und einmal den Latch High - Low für die unteren 
Adressbits )
3. OE/ aktiv
4. Daten einlesen
5. OE/ inaktiv

Gruss
peter
Gast #3155097
Lesenswert?

Hi

>Kann ich diese Regel unten für das SRAM beim Mega128 anwenden um die
>Funktion  zu lernen oder hat der Mega128 eine andere Vorgehensweise
>,weil er ja bestimte PINS für ein SRAM vorgesehen  hat ?

Der ATMega hat nicht nur bestimmte Pins dafür vorgesehen, sondern er hat 
ein komplettes Interface für externen RAM. Im Datenblatt gibt es fast 10 
Seiten incl. Codebeispiel in Assembler und C zu XMEM. Hast du das 
gelesen?

MfG Spess
#3155100
Lesenswert?

peter schrieb:
> Kann ich diese Regel unten für das SRAM beim Mega128 anwenden um die
> Funktion  zu lernen oder hat der Mega128 eine andere Vorgehensweise
> ,weil
> er ja bestimte PINS für ein SRAM vorgesehen  hat ?

Wozu? Der Atmega128 hat ein externes Memoryinterface eingebaut da 
brauchst du dich um die Ansteuerung der Pine nicht selbst zu kuemmern 
das macht er schon fuer dich.

ALE (PG2) an den Clockeingang vom Latch
RD  (PG1) an den OE Eingang vom RAM
WR  (PG0) an den WR Eingang vom RAM

Dann noch AD0..7 an Latch und Dateneingaenge vom RAM
A8..15 an die Adresseingaenge vom RAM und das wars
Gast #3155425
Lesenswert?

Jup, das habe ich gefunden :

#define OFFSET 0x2000
void XRAM_example(void)
{
unsigned char *p = (unsigned char *) (OFFSET + 1);
DDRC = 0xFF;
PORTC = 0x00;
XMCRB = (1<<XMM1) | (1<<XMM0);
*p = 0xaa;
XMCRB = 0x00;
*p = 0x55;
}

Damit kann ich als Anfänger nicht viel anfangen.
Gibt es irgendwo ausführliche Programmteile die man aus einem C-Code 
evtl raussuchen kann ?

Danke.

Gruss
#3155445
Lesenswert?

Initialisierung:

MCUCR |=  (1 << SRE);    external RAM enable


XMCRA |= (1 << SRW00) | (1 << SRW01) | (1 << SRW11);   Waitstates enable


XMCRB |= (0 << XMM0) | (0 << XMM1) | (0 < XMM2);   Alle Addressleitungen 
gueltig

Zugriff:

unsigned char *p,v;

p = 0x2000;       Gewuenschte RAM Addresse 0x12000 ist nur Beispiel

*p = 0x55;        Schreiben ins RAM

v = *p;           Lesen aus dem RAM

Ansonsten wenn du dem Linker mitteils wo RAM ist verwaltet er das ganz 
alleine von sich aus.
#3155526
Lesenswert?

spess53 schrieb:
>>XMCRB |= (0 << XMM0) | (0 << XMM1) | (0 < XMM2);   Alle Addressleitungen
>
> Sicher?
>
> MfG Spess

Steht da nur damit man sieht das man das Register auch noch aendern kann 
wenn der Addressbereich ein anderer ist. Ich weiss ja nicht wieviel RAM 
er dort anschliessen will und die Addressleitungen A8 .. A15 alle 
braucht. Braucht er sie nicht alle muessen halt die '0' durch eine '1' 
ersetzt werden je nach Bereich.
#3155921
Lesenswert?

>Dieses SRE finde ich nicht in der iom128.h :

>(1 << SRE);

Bei mir ist es drin:

/* MCU general Control Register - MCUCR */
#define    SRE          7
#define    SRW          6
#define    SRW10        6       /* new name in datasheet 
(2467E-AVR-05/02) */
#define    SE           5
#define    SM1          4
#define    SM0          3
#define    SM2          2
#define    IVSEL        1
#define    IVCE         0
Moderator Persönliche Seite #3155976
Lesenswert?

Helmut Lenzen schrieb:
> Bei mir ist es drin:

Das steht seit der Revision 2 in der Datei drin, die vor mehr als
einem Jahrzehnt ins CVS importiert worden ist (meint mein "svn
annotate"):

r2 | troth | 2002-07-05 22:38:44 +0200 (Fri, 05 Jul 2002) | 2 lines

Initial commit of sources from avr-libc-20020630.

Diese commit message suggeriert, dass es bereits vor dem Juni 2002
unverändert in dieser Datei zu finden war …

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