Moin :-) Beim Betrieb des Xilinx Central DMA-Controllers ist mir ein seltsames Verhalten aufgefallen: Ich kopiere Bilder mit Hilfe des DMA-Controllers von einem Speicherbereich in einen anderen Speicherbereich. Diese Speicherbereiche liegen beide in demselben DDR-Speicher, welchen ich mit Hilfe des MPMC anspreche. Die Bilder werden dabei zeilenweise kopiert, ist dieser Vorgang beendet löst der DMA-Controller einen Interrupt aus. Durch diesen Interrupt wird ein Flag gesetzt, woraufhin die Software eine weitere Bildzeile kopieren soll. Da ich einige Fehler hatte, frage ich zu Debug- Zwecken das Statusregister des DMA-Controllers ab. Dabei tritt folgendes Phänomen: Obwohl der DMA-Controller mir ein Interrupt erzeugt, sagt das Statusregister der DMA wäre beschäftigt! Daraufhin habe ich natürlich das Datenblatt noch einmal gelesen. Dieses sagt, dass der Interrupt auslöst wenn ein Vorgang abgeschlossen ist, womit der DMA mit der Arbeit fertig wäre. Das Busy-Bit ist gesetzt, wenn der Vorgang noch nicht abgeschlossen ist. Einen Fehler gibt der DMA nicht aus. Den Interrupt-Handler, sowie die Initialisierung habe ich geprüft. Die Register des DMA-Controllers habe ich per XMD geprüft, auch keine Fehler zu erkennen. Die Hardware-Einstellungen beim DMA-Controller lauten folgend: - Slave und Master an unterschiedlichen PLB’s. - Das Busfrequenzverhältnis von Slave zu Master beträgt 1:2. - Der Master ist am MPMC angeschlossen und keine weiteren Slaves auf diesem PLB. - DMA-Einstellung: FIFO:8 ; Read & Write Burst: 1 (ja das kostet Performance, bei anderen Einstellungen bekomme ich Bildfehler, da er zu viel kopiert) Vielleicht hat ja jemand von Euch eine Idee, ich danke schon einmal im Vorraus.
Der Fragende schrieb: > Beim Betrieb des Xilinx Central DMA-Controllers ist mir ein seltsames > Verhalten aufgefallen: Wie oft tritt den Dein Fehlverhalten auf? Ständig? Gelegentlich? Einmal alle x Zeilen? Duke
Moin, mir ist aufgefallen wenn ich nur sehr kleine Bilder kopiere, von ca. 20x20 Pixel ist alles OK. Wenn aber größere Bilder dabei sind mit 80x80 Pixel wird das Busy-Bit gesetzt. Ich prüfe vor dem Kopiervorgang das Busy-Flag vom DMA-Controller und gebe dann per xil_printf "busy" aus. Es ist mir aufgefallen das nur, so scheint es, während des Kopierens der letzten Bilder das Busy-Flag gestzt wird. Desweiteren schaut es so aus, als ob der DMA-Controller nicht immer einen Interrupt erzeugt, dies kann ich aber leider nicht beweisen. Während des Betriebs werden noch weitere Interrupts erzeugt, den Interrupt Controller habe ich angewiesen alle gesetzen Interrupts abzuarbeiten. Auf den DDR-Speicher greift noch der MicroBlaze und ein VGA-Controller zu. Dem MPMC habe ich eine eigene Arbitration zugewisen: Number of Time Slots: 2 Time Slot 0: 210 Time Slot 1: 120 0=>MicroBlaue 1=>VGA-Controller 2=> ´DMA-Controller Die Einstellung ist so gewählt damit der Bildaufbau und die Ausgabe möglichst zügig abgearbeitet werden.
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.