AT90CAN CAN Interrupts löschen/Problem mit ISR

OP #2551817
Lesenswert?
• ▲
▼
Hallo,

ich bin gerade dabei mein erstes AVR-Projekt zu schreiben. U.a. will ich 
im 100ms-Takt 2 CAN-Botschaften versenden und eine eingehende Botschaft 
empfangen und die enthaltenen Daten auswerten.
Das Senden erfolgt in der CAN-Overtime ISR (der CAN-Timer läuft nach 
100ms über). Das Empfangen wird über die allg. CAN-ISR abgearbeitet.

Nun ist es so, dass bei einer empfangenen Nachricht die Bits im CANSIT 
für das entsprechende MOb und das General Interrupt Flag im CANGIT 
gesetzt werden. Die ISR wird ausgelöst. Soweit so gewollt. Nach 
bearbeiten des MObs kommt das RXOK Flag, welches mit einer 
Read-Modify-Write-Routine wieder gelöscht wird.

Leider beiben die Interrupts in CANGIT und CANSIT weiter bestehen und 
werden nicht gelöscht. Daher springt das Programm nach Beendigung der 
ISR sofort wieder zurück in den Anfang. Die ISR wird ca. 200-300 
durchlaufen, dann werden die Flags gelöscht. Dieser Aufruf funktioniert 
nur jedes 2. Mal.

Die Overtime-ISR wird 2 mal durchlaufen und springt danach an den Anfang 
der main-Funktion.
Als Basis dient mir die CAN-lib von Marco Glietsch (mg-programmer).

Die CAN-Kommunikation hatte schon funktioniert, bis ich den ADC 
dazuprogrammiert habe. Beeinflussen sich da Interrupts? Ich versuche da 
jetzt seit 2 Tagen rum und bin Ideenlos.

Wenn jemand Ideen hat (ich bin bereit alles auszuprobieren) oder gar die 
Muße hat in den Code zu schauen, wäre ich sehr dankbar.

Bis denne

Erik
Angehängte Dateien:
OP #2552314
Lesenswert?
• ▲
▼
Hab die Lösung gefunden. Nach einer letzten debugging session fiel mir 
auf, dass das RXOK bit in der allg. CAN-ISR zurückgesetzt wird, bevor 
ich das Bit aktiv setze. Wenn man die Read-Modify-Write-Routine 
ausführt, bevor dort Daten gesendet werden, funktioniert alles tadellos.

Trotzdem danke an das Forum. Mir wurde hier als passiver Mitleser schon 
viel weitergeholfen.

Bis denne

Erik

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.