Hallo, ich habe ein kleines Problem und mir fällt nichts mehr ein. Folgendes ist die Situation: Ich habe ein Display mit einem 16bit Parallel-Datenbus. Das Display ist an einem XMega128a1u angeschlossen. Wenn die Daten anliegen muss ein eine steigende Flanke am WR Pin des Displays gelesen werden Derzeitig übertrage ich die Daten regulär per CPU. Da mir das aber nicht effizient genug ist möchte ich die Daten lieber mit Hilfe des DMACs übertragen. Dazu möchte ich einen Timer so programmieren das er WR Pin toggelt und dann den DMA controller anstösst neue Daten zu übertragen. Ich habe selbiges schon einmal mit einem 8Bit Datenbus gemacht und erzielte ein sehr gutes Ergebnis. Dort konnte ich einfach die Ziel Adresse unverändert lassen. Das Problem ist jedoch das jetzt eine Ausgabe auf 2 Ports nötig ist. Wenn diese sequenziell im Speicher liegen würden, wäre das kein Problem, dann liesse sich dies durch ein 2 Byte burst Transfer bewerkstelligen. Dies ist leider nicht der Fall. Die einzige Lösung die mir bisher eingefallen ist, ist folgende: Ich Kopiere die Daten in 2 Byte Blöcken mittels DMA burst Transfer irgendwo im Speicher ab. Sobald die Bytes angekommen sind benutzte ich 2 weitere DMA Kanäle um die von dem Abgeschlossenen Burst-Transfer getriggert werden um jeweils eines der Bytes in das richtige IO-Register weiter zu leiten. Das müsste funktionieren ist mir aber wirklich zu umständlich. Aber ich kann möchte noch nicht akzeptieren das es keine andere Lösung geben soll. Meine guten Ideen die ich nicht realisieren konnte: Am besten wäre es wenn man diese Ports einfach irgendwie so Remappen könnte das die OUT-Register sequenziell im Speicher liegen. Oder den DMAC so zu manipulieren das er immer nur jedes zweite Byte liest. Dann liesse sich das mit 2 DMA-Kanälen ermöglichen. Vielen Dank für eure Hilfe PS: Ich habe natürlich auch schön darüber nachgedacht ein extra Latch zu nutzen das ich über einen weiteren Timer triggere. So das ich dann alle Daten auf ein PORT Register kopieren kann. Aber ich möchte ungerne eine weitere Platine ätzen, ausserdem gefallen mir die Latenzen nicht. :(
Das Problem habe ich selbst gelöst: Beitrag "Grafikdisplay mit SSD1289 mit XMEGA, DMA und 16bit Interface sehr schnell"
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.