ARM-DMA Memory_Mapping

Gast #3870011
Lesenswert?

allo zusammen. Vorweg kurz mein Projekt und das dabei auftretende 
Problem:

Ich will mit einem atsam3x8e ein 4MHz PWM-Signal erzeugen. Dabei sollen 
nur eine bestimmte Anzahln an Pulse erzeugt werden, und danach sofort 
ein Ausgang (ein anderer Ausgang als die PWM-Ausgänge) geschaltet 
werden.
Für einen Interruptbetrieb oder Polling ist das Signal zu schnell. Also 
bin ich auf DMA umgestiegen. Einen DMA-Controller hat der Sam3x8e ja 
gleich mit dabei.

Kurz für die, die sich nicht mit DMA auskennen: Man übergibt dem 
DMA-Modul eine Sourceaddresse und eine Destinationaddresse. Das Modul 
schickt dann die Daten der Sourceaddresse entweder sofort oder 
Eventgesteuert von Source nach Destination.

Nun mein Problem: Das DMA-Modul unterstützt folgende Modi, entweder 
bleiben Source - und Destinationaddresse immer gleich, oder eine der 
beiden bzw. beider werden nach einem Transfer 
incrementiert/decrementiert.

Da ich ja nun mehrere Daten zu übergeben haben (PWM Periode, Dutycycle, 
Ausgang am Ende auf High), brauche ich also die Modi mit 
incrementieren/decrementieren.

So weit so gut, für eine Source/Destination funktioniert das ganze 
super. Also z.B

DMA->Source = &Senden;
DMA->Dest = &Empfangen;

Nur mal vereinfacht zum Verständnis.

Nun sind ja leider die Register für Periode, Dutycycle, Port nicht alle 
schön hintereinander.

Ich habe jetzt an eine Art Mapping gedacht, also i.wie ein Struct oder 
ein Array, in das ich die einzelnen Addressen von Port, Dutycycle usw 
schreibe (als Pointer vielleicht???) und dann die Addresse des 
Structs/Arrays an mein DMA übergebe.

Wäre das machbar oder hat jemand eine andere Idee??

Bin für jede Hilfe dankbar.

Mit freundlichen Grüßen

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