UART Senden Mega32

Gast #1836710
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:
1
ISR(USART_TXC_vect) {
2
  unsigned char tmptail;
3

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

16
void uart_init(void) {
17

18
    UART_RxHead = 0;
19
    UART_RxTail = 0;
20
    UART_TxHead = 0;
21
    UART_TxTail = 0;
22
    UCSRB |= (1<<RXEN) | (1<<RXCIE) | (1<<TXEN);
23

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

26
    UBRRH = UBRR_VAL >> 8;
27
    UBRRL = UBRR_VAL & 0xFF;
28

29
}
30

31

32
void uart_putc(unsigned char data)
33
{
34
    unsigned char tmphead;
35

36

37
    tmphead  = (UART_TxHead + 1) & UART_TX_BUFFER_MASK;
38

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

43
    UART_TxBuf[tmphead] = data;
44
    UART_TxHead = tmphead;
45

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

49
}
50

51
void uart_puts(const char *s )
52
{
53
    while (*s)
54
      uart_putc(*s++);
55

56
}
57

58

59
void uart_puts_p(const char *progmem_s )
60
{
61
    register char c;
62

63
    while ( (c = pgm_read_byte(progmem_s++)) )
64
      uart_putc(c);
65

66
}

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

Antwort schreiben

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.

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.