Hallo, ich wollte mein Counter vom DMA Stream resetten oder auf ein bestimmten Wert schreiben, ohne den Stream neu zu initialiseren. Ich mache es aktuell so: // Dma deaktivieren. DMA_Cmd(Handle->usart_board->ReceiverDmaStream, DISABLE); // Flags löschen. USARTGetDma( Handle->usart_board->ReceiverDmaStream )->LISR = 0x00000000; USARTGetDma( Handle->usart_board->ReceiverDmaStream )->HISR = 0x00000000; USARTDmaClearAllFlags( Handle->usart_board->ReceiverDmaStream ); // Counter umsetzen auf die übergebene Anzahl. DMA_SetCurrDataCounter(DMA2_Stream6, (uint16_t) (Handle->rxSize)); // Dma wieder aktivieren DMA_Cmd(Handle->usart_board->ReceiverDmaStream, ENABLE); _________________________________________________________ Handle->usart_board->ReceiverDmaStream ist mein aktueller DMA Stream. Handle->rxSize ist meine aktuelle Size auf die der Counter vom DMA gesetzt werden soll. Die Funtkion "USARTDmaClearAllFlags" löscht die Flags DMA_FLAG_FEIFx, DMA_FLAG_DMEIFx, DMA_FLAG_HTIFx und DMA_FLAG_TCIFx Flag von dem jeweiligen DMA Stream. Aktuell ist mein Problem, dass der DMA Stream manchmal nicht gleich wieder aktiviert wird und das ich vom USART ein OverRun Error bekomme. Könnt Ihr mir vielleicht helfen wo mein Fehler ist?
ja, steht irgendwo in der doku. Nur Disable reicht nicht. Du musst in einer Schleife prüfen, ob die DMA auch wirklich aus ist. Ich such mal ob ich die Stelle finde.
z.b. hier: "If the stream is enabled, disable it by resetting the EN bit in the DMA_SxCR register, then read this bit in order to confirm that there is no ongoing stream operation. Writing this bit to 0 is not immediately effective since it is actually written to 0 once all the current transfers have finished. When the EN bit is read as 0, this means that the stream is ready to be configured."
Hallo, Danke für die schnelle Antwort. Ich habe es jetzt so umgesetzt und auch nochmal in der Dokumentation nachgelesen und es funktioniert. Dankeschön hat mir viel geholfen : )
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.