Guten Abend,
auf einem ATMega8, der mit 1 Mhz internem Clock läuft, habe ich einen
UART konfiguriert, welcher soweit sogut läuft bis ich das RX-Interrupt
Bit setze:
UCSRB |= (1<<RXCIE);
Sobald dies gesetzt ist, erfasse ich in hterm keinerlei Lebenszeichen
mehr vom UART. Kommentiere ich die o.g. Registerbeschreibung für den
Interrupt aus, so läuft alles wunderbar.
Hier mein VOLLSTÄNDIGES Test-Programm:
Ich kann mir das Verhalten nicht erklären, hat jemand einen
Lösungsansatz für mich?
1 | /*
|
2 | * test_loeschen.c
|
3 | *
|
4 | * Created: 11.09.2019 22:29:37
|
5 | *
|
6 | */
|
7 |
|
8 | #define F_CPU 1000000UL
|
9 | #include <avr/io.h>
|
10 | #include <avr/interrupt.h>
|
11 | #include <util/delay.h>
|
12 |
|
13 | void uart_putc( unsigned char data )
|
14 | {
|
15 | while ( !( UCSRA & (1<<UDRE)) )
|
16 | ;
|
17 | UDR = data;
|
18 | }
|
19 |
|
20 | int main(void)
|
21 | {
|
22 | #define BAUD 9600
|
23 | unsigned int ubbr = F_CPU/8/BAUD-1;
|
24 |
|
25 | UBRRH = (unsigned char)(ubbr>>8);
|
26 | UBRRL = (unsigned char)ubbr;
|
27 | UCSRB |= (1<<RXEN)|(1<<TXEN);
|
28 | UCSRB |= (1<<RXCIE);
|
29 | UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
|
30 | UCSRA |= (1<<U2X);
|
31 |
|
32 | sei();
|
33 |
|
34 | /* Replace with your application code */
|
35 | while (1)
|
36 | {
|
37 | uart_putc(5);
|
38 | }
|
39 | }
|