Forum: Mikrocontroller und Digitale Elektronik STM32F7 - Wie Echtzeitdatenverarbeitung realisieren?


von Solocan Z. (solocan)


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?

: Bearbeitet durch User
von Micha (nichtgast)


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

von Solocan Z. (solocan)


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?

: Bearbeitet durch User
von Micha (nichtgast)


Lesenswert?

Solocan Z. schrieb:
> 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.

So so. Ich sehe da nur Sampleraten und Puffergrößen. Wie lang die 
maximale Anwortzeit von deinem System ist steht da nicht.

von Micha (nichtgast)


Lesenswert?

Solocan Z. schrieb:
> Ändert sich da was also im
> theoretischen Ablauf?

Huch vergessen zu antworten.

nö. :)

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
Noch kein Account? Hier anmelden.