Hallo, ich beschäftige mich zurzeit mit UART und einem ATmega2561 (mit 16MHz). Die Funktion des UARTS und das setzen der Bits bereitet mir nun keine schwierigkeiten mehr, dafür aber nun der ISR(). Da ich in einem Projekt von Holger Klabunde die serial.c und serial.h gesehen habe und diese genau das enthalten, was ich möchte, habe ich versucht das ganze auf meinen ATmega2561 zu portieren. Leider ohne erfolg, der ISR() löst ständig einen reset aus. In der *.lss wird mehrmals "0x10e <__bad_interrupt>" angezeigt. Leider kann ich den Grund dafür nicht finden. Wie im Tutorial beschrieben habe ich den iom2561.h entprechend ergänzt, damit SIG_UART1_TRANS dem Vector 39 zugewiesen wird. Der Compiler warnt auch nicht an dieser Stelle. Könnt ihr mir da weiterhelfen? Ich sehe meinen Fehler leider nicht oder besser gesagt ich verstehe nicht. Gruß Carsten
Da wird ein Interrupt ausgelöst, für den es keine ISR gibt. Entweder hast du den falschen Interrupt freigegeben, oder die ISR falsch benannt. Prüf das nochmals nach. Carsten schrieb: > In der *.lss > wird mehrmals "0x10e <__bad_interrupt>" angezeigt. Das allerdings soll so sein. Alle Vektoren, die keine ISR zugeordnet haben, bekommen __bad_interrupt. Wenn in der Tabelle gar kein anderer Vektor eingetragen ist, dann ist deine ISR-Bezeichnung falsch. Oliver
../serial.c:34: warning: 'SIG_UART1_RECV' appears to be a misspelled signal ../serial.c:45: warning: 'SIG_UART1_TRANS' appears to be a misspelled signal Die heissen SIG_USART1_RECV SIG_USART1_TRANS
Falls es immer noch einen geben sollte, der verschlafen hat, wie die Interruptvektoren beim AVR-GCC heißen: - gehe ins Datenblatt 14.1 Interrupt Vectors in ATmega640/1280/1281/2560/2561 - Copy&paste die gewünschte Source "USART0 RX" - ersetze Leerzeichen durch "_" "USART0_RX" - hänge "_vect" ran "USART0_RX_vect" - fertig. Peter
Hallo, ich komme erst heute Abend dazu es erneut zu testen aber schonmal danke für die Hinweise und Hilfe. @Peter Ob es da etwas verschlafe habe kann ich nicht sagen. Ich habe mir aus dem Datenblatt die Vektornummer gesucht und das Tutorial studiert und die iom8.h als Vorlage genommen, in die iom2561.h entsprechende Zeilen kopiert und die Vektornummer angepast. Heute Abend werde ich mir das nochmal genauer anschauen und werde ich notfalls weiter mit meinen Fragen quälen ;) Gruß Carsten
Carsten schrieb: > die iom8.h als Vorlage genommen, in die iom2561.h entsprechende Zeilen > kopiert und die Vektornummer angepast. Das war überhaupt keine gute Idee. Für den mega2561 sind alle Vectoren, die dieser kennt, da schon richtig drin. Das sind andere, als beim Mega8, das ist halt ein anderer Prozessor, da musst du dein Programm entsprechend anpassen. Oliver
Hallo Oliver, >Für den mega2561 sind alle Vectoren, die dieser kennt, da schon richtig >drin. Leider nein, die iom2561.h hat nicht eine definition für Vektoren enthalten, d.h. mein Idee mit copy and paste. Die Datei enthielt nur einige definitionen zur Signatur des Controllertyps, an den Rest kann ich mich nicht entsinnen. Kann es sein das ich die richtige Datei am falschen Ort editiert habe? Ich hängte die Datei heute Abend mit an, dann erklärt sich vieleicht schon alles. Gruß Carsten
Carsten schrieb: > Leider nein, die iom2561.h hat nicht eine definition für Vektoren > enthalten, ziemlich am Beginn von iom2561.h steht die Zeile
1 | #include <avr/iomxx0_1.h> |
was diese Datei enthält, brauche ich wohl nicht auszuschmücken. Aber noch einfacher wäre ein Blick in die Dokumentation zur avr-libc gewesen (es empfiehlt sich sowieso, die bereit zu haben).
Carsten schrieb: > Kann es sein das ich die richtige Datei am falschen Ort editiert habe? Das wird wohl so sein. Lass die System-Header besser in Ruhe. Hier gibts die Doku zur den für alle AVR's in der avrlibc definierten Interrupt-Vektoren: http://avr-libc.nongnu.org/user-manual/group__avr__interrupts.html Da findest du auch alle für den Mega2561. Oliver
Hallo, danke für die Hinweise. Nachdem ich die ursprüngliche iom2561.h wieder hergestellt habe und mir die iomxx0_1.h genauer angeschaut habe, verstehe ich nun meinen Fehler. Die Vektoren SIG_USART1_RECV und SIG_USART1_TRANS habe ich sinngemäß eingetragen und siehe da -> alles läuft. Die Dokumentation zur avrgcc-lib muss ich mir dann auch mal genauer anschauen. Vielen dank für eure ausdauernde Hilfe. Gruß Carsten
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.