www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik XMega SRAM, EBI und DMA


Autor: Nicolas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

eigentlich wollte ich hier:

Beitrag "XMega 128 mit 32MByte SDRAM betreiben"

fragen, aber da wurde ich aufgefordert, einen neuen Thread aufzumachen.


Hallo,

auch wenn der Beitrag hier recht alt ist, hab ich doch ein paar Fragen:

Alexander, hast Du das EBI-interface des XMega benutzt? Und mit welchem 
RAM-Baustein? Und mit DMA?

Dann wäre ich sehr an etwas Beispielcode/der Beschaltung interessiert 
;)!

Ich benutze einen XMega um ein im internen RAM abgespeicherte waveform 
über den DAC abzuspielen. Da wäre mehr Speicher sehr interessant...

Danke und Viele Grüße

Nicolas

Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Nicolas

Du kannst die XPlan als Grundlage nehmen für den Speicheraufbau. Der 
SDRAM ist langsamer als der SRAM. Speicherbaustein habe ich ein 
42..16400 mit 16 Bit Datenbus verwenden. Nicht benötigte 
Datenleitungen(D4..D15) mit Pullup Widerständen versehen und die EBI 
nach AVR1312 Appl initialisiert. Mein SDRAM brauchte 64MHz. Erst dann 
funktionierte er fehlerfrei. Schaltplan findest Du in der Appl AVR1907 
Atmel Seite für's Testboard XPlan.

Gruß Bernhard

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicolas schrieb:
> Ich benutze einen XMega um ein im internen RAM abgespeicherte waveform
> über den DAC abzuspielen. Da wäre mehr Speicher sehr interessant...

Warum kein externer Flash? SD-Karte?

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anbei den Code den ich benutze (Ist halt für SRAM).
Der Xmega berechnet Signale (Foundation Fieldbus + Profibus), schreibt 
diese in ein externes SRAM und ein FPGA gibt das ganze dann aus. Die 
Funktionen habe ich hier irgendwo mal gefunden, die Einstellungen fürs 
EBI stehen in der Dokumentation zum Xmega.

Schreiben mit EBI:
/************************************************************************/
/*! \brief Writes one byte to a given 24 bit address.
*
* Since the compiler can't handle 24bit pointers,  the external memory has to be accessed
* using this function
*
* \param[in] Address Contains a 24bit pointer for an EBI write access
* \param[in] Val The byte to write
*************************************************************************/

inline void WriteEBI(uint32_t Address, uint8_t Val)
{
  uint8_t Seg = (uint8_t)(Address >>16);
  uint16_t Off = (uint16_t)Address;
 __asm__ __volatile__
 (
   "in __tmp_reg__,%3"          "\n\t"  /* store RAMPZ */
   "out %3,%1"                  "\n\t"  /* load new RAMPZ */
   "st %a2,%0"                  "\n\t"  /* write byte */
   "out %3,__tmp_reg__"         "\n\t"  /* restore RAMPZ */
   :
   :  "r"  (Val),                       /* %0 */
      "r"  (Seg),                       /* %1 */
      "z"  (Off),                       /* %2 (Z) */
      "I"  _SFR_IO_ADDR(RAMPZ)          /* %3 */
 );
} 

Lesen:
/************************************************************************/
/*! \brief Reads one byte from a given 24 bit address.
*
* Since the compiler can't handle 24bit pointers,  the external memory has 
* to be accessed using this function
*
* \param[in] Address Contains a 24bit pointer for an EBI read access
*************************************************************************/
inline uint8_t ReadEBI(uint32_t Address)
{
 uint8_t Seg = (uint8_t)(Address >> 16);
 uint16_t Off = (uint16_t)Address;
 uint8_t Value;
 __asm__ __volatile__
 (
   "in __tmp_reg__,%3"          "\n\t"  /* store RAMPZ */
   "out %3,%1"                  "\n\t"  /* load new RAMPZ */
   "ld %0,%a2"                  "\n\t"  /* load Ret */
   "out %3,__tmp_reg__"         "\n\t"  /* restore RAMPZ */
   :  "=&r" (Value)                     /* %0 */
   :  "r"   (Seg),                      /* %1 */
      "z"   (Off),                      /* a2 */
      "I"   _SFR_IO_ADDR(RAMPZ)         /* %3 */
  );

  return( Value );
}
 

EBI Konfigurieren:
void InitializeEBI()
{
  /* Set signals which are active-low to high value */
  PORTH.OUT = 0xFF;
  /* Configure bus pins as outputs(except for data lines). */
  PORTH.DIR = 0xFF;
  PORTK.DIR = 0xFF;

  /* Initialize EBI. */
  EBI.CTRL=0x09;
    
  /* Initialize Chipselect for SRAM */
  EBI.CS0.CTRLA = 0x35;
  EBI.CS0.CTRLB = 0x00;
  EBI.CS0.BASEADDRH = 0xE0;
  EBI.CS0.BASEADDRL = 0x00;    
}     

Autor: Nicolas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen Dank für die Anregungen, und entschuldigt die späte Antwort:

@ Travel Rec.: Ich würde gerne viele Daten in möglichst kurzer Zeit 
speichern können, bei externem Flash (z.B. AT45xx) schreckt mich die 
Zeit zum Löschen (7-23s Chip Ersase laut Datenblatt). Da eine SD-Karte 
auch Flash benutzt, dürfte das ja ähnlich sein oder sehe ich das falsch?

@ Bernhard, Martin: Danke für die Hinweise, das erleichtert den Anfang.


Inzwischen überlege ich, ob ich nicht gleich zu einem der neuen kleinen 
ARMs wechsel - z.B. den Cortex M3 finde ich sehr nett.

Nochmal Danke für die Anregungen!

Nicolas

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.