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