Hallo,
angenommen der uC (8051) ist gerade dabei eine massage über die serielle
schnittstelle zu senden...
Darf ein externer interrupt in dann unterbrechen und er sendet dann ganz
normal wieder weiter.
Ich ändere in der isr nur ein flag das nichts mit dem uart bzw. der
baudrate zu tun hat.
for( uc_i=0; uc_i<=27 ; uc_i++){
SBUF=uc_massage[uc_i];
while( TI == 0);
TI_bit = 0;
}
Darf unterbrochen werden wenn er hier drin steckt?
Sobald du SBUF = uc_message[uc_i]; ausgeführt hast, wird die Hardware der UART loslegen und die Bits versenden. Ein Interrupt wird diesen Vorgang nicht unterbrechen. Der Programmablauf an sich wird natürlich unterbrochen. D.h. wenn deine Interruptroutine zu lange dauert, werden die Pausenzeiten zwischen dem Versenden der einzelnen DatenBytes entsprechend verlängert. Deswegen sollte man die INterruptroutinen so kurz wie möglich halten. Also z.B. keine Displays ansteuern oder Delays verwenden.
marten schrieb: > Darf unterbrochen werden wenn er hier drin steckt? Das musst du wissen. Du musst abklären, ob deine Anwendung ab und zu ein kurzes "Ruckeln" in der Übertragung verträgt... Normalerweise lautet die Antwort darauf: Ja.
marten schrieb: > Darf unterbrochen werden wenn er hier drin steckt? 1. Ein UART sendet ein ganzes Zeichen unabhängig vom Prozessor, i.a. steht das nächste auch schon im Senderegister bereit, es ist also fast 2 Zeichen lang Zeit, bevor ein weiteres Zeichen ins UART geschrieben werden sollte. 2. Reicht das nicht, entsteht eine Pause zwischen Zeichen, aber das ist bei asynchroner Übertragung ja zulässig. Ein Problem entsteht erst, wenn die Gegenseite wegen Timeout abschaltet, aber dazu muss die Pause länger als einige Zeichenlängen sein, i.a. weit mehr als 1 ms. 3. ISRs müssen schnell abgearbeitet werden, i.a. unter 1 ms. Fazit: es kann nichts passieren, wenn nicht die ISR viele ms zur Ausführung braucht, das ist aber sowieso immer ein Programmierfehler. Georg
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.