Forum: Mikrocontroller und Digitale Elektronik UART Interrupt


von Ignis Aureus (Gast)


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

von crazy horse (Gast)


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.

von Ignis Aureus (Gast)


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.

von Peter D. (peda)


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

von Ignis Aureus (Gast)


Lesenswert?

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

Mfg. Ignis Aureus

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.