Hi, hatte schon mal jemand das Problem, dass bei eingeschaltetem Timer der UART RX IRQ nicht mehr auslöst? Ich hab auch versucht längere Wartezeiten in die Hauptschleife mit _DINT() und _EINT() zu packen. Aber es geht nur wenn ich CCR0 = 0 setz.
Das wird nicht des Problemes Ursache sein. Hast Du Dir mal die Interruptprioritäten angesehen? Was machst Du im Timerinterrupt?
Interruptprioritäten... auf die Idee bin ich noch gar nicht gekommen. Gleich mal nachlesen. Im Timerinterrupt wird vorerst nur eine LED getoggelt.
#define USART1TX_VECTOR 4 /* 0xFFF4 USART 1 Transmit */ #define USART1RX_VECTOR 6 /* 0xFFF6 USART 1 Receive */ #define PORT1_VECTOR 8 /* 0xFFE8 Port 1 */ #define TIMERA1_VECTOR 10 /* 0xFFEA Timer A CC1-2, TA */ #define TIMERA0_VECTOR 12 /* 0xFFEC Timer A CC0 */ Laut Datenblatt müsste USART1 den ich verwende eine höhere Priorität haben. TimerB hab ich auch versucht und der steht noch weiter unten.
Was genau für ein MSP430 ist das? Bei den mir bekannten* Varianten sind die Interruptprioritäten klar anhand der Adresse des Vektors zuzuordnen; je höher die Adresse, desto höher die Priorität. Die Tabelle im Datenblatt ist auch entsprechend aufgebaut. Dein Beispiel aber lässt auf die beiden USART-Vektoren Vektoren mit niedrigerer Adresse folgen ... Das ist merkwürdig. *) 14x 15x 16x und 5438
Ist ein 1611. Ok die Tabelle im Datenblatt ist genau umgekehrt zur Auflistung im .h File. Mein Fehler ;)
Aber wie ist es dann möglich auf UART IRQ´s zu reagieren und nebenbei einen Timer laufen zu lassen?
In Interrupts ist man i.d.R. nur sehr kurz. Wenn man in Interrupts längere Zeit verbringt muss man halt die Software so anpassen das sie damit zurecht kommt. Du könntest z.B. im Timer Interrupt die globalen Interrupts wieder freischalten, dann würde der UART den Timer Interrupt unterbrechen. Da musst du dann aber aufpassen das nicht mitten drin wieder ein Timer Interrupt kommt, sonst gibt's 'nen schönen Stack-Überlauf :) Oder erst mal den Timer Interrupt abschalten und dann die globalen Interrupts an, oder..., oder..., oder ... :)
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.