mikrocontroller.net

Forum: Compiler & IDEs AT90CAN 128 CAN-Schnittstelle


Autor: Kosta (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, versuche seit Wochen die CAN Schnittstelle eines AT90CAN128 zu
programmieren. Der Daten Empfang via Interrupt klappt aber nicht. Es
scheint so , dass der Interrupt zwar ausgelöst wird, der
Programmcounter aber in einen undefinierten Speicherbereich zeigt und
nicht zur ISR springt. Nach einer Zeit laüft das Programm von vorne.
Vielleicht hat jemand eine Idee. Ich benutze WinAvr für Windows mit GCC
3.4.3

Danke im voraus

Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn Du die fertigen Routinen von Atmel benutzt liegt es daran, dass der
Interruptvector an die falsche Stelle zeigt.

Autor: Kosta (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
hatte auch shcon die Vermutung. Lässt sich das denn irgendwie beheben?

Autor: Werner A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
datenblatt lesen...

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-> Codesammlung

Die Probleme hatte schon jemand anders :)

Autor: Kosta (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

nach dem Datenblatt sollte eigentlich alles richtig sein, habe auch
hier im Forum mehrere Beispiele angesehen nützte mir aber trotzdem
nichts. Der Interrupt wird ausgelöst aber die Serviceroutine nicht
aüsgeführt. Hat jemand vielleicht eine konkrete Lösung oder geht das
nur über Polling?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Interrupt wird ausgelöst aber die Serviceroutine nicht aüsgeführt"

Erklär mir mal bitte, wie du das diagnostiziert hast?

Und zeige einfach deinen Code!

Autor: Kosta (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Interrupt wird ausgelöst aber die Serviceroutine nicht aüsgeführt"

Erklär mir mal bitte, wie du das diagnostiziert hast?


Ich habe zwei CAN Knoten, die miteinander kommunizieren sollen. Ein
Knoten läuft im Moment als Sender und sendet ununterbrochen. Der andere
soll als Empfänger funktionieren. Wenn ich Polling benutze, funktioniert
das ganze, der Interrupt aber nicht. Mein Hauptprogramm ist im Moment
nur eine Endlosschleife.Ich benutze AVR Studio mit MK2 JTAGE zur
Emulation. Dabei kann ich sehen, dass wenn der Sendeknoten nicht
sendet, bleibt das Programm in der Endlosschleife. Sobald er anfängt zu
senden, springt das Programm aus der Endlosschleife raus, springt aber
nicht zu der ISR. Das kann man sehen, indem man die Emulation stoppt.
Man sieht dann, an welcher Stelle im Programm man sich befindet. Den
Quellcode habe ich hier aus dem Forum runtergeladen. Es gab hier einen
Beitrag zu AT90CAN128 mit einer zip Datei. Ich glaube das hieß
AT90CAN128_senden.zip. Da gab es mehrere Routinen aber die scheinen
nicht zu funktionieren. Ich benutze den GCC 3.4.3 und WinAvr. Ich habe
hier einige Beiträge gesehen aber nirgendwo gab es eine Lösung, ausser
Polling. Liegt es vielleicht am Compiler? Wenn jemand helfen kann,
würde ich mich sehr freuen.

Gruß und Danke:)

Autor: hebel23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für solche Sachen gibts eigentlich den "SIGNAL(__vector_default)", wo
der Programmcounter dann hinspringt, falls der Interruptvektor falsch
ist oder vergessen wurde.
So kommt es zumindest nicht zu undefinierten Programmsprüngen.

Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe es über polling gelöst. Die informationen die ich verschicke
ändern sich nicht so oft da ist es nicht ganz so wichtig ob mal eine
Info verloren geht. Außerdem habe ich ja 14 Mailboxen (oder waren es
15?) da habe ich viel Platz. Die Sache mit dem Interrupt war mir zu
hakelig, weil es scheinbar nur einen interrupt für alle 14 Boxen gibt
und ich hätte eine irre lange Routine produziert um rauszubekommen wer
jetzt den Interrupt ausgelöst hat.
So schaue ich jetzt mal alle Nase lang nach ob was war, immer wenn sich
das Programm "langweilt".

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.