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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren