Forum: Mikrocontroller und Digitale Elektronik MSP430F2418: Software Reset ohne GPIOs zu ändern


von Jochen (Gast)


Lesenswert?

Hallo zusammen,

wie kann man bei einem MSP430F2418 einen Software-Reset auslösen, der 
wieder bei der Main() anfängt, den Stack leert aber die GPIOs belässt.
Ein Watchdog-Reset führt nämlich dazu, dass auch die GPIO-Register auf 
Tri-State gehen.

Danke für die Hilfe.

Gruß
Jochen

von Forest D. (thecomet)


Lesenswert?

Hallo Jochen


Nein, das ist nicht möglich mit diesem MCU. Bei einem reset wird der 
ganze Baustein zurückgesetzt. Was du machen könntest wäre die Werte, 
welche an den Ausgängen liegen, speichern, den reset durchführen, und 
dann als allererstes in deiner Init() Funktion die Werte wieder laden 
und ausgeben. Der Nachteil wäre einfach dass die Pins kurz hochohmig 
werden.

Was noch zu beachten ist, ist dass die Ausgänge beim Reset "undefiniert" 
werden und deshalb ein Pull-Up bzw. ein Pull-Down Widerstand benötigen 
könnten, damit die anderen Bauteile, die du ansteuerst, nicht anfangen 
zu spinnen.


Alex

von Wooschder (Gast)


Lesenswert?

Ich weiß nicht, ob es funktioniert:
In ASM ein Sprung an die Adresse 0xFFFE (Reset Vektor). In C ein 
Funktionspointer anlegen, den auf 0xFFFE zeigen lassen und aufrufen. 
Siehe Seite 15 im Datenblatt.

von Wooschder (Gast)


Lesenswert?

Nachtrag:
Es reicht natürlich eine Lösung, also entweder in ASM oder in C.

von Stefan (Gast)


Lesenswert?

>den Stack leert aber die GPIOs belässt.
Wozu soll dass denn gut sein?
Wenn der Stack 'ne Macke weg hat, dann hast Du was falsch programmiert!

Ansonsten: Statemachine
1. State: WDT anhalten + GPIO-Init; "NextState = 2. State"
2. State: restliche Inits; NextState = 3. State"
...
x. State: SW-Reset: "NextState = 2. State"

von Andreas B. (andreas_b77)


Lesenswert?

Für solche langen Sprünge gibts setjmp()/longjmp(). Das involviert dann 
überhaupt keinen Reset oder Initialisierung irgendwelcher globaler 
Variablen, also muss der Code das dann berücksichtigen.

von Reset (Gast)


Lesenswert?

Jochen schrieb:
> Software-Reset

Reset ist Reset und es wird der definierte Zustand eingenommen.

Wenn das Sytem reinitialisiert werden soll, läßt sich das wie gewünscht 
programieren, mit Stack, Variablen Initialisierung, usw.

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.