STM32F4 falsche DMA-Werte zu Beginn des Transfers

Gast #4006957
Lesenswert?

Hi,

ich lese mit dem STM32F4 Discovery Werte von einem Port ein. Das Ganze 
passiert getaktet auf 14 MHz und damit das so schnell auch funktioniert 
benutze ich DMA um die Daten von der Peripherie in einen Buffer zu 
übertragen.

Im Großen und Ganzen funktioniert das alles recht zuverlässig und 
stabil, nur eine Sache kann ich mir nicht so recht erklären.

Ich gehe folgendermaßen vor: Ich generiere mir ein Testsignal, das ich 
genau kenne und lese dieses per DMA ein. Anschließend sehe ich im 
Debugger nach, ob alles passt. Und von den ca. 8000 Werten sind auch 
7990 ok. Nur die ersten 5-10 Werte am Anfang des DMA-Transfers sind 
nicht zuverlässig richtig, die ersten drei sind sogar so ziemlich immer 
falsch. Nur eben nie gleich falsch. Eher sowas wie ein Wert taucht 
dreimal auf. Wenn ich z.B. Zahlen 1-8000 übertrage kommt sowas raus: 
1,2,2,2,5,6,7,8,9,10... oder 8,1,1,1,3,6,7,8,9,10... danach ist dann 
alles gut.

Der DMA-Stream ist schon lange "enabled", bevor das eigentliche Signal 
ankommmt. Das Einzige, was mit dem ersten DMA-Wert gestartet wird, ist 
ein Timer, der an den Daten-Clock-Pin gekoppelt ist, um die Anzahl der 
eingelesenen Werte hochzuzählen und den DMA-Transfer immer bei einer 
steigenden Clock-Flanke auszulösen. Könnte es sein, dass dieser Timer 
den Transfer der ersten paar DMA-Werte behindert?

Ich stecke nicht tief genug in der Thematik drin um das beurteilen zu 
können und wäre daher für Ideen dankbar :-)
Gast #4007705
Lesenswert?

Hi!

nur mal ins Blaue geraten: Hängt DMA und die Ports an unterschiedlichen 
Clocks? Stichwort APB und AHB. Eventuell kommt es da um ein paar Takte 
Versatz.

Liest du einen 8 Bit Port ein? Das würde bedeuten, der könnte den 
FIFO-Mode verwenden, der unter Umständen zu fehlerhaften Daten führt.
Den kannst du testweise ausschalten:
"In direct mode (when the DMDIS value in the DMA_SxFCR register is ‘0’), 
the threshold level of the FIFO is not used: after each single data 
transfer from the peripheral to the FIFO, the corresponding data are 
immediately drained and stored into the destination."

Im Reference Manual RM0090 sind in Kapitel 10.3.10 mehr Hinweise.

Gruß
Stefan

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren