Forum: Compiler & IDEs AT90CAN CAN Interrupts löschen/Problem mit ISR


von Erik L. (harqa)


Angehängte Dateien:

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

von Erik L. (harqa)


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

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
Noch kein Account? Hier anmelden.