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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren