Hallo allerseits, ich stehe vor dem Problem dass ich Zeichen mittels UART empfangen und auswerten möchte. Nachdem nun nichts funktioniert hatte und ich nicht mehr weiter wusste habe ich ein kurzes Test-Programm geschrieben, das nichts anderes tun soll als einen Zähler hoch zu zählen sobald ein Zeichen kommt. Doch leider geht das Programm einfach nicht in die ISR rein. Laut Debugger ist das Receive Complete bit gesetzt und das global interrupt enable Bit im SREG wird gelöscht. Nachdem ein Zeichen kam springt er immer zum Programmbeginn und hängt sich auf. Mein Quelltext sieht wie folgt aus:
1 | #include <avr/io.h> |
2 | #include <stdlib.h> |
3 | #define F_CPU 14745600
|
4 | #define BAUD 9600
|
5 | #include <util/setbaud.h> |
6 | #include <string.h> |
7 | #include <inttypes.h> |
8 | #include <math.h> |
9 | #include <avr/interrupt.h> |
10 | #include <util/delay.h> |
11 | |
12 | void uart_init(void); |
13 | |
14 | volatile char counter=0; |
15 | |
16 | int main (void){ |
17 | DDRA=0xff; |
18 | sei(); |
19 | uart_init(); |
20 | while(1){ |
21 | PORTA=counter; |
22 | _delay_ms(500); |
23 | }
|
24 | return 0; |
25 | };
|
26 | |
27 | ISR(USART0_RXC_vect){ |
28 | cli(); |
29 | counter++; |
30 | sei(); |
31 | }
|
32 | |
33 | |
34 | void uart_init(void){ |
35 | UBRR0H = UBRRH_VALUE; |
36 | UBRR0L = UBRRL_VALUE; |
37 | |
38 | // Asynchron 8N1
|
39 | UCSR0C = (1<<UCSZ01)|(1<<UCSZ00); |
40 | // UART RX und RX-Interrupt einschalten
|
41 | UCSR0B |= (1<<RXEN0)|(1<<RXCIE0); |
42 | }
|
Vielen Dank schonmal...