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
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 ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.