XMega Daten mit DMA über SPI empfangen

Gast #2991154
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
#2991444
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
Gast #2991456
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.

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