Hallo Ich bin gerade dran die SSC Schnittstelle für den AT91SAM7S256 zu konfigurieren (ohne PDC) und möchte Daten senden. Jedoch habe ich beim Debuggen festgestellt, dass das Transmit Holding Register den zugewiesenen Wert nicht übernimmt, sondern auf 0 bleibt. pSSC->SSC_THR = encoded_tx; Den Wert von encoded_tx habe ich kontrolliert. Ich habe auch schon das Signal am Pin angeschaut und dort bekomme ich nur einen HIGH Pegel. Einen Clock und ein Frame Signal bekomme ich am Ausgang. In Verwendung habe ich das AT91SAM7S-EK Evalboard. Über ein Tipp oder Hinweis bin ich sehr dankbar. Gruß Florian
THR ist ein Write-Only-Register, du kannst da nichts heraus lesen. Poste doch mal deine Konfiguration.
Hallo, stimmt, ich habe auch die Flags, TXREADY und TXEMPTY im Statusregister(SSC_SR) angeschaut, die auf 1 bleiben. Hier ist die Konfig:
1 | /* SSC clock */
|
2 | pPMC->PMC_PCER = (1 << AT91C_ID_SSC); |
3 | |
4 | /* PIO pins für SSC */
|
5 | pPIO->PIO_ASR = (SSP_TF | SSP_TK | SSP_TD | SSP_RD | SSP_RK | SSP_RF ); |
6 | pPIO->PIO_PDR = (SSP_TF | SSP_TK | SSP_TD | SSP_RD | SSP_RK | SSP_RF ); |
7 | /* Soft Reset */
|
8 | pSSC->SSC_CR = AT91C_SSC_SWRST; |
9 | /* disable SSC interrupts */
|
10 | pSSC->SSC_IDR = 0xFFF; |
11 | /* Clock für SSC MCK/4 */
|
12 | pSSC->SSC_CMR = 0x00000002; |
13 | /* Recieve clock Mode Register */
|
14 | pSSC->SSC_RCMR = AT91C_SSC_CKS_RK | AT91C_SSC_START_FALL_RF; |
15 | /* Recieve frame mode register */
|
16 | pSSC->SSC_RFMR = AT91C_SSC_DATLEN | AT91C_SSC_FSEDGE | AT91C_SSC_MSBF | AT91C_SSC_FSOS_POSITIVE; |
17 | /* Transmit clock mode register */
|
18 | pSSC->SSC_TCMR = (AT91C_SSC_CKO_CONTINOUS | AT91C_SSC_START_CONTINOUS | AT91C_SSC_CKI); |
19 | /* Transmit frame mode register */
|
20 | pSSC->SSC_TFMR = (AT91C_SSC_DATLEN | AT91C_SSC_MSBF | AT91C_SSC_FSOS_POSITIVE ); |
21 | /* enable SSC */
|
22 | pSSC->SSC_CR = (AT91C_SSC_TXEN | AT91C_SSC_RXEN); |
23 | |
24 | /* Senden */
|
25 | while(!(pSSC->SSC_SR & AT91C_SSC_TXRDY)){}; |
26 | pSSC->SSC_THR = 0xAAAAAAAA; |
Gruß Florian
Hallo, hab beim Transmit Clock Mode Register eine falsche Konfiguration angegeben. Hier ist die Richtige:
1 | pSSC->SSC_TCMR = (AT91C_SSC_CKO_CONTINOUS | AT91C_SSC_START_FALL_RF | (0xF << 24 )); |
Gruß Florian
Hallo, ich habe nun den Fehler gefunden. Der Grund ist dass es während dem Debuggen nicht funktioniert. Wieso es im Debugmodus nicht funktioniert habe ich nicht herausgefunden. Ist der uC im Running Mode so sendet er die Daten. Gruss Florian
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.