mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme AVRStudio und externer Speicher


Autor: Max Forster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!
Ich hab schon ein paar Stunden mit der Suche im Internet zu meinem 
Problem verbacht, hab aber nix gescheites gefunden! Vielleicht könnt ihr 
mir ja weiterhelfen!
Ich habe einen AT90CAN128 an dessen Speicherbus ein externes RAM ist! 
Wenn ich das richtig verstanden habe, lässt sich dieses dann über die 
Adressen 0x1100 bis 0xFFFF ansprechen.
Ich würde nun gern den .data Bereich oder zumindest einige recht große 
Arrays in den externen Speicher verschieben!
Wenn ich beim AVRStudio eine Section anlege, die .exram heisst, als SRAM 
konfiguriert ist und an der Adresse 0x1100 beginnt und dann hinter mein 
Array _attribute_ ((section (".exram"))) schreibe, kann ich das 
erzeugte HEX-File nicht mehr auf meinen AVR laden. Es kommt zu einer 
Fehlermeldung, dass der Inhalt der Datei nicht zu meinem Device passen 
würde.
Wenn ich auf gleichem Wege eine Section "anlege" die .data heisst, als 
SRAM konfiguriert ist und an der Adresse 0x1100 beginnt, kommt diese 
Fehlermeldung nicht! Sind nun alle meine Variablen im externen Speicher 
oder lieg ich da generell falsch! Irgendwie kapier ich das glaub ich 
ned!
Wie benutz ich denn nun das externe Ram für meine Variablen, damit das 
interne SRAM für den Stack da is?

Auf jeden Fall schon mal Danke für eure Hilfe und eure Antworten!
MfG Max

Autor: Max Forster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiß denn keiner eine Antwort? :-(

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich mache es über die .init Sctions und den Linker, weil das im 
AVR-Studio auch nicht funktioniert hat.

http://www.nongnu.org/avr-libc/user-manual/mem_sections.html

Folgende Linker Section legt die Data-Area ab 0x1000 fest:

-Wl,--section-start=.data=0x801000,--defsym=__heap_end=0x80ffff


Folgende Code-Sequenzen stehen ganz oben im Code:

Externen Speicher in .init1 deklarieren:
//-------------------------------------------------------------------
//    .init1
//
//    used to enable external ram in XMCRA register
//    also possible at top of main()
//
//    Following linker section is necessary to set .data area:
//
//     -Wl,--section-start=.data=0x801000,--defsym=__heap_end=0x80ffff
//
//-------------------------------------------------------------------
void my_init_external_ram (void) __attribute__ ((naked)) \
    __attribute__ ((section (".init1")));

void my_init_external_ram(void)
{
  // enable external sram
  XMCRA |= (1 << SRE);

  // one wait states for read/write upper sector
//  XMCRA |= (1 << SRW10) | (0 << SRW11);

  // two wait states for read/write upper sector
  XMCRA |= (0 << SRW11) | (1 << SRW11);

  // two wait states for read/write upper sector
  // one wait state befor driving out new address
//  XMCRA |= (1 << SRW11) | (1 << SRW10);

  XMCRA &= ~(1 << SRW11);
}


Den Stack-Pointer in .init3 auf 0x09FF legen:
//-------------------------------------------------------------------
//    .init3
//
//    used to set the stack pointer to 0x09FF (4096)
//    cause .data area reach from 0x1000 to 0xFFFF (4096..65535)
//
//    Following linker section is necessary to set .data area:
//
//     -Wl,--section-start=.data=0x801000,--defsym=__heap_end=0x80ffff
//
//-------------------------------------------------------------------
void my_init_stack_pointer (void) __attribute__ ((naked)) \
    __attribute__ ((section (".init3")));

void my_init_stack_pointer (void)
{
  // stack-pointer at 0x09FF
  asm volatile("ldi r29, 0x09"::);
  asm volatile("out __SP_H__,r29"::);
  asm volatile("ldi r28, 0xFF"::);
  asm volatile("out __SP_L__,r28"::);
}

Vieleicht hilft Dir das.

Autor: Max Forster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke....das hats gebracht! :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.