www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 UART + Timer Problem


Autor: beaker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wird nicht des Problemes Ursache sein.

Hast Du Dir mal die Interruptprioritäten angesehen? Was machst Du im 
Timerinterrupt?

Autor: beaker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interruptprioritäten... auf die Idee bin ich noch gar nicht gekommen. 
Gleich mal nachlesen. Im Timerinterrupt wird vorerst nur eine LED 
getoggelt.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das dürfte nicht stören.

Autor: beaker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: beaker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist ein 1611.

Ok die Tabelle im Datenblatt ist genau umgekehrt zur Auflistung im .h 
File.

Mein Fehler ;)

Autor: beaker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber wie ist es dann möglich auf UART IRQ´s zu reagieren und nebenbei 
einen Timer laufen zu lassen?

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ... :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.