Sie sind auf Seite 1von 8

Anbindung des Codecs an den DSP:

Der Codec:

Im Codec (Coder / Decoder) finden die AD- und DA-Wandlung, sowie die analoge
Vorverstärkung der zu verarbeitenden Sprachsignale statt. Dieser Baustein ist über
eine synchrone serielle Schnittstelle, dem so genannten SSI (Synchronous Serial
Interface), mit dem DSP verbunden. Bei der Abtastung der Audiosignale mit 48 kHz
mit einer Auflösung von 16 Bit in Stereo ergibt sich ein serieller Datenstrom von ca.
1,5 MBit / s. Um die Forderung nach einer Echtzeitverarbeitung zu erfüllen, müssen
die digitalisierten Audiodaten ausreichend schnell an den DSP übertragen werden.
Da das zur Übertragung der Daten zwischen Codec und DSP verwendete
Übertragungsprotokoll noch zusätzlichen Overhead benötigt, unterstützt der Codec
zur Übertragung der Daten zum DSP über das SSO Übertragungsraten von bis zu
12,5 MBit / s.

Die einzelnen Leitungen haben folgende Bedeutung:

• RX, TX: Je eine Leitung für die Ein- und Ausgabe der Daten. Die
Übertragung
erfolgt gleichzeitig über beide Leitungen vom (RX) zum (TX)
Codec.
• SCK: Leitung für den Takt der Datenbits.
• D/C~: Leitung zur Unterscheidung zwischen Daten- und Control-
Frames.
• FS: Leitung zur Synchronisierung der Frames.
• Reset~: Resetleitung.
Das Übertragungsprotokoll des Codecs für die Audio- und Steuerdaten setzt sich aus
einzelnen Frames zusammen. Ein solcher Frame untergliedert sich wiederum in acht
Timeslots mit je acht Bit.
Auf dem EVM-Board erzeugt der Codec das Takt- und Frame-Sync-Signal, da diese
Signale synchron zum Arbeitstakt des Codecs sein müssen

Bei den Frames werden je nach Zustand der Leitung D/C~ zwei Typen
unterschieden:
• Controlframes (D/C~ = 0)
• Datenframes (D/C~ = 1)

Mit Controlframes kann der Codec konfiguriert werden. Es werden Einstellungen


übertragen, die sich während des normalen Betriebes nicht ändern, wie zum Beispiel
die Samplingrate oder das Protokoll.

In den Datenframes werden die Amplitudenwerte und Verstärkungsfaktoren


übertragen.

Die Framerate entspricht der Samplewortrate des AD / DA – 7Wandlers. Der Codec


benötigt als 64 Bits – 8 Timeslots mit je 8 Bits – um die Daten einer AD / DA –
Wandlung zu übertragen.
Die synchrone serielle Schnittstelle (SSI):

Der DSP 56002 ist mit einer speziellen Schnittstelle zur Verarbeitung von synchronen
seriellen Daten ausgestattet. Die dazugehörigen Pins befinden sich an Port C.

Prinzipiell besteht das SSI aus zwei Schieberegistern, eines zum Senden und eines
zum Empfangen des seriellen Datenstroms. Zum Senden eines Datenwortes muss
nur der zu sendende Inhalt in das TX-Register geschrieben werden (X:$FFEF). Der
DSP lädt dann die Daten in das Schieberegister und löst einen Interrupt aus (SSI
Transmit Data, P:$0010), und signalisiert damit dass neue Daten in das TX-Register
geschrieben werden können. Wenn die Daten vollständig über die serielle Leitung
gesendet sind, werden die neuen Daten aus dem TX- Register in das
Schieberegister geladen, und es wird wieder ein Interrupt ausgelöst. Sind jedoch
keine neuen Daten im TX-Register, so wird ein „SSI Transmit Data with Exception
Status-Interrupt“ (P:$0012) ausgelöst um auf das Fehlen der Daten hinzuweisen.

Das Empfangen von Daten verläuft analog hierzu. Sind neue Daten im RX-Register
(X:$FFEF, gleiche Adresse wie TX, jedoch Lesezugriff), so wird ein „SSI Receive
Data-Interrupt“ (P:$000C) ausgelöst. Wurden die alten Daten noch nicht gelesen, so
weist ein „SSI Receive Data with Exception Status-Interrupt“ auf den Überlauf hin.

Die Länge des Datenwortes kann 8, 12, 16 oder 24 Bit betragen. Der DSP könnte
also 3 Timeslots der SSI Daten auf einmal einlesen und ausgeben. Da die
Audiodaten 16 Bit breit sind und 64 ein Vielfaches von 16 ist (vgl. Framelänge des
Codecs beträgt 64 Bit!), soll hier mit einer Datenwortlänge von 16 Bit gearbeitet
werden.

Die Konfiguration der Parameter des SSI erfolgt über die beiden SSI Control Register
A und B (CRA/CRB). Der Status des SSI kann über das SSI Status/Time Slot
Register (SSISR/TSR) ausgelesen werden. Des Weiteren müssen im Port C Control
Register (PCC) die SSI Pins auf den SSI-Betrieb umgestellt werden.

Am Port C liegen des Weiteren auch noch die Reset- und die D/C~ -Leitungen (SC0,
SC1 bzw. PC3, PC4). Diese beiden Pins müssen in diesem Fall als normale
Ausgangspins konfiguriert werden, da ihre Kontrolle nicht über das SSI erfolgt.
Implementierung der seriellen Übertragung:

Um eine kontinuierliche Übertragung der Audiodaten zu gewährleisten, wird im X-


Speicher sowohl ein Puffer für die Ein- als auch einer für die Ausgangsdaten
angelegt. Die Interruptserviceroutinen des SSI greifen dann auf diese Datenpuffer
zurück. Der aktuell zu sendende und empfangende Timeslot wird in einem Sende-
und einem Empfangspointer festgehalten.

Die Routine zur Bearbeitung der Daten muss nun den Framesync-Impuls abwarten.
Zum Zeitpunkt seines Auftretens ist der letzte Timeslot des gerade gelesenen
Datensatzes bereits in den Puffer geschrieben. Da der DSP 16 Bit breite Datenwörter
sendet, werden im gleichen Moment die Daten des zweiten Audiokanals in den
Sendepuffer geschrieben, die Datenkonsistenz zwischen linken und rechten Kanal ist
somit gewährleistet.
Das Programm hat nun eine ganze Frameperiode Zeit um die Daten zu verarbeiten

Die Rahmenstruktur des Codec CS 4215

Die Daten- und Steuerworte sind in eine gleich bleibende Rahmenstruktur von 8
Time-Slots zu je 8 Bit eingebettet. Aus dem Bild ist auch gut ersichtlich wie in den
verschiedenen Betriebsarten die Audiodaten formatiert sind (Time-Slots 1 – 4). In den
Time-Slots 5 – 8 wird mit jedem Frame Steuerinformation für die Ein- und
Ausgangsverstärker des Codec übertragen.
Vor der Übertragung der Audiodaten muss der Codec allerdings Initialisiert werden.
Nach Aktivierung der Reset-Leitung (C RST = 0) wird der Codec über das
Steuersignal D/C = 0 in den Kontrollmodus versetzt. Die Initialisierung erfolgt
daraufhin über die seriellen Datenleitungen, wobei die Taktsignale vom DSP
generiert werden (Codec im Slave-Modus). Die Aufteilung des Übertragungsrahmens
entspricht der in ganz unten gezeigten Struktur. ‘Status’-, ‘Data Format’-, ‘Serial Port
Control’- und ‘Test’-Daten werden in der genannten Reihenfolge übertragen. Für eine
genaue Beschreibung der einzelnen Register sei auf das Datenblatt des CS4215
verwiesen, in dem auch der aufwendige Handshake-Vorgang beschrieben ist, der
zum Übergang vom Kontroll- in den Datenmodus und zurück benötigt wird. Nach
dieser Initialisierungsphase wird der Codec schließlich in den Datenmodus versetzt.
Die Taktsignale werden in diesem Zustand vom Codec generiert, der somit Master
ist. Die Abtastrate (48 kHz) wird von einem Quarz an den Anschlüssen XTAL2
abgeleitet.

Konfiguration der SSI-Schnittstelle:

In jedem Frame werden vom DSP 64 Datenbits empfangen und gesendet. Dazu
wurde die SSI-Schnittstelle so konfiguriert, dass pro Frame 4 Time-Slots zu je 16 Bits
übertragen werden.
Nachdem 16 Bit in das ‘Serial Receive Shift Register’ eingetaktet wurden (über SCK)
wird der Inhalt des Schieberegisters zur Pufferung in das ‘Serial Receive Data
Register’ (SSIDR) übertragen und ein Interrupt ausgelöst. In der reservierten
Speicherstelle p:$000C steht die Einsprungadresse der Interrupt-Routine, die den
empfangenen Wert in eine von vier aufeinander folgende Positionen des X-Speichers
schreibt, wo sie in der in gezeigten Reihenfolge zur Weiterverarbeitung bereitstehen.
In ähnlicher Weise werden von der Transmitter-Interrupt-Routine die Inhalte dieser
Pufferspeicher in das ‘Serial Transmit Data Register’ (SSIDR) geschrieben und durch
das Framesignal synchronisiert weiter übertragen.

0 1 2 3
X:0 RX_data_1_2 RX_data_3_4 RX_data_5_6 RX_data_7_8 Empfangspuffer
↑ RX_BUFF_BASE

4 5 6 7
X:4 TX_data_1_2 TX_data_3_4 TX_data_5_6 TX_data_7_8 Sendepuffer
↑ TX_BUFF_BASE

8 9 10 11
X:8 RX_PTR TX_PTR Puffer f. R0 Puffer f. M0
Receive Interrupt Routine

Die ersten vier Zeilen der Interrupt-Routinen sichern die aktuellen Werte der
Adressregister R0 und M0 in den reservierten Speicherstellen x:10 und x:11. Danach
werden diese Register mit einem Zeiger geladen, der auf die nächste Speicherstelle
des Empfangspuffers weist (RX_PTR). Die Frame-Synchronisation erfolgt über die
Frame Sync Impulse. Das Frame Sync Signal geht vor dem ersten Time-Slot ein Bit
lang auf High und setzt das Receive Sync Flag (RSF, Bit 3 des SSISR-Registers).
Beim Auslesen wird das RSF automatisch zurückgesetzt. Ist das Flag beim Aufruf
der Interrupt-Routine gesetzt, so wurde soeben der erste Time-Slot empfangen. Das
Adressregister wird auf den Pufferanfang gesetzt (Zeile 7) und eine Synchronisation
mit dem Frame Sync Signal ist gewährleistet. Auf ähnliche Weise erfolgt die
Synchronisation des Sende-Puffers über das Transmit Sync Flag (TSF; SSISR – Bit
2) mit dem Unterschied, dass in diesem Fall der Zeiger auf die zweite Speicherstelle
des Sendepuffers gesetzt wird.

Frame-Synchronisation:

Nachdem diese Synchronisation einmal erfolgt ist, werden Sende- und


Empfangsdaten automatisch aus den richtigen Speicherzellen der Ringpuffer
geladen bzw. in die richtigen Speicherzellen geschrieben.