Forum: Mikrocontroller und Digitale Elektronik Problem bei Timerinterrupt (msp430)


von marco (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

mache gerade meine ersten Gehversuche mit µC mit dem msp430 Launchpad. 
Wollte jetzt eine LED nicht über Delays sondern Interrupt-gesteuert 
(Timer-Overflow) zum blinken bringen. Eben nur zu Übung. Im Single-Step 
Modus und über Breakpoints scheint es ja zu funktionieren. Wenn ich aber 
in den Run-Modus gehe, scheint er nur noch ein mal in die ISR zu 
springen und dann bleibt die LED immer an.
Wie kann das sein? Die einzelschritte im Debugmodus müssen doch die 
selben sein wie wenn man das Programm richtig laufen lässt?
Wäre euch dankbar, wenn ihr euch kurz mein kleines Codebeispiel ansehen 
könntet.

Ich arbeite mit der IAR Workbench, die, nachdem ich im Run-Modus 
versuche, das Programm mit Break wieder anzuhalten, immerzu abstürzt. 
Echt nervig.

Gruß Marco

von marco (Gast)


Lesenswert?

Ok, ich muss wohl in der ISR noch das Pending-Bit löschen. Dann gehts 
auch. Schön und gut, trozdem verstehe ich jetzt nicht wieso das im 
single-step Modus automatisch passiert. Das darf doch normalerweise 
nicht sein, oder? Wie soll man den so Fehler aufspüren? Da ist doch der 
Debug-Modus irgendwie sinnlos.

von application note (Gast)


Lesenswert?

Da herrscht ein Durcheinander bei den Taktquellen.
Probier erst nur den DCO. Wie das läuft ist im Family User Guide sehr 
gut beschrieben.

Damit was läuft, kann man sich ein Demo laden und abwandeln.
http://www.ti.com/mcu/docs/litabsmultiplefilelist.tsp?sectionId=96&tabId=1502&literatureNumber=slaa513&docCategoryId=1&familyId=1937

von marco (Gast)


Lesenswert?

Also ich glaube der VLO läuft schon wie ich ihn eingestellt habe. Das 
war glaub ich nicht das Problem. Hab ja zuvor schon LED's blinken 
lassen, aber eben Nicht-interrupt-gesteuert, sondern mit delays.

von application note (Gast)


Lesenswert?

Ok, ist ja gut. Ist nur nicht ganz übersichtlicht so.

Wenn der TimerA im UP-Mode läuft, stehen zwei Interrupt Quellen zur 
Wahl:
'The TACCR0 CCIFG interrupt flag is set when the timer counts to the 
TACCR0 value. The TAIFG interrupt flag is set when the timer counts from 
TACCR0 to zero.'

Beim TAIFG handelt es sich um das Flag für den shared interrupt. Und für 
den gilt:
'Any access, read or write, of the TAIV register automatically resets 
the highest pending interrupt flag.'

Lies oder schreib das TAIV. Oder besser, nimm den anderen interrupt 
vector und fertig.

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.