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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren