ARM: SSC beim AT91SAM7S reagiert nicht wie gedacht

OP #1228542
Hallo,

ich spiele gerade eine wenig mit dem SSC und einem Stereo-Codec herum. 
Der Codec ist dabei der Master. TF und TK sehen auch gut aus, aber was 
auf TD kommt, passt irgendwie nicht zu dem was ins THR geschrieben wird 
(ich schreibe direkt in das Register, also kein PDC).

Das ist der Teil, der die Werte ausgibt. out_val ist ein unsigned short 
int mit wechselnden Werten.
1
while(!pSSC->SSC_SR & AT91C_SSC_TXRDY);
2
pSSC->SSC_THR = out_val;
3
    
4
while(!pSSC->SSC_SR & AT91C_SSC_TXRDY);
5
pSSC->SSC_THR = 0x00;
6
    
7
while(!pSSC->SSC_SR & AT91C_SSC_TXRDY);
8
pSSC->SSC_THR = out_val;

Der SSC ist folgendermaßen eingestellt:
1
pSSC->SSC_TCMR = AT91C_SSC_CKS_RK |    
2
    AT91C_SSC_START_EDGE_RF |
3
    (1 << 16);      // STTDLY = 1
4
                            
5
pSSC->SSC_TFMR = (15) |            // 16 bit word length
6
        (0 << 8) |        // 1 word per frame
7
        AT91C_SSC_MSBF;    // MSB first

Erwartet hätte ich an dieser Stelle, das ich 3 Frames sehe, von denen 
der erste und letzte identische Werte enthalten. Der mittlere Frame 
müsste die 0 enthalten. Stattdessen sieht TD so aus, wie in der 
angehängten Datei.
Irgendwie fehlt da der Frame mit der 0 in der Mitte. Mir ist natürlich 
klar, dass das keine sinnvolle Ausgabe für den Codec ist, es geht nur um 
das grundsätzliche Verständnis. Ich habe dazu aber irgendwie keine 
intelligente Idee mehr. Oder läuft das nur mit dem PDC ordentlich?

Viele Grüsse,
Daniel
Angehängte Dateien:
#1420177
Hallo Daniel,
ich probiere auch gerade, die SSC Schnittstelle als Slave zu bedienen.
Ich versuche zyklisch mit einem externen Clock Daten aus dem µC 
auszulesen.

Mein Problem ist, dass die Daten erst ab der dritten Flanke des Clocks 
zur Verfügung stehen.

Wenn ich aber das Start Event im Transmit Clock Mode Register auf 
Continuous stelle, müssten doch ab der ersten Flanke die Daten 
ausgetaktet werden oder?

Ich habe auch schon versucht, den Start Event mit dem TF Signal zu 
erzeugen.
Kann es sein, dass wenn ich mit einem externen Clock arbeite das TF 
Signal nicht zur Verfügung steht? Denn nach Initialisierung bleibt das 
TF Signal auf Dauer "high".

Grüße

Thomas
#1420632
Das mit dem TF Signal ist geklärt. Das lag an der Initialisierung.

Das Problem der zeitversetzten Daten besteht leider immer noch. Denn 
auch das TF Signal wird erst drei Takte nach Anlegen des Clocks auf Low 
gezogen, und somit auch der Transmit Vorgang.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.