mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ARM: SSC beim AT91SAM7S reagiert nicht wie gedacht


Autor: Daniel D. (stachelsau)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.
while(!pSSC->SSC_SR & AT91C_SSC_TXRDY);
pSSC->SSC_THR = out_val;
    
while(!pSSC->SSC_SR & AT91C_SSC_TXRDY);
pSSC->SSC_THR = 0x00;
    
while(!pSSC->SSC_SR & AT91C_SSC_TXRDY);
pSSC->SSC_THR = out_val; 

Der SSC ist folgendermaßen eingestellt:
pSSC->SSC_TCMR = AT91C_SSC_CKS_RK |    
    AT91C_SSC_START_EDGE_RF |
    (1 << 16);      // STTDLY = 1
                            
pSSC->SSC_TFMR = (15) |            // 16 bit word length
        (0 << 8) |        // 1 word per frame
        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

Autor: Daniel D. (stachelsau)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
War ja klar, dass es nur ne Kleinigkeit ist. Kaum setzt man die Klammern 
in der while-Schleifenbedingung richtig, funktionierts. Also Mädels, 
immer an die Klammern denken...

VG,
Daniel

Autor: Thomas Binzer (a_user)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Thomas Binzer (a_user)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.