STM32F7 - Wie Echtzeitdatenverarbeitung realisieren?

OP #5722634
Lesenswert?
• ▲
▼
Ich muss einen einfachen Echtzeit-Audio-DSP bauen. Jetzt frage ich mich, 
wie ich das mit dem STM32F7 am besten realisieren soll. Ich habe vor, es 
mit 2x Doppelpuffern mit DMA und Interrupts zu machen, weil STM32F7 
angeblich 2 DMA-Kanäle mit doppeltem Puffer unterstützt.

ADC-Puffer: |----Pufferhälfte 1----|----Pufferhälfte 2----|
DAC-Puffer: |----Pufferhälfte 1----|----Pufferhälfte 2----|

Der Ablauf stelle ich mir folgendermaßen vor:

1. CODEC, SAI, DMA, Interrupts etc. konfigurieren. Sagen wir mal 
16bit/48kHz mit 1ms Puffer: Eine Pufferhälfte wäre dann: 
48Khz*1e-3*2Byte=96Bytes.
2. ADC schreibt über SAI-DMA im Hintergrund in die erste 
ADC-Pufferhälfte. Wenn die erste ADC-Pufferhälfte voll ist, wird ein 
Interrupt ausgelöst. (DMA schreibt dann weiter in die zweite 
ADC-Pufferhälfte.)
3.Nachdem das Interrupt ausgelöst wurde, liest die CPU/FPU die Daten der 
ersten Pufferhälfte und verarbeitet sie. (Sagen wir einfach, wir 
halbieren die Amplitude: temp[i]=temp[i]/2 und brauchen keine weitere 
Komprimierung etc.)
4. CPU schreibt den verarbeiteten Datensatz in die erste 
DAC-Pufferhälfte.
5. DMA liest im Hintergrund die Daten aus der ersten Hälfte DAC-Puffer 
und schickt sie weiter an DAC.
6. Irgendwann wird wieder ein Interrupt ausgelöst, weil die zweite 
ADC-Pufferhälfte voll ist.
7. Es geht mit dem Schritt 3 weiter, es werden nur Speicherhälften 
getauscht.


Ist das ein vernünftiger Ansatz? Oder gibt's noch vernünftigere Ansätze 
für so was?
#5722651
Lesenswert?
• ▲
▼
Moin,


fang erst damit an, wie lange für dich Echtzeit ist. Wenn du die 
maximale Antwortzeit für dein System bestimmt hast, kannst du überlegen, 
was du in dieser Zeit unterbringen kannst.

Der reine Ablauf, den du oben beschreibst hat erst mal nichts mit 
Echtzeit zu tun.

Hier was zum lesen. Wie es aussieht weist du gar nicht, wovon du redest 
:)
https://de.wikipedia.org/wiki/Echtzeit
OP #5722669
Lesenswert?
• ▲
▼
Keiner N. schrieb:
> Wie es aussieht weist du gar nicht, wovon du redest
> :)

Warum genau? Echtzeit ist (wie auch in deinem Link beschrieben) eine 
Definitionssache. Und das habe ich im Punkt 1 ansatzweise definiert. CPU 
hat für die gesamte Datenverarbeitung natürlich nur insgesamt soviel 
Zeit wie eine Pufferhälfte. Abgesehen davon ist die Puffergröße je nach 
Anwendung veränderbar. Wenn es unbedingt wichtig ist, sagen wir mal 
angepeilt ist 5-6ms totale Verzögerung. Ändert sich da was also im 
theoretischen Ablauf?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.