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