Forum: Mikrocontroller und Digitale Elektronik MSP und 2x UART IE


von Ahnungsloser (Gast)


Lesenswert?

Hi,
ich wollte mal eine Grundsätzliche Frage zum MSP430 stellen, ich bin mir 
nämlich nicht sicher wie in diesem Beispiel ein MSP reagieren wird:

Der MSP hat ja zwei voneinander unabhängige UARTs, wenn nun zeitgleich 
mit beiden UARTs Daten empfangen werden, welcher wird dann priorisiert? 
bzw. was passiert wenn ich gerade in der Interruptroutine des einen Uart 
bin, und es kommt der Interrupt des anderen UARTs - normaler Weise 
müsste der MSP doch zuerst die Interruptroutine des einen UART fertig 
abarbeiten und dann in den zweiten springen, richtig?
Kann da "etwas" verloren gehen?
Wie sieht es aus wenn in den Interrupt sperre und währenddessen wird im 
UART etwas empfangen - springt das Programm dann sofort nach wieder 
erfolgent Freigabe in den Interrupt oder habe ich dieses empfangene Byte 
dann verloren weil der IE ja gesperrt war?

anke für Eure Hilfe

von Jörg S. (Gast)


Lesenswert?

> wenn nun zeitgleich mit beiden UARTs Daten empfangen werden, welcher
> wird dann priorisiert?
UART0 hat wesentlich höhere Priorität gegenüber UART1 (siehe Datenblatt 
S.13)

> normaler Weise müsste der MSP doch zuerst die Interruptroutine des
> einen UART fertig abarbeiten und dann in den zweiten springen, richtig?
Normalerweise müsste der Interrupt mit der höheren Priorität den 
Interrupt unterbrechen.

> Wie sieht es aus wenn in den Interrupt sperre und währenddessen wird im
> UART etwas empfangen - springt das Programm dann sofort nach wieder
> erfolgent Freigabe in den Interrupt oder habe ich dieses empfangene Byte
> dann verloren weil der IE ja gesperrt war?
Er wird hinspringen, aber ob was verlohren gegangen ist, ist eine ganz 
andere Frage.

von Ahnungsloser (Gast)


Lesenswert?

> Er wird hinspringen, aber ob was verlohren gegangen ist, ist eine ganz
> andere Frage.

Es ist also durchaus möglich, dass etwas verloren geht, wenn ich während 
eines gesperrten IE etwas im UART empfange?

Ich muss dazu sagen dass ich den IE vielleicht für 300µs sperre - bei 
190kb können das im worst case auch mehrere Bytes sein die in dieser 
Zeit rein kommen - nach Freigabe des IE ist ja logischer Weise nur das 
letze Byte noch vorhanden - kann vlt. hier etwas schief gehen wenn schon 
Daten im Empfangsregister sind und dieses noch nicht ausgelesen wurde, 
bevor neue Daten empfangen werden?

von Jörg S. (Gast)


Lesenswert?

Wenn Daten reinkommen und das Empfangsregister noch nicht ausgelesen 
wurde, wird das natürlich gnadenlos überschrieben.

von Ahnungsloser (Gast)


Lesenswert?

ja ist klar, aber kann es sein dass was verloren geht?

von Ahnungsloser (Gast)


Lesenswert?

achso, bevor mißverständnisse aufkommen - mit verloren gehen meine ich, 
dass das zuletzt empfangene Byt doch immer korrekt im register stehen 
muss.
Klar, wenn das vorhergehende Byt mit dem aktuellen überschrieben wird, 
ist es weg, aber das aktuelle Byte MUSS dann doch richtig im buffer 
stehen, oder?

von Jörg S. (Gast)


Lesenswert?

Davon würde ich ausgehen. Am besten noch mal im User Guide nachlesen. Da 
sollte sowas eigentlich auch drin stehen.

von Jan F. (eisbaer)


Lesenswert?

Hallo,

hast Du noch I/O Pins zur freien Verfügung über? Dann könntest Du ja 
eine Hardware-Flow-Control realisieren sofern die Gegenstelle über 
soetwas verfügt. Während die eine Interrupt-Routine läuft wird die 
andere serielle Schnittstelle per RTS auf "Senden nicht erlaubt" gesetzt 
und erst am Ende der Interroupt-Routine wird das Senden wieder frei 
gegeben.

Jan!

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.