www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Nach ISR() dauerreset


Autor: Carsten (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
../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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Carsten schrieb:
> Leider nein, die iom2561.h hat nicht eine definition für Vektoren
> enthalten,

ziemlich am Beginn von iom2561.h steht die Zeile
#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).

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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_...

Da findest du auch alle für den Mega2561.

Oliver

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.