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