Forum: Mikrocontroller und Digitale Elektronik DMA one shot mode


von D. I. (Firma: Fa) (buell)


Angehängte Dateien:

Lesenswert?

Hallo

Es gibt ja den DMA one shot mode und den continuous.
Wenn ich jetzt zB 20 Werte habe, die ich konvertieren möchte und nach
einer gewissen Zeit wieder 20Werte konvertieren möchte usw. Also immer
nach einer gewissen Zeit die gleiche Anzahl an Daten.
Dann eignet sich der one shot mode dafür, richtig?

Ich habe nämlich keine Daten, die ich kontinuierlich umwandeln muss.

von Christopher J. (christopher_j23)


Lesenswert?

Was du suchst ist ein Timer im "one pulse mode" (OPM), was eigentlich 
besser " n-pulse mode" heißen sollte, da die Anzahl der Pulse 
einstellbar ist. Du stellst deinen Timer also auf OPM und 20 
Wiederholungen ein und mit diesem Timer triggerst du deinen ADC und mit 
diesem dann DMA.

von D. I. (Firma: Fa) (buell)


Lesenswert?

Christopher J. schrieb:
> Was du suchst ist ein Timer im "one pulse mode" (OPM), was eigentlich
> besser " n-pulse mode" heißen sollte, da die Anzahl der Pulse
> einstellbar ist. Du stellst deinen Timer also auf OPM und 20
> Wiederholungen ein und mit diesem Timer triggerst du deinen ADC und mit
> diesem dann DMA.


Ja genau so habe ich es und wenn der ADC den DMA steuern soll, dann muss 
ich doch unter Managing conversions using the DMA (S.399 oben im Anhang) 
das DMACFG bit für den single ADC mode wählen, oder nicht?

Two different DMA modes are proposed depending on the application use 
and are configured with bit DMACFG of the ADCx_CFGR register in single 
ADC mode, or with bit DMACFG of the ADCx_CCR register in dual ADC mode:
• DMA one shot mode (DMACFG=0).
This mode is suitable when the DMA is programmed to transfer a fixed 
number of data.
• DMA circular mode (DMACFG=1)
This mode is suitable when programming the DMA in circular mode.

von Christopher J. (christopher_j23)


Lesenswert?

Also wie immer führen viele Wege nach Rom und bei der von mir 
vorgeschlagenen Lösung mit dem OPM Timer sollte es egal sein wie du das 
DMACFG Bit konfigurierst, da ja der ADC direkt über den Timer getriggert 
wird und das eben nur N mal. Du könntest den Timer aber auch einfach 
frei laufen lassen, das DMACFG Bit zu Null setzen und die Größe deines 
Buffers in der DMA entsprechend konfigurieren. Dann hört der ADC auf 
wenn der Buffer voll ist. Setzt du das DMACFG Bit zu 1, dann hört er 
eben nicht auf und beschreibt den Buffer wieder von vorne (circular 
buffer, ring buffer). Wenn du die Anzahl der Wandlungen über die Größe 
deines DMA Buffers festlegst kannst du prinzipiell auch den ADC im 
"Continuous Mode" laufen lassen und dir den Timer komplett sparen, 
sofern es dir nur darum gehen sollte N Wandlungen vorzunehmen und dir 
der zeitliche Abstand relativ egal ist.

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.