STM32 HAL DMA circular Start an beliebiger stelle im Buffer

Gast #6059085
Hallo ihr wissenden,

Ich habe folgenden Idee, nur bei der Umsetzung hapert es noch ein wenig.

Der Plan ist einen ws2812B Stripe mittels DMA und PWM von einem STM32 
(z.B. STM32F041) zu befeuern, was ja soweit auch kein Problem ist, und 
gut funktioniert.

Da nur fertige Muster ausgegeben werden sollen, diese dann aber 
"durchgeschoben" werden sollen, ist meine Überlegung diese Muster im 
Flash statt im Ram ab zu legen. Nun wäre es schön dem DMA, die 
Bufferadresse und den Startpunkt mit zu geben, beim Ende des Buffers 
soll dieser wieder von vorne beginne (circular mode?).

Nach der Übertragung der Bufferlänge, sollte der DMA dann abgeschaltet 
werden. Die Längenüberprüfung, wird so mit dem DMA nicht funktionieren, 
dieses wäre aber einfach über den Timerinterupt möglich.

Ich verspreche mir davon eine noch geringere CPU Last, als wenn ich das 
mit der 2 x 24Byte Halfcomplete / complete Methode realisiere.

Hat jemand einen Ansatz wie ich den Startpointer vorgeben kann?

LG
Gast
Klingt so, als brauchst Du einen Ring-Puffer im Flash, der dann vom DMA 
benutzt wird.

Ist es nicht einfacher diesen im RAM anzulegen und mit Speicherbereich 
kopieren von der gewünschte Flash Adresse (mit DMA und Überlauf 
Erkennung + 2. DMA Bereich) dorthin zu kopieren?
Gast
Wenn ich noch mal nachdenke, müsste es genauso auch im Flash gehen.

Zwei DMA im Wechsel nacheinander ausgeben.

1. DMA mit der Flash Startadresse füttern, als Länge den Rest bis zum 
Ende des Flash Bereichs angeben.

2. DMA Anfang des Flash Bereichs angeben, die Länge ergibt sich bis zur 
gewünschten Startadresse-1

Das ganze Endlos.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.