Hallo, ich programmiere aktuelle mit der CCS-Entwicklungsumgebung einen MSP430-F5437. Ich habe eine einfache Timer-Initializierung geschrieben, die alle 125 ms einen Interrupt auslösen soll (Clock = ACLK, Timer zählt bis 4096). Bei jedem Interrupt wird eine Variable "time" (Wert = 1000 = 1s) um 125 verringert, sodass nach 8 Interrupts 1 Sekunde voll ist (time == 0) und im main-Programm die If-Anweisung erfüllt ist. Mein Problem: Nach dem ersten Interrupt wird das Programm resetet und starten von vorne. (Daher ist natürlich die Time Varibale wieder 1000 und ich erreiche nie das ziel time == 0) Woran kann das liegen? (Watch dog ist natürlich aus!) Anliegend findet ihr meinen Code. Ich hoffe, ihr könnt mir helfen. LG Kristin
Wenn ich das richtig beurteile wird deine time-Variable sowieso nie null werden. 125 ok, aber nicht 0.
Code bitte nicht als GIF. Code ist einfach nur Text, denn kann man wunderbar auch so posten. Ist für dich einfacher und für uns auch. Zum Problem: volatile! FAQ Was hat es mit volatile auf sich? > Nach dem ersten Interrupt wird das Programm resetet und starten von vorne. Woher weißt du das? Denn > ... und ich erreiche nie das ziel time == 0 ... kann auch andere Ursachen haben. Eine davon ist zb, dass du deine time Variable nicht volatile gemacht hast.
> Nach dem ersten Interrupt wird das Programm resetet und starten von vorne.
Woher weißt du das? Denn
Das weiß ich daher, weil ich im oberen Teil ein Break-Point gesetzt habe
und er nach jedem interrupt dort wieder landet und nicht in der
while-schleife.
Nach dem ersten interrupt steht die time-varibale auf 875 (1000-125).
Zu Beginn des nächsten steht sie allerdings wieder auf 1000. Daran
ändert auch leider volatile nichts :-(
Wirf einmal einen Blick auf die Timer Initialisierung und speziell dabei auf die Interrupt Freigabe. Für den Timer stehen zwei Vektoren zur Verfügung. Du hast beide demaskiert, aber behandelst nur einen. Noch zwei Tipps: 1. CCR0 muss nicht nachgeladen werden. Der Wert bleibt erhalten. 2. Das Interrupt-Flag wird bei der ISR-Bearbeitung durch die Hardware gelöscht. Hilfreich ist das Kapitel Family User Guide. Es gibt auch ein Code-Beispiel hier im Forum. Erzähl wie es läuft.
Mrs MSP schrieb: > Wirf einmal einen Blick auf die Timer Initialisierung und speziell dabei > auf die Interrupt Freigabe. Für den Timer stehen zwei Vektoren zur > Verfügung. Du hast beide demaskiert, aber behandelst nur einen. Ohje, du hast Recht! Habe jetzt den TAIE auf 0 gesetzt und es funktioniert! Vielen lieben Dank!
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.