www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATSAM7S256 SSC Transmit Holding Register wird nicht gesetzt


Autor: Florian B. (Gast)
Datum:

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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
THR ist ein Write-Only-Register, du kannst da nichts heraus lesen. Poste 
doch mal deine Konfiguration.

Autor: Florian B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

stimmt, ich habe auch die Flags, TXREADY und TXEMPTY im 
Statusregister(SSC_SR) angeschaut, die auf 1 bleiben.
Hier ist die Konfig:
 /* SSC clock */
  pPMC->PMC_PCER = (1 << AT91C_ID_SSC);

  /* PIO pins für SSC */
  pPIO->PIO_ASR = (SSP_TF | SSP_TK | SSP_TD | SSP_RD | SSP_RK | SSP_RF );
  pPIO->PIO_PDR = (SSP_TF | SSP_TK | SSP_TD | SSP_RD | SSP_RK | SSP_RF );
  /* Soft Reset */
  pSSC->SSC_CR = AT91C_SSC_SWRST;
  /* disable SSC interrupts */
  pSSC->SSC_IDR = 0xFFF;
  /* Clock für SSC MCK/4 */
  pSSC->SSC_CMR = 0x00000002;
  /* Recieve clock Mode Register */
  pSSC->SSC_RCMR = AT91C_SSC_CKS_RK | AT91C_SSC_START_FALL_RF;
  /* Recieve frame mode register */
  pSSC->SSC_RFMR = AT91C_SSC_DATLEN | AT91C_SSC_FSEDGE | AT91C_SSC_MSBF | AT91C_SSC_FSOS_POSITIVE;
  /* Transmit clock mode register */
  pSSC->SSC_TCMR = (AT91C_SSC_CKO_CONTINOUS | AT91C_SSC_START_CONTINOUS | AT91C_SSC_CKI);
  /* Transmit frame mode register */
  pSSC->SSC_TFMR = (AT91C_SSC_DATLEN | AT91C_SSC_MSBF | AT91C_SSC_FSOS_POSITIVE );
  /* enable SSC */
  pSSC->SSC_CR = (AT91C_SSC_TXEN | AT91C_SSC_RXEN);
 
  /* Senden */
  while(!(pSSC->SSC_SR & AT91C_SSC_TXRDY)){};
  pSSC->SSC_THR = 0xAAAAAAAA;

Gruß
Florian

Autor: Florian B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
hab beim Transmit Clock Mode Register eine falsche Konfiguration 
angegeben. Hier ist die Richtige:
pSSC->SSC_TCMR = (AT91C_SSC_CKO_CONTINOUS | AT91C_SSC_START_FALL_RF | (0xF << 24 ));

Gruß
Florian

Autor: Florian B. (Gast)
Datum:

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

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.