Hallo, ich will Daten über die UART meines MSP430135 schicken. Dann muss innerhalb von 3ms eine Antwort kommen. Um diese "Wartezeit" zu realisieren, wollte ich einen Timer nehmen. Aber irgendwie funktioniert der nicht ganz. Und mit dem User's Guide komm ich nicht so klar. Kann mir da wer weiterhelfen? Hier mein Code in C: /* Ab hier die Konfiguration für den Timer A eingefuegt */ TACTL = TASSEL_2 | TAIE; TACCTL0 = 0x0020; TACCTL1 = 0x0000; TACCTL2 = 0x0000; TACCR0 = 10; TACCR1 = 9; TACCR2 = 0; TACCTL0 |= CCIE; //Timer aktivieren, falls erreicht Zeichen nochmal senden TACTL |= MC1; if((TACCTL0 & 0x0004) == 0x0004) { TACTL |=MC0; TXBUF0 = 'h'; } Falls aber eine Antwort über den RX-Interrupt kommt, soll dort auch der Timer deaktiviert und auf null gesetzt werden. Die Abfrage, ob der Timer abgelaufen ist funktioniert so aber nicht, muss ich da ein Interrupt-Flag zur Abfrage benutzen, oder gar eine Interrupt-Routine schreiben?
Du willst ja auf den Timer warten. D.h. dass Programm muss solange in einer Schleife laufen, solange der von dir gewünschte Timerstand noch nicht erreicht wurde. Innerhalb der Schleife checkst du dann ab, ob über den Rx Interrupt ein Zeichen eingetroffen ist und brichst die Schleife vorzeitig ab. Und noch was: Ich würde den Timer auf jeden Fall so abfragen, ob sein Zählerstand schon größer als der von dir vorausberechnete ist. Wenn Deine Schleife nämlich ein bischen trödelt, könnte es schon sein, dass du den exakten Timerstand nie zu Gesicht kriegst. Stell Dir einfach vor Du müsstest eine bistimmte Zeit warten, sagen wir 30 Sekunden. Dazu hast du eine Stoppuhr auf die du immer wieder drauf schaust, während du Fussball WM schaust. Es ist herzlich unwahrscheinlich, dass du die Stoppuhr bei exakt 30.00 Sekunden betrachtest und feststellst dass die Zeit um ist. Bei einer Zeit von 31 Sekunden oder 33 Sekunden, weisst du auch dass die Zeit um ist und du deine Freundin abholen musst.
Danke ich kann mit Fussball herzlich wenig anfangen. Das ich eine Schleife programmieren muss ist mir auch schon klar geworden. Aber wie frage ich den Timer des MSP ab. Das ist ja mein eigenliches Problem.
Das weis ich nicht, weil ich den MSP nicht kenne. Steht aber sicher im Datenblatt. Ich hab mich halt einfach mal an deinem Code orientiert. Da steht: //Timer aktivieren, falls erreicht Zeichen nochmal senden TACTL |= MC1; if((TACCTL0 & 0x0004) == 0x0004) also geh ich mal davon aus, dass TACCTL0 den momentanen Inhalt des Timers repräsentiert. Nur wird das halt mit einem einfach 'if' nichts werden, weil 'if' ja nicht darauf wartet, bis die Bedinung eintrifft, sondern nur entscheidet ob die Bedingung jetzt, zu dem Zeitpunkt an dem 'if' sie auswertet gültig ist oder nicht. wie wäre es mal mit: //Timer aktivieren TACTL |= MC1; // warten bis der Timer den Wert erreicht hat while( TACCTL0 < 4 ) ; Wie gesagt: ich kenn den Chip nicht. Ich arbeite nur mit dem was du mir gibst. Ob TACCTL0 das richtige Register ist oder ob das anders heist, steht im Datenblatt deines µC
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.