uart interrupt enable Problem

Gast #874838
Lesenswert?
• ▲
▼
Hallo Leute.

Ich habe folgendes Problem:
Ich will den uart-reception-complete interrupt aktivieren.
Aber irgendwie klappt das nicht.

VIelleicht sehe ich ja auch den Wald vor lauter Bäumen nicht.

Die Initialisierung:
1
void  init_comm  (  void  )
2
{
3
//-- hardware initialisation ----------
4
  DDRD    |= (1<<PD3)|(0<<PD2);
5
  UBRR1H  =  0;
6
  UBRR1L  =  25;  //38,4kBaud@16MHz
7
  UCSR1B |=  (1<RXCIE1)|(1<<RXEN1)|(1<<TXEN1);
8
  UDR1   =   0x12;          // <= DAS KOMMT IM TERMINAL AN
Mit
1
UDR1 = 0x01;
kann ich senden. Das empfange ich im Terminal => Baudrate ok.
Die ISR wird nie angesprungen, weil PB5 nicht toggelt. (PB ist Ausgang)
Andere ISRs arbeiten zuverlässig.
1
ISR ( USART1_RX_vect )
2
{
3
  UDR1  =   UDR1;
4
  PORTB ^= (1<<PB5);
5
  ..
6
}
Schreibe ich allerdings in die main, in das while(1) folgendes, und 
lasse das (1<RXCIE1) weg, funktioniert es jedenfalls: (Was ich sende, 
empfange ich wieder über das Terminal)
1
while(1)
2
{
3
  if ( UCSR1A & (1<<RXC1) )
4
  {
5
    UDR1  =  UDR1;
6
    PORTB ^= (1<<PB5);
7
  }
8
 ...


Aber warum geht der INT nicht?? Es kommt mir so vor, als ob der nicht 
freigeschaltet wird. Aber was mace ich falsch...?
DIe Zeile
1
  UCSR1B |=  (1<RXCIE1)|(1<<RXEN1)|(1<<TXEN1);
ist doch korrekt, oder??

Hat jemand eine Idee?

PS: Codeschnipsel sind herein kopiert
Gast #874869
Lesenswert?
• ▲
▼
Sorry, ist ein mega128. Die 103C-Fuse ist auch abgeschaltet.

Der Vektorname ist direkt aus der iom128.h herauskopiert:
(Auszug)
1
/* USART1, Rx Complete */
2
#define USART1_RX_vect      _VECTOR(30)
3
#define SIG_USART1_RECV      _VECTOR(30)
4
#define SIG_UART1_RECV      _VECTOR(30)

Ich denke mal, wenn der Vektor falsch zeigt, dann würde er wohl 
abstürzen, aber andere INTs arbeiten

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