Forum: Mikrocontroller und Digitale Elektronik XMega Daten mit DMA über SPI empfangen


von Nicolas (Gast)


Lesenswert?

Hi Leute,

ich habe bisher im Forum nur Threads darüber gefunden wie man mittels 
DMA Daten über SPI senden kann. In meinem Fall möchte ich aber welche 
von einem anderen Mikrocontroller empfangen. Ich kriege also durchgehend 
Bytes gesendet und möchte diese ohne irgendwelche Interruptroutinen oder 
besondere Teile im Hauptprogramm, was schon stark ausgelastet ist, in 
ein Array schreiben lassen, was ich dann ab und an schnell komplett 
abarbeiten kann. Dabei darf ruhig, falls das Ende des Arrays erreicht 
ist, wieder von vorne angefangen werden es zu beschreiben. Das Auslesen 
wird dann immer noch häufig genug von statten gehen können, dass nichts 
ungelesenes wieder überschrieben wird.

Jetzt habe ich selbst allerdings noch nie weder mit DMA noch mit UART 
gearbeitet und bräuchte ein paar Anhaltspunkte, Tipps und Tricks, oder 
gerne auch komplette Codebeispiele, die ich durchackern kann.

Ich würde mich freuen, wenn ihr mir helfen könnt.

Vielen Dank und Grüße,
Nicolas

von Markus M. (adrock)


Lesenswert?

...versuch's doch einfach mal :-) Schau Dir die Manuals von Atmel an und 
es gibt zum XMega auch eine AppNote für den DMA-Controller. Wenn Du 
nicht die fertigen Driver verwenden willst, kannst Du da auch einfach 
mal in den Source reinschauen um Ideen zu bekommen wie es funktionieren 
kann.

Ich habe dem DMA-Controller bis jetzt noch nicht verwendet, aber in der 
Doku sah es nicht (zu) kompliziert aus. Wichitg dürfte sein die 
DMA-Adressregister in der richtigen Reihenfolge zu füllen... aber wie 
gesagt, schau einfach mal in den Driver-Code aus der AppNote AVR1304 ...

Grüße
Markus

von Basti (Gast)


Lesenswert?

Hallo,

einfach dest und source addressen tauschen und als trigger den receive 
"event" verwenden und ganz wichtig USART SPI verwenden, sonst wirds 
nichts...

Im Interrupt des DMAs kannst du dann sagen, dass er von vorn anfangen 
soll und deinem Hauptprogramm verklickern, dass der Buffer voll ist.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Master-SPI mit DMA geht nicht (jedenfalls nicht ohne Umwege, da es 
keinen direkten Trigger gibt). UART im Master-SPI-Mode mit DMA geht.

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.