Morgens allerseits Ich hab da ein Problem, welches mir ziemlich Kopfzerbrechen bereitet... Ich möchte bei einem MSP430F149 die beiden Timer gleichzeitig benutzen. Der TimerA wird für den 'Systemtakt' (500us) genutzt, der TimerB wird dazu genutzt, digitale Sensoren einzulesen. Die Sensoren lösen einen Interrupt aus, wann sie ausgelesen werden wollen (T:~3.5ms) der Timer wird für das Protokoll-Timing benötigt. Ich weiss, dass die Prio des TimerB höher ist als diejenige von TimerA. Kann aber leider nicht mehr getauscht werden, da HW schon besteht. Mein Problem: Die ISR von TimerA wird nur dann korrekt ausgeführt, wenn ich TimerB Registereinstellungen auskomentiert habe. Wenn ich einen Breakpoint in der TimerA-ISR setze, wird dieser nie ausgeführt. Ausser ich pausiere das Programm zuerst und fahre dann fort. Ab diesem Zeitpunkt wird der Breakpoint regelmässig ausgelöst. Entwicklungsumgebung ist Code Composer Essentials v2 Vielen Dank für eure Hilfe. Basti
Niemand ne Idee? Das wären noch die Initialisierungen: Init TimerA:
1 | TACTL = 0x0110; // ACLK = 32786 Hz |
2 | TAR = 0x0000; |
3 | TACCTL0 = CCIE; |
4 | TACCR0 = 16; |
Init TimerB:
1 | TBCTL = 0x1924; |
2 | TBCCTL0 = 0x5110; |
3 | TBCCTL1 = 0x5110; |
4 | TBCCTL2 = 0x5110; |
Mal ein paar Schüsse ins Blaue: - Hast Du alle Interruptroutinen für Timer A und Timer B definiert und löschst den TxxIV dort? Wenn das IE-Bit gesetzt ist, aber eine ISR nicht existiert, rennt der MSP ins Nirvana und verbrät seine Rechenzeit in der nicht existenten ISR. Und die Timer haben jeweils zwei ISRs. Testen kannst Du das, indem Du schaust, ob ein while(1) in der main() tatsächlich noch Rechenzeit abkriegt (Pin toggeln lassen und Oszi dranhalten). - Die Interrupts unterbrechen sich gegenseitig nicht. Wenn Du das GIE-Bit in einer ISR setzt, tun sie das aber doch, d.h. ein neuer Interrupt während einer ISR ruft die andere ISR auf (mit allen Konsequenzen für den Stack, also aufpassen!). Wenn der erste Ansatz nicht weiterhilft, kannst Du an dieser Stelle auch noch weiterarbeiten. Sollte aber nicht nötig sein. Viel Erfolg! Max
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.