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 } }
vergessen: ganz am anfang hab' ich noch ein: //4 Mhz (interner Takt) -> 19200 Baud #define UART_SPEED 12
>INTERRUPT(SIG_UART_RECV)
Versuch es mal, indem du INTERRUPT durch SIGNAL ersetzt.
also SIGNAL(SIG_UART_RECV)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.