Forum: Mikrocontroller und Digitale Elektronik MSP430 Wie wird ein Unterprogramm mit einem Timer gestartet?


von Wolfgang (Gast)


Lesenswert?

Mir gelingt es nicht, ein Unterprogramm in regelmäßigen Abständen mit
einem Timer anzustoßen, da mir die grundsätzlichen Kenntnisse noch
fehlen und ich aus dem Datenblatt und auch aus der Bedienungsanleitung
(zum MSP430F133) nicht schlau werde. Auch die Beispiele In IAR
Kickstart führten nicht zum Erfolg.
Vielleicht hat jemand ein Programmbeispiel (Assembler) mit deutschem
Kommentar,  bei dem jede Zeile kurz erläutert wird, warum und weshalb
sie Zeile eingefügt wurde.
In meinen Beispielen ist u.a. von Interrupt Vector oder toggle die
Rede. Was versteht man darunter?
Wolfgang

von OldBug (Gast)


Lesenswert?

Hallo Wolfgang!

Ich habe gerade überlegt, Dir das alles zu erklären, aber dann kam mir
die Idee, mal in das AVR-Tutorial zu gucken. Wenn Du Dir da mal die
erläuterungen zu Interrupts anschaust, denke ich, kannst Du das auch
recht einfach auf den MSP430 umsetzen.

Gruß,
Patrick...

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Hab mir AVR Tutorial angesehen und glaube, es soweit verstanden zu
haben. Leider wird mein Versuchsunterprogramm nur einmal gestartet.
Weitere Details im Dateianhang. Vielleicht erkennt jemand meinen
Fehler.

Wolfgang

von OldBug (Gast)


Lesenswert?

Hallo Wolfgang!

Du musst das Flag für Deinen Interrupt noch zurücksetzen. Das machst Du
in der ISR als letztes. Wenn Du es nicht als letztes machst, dann kann
Deine ISR durch einen weiteren auftretenden Interrupt unterbrochen
werden. Folglich ist dieser Interrupt so lange gesperrt, bis Du ihn
wieder freigibst.

Ich denke, das bekommst Du hin ;)

Gruß,
Patrick...

von OldBug (Gast)


Lesenswert?

Ach ja: warum zählst Du eigentlich R5 und R6 runter? Soll das eine
Verzögerungsschleife sein? Ich denke, die brauchst Du gar nicht...

von Wolfgang (Gast)


Lesenswert?

Zunächst Dank an Patrick,
ich mir schon so etwas ähnliches gedacht, dass man ein Interrupt-Flag
zurücksetzen muss, und auch verschiedene Befehle ausprobiert, wo ich
annahm, dass  diese dafür zuständig sind. Da das Herumprobieren nichts
brachte, dachte ich, frag mal die Experten. Andererseits habe ich in
meinen Beispielen keine entsprechende Zeile gefunden. Deshalb meine
Frage (an alle Experten): Wie muss die Befehlzeile lauten? Oder fehlt
noch etwas?
Das TA0_ISR programm habe ich nur deshalb so aufgebaut, damit ich erst
einmal etwas sehen kann. Es hat keine besondere Bedeutung. Hier soll
später mal etwas anderes stehen, was bereits auch schon nach meinen
Vorstellungen läuft.
Mit freundlichen Grüßen
Wolfgang

von OldBug (Gast)


Lesenswert?

Wenn ich das jetzt richtig im Kopf habe, dann geht das so:

        bic  #TAIFG,  &TACTL        ; reset interrupt flag

Ohne Gewehr...ähm Gewähr...

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Problem erkannt,

a) es gab kein Hauptprogramm, welches durch einen Interrupt
unterbrochen werden konnte
b) falscher Interrupt -Vector
offensichtlich ist die Zeile: " bic #TAIFG,&TACTL -- ohne Gewehr"
nicht notwendig, da, wenn ich das richtig gelesen habe, mit reti das
GIE in das Statusregister zurückgeschrieben wird.
Hab mal mein neues Programmteil angehängt, welches bei mir
funktioniert
mfg
Wolfgang

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.