www.mikrocontroller.net

Forum: Compiler & IDEs UART Senden Mega32


Autor: Mega32 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte mit einem Mega32 etwas über den UART senden. Das Empfangen 
klappt schon. Ich habe in Auszügen die Lib von Peter Fleury verwendet. 
Sobald ich etwas senden will stürzt der Controller ab. Hier die 
relevanten Stellen:
ISR(USART_TXC_vect) {
  unsigned char tmptail;

    if ( UART_TxHead != UART_TxTail) {
        /* calculate and store new buffer index */
        tmptail = (UART_TxTail + 1) & UART_TX_BUFFER_MASK;
        UART_TxTail = tmptail;
        /* get one byte from buffer and write it to UART */
        UDR = UART_TxBuf[tmptail];  /* start transmission */
    }else{
        /* tx buffer empty, disable UDRE interrupt */
      //UCSRB &= ~_BV(UDRIE);
      UCSRB &= ~(1<<UDRIE);
    }

void uart_init(void) {

    UART_RxHead = 0;
    UART_RxTail = 0;
    UART_TxHead = 0;
    UART_TxTail = 0;
    UCSRB |= (1<<RXEN) | (1<<RXCIE) | (1<<TXEN);

    UCSRC |= (1<<URSEL)|(3<<UCSZ0);

    UBRRH = UBRR_VAL >> 8;
    UBRRL = UBRR_VAL & 0xFF;

}


void uart_putc(unsigned char data)
{
    unsigned char tmphead;


    tmphead  = (UART_TxHead + 1) & UART_TX_BUFFER_MASK;

    while ( tmphead == UART_TxTail ){
        ;/* wait for free space in buffer */
    }

    UART_TxBuf[tmphead] = data;
    UART_TxHead = tmphead;

    /* enable UDRE interrupt */
    UCSRB    |= (1<<UDRIE);

}

void uart_puts(const char *s )
{
    while (*s)
      uart_putc(*s++);

}


void uart_puts_p(const char *progmem_s )
{
    register char c;

    while ( (c = pgm_read_byte(progmem_s++)) )
      uart_putc(c);

}

Ich vermute es stimmt irgendeine Einstellung nicht. Die Lib ist ja nicht 
von mir und ist denke ich auch ausgiebig getestet wurden. 
Baudratenfehler etc. kann ich auch ausschließen, da ich ja via UART 
empfangen kann. Vlt. sieht einer von euch ja auf anhieb, ob ich eine 
Einstellung vermehrt habe.
Vielen Dank

Autor: Mega32 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:

ich habe gerade versucht herauszufinden, wo sich der Controller 
aufhängt:
    /* enable UDRE interrupt */
    UCSRB    |= (1<<UDRIE);

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und was heisst bitte "aufhängen" in dem Zshg.?

Autor: Mega32 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, das nichts mehr geht. Ich habe ein Display dran, und nach diesem 
Befehl wird nichts mehr ausgegeben bzw. das Display flackert nur noch.

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mega32 schrieb:
> ich habe gerade versucht herauszufinden, wo sich der Controller
> aufhängt:
>     /* enable UDRE interrupt */
>     UCSRB    |= (1<<UDRIE);

hast du eine ISR dafür?
:-)

Autor: Mega32 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, aber ich vermute, ich habe die falsch benannt:
ISR(USART_TXC_vect) {


Autor: Mega32 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok ich glaube es muss USART_UDRE_vect heißen...

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.