Forum: Digitale Signalverarbeitung / DSP / Machine Learning ADSP-21369 - Anfängerfrage


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Markus W. (zimmerkommandant)


Lesenswert?

Hallo alle miteinander!

Für ein Projekt an der Uni habe ich einen 3-Band-EQ in MATLAB/Simulink 
entworfen und möchte diesen nun auf dem ADSP-21369 SHARC-Prozessor 
implementieren, um dann später den BTC einzubinden. Der code der 
Filterfunktion wurde mit dem Embedded Coder von MATLAB bereits 
generiert.

Ich habe allerdings so gut wie gar keine Ahnung von DSP-Programmieren 
bzw. Hardware naher Programmierung und scheitere an folgendem einfachen 
Problem:

Wie funktioniert denn das, dass ich (in C wohlgemekert!), mein Audio 
Signal einlesen und wieder Ausgeben kann? Ich vermute mal ich brauche 
das headerfile des 1835 codecs und dann kann ich einfach über eine 
Variable auf den Eingang zugreifen oder wie? muss ich hier eine schleife 
deklarieren (wird ja sampleweise eingelesen oder?)? Ist das Signal da, 
mache ich einfach einen interrupt und rufe meine Filterfunktion auf und 
gib das ganze an den Ausgang oder wie?

man findet in den ganzen Beispielprogrammen & unterlagen nur 
assemblercodes, ich würde aber was in C brauchen. gibt es hier 
irgendwelche tutorials oder dokumentationen oder tipps im Netz? habe 
lange gesucht, jedoch nicht wirklich was brauchbares gefunden...

vielleicht hat ja jemand von euch was, um mir etwas auf die Sprünge zu 
helfen...

Dank und freundlicher Gruß,

Markus

: Verschoben durch Admin
von Kurt H. (Firma: KHTronik) (kurtharders)


Lesenswert?

Hallo Markus,
die Daten des Codec werden wohl als I2S-Datenstrom eintreffen. Du kannst 
diese Daten entweder per DMA oder in einer Interrupt-Routine 
verarbeiten. In jedem Fall erfolgt irgendwann ein Interrupt, der die 
Verfügbarkeit der Daten anzeigt. In dieser Interrupt-Routine rufst Du 
dann Deine Filterfunktion auf und speicherst den Wert.
Für die Ausgabe kannst Du genau so vorgehen und im Interrupt die Daten 
bereitstellen.
Beispiel der Interruptroutinen für den ADSP21261:
1
void SPORT_handleSPORT0Interrupt(int sig, void *pCBParam) {
2
  int audioData;
3
  int finalSample;
4
  float outSample;
5
  float originalSample;
6
7
// Erkennung linker oder echter Kanal
8
9
   int lrInput = *pDAI_PIN_STAT;
10
     lrInput &= LR_CLOCK;
11
  audioData = *pRXSP0A;
12
  audioData &=0x01ffffff;
13
  if (audioData & 0x00800000) {
14
    audioData |= 0xff000000;
15
  }
16
  originalSample = (float)audioData * inversFullRange * boost * HEADROOM;
17
        outSample = Filterbank_execute(originalSample, lrInput);
18
  outSample = SoundController_execute(outSample, lrInput);
19
  finalSample = (int)(outSample * fullRange);
20
  if (lrInput == 0) {
21
    lastRight = finalSample;
22
  } else {
23
    lastLeft = finalSample;
24
  }
25
}
26
27
void SPORT_handleSPORT1Interrupt(int sig, void *pCBParam) {
28
  int lrOutput = *pDAI_PIN_STAT;
29
     lrOutput &= LR_CLOCK;
30
  if (lrOutput == 0) {
31
    *pTXSP1B = lastLeft;
32
  } else {
33
    *pTXSP1B = lastRight;
34
  }
35
}
Dieser Code stammt aus meinem Verstärker KlarerTon dessen Filter in 
Filterbank_execute (12 IIR-Peaking Filter) und dem "Klangregler" 
SoundController_execute implementiert sind.
Es gibt auch einige C-Beispiele von AD. Als weitere Quelle kann ich das 
Forum von AD dringend empfehlen: da werden Sie geholfen. :-)
Viel Erfolg und Spaß, Kurt

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.