UART überträgt nach Interrupt=enable nichts mehr

OP #5969739
Lesenswert?

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
}
Angehängte Dateien:
Gast #5970361
Lesenswert?

War wohl eher die völlig fehlende Interruptroutine.
Der Compiler schreibt auf alle Interruptvektoren, für die Du keine 
Funktion bereit stellst die Adresse einer Verlegenheitsfunktion. Die 
bewirkt einen Neustart.

Siehe Doku interrupt.h :
"If an unexpected interrupt occurs (interrupt is enabled and no handler 
is installed, which usually indicates a bug), then the default action is 
to reset the device by jumping to the reset vector."

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