Forum: Mikrocontroller und Digitale Elektronik UART Interrupt Fehler


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Leopold N. (leo_n)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte per UART Zeichen an meinen PC senden.
Da es auch mehr Zeichen werden können, möchte ich das über einen 
Interrupt und einen Buffer realisieren.

Dazu habe ich mir dementsprechend Funktionen geschrieben.
Allerdings kommt es immer wieder zu Fehlern in der Übertragung, die ich 
trotz inzwischen wochenlanger Fehlersuche nicht gefunden habe.

Anbei der Code,
ich hoffe, es kann jemand helfen.

Grüße

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
@ Leopold N. (leo_n)

>Da es auch mehr Zeichen werden können, möchte ich das über einen
>Interrupt und einen Buffer realisieren.

Sinnvoll.

>Dazu habe ich mir dementsprechend Funktionen geschrieben.
>Allerdings kommt es immer wieder zu Fehlern in der Übertragung, die ich
>trotz inzwischen wochenlanger Fehlersuche nicht gefunden habe.

>Anbei der Code,
>ich hoffe, es kann jemand helfen.

Das Fragment allein reicht nicht. Aber man sieht, daß du da eher Unsinn 
machst. Erstens sendet man mit dem UDRE-Interrupt und 2. ist dein 
selbstgebastelter FIFO reichlich Quark. Man schaufelt nicht nach jedem 
Byte den gesammten FIFO-Inhalt um! Man verschiebt die Pointer! Das ist 
ja der "Trick" an Pointern! Siehe FIFO.

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
Such mal nach Peter Fleury's UART-Lib, da steckt ein echter FIFO drin.

von Karl M. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Leopold N. schrieb:
> Hallo,
>
> ich möchte per UART Zeichen an meinen PC senden.
> Da es auch mehr Zeichen werden können, möchte ich das über einen
> Interrupt und einen Buffer realisieren.
> Facebook
> Dazu habe ich mir dementsprechend Funktionen geschrieben.
> Allerdings kommt es immer wieder zu Fehlern in der Übertragung, die ich
> trotz inzwischen wochenlanger Fehlersuche nicht gefunden habe.
>
> Anbei der Code,
> ich hoffe, es kann jemand helfen.
>
> Grüße

Halllo,

da fehlt ja noch über 50% um es erfolgreich übersetzen im im Assembler 
Output analysieren zu können.

Was man aber als Fehler schon sieht, es gibt keinen TX Ringpuffer!
Dieser ist aber zwingend notwendig.

von Leopold N. (leo_n)


Bewertung
0 lesenswert
nicht lesenswert
Karl M. schrieb:
> Was man aber als Fehler schon sieht, es gibt keinen TX Ringpuffer!
> Dieser ist aber zwingend notwendig.

Nun gut,

das habe ich jetzt nicht extra alles rauskopiert gehabt,
das habe ich jetzt im Geiste vorausgesetzt.
Aber hier noch mal für dich:



#define USART_BAUDRATE 57600
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
#define UART_TX_BUFFER_LENGTH 100

volatile uint8_t uart_tx_buff[UART_TX_BUFFER_LENGTH];
volatile uint8_t uart_tx_pointer = 0;

von Karl M. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Leopold N. schrieb:
> Aber hier noch mal für dich:
>
> #define USART_BAUDRATE 57600
> #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
> #define UART_TX_BUFFER_LENGTH 100
>
> volatile uint8_t uart_tx_buff[UART_TX_BUFFER_LENGTH];
> volatile uint8_t uart_tx_pointer = 0;

Danke,

der erste mal!

Was steht denn in der UART.h?

Peter Dannegger (peda) hat auch einen sehr effizienten Code mit RX-/ 
TX-Fifo geschrieben.
Denn könnte man sich mal ansehen.

Ich verwende ihn schon ca. 10 Jahre.

von Leopold N. (leo_n)


Bewertung
0 lesenswert
nicht lesenswert
Karl M. schrieb:
> Was steht denn in der UART.h?

Wo siehst du eine UART.h Datei?

von S. Landolt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Fehlern in der Übertragung
Welcher Art?

Was passiert, wenn zwischen
1
uart_tx_buff[uart_tx_pointer] = data;
2
uart_tx_pointer++;
der TXC-Interrupt auftritt?

von Leopold N. (leo_n)


Bewertung
0 lesenswert
nicht lesenswert
S. Landolt schrieb:
> Was passiert, wenn zwischenuart_tx_buff[uart_tx_pointer] = data;
> uart_tx_pointer++;
> der TXC-Interrupt auftritt?

Stimmt,
das könnte ein Fehler sein.

Fehler der Art,
dass einzelne Zeichen verschluckt werden.

Grüße

von S. Landolt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Okay, das passt dann zusammen; wenn auch, vermutlich, eher selten.

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]
  • [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.