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
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?
strange question schrieb: > Hat jemand einen Ansatz wie ich den Startpointer vorgeben kann? Kann man dem DMA nicht einfach die Memory Adresse von dem Array aus dem Flash geben? Sollte doch gehen.
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.
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.