Hallo auch, ich suche seit etwa 2 Tagen diesen Fehler: Wenn ich mit einen MSP430F169 über die Serielle Schnittstelle ein einzelnes Zeichen senden will, dann wird ständig das selbe Zeichen gesendet. Die Widerholfrequenz des Zeichens ist jedoch sonderbar lang. Bei 9600 Baud werden gerade mal so 10 bis 20 Zeichen pro Sekunde übertragen. Bei anderen Baudraten ändert sich da nichts. Ich habe im Anhang ein kleines C-Programm geschrieben, das diesen Fehler sehr schön herausarbeitet. Zum Programmieren benutze ich die IAR Embedded Workbench IDE. Die verwendete Hardware ist von SoftBaugh das Dlr169 Demo Kit, Die kommunikation sehe ich mir mit Hyperterminal von Windows an. Hat jemand eine Idee, an was das legen könnte? Besten Dank für eure Hilfe.
Hallo Josef, den MSP430 verwende ich zwar nicht, aber mir ist aufgefallen, daß in Deinem Programm auf den ersten Blick keine Wiederhol- schleife zu erkennen ist. Jetzt mal ein Schuß ins Blaue: Bedeutet "SWRST" vielleicht Softwarereset, so daß nach jedem Senden resettet wird? Andere Sache: Bei den mir bekannten µCs fragt man erst, ob das Transmit-Register leer ist, bevor man hineinschreibt. Good Luck Thomas
Ich blicke bei deinem Programm auch nicht so ganz durch ... Was hast du für komische Registernamen? Bei mir heisst der erste TX-Buffer TX1BUF, und nicht U1TXBUF. Und ich benutze auch den IAR-Workbench. Was auf jeden Fall fehlt -- da hat Thomas recht -- ist die Schleife. Du arbeitest ja ohne Interrupts, daher kann auch zwangsläufig nicht mehr als ein Zeichen übertragen werden. Ferner fehlt das Warten, ob der TX-Buffer schon leer ist. Auch das erwähnte Thomas ja schon. Ich habe auf www.mathar.com ein paar (kommentierte) Beispiele erstellt, die eine Kommunikation über den UART realisieren. Lies sie dir einfach mal durch, dann sollte alles klar werden. Grüße, Sebastian
Hab den Fehler jetzt selbst gefunden. Es liegt einfach daran, das ich vergessen habe, den Watchdog auf dem MSP zu deaktivieren. Der MSP hat sich dann von selbst zurückgesetzt und hat das Zeichen neu übertragen. Übrigens ist ganz am Ende die Programmzeile: for(;;); das ist eine Endlosschleife. Besten Dank für Eure Beiträge
Klar ist das 'ne Endlosschleife, aber die bringt dir genau garnix, weil du ja die Interrupt-Bits fürs USART nicht gesetzt hast. Und der IR-Handler fehlt ja auch komplett, zumindest in dem von dir geposteten Codestück.
War ja nur ein Demoprogramm mit dem ein einzelnes Byte versant werden sollte
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.