RS232 Kommunikation mit AT91SAM7 funktioniert, liefert aber nur Datenmüll

Gast #1915833
Lesenswert?

Hi,

mittlerweile habe ich mich in das Thema AT91SAM7x soweit eingelesen das 
ich das RS232 Tutorial von sparkfun.com compilieren und flashen kann.

Nur leider liefert das Ganze nur Datenmüll.
Der Beispielcode empfängt 10 Zeichen und sendet sie zurück.
Wenn ich jetzt ein 'a' sende bekomme ich ein 'x' zurück.
Wenn ich den µC den Wert 25 senden lassen, bekomme ich ein 's' also 115.
Ich kann keine Regelmäßigkeit und keinen Offset erkennen. Aber das 
verhalten ist reproduzierbar.
Im Tutorial wird ein 18,4320 MHz Quarz verwendet. Selbigen habe ich auf 
meiner Platiene. Ich würde jetzt vermuten irgendwo ist eine Einstellung 
falsch. Es gibt beim AT91SAM7x so viele Einstellungen und 
Frequenzteiler. Aber die Einstellungen sind doch alle im Code enthalten.

Hat der AT91SAM7x so etwas wie fuses?
Wo könnte mein fehler liegen?

code: 
http://www.sparkfun.com/datasheets/DevTools/SAM7/serial_tutorial_source.zip

besagtes tutorial: 
http://www.sparkfun.com/datasheets/DevTools/SAM7/at91sam7%20serial%20communications.pdf
Gast #1915853
Lesenswert?

Hallo,

Bei mir kam mit den Beispielen, die ich verwendet habe auch nur Müll 
raus (ein Ändern der BPS im Terminal brachte Besserung). Hier meine 
(abgeänderte ini für 115200/8/N/1):

#define EXT_OC          18432000        /* Exetrnal ocilator MAINCK  */
#define MCK             48054857        /* MCK (PLLRC div by 2)    */
#define MCKKHz          (MCK/1000)
#define BR    115200              /* Baud Rate        */
#define BRD  (MCK/10/BR)            /* Baud Rate Divisor    */

AT91S_USART * pUSART = AT91C_BASE_US0;      /* Global Pointer to USART0 
*/

void uart0_init(void)
{
  *AT91C_PIOA_PDR = AT91C_PA5_RXD0 |      /* Enable RxD0 Pin      */
            AT91C_PA6_TXD0;      /* Enalbe TxD0 Pin      */

  pUSART->US_CR = AT91C_US_RSTRX |      /* Reset Receiver      */
          AT91C_US_RSTTX |      /* Reset Transmitter    */
          AT91C_US_RXDIS |      /* Receiver Disable      */
          AT91C_US_TXDIS;        /* Transmitter Disable    */

  pUSART->US_MR = AT91C_US_USMODE_NORMAL |  /* Normal Mode        */
          AT91C_US_CLKS_CLOCK    |  /* Clock = MCK        */
          AT91C_US_CHRL_8_BITS   |  /* 8-bit Data        */
          AT91C_US_PAR_NONE      |  /* No Parity        */
          AT91C_US_NBSTOP_1_BIT;    /* 1 Stop Bit        */

  pUSART->US_BRGR = BRD;            /* Baud Rate Divisor    */

  pUSART->US_CR = AT91C_US_RXEN  |      /* Receiver Enable      */
          AT91C_US_TXEN;        /* Transmitter Enable    */
}

Bei mir an AT91SAM7P256.

MfG
Peter
Gast #1915928
Lesenswert?

ich wollte jetzt mal den code so übernehmen, aber er findet die passende 
deffinition zu
1
  *AT91C_PIOA_PDR = AT91C_PA5_RXD0 |      /* Enable RxD0 Pin      */
2
            AT91C_PA6_TXD0;      /* Enalbe TxD0 Pin      */
nicht.

kannst du mir die noch geben?
Gast #1915941
Lesenswert?

hmm die AT91SAM7S256.h hab ich drin.

ich hab jetzt gerade nen mix aus deinem und menem code gebaut.
ich bekomme jetzt anderen datenmüll.
ich werde für heute schluss machen.

hast du vielleicht nen komplettes projekt, das du mir schicken kannst?
am besten würde mir ja ein code gefallen der mir einfach nur 
irgendwelche sinnvollen zeichen auf rs232 ausgibt.
Gast #1916180
Lesenswert?

ich habe jetzt noch die grandiose idee mal mit der Boundrate runter zu 
gehen.
Werde dies aber erst in einigen Tagen testen können.

Seh ich es richtig das die Boundrate im Endeffekt nur von der 
ausgewählten Taktquelle und dem CD abhängt?
Als Taktquelle wird MCK ausgewählt und MCK ist bei gegebendem Takt von 
18432000Hz abhängig. und berechnet sich zu 48054857.

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