ATSAM7S256 SSC Transmit Holding Register wird nicht gesetzt

Gast #799454
Lesenswert?
• ▲
▼
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
Gast #799882
Lesenswert?
• ▲
▼
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
Gast #799955
Lesenswert?
• ▲
▼
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
Gast #800695
Lesenswert?
• ▲
▼
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

Antwort schreiben

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.

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.