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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren