Forum: Mikrocontroller und Digitale Elektronik STM32F103 DMA Geschwindigkeit


von Leopold N. (leo_n)


Lesenswert?

Hallo zusammen,

hab gerade einen Test mit der DMA vom STM32F103C8T6 gemacht.
Zwei Arrays mit 1024 Words (32Bit) angelegt und eines mit Zahlenmuster 
gefüllt.
Dann DMA angeschmissen und kopieren gesagt.
Im Debugger geschaut, wie lange es dauert, bis die DMA den ganzen 
Krempel kopiert hat.
Ergebnis: Vom STR Befehl zum Enablen des DMA Channels bis zum nächsten 
Befehl (STR dauert 2 Takte, FCPU = 72MHz) waren alle Daten kopiert.
Das entspricht einer Datenrate von 1024 * 4 Bytes / 27,78ns = 147,456 
GB/s.

Das kommt mir spanisch vor.
Datenübertragung natürlich MEM2MEM.
Habe ich was falsch gemacht bei der Messung oder läuft die DMA trotz 
Breakpoint weiter?
Wo steht, wie schnell die DMA maximal ist?

Grüße

von Dr. Sommer (Gast)


Lesenswert?

Leopold N. schrieb:
> läuft die DMA trotz Breakpoint weiter?

Ja natürlich. Die läuft unabhängig vom Prozessor-Kern. Ich würde 
vermuten dass die DMA Einheit ein Element (1,2,4 Bytes, je nach 
Einstellung) pro Takt (AHB) kopiert.

von Leopold N. (leo_n)


Lesenswert?

Dr. Sommer schrieb:
> Leopold N. schrieb:
>> läuft die DMA trotz Breakpoint weiter?
>
> Ja natürlich. Die läuft unabhängig vom Prozessor-Kern. Ich würde
> vermuten dass die DMA Einheit ein Element (1,2,4 Bytes, je nach
> Einstellung) pro Takt (AHB) kopiert.

Schade...hatte mich schon gefreut :)

Naja, danke für die Antwort.

Grüße

von Echtzeit (Gast)


Lesenswert?

Leopold N. schrieb:
> STR dauert 2 Takte

Außerdem: Wie lange ein STR dauert hängt von vielen Umständen ab. Ein 
STM32F1
ist kein ATMega.

von STM Apprentice (Gast)


Lesenswert?

Wenn ich wissen will wie lange "etwas" dauert dann setze ich
zu Beginn des fraglichen Vorgangs einen Portpin und setze ihn
an Ende wieder zurück. Die Zeit zwischen den Flanken messe
ich dann mit dem Oszilloskop aus.

Wenn ich kein Oszilloskop habe dann kann ich den DWT Cycle
Counter verwenden um die Anzahl der Taktzyklen zwischen
Beginn und Ende "auszuzählen".

von Jan (Gast)


Lesenswert?

Man kann aber auch Timer etc beim debuggen anhalten. 
https://stm32f4-discovery.net/2015/07/disable-peripherals-in-debug-mode-on-stm32f4xx/

Ob's für den dma auch geht weiß ich leider nicht

von pegel (Gast)


Lesenswert?


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