Forum: Compiler & IDEs UART lesen mit MSP430


von Gast (Gast)


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

von Stefan (Gast)


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 
;-)

von Rufus Τ. F. (rufus) Benutzerseite


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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.