senden des UART unterbrechen

Gast #4000604
Lesenswert?
• ▲
▼
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?
#4000751
Lesenswert?
• ▲
▼
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.
Gast #4000783
Lesenswert?
• ▲
▼
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.