> Benötigt man einen DMA-Zugriff?
Wenn jemand anders als die CPU in den Speicher schreibt ist das mehr
oder weniger die Konvention, wann es DMA heisst ;) Allerdings solltest
du dir vorher noch überlegen, was für Datenraten du haben willst und
ob die HW wirklich selber an der CPU vorbei in den Speicher schreiben
muss. Bis zu ein paar 100K pro Sekunde wäre es wohl deutlich einfacher,
das Zeug in ein FIFO zu bekommen, das ab einem bestimmten Füllstand
(+Timeout) einen Interrupt auslöst. Die UART macht es ja nicht anders.
Wenn es um MB/s pro Sekunde geht, kommst du um DMA nicht herum, ist aber
auch kein Hexenwerk.
Der MPMC heisst ausgeschrieben "Multi-Port Memory Controller". Von den
Ports werden ein paar (typ. 3) für den Microblaze gebraucht. Du kannst
noch einen dazukonfigurieren und mit der in der Doku beschriebenen Art
auf dem Port Speicherzugriffe durchführen. Es gab früher mal einen
DMA-Controller, weiss nicht, ob der noch existiert. Der könnte dir etwas
Arbeit abnehmen. So ganz ohne eigenen Code wird das aber auch nicht
gehen.
BTW, noch ein Fallstrick: Der Microblaze hat kein Cachekohärenzprotokoll
für DMA. Wenn der per DMA beschriebene Speicher im cachebaren Bereich
ist (wird xps per Default so machen), bekommt der MB nichts von einer
externen Änderung mit, liest also keine neuen Daten. Entweder nimmt man
den Bereich dann im Cachecontroller raus oder der MB muss vor jedem
Zugriff auf den Bereich den Cache invalidieren (__invalidate_icache).