mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART Interrupt


Autor: Ignis Aureus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich möchte ein Programm erstellen, was mit mit einem PIC aus der 
Seriellen Schnittstelle vom PC Daten liest und sie über die I/O Ports an 
eine andere Schaltung weitergibt. Es handelt sich aber nicht um eine 1:1 
Weiterleitung, sondern der PIC ist Übersetzer zwischen PC und Schaltung. 
Nun meine Frage: Ich möchte während der PIC an die Schaltung sendet den 
Interrupt der UART deaktivieren, damit die Signale sauber übertragen 
werden. Wenn jetzt aber eine Byte im Empfangspuffer der UART ankommt und 
Interrupt ausgelöst werden würde passiert ja nichts, weil Int 
deaktiviert ist. Wird aber der Int noch ausgelöst, wenn ich ihn nachdem 
gesendet wurde wieder aktiviere, oder geht er dann einfach verloren. 
Polling wollte ich eigentlich nuzen, weil es schnell gehen soll.

Danke

Mfg. Ignis Aureus

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
komischer Ansatz, schreib dir doch ein Int-Programm, welches einen 
Buffer verwendet. Ein ankommendes Byte löst einen Interrupt aus, das 
Byte wird gelesen und in einen Buffer geschrieben. Zusätzlich wird eine 
Variable incrementiert, die anzeigt, wie viele Zeichen im Buffer liegen, 
ist dieser Wert größer Null, kannst du im Hauptprogramm die Bytes aus 
dem Buffer lesen. Zur Verwaltung benötigst du noch einen Schreib- und 
einen Lesepointer.

Autor: Ignis Aureus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja es geht aber darum, wenn ich durch die I/O Ports gerade eine 
Taktflanke anhebe und genau dann kommt der Interrupt, fällt vielleicht 
die Taktflanke wieder ab und das könnte zu kurz sein, sodass meine 
nachfolgende Schaltung das nicht versteht/nicht erkennt.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das etwa bei den PICs so, daß Interrupts die Ports direkt 
beeinflussen ?

Normalerweise muß man doch Interrupthandler so schreiben, daß sie das 
Hauptprogramm an jeder beliebigen Stelle unterbrechen können.


Bei den 8051-ern ist es auch so, daß die UART-Interrupts entsprechende 
Bits setzen. Somit wird auch ein Interrupt ausgelöst, wenn das Bit 
gesetzt wurde, bevor die globale Interruptfreigabe erfolgt.
Man darf die Interrupts nur nicht so lange sperren, daß auch bereits ein 
2. Byte empfangen wurde, dann ist das 2. Byte verloren.


Peter

Autor: Ignis Aureus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau das möchte ich ja wissen, ob das bei denen auch so ist.

Mfg. Ignis Aureus

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.