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
> 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.
> 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?
Wenn Daten reinkommen und das Empfangsregister noch nicht ausgelesen wurde, wird das natürlich gnadenlos überschrieben.
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?
Davon würde ich ausgehen. Am besten noch mal im User Guide nachlesen. Da sollte sowas eigentlich auch drin stehen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.