Forum: Mikrocontroller und Digitale Elektronik ARM-DMA Memory_Mapping


von Stefan (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.