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
...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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.