www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik XMEGA DMA mit PROGMEM moeglich?


Autor: Avr Noob (balze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen.

Ich moechte gerne ein Array moeglichst schnell auf einem Port ausgeben.

Das Array ist zu gross fuer das RAM und muesste deshalb im Flash landen.

Kann man per DMA auf diesen Bereich zugreifen?

Ich habe die Forensuche und Suchmaschinen versucht, aber keine 
Informationen hierzu gefunden.

Ueber jeden Hinweis, Link, SuchmaschinenEingabefeldText wuerde ich mich 
sehr freuen.

Danke, schoenen Gruss,

Balze aka AVR Noob

P.S.: Mir ist klar, dass es sicherlich elegantere Moeglichkeiten als die 
von mir oben beschriebene gibt. Mir geht es hier darum ob und wie es 
generell moeglich ist mit einem XMEGA per DMA auf den Flashbereich 
zuzugreifen.

Beitrag #2115448 wurde vom Autor gelöscht.
Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Avr Noob schrieb:
> Das Array ist zu gross fuer das RAM und muesste deshalb im Flash landen.
>
> Kann man per DMA auf diesen Bereich zugreifen?

Nein. Du kannst aber per DMA einen RAM-Block ausgeben und per 
DMA-Interrupt einen Block aus dem Flash in den RAM-Block kopieren.

Avr Noob schrieb:
> Mir geht es hier darum ob und wie es
> generell moeglich ist mit einem XMEGA per DMA auf den Flashbereich
> zuzugreifen.

Nein, wie gesagt, ist das nicht möglich.

Autor: Avr Noob (balze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Knut,

vielen Dank fuer die schnelle Antwort.
Auch wenn sie wenig erfreulich ist.

Kannst Du mir eine Quelle nennen, in der ich das nachlesen kann?
Ich moechte das gerne verstehen.

MfG,

Balze aka AVR Noob

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

Bewertung
0 lesenswert
nicht lesenswert
Avr Noob schrieb:
> Kannst Du mir eine Quelle nennen, in der ich das nachlesen kann?
> Ich moechte das gerne verstehen.

Das XMEGA-A-Manual.

http://www.atmel.com/dyn/resources/prod_documents/...

Autor: Avr Noob (balze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Knut,

:)

Danke fuer den Link   :)

Dieses Dokument ist mir sehr wohl bekannt. Nur habe ich die Stelle an 
der steht das DMA mit Flash nicht moeglich ist nicht gefunden (oder es 
nicht verstanden. Bin eben trotz meines fortgeschrittenen Alters 
immernoch ein Noob :)

MfG,

Balze aka AVR Noob

Autor: Avr Noob (balze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Knut Ballhause schrieb:
> .... und per
> DMA-Interrupt einen Block aus dem Flash in den RAM-Block kopieren.

Damit meinst Du in einer ISR und pgm_read_byte ?

MfG,

balze aka AVR Noob

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

Bewertung
0 lesenswert
nicht lesenswert
Avr Noob schrieb:
> Damit meinst Du in einer ISR

Ja.

Avr Noob schrieb:
> und pgm_read_byte

Was auch immer das sein mag. In ASM lade ich den Z-Pointer mit der zu 
lesenden Flash-Byte-Adresse und führe den Befehl "LPM" aus. Der 
X-Pointer zeigt auf die jeweilige RAM-Puffer-Adresse. Beide werden nach 
der Operation incrementiert. Das mache ich beispielsweise 16x, dann habe 
ich für die Zeit von 16 DMA-Triggern Ruhe. Über geschicktes Kombinieren 
von DMA-Ausgaben und zeitversetzt nachladendem Interrupt kann der 
Controller in der Zwischenzeit noch viele andere Dinge treiben...

Autor: Michael K. (mmike)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe http://www.atmel.com/dyn/resources/prod_documents/...

Section 2.1.2

Grüße,
Michael

Autor: Avr Noob (balze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke fuer Eure Infos!

Ich glaube allmaehlich, dass man die µCs besser versteht, wenn man sie 
mal mit ASM programmiert hat.

*Ich trau mich nicht. Ich glaub dafuer bin ich zu alt.*
(Immerhin gab's damals meine ersten ASM Enttaeuschungen auf einem Apple 
II+ Klon)

Die Applcation Note ist sehr interessant.
Warum steht soetwas nicht im Datenblatt (Oder bin ich nur 
betriebsblind?) ?

Danke,

schoenen Gruss,

Balze aka AVR Noob

Autor: Michael K. (mmike)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man ASM kann ist es manchmal sicherlich von Vorteil, aber ich kanns 
leider auch nicht. Wenn ich in C mal ein Problem habe, dann wühle ich 
mich durch die map-Datei und versuche die asm Befehle nachzuvollziehen. 
Mit mehr oder minderem Erfolg.
Das Datenblatt beschreibt ziemlich genau wie alles funzt und welche 
Register es gibt, aber für die eigentliche Anwendung, sind die 
Application Notes m.E. sehr sehr wertvoll. Da bekommt man immerhin schon 
mal einen Eindruck, was man machen kann ...

Ich bleib dennoch bei C, auch wenn ich manchmal sehr bewundere, was 
andere in ASM an Fähigkeiten und Leistung aus so einem "kleinen" Chip 
rauskitzeln.

Grüße,
Michael

Autor: Heiko VG (xmegaman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Avr Noob schrieb:
> Ich moechte gerne ein Array moeglichst schnell auf einem Port ausgeben.
>
> Das Array ist zu gross fuer das RAM und muesste deshalb im Flash landen.
>
> Kann man per DMA auf diesen Bereich zugreifen?
>

Kann man leider nicht :-(

Das liegt daran, dass die AVRs immer einen getrennten Daten- (SRAM, IO 
und beim XMEGA auch EEPROM) und Programm-Bereich (FLASH) haben (tinies 
und megas haben sogar noch einen dritten Bereich: EEPROM). Beide 
Bereiche fangen an der Adresse 0 an. Der DMA-Controller kennt nur 
Adressen und könnte somit nicht unterscheiden, welcher Bereich gemeint 
ist. Deshalb: DMA geht immer vom Datenbereich aus.

Um größere Datenblöcke per DMA auszugeben, bleibt nur eine Möglichkeit:
Externes RAM -> teuer und platzintensiv, geht nur mit großen (viele 
Pins) Xmegas

Blockweise vom Flash ins RAM kopieren und dann per DMA raus ist 
unsinnig, da das Kopieren länger dauert als die Ausgabe...

MfG,

Xmegaman

Autor: Colmar Hinnrichs (Firma: Magnicon) (colmar)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Avr Noob,

ich habe neulich zufällig genau das von Dir gefragte mal runtergetippt 
um den XMega besser zu verstehen. Ich hatte mir die PCM Daten aus ´ner 
WAV Sounddatei in den flash geschrieben und per DMA auf den on-chip DAC 
geschaufelt. Wie schon oben beschrieben geht das nur über einen RAM 
buffer. Das Kernstück davon hänge ich hier an. Das war wie gesagt nur 
zum Spielen und ist daher nicht kommentiert oder gar ausgiebig getestet. 
Vielleicht hilft Dir das trotzdem weiter. (P.S.: keine Angst vor 
Assembler: macht Spaß!)

Colmar

Autor: Avr Noob (balze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

vielen Dank fuer Eure Beitraege !!

@Michael:
Wahrscheinlich hast Du Recht und es ist alles vernuenftig im Datenblatt 
beschrieben. Aber wer hat das schon ganz gelesen und hat sich alles 
gemerkt.
Ich kann das jedenfalls nicht (mehr! - Auf mein fortgeschrittense Alter 
habe ich ja bereits hingewiesen ;-)
Ohne AppNotes haette ich vermutlich noch kein laufendes XMEGA Programm. 
:)
Aber (siehe oben) wer hat die schon alle gelesen und behalten ?!

@Xmegaman:
Danke fuer diesen Hinweis. Dies macht mir die Sache klarer.

@Colmar:
Ich kann Dein Beispiel im Moment nicht nachvollziehen, da ich Urlaub 
habe (4 Wochen :) !! )
Wenn ich wieder in der Firma bin, werde ich mir das genauer ansehen. 
Vielen Dank !

MfG,

Balze aka AVR Noob

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.