UART lesen mit MSP430

Gast #1259686
Lesenswert?

Hallo,

ich möchte vom PC 35 Bytes auf den Controller übertragen. Diese sollen 
dort empfangen und gespeichert werden, um damit weiterarbeiten zu 
können.
Derzeit lese ich sie in einer Schleife ein:

for(uint8 i = 1;i<35;i++)
    {
        rx_buffer[i] = UCA0RXBUF;
    }

In rx_buffer stehen die Werte nun aber nicht nur einmal drin, sondern 
mehrmals nacheinander. z.B.

rx_buffer[1]=0x01;
rx_buffer[2]=0x01;
rx_buffer[3]=0x01;
rx_buffer[4]=0x4F;
...

Kann mir jemand sagen worand das liegen könnte?

Grüße
Gast #1259697
Lesenswert?

Du musst vor dem Auslesen des Buffers warten, bis überhaupt ein neues 
Byte vom PC reingeschrieben wurde. Auf der anderen Seite musst Du das 
Byte auch rechtzeitig genug auslesen, bevor ein neues angekommen ist, 
sonst wurde das alte überschrieben!
So was macht man sinnvollerweise nicht in einer Schleife, sondern per 
Interrupt. Schau Dir mal die Beispiele von TI zu Deinem MSP an und lerne 
;-)
Persönliche Seite #1259756
Lesenswert?

Du musst das Bit UCRXIFG im Register UCA0IFG auswerten, erst wenn es 
gesetzt ist, stehen in UCA0RXBUF neue Daten zum Lesen an.
1
for(uint8 i = 1;i<35;i++)
2
    {
3
        while (!(UCA0IFG & UCRXIFG));
4

5
        rx_buffer[i] = UCA0RXBUF;
6
    }

Der Hinweis von Stefan auf interruptgesteuerten Empfang allerdings ist 
sehr sinnvoll, auch solltest Du Dir Gedanken um so Dinge wie 
Protokolle machen.

Im übrigen sieht Deine for-Schleife verdächtig aus; warum fängst Du bei 
1 an?

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