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