UART Interrupt Fehler

OP #5606693
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
Angehängte Dateien:
#5606698
@ 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.
Gast #5606701
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.
OP #5606702
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;
Gast #5606712
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.
Gast #5606732
> 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?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.