Forum: Compiler & IDEs Mega8 UART, stürzt beim Empfangen ab


von Levin (Gast)


Lesenswert?

Hi,

Ich weiß nicht mehr weiter. Ich versuche meinen Mega8 via UART Daten
vom PC empfangen zu lassen. Jedoch scheint er "abzustürzen" (*)
sobald ich ein einziges Zeichen sende.

(*) Externe Interrupts funktionieren nicht mehr und der Main-Loop wird
nicht weiter ausgeführt. PWMs arbeiten aber weiter (testweise
angeschlossene LEDs bleiben gedimmt)

Es sieht so aus, als würde der Recieve-Interrupt nicht gefunden werden
(wenn ich ihn weglasse gibt es die gleichen Symptome) aber ich finde
meinen Fehler nicht. Argh!

Ich benutze einen avr-gcc (3.3 20030512) auf Debian Linux.

Danke für alle Hinweise,
Levin

Das sind die wesentlichen Codeschnipsel:
---------------------
INTERRUPT(SIG_UART_RECV)
{
  sbi(PORTB, PINB0); //Debug: LED anschalten (wird nie ausgeführt)
  unsigned char b = UDR; //Byte aus RX-Buffer lesen
}

void init(void)
{
  sbi(PORTB, PINB0); //B0 als Ausgang definieren
  //ein paar weggeschnittene PWM-Definitionen, (funktionieren)
  //externe Interrupts aktiviert (funktioniert einwandfrei)

  //UART
  outb(UBRRH, UART_SPEED>>8); //Baudrate
  outb(UBBRL, UART_SPEED);
  sbi(UCSRB, RXEN); //Recieve Enable
  //Wenn die folgende Zeile fehlt stürzt nix ab
  sbi(UCSRB, RXCIE); //Recieve Interrupt Enable
}

int main(void)
{
  init();
  while(1)
  {
    //PWM-Ausgänge blinken lassen und ein paar Delays
  }
}

von Levin (Gast)


Lesenswert?

vergessen:
ganz am anfang hab' ich noch ein:

//4 Mhz (interner Takt) -> 19200 Baud
#define UART_SPEED 12

von Malte Marwedel (Gast)


Lesenswert?

>INTERRUPT(SIG_UART_RECV)

Versuch es mal, indem du INTERRUPT durch SIGNAL ersetzt.
also SIGNAL(SIG_UART_RECV)

von Levin (Gast)


Lesenswert?

Ah, das war zu einfach.
Dankeschön!
Jetzt gehts.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.